نظام إدارة محتوى بدون رأس + PolyLingo

متعدد اللغات لأنظمة إدارة المحتوى بدون رأس.

منح Polylang مواقع WordPress سير عمل متعدد اللغات كامل. يجلب PolyLingo هذا السير إلى Sanity وContentful وWebflow وFramer وكل نظام إدارة محتوى بدون رأس آخر — من خلال REST API يتكامل في فترة بعد الظهر.

Sanity
مثال تكامل كامل
Contentful
مثال تكامل كامل
Webflow
مثال تكامل كامل
30
اللغات المستهدفة

متعدد اللغات في أنظمة إدارة المحتوى بدون رأس مشكلة لم تُحل.

يحتوي Sanity على إضافة التدويل. يحتوي Contentful على المواقع. لكن لا أحد منهما يترجم المحتوى الخاص بك — فقط يخزنونه بلغات متعددة. ملء تلك المواقع اللغوية لا يزال عملية يدوية. تصدير المحتوى الإنجليزي، تشغيله عبر أداة ترجمة تكسر نصك الغني أو هيكل JSON، إصلاح الناتج، استيراده مرة أخرى، التكرار لكل لغة. بالنسبة لفريق محتوى نشط ينشر بانتظام، هذا السير لا يتوسع. كما أنه غير موجود لمعظم الإعدادات الأصغر، مما يعني أن المحتوى لا يُترجم أبداً.

تفصل بنية نظام إدارة المحتوى بدون رأس إدارة المحتوى عن توصيل المحتوى. هذا جيد للمرونة. لكنه يخلق فجوة: النظام يخزن المتغيرات اللغوية، لكن لا شيء يملأ تلك المتغيرات بمحتوى مترجم. عليك بناء تلك الطبقة بنفسك.

ينتهي الأمر بمعظم الفرق في واحدة من حالتين: يترجمون المحتوى يدوياً بنسخه إلى DeepL ولصقه مرة أخرى (بطيء، عرضة للأخطاء، لا يتوسع)، أو يكتبون تكاملاً مخصصاً مع API ترجمة يجب عليهم صيانته إلى أجل غير مسمى. لا أحدهما جواب جيد. PolyLingo هو خيار ثالث نظيف.

PolyLingo هو طبقة الترجمة التي يفتقدها نظام إدارة المحتوى الخاص بك.

يتكامل PolyLingo مباشرة مع سير عمل نشر نظام إدارة المحتوى الخاص بك. قم بإعداد webhook يُطلق عند نشر المحتوى، مرر المحتوى إلى PolyLingo، استلم النسخ المترجمة لكل لغة، واكتبها مرة أخرى إلى نظام إدارة المحتوى الخاص بك. بالنسبة لـ Sanity، هذا بضعة أسطر في إجراء خادم. بالنسبة لـ Contentful، هو معالج webhook. للإعدادات المخصصة، هو استدعاء HTTP. نموذج الترجمة يفهم تنسيق المحتوى الخاص بك — Markdown، HTML، JSON، نص غني — ويحافظ على الهيكل طوال الوقت.

النمط متسق عبر كل نظام إدارة محتوى: جلب المحتوى بلغتك المصدر، استدعاء API PolyLingo مع كل اللغات المستهدفة، كتابة المحتوى المترجم مرة أخرى إلى النظام عبر API الإدارة الخاص به. يتم تشغيل هذا كسكريبت وقت البناء، أو وظيفة CI، أو معالج webhook — أي ما يناسب سير عملك.

يتعامل PolyLingo مع Markdown وHTML والنص العادي، لذا يعمل مع أي تنسيق يستخدمه نظام إدارة المحتوى الخاص بك للمحتوى الغني. يمكن ترجمة الحقول المهيكلة (العناوين، الجسم، المقتطف) بشكل فردي لمنحك تحكماً دقيقاً في الحقول التي تُترجم.

🟠

Sanity + PolyLingo

