Ongeza lugha nyingi kwenye programu yako ya Next.js.
Tafsiri faili zako za eneo, maudhui ya Markdown, na kurasa za HTML kupitia wito mmoja wa API. Inafanya kazi na App Router, next-intl, na usanidi wowote wa uelekezaji wa i18n.
Next.js inakupa uelekezaji. Hainakupi tafsiri.
Next.js App Router ina msaada mzuri wa ndani kwa uelekezaji unaotegemea eneo. Maktaba kama next-intl hufanya usimamizi wa faili za tafsiri na kubadilisha eneo kuwa rahisi. Kinachoshindwa ni tafsiri yenyewe — mtu lazima aandae maudhui yaliyotafsiriwa kwa kila lugha, na mtu huyo kawaida ni wewe. Kwa timu nyingi, mtiririko wa kazi ni kunakili JSON ya Kiingereza kwenda DeepL, kurekebisha muundo unaovunjika, kubandika matokeo tena, rudia kwa kila lugha. Ni polepole, lina makosa, na halipanui.
Mtiririko wa kawaida ni kuandika mfuatano wote wa UI kwa Kiingereza ndani ya msimbo wa chanzo, kisha kutafsiri faili ya messages.json kwa kila lugha lengwa. Kwa nadharia hii ni rahisi. Katika vitendo, kuweka faili 10+ za eneo zikiwa zimeendana na mabadiliko ya chanzo huwa changamoto inayojirudia. Kila wakati nakala ya Kiingereza inabadilika, kila faili la eneo linahitaji kusasishwa. Unapotumia API za kawaida za tafsiri kwa hili, majina ya funguo yanaharibika, vibonye vya mabadiliko hutafsiriwa, na muundo wa JSON hubadilika kati ya maeneo — kusababisha hitilafu ndogo za wakati wa utekelezaji ambazo ni ngumu kufuatilia.
PolyLingo inaendana na usanidi wako wa i18n wa Next.js uliopo.
Ikiwa unatumia next-intl au maktaba nyingine yoyote ya i18n, ujumbe wako tayari uko kwenye JSON. PolyLingo huchukua JSON hiyo, kuipitia kupitia mfano wa tafsiri, na kurudisha nakala zilizotafsiriwa kwa kila lugha lengwa — huku funguo zikihifadhiwa, muundo wa ndani ukiwa sawa, na thamani za maandishi zikitafsiriwa kwa usahihi. Unaweza kuitumia kutoka kwenye script ya kujenga, webhook, au UI ya PolyLingo. Matokeo huwekwa moja kwa moja kwenye saraka yako ya ujumbe.
Mtiririko wa kazi: andika ujumbe wako wa Kiingereza messages.json. Endesha script moja inayoitisha API ya PolyLingo na faili lako la chanzo pamoja na misimbo yote ya lugha lengwa. Pokea faili moja la JSON lililotafsiriwa kwa kila lugha, lenye muundo sawa. Andika kila moja kwenye saraka yako ya messages/. Fanya commit. Imekamilika.
Kwa tovuti zilizo na maudhui mengi zenye Markdown katika CMS (Sanity, Contentful), njia ile ile inatumika kwa maudhui: toa kama Markdown au HTML, tafsiri, andika tena kwenye CMS kupitia API yake. Mchakato mzima unaweza kuendeshwa kama hatua ya kujenga au kwa kichocheo cha 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"
}
}Kwa nini PolyLingo inaendana na mtiririko wa i18n wa Next.js
- ✓Tafsiri faili za messages/*.json moja kwa moja — funguo daima zinahifadhiwa
- ✓Tafsiri maudhui ya Markdown kwa machapisho ya blogu na kurasa za nyaraka
- ✓Inafanya kazi na next-intl, next-i18next, na usanidi maalum
- ✓REST API inaunganishwa na script za kujenga na webhook za CMS
- ✓Lugha zote 36 kwa ombi moja
- ✓Ngazi ya bure — tokeni 50,000 kwa mwezi
- ✓Hifadhi hii inatumia mtiririko wa kazi: npm run i18n:polylingo huunda upya maeneo ya masoko kutoka messages/en.json (angalia MARKETING_I18N.md).
- ✓Inafanya kazi na App Router na Pages Router
- ✓Faili za matokeo ziko tayari kufanya commit — hakuna haja ya kurekebisha muundo
Sanidi lugha nyingi kwenye programu yako ya Next.js
Sanidi next-intl na faili yako ya ujumbe wa Kiingereza
Sakinisha next-intl na usanidi i18n.ts na middleware yako. Andika mfuatano wote wa UI katika messages/en.json. Panga faili kulingana na mahitaji ya programu yako — wima au ndani. Hii inakuwa chanzo chako kimoja cha ukweli.
Endesha script ya tafsiri
Tumia API ya JSON ya PolyLingo kutoka script ndogo ya Node (angalia msimbo hapo juu). Katika monorepo hii, endesha npm run i18n:polylingo kutoka frontend/ ukiwa na POLYLINGO_API_KEY imewekwa — hugawanya namespaces kubwa kwa uaminifu. Mifano ya kawaida huchukua chini ya dakika moja kwa kifurushi kamili cha masoko.
Fanya commit faili za eneo na zindua
Faili za eneo zilizotengenezwa ni JSON halali zenye muundo sawa na chanzo chako. Fanya commit kwenye repo yako. Ongeza script ya tafsiri kwenye mchakato wako wa CI ili kuweka maeneo yakiwa sawa na kila mabadiliko ya maudhui.
Matumizi ya lugha nyingi ya Next.js
Programu za SaaS na dashibodi
Tafsiri maktaba yako yote ya mfuatano wa UI kwa mwendeshaji mmoja wa script. Inasaidia vipengele vyote vya uundaji vya next-intl — tarehe, nambari, wingi — kwa sababu muundo wa JSON unahifadhiwa kabisa.
Tovuti za maudhui na blogu
Kwa tovuti za Next.js zilizo na maudhui mengi zinazotumia Sanity au Contentful, tumia PolyLingo kutafsiri maudhui ya kurasa pamoja na mfuatano wa UI — API ile ile, dhamana ile ile ya kuhifadhi muundo.
E-commerce na tofauti za kikanda
Tafsiri majina ya bidhaa, maelezo, kurasa za makundi, na UI ya malipo. Tumia mfano wa Advanced kwa nakala za masoko ambapo sauti ya chapa ni muhimu, Standard kwa mfuatano wa UI wa kazi.
Maswali yanayoulizwa mara kwa mara
Je, hii inafanya kazi na Next.js App Router?
Ndiyo. Ushirikiano wa PolyLingo ni script tu inayosoma na kuandika faili za JSON — haina utegemezi wowote wa ndani wa Next.js. Inafanya kazi na App Router, Pages Router, au mfumo wowote. Mfano wa usanidi wa next-intl unaoonyeshwa hutumia API ya v4 na requestLocale, ambayo inalingana na Next.js 13, 14, na 15.
Nini kama messages.json yangu hubadilika mara kwa mara?
Mfumo unaopendekezwa ni kuongeza script ya tafsiri kwenye mchakato wako wa CI/CD, unaochochewa na mabadiliko ya messages/en.json. Hii huweka faili zote za eneo zikiwa sawa moja kwa moja. Kwa timu zilizo na mabadiliko ya mara kwa mara, hii huzuia kabisa kutofautiana kwa maeneo.
Je, PolyLingo inafanya kazi na next-i18next pamoja na next-intl?
Ndiyo. next-i18next inatumia muundo ule ule wa JSON wa eneo. Script ya tafsiri inafanya kazi sawa — elekeza kwenye saraka yako ya public/locales/en/ na andika matokeo kwenye saraka nyingine za eneo. Ulinganifu wa muundo wa JSON ni ule ule.
Je, kuhusu maudhui ya mabadiliko ambayo hayapo kwenye faili ya ujumbe?
Maudhui ya mabadiliko — machapisho ya blogu, maelezo ya bidhaa, maudhui yanayotengenezwa na watumiaji — yanapaswa kutafsiriwa kwenye tabaka la data, ama katika CMS yako au kupitia script ya kujenga inayosindika maudhui kabla hayajafika Next.js. PolyLingo hushughulikia Markdown, HTML, na maandishi ya kawaida kwa usawa kwa madhumuni haya.
Je, naweza kutafsiri tu mfuatano uliobadilika tangu mwendo uliopita?
Tafsiri ya hatua kwa hatua (kutafsiri funguo zilizobadilika tu) iko kwenye ramani ya maendeleo. Hivi sasa script inatafsiri tena faili nzima. Kwa faili nyingi za ujumbe (chini ya 20KB), hii ni haraka vya kutosha kuendeshwa kila commit. Kwa faili kubwa sana, kugawanya kwa namespace ni njia inayopendekezwa.
Je, kuna njia ya kupitia tafsiri kabla hazijaingia uzalishaji?
Mfumo unaopendekezwa ni kufanya commit faili za eneo zilizotafsiriwa kwenye tawi au PR tofauti kwa ajili ya ukaguzi kabla ya kuunganisha kwenye main. Hii ni desturi ya kawaida kwa timu zinazohitaji ukaguzi wa binadamu juu ya ubora wa tafsiri. PolyLingo hutengeneza awamu nzuri ya kwanza — kwa mfuatano mwingi wa UI matokeo ya mfano wa Standard hayahitaji uhariri.
Miongozo inayohusiana
Tafsiri faili za JSON za eneo
Jinsi PolyLingo inavyoshughulikia muundo wa JSON, vitu vilivyo ndani, na vibonye vya mabadiliko.
Lugha nyingi kwa CMS zisizo na kichwa
Kutafsiri maudhui kwenye ngazi ya CMS pamoja na tafsiri ya mfuatano wa UI.
Tafsiri Markdown bila kuvunja muundo
Kwa tovuti za Next.js zilizo na machapisho ya blogu ya Markdown au kurasa za MDX.
Pata faili yako ya kwanza ya eneo iliyo tafsiriwa ndani ya dakika 5.
Ufunguo wa API wa bure. Hakuna kadi ya mkopo. Bandika JSON ya ujumbe wako na uone matokeo mara moja.
Pata ufunguo wako wa APIScript ya tafsiri huchukua dakika 5 kusanidi. Ngazi ya bure — hakuna kadi ya mkopo inahitajika.