Προσθέστε πολυγλωσσικότητα στην εφαρμογή Next.js σας.
Μεταφράστε τα αρχεία τοπικών ρυθμίσεων, το περιεχόμενο Markdown και τις σελίδες HTML μέσω μιας μόνο κλήσης API. Λειτουργεί με το App Router, next-intl και οποιαδήποτε ρύθμιση δρομολόγησης i18n.
Το Next.js σας δίνει δρομολόγηση. Δεν σας δίνει μεταφράσεις.
Το Next.js App Router έχει εξαιρετική ενσωματωμένη υποστήριξη για δρομολόγηση βάσει τοπικών ρυθμίσεων. Βιβλιοθήκες όπως το next-intl κάνουν τη διαχείριση αρχείων μετάφρασης και την αλλαγή τοπικών ρυθμίσεων απλή. Αυτό που δεν λύνουν είναι η ίδια η μετάφραση — κάποιος πρέπει να παράγει το μεταφρασμένο περιεχόμενο σε κάθε γλώσσα, και αυτός ο κάποιος συνήθως είστε εσείς. Για τις περισσότερες ομάδες, η ροή εργασίας είναι να αντιγράψουν το αγγλικό JSON στο DeepL, να διορθώσουν τη μορφοποίηση που χαλάει, να επικολλήσουν το αποτέλεσμα πίσω, και να επαναλάβουν για κάθε γλώσσα. Είναι αργό, επιρρεπές σε λάθη και δεν κλιμακώνεται.
Η πιο κοινή ροή εργασίας είναι να γράφετε όλα τα UI strings στα Αγγλικά μέσα στον πηγαίο κώδικα και μετά να μεταφράζετε το αρχείο messages.json για κάθε γλώσσα στόχο. Θεωρητικά αυτό είναι απλό. Στην πράξη, η διατήρηση συγχρονισμού 10+ αρχείων τοπικών ρυθμίσεων με τις αλλαγές στον πηγαίο κώδικα γίνεται επαναλαμβανόμενο πρόβλημα. Κάθε φορά που αλλάζει το αγγλικό κείμενο, πρέπει να ενημερωθεί κάθε αρχείο τοπικής ρύθμισης. Όταν χρησιμοποιούνται τυπικά API μετάφρασης για αυτό, τα ονόματα κλειδιών καταστρέφονται, οι μεταβλητές μεταφράζονται και η δομή JSON αποκλίνει μεταξύ τοπικών ρυθμίσεων — προκαλώντας δυσδιάκριτα σφάλματα χρόνου εκτέλεσης που είναι δύσκολο να εντοπιστούν.
Το PolyLingo ενσωματώνεται στην υπάρχουσα ρύθμιση i18n του Next.js σας.
Αν χρησιμοποιείτε next-intl ή οποιαδήποτε άλλη βιβλιοθήκη i18n, τα μηνύματά σας είναι ήδη σε JSON. Το PolyLingo παίρνει αυτό το JSON, το στέλνει μέσω του μοντέλου μετάφρασης και επιστρέφει μεταφρασμένα αντίγραφα για κάθε γλώσσα στόχο — με τα κλειδιά ανέπαφα, τη δομή διατηρημένη και τις τιμές κειμένου σωστά μεταφρασμένες. Μπορείτε να το καλέσετε από ένα script κατασκευής, ένα webhook ή το UI του PolyLingo. Το αποτέλεσμα τοποθετείται απευθείας στον φάκελο μηνυμάτων σας.
Η ροή εργασίας: γράψτε τα αγγλικά μηνύματά σας στο messages.json. Εκτελέστε ένα μόνο script που καλεί το API του PolyLingo με το αρχείο πηγής και όλους τους κωδικούς γλωσσών στόχου. Λάβετε ένα μεταφρασμένο αρχείο JSON ανά γλώσσα, με ίδια δομή. Γράψτε το σε κάθε φάκελο messages/. Κάντε commit. Τελειώσατε.
Για ιστότοπους με πολύ περιεχόμενο που χρησιμοποιούν Markdown σε CMS (Sanity, Contentful), η ίδια προσέγγιση εφαρμόζεται στο περιεχόμενο: εξαγωγή ως Markdown ή HTML, μετάφραση, επανεγγραφή στο CMS μέσω του API του. Ολόκληρη η διαδικασία μπορεί να τρέξει ως βήμα κατασκευής ή με ενεργοποίηση webhook.
// This repository: frontend/scripts/translate-messages.mjs
// Chunks large namespaces (e.g. home) so the model stays within output limits.
//
// export POLYLINGO_API_KEY=pl_xxx
// npm run i18n:polylingo
//
// Writes messages/es.json, fr.json, … from messages/en.json via POST /v1/translate
// with format: "json". See MARKETING_I18N.md for options and CI notes.
//
// Minimal one-shot pattern (fine for small message files):
//
// const source = readFileSync('./messages/en.json', 'utf8')
// const { translations } = await fetch(apiUrl + '/translate', {
// method: 'POST',
// headers: { Authorization: `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
// body: JSON.stringify({
// content: source, format: 'json', source: 'en',
// targets: ['es', 'fr', 'de'], model: 'standard',
// }),
// }).then((r) => r.json())
//
// for (const [lang, raw] of Object.entries(translations)) {
// const obj = typeof raw === 'string' ? JSON.parse(raw) : raw
// writeFileSync(`./messages/${lang}.json`, JSON.stringify(obj, null, 2))
// }// i18n.ts (next-intl v4)
import { getRequestConfig } from 'next-intl/server'
export const locales = [
'en', 'ar', 'bn', 'cs', 'da', 'de', 'el', 'es', 'fa', 'fi',
'fr', 'he', 'hi', 'id', 'it', 'ja', 'ko', 'ms', 'nl', 'no',
'pl', 'pt', 'ru', 'sv', 'sw', 'th', 'tr', 'uk', 'vi', 'zh',
] as const
export type Locale = (typeof locales)[number]
export default getRequestConfig(async ({ requestLocale }) => {
const locale = await requestLocale
return {
locale,
messages: (await import(`./messages/${locale}.json`)).default,
}
})// package.json
{
"scripts": {
"dev": "next dev",
"build": "next build",
"i18n:polylingo": "node scripts/translate-messages.mjs",
"translate:build": "npm run i18n:polylingo && next build"
}
}Γιατί το PolyLingo ταιριάζει στη ροή εργασίας i18n του Next.js
- ✓Μεταφράστε απευθείας αρχεία messages/*.json — τα κλειδιά πάντα διατηρούνται
- ✓Μεταφράστε περιεχόμενο Markdown για αναρτήσεις ιστολογίου και σελίδες τεκμηρίωσης
- ✓Λειτουργεί με next-intl, next-i18next και προσαρμοσμένες ρυθμίσεις
- ✓Το REST API ενσωματώνεται με scripts κατασκευής και webhooks CMS
- ✓Όλες οι 36 γλώσσες σε ένα μόνο αίτημα
- ✓Δωρεάν επίπεδο — 100.000 tokens ανά μήνα
- ✓Αυτό το αποθετήριο χρησιμοποιεί την ίδια ροή εργασίας: npm run i18n:polylingo αναδημιουργεί τις τοπικές ρυθμίσεις marketing από το messages/en.json (δείτε το MARKETING_I18N.md).
- ✓Λειτουργεί με App Router και Pages Router
- ✓Τα αρχεία εξόδου είναι έτοιμα για commit — δεν χρειάζεται επαναμορφοποίηση
Ρυθμίστε πολυγλωσσικότητα στην εφαρμογή Next.js σας
Ρυθμίστε το next-intl με το αρχείο αγγλικών μηνυμάτων σας
Εγκαταστήστε το next-intl και ρυθμίστε το i18n.ts και το middleware σας. Γράψτε όλα τα UI strings στο messages/en.json. Δομήστε το αρχείο όπως χρειάζεται η εφαρμογή σας — επίπεδο ή εμφωλευμένο. Αυτό γίνεται η μοναδική πηγή αλήθειας σας.
Εκτελέστε το script μετάφρασης
Χρησιμοποιήστε το PolyLingo JSON API από ένα μικρό Node script (δείτε τον κώδικα παραπάνω). Σε αυτό το monorepo, εκτελέστε npm run i18n:polylingo από τον φάκελο frontend/ με το POLYLINGO_API_KEY ορισμένο — χωρίζει μεγάλα namespaces για αξιοπιστία. Τυπικές εκτελέσεις διαρκούν πολύ λιγότερο από ένα λεπτό για ένα πλήρες πακέτο marketing.
Κάντε commit τα αρχεία τοπικών ρυθμίσεων και αναπτύξτε
Τα παραγόμενα αρχεία τοπικών ρυθμίσεων είναι έγκυρο JSON με ίδια δομή με το αρχικό. Κάντε commit στο αποθετήριο σας. Προσθέστε το script μετάφρασης στη ροή CI για να κρατάτε τις τοπικές ρυθμίσεις συγχρονισμένες με κάθε αλλαγή περιεχομένου.
Περιπτώσεις χρήσης πολυγλωσσικότητας Next.js
Εφαρμογές SaaS και πίνακες ελέγχου
Μεταφράστε ολόκληρη τη βιβλιοθήκη UI strings σε μία εκτέλεση script. Υποστηρίζει όλες τις δυνατότητες μορφοποίησης του next-intl — ημερομηνίες, αριθμούς, πληθυντικούς — επειδή η δομή JSON διατηρείται ακριβώς.
Ιστότοποι περιεχομένου και ιστολόγια
Για ιστότοπους Next.js με πολύ περιεχόμενο που χρησιμοποιούν Sanity ή Contentful, χρησιμοποιήστε το PolyLingo για να μεταφράσετε το περιεχόμενο σελίδων καθώς και τα UI strings — ίδιο API, ίδιες εγγυήσεις διατήρησης μορφοποίησης.
Ηλεκτρονικό εμπόριο με περιφερειακές παραλλαγές
Μεταφράστε ονόματα προϊόντων, περιγραφές, σελίδες κατηγοριών και UI ολοκλήρωσης αγοράς. Χρησιμοποιήστε το Advanced μοντέλο για marketing copy όπου μετρά η φωνή της μάρκας, το Standard για λειτουργικά UI strings.
Συχνές ερωτήσεις
Λειτουργεί αυτό με το Next.js App Router;
Ναι. Η ενσωμάτωση PolyLingo είναι απλώς ένα script που διαβάζει και γράφει αρχεία JSON — δεν έχει εξάρτηση από τα εσωτερικά του Next.js. Λειτουργεί με App Router, Pages Router ή οποιοδήποτε πλαίσιο. Το παράδειγμα ρύθμισης next-intl που εμφανίζεται χρησιμοποιεί το API v4 με requestLocale, το οποίο είναι συμβατό με Next.js 13, 14 και 15.
Τι γίνεται αν το messages.json μου αλλάζει συχνά;
Η συνιστώμενη πρακτική είναι να προσθέσετε το script μετάφρασης στη ροή CI/CD σας, ενεργοποιούμενο με αλλαγές στο messages/en.json. Αυτό κρατά όλα τα αρχεία τοπικών ρυθμίσεων συγχρονισμένα αυτόματα. Για ομάδες με συχνές αλλαγές κειμένου, αυτό αποτρέπει εντελώς την απόκλιση τοπικών ρυθμίσεων.
Λειτουργεί το PolyLingo με next-i18next όπως και με next-intl;
Ναι. Το next-i18next χρησιμοποιεί την ίδια δομή JSON τοπικών ρυθμίσεων. Το script μετάφρασης λειτουργεί το ίδιο — δείξτε το στον φάκελο public/locales/en/ και γράψτε τα αποτελέσματα στους άλλους φακέλους τοπικών ρυθμίσεων. Η συμβατότητα μορφής JSON είναι η ίδια.
Τι γίνεται με δυναμικό περιεχόμενο που δεν είναι στο αρχείο μηνυμάτων;
Το δυναμικό περιεχόμενο — αναρτήσεις ιστολογίου, περιγραφές προϊόντων, περιεχόμενο που δημιουργείται από χρήστες — πρέπει να μεταφράζεται στο επίπεδο δεδομένων, είτε στο CMS σας είτε μέσω script κατασκευής που επεξεργάζεται το περιεχόμενο πριν φτάσει στο Next.js. Το PolyLingo χειρίζεται Markdown, HTML και απλό κείμενο εξίσου καλά για αυτόν τον σκοπό.
Μπορώ να μεταφράσω μόνο τις συμβολοσειρές που άλλαξαν από την τελευταία εκτέλεση;
Η σταδιακή μετάφραση (μόνο των αλλαγμένων κλειδιών) είναι στα σχέδια. Προς το παρόν το script μεταφράζει ολόκληρο το αρχείο ξανά. Για τα περισσότερα αρχεία μηνυμάτων (κάτω από 20KB), αυτό είναι αρκετά γρήγορο για να τρέχει σε κάθε commit. Για πολύ μεγάλα αρχεία, η διάσπαση ανά namespace είναι η συνιστώμενη προσέγγιση.
Υπάρχει τρόπος να ελέγξω τις μεταφράσεις πριν πάνε σε παραγωγή;
Η συνιστώμενη πρακτική είναι να κάνετε commit τα μεταφρασμένα αρχεία τοπικών ρυθμίσεων σε ξεχωριστό branch ή PR για έλεγχο πριν τη συγχώνευση στο main. Αυτή είναι η τυπική πρακτική για ομάδες που χρειάζονται ανθρώπινο έλεγχο στην ποιότητα μετάφρασης. Το PolyLingo παράγει μια καλή πρώτη εκδοχή — για τα περισσότερα UI strings το αποτέλεσμα του Standard μοντέλου δεν χρειάζεται επεξεργασία.
Σχετικοί οδηγοί
Μεταφράστε αρχεία JSON τοπικών ρυθμίσεων
Πώς το PolyLingo χειρίζεται τη δομή JSON, τα εμφωλευμένα αντικείμενα και τις μεταβλητές παρεμβολής.
Πολυγλωσσικότητα για headless CMS
Μετάφραση περιεχομένου στο επίπεδο CMS παράλληλα με τη μετάφραση UI strings.
Μεταφράστε Markdown χωρίς να χαλάει η μορφοποίηση
Για ιστότοπους Next.js με αναρτήσεις ιστολογίου Markdown ή σελίδες MDX.
Μεταφράστε το πρώτο σας αρχείο τοπικής ρύθμισης σε λιγότερο από 5 λεπτά.
Δωρεάν κλειδί API. Χωρίς πιστωτική κάρτα. Επικολλήστε το JSON των μηνυμάτων σας και δείτε το αποτέλεσμα αμέσως.
Αποκτήστε το κλειδί API σαςΤο script μετάφρασης χρειάζεται 5 λεπτά για ρύθμιση. Δωρεάν επίπεδο — δεν απαιτείται πιστωτική κάρτα.