متعدد اللغات لنظام إدارة المحتوى بدون رأس.
منح Polylang مواقع WordPress سير عمل متعدد اللغات كامل. يجلب PolyLingo هذا السير إلى Sanity وContentful وWebflow وFramer وكل نظام إدارة محتوى بدون رأس آخر — من خلال REST API يدمج في فترة بعد الظهر.
متعدد اللغات في نظام إدارة المحتوى بدون رأس مشكلة غير محلولة.
يحتوي 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 الإضافي Document Internationalization ينشئ نسخًا مترابطة من الوثائق لكل موقع. السكريبت أدناه يجلب الوثائق الأساسية الإنجليزية وينشئ نسخًا مترجمة لكل لغة مستهدفة تلقائيًا.
يعمل مع نمط i18n على مستوى الوثيقة (وثيقة واحدة لكل موقع) وكذلك نمط مستوى الحقل (كل المواقع في وثيقة واحدة). بالنسبة لنمط مستوى الحقل، قم بالتكرار على الحقول بدلاً من الوثائق.
// 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
// 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
// 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 محفوظة كلها بشكل صحيح
- ✓كل اللغات الـ36 في طلب واحد — لا مكالمات لكل لغة
- ✓يعمل مع أي نظام إدارة محتوى لديه API إدارة
- ✓يمكن إعادة ترجمة المحتوى عند كل نشر — لا مزامنة يدوية
سير العمل القياسي لنظام إدارة المحتوى متعدد اللغات
اكتب المحتوى بلغتك المصدر
أنشئ وانشر المحتوى بالإنجليزية (أو أي لغة هي المصدر). يخزن نظام إدارة المحتوى هذا كنسخة موثوقة. لا تحتاج إلى تغيير سير عمل التحرير الخاص بك على الإطلاق.
شغّل سكريبت الترجمة
شغّل السكريبت يدويًا، بجدول زمني، أو عبر webhook يتم تفعيله بأحداث نشر المحتوى في نظام إدارة المحتوى الخاص بك. يستدعي السكريبت PolyLingo مرة واحدة لكل وثيقة مع كل اللغات المستهدفة، ثم يكتب كل الترجمات مرة واحدة إلى نظام إدارة المحتوى.
نشر — المحتوى المترجم مباشر
يقرأ الواجهة الأمامية المحتوى الخاص بكل موقع من نظام إدارة المحتوى كالمعتاد. لا حاجة لتغييرات في كود الواجهة الأمامية. يظهر المحتوى المترجم باللغة الصحيحة لكل مسار موقع.
لمن بُني هذا
فرق المحتوى على Sanity أو Contentful
ينشر محرروك بالإنجليزية. يظهر المحتوى المترجم في كل المواقع تلقائيًا، دون حاجة فريق التحرير للتعامل مع أدوات الترجمة.
الوكالات التي تبني مواقع متعددة اللغات
كل موقع عميل تبنيه يحتاج دعم متعدد اللغات. يمنحك PolyLingo تكاملًا قابلًا لإعادة الاستخدام والفوترة يعمل عبر أي نظام إدارة محتوى بدون رأس في مجموعتك.
التجارة الإلكترونية مع محتوى منتجات محلي
وصف المنتجات، صفحات الفئات، ومحتوى المدونة — كلها تترجم تلقائيًا عند النشر. اجمع مع التسعير الخاص بكل موقع لتقديم تجربة تسوق محلية كاملة.
أسئلة متكررة حول متعدد اللغات في نظام إدارة المحتوى بدون رأس
هل يعمل PolyLingo مع أنظمة إدارة محتوى غير المذكورة هنا؟
نعم. أي نظام إدارة محتوى لديه API إدارة يمكن دمجه باستخدام نفس النمط — جلب المحتوى، استدعاء PolyLingo، كتابة مرة أخرى. لدى Prismic وStoryblok وDatoCMS وStrapi وGhost وDirectus جميعها APIs إدارة وتعمل مع هذا النهج. توضح أمثلة التكامل لـ Sanity وContentful وWebflow أعلاه النمط.
هل يمكنني ترجمة النص الغني مع الصور والروابط المضمنة؟
نعم. تحافظ ترجمة HTML على كل العناصر المضمنة بما في ذلك الصور (يتم التعامل مع سمات src وalt بشكل صحيح)، الروابط (يتم الحفاظ على href، ويتم ترجمة نص الرابط)، والإطارات المضمنة. الاستثناء الوحيد هو المحتوى المعلم صراحةً كغير قابل للترجمة — مثل كتل الكود التي لا تُترجم أبدًا.
كيف أتعامل مع المحتوى الذي لا يجب ترجمته؟
للمحتوى المهيكل مع حقول غير قابلة للترجمة (مثل slugs، التواريخ، المعرفات التقنية)، أرسل فقط الحقول التي تريد ترجمتها. للنص الغني مع أقسام مختلطة قابلة وغير قابلة للترجمة، استخدم تنسيق HTML — سيترجم PolyLingo محتوى النص مع الحفاظ تلقائيًا على كتل الكود والعناصر المهيكلة الأخرى.
ماذا لو كان نظام إدارة المحتوى الخاص بي يحتوي على أنواع محتوى متداخلة؟
للمحتوى المتداخل بعمق (وثائق مع مراجع لوثائق أخرى)، ترجم كل نوع وثيقة بشكل مستقل. هذا يتجنب المراجع الدائرية ويمنحك تحكمًا نظيفًا في المحتوى الذي يُترجم. تحافظ نظام إدارة المحتوى على المراجع بين الوثائق — يتعامل PolyLingo فقط مع محتوى الحقول، وليس علاقات الوثائق.
كيف أحافظ على تزامن الترجمات عندما يتغير المحتوى المصدر؟
النمط الموصى به هو تفعيل سكريبت الترجمة عند كل حدث نشر عبر webhook في نظام إدارة المحتوى. هذا يضمن تحديث المحتوى المترجم كلما تغير المصدر. للتحديثات الأقل تكرارًا، تشغيل السكريبت بجدول ليلي أو قبل كل نشر إنتاجي يعمل بنفس الكفاءة.
هل هناك طريقة لوضع علامة على الترجمات بأنها "تحتاج مراجعة" بدلاً من النشر التلقائي؟
هذا يعتمد على نظام إدارة المحتوى الخاص بك. يدعم Contentful وSanity كلاهما حالات المسودة — يمكنك كتابة المحتوى المترجم كمسودة بدلاً من منشور، مما يسمح بالمراجعة البشرية قبل أن يصبح كل موقع مباشرًا. تستخدم أمثلة السكريبت أعلاه النشر/الإنشاء الفوري؛ عدل الخطوة النهائية لإنشاء مسودات بدلاً من ذلك لسير عمل مراجعة.
أدلة ذات صلة
ترجمة HTML دون كسر العلامات
كيف يتعامل PolyLingo مع HTML الذي يولده نظام إدارة المحتوى مع الحفاظ الكامل على العلامات.
أضف متعدد اللغات إلى Next.js
اجمع بين ترجمة محتوى نظام إدارة المحتوى بدون رأس وترجمة سلاسل واجهة المستخدم next-intl.
بديل Polylang للأطر الحديثة
ترحيل سير العمل متعدد اللغات من WordPress إلى إعداد بدون رأس.
أضف متعدد اللغات إلى نظام إدارة المحتوى بدون رأس اليوم.
طبقة مجانية. 50,000 رمز شهريًا. لا حاجة لبطاقة ائتمان.
ابدأ الترجمة مجانًاطبقة مجانية — 50,000 رمز شهريًا. يعمل مع أي نظام إدارة محتوى.