Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Každý jazyk webu se odvozuje z anglického buildu a překladové paměti

Každý jazyk webu se odvozuje z anglického buildu a překladové paměti

majordomus://adr/adr-0218přijato webjazykodvozování

odkazuje na

  • put_in_force scripts/lib/site-i18n.mjs (soubor)
  • put_in_force scripts/site-build (soubor)
  • put_in_force scripts/site-translate (soubor)
  • put_in_force site/i18n/cs/edition.toml (soubor)
  • put_in_force site/i18n/languages.json (soubor)
  • put_in_force site/templates/partials/language-switch.html (soubor)
  • put_in_force adr-0077
  • put_in_force adr-0149
  • put_in_force project.english-only@4
  • put_in_force test/cases/3590_the_site_is_derived_in_every_language.sh (test)

odkazuje na něj

Nic ve vrstvě to nejmenuje. Zpětné odkazy se odvozují, takže prázdný seznam je odpověď, ne opomenutí.

218. Každý jazyk webu je odvozen z anglického buildu a překladové paměti

Kontext

Dne 2026-10-19 majitel nařídil, aby majordomus.dev byl od té chvíle vždy plně vícejazyčný — alespoň česky a anglicky — s přepínačem jazyka a aby každý jazyk byl odvozen, vyvozen a přeložen automaticky: „Nechci udržovat dvě jazykové verze; musí to fungovat automaticky, odvozeně, vyvozeně, prismaticky.“

Web měl tehdy 2 137 stránek a asi 880 000 slov, téměř všechna generovaná z anglických záznamů (plán, dokumenty, pravidla, rozhodnutí, registr), a čtyři ručně psané české stránky připuštěné project.english-only v2 (ADR 0077). Na stole byly tři způsoby, jak jej učinit dvojjazyčným:

  • Druhý strom obsahu (*.cs.md vedle každé stránky, vícejazyčný režim Zoly). Každý generátor by zapisoval dvakrát, každá šablona by potřebovala klíčované řetězce a data, která šablony čtou (site/data/generated/*.json), by se stále vykreslovala anglicky. Jsou to „dvě jazykové verze“, které majitel odmítl, jen psané stroji místo lidí.
  • Překlad při buildu, dotazem na model během scripts/site-build. Build by přestal být čistou funkcí stromu: dva buildy jednoho commitu by se lišily, CI by potřebovalo přihlašovací údaje a výpadek modelu by shodil web.
  • Průchod sestavenými stránkami a paměť přeložených segmentů — zvoleno.

Rozhodnutí

  1. Angličtina je jediný zdroj. Nikdo nepíše stránku v jiném jazyce. Čtyři ručně psané české stránky zůstávají, jak jsou, a do české kopie se přenášejí beze změny.

  2. Každý další jazyk je průchod nad sestaveným anglickým webem. Po Zole, průchodu přístupnosti a diagramech spouští scripts/site-build nástroj scripts/lib/site-i18n.mjs nad každou stránkou, kterou zapsal. Stránka se rozřeže na segmenty: každý souvislý úsek vloženého obsahu mezi hranicemi bloků a každý atribut, který čtenář vidí (title, alt, aria-label, popis stránky). Kód, pre, kbd, SVG a vše označené translate="no" nikdy segmentem není. Kopie pod /<lang>/ je anglická stránka, v níž je každý segment, který paměť zná, nahrazen, každý interní odkaz míří na svůj protějšek, <html lang> a kanonická URL jsou nastaveny, přidány alternativy hreflang a odhaleno oznámení o strojovém překladu. Protože průchod čte vykreslené HTML, pokrývá šablony, generovaná data i obsah stejně: nic, co by šablona musela udělat, aby byla přeložena, neexistuje.

  3. Paměť je klíčována angličtinou, ne stránkou. site/i18n/<lang>/memory/*.jsonl drží {k, en, <lang>} na segment, k hash angličtiny, v níž je vložené značkování nahrazeno číslovanými zástupnými symboly (<t1>…</t1>, <t2/> pro kód a obrázky). Stejná slova ve dvou šablonách jsou jedna položka; href, který se stránku od stránky liší, je nerozděluje. Změněný anglický segment má nový klíč, takže se zastaralý překlad nikdy neobslouží — segment se vrátí k angličtině, dokud není přeložen znovu.

  4. Překlad je připuštěn jen se strukturou svého zdroje. admissible vyžaduje každý zástupný symbol právě jednou, vnořený jako v angličtině; scripts/site-translate import a run odmítnou cokoli jiného. Překladatel může přeskládat slova, nikdy vypustit odkaz nebo kód.

  5. Překlad je samostatný, automatický krok mimo build. Build uvádí, co paměti chybí, v target/site-i18n/missing.json s počtem stránek, na nichž je každý segment, a zveřejňuje své pokrytí na /<lang>/i18n.json. scripts/site-translate run --adapter se ptá modelu přes adaptéry poradců z ADR 0098 a export/import nesou dávky překladatelům mimo proces (podagenti relace). Glosář a styl, které překladatel dostává, žijí v site/i18n/<lang>/guide.json.

  6. Paměť je adresována obsahem čtenáři, takže project.english-only v4 připouští site/i18n/<lang>/ jako vydání: adresář říká svůj jazyk v edition.toml a scripts/ci/english-only-allow.txt jej deklaruje s tímto jazykem a důvodem.

Důsledky

  • Nový jazyk je jeden řádek v site/i18n/languages.json, průvodce, edition.toml a běh překladu. Žádná šablona, generátor ani stránka se nemění.
  • Pokrytí se měří, ne tvrdí. Hlásí se při každém buildu; kontrola, která odmítne regresi a poté cokoli pod úplným pokrytím, je další krok tohoto rozhodnutí.
  • Každá změna anglického textu stojí překlad segmentů, které změnila. Náklady jsou úměrné změně, protože nezměněné segmenty si ponechávají své klíče.
  • Překlad je strojový a říká to na každé přeložené stránce, s odkazem na originál.
  • Vyhledávání, sitemap a řetězce JavaScriptu webu zatím nejsou přeloženy; leží mimo stránky, které tento průchod čte.

Odkud to pochází

kanonický soubor
.ai/repo/adrs/0218-every-language-of-the-site-is-derived-from-the-english-build-and-a-translation-memory.md
identity
adr-0218
dostupné také jako
Zdroj MCP majordomus://adr/adr-0218 · majordomus entity show adr/adr-0218 · GET /api/v1/entity?uri=majordomus://adr/adr-0218
v Cockpitu
/cockpit/objects/adr/adr-0218

Tato stránka je generována z výše uvedeného souboru pomocí scripts/generate-site-data; úprava stránky nic nemění, úprava souboru změní všechna rozhraní. Výše uvedené vztahy jsou hrany docs/generated/graph.json, které spustitelný program zapisuje ze stejného indexu.

Prohledává názvy a popisy všech stránek, které tento web publikuje.