हेडलैस CMS के लिए बहुभाषी।
Polylang ने WordPress साइट्स को एक पूर्ण बहुभाषी वर्कफ़्लो दिया। PolyLingo वह वर्कफ़्लो Sanity, Contentful, Webflow, Framer, और हर अन्य हेडलैस CMS में लाता है — एक REST API के माध्यम से जो दोपहर में इंटीग्रेट हो जाता है।
हेडलैस CMS बहुभाषी एक अनसुलझा समस्या है।
Sanity के पास अंतरराष्ट्रीयकरण प्लगइन है। Contentful के पास लोकल्स हैं। लेकिन इनमें से कोई भी आपके कंटेंट का अनुवाद नहीं करता — वे बस इसे कई भाषाओं में स्टोर करते हैं। उन भाषा स्लॉट्स को भरना अभी भी एक मैनुअल प्रक्रिया है। अंग्रेज़ी कंटेंट एक्सपोर्ट करें, उसे एक अनुवाद उपकरण से चलाएं जो आपके रिच टेक्स्ट या JSON संरचना को तोड़ देता है, आउटपुट ठीक करें, वापस इम्पोर्ट करें, हर भाषा के लिए दोहराएं। एक सक्रिय कंटेंट टीम के लिए जो नियमित रूप से प्रकाशित करती है, यह वर्कफ़्लो स्केल नहीं करता। यह अधिकांश छोटे सेटअप्स के लिए भी मौजूद नहीं है, जिसका मतलब है कि कंटेंट कभी अनुवादित नहीं होता।
हेडलैस CMS आर्किटेक्चर कंटेंट प्रबंधन को कंटेंट डिलीवरी से अलग करता है। यह लचीलापन के लिए अच्छा है। लेकिन यह एक अंतर पैदा करता है: CMS भाषा संस्करणों को स्टोर करता है, लेकिन कोई भी उन भाषा संस्करणों को अनुवादित कंटेंट से नहीं भरता। आपको वह परत खुद बनानी होगी।
अधिकांश टीमें दो स्थितियों में से एक में फंस जाती हैं: वे मैन्युअल रूप से कंटेंट का अनुवाद करती हैं, DeepL में कॉपी-पेस्ट करके (धीमा, त्रुटिपूर्ण, स्केल नहीं होता), या वे एक अनुवाद API के साथ कस्टम इंटीग्रेशन लिखती हैं जिसे उन्हें अनिश्चित काल तक बनाए रखना पड़ता है। दोनों ही अच्छे समाधान नहीं हैं। PolyLingo एक साफ़ तीसरा विकल्प है।
PolyLingo वह अनुवाद परत है जो आपके CMS में गायब है।
PolyLingo सीधे आपके CMS प्रकाशन वर्कफ़्लो के साथ इंटीग्रेट होता है। एक वेबहुक सेट करें जो कंटेंट प्रकाशित होने पर ट्रिगर हो, कंटेंट को PolyLingo को भेजें, हर भाषा के लिए अनुवादित संस्करण प्राप्त करें, उन्हें वापस आपके CMS में लिखें। Sanity के लिए, यह एक सर्वर एक्शन में कुछ लाइनों का कोड है। Contentful के लिए, यह एक वेबहुक हैंडलर है। कस्टम सेटअप्स के लिए, यह एक HTTP कॉल है। अनुवाद मॉडल आपके कंटेंट फॉर्मेट को समझता है — Markdown, HTML, JSON, रिच टेक्स्ट — और पूरी संरचना को संरक्षित रखता है।
पैटर्न हर CMS में समान है: अपने स्रोत भाषा में कंटेंट प्राप्त करें, PolyLingo API को सभी लक्षित भाषाओं के साथ कॉल करें, अनुवादित कंटेंट को CMS के प्रबंधन API के माध्यम से वापस लिखें। यह एक बिल्ड-टाइम स्क्रिप्ट, CI जॉब, या वेबहुक हैंडलर के रूप में चलता है — जो भी आपके वर्कफ़्लो के लिए उपयुक्त हो।
PolyLingo Markdown, HTML, और सादा टेक्स्ट को संभालता है, इसलिए यह आपके CMS द्वारा उपयोग किए जाने वाले किसी भी फॉर्मेट के साथ काम करता है। संरचित फ़ील्ड (शीर्षक, बॉडी, सारांश) को व्यक्तिगत रूप से अनुवादित किया जा सकता है ताकि आप नियंत्रित कर सकें कि कौन से फ़ील्ड अनुवादित हों।
Sanity + PolyLingo
Sanity का डॉक्यूमेंट इंटरनेशनलाइजेशन प्लगइन प्रति लोकल लिंक्ड डॉक्यूमेंट वेरिएंट बनाता है। नीचे दिया गया स्क्रिप्ट अंग्रेज़ी मूल दस्तावेज़ प्राप्त करता है और प्रत्येक लक्षित भाषा के लिए स्वचालित रूप से अनुवादित वेरिएंट बनाता है।
यह डॉक्यूमेंट-स्तर 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)। PolyLingo के ISO 639-1 कोड्स को अपने 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 के रूप में स्टोर करता है। PolyLingo का HTML अनुवाद सभी 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 हेडलैस CMS उपयोगकर्ताओं को क्या देता है
- ✓Sanity — वेबहुक के माध्यम से प्रकाशन पर अनुवाद करें, दस्तावेज़ लोकल्स में वापस लिखें
- ✓Contentful — अंग्रेज़ी लोकल अपडेट होने पर प्रविष्टियों का स्वचालित अनुवाद करें
- ✓Webflow — API के माध्यम से CMS संग्रह आइटम का अनुवाद करें
- ✓किसी भी हेडलैस CMS के साथ जिसका API हो — इंटीग्रेशन पैटर्न समान है
- ✓रिच टेक्स्ट, Markdown, और HTML सभी सही ढंग से संरक्षित
- ✓एक ही अनुरोध में सभी 36 भाषाएँ — प्रति भाषा कॉल नहीं
- ✓किसी भी CMS के साथ काम करता है जिसका प्रबंधन API हो
- ✓प्रत्येक प्रकाशन पर कंटेंट को पुनः अनुवादित किया जा सकता है — कोई मैनुअल सिंक नहीं
मानक बहुभाषी CMS वर्कफ़्लो
अपने स्रोत भाषा में कंटेंट लिखें
अंग्रेज़ी (या जो भी आपकी स्रोत भाषा हो) में कंटेंट बनाएं और प्रकाशित करें। आपका CMS इसे आधिकारिक संस्करण के रूप में स्टोर करता है। आपको अपनी संपादकीय प्रक्रिया में कोई बदलाव करने की आवश्यकता नहीं है।
अनुवाद स्क्रिप्ट ट्रिगर करें
स्क्रिप्ट को मैन्युअल रूप से, शेड्यूल पर, या CMS में कंटेंट प्रकाशन इवेंट्स द्वारा ट्रिगर किए गए वेबहुक के माध्यम से चलाएं। स्क्रिप्ट प्रत्येक दस्तावेज़ के लिए सभी लक्षित भाषाओं के साथ PolyLingo को एक बार कॉल करता है, फिर सभी अनुवादों को एक ही बार में आपके CMS में वापस लिखता है।
डिप्लॉय करें — अनुवादित कंटेंट लाइव है
आपका फ्रंटेंड सामान्य रूप से CMS से लोकल-विशिष्ट कंटेंट पढ़ता है। आपके फ्रंटेंड कोड में कोई बदलाव आवश्यक नहीं है। अनुवादित कंटेंट प्रत्येक लोकल रूट के लिए सही भाषा में दिखाई देता है।
यह किसके लिए बनाया गया है
Sanity या Contentful पर कंटेंट टीमें
आपके संपादक अंग्रेज़ी में प्रकाशित करते हैं। अनुवादित कंटेंट सभी लोकल्स में स्वचालित रूप से दिखाई देता है, बिना संपादन टीम को अनुवाद उपकरणों के साथ इंटरैक्ट किए।
बहुभाषी साइट्स बनाने वाली एजेंसियां
आप जो भी क्लाइंट साइट बनाते हैं, उसे बहुभाषी समर्थन की आवश्यकता होती है। PolyLingo आपको एक पुन: उपयोग योग्य, बिल योग्य इंटीग्रेशन देता है जो आपके स्टैक के किसी भी हेडलैस CMS के साथ काम करता है।
स्थानीयकृत उत्पाद कंटेंट के साथ ई-कॉमर्स
उत्पाद विवरण, श्रेणी पृष्ठ, और ब्लॉग कंटेंट — सभी प्रकाशित होने पर स्वचालित रूप से अनुवादित। स्थानीयकृत मूल्य निर्धारण के साथ मिलाकर एक पूरी तरह स्थानीयकृत खरीदारी अनुभव प्रदान करें।
हेडलैस CMS बहुभाषी के बारे में अक्सर पूछे जाने वाले प्रश्न
क्या PolyLingo उन CMS के साथ काम करता है जो यहां सूचीबद्ध नहीं हैं?
हाँ। किसी भी CMS जिसका प्रबंधन API हो, उसी पैटर्न का उपयोग करके इंटीग्रेट किया जा सकता है — कंटेंट प्राप्त करें, PolyLingo को कॉल करें, वापस लिखें। Prismic, Storyblok, DatoCMS, Strapi, Ghost, और Directus सभी के पास प्रबंधन API हैं और यह तरीका काम करता है। ऊपर Sanity, Contentful, और Webflow के इंटीग्रेशन उदाहरण इस पैटर्न को दर्शाते हैं।
क्या मैं एम्बेडेड इमेज और लिंक के साथ रिच टेक्स्ट का अनुवाद कर सकता हूँ?
हाँ। HTML अनुवाद सभी एम्बेडेड एलिमेंट्स को संरक्षित रखता है जिनमें इमेज (src और alt एट्रिब्यूट्स सही ढंग से संभाले जाते हैं), लिंक (href संरक्षित, लिंक टेक्स्ट अनुवादित), और iframe शामिल हैं। केवल अपवाद वे कंटेंट हैं जिन्हें स्पष्ट रूप से गैर-अनुवादनीय चिह्नित किया गया है — जैसे कोड ब्लॉक्स, जो कभी अनुवादित नहीं होते।
मैं ऐसे कंटेंट को कैसे संभालूं जिसे अनुवादित नहीं किया जाना चाहिए?
गैर-अनुवादनीय फ़ील्ड्स (जैसे स्लग्स, तिथियाँ, तकनीकी पहचानकर्ता) वाले संरचित कंटेंट के लिए, केवल उन फ़ील्ड्स को भेजें जिन्हें आप अनुवादित करना चाहते हैं। मिश्रित अनुवादनीय और गैर-अनुवादनीय सेक्शंस वाले रिच टेक्स्ट के लिए, HTML फॉर्मेट का उपयोग करें — PolyLingo टेक्स्ट कंटेंट का अनुवाद करेगा जबकि कोड ब्लॉक्स और अन्य संरचित एलिमेंट्स को स्वचालित रूप से संरक्षित रखेगा।
अगर मेरे CMS में नेस्टेड कंटेंट टाइप्स हैं तो क्या?
गहरे नेस्टेड कंटेंट (दस्तावेज़ जिनमें अन्य दस्तावेज़ों के संदर्भ होते हैं) के लिए, प्रत्येक दस्तावेज़ प्रकार का स्वतंत्र रूप से अनुवाद करें। इससे सर्कुलर रेफरेंस से बचा जाता है और आपको यह साफ़ नियंत्रण मिलता है कि कौन सा कंटेंट अनुवादित होगा। दस्तावेज़ों के बीच संदर्भ CMS द्वारा बनाए रखे जाते हैं — PolyLingo केवल फ़ील्ड कंटेंट को छूता है, दस्तावेज़ संबंधों को नहीं।
जब स्रोत कंटेंट बदलता है तो मैं अनुवादों को सिंक में कैसे रखूं?
अनुशंसित पैटर्न है कि हर प्रकाशन इवेंट पर CMS वेबहुक के माध्यम से अनुवाद स्क्रिप्ट ट्रिगर करें। इससे अनुवादित कंटेंट स्रोत के बदलने पर अपडेट हो जाता है। कम बार कंटेंट अपडेट के लिए, स्क्रिप्ट को रात में शेड्यूल पर या प्रत्येक प्रोडक्शन डिप्लॉयमेंट से पहले चलाना भी ठीक रहता है।
क्या अनुवादों को "समीक्षा आवश्यक" के रूप में चिह्नित करने का कोई तरीका है बजाय स्वचालित प्रकाशन के?
यह आपके CMS पर निर्भर करता है। Contentful और Sanity दोनों ड्राफ्ट स्टेट्स का समर्थन करते हैं — आप अनुवादित कंटेंट को प्रकाशित करने के बजाय ड्राफ्ट के रूप में लिख सकते हैं, जिससे प्रत्येक लोकल के लाइव होने से पहले मानव समीक्षा संभव होती है। ऊपर दिए गए स्क्रिप्ट उदाहरण तुरंत प्रकाशित/बनाते हैं; अंतिम चरण को संशोधित करके ड्राफ्ट बनाने के लिए बदलें ताकि समीक्षा वर्कफ़्लो हो सके।
संबंधित गाइड्स
मार्कअप तोड़े बिना HTML का अनुवाद करें
PolyLingo CMS-जनित HTML को पूर्ण टैग संरक्षण के साथ कैसे संभालता है।
Next.js में बहुभाषी जोड़ें
हेडलैस CMS कंटेंट अनुवाद को next-intl UI स्ट्रिंग अनुवाद के साथ मिलाएं।
आधुनिक स्टैक्स के लिए Polylang विकल्प
WordPress से हेडलैस सेटअप में बहुभाषी वर्कफ़्लो माइग्रेट करना।
अपने हेडलैस CMS में आज ही बहुभाषी जोड़ें।
मुफ़्त स्तर। प्रति माह 50,000 टोकन। कोई क्रेडिट कार्ड आवश्यक नहीं।
मुफ़्त अनुवाद शुरू करेंमुफ़्त स्तर — प्रति माह 50,000 टोकन। किसी भी CMS के साथ काम करता है।