CMS Isiyo na Kichwa + PolyLingo

Lugha nyingi kwa CMS isiyo na kichwa.

Polylang ilitoa tovuti za WordPress mtiririko kamili wa lugha nyingi. PolyLingo inaleta mtiririko huo kwa Sanity, Contentful, Webflow, Framer, na kila CMS isiyo na kichwa — kupitia REST API inayounganishwa mchana mmoja.

Sanity
mfano kamili wa kuunganisha
Contentful
mfano kamili wa kuunganisha
Webflow
mfano kamili wa kuunganisha
36
lugha lengwa

Lugha nyingi kwa CMS isiyo na kichwa ni tatizo lisilotatuliwa.

Sanity ina kiendelezi cha utafsiri wa kimataifa. Contentful ina maeneo ya lugha. Lakini hakuna kati yao anayetafsiri maudhui yako — wanahifadhi tu katika lugha nyingi. Kujaza nafasi hizo za lugha bado ni mchakato wa mkono. Hamisha maudhui ya Kiingereza, yaendeshe kupitia chombo cha tafsiri kinachovunja muundo wa maandishi tajiri au JSON, rekebisha matokeo, ingiza tena, rudia kwa kila lugha. Kwa timu ya maudhui inayochapisha mara kwa mara, mtiririko huu hauwezi kuongezeka. Pia haupo kwa usanidi mdogo zaidi, maana maudhui hayatafsiriwi kabisa.

Msingi wa CMS isiyo na kichwa unatenganisha usimamizi wa maudhui na utoaji wa maudhui. Hii ni nzuri kwa kubadilika. Lakini huunda pengo: CMS huhifadhi toleo la lugha, lakini hakuna kinachojaza matoleo hayo ya lugha na maudhui yaliyotafsiriwa. Lazima ujenge tabaka hilo mwenyewe.

Timu nyingi hupata hali mbili: hutafsiri maudhui kwa mkono kwa kunakili na kubandika kwenye DeepL (polepole, makosa mengi, haiongezeki), au huandika muunganiko maalum na API ya tafsiri ambayo wanapaswa kuendeleza milele. Hakuna jibu zuri. PolyLingo ni chaguo la tatu safi.

PolyLingo ni tabaka la tafsiri ambalo CMS yako inakosa.

PolyLingo inaunganisha moja kwa moja na mtiririko wa kuchapisha wa CMS yako. Weka webhook inayotekelezwa unapo chapisha maudhui, pita maudhui kwa PolyLingo, pokea matoleo yaliyotafsiriwa kwa kila lugha, yaandike tena kwenye CMS yako. Kwa Sanity, ni mistari michache katika hatua ya seva. Kwa Contentful, ni mshughulikiaji wa webhook. Kwa usanidi maalum, ni wito wa HTTP. Mfano wa tafsiri unaelewa muundo wa maudhui yako — Markdown, HTML, JSON, maandishi tajiri — na huhifadhi muundo wote.

Muundo ni thabiti kwa kila CMS: pata maudhui kwa lugha yako ya chanzo, piga simu kwa API ya PolyLingo na lugha zote lengwa, andika maudhui yaliyotafsiriwa tena kwenye CMS kupitia API yake ya usimamizi. Hii hufanyika kama script ya wakati wa kujenga, kazi ya CI, au mshughulikiaji wa webhook — ipi itakayofaa mtiririko wako.

PolyLingo hushughulikia Markdown, HTML, na maandishi rahisi, hivyo hufanya kazi na muundo wowote CMS yako inatumia kwa maudhui tajiri. Sehemu zilizo na muundo (vichwa, mwili, muhtasari) zinaweza kutafsiriwa kwa kila moja ili kukupa udhibiti wa kina juu ya sehemu zinazotafsiriwa.

🟠

Sanity + PolyLingo

Kiendelezi cha Utafsiri wa Hati wa Sanity huunda matoleo ya hati yaliyounganishwa kwa kila eneo la lugha. Script iliyo hapa chini hupata hati za msingi za Kiingereza na huunda matoleo yaliyotafsiriwa kwa kila lugha lengwa moja kwa moja.

