Files
csbot-prototype/documentation/23-jazyky.md
T
JiriUhlirandClaude Fable 5.1 104ae36783 Revize projektu: prava, vykon, runtime, portal a ARES
Prava a bezpecnost: spravce firmy uz nemuze nastavit priznak spravce
platformy ani clenstvi v cizi firme; pozvanky, konektory a automatizace
kontroluji sve pravo; cizi firma v query je 404; zivy stream posila
udalosti jen firmam, kterych se tykaji; akce nad ticketem maji kontrolu
prava za firmu ticketu a strop viditelnosti; tokeny se nelogujou; limit
pokusu na prihlaseni, kontakt a pozvanky; bezpecnostni hlavicky;
zachyceni chyb v async handlerech; timing-safe porovnani tokenu.

Vykon: audit neskenuje celou kolekci pri kazdem zapisu a konecne maze
firemni zaznamy; ticket se uklada jednou misto trikrat; zapisy do
Postgresu jsou serializovane podle ID; prava se pocitaji jednou na
request; widgety nacitaji tickety jednou; strankovani seznamu; worker
je pool misto kol; na webu udalost ze streamu neodmontuje stranku,
dotazy maji spolecny debounce a cache, ciselniky drzi typovany sklad.

Runtime: opakuji se jen chyby oznacene retryable; smycka nenarazi na
strop 50 kroku (novy strop 1000 akci); podminka nad datem funguje;
vystup MCP nastroje neprepisuje spoustec; sandbox skriptu firmy nejde
opustit; MCP session id se drzi mezi volanimi; incident z kroku patri
firme; jedno rozhodnuti o rezimu uloziste; snapshot neprepise soubor
po chybe cteni.

Refaktory: sdilene typy API v src/shared (web nic nekopiruje, osm
rozjetych tvaru sjednoceno); spolecny modul net/guard pro volani ven;
formularova vrstva ui/form; rozdeleni Connectors a FlowCanvas; jeden
helper pro firmu z query, validaci a CRUD udalosti; pomucky ctx.util
pro skripty konektoru; i18n verejneho webu vcetne anglictiny.

Nova funkce: zalozeni firmy z registru ARES v Nastaveni (IC nebo nazev,
dotazeni IC, DIC, sidla a pravni formy, vyber soucasnych statutarnich
zastupcu a prokury, ucty spravce firmy s nahradnim e-mailem
IC-poradi@placeholder.cz).

Dokumentace: zaznam v 99-zmeny.md a aktualizace 15 dalsich dokumentu.

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

3.8 KiB

23 - Jazyky

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

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