Headless CMS + PolyLingo

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.

Sanity
full integrasjonseksempel
Contentful
full integrasjonseksempel
Webflow
full integrasjonseksempel
36
mål språk

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
// 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
// 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
// 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

1

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.

2

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.

3

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.

Legg til flerspråklighet i ditt headless CMS i dag.

Gratis nivå. 100 000 tokens per måned. Ingen kredittkort kreves.

Begynn å oversette gratis

Gratis nivå — 100 000 tokens per måned. Fungerer med alle CMS.

Flerspråklig for headless CMS — Sanity, Contentful og mer — PolyLingo | PolyLingo