Voeg meertaligheid toe aan je Next.js-app.
Vertaal je locale bestanden, Markdown-inhoud en HTML-pagina's via één enkele API-aanroep. Werkt met de App Router, next-intl en elke i18n-routering setup.
Next.js geeft je routering. Het geeft je geen vertalingen.
Next.js App Router heeft uitstekende ingebouwde ondersteuning voor locale-gebaseerde routering. Bibliotheken zoals next-intl maken het beheren van vertaalbestanden en locale-wisseling eenvoudig. Wat ze niet oplossen is de vertaling zelf — iemand moet de vertaalde inhoud in elke taal produceren, en die iemand ben meestal jij. Voor de meeste teams is de workflow: kopieer de Engelse JSON naar DeepL, herstel de formatting die het breekt, plak het resultaat terug, herhaal voor elke taal. Het is traag, foutgevoelig en schaalt niet.
De meest voorkomende workflow is om alle UI-strings in het Engels in de broncode te schrijven en vervolgens het messages.json-bestand voor elke doeltaal te vertalen. In theorie is dit eenvoudig. In de praktijk wordt het een terugkerend pijnpunt om 10+ locale bestanden synchroon te houden met bronwijzigingen. Elke keer dat de Engelse tekst verandert, moet elk locale bestand worden bijgewerkt. Bij gebruik van standaard vertaal-API's raken sleutel-namen beschadigd, worden variabele placeholders vertaald en wijkt de JSON-structuur af tussen locales — wat subtiele runtime bugs veroorzaakt die moeilijk te traceren zijn.
PolyLingo past in je bestaande Next.js i18n setup.
Als je next-intl of een andere i18n-bibliotheek gebruikt, staan je berichten al in JSON. PolyLingo neemt die JSON, stuurt het door het vertaalmodel en retourneert vertaalde kopieën voor elke doeltaal — met sleutels onaangeroerd, nesting intact en stringwaarden correct vertaald. Je kunt het aanroepen vanuit een buildscript, een webhook of de PolyLingo UI. Het resultaat gaat direct in je messages-map.
De workflow: schrijf je Engelse messages.json. Voer een enkel script uit dat de PolyLingo API aanroept met je bronbestand en alle doeltaalcodes. Ontvang één vertaald JSON-bestand per taal, met identieke structuur. Schrijf elk naar je messages/-map. Commit. Klaar.
Voor content-rijke sites met Markdown in CMS (Sanity, Contentful) geldt dezelfde aanpak voor content: exporteer als Markdown of HTML, vertaal, schrijf terug naar het CMS via de API. De hele pijplijn kan als buildstap of via een webhook-trigger draaien.
// 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"
}
}Waarom PolyLingo past in de Next.js i18n workflow
- ✓Vertaal messages/*.json-bestanden direct — sleutels altijd behouden
- ✓Vertaal Markdown-inhoud voor blogposts en documentatiepagina's
- ✓Werkt met next-intl, next-i18next en aangepaste setups
- ✓REST API integreert met buildscripts en CMS-webhooks
- ✓Alle 36 talen in één enkele aanvraag
- ✓Gratis laag — 100.000 tokens per maand
- ✓Deze repo gebruikt de workflow zelf: npm run i18n:polylingo genereert marketing locales opnieuw vanuit messages/en.json (zie MARKETING_I18N.md).
- ✓Werkt met App Router en Pages Router
- ✓Output-bestanden zijn klaar om te committen — geen herformattering nodig
Stel meertaligheid in je Next.js-app in
Stel next-intl in met je Engelse messages-bestand
Installeer next-intl en configureer je i18n.ts en middleware. Schrijf alle UI-strings in messages/en.json. Structureer het bestand zoals je app het nodig heeft — vlak of genest. Dit wordt je enige bron van waarheid.
Voer het vertaal script uit
Gebruik de PolyLingo JSON API vanuit een klein Node-script (zie code hierboven). In deze monorepo, voer npm run i18n:polylingo uit vanuit frontend/ met POLYLINGO_API_KEY ingesteld — het verdeelt grote namespaces voor betrouwbaarheid. Typische runs duren ruim onder een minuut voor een volledige marketingbundel.
Commit de locale bestanden en deploy
De gegenereerde locale bestanden zijn geldige JSON met identieke structuur als je bron. Commit ze naar je repo. Voeg het vertaal script toe aan je CI-pijplijn om locales synchroon te houden bij elke inhoudswijziging.
Next.js meertalige gebruikssituaties
SaaS-apps en dashboards
Vertaal je volledige UI-stringbibliotheek in één script-run. Ondersteunt alle next-intl formatteringsfuncties — datums, nummers, meervouden — omdat de JSON-structuur exact behouden blijft.
Contentsites en blogs
Voor content-rijke Next.js-sites die Sanity of Contentful gebruiken, gebruik PolyLingo om paginainhoud en UI-strings te vertalen — dezelfde API, dezelfde garanties voor formaatbehoud.
E-commerce met regionale varianten
Vertaal productnamen, beschrijvingen, categoriepaginan en checkout UI. Gebruik het Advanced-model voor marketingteksten waar merkstem belangrijk is, Standard voor functionele UI-strings.
Veelgestelde vragen
Werkt dit met de Next.js App Router?
Ja. De PolyLingo-integratie is slechts een script dat JSON-bestanden leest en schrijft — het heeft geen afhankelijkheid van Next.js-internals. Het werkt met App Router, Pages Router of elk framework. Het getoonde next-intl-configuratievoorbeeld gebruikt de v4 API met requestLocale, die compatibel is met Next.js 13, 14 en 15.
Wat als mijn messages.json vaak verandert?
Het aanbevolen patroon is om het vertaal script toe te voegen aan je CI/CD-pijplijn, getriggerd bij wijzigingen in messages/en.json. Dit houdt alle locale bestanden automatisch synchroon. Voor teams met frequente tekstwijzigingen voorkomt dit locale drift volledig.
Werkt PolyLingo met next-i18next net zo goed als met next-intl?
Ja. next-i18next gebruikt dezelfde locale JSON-structuur. Het vertaal script werkt identiek — wijs het naar je public/locales/en/-map en schrijf de output naar de andere locale mappen. De JSON-formaatcompatibiliteit is hetzelfde.
Hoe zit het met dynamische inhoud die niet in het messages-bestand staat?
Dynamische inhoud — blogposts, productbeschrijvingen, door gebruikers gegenereerde inhoud — moet op datalaag vertaald worden, hetzij in je CMS of via een buildscript dat de inhoud verwerkt voordat het Next.js bereikt. PolyLingo verwerkt Markdown, HTML en platte tekst even goed voor dit doel.
Kan ik alleen de strings vertalen die sinds de laatste run zijn veranderd?
Incrementele vertaling (alleen gewijzigde sleutels vertalen) staat op de roadmap. Momenteel vertaalt het script het volledige bestand opnieuw. Voor de meeste berichtenbestanden (onder 20KB) is dit snel genoeg om bij elke commit uit te voeren. Voor zeer grote bestanden is splitsen per namespace de aanbevolen aanpak.
Is er een manier om vertalingen te beoordelen voordat ze naar productie gaan?
Het aanbevolen patroon is om vertaalde locale bestanden te committen naar een aparte branch of PR voor beoordeling voordat je merge naar main. Dit is standaardpraktijk voor teams die menselijke beoordeling van vertaalkwaliteit nodig hebben. PolyLingo genereert een goede eerste versie — voor de meeste UI-strings vereist de Standard-model output geen bewerking.
Gerelateerde handleidingen
Vertaal JSON locale bestanden
Hoe PolyLingo JSON-structuur, geneste objecten en interpolatievariabelen behandelt.
Meertalig voor headless CMS
Vertalen van content op CMS-niveau naast UI-stringvertaling.
Vertaal Markdown zonder formatting te breken
Voor Next.js-sites met Markdown-blogposts of MDX-pagina's.
Laat je eerste locale bestand binnen 5 minuten vertalen.
Gratis API-sleutel. Geen creditcard. Plak je messages JSON en zie direct het resultaat.
Krijg je API-sleutelHet vertaal script is in 5 minuten opgezet. Gratis laag — geen creditcard vereist.