CLI Lingo.dev переводит нативные ресурсные файлы мобильных приложений — Xcode .strings, Android XML, Flutter ARB и React Native JSON — через настроенный движок локализации. Для каждой платформы предусмотрен отдельный тип bucket, который понимает формат файла, сохраняет структуру и нативно обрабатывает формы множественного числа.
Обзор платформ#
| Платформа | Нативный формат | CLI bucket | Типичный путь к файлу |
|---|---|---|---|
| iOS (Xcode) | .strings | xcode-strings | [locale].lproj/Localizable.strings |
| iOS (Xcode) | .stringsdict | xcode-stringsdict | [locale].lproj/Localizable.stringsdict |
| iOS (Xcode) | .xcstrings | xcode-xcstrings | Localizable.xcstrings |
| Android | strings.xml | android | app/src/main/res/values-[locale]/strings.xml |
| Flutter | .arb | flutter | lib/l10n/app_[locale].arb |
| React Native | .json | json | src/locales/[locale].json |
Что понадобится#
При каждом запуске CLI контент проходит через движок локализации — конфигурацию, которая определяет, какие LLM-модель, глоссарий, тональность бренда и инструкции будут применяться. Создайте её в панели Lingo.dev и сгенерируйте API key.
Настройка платформы#
Xcode поддерживает три формата локализации. Выберите тот, который соответствует конфигурации вашего проекта.
Каталоги строк (.xcstrings) — современный формат Xcode, появившийся в Xcode 15. Один JSON-файл содержит все локали, а Xcode автоматически обновляет его при добавлении новых строк. CLI изменяет этот файл на месте — заполнитель [locale] не требуется.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-xcstrings": {
"include": ["MyApp/Localizable.xcstrings"]
}
}
}Устаревшие файлы .strings — по одному файлу на локаль в каталогах [locale].lproj/. Если в проекте для форм множественного числа также используются .stringsdict, добавьте оба bucket.
{
"$schema": "https://lingo.dev/schema/i18n.json",
"version": "1.15",
"locale": {
"source": "en",
"targets": ["es", "fr", "de", "ja"]
},
"buckets": {
"xcode-strings": {
"include": ["MyApp/[locale].lproj/Localizable.strings"]
},
"xcode-stringsdict": {
"include": ["MyApp/[locale].lproj/Localizable.stringsdict"]
}
}
}Подробности о настройке i18n-инфраструктуры в Xcode — в документации Apple по локализации.
Запуск перевода#
Переведите все ресурсные файлы одной командой:
npx lingo.dev@latest runCLI читает файлы исходной локали, с помощью lockfile определяет, что изменилось с прошлого запуска, переводит только изменения и записывает результат в файлы целевых локалей.
Если в проекте несколько типов ресурсов, можно указать конкретную платформу:
npx lingo.dev@latest run --bucket android
npx lingo.dev@latest run --bucket xcode-xcstringsМножественное число и особенности платформ#
Каждая мобильная платформа по-своему работает с формами множественного числа: iOS использует .stringsdict или правила String Catalog, Android — XML-элементы <plurals>, а Flutter — ICU MessageFormat в ARB-файлах. CLI сохраняет нативную структуру множественного числа для каждой платформы при переводе и генерирует корректные категории для каждой целевой локали.
Примечания для переводчиков
Строки в мобильных приложениях часто короткие и сильно зависят от контекста. Используйте примечания для переводчиков в файлах Xcode .xcstrings, чтобы дать движку локализации больше контекста о том, где используется строка: «подпись кнопки в процессе оформления заказа» переводится иначе, чем «пункт меню навигации».
