Başsız CMS için Çok Dilli Destek.
Polylang, WordPress sitelerine eksiksiz bir çok dilli iş akışı sundu. PolyLingo, bu iş akışını Sanity, Contentful, Webflow, Framer ve diğer tüm başsız CMS’lere — bir öğleden sonra entegre edilen REST API aracılığıyla — getiriyor.
Başsız CMS çok dilli desteği çözülmemiş bir sorun.
Sanity uluslararasılaştırma eklentisine sahip. Contentful ise yerel ayarları destekliyor. Ancak hiçbiri içeriğinizi çevirmiyor — sadece birden fazla dilde saklıyorlar. Bu dil alanlarını doldurmak hâlâ manuel bir süreç. İngilizce içeriği dışa aktarın, zengin metin veya JSON yapınızı bozan bir çeviri aracından geçirin, çıktıyı düzeltin, tekrar içe aktarın, her dil için tekrarlayın. Aktif bir içerik ekibi için bu iş akışı ölçeklenmez. Ayrıca çoğu küçük kurulumda böyle bir iş akışı yoktur, bu da içeriğin hiç çevrilmemesi anlamına gelir.
Başsız CMS mimarisi içerik yönetimini içerik sunumundan ayırır. Bu esneklik için iyidir. Ancak bir boşluk yaratır: CMS dil varyantlarını saklar, ancak bu varyantları çevrilmiş içerikle dolduran bir şey yoktur. Bu katmanı kendiniz oluşturmanız gerekir.
Çoğu ekip iki durumdan birine düşer: içeriği manuel olarak DeepL’e kopyalayıp yapıştırarak çevirirler (yavaş, hata yapmaya açık, ölçeklenmez) veya sonsuza dek sürdürmeleri gereken özel bir çeviri API entegrasyonu yazarlar. Hiçbiri iyi bir çözüm değildir. PolyLingo temiz bir üçüncü seçenektir.
PolyLingo, CMS’inizin eksik olan çeviri katmanıdır.
PolyLingo, CMS yayın iş akışınıza doğrudan entegre olur. İçerik yayınlandığında tetiklenen bir webhook kurun, içeriği PolyLingo’ya gönderin, her dil için çevrilmiş versiyonları alın, CMS’inize geri yazın. Sanity için bu, bir sunucu eyleminde birkaç satırdır. Contentful için bir webhook işleyicisidir. Özel kurulumlar için HTTP çağrısıdır. Çeviri modeli içeriğinizin formatını anlar — Markdown, HTML, JSON, zengin metin — ve yapıyı korur.
Desen her CMS’de tutarlıdır: kaynak dilinizde içeriği alın, PolyLingo API’sini tüm hedef dillerle çağırın, çevrilmiş içeriği CMS’in yönetim API’si aracılığıyla geri yazın. Bu, bir derleme zamanı betiği, CI işi veya webhook işleyicisi olarak çalışır — iş akışınıza hangisi uygunsa.
PolyLingo Markdown, HTML ve düz metni işler, böylece CMS’inizin zengin içerik için kullandığı format ne olursa olsun çalışır. Yapılandırılmış alanlar (başlıklar, gövde, özet) ayrı ayrı çevrilebilir, böylece hangi alanların çevrileceği üzerinde ayrıntılı kontrol sağlarsınız.
Sanity + PolyLingo
Sanity’nin Belge Uluslararasılaştırma eklentisi, her yerel ayar için bağlantılı belge varyantları oluşturur. Aşağıdaki betik İngilizce temel belgeleri alır ve her hedef dil için otomatik olarak çevrilmiş varyantlar oluşturur.
Belge düzeyinde i18n desen (her yerel ayar için bir belge) ve alan düzeyinde desen (tüm yerel ayarlar tek belgede) ile çalışır. Alan düzeyi desen için belgeler yerine alanlar üzerinde döngü yapın.
// 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, yerel varyantları aynı girişte alanlar olarak saklar. Aşağıdaki betik Contentful Yönetim API’sini kullanarak İngilizce girişleri alır, çevirir ve çevrilmiş içeriği doğrudan yerel ayar alanlarına yazar — manuel kopyala-yapıştır gerekmez.
Contentful BCP 47 yerel ayar kodları kullanır (örneğin es-ES es yerine). PolyLingo’nun ISO 639-1 kodlarını Contentful yerel ayar yapılandırmanıza göre eşleyin.
// 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
Webflow’un Lokalizasyon API’si (CMS ve İş planlarında mevcut) yerel ayar bazlı alan içeriğini destekler. Aşağıdaki betik CMS koleksiyon öğelerini alır, HTML gövde alanını çevirir ve Webflow v2 API aracılığıyla her yerel varyanta çevirileri yazar.
Webflow zengin metin alanlarını HTML olarak saklar. PolyLingo’nun HTML çevirisi, Webflow tarafından oluşturulan tüm işaretlemeleri — özel sınıflar, öznitelikler ve gömülü öğeler — bozulmadan korur.
// 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 } }) }
)
}
}PolyLingo’nun başsız CMS kullanıcılarına sundukları
- ✓Sanity — yayın sırasında webhook ile çeviri yapar, belge yerel ayarlarına geri yazar
- ✓Contentful — İngilizce yerel ayar güncellendiğinde girişleri otomatik çevirir
- ✓Webflow — API aracılığıyla CMS koleksiyon öğelerini çevirir
- ✓API’ye sahip herhangi bir başsız CMS — entegrasyon deseni aynıdır
- ✓Zengin metin, Markdown ve HTML doğru şekilde korunur
- ✓Tüm 36 dili tek istekte — dil başına çağrı yok
- ✓Yönetim API’si olan herhangi bir CMS ile çalışır
- ✓İçerik her yayınlamada yeniden çevrilebilir — manuel senkronizasyon gerekmez
Standart çok dilli CMS iş akışı
İçeriği kaynak dilinizde yazın
İçeriği İngilizce (veya kaynak diliniz neyse) oluşturup yayınlayın. CMS bunu yetkili sürüm olarak saklar. Editoryal iş akışınızı değiştirmeye gerek yok.
Çeviri betiğini tetikleyin
Betik manuel, zamanlanmış veya CMS’de içerik yayınlama olaylarıyla tetiklenen webhook ile çalıştırılabilir. Betik, her belge için tüm hedef dillerle PolyLingo’yu çağırır, ardından tüm çevirileri tek seferde CMS’e yazar.
Yayınlayın — çevrilmiş içerik yayında
Ön yüzünüz CMS’den yerel ayar bazlı içeriği her zamanki gibi okur. Ön yüz kodunuzda değişiklik gerekmez. Çevrilmiş içerik, her yerel yol için doğru dilde görünür.
Kimler için tasarlandı
Sanity veya Contentful içerik ekipleri
Editörleriniz İngilizce yayın yapar. Çevrilmiş içerik tüm yerel ayarlarda otomatik olarak görünür, çeviri araçlarıyla etkileşim gerekmez.
Çok dilli siteler kuran ajanslar
Yaptığınız her müşteri sitesi çok dilli desteğe ihtiyaç duyar. PolyLingo, yığınınızdaki herhangi bir başsız CMS ile çalışan yeniden kullanılabilir, faturalandırılabilir bir entegrasyon sunar.
Yerelleştirilmiş ürün içeriği ile e-ticaret
Ürün açıklamaları, kategori sayfaları ve blog içeriği — yayınlandığında otomatik olarak çevrilir. Yerel fiyatlandırma ile birleştirerek tamamen yerelleştirilmiş bir alışveriş deneyimi sunun.
Başsız CMS çok dilli desteği hakkında sıkça sorulan sorular
PolyLingo burada listelenmeyen CMS’lerle çalışır mı?
Evet. Yönetim API’si olan herhangi bir CMS aynı desenle entegre edilebilir — içerik alınır, PolyLingo çağrılır, geri yazılır. Prismic, Storyblok, DatoCMS, Strapi, Ghost ve Directus tümü yönetim API’lerine sahiptir ve bu yaklaşımla çalışır. Yukarıdaki Sanity, Contentful ve Webflow entegrasyon örnekleri deseni gösterir.
Gömülü resimler ve bağlantılar içeren zengin metni çevirebilir miyim?
Evet. HTML çevirisi, resimler (src ve alt öznitelikleri doğru şekilde işlenir), bağlantılar (href korunur, bağlantı metni çevrilir) ve iframe’ler dahil tüm gömülü öğeleri korur. Tek istisna, açıkça çevrilmemesi işaretlenmiş içeriktir — örneğin kod blokları asla çevrilmez.
Çevrilmemesi gereken içeriği nasıl yönetirim?
Çevrilmemesi gereken alanlar (sluglar, tarihler, teknik tanımlayıcılar) için sadece çevrilmesini istediğiniz alanları gönderin. Karışık çevrilebilir ve çevrilmemesi gereken bölümler içeren zengin metin için HTML formatını kullanın — PolyLingo metin içeriğini çevirirken kod blokları ve diğer yapılandırılmış öğeleri otomatik olarak korur.
CMS’imde iç içe içerik türleri varsa ne yapmalıyım?
Derin iç içe içerik (diğer belgelere referanslar içeren belgeler) için her belge türünü bağımsız çevirin. Bu, döngüsel referansları önler ve hangi içeriğin çevrileceği üzerinde temiz kontrol sağlar. Belgeler arası referanslar CMS tarafından korunur — PolyLingo sadece alan içeriğine dokunur, belge ilişkilerine değil.
Kaynak içerik değiştiğinde çevirileri nasıl senkronize tutarım?
Önerilen desen, her yayınlama olayında CMS webhook’u aracılığıyla çeviri betiğini tetiklemektir. Bu, kaynak değiştiğinde çevrilmiş içeriğin güncellenmesini sağlar. Daha az sık içerik güncellemeleri için betiği gece çalıştırmak veya her üretim dağıtımından önce çalıştırmak da uygundur.
Çevirileri otomatik yayınlamak yerine "inceleme gerekiyor" olarak işaretlemenin bir yolu var mı?
Bu CMS’inize bağlıdır. Contentful ve Sanity taslak durumlarını destekler — çevrilmiş içeriği yayınlanmış yerine taslak olarak yazabilirsiniz, böylece her yerel ayar yayına alınmadan önce insan incelemesi yapılabilir. Yukarıdaki betik örnekleri hemen yayınlama/oluşturma yapar; inceleme iş akışı için son adımı taslak oluşturacak şekilde değiştirin.
İlgili rehberler
İşaretlemeyi bozmadan HTML çevirisi
PolyLingo’nun CMS tarafından oluşturulan HTML’yi tam etiket korumasıyla nasıl işlediği.
Next.js’e çok dilli destek ekleyin
Başsız CMS içerik çevirisini next-intl UI dize çevirisi ile birleştirin.
Modern yığınlar için Polylang alternatifi
Çok dilli iş akışını WordPress’ten başsız kurulumlara taşıma.
Başsız CMS’inize bugün çok dilli destek ekleyin.
Ücretsiz katman. Ayda 100.000 token. Kredi kartı gerekmez.
Ücretsiz çeviriye başlayınÜcretsiz katman — ayda 100.000 token. Herhangi bir CMS ile çalışır.