Tinklaraščio įrašas
· 5 min. skaitymo

Intl API galia: išsamus vadovas po naršyklėje integruotą internacionalizaciją

Internacionalizacija nėra tik vertimas. Tai datų formatavimas, žodžių daugiskaitos sudarymas, vardų rikiavimas ir dar daugiau – visa tai pagal konkrečias lokales. Užuot pasikliavus sunkiasvorėmis trečiųjų šalių bibliotekomis, modernus „JavaScript“ siūlo Intl API – galingą, integruotą būdą tvarkytis su i18n. Tylus priminimas, kad internetas yra išties pasaulinis.

Egzistuoja paplitusi klaidinga nuomonė, kad internacionalizacija (i18n) yra tiesiog teksto vertimas. Nors vertimas yra labai svarbus, tai tik vienas aspektas. Viena iš sudėtingiausių dalių yra informacijos pritaikymas prie įvairių kultūrinių lūkesčių: kaip parodyti datą Japonijoje, palyginti su Vokietija? Koks teisingas būdas sudaryti daiktavardžio daugiskaitą arabų kalboje, palyginti su anglų? Kaip surikiuoti vardų sąrašą įvairiomis kalbomis?

Daugelis programuotojų, spręsdami šiuos iššūkius, pasikliovė sunkiasvorėmis trečiųjų šalių bibliotekomis arba, dar blogiau, individualiai sukurtomis formatavimo funkcijomis. Šie sprendimai, nors ir veikiantys, dažnai sukelia didelių pridėtinių išlaidų: padidėjusį rinkinio dydį (angl. bundle size), galimus našumo butelio kaklelius ir nuolatinę kovą siekiant neatsilikti nuo besikeičiančių lingvistinių taisyklių ir lokalės duomenų.

Susipažinkite su ECMAScript internacionalizacijos API, geriau žinomu kaip Intl objektu. Ši tyli jėgainė, integruota tiesiai į modernias „JavaScript“ aplinkas, yra dažnai nuvertinamas, tačiau neįtikėtinai galingas, integruotas, našus ir standartus atitinkantis sprendimas duomenų internacionalizacijai tvarkyti. Tai liudijimas apie interneto įsipareigojimą būti pasauliniu, suteikiant vieningą ir efektyvų būdą formatuoti skaičius, datas, sąrašus ir dar daugiau pagal konkrečias lokales.

Intl ir lokalės: daugiau nei tik kalbų kodai

Intl pagrindas yra lokalės (angl. locale) koncepcija. Lokalė yra daug daugiau nei tik dviejų raidžių kalbos kodas (pvz., en anglų kalbai ar es ispanų). Ji apima visą kontekstą, reikalingą tinkamai pateikti informaciją konkrečiai kultūrinei grupei. Tai apima:

  • Kalbą: Pagrindinę lingvistinę priemonę (pvz., en, es, fr).
  • Rašto sistemą: Rašto sistemą (pvz., Latn lotynų, Cyrl kirilicos). Pavyzdžiui, zh-Hans supaprastintai kinų kalbai, palyginti su zh-Hant tradicinei kinų kalbai.
  • Regioną: Geografinę sritį (pvz., US Jungtinėms Valstijoms, GB Didžiajai Britanijai, DE Vokietijai). Tai labai svarbu tos pačios kalbos variantams, pavyzdžiui, en-US ir en-GB, kurie skiriasi datos, laiko ir skaičių formatavimu.
  • Nuostatas/variantus: Kitas specifines kultūrines ar lingvistines nuostatas. Daugiau informacijos rasite W3C gairėse „Kalbos žymės pasirinkimas“.

Paprastai lokalę norėsite pasirinkti pagal tinklalapio kalbą. Tai galima nustatyti iš lang atributo:

JavaScript

Kartais galite norėti pakeisti puslapio lokalę konkrečia lokale, pavyzdžiui, rodydami turinį keliomis kalbomis:

Kai kuriais atvejais galite norėti naudoti vartotojo pageidaujamą kalbą:

Kai sukuriate Intl formatuotoją, galite pasirinktinai perduoti vieną ar daugiau lokalės eilučių. Tuomet API pasirinks tinkamiausią lokalę pagal prieinamumą ir pageidavimą.

Pagrindinės formatavimo jėgainės

Intl objektas atveria kelis konstruktorius, kiekvieną skirtą konkrečiai formatavimo užduočiai. Panagrinėkime dažniausiai naudojamus, kartu su keliais galingais, dažnai nepastebimais perliukais.

1. Intl.DateTimeFormat: datos ir laikai, globaliai

Datų ir laikų formatavimas yra klasikinė i18n problema. Ar turėtų būti MM/DD/YYYY, ar DD.MM.YYYY? Ar mėnuo turėtų būti skaičius, ar pilnas žodis? Intl.DateTimeFormat visa tai lengvai išsprendžia.

DateTimeFormat parinkčių lankstumas yra didžiulis, leidžiantis kontroliuoti metus, mėnesį, dieną, savaitės dieną, valandą, minutę, sekundę, laiko juostą ir dar daugiau.

2. Intl.NumberFormat: skaičiai su kultūriniais niuansais

