Πολύγλωσσο για 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 διατηρούνται σωστά
- ✓Όλες οι 36 γλώσσες σε ένα αίτημα — χωρίς κλήσεις ανά γλώσσα
- ✓Λειτουργεί με οποιοδήποτε CMS που έχει API διαχείρισης
- ✓Το περιεχόμενο μπορεί να μεταφραστεί ξανά σε κάθε δημοσίευση — χωρίς χειροκίνητο συγχρονισμό
Η τυπική πολύγλωσση ροή εργασίας CMS
Γράψτε περιεχόμενο στη γλώσσα πηγής σας
Δημιουργήστε και δημοσιεύστε περιεχόμενο στα αγγλικά (ή όποια γλώσσα είναι η πηγή σας). Το CMS σας το αποθηκεύει ως την αυθεντική έκδοση. Δεν χρειάζεται να αλλάξετε καθόλου τη ροή εργασίας επιμέλειας.
Ενεργοποιήστε το σενάριο μετάφρασης
Τρέξτε το σενάριο χειροκίνητα, προγραμματισμένα ή μέσω webhook που ενεργοποιείται από γεγονότα δημοσίευσης περιεχομένου στο CMS σας. Το σενάριο καλεί το PolyLingo μία φορά ανά έγγραφο με όλες τις γλώσσες στόχους και μετά γράφει όλες τις μεταφράσεις πίσω στο CMS σε μία διέλευση.
Αναπτύξτε — το μεταφρασμένο περιεχόμενο είναι ζωντανό
Το frontend σας διαβάζει περιεχόμενο ανά τοπική ρύθμιση από το CMS όπως συνήθως. Δεν απαιτούνται αλλαγές στον κώδικα frontend. Το μεταφρασμένο περιεχόμενο εμφανίζεται στη σωστή γλώσσα για κάθε διαδρομή τοπικής ρύθμισης.
Για ποιον είναι φτιαγμένο αυτό
Ομάδες περιεχομένου σε Sanity ή Contentful
Οι επιμελητές σας δημοσιεύουν στα αγγλικά. Το μεταφρασμένο περιεχόμενο εμφανίζεται αυτόματα σε όλες τις τοπικές ρυθμίσεις, χωρίς να χρειάζεται η ομάδα επιμέλειας να αλληλεπιδρά με εργαλεία μετάφρασης.
Πρακτορεία που δημιουργούν πολύγλωσσα sites
Κάθε site πελάτη που δημιουργείτε χρειάζεται πολύγλωσση υποστήριξη. Το PolyLingo σας δίνει μια επαναχρησιμοποιήσιμη, τιμολογήσιμη ενσωμάτωση που λειτουργεί με κάθε headless CMS στο στοίβασμά σας.
E-commerce με τοπικοποιημένο περιεχόμενο προϊόντων
Περιγραφές προϊόντων, σελίδες κατηγοριών και περιεχόμενο 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 σας σήμερα.
Δωρεάν επίπεδο. 100.000 tokens ανά μήνα. Δεν απαιτείται πιστωτική κάρτα.
Ξεκινήστε τη δωρεάν μετάφρασηΔωρεάν επίπεδο — 100.000 tokens ανά μήνα. Λειτουργεί με οποιοδήποτε CMS.