إضافة تدويل الوثائق في Sanity تنشئ نسخاً مترابطة من الوثائق لكل موقع. السكريبت أدناه يجلب الوثائق الأساسية الإنجليزية وينشئ نسخاً مترجمة لكل لغة مستهدفة تلقائياً.

يعمل مع نمط i18n على مستوى الوثيقة (وثيقة واحدة لكل موقع) وكذلك نمط مستوى الحقل (كل المواقع في وثيقة واحدة). للنمط مستوى الحقل، كرر على الحقول بدلاً من الوثائق.

scripts/translate-sanity.mjs
// scripts/translate-sanity.mjs
// Fetches published posts and translates each to all target languages

import { createClient } from '@sanity/client'

const sanity = createClient({
  projectId: process.env.SANITY_PROJECT_ID,
  dataset: 'production',
  token: process.env.SANITY_TOKEN,
  apiVersion: '2024-01-01',
  useCdn: false,
})

const posts = await sanity.fetch(`*[_type == "post" && __i18n_lang == "en"]`)

for (const post of posts) {
  const response = await fetch('https://api.usepolylingo.com/v1/translate', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.POLYLINGO_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      content: post.body_markdown,
      format: 'markdown',
      targets: ['es', 'fr', 'de', 'ja', 'zh'],
    }),
  })

  const { translations } = await response.json()

  for (const [lang, content] of Object.entries(translations)) {
    await sanity.create({
      _type: 'post',
      __i18n_lang: lang,
      __i18n_base: { _type: 'reference', _ref: post._id },
      title: translations[lang + '_title'] || post.title,
      slug: { current: `${post.slug.current}-${lang}` },
      body_markdown: content,
    })
  }
}
🔵

Contentful + PolyLingo

يخزن Contentful متغيرات المواقع كحقول في نفس الإدخال. يستخدم السكريبت أدناه Contentful Management API لجلب الإدخالات الإنجليزية، ترجمتها، وكتابة المحتوى المترجم مباشرة إلى الحقول الخاصة بكل موقع — بدون نسخ ولصق يدوي.

يستخدم Contentful رموز المواقع BCP 47 (مثلاً es-ES بدلاً من es). قم بمطابقة رموز ISO 639-1 الخاصة بـ PolyLingo مع تكوين المواقع في Contentful وفقاً لذلك.

scripts/translate-contentful.mjs
// scripts/translate-contentful.mjs
// Translates Contentful entries to all target locales

import contentful from 'contentful-management'

const client = contentful.createClient({
  accessToken: process.env.CONTENTFUL_MANAGEMENT_TOKEN,
})

const space = await client.getSpace(process.env.CONTENTFUL_SPACE_ID)
const env = await space.getEnvironment('master')
const entries = await env.getEntries({ content_type: 'blogPost', locale: 'en-US' })

for (const entry of entries.items) {
  const enBody = entry.fields.body['en-US']

  const response = await fetch('https://api.usepolylingo.com/v1/translate', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.POLYLINGO_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      content: enBody,
      format: 'markdown',
      targets: ['es-ES', 'fr-FR', 'de-DE'],
    }),
  })

  const { translations } = await response.json()

  for (const [locale, content] of Object.entries(translations)) {
    entry.fields.body[locale] = content
  }

  await entry.update()
  await entry.publish()
}
🌀

Webflow + PolyLingo

يدعم Webflow Localization API (متاح في خطط CMS وBusiness) محتوى الحقول الخاص بكل موقع. يجلب السكريبت أدناه عناصر مجموعة CMS، يترجم حقل الجسم HTML، ويكتب الترجمات مرة أخرى إلى كل نسخة موقع عبر Webflow v2 API.

يخزن Webflow حقول النص الغني كـ HTML. تحافظ ترجمة HTML في PolyLingo على كل العلامات التي يولدها Webflow — الفئات المخصصة، السمات، والعناصر المضمنة — دون تغيير.

scripts/translate-webflow.mjs
// scripts/translate-webflow.mjs
// Webflow Localization API + PolyLingo