Be paprastų dešimtainių skaičių, skaičiams reikia kruopštaus tvarkymo: tūkstančių skyrikliai, dešimtainiai ženklai, valiutų simboliai ir procentų ženklai labai skiriasi priklausomai nuo lokalės.

Parinktys, tokios kaip minimumFractionDigits, maximumFractionDigits ir notation (pvz., scientific, compact), suteikia dar tikslesnę kontrolę.

3. Intl.ListFormat: natūralios kalbos sąrašai

Sąrašų pateikimas yra stebėtinai sudėtingas. Anglų kalba naudoja „and“ jungimui ir „or“ atskyrimui. Daugelyje kalbų yra skirtingi jungtukai, o kai kurioms reikalinga specifinė skyryba.Šis API supaprastina užduotį, kuri kitu atveju reikalautų sudėtingos sąlyginės logikos:

4. Intl.RelativeTimeFormat: žmonėms suprantamos laiko žymos

Rodymas „prieš 2 dienas“ ar „po 3 mėnesių“ yra įprastas vartotojo sąsajoje, tačiau tikslus šių frazių lokalizavimas reikalauja didelių duomenų kiekių. Intl.RelativeTimeFormat tai automatizuoja.

Parinktis numeric: 'always' priverstų rodyti „1 day ago“ vietoj „yesterday“.

5. Intl.PluralRules: daugiskaitos sudarymo įvaldymas

Tai bene vienas kritiškiausių i18n aspektų. Skirtingose kalbose yra labai skirtingos daugiskaitos taisyklės (pvz., anglų kalba turi vienaskaitą/daugiskaitą, arabų – nulį, vieną, du, kelis, daug…). Intl.PluralRules leidžia nustatyti „daugiskaitos kategoriją“ tam tikram skaičiui konkrečioje lokalėje.

Šis API tiesiogiai nesudaro teksto daugiskaitos, bet suteikia esminę klasifikaciją, reikalingą pasirinkti teisingą vertimo eilutę iš jūsų pranešimų rinkinių. Pavyzdžiui, jei turite pranešimų raktus kaip item.one, item.other, naudotumėte pr.select(count), kad pasirinktumėte tinkamą.

6. Intl.DisplayNames: lokalizuoti visko pavadinimai

Reikia parodyti kalbos, regiono ar rašto sistemos pavadinimą vartotojo pageidaujama kalba? Intl.DisplayNames yra jūsų išsamus sprendimas.

Su Intl.DisplayNames išvengsite begalės kalbų, regionų ar rašto sistemų pavadinimų fiksavimo kode, išlaikydami savo programą tvirtą ir lengvasvorę.

Naršyklių palaikymas

Galbūt svarstote apie naršyklių suderinamumą. Geros naujienos yra tai, kad Intl turi puikų palaikymą visose moderniose naršyklėse. Visos pagrindinės naršyklės („Chrome“, „Firefox“, „Safari“, „Edge“) visiškai palaiko aptartą pagrindinį funkcionalumą (DateTimeFormat, NumberFormat, ListFormat, RelativeTimeFormat, PluralRules, DisplayNames). Galite užtikrintai naudoti šiuos API be polifilų (angl. polyfills) didžiajai savo vartotojų daliai.

Išvada: priimkite pasaulinį internetą su Intl

Intl API yra modernaus interneto kūrimo, skirto pasaulinei auditorijai, kertinis akmuo. Jis suteikia „front-end“ programuotojams galimybę su minimaliomis pastangomis pateikti labai lokalizuotas vartotojo patirtis, pasinaudojant naršyklės integruotomis, optimizuotomis galimybėmis.

Pradėję naudoti Intl, jūs sumažinsite priklausomybes, sumažinsite rinkinių dydžius ir pagerinsite našumą – visa tai užtikrindami, kad jūsų programa gerbia ir prisitaiko prie įvairių lingvistinių ir kultūrinių vartotojų lūkesčių visame pasaulyje. Nustokite vargti su individualia formatavimo logika ir priimkite šį standartus atitinkantį įrankį!

Svarbu prisiminti, kad Intl tvarko duomenų formatavimą. Nors ir neįtikėtinai galingas, jis neišsprendžia visų internacionalizacijos aspektų. Turinio vertimas, dvipusis tekstas (RTL/LTR), lokalės specifinė tipografika ir gilūs kultūriniai niuansai, nesusiję su duomenų formatavimu, vis dar reikalauja kruopštaus apsvarstymo. (Galbūt apie tai parašysime ateityje!) Tačiau, norint tiksliai ir intuityviai pateikti dinaminius duomenis, Intl yra naršyklėje integruotas atsakymas.

Tolesniam skaitymui ir ištekliai

DalintisLinkedInFacebookX

Pradėkime Jūsų projektą jau šiandien

Satus Baltic svetainė „Studio Display“ ekrane
Heximus svetainė „Apple Studio Display“ ekrane
Lumen Park svetainė „Studio Display“ ekrane pievoje
Bohema Hotel svetainė „iPhone“ ekrane
Kurspausdinti svetainė „MacBook“ ekrane
Satus Baltic svetainė „Studio Display“ ekrane
Judinkite kursorių —
Judinkite kursorių —
Judinkite kursorių —