Flerspråklig for headless CMS.
Polylang ga WordPress-nettsteder en komplett flerspråklig arbeidsflyt. PolyLingo bringer den arbeidsflyten til Sanity, Contentful, Webflow, Framer og alle andre headless CMS — gjennom en REST API som integreres på en ettermiddag.
Flerspråklighet i headless CMS er et uløst problem.
Sanity har internasjonaliserings-plugin. Contentful har lokaliteter. Men ingen av dem oversetter innholdet ditt — de lagrer det bare på flere språk. Å fylle disse språkplassene er fortsatt en manuell prosess. Eksporter det engelske innholdet, kjør det gjennom et oversettelsesverktøy som ødelegger rik tekst eller JSON-strukturen, rett opp i resultatet, importer det tilbake, gjenta for hvert språk. For et aktivt innholdsteam som publiserer regelmessig, skalerer ikke denne arbeidsflyten. Den finnes heller ikke for de fleste mindre oppsett, noe som betyr at innholdet aldri blir oversatt i det hele tatt.
Arkitekturen for headless CMS skiller innholdsadministrasjon fra innholdslevering. Dette er bra for fleksibilitet. Men det skaper et gap: CMS-et lagrer språkvarianter, men ingenting fyller disse språkvariantene med oversatt innhold. Du må bygge det laget selv.
De fleste team ender opp i en av to situasjoner: de oversetter innhold manuelt ved å kopiere det inn i DeepL og lime det tilbake (langsomt, feilutsatt, skalerer ikke), eller de skriver en tilpasset integrasjon med en oversettelses-API som de må vedlikeholde på ubestemt tid. Ingen av delene er et godt svar. PolyLingo er et rent tredje alternativ.
PolyLingo er oversettelseslaget CMS-et ditt mangler.
PolyLingo integreres direkte med CMS-ets publiseringsarbeidsflyt. Sett opp en webhook som utløses når innhold publiseres, send innholdet til PolyLingo, motta oversatte versjoner for hvert språk, skriv dem tilbake til CMS-et ditt. For Sanity er dette noen få linjer i en serverhandling. For Contentful er det en webhook-handler. For tilpassede oppsett er det et HTTP-kall. Oversettelsesmodellen forstår innholdsformatet ditt — Markdown, HTML, JSON, rik tekst — og bevarer strukturen gjennom hele prosessen.
Mønsteret er konsistent på tvers av alle CMS: hent innhold på kildespråket ditt, kall PolyLingo API med alle målspråk, skriv det oversatte innholdet tilbake til CMS via dets administrasjons-API. Dette kjøres som et bygg-tids-skript, en CI-jobb eller en webhook-handler — det som passer arbeidsflyten din.
PolyLingo håndterer Markdown, HTML og ren tekst, så det fungerer med hvilket som helst format CMS-et ditt bruker for rikt innhold. Strukturerte felt (overskrifter, brødtekst, utdrag) kan oversettes individuelt for å gi deg detaljert kontroll over hvilke felt som oversettes.
Sanity + PolyLingo
Sanitys Document Internationalization-plugin lager koblede dokumentvarianter per lokalitet. Skriptet nedenfor henter de engelske basisdokumentene og lager oversatte varianter for hvert målspråk automatisk.
Fungerer med dokumentnivå i18n-mønsteret (ett dokument per lokalitet) samt feltnivå-mønsteret (alle lokaliteter i ett dokument). For feltnivå-mønsteret, loop over feltene i stedet for dokumentene.
// 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 lagrer lokalitetsvarianter som felt på samme oppføring. Skriptet nedenfor bruker Contentful Management API for å hente engelske oppføringer, oversette dem og skrive det oversatte innholdet direkte til lokalitetsspesifikke felt — ingen manuell kopiering og liming nødvendig.
Contentful bruker BCP 47 lokalitetskoder (f.eks. es-ES i stedet for es). Kartlegg PolyLingos ISO 639-1-koder til din Contentful lokalitetskonfigurasjon deretter.
// 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 (tilgjengelig på CMS- og Business-planer) støtter lokalitetsspesifikt feltinnhold. Skriptet nedenfor henter CMS-samlingselementer, oversetter HTML-brødtekstfeltet og skriver oversettelsene tilbake til hver lokalitetsvariant via Webflow v2 API.
Webflow lagrer rike tekstfelt som HTML. PolyLingos HTML-oversettelse bevarer all Webflow-generert markup — egendefinerte klasser, attributter og innebygde 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 } }) }
)
}
}Hva PolyLingo gir headless CMS-brukere
- ✓Sanity — oversett ved publisering via webhook, skriv tilbake til dokumentlokaliteter
- ✓Contentful — oversett oppføringer automatisk når engelsk lokalitet oppdateres
- ✓Webflow — oversett CMS-samlingselementer via API-en
- ✓Alle headless CMS med API — integrasjonsmønsteret er det samme
- ✓Rik tekst, Markdown og HTML bevares korrekt
- ✓Alle 36 språk i én forespørsel — ingen kall per språk
- ✓Fungerer med alle CMS som har et administrasjons-API
- ✓Innhold kan oversettes på nytt ved hver publisering — ingen manuell synkronisering
Den standard flerspråklige CMS-arbeidsflyten
Skriv innhold på kildespråket ditt
Opprett og publiser innhold på engelsk (eller hvilket språk som er kilden din). CMS-et ditt lagrer dette som den autoritative versjonen. Du trenger ikke endre redaksjonell arbeidsflyt i det hele tatt.
Utløs oversettelsesskriptet
Kjør skriptet manuelt, på en tidsplan eller via en webhook som utløses av publiseringshendelser i CMS-et ditt. Skriptet kaller PolyLingo én gang per dokument med alle målspråk, og skriver deretter alle oversettelser tilbake til CMS i ett pass.
Distribuer — oversatt innhold er live
Frontend leser lokalitetsspesifikt innhold fra CMS som vanlig. Ingen endringer i frontend-koden kreves. Det oversatte innholdet vises på riktig språk for hver lokalitetsrute.
Hvem dette er laget for
Innholdsteam på Sanity eller Contentful
Dine redaktører publiserer på engelsk. Oversatt innhold vises i alle lokaliteter automatisk, uten at redaksjonsteamet trenger å bruke oversettelsesverktøy.
Byråer som bygger flerspråklige nettsteder
Hvert kundested du bygger trenger flerspråklig støtte. PolyLingo gir deg en gjenbrukbar, fakturerbar integrasjon som fungerer på tvers av alle headless CMS i stakken din.
E-handel med lokalisert produktinnhold
Produktbeskrivelser, kategorisider og blogginnhold — alt oversettes automatisk ved publisering. Kombiner med lokalitetsspesifikk prising for å levere en fullstendig lokalisert handleopplevelse.
Ofte stilte spørsmål om flerspråklig headless CMS
Fungerer PolyLingo med CMS-er som ikke er listet her?
Ja. Alle CMS med et administrasjons-API kan integreres med samme mønster — hent innhold, kall PolyLingo, skriv tilbake. Prismic, Storyblok, DatoCMS, Strapi, Ghost og Directus har alle administrasjons-API-er og fungerer med denne tilnærmingen. Integrasjonseksemplene for Sanity, Contentful og Webflow ovenfor illustrerer mønsteret.
Kan jeg oversette rik tekst med innebygde bilder og lenker?
Ja. HTML-oversettelse bevarer alle innebygde elementer inkludert bilder (src- og alt-attributter håndteres korrekt), lenker (href bevares, lenketekst oversettes) og iframes. Det eneste unntaket er innhold som eksplisitt er merket som ikke-oversettbart — kodeblokker, for eksempel, oversettes aldri.
Hvordan håndterer jeg innhold som ikke skal oversettes?
For strukturert innhold med ikke-oversettbare felt (slugs, datoer, tekniske identifikatorer), send kun feltene du ønsker oversatt. For rik tekst med blandede oversettbare og ikke-oversettbare seksjoner, bruk HTML-formatet — PolyLingo oversetter tekstinnhold samtidig som kodeblokker og andre strukturerte elementer bevares automatisk.
Hva om CMS-et mitt har nestede innholdstyper?
For dypt nestet innhold (dokumenter med referanser til andre dokumenter), oversett hver dokumenttype uavhengig. Dette unngår sirkulære referanser og gir deg klar kontroll over hvilket innhold som oversettes. Referanser mellom dokumenter opprettholdes av CMS — PolyLingo berører kun feltinnhold, ikke dokumentrelasjoner.
Hvordan holder jeg oversettelser synkronisert når kildeinnholdet endres?
Det anbefalte mønsteret er å utløse oversettelsesskriptet ved hver publiseringshendelse via en CMS-webhook. Dette sikrer at oversatt innhold oppdateres når kilden endres. For mindre hyppige oppdateringer fungerer det like godt å kjøre skriptet på en nattlig tidsplan eller før hver produksjonsdistribusjon.
Finnes det en måte å merke oversettelser som "trenger gjennomgang" i stedet for å publisere automatisk?
Dette avhenger av CMS-et ditt. Contentful og Sanity støtter begge utkaststilstander — du kan skrive oversatt innhold som utkast i stedet for publisert, slik at menneskelig gjennomgang kan skje før hver lokalitet går live. Skripteksemplene ovenfor bruker publiser/opprett umiddelbart; endre siste steg for å lage utkast i stedet for for en gjennomgangsarbeidsflyt.
Relaterte guider
Oversett HTML uten å ødelegge markup
Hvordan PolyLingo håndterer CMS-generert HTML med full tag-bevaring.
Legg til flerspråklighet i Next.js
Kombiner headless CMS-innholdsoversettelse med next-intl UI-strengoversettelse.
Polylang-alternativ for moderne stakker
Migrering av flerspråklig arbeidsflyt fra WordPress til et headless-oppsett.
Legg til flerspråklighet i ditt headless CMS i dag.
Gratis nivå. 100 000 tokens per måned. Ingen kredittkort kreves.
Begynn å oversette gratisGratis nivå — 100 000 tokens per måned. Fungerer med alle CMS.