Skip to content

Tutorial 5 Localization is

James Morris edited this page Jul 29, 2026 · 1 revision

Kennsla 5 · Staðfærsla (i18n)

🌎 Tungumál: Íslenskasjá öll 33 tungumálin

Markmið: skilja hvernig LockedIn CLI talar 33 tungumál — og æfa sig í að stýra aðstoðarmanni til að bæta við einu í viðbót. Staðfærsla er frábært verkefni fyrir aðstoðarmann: nógu vélrænt til að fela því, en með raunverulegum skorðum (prófunarhlið, reglur um uppsetningu og málfarsyfirferð) sem kenna þér að fara yfir.

← Fyrra: Kennsla 4 Fyrirmæli og yfirferð · Til baka á Heim


Hvað „staðfært“ merkir hér

Keyrðu CLI-ið á spænsku, hindí, japönsku, einfölduðu kínversku eða hvaða meðfylgjandi tungumáli sem er og allt breytist — upphafsskjárinn, hjálpartaflan, úttak hverrar skipunar, spjalllotan, jafnvel Smáa letrið. Ekki bara brandararnir: allt sýnilega yfirborðið.

lockedin --lang is post
LOCKEDIN_LANG=hi lockedin
lockedin --lang zh aura

Tungumálið er greint sjálfkrafa við ræsingu og leyst í þessari forgangsröð:

  1. --lang flaggið (--lang is, --lang=fr, -l ja)
  2. umhverfisbreytan LOCKEDIN_LANG
  3. locale-ið þitt (LC_ALL / LC_MESSAGES / LANG, síðan locale stýrikerfisins eða keyrsluumhverfisins)
  4. enska, sem varaleið

normalizeLang() notar venjulega aðalundirmerki locale-sins. Það þýðir að de-DE velur de, en tlh verður ekki óvart að tl; raunverulegu samheitin fil og tgl vísa viljandi í tagalog (tl), norsku kóðarnir nb og nn vísa í no, gamli indónesíski kóðinn in vísar í id og gamli hebreski kóðinn iw vísar í he. Tveir svæðisbundnir kóðar eru varðveittir óbreyttir í stað þess að falla niður í aðalundirmerkið sitt: pt-BR/pt_BR velja svæðisbundna kanóníska kóðann, en almenna pt helst afturábaksamhæfi brasilíupúrtúgalski pakkinn (bæði eru brasilíupúrtúgalska og deila sömu poolum/UI), og en-SG/en_SG halda Singlish (almenn en helst enska). Hefðbundin kínverska í Hong Kong er sams konar undantekning: zh-HK, zh_HK.UTF-8 og zh-Hant-HK velja zh-HK, en almenn zh og meginlandskóðar velja einfaldaða kínversku (zh).

Skipt á flugi — /language spjaldið. CLI-ið gat alltaf ræst á öðru tungumáli (--lang, LOCKEDIN_LANG); nú geturðu líka skipt um tungumál í miðri lotu. Sláðu inn /language (samheiti /lang og /languages) til að lista öll 33 tungumálin eftir kóða, hvert á sínu eigin ritkerfi; /language el skiptir fyrir restina af lotunni. Atriðið sem skiptir máli er neyðarútgangurinn: eftir skiptingu endurteiknar forritið sig á nýja tungumálinu og prentar svo, á tungumálinu sem þú varst að yfirgefa, nákvæmu leiðina til baka — /language en núna, lockedin --lang en næst — svo að það að lenda óvart í 日本語 eða ಕನ್ನಡ skilur þig aldrei eftir strandaða/n. (Ef þú skiptir tvisvar færðu líka boðið tungumálið sem LOCKEDIN_LANG þitt nefnir.) --lang og LOCKEDIN_LANG breytast ekki. Eins og /a11y er þetta einlæg nytjafall, ekki hluti af ádeilunni.

Hugmyndin: tungumálapakkar

