Struktura projektu

Aktualizováno: před 2 čtvrtletími · 3 min čtení

Alpha

Compiler od Lingo.dev je v alpha verzi. Je nestabilní, není doporučený pro produkční nasazení a API se mezi jednotlivými releasy může měnit.

Compiler od Lingo.dev v kořenovém adresáři projektu vytváří a udržuje adresář .lingo/, který ukládá metadata překladů a cache. Když této struktuře porozumíte, snáz budete spravovat překlady ve správě verzí, ladit chybějící překlady a optimalizovat výkon buildů.

Adresář .lingo/#

Compiler tento adresář automaticky vytvoří při prvním buildu. Obsahuje všechna metadata překladů, která využívá build pipeline:

text
.lingo/
  metadata.json              # Translation cache and content hashes
  locale-resolver.server.ts  # Optional: custom server-side locale resolver
  locale-resolver.client.ts  # Optional: custom client-side locale resolver

metadata.json#

Jde o hlavní soubor v adresáři .lingo/. Ukládá:

  • Hashe obsahu – stabilní identifikátory založené na hashi pro každý přeložitelný řetězec
  • Překlady v cache – vygenerované překlady pro každou dvojici jazyků
  • Snapshoty zdrojového textu – podobu zdrojového textu v okamžiku překladu, používanou k detekci změn

Compiler tento soubor čte na začátku každého buildu. Řetězce se shodným hashem znovu použijí překlady z cache. Řetězce se změněným nebo chybějícím hashem se odešlou nakonfigurovanému poskytovateli překladu.

Commitněte do správy verzí

Adresář .lingo/metadata.json vždy commitněte do repozitáře. Produkční buildy v režimu cache-only čtou překlady výhradně z tohoto souboru. Pokud nebude commitnutý, produkční buildy selžou.

Na co myslet v .gitignore#

Do .gitignore rozhodně nepřidávejte .lingo/. Tento adresář by měl být sledovaný ve správě verzí. Typický soubor .gitignore pro projekt používající Compiler:

gitignore
# Do NOT ignore .lingo/ - it contains translation cache
node_modules/
dist/
.env

sourceRoot#

Volba sourceRoot určuje, který adresář bude Compiler procházet při hledání přeložitelných React komponent:

ts
{
  sourceRoot: "./app",  // Next.js App Router
  // or
  sourceRoot: "src",    // Vite + React
}

Compiler rekurzivně prochází všechny soubory .tsx, .ts, .jsx a .js v rámci sourceRoot a hledá v nich přeložitelný JSX obsah. Soubory mimo tento adresář nezpracovává.

Hodnota sourceRootCo se prochází
"./app"Všechny soubory v adresáři app/ (konvence Next.js)
"src"Všechny soubory v adresáři src/ (konvence Vite)
"."Všechny soubory v kořenovém adresáři projektu (užitečné pro monorepa se sdílenými balíčky)

Širší sourceRoot znamená procházení více souborů, a tedy delší build. Držte ho co nejužší. Pokud překlad potřebují jen některé soubory, použijte místo něj volbu useDirective.

Opt-in režim s „use i18n“#

Ve výchozím nastavení Compiler překládá všechen JSX text v sourceRoot. Pokud chcete přepnout do opt-in režimu, nastavte useDirective: true:

ts
{
  useDirective: true,
}

V opt-in režimu se zpracovávají jen soubory, které začínají direktivou 'use i18n':

tsx
'use i18n';

export function Welcome() {
  return <h1>Welcome to our app</h1>;
  // This text IS translated
}

Soubory bez této direktivy se přeskočí:

tsx
export function InternalAdmin() {
  return <h1>Admin Dashboard</h1>;
  // This text is NOT translated
}

Kdy použít opt-in režim#

ScénářDoporučený režim
Malá aplikace, kde se má překládat veškerý obsahVýchozí (useDirective: false)
Rozsáhlý kódový základ, kde jsou uživatelsky viditelné jen některé stránkyOpt-in (useDirective: true)
Monorepo se sdílenými interními i externími komponentamiOpt-in (useDirective: true)
Postupné zavádění – přidávání i18n do existující aplikaceOpt-in (useDirective: true)

lingoDir#

Volba lingoDir mění umístění adresáře s metadaty:

ts
{
  lingoDir: ".lingo",  // Default
  // or
  lingoDir: ".translations",  // Custom location
}

To se hodí, pokud je .lingo/ v konfliktu s existujícím adresářem ve vašem projektu.

Další kroky#