Перейти к содержимому
Locale Gaps

Проверка переводов для многоязычных приложений

Каждая строка получает визу, прежде чем пересечь границу.

Locale Gaps сравнивает исходный языковой файл с каждым переводом и останавливает всё, что сломается на экране: пропущенные ключи, пустой или непереведённый текст, потерянные плейсхолдеры, сломанную разметку и формы множественного числа, которые нужны языку, но которых нет в файле. А затем отдаёт переводчикам файл ровно с тем, что осталось сделать.

Что проверяется
Штампы о въездеP<LOCALE<GAPS

Что это

Проверка файлов перевода для приложений. Читает JSON, YAML, .properties, Apple .strings, gettext .po или простой список ключей и сравнивает каждый язык с исходным.

Для кого

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

Какую проблему решает

Пропущенный ключ показывает пользователю текст вроде cart.checkout, потерянный плейсхолдер выводит {{amount}} вместо цены, а нехватка формы множественного числа ломает фразы на русском или арабском. Всё это видно до релиза.

Проверьте файлы перевода

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

Исходный язык

Файл, которому должны соответствовать все остальные языки. Вложенный JSON, YAML с корнем вида en:, строки key=value, строки "key" = "value";, файлы .po или простой список ключей.

Перевод 1

Вставьте файл для этого языка. Формат может отличаться от исходного.

Настройки

Длинные переводы часто вылезают за кнопки и меню. 1.6 означает на 60 процентов длиннее.

Через запятую, например названия бренда или продукта. Числа, коды и однословные бренды уже игнорируются.

Проверок пока не было

Вставьте исходный файл и хотя бы один перевод или загрузите пример приложения, чтобы увидеть полный отчёт.

Что проверяется

Каждое правило появилось потому, что однажды уже сломало настоящий экран. Ни одному не нужна нейросеть или догадки.

  1. Пропущенные и пустые ключи

    Каждый исходный ключ должен быть в переводе и иметь текст. Иначе пользователь увидит cart.checkout или пустую кнопку.

  2. Непереведённый текст

    Текст, совпадающий с исходным, отмечается, если это не число, не код, не ссылка и не разрешённое вами слово, например название бренда.

  3. Плейсхолдеры

    Переменные {{name}}, {name}, %s, %1$d, %{name} и :name должны точно совпадать с исходными. Переименованная переменная ничего не выведет.

  4. Формы множественного числа

    Правила берутся из вашего браузера, это те же правила, что используют приложения. Русскому нужны one, few и many, арабскому шесть форм. Проверяются и ICU сообщения, и суффиксы i18next вроде items_few.

  5. Разметка

    Теги <a>, <b> или <0> должны пережить перевод, иначе пропадут ссылки и выделение.

  6. Длина, лишние ключи и дубликаты

    Очень длинные переводы, ключи, которые есть только в переводе, и ключи, заданные дважды, показываются с меньшим приоритетом.

Как пользоваться

  1. Вставьте исходный файл

    Обычно английский. Откройте файл или вставьте его содержимое. Вложенные ключи превращаются в пути вида checkout.pay.

  2. Добавьте каждый язык

    Введите код языка и вставьте его файл. У каждого языка может быть свой формат.

  3. Нажмите Проверить переводы

    Каждый язык получает штамп с долей найденных ключей и готовых к релизу строк, а также счётчик по каждому типу проблем.

  4. Исправьте или передайте

    Отфильтруйте находки, затем скачайте файл на перевод для каждого языка или полный CSV.

  5. Сохраните заметку

    Скопируйте заметку к релизу в запрос на слияние или в список проверок перед релизом. Хеш показывает, что отчёт не правили.

Чего он не делает

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

Вопросы

Мои файлы загружаются на сервер?

Нет. Разбор и проверки выполняются на этой странице. Закройте вкладку, и текста больше нет.

Почему для немецкого слово отмечено как непереведённое, хотя оно одинаково в обоих языках?

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

Откуда берутся правила множественного числа?

Из Intl.PluralRules в вашем браузере. Он следует данным Unicode CLDR, которые используют большинство приложений.

Можно проверить только ключи, без текста?

Да. Вставьте простые списки ключей. Пропущенные и лишние ключи будут в отчёте, проверки текста пропускаются.

Связаться с автором

Есть вопрос, идея или предложение о работе? Напишите в X или Telegram.

Поддержать автора

Если инструмент сэкономил вам время, можно отправить чаевые на этот EVM адрес из своего кошелька.

0xd28Fd90eD69092bd01598f237aad33a0cc9c3EeA