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.
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
// 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
// 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
// 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
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.
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.
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.
Panduan berkaitan
Terjemah HTML tanpa merosakkan markup
Bagaimana PolyLingo mengendalikan HTML yang dijana CMS dengan pemeliharaan tag penuh.
Tambah pelbagai bahasa ke Next.js
Gabungkan terjemahan kandungan CMS tanpa kepala dengan terjemahan string UI next-intl.
Alternatif Polylang untuk tumpukan moden
Migrasi aliran kerja pelbagai bahasa dari WordPress ke tetapan tanpa kepala.
Tambah pelbagai bahasa ke CMS tanpa kepala anda hari ini.
Tahap percuma. 50,000 token sebulan. Tiada kad kredit diperlukan.
Mula terjemah secara percumaTahap percuma — 50,000 token sebulan. Berfungsi dengan mana-mana CMS.