Lokalizace mobilních aplikací

Aktualizováno: minulý týden · 5 min čtení

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#

PlatformaNativní formátTypická cesta ke zdrojovému souboru
iOS (Xcode).stringsen.lproj/Localizable.strings
iOS (Xcode).stringsdicten.lproj/Localizable.stringsdict
iOS (Xcode).xcstringsLocalizable.xcstrings
Androidstrings.xmlapp/src/main/res/values/strings.xml
Flutter.arblib/l10n/app_en.arb
React Native.jsonsrc/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:

bash
npm install -g @lingo.dev/cli
lingo login

lingo 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.

json
{
  "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.

json
{
  "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:

bash
lingo push --wait

CLI 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:

bash
lingo push --backfill-missing --wait

Pokud 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:

bash
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.

Detailní průvodci podle platforem#

Další kroky#