Next.js + PolyLingo

Lisää monikielisyys Next.js-sovellukseesi.

Käännä paikalliset tiedostosi, Markdown-sisältö ja HTML-sivut yhdellä API-kutsulla. Toimii App Routerin, next-intl:n ja minkä tahansa i18n-reitityksen kanssa.

App Router
Next.js 13–15 tuettu
next-intl
natiivi integraatio
10 kieltä
yksi skriptin suoritus
~3s
tyypillinen käännösskriptin suoritusaika

Next.js tarjoaa reitityksen. Se ei tarjoa käännöksiä.

Next.js App Router tukee erinomaisesti paikallispohjaista reititystä. Kirjastot kuten next-intl tekevät käännöstiedostojen hallinnasta ja paikallisen vaihdosta helppoa. Mitä ne eivät ratkaise, on itse käännös — jonkun täytyy tuottaa käännetty sisältö jokaisella kielellä, ja se joku olet yleensä sinä. Useimmille tiimeille työnkulku on kopioida englanninkielinen JSON DeepL:ään, korjata rikkoutunut muotoilu, liittää tulos takaisin ja toistaa jokaiselle kielelle. Se on hidasta, virhealttiita eikä skaalaudu.

Yleisin työnkulku on kirjoittaa kaikki käyttöliittymän merkkijonot englanniksi lähdekoodiin ja sitten kääntää messages.json-tiedosto jokaiselle kohdekielelle. Teoriassa tämä on suoraviivaista. Käytännössä yli 10 paikallisen tiedoston pitäminen synkronissa lähdemuutosten kanssa on jatkuva kipupiste. Joka kerta kun englanninkielinen teksti muuttuu, jokainen paikallinen tiedosto tarvitsee päivityksen. Kun käytetään standardeja käännös-API:ita tähän, avaimet voivat korruptoitua, muuttujapaikat kääntyä ja JSON-rakenne vaihdella paikallisten välillä — aiheuttaen vaikeasti jäljitettäviä ajoitusvirheitä.

PolyLingo sopii olemassa olevaan Next.js i18n -asetukseesi.

Jos käytät next-intl:ää tai mitä tahansa muuta i18n-kirjastoa, viestisi ovat jo JSON-muodossa. PolyLingo ottaa tämän JSONin, lähettää sen käännösmallin läpi ja palauttaa käännetyt kopiot jokaiselle kohdekielelle — avaimet säilytettyinä, sisäkkäisyys ehjänä ja merkkijonojen arvot oikein käännettyinä. Voit kutsua sitä rakennusskriptistä, webhookista tai PolyLingo-käyttöliittymästä. Tulos sijoittuu suoraan viestihakemistoosi.

Työnkulku: kirjoita englanninkielinen messages.json. Suorita yksi skripti, joka kutsuu PolyLingo APIa lähdetiedostollasi ja kaikilla kohdekielikoodeilla. Saat yhden käännetyn JSON-tiedoston per kieli, identtisellä rakenteella. Kirjoita ne messages/-hakemistoosi. Tee commit. Valmista.

Sisältörikkailla sivustoilla, joissa on Markdown CMS:ssä (Sanity, Contentful), sama lähestymistapa pätee sisältöön: vie Markdownina tai HTML:nä, käännä, kirjoita takaisin CMS:ään sen API:n kautta. Koko putki voi toimia rakennusvaiheena tai webhookin laukaisemana.

PolyLingo käännösskripti — tämä repositorio sisältää translate-messages.mjs:n
// 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 -konfiguraatio
// 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 — lisää translate rakennusputkeesi
// package.json
{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "i18n:polylingo": "node scripts/translate-messages.mjs",
    "translate:build": "npm run i18n:polylingo && next build"
  }
}

