Kaip pridėti kelias kalbas į savo programėlę ar svetainę
Kad pridėtumėte kelias kalbas į programėlę, perkelkite visą sąsajos tekstą į vertimų failus (vieną kiekvienai kalbai), įkraukite juos su i18n biblioteka ir pridėkite kalbos perjungiklį, kuris prisimena pasirinkimą. Viešiems puslapiams, kuriuos norite rasti paieškoje, suteikite kiekvienai kalbai atskirą URL, pavyzdžiui /fr/, ir versijas susiekite hreflang žymomis. Tada sutvarkykite dalykus, kuriuos žmonės dažnai pamiršta: datas, skaičius ir valiutas, ilgesnį tekstą kai kuriose kalbose, dešinėn rašomas kalbas ir duomenų bazėje saugomą turinį.
Terminai, kuriuos girdėsite
- Internacionalizacija (i18n): kodo paruošimas palaikyti bet kokią kalbą – be įrašytų tekstų, lokalei pritaikytas formatavimas, lankstūs išdėstymai. Skaičius „18“ nurodo raidžių skaičių tarp i ir n.
- Lokalizacija (l10n): programėlės pritaikymas konkrečiai kalbai ar rinkai, daugiausia vertimas, kartais ir valiuta, vaizdai bei teisiniai tekstai.
- Lokalė: kalba ir, neprivaloma, regionas, pavyzdžiui
en-GBarpt-BR.
Išspręskite i18n vieną kartą, ir kiekvienos naujos kalbos pridėjimas taps daugiausia vertimo darbu.
Variantai ir kompromisai
| Būdas | Kaip veikia | Tinka | Kompromisas |
|---|---|---|---|
| i18n biblioteka + vertimų failai (pvz., react-i18next, next-intl, vue-i18n) | Tekstas yra JSON failuose kiekvienai lokalei; komponentai ieško raktų | Daugumai programėlių | Pradinis perdarymas; reikia prižiūrėti vertimus |
| Vertimų valdymo sistema (pvz., Crowdin, Lokalise, Phrase) | Hostinamas redaktorius vertėjams, sinchronizuojamas su jūsų failais | Daug kalbų, keli vertėjai | Mokama; dar vienas įrankis |
| Mašininis ar DI vertimas kuriant | Sugeneruojami vertimo juodraščiai per API, tada peržiūrimi | Greitas kelių kalbų pasiekimas | Kokybę reikia tikrinti; API išlaidos |
| Naršyklės ar valdiklio automatinis vertimas | Lankytojo naršyklė išverčia puslapį patį | Nieko, ką galite valdyti | Jokios kokybės kontrolės; išversti puslapiai neindeksuojami kaip jūsų |
| Atskiros svetainės kiekvienai kalbai | Svetainė dubliuojama kiekvienai rinkai | Labai skirtingos rinkos | Viską reikia prižiūrėti du kartus |
Daugumai programėlių geriausias pagrindas yra standartinė i18n biblioteka su vertimų failais. Jei norite, kurkite vertimų juodraščius mašininiu ar DI vertimu, tada gimtųjų kalbos mokėjimas peržiūrėkite tai, ką klientai mato dažniausiai.
Kelių kalbų programėlės dalys
Vertimų failai
Vietoj <h1>Welcome back</h1> kode rašoma t('dashboard.welcome'), o kiekvienoje lokalėje yra failas su tekstu:
{
"dashboard": {
"welcome": "Welcome back, {{name}}",
"items_one": "{{count}} item",
"items_other": "{{count}} items"
}
}
Kintamiesiems naudokite vietos rezervavimo žymas, o ne jungkite sakinio dalis – žodžių tvarka skirtingose kalbose skiriasi. Taip pat naudokite bibliotekos daugiskaitos taisykles: anglų kalboje yra dvi formos (1 item, 2 items), bet kai kuriose kalbose – trys, keturios ar daugiau.
Datų, skaičių ir pinigų formatavimas
Neformatuokite to rankiniu būdu. Naršyklės įmontuota Intl API formatuoja bet kuriai lokalei: 1,234.5 anglų kalba tampa 1.234,5 vokiečių kalba; datos keičia dienos ir mėnesio tvarką; valiutos simbolis keičia vietą. Saugokite datas UTC laiku, o pinigus – kaip skaičius su valiutos kodu, ir formatuokite tik rodymui.
Išdėstymas, kuris prisitaiko
Išversti tekstai dažnai ilgesni nei anglų kalba – ypač vokiečių ir suomių žodžiai. Venkite fiksuoto pločio mygtukų ir nukirstų etikečių ir testuokite su ilgiausia kalba.
Dešinėn rašomos kalbos
Arabų, hebrajų, persų ir urdu kalbos rašomos iš dešinės į kairę. Tokioms lokalėms puslapyje nustatykite dir="rtl" ir naudokite CSS loginių savybių (margin-inline-start vietoj margin-left; Tailwind – ms-4 vietoj ml-4), kad išdėstymas pats apsiverstų. Kryptį nurodančias piktogramas, pavyzdžiui rodykles, taip pat reikia apversti.
Kalbos perjungiklis ir aptikimas
Rodykite perjungiklį kiekviename puslapyje, o etiketėse naudokite kiekvienos kalbos pavadinimą jos pačios kalba („Deutsch“, „Français“, „العربية“), o ne vėliavas – vėliavos vaizduoja šalis, o ne kalbas. Pirmo apsilankymo metu galite aptikti naršyklės pageidaujamą kalbą, kad pasiūlytumėte versiją, bet lankytojo aiškus pasirinkimas turi viršenybę ir yra įsimenamas.
URL ir SEO
Puslapiams, kuriuos norite matyti paieškos rezultatuose, kiekviena kalba turi savo URL. Nuo 2026 m. rugsėjo Google rekomendacijos daugiakalbėms svetainėms yra tokios:
- Atskiri URL kiekvienai kalbai – paprasčiausia naudoti poaplankius (
example.com/fr/); veikia ir subdomenai bei šalių domenai. URL parametrai (?lang=fr) nerekomenduojami. - Nekeiskite kalbos vien per slapuką ar naršyklės nustatymą – Google robotas gali niekada nepamatyti kitų versijų.
- Nenukreipkite automatiškai pagal kalbą – vietoj to susiekite versijas tarpusavyje.
- Naudokite hreflang, kad Google žinotų, kurie puslapiai yra vieno ir to paties turinio vertimai. Kiekviena versija turi įtraukti save ir visas kitas, kitaip žymos gali būti ignoruojamos. Pridėkite
x-defaultatsarginiam puslapiui. - Google nustato puslapio kalbą pagal matomą turinį, o ne pagal
langar hreflang – todėl išverskite visą puslapį, ne tik meniu.
Vis tiek nustatykite <html lang="fr"> kiekvienai versijai: ekrano skaitytuvai pagal tai parenka tinkamą tarimą, o tai yra prieinamumo reikalavimas.
Prisijungusiems programėlės ekranams indeksavimas nereikalingas, todėl jiems pakanka kalbą saugoti vartotojo profilyje. Kaip gauti viešus puslapius į paieškos robotų darbotvarkę, žr. SEO DI kuriamoms svetainėms.
Turinys duomenų bazėje
Sąsajos tekstas yra failuose, o tokie turinio elementai kaip produktų pavadinimai, tinklaraščio įrašai ir kategorijos – duomenų bazėje. Dažniausi du modeliai:
- Vertimų lentelė:
product_translations (product_id, locale, name, description). Tvarkinga ir tinka daugeliui kalbų. - JSON stulpelis kiekvienam laukui:
name: {"en": "...", "fr": "..."}. Paprastesnis, kai kalbų nedaug.
Nuspręskite, kas nutinka, kai vertimo nėra – paprastai geriau rodyti numatytąją kalbą, o ne tuščią vietą.
El. laiškai ir pranešimai
Saugokite kiekvieno vartotojo kalbą ir naudokite ją ir el. laiškams, pranešimams bei PDF failams. Lengva išversti programėlę ir pamiršti, kad sveikinimo laiškas vis dar ateina angliškai.
Veikiantys raginimai
Pridėk internacionalizaciją su react-i18next. Perkelk kiekvieną vartotojui matomą tekstą į locales/en.json su vardų erdvės raktais, naudok kintamųjų įstatymą ir daugiskaitos taisykles vietoj teksto jungimo, o datas, skaičius ir kainas formatuok su Intl pagal dabartinę lokalę. Dar nekeisk jokių formuluočių.
Pridėk prancūzų ir vokiečių kalbas. Viešiems rinkodaros puslapiams taikyk /fr/ ir /de/ URL priešdėlius, o anglų kalba palik šakniniame kataloge; kiekviename puslapyje įdėk hreflang nuorodas (įskaitant savąją ir x-default) ir nustatyk html lang kiekvienam puslapiui. Pridėk kalbos perjungiklį, rodantį kiekvienos kalbos pavadinimą gimtąja kalba. Prisijungusiems puslapiams išsaugok kalbą vartotojo profilyje.
Pridėk arabų kalbą su dešinėn rašymo palaikymu: arabams nustatyk dir="rtl", kairės ir dešinės paraštes bei tarpus pakeisk loginėmis savybėmis, apverk kryptį nurodančias piktogramas ir patikrink, ar formos ir lentelės vis dar skaitomos teisingai.
Žingsnis po žingsnio
- Pasirinkite pirmąją papildomą kalbą pagal realią paklausą – kur gyvena jūsų lankytojai ar klientai.
- Padarykite kodą internacionalizuotą: perkelkite tekstus į failus, pridėkite daugiskaitos taisykles ir
Intlformatavimą. Išleiskite tik su anglų kalba ir patikrinkite, kad nieko nepasikeitė. - Nuspręskite viešų puslapių URL struktūrą ir pridėkite hreflang.
- Išverskite: sukurkite juodraštį mašininiu ar DI vertimu, tada peržiūrėkite su gimtąja kalba mokančiu žmogumi. Suteikite vertėjams kontekstą – žodis „Book“ viename ekrane yra daiktavardis, kitame – veiksmažodis.
- Išverskite duomenų bazės turinį ir nustatykite atsargines reikšmes.
- Lokalizuokite kita: el. laiškus, klaidų pranešimus, teisinius puslapius, vaizdus su tekstu.
- Patikrinkite kiekvieną kalbą telefono plotyje ir, jei aktualu, su dešinėn rašymu.
- Nustatykite procesą, kad nauji funkcijos būtų išleidžiamos su vertimais, o ne po mėnesių.
Dažniausios klaidos
- Sakinių jungimas (
"You have " + n + " messages"), kuris kitose kalbose sugenda. - Įrašytas tekstas komponentuose, klaidų pranešimuose ir patvirtinimo žinutėse.
- Datų ir kainų formatavimas rankiniu būdu.
- Vėliavos kalboms ir automatiniai nukreipimai, kurie įstumia žmones į neteisingą versiją.
- Viena URL visoms kalboms puslapiams, kuriuos norite indeksuoti.
- Trūkstamos hreflang grįžtamosios nuorodos, todėl Google ignoruoja žymas.
- Išversta sąsaja, bet ne turinys, arba atvirkščiai.
- Nepatikrintas mašininis vertimas kainų, teisinių ir apmokėjimo puslapių.
Daugiakalbiškumo kontrolinis sąrašas
- Nėra įrašytų vartotojui matomų tekstų; naudojamos daugiskaitos taisyklės ir vietos rezervavimo žymos
- Datos, skaičiai ir valiutos formatuojami su
Intl - Kalbos perjungiklis su gimtaisiais pavadinimais kiekviename puslapyje; pasirinkimas įsimenamas
- Viešiems puslapiams atskiri URL kiekvienai kalbai; jokių priverstinių nukreipimų
- hreflang kiekvienoje versijoje, įskaitant savąją ir x-default
-
html lang(irdir="rtl", kur reikia) nustatyti kiekvienam puslapiui - Duomenų bazės turinys išverstas, su tinkamomis atsarginėmis reikšmėmis
- El. laiškai ir pranešimai siunčiami vartotojo kalba
- Klientams skirtus tekstus peržiūrėjo gimtąja kalba mokantis žmogus
Kelios kalbos Mythex
Mythex kalbas pridedate pokalbyje, rašydami prašymą – atskiro vertimo skydelio nėra, todėl pateikti raginimai veikia kaip parašyti. Pirma atlikite internacionalizacijos žingsnį ir prieš pridėdami kalbas patikrinkite jį Peržiūroje; tai didelis perdarymas, o pokalbio kontrolinis taškas leidžia grįžti atgal, jei kas nors sugenda (pokalbis ir kontroliniai taškai). Jei norite, kad programėlė automatiškai išverstų turinį su DI ar vertimo API, tam naudojamas jūsų pačių API raktas, saugomas projekto nustatymuose (aplinkos kintamieji ir paslaptys); kaip naudoti LLM API paaiškina išlaidas. Kai naujos kalbos bus paruoštos, publikuokite dar kartą.
Klausimai
Kuo skiriasi i18n ir lokalizacija?
Internacionalizacija (i18n) – tai kodo paruošimas, kad jis galėtų palaikyti daug kalbų: joks tekstas nėra įrašytas tiesiogiai į kodą, datos ir skaičiai formatuojami pagal lokalę, o išdėstymas tinka ilgesniems žodžiams ir dešinėn rašomoms kalboms. Lokalizacija (l10n) – tai darbas, pritaikant programėlę vienai kalbai ar rinkai, daugiausia vertimas.
Ar galiu tiesiog naudoti mašininį vertimą ar DI savo programėlei išversti?
Pirmam variantui – taip: šiuolaikinis mašininis ir DI vertimas gerai tinka sąsajos tekstams. Bet kokį tekstą, kurį matys klientai, peržiūrėkite gimtosios kalbos mokantis žmogus, ypač teisinius tekstus, kainas ir rinkodaros tekstus, nes čia svarbi tono tikslumas ir smulkios klaidos.
Ar kiekviena kalba turėtų turėti savo URL?
Viešiems puslapiams, kuriuos norite matyti paieškos rezultatuose – taip. Google rekomenduoja atskirus URL kiekvienai kalbai, pavyzdžiui /fr/ ir /de/, o ne kalbos keitimą per slapuką ar naršyklės nustatymus, nes robotas gali matyti tik vieną versiją.
Ar lankytojus turėčiau automatiškai nukreipti pagal naršyklės kalbą?
Siūlykite, bet neprimkite. Google nerekomenduoja automatinio kalbos nukreipimo, nes jis gali neleisti žmonėms ir robotams pasiekti kitų versijų. Rodykite nedidelį pranešimą su atitinkama kalba ir matomą perjungiklį kiekviename puslapyje.