← Все инструкции

РУКОВОДСТВО · ОБНОВЛЕНО 2026-10-19

Перевод ICU-строк нейросетью без потери плейсхолдеров

Разбор локализации интерфейса: что можно переводить, какие части защищать и как принять готовый файл.

Для перевода ICU-строк через нейросеть сначала отделите синтаксис сообщения от переводимого текста. Модель может изменить имя параметра, потерять ветку plural или добавить пояснение вместо строки. Поэтому результат возвращают в исходную структуру только после разбора и проверки. Например, параметр {name} должен остаться параметром с тем же именем: перевод его значения относится к пользовательским данным, а не к локализации шаблона. Начните с небольшой группы сообщений и проверьте их в том же форматтере, который использует приложение.

1. Опишите границу перевода

Составьте список разрешённых изменений: текст подписей, подсказок и сообщений об ошибках. Ключи локализации, URL, имена переменных и форматные элементы должны остаться под контролем программы. Для строки с именем пользователя и числом заказов храните отдельно исходный ключ, язык и набор аргументов. Передавайте переводчику пояснение, где появляется сообщение. Короткое «Удалить» может означать кнопку, заголовок или завершённое действие, и эти случаи нельзя смешивать в одном контексте.

2. Разберите сложные сообщения

ICU MessageFormat поддерживает аргументы, выбор вариантов и формы множественного числа. Вместо просьбы сохранить все скобки разберите сообщение библиотекой и переводите текстовые узлы с сохранением дерева. Не подменяйте все переменные одним общим маркером: тогда легко перепутать их местами. Если выбранный инструмент не умеет разбирать вложенные конструкции, передайте сложные строки на ручную обработку. Простое регулярное выражение не является полноценным парсером вложенного формата.

3. Проверьте результат до сохранения

Сначала проверьте, что все исходные ключи присутствуют ровно один раз и модель не создала новые. Затем сравните аргументы и попробуйте разобрать каждое сообщение. Для plural проверьте ветку other и формы, нужные выбранной локали. Это не требование сохранить одинаковое число веток во всех языках: грамматика различается. Отдельно просмотрите экранирование и буквальные фигурные скобки. Неисправные строки не должны перезаписывать рабочий перевод даже при успешном ответе API.

4. Покажите перевод в интерфейсе

Соберите экран с нулевым, единичным и большим количеством объектов, длинным именем пользователя и узкой шириной окна. Проверьте сокращения, переносы и смысл кнопок рядом с действием. Для русского языка полезны примеры 1, 2, 5, 11 и 21, но набор зависит от реальных сообщений. Сохраните отчёт по ключам: принято, требуется редактор или не прошло синтаксис. После проверки переносите только принятые строки, сохраняя исходный файл для отката.

Частые вопросы

Можно ли просто попросить сохранить {name}?

Для простых строк это полезная инструкция, но она не заменяет проверку аргументов. Не принимайте перевод только потому, что он выглядит грамматически правильным.

Нужно ли переводить имена JSON-ключей?

Обычно нет: это контракт приложения. Если ключи действительно переименовываются, такую миграцию готовят отдельно и проверяют все места использования.

Почему одинаковые формы plural не подходят?

Языки используют разные правила выбора формы. Проверяйте сообщение на целевой локали и не переносите структуру английского сообщения механически.

Чем это отличается от глоссария?

Глоссарий сохраняет терминологию и стиль. Проверка ICU защищает исполняемую структуру сообщения. Для рабочего перевода интерфейса нужны обе проверки.

Источники

Калькулятор стоимости →