|Labs
Rezervovat demoPlatforma
React (Lingo Compiler)
Alpha
React (MCP)React (i18n)Legacy CLI (v0)
Zastaralé

Lingo.dev Compiler

  • Jak to funguje
  • Nastavení
  • Compiler: rychlý start

Frameworky

  • Integrace s Next.js
  • Vite + React

Průvodci

  • Přepínání jazyků
  • Automatická pluralizace
  • Ruční přepsání
  • Režimy sestavení
  • Struktura projektu
  • Poskytovatelé překladu
  • Vlastní resolvery jazyka
  • Vývojové nástroje

Reference

  • Osvědčené postupy
  • Configuration Reference
  • Řešení problémů
  • Průvodce migrací
  • Optimalizace
  • Výstupní formáty

Osvědčené postupy

Alfa

Lingo.dev Compiler je ve fázi alfa. Je nestabilní, nedoporučuje se pro použití v produkci a API se mohou mezi jednotlivými vydáními měnit.

Tyto postupy vycházejí ze vzorců, které s Lingo.dev Compiler přinášejí spolehlivé a cenově efektivní výsledky. Pokrývají build pipeline, organizaci kódu, kvalitu překladu a testování.

Build pipeline#

Používejte strategii tří režimů#

1

Vývoj – pseudopřekladač

Aktivujte dev.usePseudotranslator: true pro okamžitou zpětnou vazbu. Žádná API volání, žádné náklady, okamžité výsledky. Pseudopřeklady vám pomohou odhalit nepřeložené řetězce a otestovat rozvržení.

ts
{
  buildMode: "translate",
  dev: { usePseudotranslator: true },
}
2

CI – režim translate

Spouštějte s buildMode: "translate" a skutečným providerem. Po každém běhu CI commitněte aktualizovaný .lingo/metadata.json, aby byly překlady dostupné pro produkci.

bash
LINGO_BUILD_MODE=translate npm run build
3

Produkce – režim cache-only

Nasazujte s buildMode: "cache-only". V produkci nejsou potřeba žádné API klíče. Buildy jsou deterministické a rychlé.

bash
LINGO_BUILD_MODE=cache-only npm run build

Správa verzí#

Commitujte .lingo/ do repozitáře#

Soubor .lingo/metadata.json je jediný zdroj pravdy pro všechny překlady uložené v cache. Produkční buildy v režimu cache-only jsou na něm závislé.

gitignore
# .gitignore - do NOT ignore .lingo/
node_modules/
dist/
.env

Pokud .lingo/metadata.json není commitnutý, produkční buildy selžou, protože režim cache-only nemá odkud překlady číst.

Kontrolujte změny v překladech#

Když CI commitne aktualizované překlady, zkontrolujte diff .lingo/metadata.json v pull requestech. Díky tomu odhalíte problémy s překladem dřív, než se dostanou do produkce – podobně jako při kontrole změn v kódu.

Organizace kódu#

Vkládejte přeložitelný text přímo do JSX#

Compiler prohledává JSX a hledá přeložitelný obsah. Text uložený v JavaScriptových proměnných, konstantách nebo externích souborech neodhalí:

tsx
// Good - compiler detects this text
export function Header() {
  return <h1>Welcome to our app</h1>;
}

// Bad - compiler cannot detect text in a variable
const title = "Welcome to our app";
export function Header() {
  return <h1>{title}</h1>;
}

Ve větších codebase používejte useDirective#

Ve velkých projektech prohledávání každého souboru prodlužuje build. Aktivujte useDirective: true a přidejte 'use i18n' jen do souborů, které obsahují text viditelný pro uživatele:

ts
{
  useDirective: true,
}
tsx
'use i18n';

// Only this file is scanned for translations
export function PublicPage() {
  return <h1>Welcome</h1>;
}

Udržujte sourceRoot co nejužší#

Nastavte sourceRoot na nejmenší adresář, který obsahuje vaše přeložitelné komponenty. Příliš široce nastavený sourceRoot prohledává zbytečné soubory:

Typ projektuDoporučený sourceRoot
Next.js App Router"./app"
Vite + React"src"
Monorepo (s useDirective)"."

Kvalita překladu#

Pro výrazy značky používejte ruční přepisy#

Názvy značek, názvy produktů a právní texty by měly používat ruční přepisy, místo aby se spoléhaly na AI překlad:

tsx
<h1 data-lingo-override={{ es: "Motor de Localizacion", de: "Lokalisierungs-Engine" }}>
  Localization Engine
</h1>

Pro optimalizaci nákladů používejte mapování jazykových dvojic#

Různé modely mají různé silné stránky i cenové hladiny. Dražší modely přiřaďte jazykům, které je potřebují, a jinde používejte cenově efektivnější modely:

ts
{
  models: {
    "*:*": "groq:llama-3.3-70b-versatile",      // Fast, cost-effective default
    "*:ja": "anthropic:claude-3-5-sonnet",       // Higher quality for Japanese
    "*:zh-Hans": "anthropic:claude-3-5-sonnet",  // Higher quality for Chinese
  },
}

Pro glosář a hlas značky používejte Lingo.dev engine#

Když potřebujete v celé aplikaci konzistentní terminologii, nakonfigurujte v Lingo.dev lokalizační engine s glosářem a hlasem značky. Ty se pak automaticky použijí na každý požadavek na překlad.

Pluralizace#

Pokud ji nepotřebujete, pluralizaci vypněte#

Pokud vaše aplikace nezobrazuje vedle textu číselné hodnoty, vypněte pluralizaci a snižte složitost buildu:

ts
{
  pluralization: { enabled: false },
}

Pište text závislý na počtu přirozeně#

Když je pluralizace aktivní, pište text s číselnými proměnnými přirozeně. Compiler se postará o převod do ICU MessageFormat:

tsx
// Good - the compiler detects and pluralizes this
<p>You have {count} items in your cart</p>

// Also good - works with any numeric expression
<p>{unreadCount} unread messages</p>

Testování#

Nejdřív testujte s pseudopřekladačem#

Než začnete generovat skutečné překlady, spusťte pseudopřekladač a ověřte úplné pokrytí:

  1. Aktivujte dev.usePseudotranslator: true
  2. Projděte každou stránku a komponentu
  3. Jakýkoli text bez značek [!!! ... !!!] se nepřekládá
  4. Opravte problémy s umístěním textu (přesuňte text do JSX, upravte sourceRoot, přidejte direktivy 'use i18n')

Odhalit nepřeložené řetězce pomocí pseudopřekladače je rychlejší a levnější než je zjistit až po vygenerování skutečných překladů.

Před vydáním testujte se skutečnými překlady#

Vypněte pseudopřekladač a před vydáním vygenerujte skutečné překlady alespoň pro jeden cílový jazyk:

ts
{
  dev: { usePseudotranslator: false },
}

Zkontrolujte přetékání rozvržení, zkracování textu a problémy s obousměrným textem, které pseudopřeklady neodhalí.

Další kroky#

Build režimy
Konfigurace buildů pro CI a produkci
Poskytovatelé překladu
Výběr provideru a mapování jazykových dvojic
Vývojové nástroje
Pseudopřekladač a překladový server
Řešení problémů
Běžné problémy a jejich řešení

Byla tato stránka užitečná?

Max PrilutskiyMax Prilutskiy·Aktualizováno před 4 měsíci·4 min čtení