|
Документация
Заказать демоПлатформа
ПлатформаMCPCLIAPIРабочие процессы
Руководства
Журнал изменений

Локализация

  • Обзор
  • API локализации
  • Локализация веб-приложений
  • Локализация мобильных приложений
  • iOS и String Catalogs
  • Android и strings.xml
  • Локализация email-писем
  • Статический контент, например .md и .json
  • Next.js с Markdoc
  • Rails с i18n

Рабочие процессы

  • Настройка движка с MCP
  • Jira Triage
  • CI/CD

Локализация мобильных приложений

Lingo.dev CLI переводит нативные мобильные файлы ресурсов — Xcode .strings, Android XML, Flutter ARB и React Native JSON — через настроенный движок локализации. CLI сам определяет формат каждого файла по расширению, сохраняет структуру и корректно обрабатывает формы множественного числа.

Обзор платформ#

ПлатформаНативный форматТипичный путь к исходному файлу
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

Что понадобится#

При каждом запуске CLI контент проходит через движок локализации — именно он определяет, какую модель LLM, глоссарий, тональность бренда и правила использовать. Создайте его в панели управления Lingo.dev.

Установите CLI (Node.js 22+) и войдите в систему:

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

lingo login выполняет вход с помощью одноразового кода. Для CI пропустите интерактивный вход — передайте --api-key или задайте LINGO_API_KEY.

Настройка платформы#

Запустите lingo init, чтобы создать .lingo/config.json (исходная и целевая локали плюс шаблоны файлов), затем lingo link, чтобы подключить orgId и engineId. Зафиксируйте .lingo/config.json в репозитории. Примеры ниже — итоговая конфигурация для каждой платформы.

Шаблон всегда указывает на исходный файл, а CLI сам выводит путь к каждому целевому. Обычно это означает замену локали в пути (en.lproj → de.lproj, app_en.arb → app_de.arb). Две платформы устроены иначе — CLI справляется с обеими автоматически: String Catalog хранит все локали в одном файле, поэтому целевой путь совпадает с исходным; Android хранит строки по умолчанию в неквалифицированной директории values/ без локали в пути, поэтому CLI добавляет к ней квалификатор целевой локали (values/ → values-de/).

Xcode поддерживает три формата локализации. Выберите тот, который соответствует конфигурации вашего проекта.

String Catalogs (.xcstrings) — современный формат Xcode, появившийся в Xcode 15. Один JSON-файл содержит все локали, и Xcode обновляет его автоматически при добавлении новых строк. CLI изменяет этот файл напрямую, поэтому шаблон указывает на единственный каталог без сегмента локали.

json
{
  "orgId": "org_...",
  "engineId": "eng_...",
  "sourceLocale": "en",
  "targetLocales": ["es", "fr", "de", "ja"],
  "files": [{ "pattern": "MyApp/Localizable.xcstrings" }]
}

Устаревшие файлы .strings — по одному файлу на локаль в директориях [code].lproj/. Исходная локаль указана в пути (en.lproj), а CLI записывает каждую целевую локаль в отдельную директорию .lproj. Если в проекте также используются .stringsdict для форм множественного числа, добавьте второй элемент 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" }
  ]
}

Проект, в котором языковой бандл разработки — Base.lproj, а не en.lproj, тоже работает: CLI распознаёт Base.lproj как исходную локаль.

Подробности о настройке i18n-инфраструктуры в Xcode — в документации Apple по локализации.

Запуск перевода#

Переведите все ресурсные файлы одной командой:

bash
lingo push

CLI считывает файлы исходной локали, определяет изменения с момента последнего запуска с помощью lockfile (.lingo/lock.json, который вы фиксируете в репозитории), переводит только то, что изменилось, и записывает результаты в файлы целевых локалей.

При первом запуске — или когда вы добавляете новую целевую локаль — переведите всё с нуля:

bash
lingo push --backfill-missing

Если проект содержит несколько типов ресурсов и нужно выбрать конкретную платформу, передайте glob (флагов --bucket и --target-locale не существует). Шаблоны сопоставляются с исходными путями, поэтому фильтруйте по исходному файлу, а не по целевому:

bash
lingo push "app/src/main/res/values/strings.xml"
lingo push "MyApp/Localizable.xcstrings"

Чтобы получить актуальные переводы на другой машине, запустите lingo pull. Чтобы проверить актуальность переводов без записи изменений — например, в качестве условия деплоя — запустите lingo check.

Множественное число и особенности платформ#

Каждая мобильная платформа по-своему работает с формами множественного числа: iOS использует .stringsdict или правила String Catalog, Android — XML-элементы <plurals>, а Flutter — ICU MessageFormat в ARB-файлах. CLI сохраняет нативную структуру множественного числа для каждой платформы при переводе и генерирует корректные категории для каждой целевой локали.

Примечания для переводчиков

Строки в мобильных приложениях часто короткие и сильно зависят от контекста. Используйте примечания для переводчиков в файлах Xcode .xcstrings, чтобы дать движку локализации больше контекста о том, где используется строка: «подпись кнопки в процессе оформления заказа» переводится иначе, чем «пункт меню навигации».

Автоматизация в CI#

Самый удобный способ поддерживать переводы в актуальном состоянии — Lingo.dev GitHub App. Он работает на стороне сервера, читает зафиксированные .lingo/config.json и engineId и автоматически создаёт PR с обновлениями переводов — без раннера, секретов и управления lockfile с вашей стороны. Если вы предпочитаете запускать переводы в собственном пайплайне, выполните lingo push в CI-раннере и зафиксируйте результаты.

Подробно по платформам#

iOS и String Catalogs
Полное руководство по Xcode .xcstrings с CLI и GitHub App
Android и strings.xml
Полное руководство по Android XML-ресурсам с CLI и GitHub App
Примеры проектов
Рабочие репозитории для iOS, Android и Flutter — с конфигурацией и переводами внутри

Что дальше#

Поддерживаемые форматы
Полный справочник по всем мобильным форматам файлов
Глоссарии
Зафиксируйте названия брендов и технические термины, чтобы они не переводились
GitHub App
Автоматизируйте перевод мобильных приложений при каждом push
Блокировка ключей
Копируйте отдельные значения без перевода

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 8 дней назад·5 минут чтения