Πολυγλωσσικό για headless CMS.
Το Polylang έδωσε στα sites WordPress μια πλήρη πολυγλωσσική ροή εργασίας. Το PolyLingo φέρνει αυτή τη ροή εργασίας στο Sanity, Contentful, Webflow, Framer και κάθε άλλο headless CMS — μέσω ενός REST API που ενσωματώνεται σε ένα απόγευμα.
Η πολυγλωσσικότητα σε headless CMS είναι ένα άλυτο πρόβλημα.
Το Sanity έχει το plugin διεθνοποίησης. Το Contentful έχει τοπικές ρυθμίσεις (locales). Αλλά κανένα από αυτά δεν μεταφράζει το περιεχόμενό σας — απλώς το αποθηκεύουν σε πολλές γλώσσες. Η συμπλήρωση αυτών των γλωσσικών θέσεων είναι ακόμα μια χειροκίνητη διαδικασία. Εξάγετε το αγγλικό περιεχόμενο, το περνάτε από ένα εργαλείο μετάφρασης που καταστρέφει το πλούσιο κείμενο ή τη δομή JSON, διορθώνετε το αποτέλεσμα, το εισάγετε ξανά, επαναλαμβάνετε για κάθε γλώσσα. Για μια ενεργή ομάδα περιεχομένου που δημοσιεύει τακτικά, αυτή η ροή εργασίας δεν κλιμακώνεται. Επίσης, δεν υπάρχει για τις περισσότερες μικρότερες εγκαταστάσεις, που σημαίνει ότι το περιεχόμενο απλώς δεν μεταφράζεται ποτέ.
Η αρχιτεκτονική headless CMS διαχωρίζει τη διαχείριση περιεχομένου από την παράδοση περιεχομένου. Αυτό είναι καλό για ευελιξία. Αλλά δημιουργεί ένα κενό: το CMS αποθηκεύει παραλλαγές γλώσσας, αλλά τίποτα δεν γεμίζει αυτές τις παραλλαγές με μεταφρασμένο περιεχόμενο. Πρέπει να δημιουργήσετε αυτό το στρώμα μόνοι σας.
Οι περισσότερες ομάδες καταλήγουν σε μία από δύο καταστάσεις: μεταφράζουν χειροκίνητα το περιεχόμενο αντιγράφοντάς το στο DeepL και επικολλώντας το πίσω (αργό, επιρρεπές σε λάθη, δεν κλιμακώνεται), ή γράφουν μια προσαρμοσμένη ενσωμάτωση με ένα API μετάφρασης που πρέπει να συντηρούν επ’ αόριστον. Κανένα από τα δύο δεν είναι καλή λύση. Το PolyLingo είναι μια καθαρή τρίτη επιλογή.
Το PolyLingo είναι το στρώμα μετάφρασης που λείπει από το CMS σας.
Το PolyLingo ενσωματώνεται απευθείας στη ροή εργασίας δημοσίευσης του CMS σας. Ρυθμίστε ένα webhook που ενεργοποιείται όταν δημοσιεύεται περιεχόμενο, περάστε το περιεχόμενο στο PolyLingo, λάβετε μεταφρασμένες εκδόσεις για κάθε γλώσσα, γράψτε τις πίσω στο CMS σας. Για το Sanity, είναι μερικές γραμμές σε μια ενέργεια διακομιστή. Για το Contentful, είναι ένας χειριστής webhook. Για προσαρμοσμένες εγκαταστάσεις, είναι μια κλήση HTTP. Το μοντέλο μετάφρασης κατανοεί τη μορφή του περιεχομένου σας — Markdown, HTML, JSON, πλούσιο κείμενο — και διατηρεί τη δομή καθ’ όλη τη διάρκεια.
Το μοτίβο είναι συνεπές σε κάθε CMS: ανακτήστε περιεχόμενο στη γλώσσα πηγής, καλέστε το API του PolyLingo με όλες τις γλώσσες στόχους, γράψτε το μεταφρασμένο περιεχόμενο πίσω στο CMS μέσω του API διαχείρισης. Αυτό εκτελείται ως σενάριο κατά το χρόνο κατασκευής, ως εργασία CI ή ως χειριστής webhook — ό,τι ταιριάζει στη ροή εργασίας σας.
Το PolyLingo χειρίζεται Markdown, HTML και απλό κείμενο, οπότε λειτουργεί με όποια μορφή χρησιμοποιεί το CMS σας για πλούσιο περιεχόμενο. Τα δομημένα πεδία (τίτλοι, σώμα, απόσπασμα) μπορούν να μεταφραστούν ξεχωριστά για να έχετε λεπτομερή έλεγχο σε ποια πεδία μεταφράζονται.
Sanity + PolyLingo
Το plugin Διεθνοποίησης Εγγράφων του Sanity δημιουργεί συνδεδεμένες παραλλαγές εγγράφων ανά τοπική ρύθμιση. Το παρακάτω σενάριο ανακτά τα βασικά έγγραφα στα αγγλικά και δημιουργεί αυτόματα μεταφρασμένες παραλλαγές για κάθε γλώσσα στόχο.
Λειτουργεί με το μοτίβο i18n σε επίπεδο εγγράφου (ένα έγγραφο ανά τοπική ρύθμιση) καθώς και με το μοτίβο σε επίπεδο πεδίου (όλες οι τοπικές ρυθμίσεις σε ένα έγγραφο). Για το μοτίβο σε επίπεδο πεδίου, κάντε βρόχο πάνω από τα πεδία αντί για τα έγγραφα.
// 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 αποθηκεύει παραλλαγές τοπικών ρυθμίσεων ως πεδία στην ίδια καταχώρηση. Το παρακάτω σενάριο χρησιμοποιεί το Contentful Management API για να ανακτήσει τις αγγλικές καταχωρήσεις, να τις μεταφράσει και να γράψει το μεταφρασμένο περιεχόμενο απευθείας στα πεδία συγκεκριμένων τοπικών ρυθμίσεων — χωρίς χειροκίνητο αντιγραφή-επικόλληση.
Το Contentful χρησιμοποιεί κωδικούς τοπικών ρυθμίσεων BCP 47 (π.χ. es-ES αντί για es). Αντιστοιχίστε τους κωδικούς ISO 639-1 του PolyLingo στη ρύθμιση τοπικών ρυθμίσεων του Contentful αναλόγως.
// 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
Το Localization API του Webflow (διαθέσιμο σε πλάνα CMS και Business) υποστηρίζει περιεχόμενο πεδίου ανά τοπική ρύθμιση. Το παρακάτω σενάριο ανακτά αντικείμενα συλλογής CMS, μεταφράζει το πεδίο σώματος HTML και γράφει τις μεταφράσεις πίσω σε κάθε παραλλαγή τοπικής ρύθμισης μέσω του Webflow v2 API.
Το Webflow αποθηκεύει πεδία πλούσιου κειμένου ως HTML. Η μετάφραση HTML του PolyLingo διατηρεί όλη τη σήμανση που δημιουργεί το Webflow — προσαρμοσμένες κλάσεις, χαρακτηριστικά και ενσωματωμένα στοιχεία — ανέπαφα.
// 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 στους χρήστες headless CMS
- ✓Sanity — μετάφραση κατά τη δημοσίευση μέσω webhook, εγγραφή πίσω στα τοπικά έγγραφα
- ✓Contentful — αυτόματη μετάφραση καταχωρήσεων όταν ενημερώνεται η αγγλική τοπική ρύθμιση
- ✓Webflow — μετάφραση αντικειμένων συλλογής CMS μέσω API
- ✓Οποιοδήποτε headless CMS με API — το μοτίβο ενσωμάτωσης είναι το ίδιο
- ✓Πλούσιο κείμενο, Markdown και HTML διατηρούνται σωστά
- ✓Όλες οι 43 γλώσσες σε ένα αίτημα — χωρίς κλήσεις ανά γλώσσα
- ✓Λειτουργεί με οποιοδήποτε CMS που έχει API διαχείρισης
- ✓Το περιεχόμενο μπορεί να μεταφραστεί ξανά σε κάθε δημοσίευση — χωρίς χειροκίνητο συγχρονισμό
Η τυπική πολυγλωσσική ροή εργασίας CMS
Γράψτε περιεχόμενο στη γλώσσα πηγής σας
Δημιουργήστε και δημοσιεύστε περιεχόμενο στα Αγγλικά (ή όποια γλώσσα είναι η πηγή σας). Το CMS σας το αποθηκεύει ως την αυθεντική έκδοση. Δεν χρειάζεται να αλλάξετε καθόλου τη ροή εργασίας επιμέλειας.
Ενεργοποιήστε το σενάριο μετάφρασης
Τρέξτε το σενάριο χειροκίνητα, προγραμματισμένα ή μέσω webhook που ενεργοποιείται από γεγονότα δημοσίευσης περιεχομένου στο CMS σας. Το σενάριο καλεί το PolyLingo μία φορά ανά έγγραφο με όλες τις γλώσσες στόχους και μετά γράφει όλες τις μεταφράσεις πίσω στο CMS σε μία διέλευση.
Αναπτύξτε — το μεταφρασμένο περιεχόμενο είναι ζωντανό
Το frontend σας διαβάζει το περιεχόμενο ανά τοπική ρύθμιση από το CMS όπως συνήθως. Δεν απαιτούνται αλλαγές στον κώδικα frontend. Το μεταφρασμένο περιεχόμενο εμφανίζεται στη σωστή γλώσσα για κάθε διαδρομή τοπικής ρύθμισης.
Για ποιον είναι σχεδιασμένο
Ομάδες περιεχομένου σε Sanity ή Contentful
Οι επιμελητές σας δημοσιεύουν στα Αγγλικά. Το μεταφρασμένο περιεχόμενο εμφανίζεται αυτόματα σε όλες τις τοπικές ρυθμίσεις, χωρίς να χρειάζεται η ομάδα επιμέλειας να αλληλεπιδρά με εργαλεία μετάφρασης.
Πρακτορεία που δημιουργούν πολυγλωσσικά sites
Κάθε πελατειακό site που δημιουργείτε χρειάζεται υποστήριξη πολυγλωσσικότητας. Το PolyLingo σας δίνει μια επαναχρησιμοποιήσιμη, τιμολογήσιμη ενσωμάτωση που λειτουργεί με κάθε headless CMS στο στοίβασμά σας.
Ηλεκτρονικό εμπόριο με τοπικοποιημένο περιεχόμενο προϊόντων
Περιγραφές προϊόντων, σελίδες κατηγοριών και περιεχόμενο blog — όλα μεταφράζονται αυτόματα κατά τη δημοσίευση. Συνδυάστε με τιμολόγηση ανά τοπική ρύθμιση για μια πλήρως τοπικοποιημένη εμπειρία αγορών.
Συχνές ερωτήσεις για την πολυγλωσσικότητα σε headless CMS
Λειτουργεί το PolyLingo με CMS που δεν αναφέρονται εδώ;
Ναι. Οποιοδήποτε CMS με API διαχείρισης μπορεί να ενσωματωθεί χρησιμοποιώντας το ίδιο μοτίβο — ανάκτηση περιεχομένου, κλήση PolyLingo, εγγραφή πίσω. Το Prismic, Storyblok, DatoCMS, Strapi, Ghost και Directus έχουν όλα API διαχείρισης και λειτουργούν με αυτή την προσέγγιση. Τα παραδείγματα ενσωμάτωσης για Sanity, Contentful και Webflow παραπάνω δείχνουν το μοτίβο.
Μπορώ να μεταφράσω πλούσιο κείμενο με ενσωματωμένες εικόνες και συνδέσμους;
Ναι. Η μετάφραση HTML διατηρεί όλα τα ενσωματωμένα στοιχεία, συμπεριλαμβανομένων των εικόνων (τα χαρακτηριστικά src και alt χειρίζονται σωστά), των συνδέσμων (το href διατηρείται, το κείμενο συνδέσμου μεταφράζεται) και των iframe. Η μόνη εξαίρεση είναι το περιεχόμενο που έχει ρητά επισημανθεί ως μη μεταφράσιμο — για παράδειγμα, τα μπλοκ κώδικα δεν μεταφράζονται ποτέ.
Πώς χειρίζομαι περιεχόμενο που δεν πρέπει να μεταφραστεί;
Για δομημένο περιεχόμενο με μη μεταφράσιμα πεδία (slugs, ημερομηνίες, τεχνικοί αναγνωριστές), στείλτε μόνο τα πεδία που θέλετε να μεταφραστούν. Για πλούσιο κείμενο με μικτά μεταφράσιμα και μη μεταφράσιμα τμήματα, χρησιμοποιήστε τη μορφή HTML — το PolyLingo θα μεταφράσει το κείμενο διατηρώντας αυτόματα τα μπλοκ κώδικα και άλλα δομημένα στοιχεία.
Τι γίνεται αν το CMS μου έχει εμφωλευμένους τύπους περιεχομένου;
Για βαθιά εμφωλευμένο περιεχόμενο (έγγραφα με αναφορές σε άλλα έγγραφα), μεταφράστε κάθε τύπο εγγράφου ανεξάρτητα. Αυτό αποφεύγει κυκλικές αναφορές και σας δίνει καθαρό έλεγχο σε ποιο περιεχόμενο μεταφράζεται. Οι αναφορές μεταξύ εγγράφων διατηρούνται από το CMS — το PolyLingo αγγίζει μόνο το περιεχόμενο πεδίου, όχι τις σχέσεις εγγράφων.
Πώς διατηρώ τις μεταφράσεις συγχρονισμένες όταν αλλάζει το περιεχόμενο πηγής;
Το προτεινόμενο μοτίβο είναι να ενεργοποιείτε το σενάριο μετάφρασης σε κάθε γεγονός δημοσίευσης μέσω webhook CMS. Αυτό εξασφαλίζει ότι το μεταφρασμένο περιεχόμενο ενημερώνεται όποτε αλλάζει η πηγή. Για λιγότερο συχνές ενημερώσεις περιεχομένου, το να τρέχετε το σενάριο σε νυχτερινό πρόγραμμα ή πριν από κάθε ανάπτυξη παραγωγής λειτουργεί εξίσου καλά.
Υπάρχει τρόπος να επισημάνω τις μεταφράσεις ως "χρειάζονται έλεγχο" αντί να δημοσιεύονται αυτόματα;
Αυτό εξαρτάται από το CMS σας. Το Contentful και το Sanity υποστηρίζουν καταστάσεις προσχεδίων — μπορείτε να γράψετε το μεταφρασμένο περιεχόμενο ως προσχέδιο αντί για δημοσιευμένο, επιτρέποντας ανθρώπινο έλεγχο πριν κάθε τοπική ρύθμιση γίνει ζωντανή. Τα παραδείγματα σεναρίων παραπάνω χρησιμοποιούν άμεση δημοσίευση/δημιουργία· τροποποιήστε το τελικό βήμα για να δημιουργήσετε προσχέδια για ροή εργασίας ελέγχου.
Σχετικοί οδηγοί
Μεταφράστε HTML χωρίς να σπάει η σήμανση
Πώς το PolyLingo χειρίζεται το HTML που δημιουργείται από CMS με πλήρη διατήρηση ετικετών.
Προσθέστε πολυγλωσσικότητα στο Next.js
Συνδυάστε τη μετάφραση περιεχομένου headless CMS με τη μετάφραση UI string του next-intl.
Εναλλακτική του Polylang για σύγχρονα stacks
Μεταφορά της πολυγλωσσικής ροής εργασίας από WordPress σε headless setup.
Προσθέστε πολυγλωσσικότητα στο headless CMS σας σήμερα.
Δωρεάν επίπεδο. 50.000 tokens ανά μήνα. Δεν απαιτείται πιστωτική κάρτα.
Ξεκινήστε τη δωρεάν μετάφρασηΔωρεάν επίπεδο — 50.000 tokens ανά μήνα. Λειτουργεί με οποιοδήποτε CMS.