-
Notifications
You must be signed in to change notification settings - Fork 0
Tutorial 5 Localization sv
Mål: förstå hur LockedIn CLI talar 33 språk — och öva på att dirigera en agent att lägga till ytterligare ett. Lokalisering är en fantastisk agentuppgift: den är tillräckligt mekanisk för att delegera, men har riktiga begränsningar (en testgrind, layoutregler, grammatikgranskning) som lär dig att granska.
← Föregående: Tutorial 4 Prompta och granska · Tillbaka till Home
Kör CLI:n på spanska, hindi, japanska, förenklad kinesiska, eller något annat levererat språk, och allt förändras — splashen, hjälptabellen, utdatan för varje kommando, chattsessionen, till och med det juridiska finstilta. Inte bara skämten: hela den synliga ytan.
lockedin --lang sv post
LOCKEDIN_LANG=hi lockedin
lockedin --lang zh auraSpråket autodetekteras vid start, avgjort i prioritetsordning:
-
--lang-flaggan (--lang sv,--lang=fr,-l ja) -
LOCKEDIN_LANG-miljövariabeln - din locale (
LC_ALL/LC_MESSAGES/LANG, sedan operativsystemets/körtidens locale) - engelska, som reserv
normalizeLang() använder normalt localens primära subtagg. Det betyder
att de-DE väljer de, men tlh blir inte av misstag tl; de riktiga
aliasen fil och tgl mappas avsiktligt till tagalog (tl), norska nb
och nn mappas till no, den historiska indonesiska koden in mappas
till id, och den historiska hebreiska koden iw mappas till he. Två
regionala koder bevaras ordagrant istället för att vikas till sin primära
subtagg: pt-BR/pt_BR väljer den kanoniska regionala koden medan
generisk pt förblir det bakåtkompatibla brasilianska portugisiska
paketet (båda är brasiliansk portugisiska och delar samma pooler/UI), och
en-SG/en_SG behåller singlish (generisk en förblir engelska). Hongkongs
traditionella kinesiska är samma sorts undantag: zh-HK, zh_HK.UTF-8,
och zh-Hant-HK väljer zh-HK, medan generisk zh och fastlandstaggar
väljer förenklad kinesiska (zh).
Att byta mitt i flykten — /language-panelen. CLI:n kunde alltid
starta på ett annat språk (--lang, LOCKEDIN_LANG); nu kan du byta
mitt i sessionen. Skriv /language (alias /lang och /languages) för
att lista alla 33 språken efter kod, vart och ett i sitt eget
skriftsystem; /language el byter för resten av sessionen. Poängen är
nödutgången: efter ett byte ritas det om på det nya språket och skriver
sedan, på språket du precis lämnade, den exakta vägen tillbaka —
/language en nu, lockedin --lang en nästa gång — så att man av misstag
hamna i 日本語 eller ಕನ್ನಡ aldrig strandar dig. (Byt två gånger, så
erbjuds även språket din LOCKEDIN_LANG namnger.) --lang och
LOCKEDIN_LANG är oförändrade. Precis som /a11y är det här ett
uppriktigt verktyg, inte en del av satiren.
All översättningsbar text bor i paket, ett per språk, var och en formad så här:
{ meta: { lang: 'sv', name: 'Svenska', dir: 'ltr' },
pools: { HOOKS: [ /* ~25 */ ], LESSONS: [ /* ... */ ], /* ... */ },
ui: { buzzwordDensity: 'Buzzword-täthet: ', /* etiketter, rubriker */ } }-
poolsär innehållsarrayerna (skämten) du mötte i kapitel 2. -
uiär gränssnittssträngarna: etiketter, rubriker, och små mallar.
Engelska är referenspaketet inuti src/lockedin.js; de andra 32
paketmodulerna 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, och zh-HK (pt-BR återanvänder pts pooler/UI men är
registrerad separat). Varje är registrerad i BUNDLES; SUPPORTED_LANGS
genereras från dessa nycklar, och renderHelp() skriver ut den
genererade kodlistan. Inget UI-paket hårdkodar listan.
setLang('fr'); // peka det aktiva språket mot det franska paketet
// L = aktiva pooler, U = aktiv ui
pick(L.HOOKS) // en fransk krok
U.buzzwordDensity // "Densité de jargon : "Eftersom varje renderare läser L och U (aldrig en hårdkodad
sträng), ändrar setLang ensamt hela upplevelsen. Det är hela tricket.
Här är invarianten som gör det säkert att lägga till ett språk:
Varje paket måste exponera exakt samma
pools- ochui-nycklar som engelska.
Ett test upprätthåller det här över alla 33 paketen. Om du lägger till en
ny UI-sträng på engelska och glömmer att översätta den på ukrainska, går
npm test rött och berättar vilken nyckel som saknas. Du kan inte tyst
leverera ett halvöversatt språk.
Språk belastar terminallayouten på olika sätt:
-
Japanska, förenklad kinesiska, och Hongkongs traditionella kinesiska
använder East Asian Wide / Fullwidth-tecken.
vw()räknar dessa som två kolumner, ochwrap()hård-bryter långa mellanslagslösa tokens så att CJK-text stannar innanför kort och rutor. -
Hindi och kannada använder icke-mellanslags-/omslutande
kombinationsmärken (
Mn/Me), som matror och viramas.vw()räknar dessa som noll kolumner så att de inte blåser upp uppmätt bredd. -
box()bryter varje kroppsrad innan den polstrar den, så att en lång översatt banderoll inte längre kan bryta igenom kanten. - Varje paket sätter
sentenceEndochlistSep(till exempel./。,,/、) så att generatorkomponerade meningar låter naturliga.
När du lägger till ett språk måste kortrubrikssträngar (cardSubtitle,
cardMeta, cardFooter) fortfarande passa inom ≤ 60 synliga
kolumner. Arabiska, persiska, hebreiska och urdu sätter
meta.dir: 'rtl'. Utdata innehåller inga bidi-kontroller som standard,
eftersom vissa terminaler renderar dem som inramade etiketter.
LOCKEDIN_BIDI=on aktiverar explicit balanserade isolat efter radbrytning
för terminaler kända för att stödja dem, och bevarar ANSI, ASCII-kommandon
och logisk kopiera/klistra-in-ordning. Tillgänglig utdata tar alltid bort
dessa kontroller. Utan detta val kan blandad RTL/LTR-ordning vara mindre
sofistikerad; stöd sonderas eller härleds aldrig.
Vissa UI-mallar splitsar in råa användarsatser med platshållare som
{cap}. Översätt dem inte plats för plats. Meningen måste förbli
grammatisk när platshållaren är en fras användaren skrev, inte ett
prydligt substantiv.
En riktig varnande bugg: japanska mallar som sätter は direkt efter
{cap} kan låta fel när {cap} är en fullständig sats. Fixet är inte
"översätt hårdare"; det är att omstrukturera mallen (till exempel lägga
till en nominalisering eller flytta platshållaren) så att godtycklig
användarindata fortfarande passar.
Den här övningen fungerar fortfarande på exakt samma sätt. Välj ett språk du kan kontrollera (eller be agenten göra det), och kör det från början till slut. Skriv specifikationen först:
Lägg till danska (
da). Skapasrc/content/da.jssom ett{ meta, pools, ui }-paket med samma nycklar som engelska, genom att översätta varje post (innehållspooler på ~25 vardera, alla UI-strängar). RegistreradaiBUNDLESisrc/lockedin.js.--lang daoch enda-*-locale måste välja den. Håll kortrubrikerna inom breddgränsen.npm testmåste förbli grönt, och lägg till danska invariant- och detekteringstester som speglar de befintliga lokaliserade.
Kör sedan slingan från kapitel 3–4:
- Plan först. "Innan du skriver kod, berätta vilka filer du kommer ändra och hur du kommer behålla nyckelparitet med engelska."
-
Tester först. "Lägg till misslyckade tester:
da-detektering, nyckelparitet förda, och en dansk reflect/connect-invariant. Skapa inte paketet än." -
Implementera. "Skapa nu
src/content/da.jsgenom att översätta ett befintligt paket nyckel för nyckel, registrera det, och få testerna att passera. Endastpick/shuffleför slumpmässighet." -
Grind + granskning.
npm test, sedanlockedin --lang da post— och läs diffen: översattes varje nyckel? Är kortkanterna fortfarande i linje? Överlever mallar med{cap}råa användarsatser?
Mindre uppvärmningsövningar om ett helt språk är för mycket:
- "Lägg till en till
TAGLINEi alla 33 språkpaket, och håll antalet lika." - "Kontrollera om kannadans
cardFooterär ≤ 60 synliga kolumner och förklara hur kombinationsmärkena mättes." - "Visa mig testet som skulle misslyckas om jag tog bort en
ui-nyckel frånja.js."
- Bläddra genom
src/content/es.js— det är fortfarande en vänlig mall för ett nytt paket. - Läs om
docs/HANDOFF.md→ "Adding a language". - Njut av de flerspråkiga skämten i Command Reference.
Det är hela handledningen. Du kan nu dirigera en AI-agent att bygga funktioner och lokalisera dem bakom en testgrind — på 33 språk och redo för fler. Håller du med? 👇
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.