Lokalizace mobilních aplikací
Lingo.dev CLI překládá nativní resource soubory mobilních aplikací—Xcode .strings, Android XML, Flutter ARB a React Native JSON—pomocí nakonfigurovaného lokalizačního engine. CLI automaticky rozpozná formát každého souboru podle přípony, zachová jeho strukturu a nativně pracuje s plurály.
Přehled platforem#
| Platforma | Nativní formát | Typická cesta ke zdrojovému souboru |
|---|---|---|
| iOS (Xcode) | .strings | en.lproj/Localizable.strings |
| iOS (Xcode) | .stringsdict | en.lproj/Localizable.stringsdict |
| iOS (Xcode) | .xcstrings | Localizable.xcstrings |
| Android | strings.xml | app/src/main/res/values/strings.xml |
| Flutter | .arb | lib/l10n/app_en.arb |
| React Native | .json | src/locales/en.json |
Co budete potřebovat#
Při každém spuštění CLI se obsah odesílá přes lokalizační engine – konfiguraci, která určuje, jaký model LLM, glosář, hlas značky a pravidla se použijí. Vytvořte si ho v dashboardu Lingo.dev.
Nainstalujte CLI (Node.js 22+) a přihlaste se:
npm install -g @lingo.dev/cli
lingo loginlingo login vás přihlásí pomocí jednorázového kódu. Pro CI přeskočte interaktivní přihlášení a předejte --api-key (nebo nastavte LINGO_API_KEY).
Nastavení pro vaši platformu#
Spusťte lingo init, tím vytvoříte .lingo/config.json (zdrojový/cílový jazyk a vzory souborů), a potom lingo link, kterým připojíte své orgId a engineId. Soubor .lingo/config.json commitněte do repozitáře. Níže uvedené příklady ukazují výslednou konfiguraci pro každou platformu.
Vzor vždy míří na váš zdrojový soubor a CLI z něj odvodí cestu ke každému cíli. Obvykle to znamená nahradit jazyk nalezený v cestě (en.lproj → de.lproj, app_en.arb → app_de.arb). Dvě platformy fungují jinak a o obě se postaráme za vás: String Catalog uchovává všechny jazyky v jednom souboru, takže cílová cesta je stejná jako zdrojová; a Android ukládá výchozí řetězce do nekvalifikovaného values/, kde v cestě vůbec není uveden jazyk, takže CLI k němu přidá cílový kvalifikátor (values/ → values-de/).
Xcode podporuje tři lokalizační formáty. Zvolte ten, který odpovídá nastavení vašeho projektu.
String Catalogs (.xcstrings)—moderní formát Xcode uvedený v Xcode 15. Jeden JSON soubor obsahuje všechny jazyky a Xcode ho automaticky aktualizuje, když přidáte nové řetězce. CLI tento soubor upravuje přímo, takže pattern míří na jediný katalog bez segmentu jazyka.
{
"orgId": "org_...",
"engineId": "eng_...",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "MyApp/Localizable.xcstrings" }]
}Legacy soubory .strings—jeden soubor pro každý jazyk v adresářích [code].lproj/. Zdrojový jazyk je součástí cesty (en.lproj) a CLI zapíše každý cíl do jeho vlastního adresáře .lproj. Pokud váš projekt používá i .stringsdict pro plurály, přidejte druhou položku files.
{
"orgId": "org_...",
"engineId": "eng_...",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "MyApp/en.lproj/Localizable.strings" },
{ "pattern": "MyApp/en.lproj/Localizable.stringsdict" }
]
}Funguje i projekt, jehož bundle vývojového jazyka je Base.lproj místo en.lproj — CLI rozpozná Base.lproj jako zdrojový jazyk.
Jak nastavit lokalizační infrastrukturu v Xcode najdete v dokumentaci Applu k lokalizaci.
Spuštění překladů#
Přeložte všechny resource soubory jediným příkazem:
lingo push --waitCLI načte soubory zdrojového jazyka, pomocí lockfile (.lingo/lock.json, který commitnete) spočítá, co se od posledního spuštění změnilo, přeloží jen rozdíl a výsledky zapíše do souborů cílového jazyka.
Při prvním spuštění—nebo kdykoli přidáte nový cílový jazyk—přeložte vše od nuly:
lingo push --backfill-missing --waitPokud váš projekt obsahuje více typů prostředků, zacilte na konkrétní platformu předáním globu (žádné příznaky --bucket ani --target-locale neexistují). Vzory se porovnávají se zdrojovými cestami, takže rozsah určujte podle zdrojového souboru, ne cílového:
lingo push "app/src/main/res/values/strings.xml"
lingo push "MyApp/Localizable.xcstrings"Pokud chcete z tohoto checkoutu načíst poslední odeslané spuštění, spusťte lingo pull; ostatní stroje získají překlady po potvrzení změn. Pokud si chcete ověřit, že jsou překlady aktuální, aniž by se zapsaly jakékoli změny — což se hodí jako kontrola před nasazením — spusťte lingo check.
Plurály a konvence jednotlivých platforem#
Každá mobilní platforma pracuje s plurály jinak – iOS používá .stringsdict nebo pravidla String Catalogs, Android používá XML prvky <plurals> a Flutter používá ICU MessageFormat v ARB souborech. CLI při překladu zachovává nativní strukturu plurálů každé platformy a generuje správné kategorie množného čísla pro každý cílový jazyk.
Poznámky pro překladatele
Mobilní řetězce bývají krátké a silně závislé na kontextu. Použijte poznámky pro překladatele v Xcode souborech .xcstrings a dejte lokalizačnímu enginu kontext, kde se řetězec zobrazuje – „popisek tlačítka v checkout flow“ se překládá jinak než „položka navigačního menu“.
Automatizace v CI#
Doporučený způsob, jak udržovat překlady aktuální, je Lingo.dev GitHub App. Běží na serveru, čte vaše commitnuté .lingo/config.json a engineId a automaticky otevírá aktualizace překladů—bez nutnosti spravovat runner, secrets nebo lockfile. Pokud raději spouštíte překlady ve vlastní pipeline, spusťte lingo push ve svém CI runneru a commitněte výsledky.