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. Hainakupa 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 halipanuki.
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. Kivitendo, kuweka faili 10+ za eneo zikiwa sawa na mabadiliko ya chanzo huwa shida 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, viboreshaji 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 katika JSON. PolyLingo huchukua JSON hiyo, kuipitia kupitia mfano wa tafsiri, na kurudisha nakala zilizotafsiriwa kwa kila lugha lengwa — kwa funguo zisizoguswa, muundo usiobadilika, na thamani za maandishi zikitafsiriwa kwa usahihi. Unaweza kuitisha kutoka kwenye script ya kujenga, webhook, au UI ya PolyLingo. Matokeo huwekwa moja kwa moja kwenye saraka yako ya ujumbe.
Mtiririko wa kazi: andika messages.json yako ya Kiingereza. Endesha script moja inayoitisha API ya PolyLingo na faili yako ya chanzo 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 43 kwa ombi moja
- ✓Ngazi ya bure — tokeni 50,000 kwa mwezi
- ✓Hii repo 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 uliowekwa 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. Mizunguko 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 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 mzunguko 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 sawa za 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?
Msingi uliopendekezwa 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 zenye mabadiliko ya mara kwa mara ya nakala, hii huzuia kabisa kutofautiana kwa maeneo.
Je, PolyLingo inafanya kazi na next-i18next pamoja na next-intl?
Ndiyo. next-i18next hutumia muundo ule ule wa JSON wa eneo. Script ya tafsiri hufanya kazi sawa — elekeza kwenye saraka yako ya public/locales/en/ na andika matokeo kwenye saraka nyingine za eneo. Ulinganifu wa muundo wa JSON ni sawa.
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 mzunguko uliopita?
Tafsiri ya hatua kwa hatua (kutafsiri funguo zilizobadilika tu) iko kwenye ramani ya maendeleo. Hivi sasa script hutafsiri faili nzima tena. Kwa faili nyingi za ujumbe (chini ya 20KB), hii ni ya 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?
Msingi uliopendekezwa 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 vilivyowekwa ndani, na viboreshaji vya mabadiliko.
Lugha nyingi kwa CMS zisizo na kichwa
Kutafsiri maudhui katika ngazi ya CMS sambamba 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 iliyotafsiriwa chini 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.