Allur þýðanlegur texti býr í pökkum, einn fyrir hvert tungumál, hver með þessari lögun:

{ meta: { lang: 'is', name: 'Íslenska', dir: 'ltr' },
  pools: { HOOKS: [ /* ~25 */ ], LESSONS: [ /* ... */ ], /* ... */ },
  ui:    { buzzwordDensity: 'Þéttleiki tískuorða: ', /* labels, headings */ } }
  • pools eru efnisfylkin (brandararnir) sem þú hittir í Kennslu 2.
  • ui eru umgjörðarstrengirnir: merkingar, fyrirsagnir og lítil sniðmát.

Enska er viðmiðunarpakkinn inni í src/lockedin.js; hinar 32 pakkaskrárnar búa í src/content/*.js: ar, bn, bo, de, el, en-SG, es, eu, fa, fi, fr, he, hi, id, is, it, ja, kn, ms, nl, no, pl, pt, pt-BR, ru, sv, tl, tr, uk, ur, zh og zh-HK (pt-BR endurýtir pools/UI úr pt en er skráður sér). Hver og einn er skráður í BUNDLES; SUPPORTED_LANGS er búið til úr þeim lyklum og renderHelp() prentar þann kóðalista sem verður til. Enginn UI-pakki harðkóðar listann.

setLang('fr');       // bendir virka tungumálinu á franska pakkann
// L = virkir pools, U = virkt ui
pick(L.HOOKS)        // franskur upphafsfrasi
U.buzzwordDensity    // "Densité de jargon : "

Þar sem hvert render-fall les úr L og U (aldrei úr harðkóðuðum streng) breytir setLang ein og sér allri upplifuninni. Það er allt trikkið.

Öryggisnetið: lykilajafnræði

Hér er ófrávíkjanlega reglan sem gerir öruggt að bæta við tungumáli:

Hver pakki verður að birta nákvæmlega sömu pools- og ui-lykla og enska.

Próf framfylgir þessu yfir alla 33 pakkana. Ef þú bætir nýjum UI-streng við á ensku og gleymir að þýða hann á úkraínsku fer npm test í rautt og segir þér hvaða lykil vantar. Þú getur ekki sent hálfþýtt tungumál út í hljóði.

Erfiði hlutinn: uppsetning í skjáhermi

Mismunandi tungumál reyna á uppsetninguna á mismunandi hátt:

  • Japanska, einfölduð kínverska og hefðbundin kínverska í Hong Kong nota East Asian Wide / Fullwidth stafi. vw() telur þá sem tvo dálka og wrap() klippir löng strengjatákn án bila með hörðum brotum svo CJK-texti haldist inni í spjöldum og kössum.
  • Hindí og kannada nota samsetningarmerki sem taka ekki eigið bil (Mn / Me), eins og matra og virama. vw() telur þau sem núll dálka svo þau blási ekki mælda breidd út.
  • box() vefur hverja meginmálslínu áður en hún er púðuð út, svo langur þýddur borði getur ekki lengur stungist í gegnum rammann.
  • Hver pakki stillir sentenceEnd og listSep (til dæmis . / , , / ) svo setningar sem smíðar eru úr vélrænum pörtum hljómi eðlilega.

Þegar þú bætir við tungumáli verða spjaldahausstrengirnir (cardSubtitle, cardMeta, cardFooter) samt að passa í ≤ 60 sýnilega dálka. Arabíska, persneska, hebreska og úrdú stilla meta.dir: 'rtl'. Úttakið inniheldur engar bidi-stýringar sjálfgefið, því sumir skjáhermar birta þær sem kassamerktar merkingar. LOCKEDIN_BIDI=on virkjar þær beinlínis eftir línuskiptingu fyrir skjáherma sem vitað er að styðja balanced isolates, á meðan ANSI, ASCII-skipanir og rökrétt afritunarröð varðveitast. Aðgengilegt úttak fjarlægir þessar stýringar alltaf. Án þess að notandinn velji þetta getur blönduð RTL/LTR-röð orðið einfaldari; aldrei má prófa sig áfram eða álykta stuðning.

Lúmski hlutinn: málfræði í kringum hrátt notandainntak

Sum UI-sniðmát skeyta hráum notandafrasum inn með staðgenglum á borð við {cap}. Ekki þýða þau bara stak fyrir stak. Setningin verður að haldast málfræðilega rétt þegar staðgengillinn er heil frasi sem notandinn sló inn, en ekki snyrtilegt nafnorð.

Raunverulegt varúðardæmi: japönsk sniðmát sem setja beint á eftir {cap} geta hljómað rangt þegar {cap} er heil aukasetning. Lausnin er ekki að „þýða harðar“ heldur að endurbyggja sniðmátið (til dæmis bæta við nafnháttarliði eða færa staðgengilinn) svo handahófskennt notandainntak passi áfram.

✅ Prófaðu þetta með aðstoðarmanninum þínum — bættu við tungumáli

Þessi æfing virkar enn nákvæmlega eins. Veldu tungumál sem þú getur raunprófað (eða láttu aðstoðarmanninn gera það) og keyrðu það frá enda til enda. Skrifaðu kröfulýsinguna fyrst:

Bættu við dönsku (da). Búðu til src/content/da.js sem { meta, pools, ui } pakka með sömu lyklum og enska, með þýðingu á hverri færslu (efnispool um 25 hver, allir UI-strengir). Skráðu da í BUNDLES í src/lockedin.js. --lang da og locale af gerðinni da-* verða að velja það. Haltu spjaldahausstrengjum innan breiddarmarkanna. npm test verður að vera áfram grænt og bættu við dönskum ófrávíkjanlegum reglum + greiningarprófum sem spegla þau staðfærðu próf sem fyrir eru.

Keyrðu síðan lykkjuna úr Kennslu 3–4:

  1. Áætlun fyrst. „Áður en þú skrifar kóða skaltu segja mér hvaða skrám þú breytir og hvernig þú ætlar að halda lykilajafnræði við ensku.“
  2. Próf fyrst. „Bættu við prófum sem eiga að falla: da-greiningu, lykilajafnræði fyrir da og dönsku reflect/connect ófrávíkjanlegu prófi. Ekki búa pakkann til enn.“
  3. Útfærslan. „Búðu nú til src/content/da.js með því að þýða núverandi pakka lykil fyrir lykil, skráðu hann og láttu prófin fara í gegn. Aðeins pick/shuffle fyrir slembni.“
  4. Hlið + yfirferð. npm test, svo lockedin --lang da post — og lestu diffið: var hver lykill þýddur? Haldast spjaldarammarnir í röð? Lifa sniðmát með {cap} af hráum notandafrasum?

Minni upphitunarverkefni ef heilt tungumál er of mikið:

  • „Bættu einu TAGLINE í viðbót við alla 33 tungumálapakkana og haltu fjöldanum jöfnum.“
  • „Athugaðu hvort cardFooter í kannada sé ≤ 60 sýnilegir dálkar og útskýrðu hvernig samsetningarmerkin voru mæld.“
  • „Sýndu mér prófið sem myndi bila ef ég eyddi einum ui-lykli úr ja.js.“

Hvert á að fara næst

  • Flettu src/content/es.js — hann er enn vinalegt sniðmát fyrir nýjan pakka.
  • Lestu aftur docs/HANDOFF.md → „Adding a language“.
  • Njóttu fjöltyngdu brandaranna í Skipanatilvísun.

Þarna lýkur kennsluefninu. Þú getur nú stýrt gervigreindaraðstoðarmanni til að smíða eiginleika og staðfæra þá fyrir aftan prófunarhlið — á 33 tungumálum og með pláss fyrir fleiri. Sammála? 👇

📘 LockedIn CLI wiki

Tutorial

Reference


Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.

Clone this wiki locally