Flersproget til headless CMS.
Polylang gav WordPress-sider en komplet flersproget arbejdsgang. PolyLingo bringer den arbejdsgang til Sanity, Contentful, Webflow, Framer og alle andre headless CMS — gennem en REST API, der integreres på en eftermiddag.
Flersproget headless CMS er et uløst problem.
Sanity har internationaliseringspluginet. Contentful har lokaliteter. Men ingen af dem oversætter dit indhold — de gemmer det bare på flere sprog. At udfylde disse sproglokationer er stadig en manuel proces. Eksporter det engelske indhold, kør det gennem et oversættelsesværktøj, der ødelægger din rich text eller JSON-struktur, ret outputtet, importer det tilbage, gentag for hvert sprog. For et aktivt indholdsteam, der udgiver regelmæssigt, skalerer denne arbejdsgang ikke. Den findes heller ikke for de fleste mindre opsætninger, hvilket betyder, at indholdet slet aldrig bliver oversat.
Headless CMS-arkitekturen adskiller indholdsstyring fra indholdslevering. Det er godt for fleksibilitet. Men det skaber et hul: CMS'et gemmer sprogvarianter, men intet udfylder disse sprogvarianter med oversat indhold. Du skal bygge det lag selv.
De fleste teams ender i en af to situationer: de oversætter manuelt indhold ved at kopiere det til DeepL og indsætte det igen (langsomt, fejlbehæftet, skalerer ikke), eller de skriver en tilpasset integration med en oversættelses-API, som de skal vedligeholde på ubestemt tid. Ingen af delene er et godt svar. PolyLingo er en ren tredje mulighed.
PolyLingo er det oversættelseslag, dit CMS mangler.
PolyLingo integreres direkte med din CMS-udgivelsesarbejdsgang. Opsæt en webhook, der aktiveres, når indhold udgives, send indholdet til PolyLingo, modtag oversatte versioner for hvert sprog, skriv dem tilbage til dit CMS. For Sanity er det få linjer i en serverhandling. For Contentful er det en webhook-handler. For tilpassede opsætninger er det et HTTP-kald. Oversættelsesmodellen forstår dit indholdsformat — Markdown, HTML, JSON, rich text — og bevarer strukturen hele vejen igennem.
Mønstret er konsistent på tværs af alle CMS: hent indhold på dit kildesprog, kald PolyLingo API'en med alle målsprog, skriv det oversatte indhold tilbage til CMS via dets administrations-API. Dette kører som et build-time script, et CI-job eller en webhook-handler — alt efter hvad der passer til din arbejdsgang.
PolyLingo håndterer Markdown, HTML og almindelig tekst, så det fungerer med det format, dit CMS bruger til rigt indhold. Strukturerede felter (overskrifter, brødtekst, uddrag) kan oversættes individuelt for at give dig detaljeret kontrol over, hvilke felter der oversættes.
Sanity + PolyLingo
Sanitys Document Internationalization plugin opretter linkede dokumentvarianter pr. lokalitet. Scriptet nedenfor henter de engelske basisdokumenter og opretter automatisk oversatte varianter for hvert målsprog.
Fungerer med dokumentniveau i18n-mønsteret (ét dokument pr. lokalitet) samt felt-niveau mønsteret (alle lokaliteter i ét dokument). For felt-niveau mønsteret, loop over felter i stedet for dokumenter.
// 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 gemmer lokalitetsvarianter som felter på samme post. Scriptet nedenfor bruger Contentful Management API til at hente engelske poster, oversætte dem og skrive det oversatte indhold direkte til de lokalitetsspecifikke felter — ingen manuel kopiering og indsætning nødvendig.
Contentful bruger BCP 47 lokalitetskoder (f.eks. es-ES i stedet for es). Kortlæg PolyLingos ISO 639-1 koder til din Contentful lokalitetskonfiguration tilsvarende.
// 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
Webflows Localization API (tilgængelig på CMS- og Business-planer) understøtter lokalitetsspecifikt feltindhold. Scriptet nedenfor henter CMS-samlingselementer, oversætter HTML-brødtekstfeltet og skriver oversættelser tilbage til hver lokalitetsvariant via Webflow v2 API.
Webflow gemmer rich text-felter som HTML. PolyLingos HTML-oversættelse bevarer al Webflow-genereret markup — brugerdefinerede klasser, attributter og indlejrede elementer — uberørt.
// 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 } }) }
)
}
}Hvad PolyLingo giver headless CMS-brugere
- ✓Sanity — oversæt ved udgivelse via webhook, skriv tilbage til dokumentlokaliteter
- ✓Contentful — oversæt poster automatisk, når den engelske lokalitet opdateres
- ✓Webflow — oversæt CMS-samlingselementer via API'en
- ✓Enhver headless CMS med en API — integrationsmønsteret er det samme
- ✓Rich text, Markdown og HTML bevares korrekt
- ✓Alle 36 sprog i én forespørgsel — ingen opkald pr. sprog
- ✓Fungerer med ethvert CMS, der har en administrations-API
- ✓Indhold kan oversættes igen ved hver udgivelse — ingen manuel synkronisering
Den standard flersprogede CMS-arbejdsgang
Skriv indhold på dit kildesprog
Opret og udgiv indhold på engelsk (eller hvilket sprog du bruger som kilde). Dit CMS gemmer dette som den autoritative version. Du behøver ikke ændre din redaktionelle arbejdsgang overhovedet.
Udløs oversættelsesscriptet
Kør scriptet manuelt, efter en tidsplan eller via en webhook, der aktiveres ved udgivelsesbegivenheder i dit CMS. Scriptet kalder PolyLingo én gang pr. dokument med alle målsprog og skriver derefter alle oversættelser tilbage til dit CMS i ét gennemløb.
Deploy — oversat indhold er live
Din frontend læser lokalitetsspecifikt indhold fra CMS som normalt. Ingen ændringer i din frontend-kode er nødvendige. Det oversatte indhold vises på det korrekte sprog for hver lokalitetsrute.
Hvem dette er bygget til
Indholdsteams på Sanity eller Contentful
Dine redaktører udgiver på engelsk. Oversat indhold vises automatisk i alle lokaliteter uden at redaktionsteamet behøver at interagere med oversættelsesværktøjer.
Agenturer, der bygger flersprogede sider
Hver kundeside, du bygger, har brug for flersproget support. PolyLingo giver dig en genanvendelig, fakturerbar integration, der fungerer på tværs af ethvert headless CMS i din stack.
E-handel med lokaliseret produktindhold
Produktbeskrivelser, kategorisider og blogindhold — alt oversættes automatisk ved udgivelse. Kombiner med lokalitetsspecifik prisfastsættelse for at levere en fuldt lokaliseret shoppingoplevelse.
Ofte stillede spørgsmål om flersproget headless CMS
Fungerer PolyLingo med CMS'er, der ikke er nævnt her?
Ja. Ethvert CMS med en administrations-API kan integreres ved hjælp af det samme mønster — hent indhold, kald PolyLingo, skriv tilbage. Prismic, Storyblok, DatoCMS, Strapi, Ghost og Directus har alle administrations-API'er og fungerer med denne tilgang. Integrations-eksemplerne for Sanity, Contentful og Webflow ovenfor illustrerer mønstret.
Kan jeg oversætte rich text med indlejrede billeder og links?
Ja. HTML-oversættelse bevarer alle indlejrede elementer inklusive billeder (src og alt-attributter håndteres korrekt), links (href bevares, linktekst oversættes) og iframes. Den eneste undtagelse er indhold, der eksplicit er markeret som ikke-oversætteligt — kodeblokke oversættes for eksempel aldrig.
Hvordan håndterer jeg indhold, der ikke skal oversættes?
For struktureret indhold med ikke-oversættelige felter (slugs, datoer, tekniske identifikatorer) send kun de felter, du ønsker oversat. For rich text med blandede oversættelige og ikke-oversættelige sektioner, brug HTML-formatet — PolyLingo oversætter tekstindhold, mens kodeblokke og andre strukturerede elementer bevares automatisk.
Hvad hvis mit CMS har indlejrede indholdstyper?
For dybt indlejret indhold (dokumenter med referencer til andre dokumenter) oversæt hver dokumenttype uafhængigt. Dette undgår cirkulære referencer og giver dig klar kontrol over, hvilket indhold der oversættes. Referencer mellem dokumenter vedligeholdes af CMS — PolyLingo berører kun feltindholdet, ikke dokumentrelationer.
Hvordan holder jeg oversættelser synkroniserede, når kildeindholdet ændres?
Det anbefalede mønster er at udløse oversættelsesscriptet ved hver udgivelsesbegivenhed via en CMS-webhook. Dette sikrer, at oversat indhold opdateres, når kilden ændres. For mindre hyppige opdateringer fungerer det lige så godt at køre scriptet på en natlig tidsplan eller før hver produktionsudrulning.
Er der en måde at markere oversættelser som "skal gennemgås" i stedet for automatisk at udgive?
Det afhænger af dit CMS. Contentful og Sanity understøtter begge kladdetilstande — du kan skrive oversat indhold som kladde i stedet for udgivet, hvilket tillader menneskelig gennemgang, før hver lokalitet går live. Skripteksemplerne ovenfor bruger udgiv/creer straks; ændr det sidste trin til at oprette kladder i stedet for en gennemgangsarbejdsgang.
Relaterede vejledninger
Oversæt HTML uden at ødelægge markup
Hvordan PolyLingo håndterer CMS-genereret HTML med fuld tag-bevarelse.
Tilføj flersproget til Next.js
Kombiner headless CMS-indholdsoversættelse med next-intl UI-strengoversættelse.
Polylang-alternativ til moderne stacks
Migrering af flersproget arbejdsgang fra WordPress til en headless opsætning.
Tilføj flersproget til dit headless CMS i dag.
Gratis niveau. 100.000 tokens pr. måned. Intet kreditkort kræves.
Begynd at oversætte gratisGratis niveau — 100.000 tokens pr. måned. Fungerer med ethvert CMS.