Banyak Bahasa untuk CMS Tanpa Kepala.
Polylang memberikan laman WordPress aliran kerja banyak 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.
CMS tanpa kepala banyak bahasa 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 memecahkan 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 setup kecil, yang bermakna kandungan itu tidak pernah diterjemah langsung.
Arkitektur 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 bina 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 buat silap, tidak boleh diskalakan), atau mereka menulis integrasi khusus dengan API terjemahan yang perlu diselenggara selama-lamanya. 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 kembali ke CMS anda. Untuk Sanity, ini hanya beberapa baris dalam tindakan pelayan. Untuk Contentful, ia handler webhook. Untuk setup 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 per dokumen (satu dokumen per lokal) serta corak per medan (semua lokal dalam satu dokumen). Untuk corak per medan, ulang medan dan bukan 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 bukan 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 kembali 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 36 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 banyak 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 rasmi. 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 setiap dokumen dengan semua bahasa sasaran, kemudian menulis semua terjemahan kembali ke CMS anda dalam satu langkah.
Sebarkan — kandungan terjemah sudah hidup
Frontend anda membaca kandungan khusus lokal dari CMS seperti biasa. Tiada perubahan pada kod frontend diperlukan. Kandungan terjemah 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 terjemah muncul dalam semua lokal secara automatik, tanpa pasukan penyunting perlu berinteraksi dengan alat terjemahan.
Agensi membina laman banyak bahasa
Setiap laman pelanggan yang anda bina memerlukan sokongan banyak 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 banyak 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 kembali. 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 tidak boleh diterjemah (slug, tarikh, pengecam teknikal), hantar hanya medan yang anda mahu terjemah. Untuk teks kaya dengan bahagian boleh dan tidak boleh diterjemah bercampur, 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 ke dokumen lain), terjemah setiap jenis dokumen secara bebas. 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 terjemah dikemas kini setiap kali sumber berubah. Untuk kemas kini kandungan yang kurang kerap, menjalankan skrip mengikut jadual malam atau sebelum setiap penyebaran produksi juga berkesan.
Adakah cara untuk menandakan terjemahan sebagai "perlu semakan" dan bukannya menerbit secara automatik?
Ini bergantung pada CMS anda. Contentful dan Sanity kedua-duanya menyokong keadaan draf — anda boleh menulis kandungan terjemah 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 banyak bahasa ke Next.js
Gabungkan terjemahan kandungan CMS tanpa kepala dengan terjemahan string UI next-intl.
Alternatif Polylang untuk tumpukan moden
Migrasi aliran kerja banyak bahasa dari WordPress ke setup tanpa kepala.
Tambah banyak 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.