Files
csbot-prototype/documentation/23-jazyky.md
T
JiriUhlirandClaude Fable 5.1 bc6508e1f3 Resitel je clenstvi uctu, firma z ARES, prepinani jazyku schovane
Resitel uz neni vlastni zaznam spojeny s uctem pres e-mail: je to
clenstvi uctu ve firme a jeho ID je ID uctu. Popisek, kapacita, externi
ID a zapnuti visi na clenstvi, takze clovek ve dvou firmach je v kazde
jinak a spravce firmy ho vypne jen u sebe. Odebrani z firmy odebere jen
clenstvi. Stara data se pri startu jednou prevedou (migratePeople.ts),
vcetne odkazu v ticketech, skupinach, automatizacich, akcich a widgetech.
Sprava lidi v zalozce Lide zaklada ucty, pozvanka uz nema volbu resitele.

Zalozeni firmy z registru ARES: hledani podle IC nebo nazvu, dotazeni
IC, DIC, sidla a pravni formy, vyber soucasnych statutarnich zastupcu
a prokury, ucty spravce firmy s nahradnim e-mailem IC-poradi@placeholder.cz.
Vychozi rozlozeni dashboardu bez resitele neobsahuje list.myTickets.

Prepinani jazyku je docasne schovane (MULTILANG_ENABLED), web je cesky.
Dokumentace aktualizovana.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 13:09:35 +02:00

4.1 KiB

23 - Jazyky

Mechanismus je hotovy a overeny. Verejny web je prelozeny cely, portal za prihlasenim jen ve spolecnych castech.

Prepinani je docasne schovane (rozhodnuti 2026-09-09, do rozhodnuti o znacce): MULTILANG_ENABLED = false v web/src/i18n/index.ts. Prepinac se nekresli, vzdy se pouzije cestina a ulozena volba en se ignoruje, aby nikdo nezustal v anglictine bez moznosti prepnout zpet. Slovniky zustavaji, zapnuti je zmena jedne konstanty.

Jak to funguje

Co Kde
Vrstva, prepinani web/src/i18n/index.ts
Ceske texty web/src/i18n/cs.ts
Anglicke texty web/src/i18n/en.ts
Prepinac v rozhrani web/src/components/layout/LanguageSwitch.tsx

Vybrany jazyk je jedna hodnota pro celou aplikaci, drzena v modulu mimo React. Je to tentyz vzorec jako u vybrane firmy (lib/tenant.ts) a ze stejneho duvodu: hodnota musi byt dostupna i mimo komponenty a prepnuti nesmi byt stav jedne stranky.

Volba se uklada a prezije obnoveni stranky. Pri prvnim nacteni rozhoduje ulozena volba, pak jazyk prohlizece, pak cestina.

Pri kazde zmene se prepisuje i <html lang>. Ctecky a prohlizece podle nej poznaji jazyk stranky a nenabizeji preklad textu, ktery uz prelozeny je.

Klice jsou ploche

t('hero.titleAccent')   // ne t('hero').titleAccent

Ploche klice jdou vygrepovat: grep "hero.titleAccent" najde definici i vsechna pouziti. U zanorenych objektu to nejde a prave tohle clovek pri prekladu dela nejcasteji.

Chybejici preklad nespadne

en.ts je Partial, takze nemusi byt uplny. Co v nem neni, spadne na cestinu:

const text = dictionaries[locale][key] ?? cs[key] ?? key;

Diky tomu jde preklad doplnovat po castech. Kdyby anglictina musela byt uplna, znamenal by kazdy novy cesky text rozbity build, dokud ho nekdo neprelozi - a vysledkem by bylo, ze se texty nepridavaji.

Cestina je zaroven zaloha, takze nedokoncena anglictina znamena misty cestinu. To je horsi nez hotovy preklad, ale lepsi nez prazdno nebo hero.title v nadpisu.

Co uz je prelozene

Cast Stav
Hlavicka, navigace a mobilni menu hotovo
Homepage vcetne Produktu, Referenci a Postupu hotovo
Paticka hotovo
Stranky O nas, Sluzby, Kontakt, 404 hotovo
Prihlaseni hotovo, vcetne hlasky o vyprselem prihlaseni
DataState a ErrorBoundary hotovo - stavy nacitani a chyby jsou vsude
Portal za prihlasenim ne, stranky dashboardu maji texty v kodu

Pro prelozene casti je en.ts uplna, nikde nespada na cestinu. Zbytek je mechanicky: text ven do cs.ts, klic do en.ts, v komponente const t = useT() a {t('klic')}. Zadna dalsi prace na vrstve uz potreba neni.

Co se neprekada

Jmeno znacky, kontakty, ICO a adresa zustavaji v config/brand.ts. Nemeni se s jazykem a mit je ve slovniku dvakrat by znamenalo, ze se jednou zmeni jen jedno misto.

Claim se prekada (brand.claim), protoze to je text, ne udaj.

Co chybi

Chybi Poznamka
Stranky portalu viz tabulka vys
Jazyk v adrese /en/sluzby misto volby v prohlizeci. Chce to kvuli vyhledavacum
Preklad dat ze serveru nazvy sluzeb, stavu a chybovych hlasek chodi z API cesky
Format cisel a datumu toLocaleString se zatim vola natvrdo s cs-CZ