const headers = {
  'Authorization': `Bearer ${process.env.WEBFLOW_API_TOKEN}`,
  'accept-version': '2.0.0',
  'Content-Type': 'application/json',
}

// Fetch English CMS items
const itemsRes = await fetch(
  `https://api.webflow.com/v2/collections/${process.env.WEBFLOW_COLLECTION_ID}/items`,
  { headers }
)
const { items } = await itemsRes.json()

for (const item of items) {
  const response = await fetch('https://api.usepolylingo.com/v1/translate', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.POLYLINGO_API_KEY}`,
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      content: item.fieldData['body-html'],
      format: 'html',
      targets: ['es', 'fr', 'de'],
    }),
  })

  const { translations } = await response.json()

  // Write translated content back to Webflow locale fields
  for (const [lang, content] of Object.entries(translations)) {
    await fetch(
      `https://api.webflow.com/v2/collections/${process.env.WEBFLOW_COLLECTION_ID}/items/${item.id}/locales/${lang}`,
      { method: 'PATCH', headers, body: JSON.stringify({ fieldData: { 'body-html': content } }) }
    )
  }
}

ما يقدمه PolyLingo لمستخدمي أنظمة إدارة المحتوى بدون رأس

  • Sanity — ترجم عند النشر عبر webhook، واكتب مرة أخرى إلى مواقع الوثائق
  • Contentful — ترجم الإدخالات تلقائياً عند تحديث الموقع الإنجليزي
  • Webflow — ترجم عناصر مجموعة CMS عبر API
  • أي نظام إدارة محتوى بدون رأس مع API — نمط التكامل هو نفسه
  • النص الغني وMarkdown وHTML محفوظة كلها بشكل صحيح
  • جميع اللغات الـ43 في طلب واحد — بدون مكالمات لكل لغة
  • يعمل مع أي نظام إدارة محتوى لديه API إدارة
  • يمكن إعادة ترجمة المحتوى عند كل نشر — بدون مزامنة يدوية

سير العمل القياسي لنظام إدارة المحتوى متعدد اللغات

1

اكتب المحتوى بلغتك المصدر

أنشئ وانشر المحتوى بالإنجليزية (أو أي لغة هي المصدر لديك). يخزن نظام إدارة المحتوى هذا كنسخة موثوقة. لا تحتاج لتغيير سير عمل التحرير الخاص بك على الإطلاق.

2

شغّل سكريبت الترجمة

شغّل السكريبت يدوياً، بجدول زمني، أو عبر webhook يُطلق عند نشر المحتوى في نظام إدارة المحتوى. يستدعي السكريبت PolyLingo مرة واحدة لكل وثيقة مع كل اللغات المستهدفة، ثم يكتب كل الترجمات مرة واحدة إلى نظام إدارة المحتوى.

3

نشر — المحتوى المترجم مباشر

يقرأ الواجهة الأمامية المحتوى الخاص بكل موقع من نظام إدارة المحتوى كالمعتاد. لا حاجة لتغييرات في كود الواجهة الأمامية. يظهر المحتوى المترجم باللغة الصحيحة لكل مسار موقع.

لمن بُني هذا

✍️

فرق المحتوى على Sanity أو Contentful

ينشر محرروك بالإنجليزية. يظهر المحتوى المترجم في كل المواقع تلقائياً، دون حاجة فريق التحرير للتعامل مع أدوات الترجمة.

🏢

الوكالات التي تبني مواقع متعددة اللغات

كل موقع عميل تبنيه يحتاج دعم متعدد اللغات. يمنحك PolyLingo تكاملاً قابلاً لإعادة الاستخدام والفوترة يعمل عبر أي نظام إدارة محتوى بدون رأس في مجموعتك.

🌍

التجارة الإلكترونية مع محتوى منتجات محلي

وصف المنتجات، صفحات الفئات، ومحتوى المدونة — كلها تُترجم تلقائياً عند النشر. اجمع مع التسعير الخاص بكل موقع لتقديم تجربة تسوق محلية كاملة.

