-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 5 Localization no
Mål: forstå hvordan LockedIn CLI snakker 33 språk — og øve på å dirigere en agent til å legge til enda ett. Lokalisering er en fantastisk agentoppgave: den er mekanisk nok til å delegere, men har ekte begrensninger (en testport, oppsettregler, grammatikkgjennomgang) som lærer deg å gjennomgå.
← Forrige: Tutorial 4 Prompting og gjennomgang · Tilbake til Home
Kjør CLI-en på spansk, hindi, japansk, forenklet kinesisk, eller et hvilket som helst levert språk, og alt endrer seg — splashen, hjelpetabellen, utdataen til hver kommando, chat-økten, til og med den juridiske finskriften. Ikke bare vitsene: hele den synlige overflaten.
lockedin --lang no post
LOCKEDIN_LANG=hi lockedin
lockedin --lang zh auraSpråket autodetekteres ved oppstart, løst i prioritert rekkefølge:
-
--lang-flagget (--lang no,--lang=fr,-l ja) -
LOCKEDIN_LANG-miljøvariabelen - localen din (
LC_ALL/LC_MESSAGES/LANG, deretter OS/kjøretids-localen) - engelsk, som fallback
normalizeLang() bruker normalt localens primære subtag. Det betyr at
de-DE velger de, men tlh blir ikke ved et uhell til tl; de ekte
aliasene fil og tgl kartlegges bevisst til tagalog (tl), norsk nb og
nn kartlegges til no, det historiske indonesiske in kartlegges til
id, og det historiske hebraiske iw kartlegges til he. To regionale
koder bevares ordrett i stedet for å foldes til sin primære subtag:
pt-BR/pt_BR velger den kanoniske regionale koden mens generisk pt
forblir den bakoverkompatible brasiliansk-portugisiske pakken (begge er
brasiliansk portugisisk og deler de samme poolene/UI-en), og en-SG/en_SG
beholder singlish (generisk en forblir engelsk). Hongkong tradisjonell
kinesisk er samme type unntak: zh-HK, zh_HK.UTF-8, og zh-Hant-HK
velger zh-HK, mens generisk zh og fastlandstagger velger forenklet
kinesisk (zh).
Bytte midtveis — /language-panelet. CLI-en kunne alltid starte på et
annet språk (--lang, LOCKEDIN_LANG); nå kan du bytte midt i økten.
Skriv /language (aliaser /lang og /languages) for å liste alle 33
språkene etter kode, hver i sin egen skrift; /language el bytter for
resten av økten. Poenget er nødutgangen: etter et bytte tegner den seg på
nytt på det nye språket og skriver deretter, på språket du nettopp
forlot, den eksakte veien tilbake — /language en nå, lockedin --lang en
neste gang — slik at det å ved et uhell havne i 日本語 eller ಕನ್ನಡ aldri
strander deg. (Bytt to ganger, så tilbys også språket din LOCKEDIN_LANG
navngir.) --lang og LOCKEDIN_LANG er uendret. Som /a11y er dette et
oppriktig verktøy, ikke en del av satiren.
All oversettbar tekst bor i pakker, én per språk, hver formet slik:
{ meta: { lang: 'no', name: 'Norsk', dir: 'ltr' },
pools: { HOOKS: [ /* ~25 */ ], LESSONS: [ /* ... */ ], /* ... */ },
ui: { buzzwordDensity: 'Buzzword-tetthet: ', /* etiketter, overskrifter */ } }-
poolser innholdstabellene (vitsene) du møtte i kapittel 2. -
uier grensesnittstrengene: etiketter, overskrifter, og små maler.
Engelsk er referansepakken inne i src/lockedin.js; de andre 32
pakkemodulene bor i 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 gjenbruker pts pooler/UI men er registrert separat). Hver
er registrert i BUNDLES; SUPPORTED_LANGS genereres fra disse nøklene, og
renderHelp() skriver ut den genererte kodelisten. Ingen UI-pakke
hardkoder listen.
setLang('fr'); // pek det aktive språket til den franske pakken
// L = aktive pooler, U = aktiv ui
pick(L.HOOKS) // en fransk krok
U.buzzwordDensity // "Densité de jargon : "Fordi hver renderer leser L og U (aldri en hardkodet streng), endrer
setLang alene hele opplevelsen. Det er hele trikset.
Her er invarianten som gjør det trygt å legge til et språk:
Hver pakke må eksponere nøyaktig de samme
pools- ogui-nøklene som engelsk.
En test håndhever dette på tvers av alle 33 pakkene. Hvis du legger til en ny
UI-streng på engelsk og glemmer å oversette den på ukrainsk, går npm test
rødt og forteller deg hvilken nøkkel som mangler. Du kan ikke stille sende
et halvt oversatt språk.
Språk belaster terminaloppsettet på forskjellige måter:
-
Japansk, forenklet kinesisk, og Hongkong tradisjonell kinesisk bruker
East Asian Wide / Fullwidth-tegn.
vw()teller disse som to kolonner, ogwrap()hard-bryter lange mellomromsløse tokens slik at CJK-tekst holder seg innenfor kort og bokser. -
Hindi og kannada bruker ikke-mellomrom-/omsluttende kombinasjonsmerker
(
Mn/Me), som matraer og viramaer.vw()teller disse som null kolonner slik at de ikke blåser opp målt bredde. -
box()bryter hver kroppslinje før den padder den, slik at et langt oversatt banner ikke lenger kan bryte gjennom rammen. - Hver pakke setter
sentenceEndoglistSep(for eksempel./。,,/、) slik at generator-komponerte setninger leses naturlig.
Når du legger til et språk, må kortoverskriftstrenger (cardSubtitle,
cardMeta, cardFooter) fortsatt passe innenfor ≤ 60 synlige kolonner.
Arabisk, persisk, hebraisk og urdu setter meta.dir: 'rtl'. Utdata
inneholder ingen bidi-kontroller som standard, fordi noen terminaler
rendrer dem som boksede etiketter. LOCKEDIN_BIDI=on aktiverer eksplisitt
balanserte isolater etter bryting for terminaler kjent for å støtte dem, og
bevarer ANSI, ASCII-kommandoer og logisk kopier/lim-inn-rekkefølge.
Tilgjengelig utdata fjerner alltid disse kontrollene. Uten dette valget kan
blandet RTL/LTR-rekkefølge være mindre sofistikert; støtte sonderes eller
utledes aldri.
Noen UI-maler splitter inn rå brukersetninger med plassholdere som {cap}.
Ikke oversett dem plass for plass. Setningen må forbli grammatisk når
plassholderen er en frase brukeren skrev, ikke et pent substantiv.
En ekte advarende feil: japanske maler som setter は rett etter {cap} kan
høres galt ut når {cap} er en full setning. Fiksen er ikke "oversett
hardere"; det er å restrukturere malen (for eksempel legge til en
nominalisering eller flytte plassholderen) slik at vilkårlig brukerinndata
fortsatt passer.
Denne øvelsen fungerer fortsatt på nøyaktig samme måte. Velg et språk du kan sjekke (eller be agenten om det), og kjør det fra ende til annen. Skriv spesifikasjonen først:
Legg til dansk (
da). Opprettsrc/content/da.jssom en{ meta, pools, ui }-pakke med de samme nøklene som engelsk, ved å oversette hver oppføring (innholdspooler på ~25 hver, alle UI-strenger). RegistrerdaiBUNDLESisrc/lockedin.js.--lang daog enda-*-locale må velge den. Hold kortoverskrifter innenfor breddegrensen.npm testmå forbli grønn, og legg til danske invariant- og deteksjonstester som speiler de eksisterende lokaliserte.
Kjør deretter sløyfen fra kapittel 3–4:
- Plan først. "Før du skriver kode, fortell meg hvilke filer du vil endre og hvordan du vil beholde nøkkelparitet med engelsk."
-
Tester først. "Legg til feilende tester:
da-deteksjon, nøkkelparitet forda, og en dansk reflect/connect-invariant. Ikke opprett pakken ennå." -
Implementer. "Opprett nå
src/content/da.jsved å oversette en eksisterende pakke nøkkel for nøkkel, registrer den, og få testene til å bestå. Barepick/shufflefor tilfeldighet." -
Port + gjennomgang.
npm test, deretterlockedin --lang da post— og les diffen: ble hver nøkkel oversatt? Er kortrammene fortsatt på linje? Overlever maler med{cap}rå brukersetninger?
Mindre oppvarmingsøvelser hvis et helt språk er for mye:
- "Legg til én til
TAGLINEi alle 33 språkpakkene, og hold antallet likt." - "Sjekk om den kannadiske
cardFooterer ≤ 60 synlige kolonner og forklar hvordan kombinasjonsmerkene ble målt." - "Vis meg testen som ville feile hvis jeg slettet en
ui-nøkkel fraja.js."
- Bla gjennom
src/content/es.js— den er fortsatt en vennlig mal for en ny pakke. - Les på nytt
docs/HANDOFF.md→ "Adding a language". - Nyt de flerspråklige vitsene i Command Reference.
Det er hele veiledningen. Du kan nå dirigere en AI-agent til å bygge funksjoner og lokalisere dem bak en testport — på 33 språk og klar for flere. Enig? 👇
Tutorial
- 1 · Orientation
- 2 · How the Code Works
- 3 · Your First Agent Task
- 4 · Prompting & Reviewing
- 5 · Localization
Reference
Satire · Sátira · 風刺. Not affiliated with LinkedIn. GPL-3.0-or-later.