CMS Tanpa Kepala + PolyLingo

Pelbagai Bahasa untuk CMS Tanpa Kepala.

Polylang memberikan laman WordPress aliran kerja pelbagai bahasa yang lengkap. PolyLingo membawa aliran kerja itu ke Sanity, Contentful, Webflow, Framer, dan setiap CMS tanpa kepala lain — melalui REST API yang boleh diintegrasikan dalam satu petang.

Sanity
contoh integrasi penuh
Contentful
contoh integrasi penuh
Webflow
contoh integrasi penuh
30
bahasa sasaran

Pelbagai bahasa CMS tanpa kepala adalah masalah yang belum diselesaikan.

Sanity mempunyai plugin pengantarabangsaan. Contentful mempunyai lokal. Tetapi kedua-duanya tidak menterjemah kandungan anda — mereka hanya menyimpannya dalam pelbagai bahasa. Mengisi slot bahasa itu masih proses manual. Eksport kandungan Bahasa Inggeris, jalankan melalui alat terjemahan yang merosakkan teks kaya atau struktur JSON anda, betulkan output, import semula, ulang untuk setiap bahasa. Untuk pasukan kandungan aktif yang menerbit secara berkala, aliran kerja ini tidak boleh diskalakan. Ia juga tidak wujud untuk kebanyakan tetapan kecil, yang bermakna kandungan itu tidak pernah diterjemah langsung.

Seni bina CMS tanpa kepala memisahkan pengurusan kandungan daripada penghantaran kandungan. Ini baik untuk fleksibiliti. Tetapi ia mencipta jurang: CMS menyimpan varian bahasa, tetapi tiada apa yang mengisi varian bahasa itu dengan kandungan terjemahan. Anda perlu membina lapisan itu sendiri.

Kebanyakan pasukan berakhir dalam salah satu daripada dua situasi: mereka menterjemah kandungan secara manual dengan menyalin ke DeepL dan menampalnya kembali (lambat, mudah salah, tidak diskalakan), atau mereka menulis integrasi khusus dengan API terjemahan yang perlu diselenggara tanpa had. Tiada satu pun jawapan yang baik. PolyLingo adalah pilihan ketiga yang bersih.

PolyLingo adalah lapisan terjemahan yang CMS anda perlukan.

PolyLingo diintegrasikan terus dengan aliran kerja penerbitan CMS anda. Tetapkan webhook yang diaktifkan apabila kandungan diterbitkan, hantar kandungan ke PolyLingo, terima versi terjemahan untuk setiap bahasa, tulis semula ke CMS anda. Untuk Sanity, ini beberapa baris dalam tindakan pelayan. Untuk Contentful, ia handler webhook. Untuk tetapan khusus, ia panggilan HTTP. Model terjemahan memahami format kandungan anda — Markdown, HTML, JSON, teks kaya — dan mengekalkan struktur sepanjang masa.

Corak ini konsisten di setiap CMS: ambil kandungan dalam bahasa sumber anda, panggil API PolyLingo dengan semua bahasa sasaran, tulis kandungan terjemahan kembali ke CMS melalui API pengurusan. Ini dijalankan sebagai skrip masa bina, kerja CI, atau handler webhook — mana-mana yang sesuai dengan aliran kerja anda.

PolyLingo mengendalikan Markdown, HTML, dan teks biasa, jadi ia berfungsi dengan apa sahaja format yang CMS anda gunakan untuk kandungan kaya. Medan berstruktur (tajuk, badan, petikan) boleh diterjemah secara individu untuk memberi anda kawalan terperinci ke atas medan yang diterjemah.

🟠

Sanity + PolyLingo

Plugin Pengantarabangsaan Dokumen Sanity mencipta varian dokumen yang dipautkan mengikut lokal. Skrip di bawah mengambil dokumen asas Bahasa Inggeris dan mencipta varian terjemahan untuk setiap bahasa sasaran secara automatik.

Berfungsi dengan corak i18n peringkat dokumen (satu dokumen per lokal) serta corak peringkat medan (semua lokal dalam satu dokumen). Untuk corak peringkat medan, ulang medan bukannya dokumen.

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 menyimpan varian lokal sebagai medan pada entri yang sama. Skrip di bawah menggunakan Contentful Management API untuk mengambil entri Bahasa Inggeris, menterjemahnya, dan menulis kandungan terjemahan terus ke medan khusus lokal — tiada salin tampal manual diperlukan.

Contentful menggunakan kod lokal BCP 47 (contoh es-ES dan bukannya es). Peta kod ISO 639-1 PolyLingo ke konfigurasi lokal Contentful anda dengan sewajarnya.

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 Lokalisasi Webflow (tersedia pada pelan CMS dan Perniagaan) menyokong kandungan medan khusus lokal. Skrip di bawah mengambil item koleksi CMS, menterjemah medan badan HTML, dan menulis terjemahan kembali ke setiap varian lokal melalui API Webflow v2.

Webflow menyimpan medan teks kaya sebagai HTML. Terjemahan HTML PolyLingo mengekalkan semua markup yang dijana Webflow — kelas tersuai, atribut, dan elemen terbenam — tanpa diubah.

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

Apa yang PolyLingo berikan kepada pengguna CMS tanpa kepala

  • Sanity — terjemah semasa penerbitan melalui webhook, tulis semula ke lokal dokumen
  • Contentful — terjemah entri secara automatik apabila lokal Bahasa Inggeris dikemas kini
  • Webflow — terjemah item koleksi CMS melalui API
  • Mana-mana CMS tanpa kepala dengan API — corak integrasi adalah sama
  • Teks kaya, Markdown, dan HTML semua dipelihara dengan betul
  • Semua 43 bahasa dalam satu permintaan — tiada panggilan per bahasa
  • Berfungsi dengan mana-mana CMS yang mempunyai API pengurusan
  • Kandungan boleh diterjemah semula pada setiap penerbitan — tiada penyelarasan manual