Inafanya kazi na muundo wa i18n wa kiwango cha hati (hati moja kwa kila eneo) pamoja na muundo wa kiwango cha sehemu (maeneo yote katika hati moja). Kwa muundo wa kiwango cha sehemu, piga mzunguko juu ya sehemu badala ya hati.

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 huhifadhi matoleo ya lugha kama sehemu kwenye ingizo moja. Script iliyo hapa chini inatumia Contentful Management API kupata maingizo ya Kiingereza, kuyatafsiri, na kuandika maudhui yaliyotafsiriwa moja kwa moja kwenye sehemu za lugha husika — hakuna kunakili-bandika kwa mkono kunahitajika.

Contentful hutumia nambari za eneo la BCP 47 (mfano es-ESes). Ramani nambari za ISO 639-1 za PolyLingo kwa usanidi wa eneo la Contentful ipasavyo.

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

API ya Utafsiri ya Webflow (inapatikana kwenye mipango ya CMS na Biashara) inaunga mkono maudhui ya sehemu maalum za lugha. Script iliyo hapa chini hupata vitu vya mkusanyiko wa CMS, hutafsiri sehemu ya mwili wa HTML, na huandika tafsiri tena kwa kila toleo la lugha kupitia API ya Webflow v2.

Webflow huhifadhi sehemu za maandishi tajiri kama HTML. Tafsiri ya HTML ya PolyLingo huhifadhi alama zote zilizotengenezwa na Webflow — madarasa maalum, sifa, na vipengele vilivyojumuishwa — bila kubadilika.

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 } }) }
    )
  }
}

Kile PolyLingo kinachowapatia watumiaji wa CMS isiyo na kichwa

  • Sanity — tafsiri unapo chapisha kupitia webhook, andika tena kwenye maeneo ya hati
  • Contentful — tafsiri maingizo moja kwa moja wakati eneo la Kiingereza linaposasishwa
  • Webflow — tafsiri vitu vya mkusanyiko wa CMS kupitia API
  • CMS yoyote isiyo na kichwa yenye API — muundo wa kuunganisha ni ule ule
  • Maandishi tajiri, Markdown, na HTML yote huhifadhiwa kwa usahihi
  • Lugha zote 36 kwa ombi moja — hakuna simu kwa kila lugha
  • Inafanya kazi na CMS yoyote yenye API ya usimamizi
  • Maudhui yanaweza kutafsiriwa tena kila kuchapishwa — hakuna usawazishaji wa mkono

Mtiririko wa kawaida wa CMS yenye lugha nyingi

1

Andika maudhui kwa lugha yako ya chanzo

Tengeneza na uchapishe maudhui kwa Kiingereza (au lugha yoyote ile ya chanzo). CMS yako huhifadhi hii kama toleo la mamlaka. Huna haja ya kubadilisha mtiririko wako wa uhariri kabisa.

2

Anzisha script ya tafsiri

Endesha script kwa mkono, kwa ratiba, au kupitia webhook inayotekelezwa na matukio ya kuchapisha maudhui kwenye CMS yako. Script hupiga simu kwa PolyLingo mara moja kwa kila hati na lugha zote lengwa, kisha huandika tafsiri zote tena kwenye CMS yako kwa mara moja.

3

Tuma — maudhui yaliyotafsiriwa yanaishi

Mbele yako husoma maudhui maalum ya eneo kutoka CMS kama kawaida. Hakuna mabadiliko yanayohitajika kwenye msimbo wa mbele. Maudhui yaliyotafsiriwa yanaonekana kwa lugha sahihi kwa kila njia ya eneo.

Kwa nani hii imetengenezwa

✍️

Timu za maudhui kwenye Sanity au Contentful

Waandishi wako huchapisha kwa Kiingereza. Maudhui yaliyotafsiriwa yanaonekana katika maeneo yote moja kwa moja, bila timu ya uhariri kuhitaji kutumia zana za tafsiri.

🏢

Wakala wanaojenga tovuti za lugha nyingi

Kila tovuti ya mteja unayojenga inahitaji msaada wa lugha nyingi. PolyLingo inakupa muunganiko unaoweza kutumika tena, unaolipika unaofanya kazi kwenye CMS yoyote isiyo na kichwa katika stack yako.

🌍

E-biashara na maudhui ya bidhaa yaliyolengwa kwa lugha