الأسئلة المتكررة حول متعدد اللغات في أنظمة إدارة المحتوى بدون رأس

هل يعمل PolyLingo مع أنظمة إدارة محتوى غير المذكورة هنا؟

نعم. أي نظام إدارة محتوى لديه API إدارة يمكن دمجه باستخدام نفس النمط — جلب المحتوى، استدعاء PolyLingo، كتابة مرة أخرى. لدى Prismic وStoryblok وDatoCMS وStrapi وGhost وDirectus جميعها APIs إدارة وتعمل مع هذا النهج. توضح أمثلة التكامل لـ Sanity وContentful وWebflow أعلاه النمط.

هل يمكنني ترجمة النص الغني مع الصور والروابط المضمنة؟

نعم. تحافظ ترجمة HTML على كل العناصر المضمنة بما في ذلك الصور (تعامل صحيح مع سمات src وalt)، الروابط (href محفوظ، نص الرابط مترجم)، وiframes. الاستثناء الوحيد هو المحتوى المعلم صراحة كغير قابل للترجمة — ككتل الكود، على سبيل المثال، لا تُترجم أبداً.

كيف أتعامل مع المحتوى الذي لا يجب ترجمته؟

للمحتوى المهيكل مع حقول غير قابلة للترجمة (الروابط الدائمة، التواريخ، المعرفات التقنية)، أرسل فقط الحقول التي تريد ترجمتها. للنص الغني مع أقسام قابلة وغير قابلة للترجمة مختلطة، استخدم تنسيق HTML — سيترجم PolyLingo النص مع الحفاظ تلقائياً على كتل الكود والعناصر المهيكلة الأخرى.

ماذا لو كان نظام إدارة المحتوى الخاص بي يحتوي على أنواع محتوى متداخلة؟

للمحتوى المتداخل بعمق (وثائق مع مراجع لوثائق أخرى)، ترجم كل نوع وثيقة بشكل مستقل. هذا يتجنب المراجع الدائرية ويمنحك تحكماً نظيفاً في المحتوى الذي يُترجم. تحافظ نظام إدارة المحتوى على المراجع بين الوثائق — يتعامل PolyLingo فقط مع محتوى الحقول، وليس علاقات الوثائق.

كيف أحافظ على تزامن الترجمات عندما يتغير المحتوى المصدر؟

النمط الموصى به هو تشغيل سكريبت الترجمة عند كل حدث نشر عبر webhook في نظام إدارة المحتوى. هذا يضمن تحديث المحتوى المترجم كلما تغير المصدر. للتحديثات الأقل تكراراً، تشغيل السكريبت بجدول ليلي أو قبل كل نشر إنتاجي يعمل بنفس الكفاءة.

هل هناك طريقة لوضع علامة على الترجمات بأنها "تحتاج مراجعة" بدلاً من النشر التلقائي؟

هذا يعتمد على نظام إدارة المحتوى الخاص بك. يدعم Contentful وSanity كلاهما حالات المسودة — يمكنك كتابة المحتوى المترجم كمسودة بدلاً من منشور، مما يسمح بالمراجعة البشرية قبل أن يصبح كل موقع مباشر. تستخدم أمثلة السكريبت أعلاه النشر/الإنشاء فوراً؛ عدل الخطوة النهائية لإنشاء مسودات بدلاً من ذلك لسير عمل مراجعة.

أضف متعدد اللغات إلى نظام إدارة المحتوى بدون رأس الخاص بك اليوم.

طبقة مجانية. 50,000 رمز شهرياً. لا حاجة لبطاقة ائتمان.

ابدأ الترجمة مجاناً

طبقة مجانية — 50,000 رمز شهرياً. يعمل مع أي نظام إدارة محتوى.

متعدد اللغات لأنظمة إدارة المحتوى بدون رأس — Sanity، Contentful، وأكثر — PolyLingo | PolyLingo