Aliran kerja CMS pelbagai bahasa standard

1

Tulis kandungan dalam bahasa sumber anda

Cipta dan terbitkan kandungan dalam Bahasa Inggeris (atau mana-mana bahasa sumber anda). CMS anda menyimpan ini sebagai versi autoritatif. Anda tidak perlu mengubah aliran kerja editorial anda langsung.

2

Aktifkan skrip terjemahan

Jalankan skrip secara manual, mengikut jadual, atau melalui webhook yang diaktifkan oleh acara penerbitan kandungan dalam CMS anda. Skrip memanggil PolyLingo sekali untuk setiap dokumen dengan semua bahasa sasaran, kemudian menulis semua terjemahan kembali ke CMS anda dalam satu langkah.

3

Sebarkan — kandungan terjemahan hidup

Frontend anda membaca kandungan khusus lokal dari CMS seperti biasa. Tiada perubahan pada kod frontend anda diperlukan. Kandungan terjemahan muncul dalam bahasa yang betul untuk setiap laluan lokal.

Siapa yang dibina untuk ini

✍️

Pasukan kandungan di Sanity atau Contentful

Editor anda menerbit dalam Bahasa Inggeris. Kandungan terjemahan muncul dalam semua lokal secara automatik, tanpa pasukan penyunting perlu berinteraksi dengan alat terjemahan.

🏢

Agensi membina laman pelbagai bahasa

Setiap laman pelanggan yang anda bina memerlukan sokongan pelbagai bahasa. PolyLingo memberi anda integrasi boleh guna semula dan boleh ditagih yang berfungsi merentas mana-mana CMS tanpa kepala dalam tumpukan anda.

🌍

E-dagang dengan kandungan produk yang dilokalkan

Penerangan produk, halaman kategori, dan kandungan blog — semua diterjemah secara automatik apabila diterbitkan. Gabungkan dengan harga khusus lokal untuk memberikan pengalaman membeli-belah yang sepenuhnya dilokalkan.

Soalan lazim tentang CMS tanpa kepala pelbagai bahasa

Adakah PolyLingo berfungsi dengan CMS yang tidak disenaraikan di sini?

Ya. Mana-mana CMS dengan API pengurusan boleh diintegrasikan menggunakan corak yang sama — ambil kandungan, panggil PolyLingo, tulis semula. Prismic, Storyblok, DatoCMS, Strapi, Ghost, dan Directus semua mempunyai API pengurusan dan berfungsi dengan pendekatan ini. Contoh integrasi untuk Sanity, Contentful, dan Webflow di atas menerangkan corak tersebut.

Bolehkah saya menterjemah teks kaya dengan imej dan pautan terbenam?

Ya. Terjemahan HTML mengekalkan semua elemen terbenam termasuk imej (atribut src dan alt dikendalikan dengan betul), pautan (href dipelihara, teks pautan diterjemah), dan iframe. Satu-satunya pengecualian adalah kandungan yang ditandakan secara eksplisit sebagai tidak boleh diterjemah — blok kod, contohnya, tidak pernah diterjemah.

Bagaimana saya mengendalikan kandungan yang tidak sepatutnya diterjemah?

Untuk kandungan berstruktur dengan medan yang tidak boleh diterjemah (slug, tarikh, pengecam teknikal), hantar hanya medan yang anda mahu terjemah. Untuk teks kaya dengan bahagian yang boleh dan tidak boleh diterjemah, gunakan format HTML — PolyLingo akan menterjemah kandungan teks sambil mengekalkan blok kod dan elemen berstruktur lain secara automatik.

Bagaimana jika CMS saya mempunyai jenis kandungan bersarang?

Untuk kandungan yang sangat bersarang (dokumen dengan rujukan kepada dokumen lain), terjemah setiap jenis dokumen secara berasingan. Ini mengelakkan rujukan bulat dan memberi anda kawalan bersih ke atas kandungan yang diterjemah. Rujukan antara dokumen dikekalkan oleh CMS — PolyLingo hanya menyentuh kandungan medan, bukan hubungan dokumen.

Bagaimana saya memastikan terjemahan selari apabila kandungan sumber berubah?

Corak yang disyorkan adalah mengaktifkan skrip terjemahan pada setiap acara penerbitan melalui webhook CMS. Ini memastikan kandungan terjemahan dikemas kini setiap kali sumber berubah. Untuk kemas kini kandungan yang kurang kerap, menjalankan skrip pada jadual malam atau sebelum setiap penyebaran produksi juga berfungsi dengan baik.

Adakah cara untuk menandakan terjemahan sebagai "perlu semakan" dan bukannya menerbit secara automatik?

Ini bergantung pada CMS anda. Contentful dan Sanity kedua-duanya menyokong status draf — anda boleh menulis kandungan terjemahan sebagai draf dan bukannya diterbitkan, membolehkan semakan manusia sebelum setiap lokal disiarkan. Contoh skrip di atas menggunakan terbit/cipta segera; ubah langkah akhir untuk mencipta draf sebagai gantinya untuk aliran kerja semakan.

Tambah pelbagai bahasa ke CMS tanpa kepala anda hari ini.

Tahap percuma. 50,000 token sebulan. Tiada kad kredit diperlukan.

Mula terjemah secara percuma

Tahap percuma — 50,000 token sebulan. Berfungsi dengan mana-mana CMS.

Pelbagai Bahasa untuk CMS Tanpa Kepala — Sanity, Contentful, dan lain-lain — PolyLingo | PolyLingo