Maelezo ya bidhaa, kurasa za makundi, na maudhui ya blogi — yote hutafsiriwa moja kwa moja wakati yanapochapishwa. Changanya na bei maalum za eneo ili kutoa uzoefu kamili wa ununuzi uliolengwa.

Maswali yanayoulizwa mara kwa mara kuhusu lugha nyingi kwa CMS isiyo na kichwa

Je, PolyLingo inafanya kazi na CMS ambazo hazijatolewa hapa?

Ndiyo. CMS yoyote yenye API ya usimamizi inaweza kuunganishwa kwa kutumia muundo ule ule — pata maudhui, piga simu kwa PolyLingo, andika tena. Prismic, Storyblok, DatoCMS, Strapi, Ghost, na Directus wote wana API za usimamizi na hufanya kazi na njia hii. Mifano ya kuunganisha kwa Sanity, Contentful, na Webflow hapo juu inaonyesha muundo huo.

Je, naweza kutafsiri maandishi tajiri yenye picha na viungo vilivyojumuishwa?

Ndiyo. Tafsiri ya HTML huhifadhi vipengele vyote vilivyojumuishwa ikiwa ni pamoja na picha (sifa za src na alt zinashughulikiwa kwa usahihi), viungo (href huhifadhiwa, maandishi ya kiungo hutafsiriwa), na iframes. Isitoshe, maudhui yaliyotajwa kama yasiyotafsiriwa — kama sehemu za msimbo — hayatafsiriwi kamwe.

Nashughulikiaje maudhui ambayo hayapaswi kutafsiriwa?

Kwa maudhui yenye muundo na sehemu zisizotafsiriwa (slugs, tarehe, vitambulisho vya kiufundi), tuma sehemu unazotaka kutafsiriwa tu. Kwa maandishi tajiri yenye sehemu mchanganyiko za kutafsiriwa na zisizotafsiriwa, tumia muundo wa HTML — PolyLingo itatafsiri maandishi huku ikihifadhi sehemu za msimbo na vipengele vingine vya muundo moja kwa moja.

Je, CMS yangu ina aina za maudhui yaliyowekwa ndani?

Kwa maudhui yaliyowekwa ndani kwa kina (hati zilizo na marejeleo kwa hati nyingine), tafsiri kila aina ya hati kwa kujitegemea. Hii huzuia marejeleo ya mzunguko na inakupa udhibiti safi juu ya maudhui yanayotafsiriwa. Marejeleo kati ya hati huhifadhiwa na CMS — PolyLingo hugusa maudhui ya sehemu tu, si uhusiano wa hati.

Nashawishije tafsiri ziendane wakati maudhui ya chanzo yanapobadilika?

Muundo unaopendekezwa ni kuanzisha script ya tafsiri kila tukio la kuchapisha kupitia webhook ya CMS. Hii inahakikisha maudhui yaliyotafsiriwa yanasasishwa kila chanzo kinapobadilika. Kwa masasisho ya maudhui yasiyo ya mara kwa mara, kuendesha script kwa ratiba ya usiku au kabla ya kila utoaji wa uzalishaji pia hufanya kazi sawa.

Je, kuna njia ya kuweka alama tafsiri kama "zinahitaji ukaguzi" badala ya kuchapishwa moja kwa moja?

Hii inategemea CMS yako. Contentful na Sanity zote zinaunga mkono hali za rasimu — unaweza kuandika maudhui yaliyotafsiriwa kama rasimu badala ya kuchapishwa, kuruhusu ukaguzi wa binadamu kabla ya kila eneo kuishi. Mifano ya script hapo juu hutumia kuchapisha/kuunda mara moja; badilisha hatua ya mwisho kuunda rasimu badala kwa mtiririko wa ukaguzi.

Ongeza lugha nyingi kwenye CMS isiyo na kichwa leo.

Ngazi ya bure. Tokeni 50,000 kwa mwezi. Hakuna kadi ya mkopo inahitajika.

Anza kutafsiri bure

Ngazi ya bure — tokeni 50,000 kwa mwezi. Inafanya kazi na CMS yoyote.

Lugha nyingi kwa CMS isiyo na kichwa — Sanity, Contentful, na zaidi — PolyLingo | PolyLingo