Miksi PolyLingo sopii Next.js i18n-työnkulkuun

  • Käännä messages/*.json-tiedostot suoraan — avaimet aina säilytettyinä
  • Käännä Markdown-sisältö blogikirjoituksiin ja dokumentaatiosivuille
  • Toimii next-intl:n, next-i18nextin ja mukautettujen asetusten kanssa
  • REST API integroituu rakennusskripteihin ja CMS-webhookeihin
  • Kaikki 43 kieltä yhdellä pyynnöllä
  • Ilmainen taso — 50 000 tokenia kuukaudessa
  • Tämä repositorio käyttää omaa työnkulkuaan: npm run i18n:polylingo generoi markkinointipaikalliset tiedostot messages/en.json:stä (katso MARKETING_I18N.md).
  • Toimii App Routerin ja Pages Routerin kanssa
  • Tulostiedostot ovat valmiita commitoitaviksi — uudelleenmuotoilua ei tarvita

Ota monikielisyys käyttöön Next.js-sovelluksessasi

1

Ota next-intl käyttöön englanninkielisellä viestitiedostollasi

Asenna next-intl ja konfiguroi i18n.ts ja middleware. Kirjoita kaikki käyttöliittymän merkkijonot messages/en.json-tiedostoon. Rakenna tiedosto sovelluksesi tarpeiden mukaan — tasaisesti tai sisäkkäin. Tämä on totuuden lähteesi.

2

Suorita käännösskripti

Käytä PolyLingo JSON APIa pienestä Node-skriptistä (katso yllä oleva koodi). Tässä monorepossa suorita npm run i18n:polylingo frontend/-kansiosta POLYLINGO_API_KEY asetettuna — se pilkkoo suuria nimiavaruuksia luotettavuuden vuoksi. Tyypilliset suoritukset kestävät alle minuutin koko markkinointipaketille.

3

Commitoi paikalliset tiedostot ja ota käyttöön

Luodut paikalliset tiedostot ovat kelvollista JSONia, identtisellä rakenteella lähteeseen. Commitoi ne repositorioosi. Lisää käännösskripti CI-putkeesi, jotta paikalliset tiedostot pysyvät synkronissa jokaisen sisällön muutoksen kanssa.

Next.js monikieliset käyttötapaukset

🚀

SaaS-sovellukset ja hallintapaneelit

Käännä koko käyttöliittymän merkkijonokirjasto yhdellä skriptin suorituksella. Tukee kaikkia next-intl-muotoiluominaisuuksia — päivämäärät, numerot, monikot — koska JSON-rakenne säilyy tarkasti.

📰

Sisältösivustot ja blogit

Sisältörikkailla Next.js-sivustoilla, jotka käyttävät Sanityä tai Contentfulia, käytä PolyLingoa kääntämään sivujen sisältö sekä käyttöliittymän merkkijonot — sama API, samat muodon säilytyslupaukset.

🛒

Verkkokauppa alueellisilla versioilla

Käännä tuotteen nimet, kuvaukset, kategoriasivut ja kassakäyttöliittymä. Käytä Advanced-mallia markkinointiteksteihin, joissa brändin ääni on tärkeä, Standard-mallia toiminnallisiin käyttöliittymän merkkijonoihin.

Usein kysytyt kysymykset

Toimiiko tämä Next.js App Routerin kanssa?

Kyllä. PolyLingo-integraatio on vain skripti, joka lukee ja kirjoittaa JSON-tiedostoja — se ei riipu Next.js:n sisäisistä osista. Se toimii App Routerin, Pages Routerin tai minkä tahansa kehyksen kanssa. Näytetty next-intl-konfiguraatio käyttää v4 APIa requestLocale-toiminnolla, joka on yhteensopiva Next.js 13, 14 ja 15 kanssa.

Entä jos messages.json muuttuu usein?

Suositeltu käytäntö on lisätä käännösskripti CI/CD-putkeesi, joka käynnistyy muutoksista messages/en.json-tiedostoon. Tämä pitää kaikki paikalliset tiedostot automaattisesti synkronissa. Tiimeille, joilla on usein tekstimuutoksia, tämä estää paikallisten tiedostojen hajaantumisen kokonaan.

Toimiiko PolyLingo myös next-i18nextin kanssa next-intl:n lisäksi?

Kyllä. next-i18next käyttää samaa paikallista JSON-rakennetta. Käännösskripti toimii samalla tavalla — osoita se public/locales/en/-hakemistoon ja kirjoita tulokset muihin paikallisiin hakemistoihin. JSON-muodon yhteensopivuus on sama.

Entä dynaaminen sisältö, joka ei ole messages-tiedostossa?

Dynaaminen sisältö — blogikirjoitukset, tuotetekstit, käyttäjien luoma sisältö — tulisi kääntää datakerroksessa, joko CMS:ssäsi tai rakennusskriptillä, joka käsittelee sisällön ennen kuin se saavuttaa Next.js:n. PolyLingo käsittelee Markdownia, HTML:ää ja pelkkää tekstiä yhtä hyvin tähän tarkoitukseen.

Voinko kääntää vain ne merkkijonot, jotka ovat muuttuneet viimeisestä suorituksesta?

Inkrementaalinen käännös (vain muuttuneiden avainten kääntäminen) on suunnitelmissa. Tällä hetkellä skripti kääntää koko tiedoston uudelleen. Useimmille viestitiedostoille (alle 20 kt) tämä on tarpeeksi nopeaa suoritettavaksi jokaisella commitilla. Erittäin suurille tiedostoille suositellaan pilkkomista nimiavaruuksittain.

Onko olemassa tapa tarkistaa käännökset ennen tuotantoon vientiä?

Suositeltu käytäntö on commitoida käännetyt paikalliset tiedostot erilliseen haaraan tai PR:ään tarkistusta varten ennen yhdistämistä päähaaraan. Tämä on vakiokäytäntö tiimeille, jotka tarvitsevat ihmistarkistuksen käännösten laadulle. PolyLingo tuottaa hyvän ensimmäisen version — useimmille käyttöliittymän merkkijonoille Standard-mallin tulos ei vaadi muokkausta.

Saat ensimmäisen paikallisen tiedostosi käännettyä alle 5 minuutissa.

Ilmainen API-avain. Ei luottokorttia. Liitä viestisi JSON ja näe tulos välittömästi.

Hanki API-avaimesi

Käännösskriptin käyttöönotto vie 5 minuuttia. Ilmainen taso — ei luottokorttia vaadita.

Lisää monikielisyys Next.js-sovellukseesi — PolyLingo | PolyLingo