Перевод String Catalogs Xcode (.xcstrings)
String Catalog содержит все языки в одном JSON-файле, который вручную должен редактировать только Xcode. KAERIS добавляет новые языки в тот же файл и оставляет все остальное в нем без изменений.
Эту страницу перевёл KAERIS и проверил каждую строку обратным переводом. Носитель языка ещё не проверял. Оригинал на английском
Как строится String Catalog
Один файл, strings, затем ключ, затем localizations, затем язык. Каждый язык содержит stringUnit или variations для множественного числа. Файл также содержит comment, extractionState и shouldTranslate. Ключ без записи для исходного языка является его собственным исходным текстом.
{
"sourceLanguage" : "en",
"strings" : {
"Welcome back, %@!" : {
"comment" : "Greeting on the home screen",
"extractionState" : "manual",
"localizations" : {
"en" : { "stringUnit" : { "state" : "translated", "value" : "Welcome back, %@!" } }
}
},
"%lld items" : {
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"one" : { "stringUnit" : { "state" : "translated", "value" : "%lld item" } },
"other" : { "stringUnit" : { "state" : "translated", "value" : "%lld items" } }
}
}
}
}
},
"Cancel" : { }
},
"version" : "1.0"
}
На что обратить внимание при переводе .xcstrings
Не читайте его как обычный JSON
При преобразовании в общий JSON ключи становятся такими, как
strings.welcome.localizations.en…, что выглядит как перевод, и что Xcode не может прочитать. У KAERIS есть собственный парсер для этого формата.Вариации множественного числа для каждого языка
В английском языке есть
oneиother; русский также нуждается вfewиmany, а арабский — во всех шести. README описывает развертывание;%lldостается там, где он был.То, что написал Xcode, должно остаться
Комментарии, состояния извлечения, языки, уже присутствующие в файле, и все, помеченное как
shouldTranslate: false, переносятся без изменений.Спецификаторы формата
%@,%lld,%1$@сравниваются с исходным текстом после перевода.
Реальный запуск: переведено на немецкий и проверено
Реальный запуск, 27 октября 2026 г., ничего не редактировалось вручную: kaeris translate Localizable.xcstrings --langs de с kaeris 0.2.35, 2,4 секунды, модель openai/gpt-4.1-mini (резервная модель сервиса ответила на эту задачу). Ниже приведен немецкий файл, который он написал, и что говорит kaeris check об этом.
{
"sourceLanguage": "en",
"strings": {
"Welcome back, %@!": {
"comment": "Greeting on the home screen",
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Welcome back, %@!"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Willkommen zurück, %@!"
}
}
}
},
"%lld items": {
"localizations": {
"en": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld item"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld items"
}
}
}
}
},
"de": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld Artikel"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld Artikel"
}
}
}
}
}
}
},
"Cancel": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Abbrechen"
}
}
}
}
},
"version": "1.0"
}
$ kaeris check --source Localizable.xcstrings --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
Что KAERIS делает с этим
Один файл, обновляемый на месте
kaeris translate Localizable.xcstrings --langs de,fr,jaзаписывает языки в каталог. Нет отдельного файла для каждого языка.Множественное число как ICU для модели
При проверке вариация множественного числа считывается как множественное число ICU, поэтому потерянная форма видна.
Бесплатная проверка для этого формата
Бесплатная проверка на /check считывает этот формат и работает без ключа или учетной записи. Команда терминала
kaeris checkтакже считывает его: она обрабатывает все 13 форматов начиная с kaeris 0.2.35, с теми же правилами и без отправки данных куда-либо.
Выполните в три шага
Установите CLI
Выполните
pip install kaeris.Перевести каталог
Запустите
kaeris translate Localizable.xcstrings --langs de,fr,ja. Каталог обновляется на месте.Проверить результат
Загрузите каталог на бесплатную страницу проверки; она считывает исходный текст и переводы из одного файла.
pip install kaeris kaeris translate Localizable.xcstrings --langs de,fr,ja --verify
Вопросы
Перезаписывает ли он мои существующие переводы?
Языки, уже присутствующие в файле, комментарии и состояния извлечения переносятся без изменений, как указано в README CLI.
Как обрабатывается множественное число?
Вариации множественного числа разворачиваются в категории, необходимые каждому языку: английское one/other становится one/few/many/other в русском и шести формах в арабском.
Это бесплатно?
Да, без учетной записи: 10 000 символов на файл и до 8 языков за запуск. Бесплатный API-ключ увеличивает лимит файлов до 50 000 символов. Пожизненная лицензия стоит $79 один раз, при использовании вашего собственного ключа OpenRouter; ежемесячные планы начинаются от $19. Цены
Могу ли я запускать его из терминала или в CI?
Да. pip install kaeris, затем kaeris translate Localizable.xcstrings --langs de,ja. См. также iOS. GitHub Action выполняет тот же перевод в pull request. Документация CLI · GitHub Action
Продолжайте
Справочник по CLI · Справочник по проверке · Перевести в браузере · Бесплатная проверка · Конвертировать форматы · Псевдолокализация
Другие форматы: JSON · YAML · .po · ARB · XLIFF · .strings · .properties · .resx · CSV · Markdown · Fluent · Android XML