Vícejazyčné řešení pro headless CMS.
Polylang poskytl webům WordPress kompletní vícejazyčný workflow. PolyLingo přináší tento workflow do Sanity, Contentful, Webflow, Framer a všech ostatních headless CMS — prostřednictvím REST API, které integrujete během odpoledne.
Vícejazyčnost v headless CMS je nevyřešený problém.
Sanity má plugin pro internacionalizaci. Contentful má lokality. Ale žádný z nich váš obsah nepřekládá — pouze ho ukládá ve více jazycích. Vyplnění těchto jazykových slotů je stále manuální proces. Exportujte anglický obsah, převeďte ho přes překladový nástroj, který rozbije váš bohatý text nebo JSON strukturu, opravte výstup, importujte zpět, opakujte pro každý jazyk. Pro aktivní tým, který pravidelně publikuje, tento workflow není škálovatelný. Také neexistuje pro většinu menších nastavení, což znamená, že obsah se často vůbec nepřekládá.
Architektura headless CMS odděluje správu obsahu od jeho doručení. To je dobré pro flexibilitu. Ale vytváří to mezeru: CMS ukládá jazykové varianty, ale nic tyto varianty nevyplňuje přeloženým obsahem. Tu vrstvu musíte vytvořit sami.
Většina týmů skončí v jedné ze dvou situací: ručně překládají obsah kopírováním do DeepL a zpět (pomalé, náchylné k chybám, neškáluje), nebo píší vlastní integraci s překladovým API, kterou musí udržovat navždy. Ani jedno není dobré řešení. PolyLingo je čistá třetí možnost.
PolyLingo je překladová vrstva, kterou vašemu CMS chybí.
PolyLingo se integruje přímo do vašeho workflow publikace v CMS. Nastavte webhook, který se spustí při publikaci obsahu, předejte obsah PolyLingu, přijměte přeložené verze pro každý jazyk a zapište je zpět do CMS. Pro Sanity to jsou pár řádků v serverové akci. Pro Contentful webhook handler. Pro vlastní nastavení HTTP volání. Překladový model rozumí formátu vašeho obsahu — Markdown, HTML, JSON, bohatý text — a zachovává strukturu po celou dobu.
Vzor je konzistentní napříč všemi CMS: načtěte obsah ve zdrojovém jazyce, zavolejte PolyLingo API se všemi cílovými jazyky, zapište přeložený obsah zpět do CMS přes jeho management API. Toto běží jako skript při sestavení, CI job nebo webhook handler — podle toho, co vyhovuje vašemu workflow.
PolyLingo zvládá Markdown, HTML a prostý text, takže funguje s jakýmkoli formátem, který vaše CMS používá pro bohatý obsah. Strukturovaná pole (nadpisy, tělo, výňatek) lze překládat jednotlivě, což vám dává detailní kontrolu nad tím, která pole se překládají.
Sanity + PolyLingo
Plugin Document Internationalization od Sanity vytváří propojené varianty dokumentů podle lokalit. Níže uvedený skript načte anglické základní dokumenty a automaticky vytvoří přeložené varianty pro každý cílový jazyk.
Funguje s patternem i18n na úrovni dokumentu (jeden dokument na lokalitu) i s patternem na úrovni polí (všechny lokality v jednom dokumentu). Pro pattern na úrovni polí procházejte pole místo dokumentů.
// 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 ukládá varianty lokalit jako pole ve stejném záznamu. Níže uvedený skript používá Contentful Management API k načtení anglických záznamů, jejich překladu a zápisu přeloženého obsahu přímo do polí specifických pro lokalitu — bez manuálního kopírování.
Contentful používá BCP 47 kódy lokalit (např. es-ES místo es). Mapujte ISO 639-1 kódy PolyLingo na konfiguraci lokalit Contentful podle toho.
// 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 (dostupné v plánech CMS a Business) podporuje obsah polí specifických pro lokalitu. Níže uvedený skript načte položky kolekcí CMS, přeloží HTML pole těla a zapíše překlady zpět do každé varianty lokality přes Webflow v2 API.
Webflow ukládá pole bohatého textu jako HTML. Překlad HTML od PolyLingo zachovává veškeré značky generované Webflow — vlastní třídy, atributy a vložené prvky — beze změny.
// 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 } }) }
)
}
}Co PolyLingo přináší uživatelům headless CMS
- ✓Sanity — překládejte při publikaci přes webhook, zapisujte zpět do lokalit dokumentu
- ✓Contentful — automaticky překládá položky při aktualizaci anglické lokality
- ✓Webflow — překládejte položky kolekcí CMS přes API
- ✓Jakékoli headless CMS s API — integrační vzor je stejný
- ✓Bohatý text, Markdown a HTML jsou správně zachovány
- ✓Všechny 36 jazyků v jednom požadavku — bez volání pro každý jazyk zvlášť
- ✓Funguje s jakýmkoli CMS, které má management API
- ✓Obsah lze překládat znovu při každé publikaci — bez manuální synchronizace
Standardní vícejazyčný workflow CMS
Pište obsah ve zdrojovém jazyce
Vytvářejte a publikujte obsah v angličtině (nebo v jazyce, který je vaším zdrojem). Vaše CMS to ukládá jako autoritativní verzi. Nemusíte měnit svůj redakční workflow vůbec.
Spusťte překladový skript
Skript spusťte ručně, podle plánu nebo přes webhook spuštěný událostí publikace obsahu v CMS. Skript zavolá PolyLingo jednou na dokument se všemi cílovými jazyky a pak zapíše všechny překlady zpět do CMS najednou.
Nasazení — přeložený obsah je živý
Frontend načítá obsah specifický pro lokalitu z CMS jako obvykle. Není potřeba měnit frontendový kód. Přeložený obsah se zobrazí ve správném jazyce pro každou lokalitu.
Pro koho je to určeno
Redakční týmy na Sanity nebo Contentful
Vaši editoři publikují v angličtině. Přeložený obsah se automaticky objeví ve všech lokalitách, aniž by redakční tým musel pracovat s překladovými nástroji.
Agentury vytvářející vícejazyčné weby
Každý klientský web, který stavíte, potřebuje vícejazyčnou podporu. PolyLingo vám dává znovupoužitelnou, fakturovatelnou integraci, která funguje s jakýmkoli headless CMS ve vašem stacku.
E-commerce s lokalizovaným produktovým obsahem
Popisy produktů, stránky kategorií a blogový obsah — vše automaticky přeloženo při publikaci. Kombinujte s lokalizovanými cenami pro plně lokalizovaný nákupní zážitek.
Často kladené otázky o vícejazyčnosti v headless CMS
Funguje PolyLingo s CMS, která zde nejsou uvedena?
Ano. Jakékoli CMS s management API lze integrovat stejným vzorem — načíst obsah, zavolat PolyLingo, zapsat zpět. Prismic, Storyblok, DatoCMS, Strapi, Ghost a Directus mají management API a fungují s tímto přístupem. Příklady integrace pro Sanity, Contentful a Webflow výše ilustrují tento vzor.
Mohu překládat bohatý text s vloženými obrázky a odkazy?
Ano. Překlad HTML zachovává všechny vložené prvky včetně obrázků (atributy src a alt jsou správně zpracovány), odkazů (href zachováno, text odkazu přeložen) a iframe. Výjimkou je obsah explicitně označený jako nepřekládatelný — například bloky kódu se nikdy nepřekládají.
Jak zacházím s obsahem, který by neměl být překládán?
U strukturovaného obsahu s nepřekládatelnými poli (slugs, data, technické identifikátory) pošlete pouze pole, která chcete přeložit. U bohatého textu s mixem překládatelných a nepřekládatelných částí použijte formát HTML — PolyLingo přeloží textový obsah a automaticky zachová bloky kódu a další strukturované prvky.
Co když má moje CMS vnořené typy obsahu?
U hluboce vnořeného obsahu (dokumenty s odkazy na jiné dokumenty) překládáte každý typ dokumentu samostatně. Tím se vyhnete kruhovým odkazům a získáte čistou kontrolu nad tím, který obsah se překládá. Odkazy mezi dokumenty spravuje CMS — PolyLingo se dotýká pouze obsahu polí, ne vztahů dokumentů.
Jak udržuji překlady synchronizované, když se změní zdrojový obsah?
Doporučený vzor je spouštět překladový skript při každé události publikace přes webhook CMS. To zajistí, že přeložený obsah se aktualizuje vždy, když se změní zdroj. Pro méně časté aktualizace obsahu funguje stejně dobře spouštění skriptu v nočním plánu nebo před každým nasazením do produkce.
Existuje způsob, jak označit překlady jako „potřebují revizi“ místo automatického publikování?
To závisí na vašem CMS. Contentful i Sanity podporují stav konceptu — můžete zapisovat přeložený obsah jako koncept místo publikovaného, což umožňuje lidskou kontrolu před tím, než lokalita přejde do živého stavu. Příklady skriptů výše používají okamžité publikování; upravte poslední krok pro vytváření konceptů pro workflow s revizí.
Související návody
Překládejte HTML bez poškození značek
Jak PolyLingo zachází s HTML generovaným CMS se zachováním všech tagů.
Přidejte vícejazyčnost do Next.js
Kombinujte překlad obsahu headless CMS s překladem UI stringů pomocí next-intl.
Alternativa Polylang pro moderní stacky
Migrace vícejazyčného workflow z WordPress na headless řešení.
Přidejte vícejazyčnost do svého headless CMS ještě dnes.
Zdarma. 100 000 tokenů měsíčně. Bez nutnosti kreditní karty.
Začněte překládat zdarmaZdarma — 100 000 tokenů měsíčně. Funguje s jakýmkoli CMS.