Перейти к содержанию

i18n ключевая разница

Сравните два файла JSON локализации и перечислите ключи перевода, отсутствующие в каждом из них.

Входные данные
JSON B (переведенный файл)
Выходные данные

i18n ключевая разница

Вставьте базовый файл локализации как JSON A и переведенный файл как JSON B, и этот инструмент сведет оба пути к ключам с точечной записью — «nav.home», «errors.notFound» — а затем сообщит, где именно они расходятся. Он создается на тот момент, когда файл перевода отстает от исходного кода: на новом экране отображается несколько строк, кто-то напрямую редактирует английскую копию или локаль была машинно переведена несколько месяцев назад и никогда не возвращалась.

Выберите, о чем сообщить: ключи, отсутствующие в B (добавлены в исходный код, но не переведены), ключи, отсутствующие в A (оставшиеся строки, оставшиеся после удаления функции), или оба сразу. Четвертый режим, «непереведенный», перечисляет ключи, существующие в обоих файлах, с байт-идентичными значениями — сильный сигнал, что строка была скопирована, а не переведена, поскольку реальный перевод соответствует источнику только по совпадению. Вложенные объекты обрабатываются рекурсивно независимо от глубины файла; массивы сравниваются как целые значения, а не индексируются, поскольку реальные файлы локализации вложены в объекты и обрабатывают массивы как непрозрачные данные (формы множественного числа, упорядоченные списки), а не как пронумерованные ключи.

Выходные данные поступают в виде простого списка, по одному пути в каждой строке, или в формате JSON, готового для использования в сценарии или проверке CI, которая не позволяет построить сборку при отклонении переводов. Подсчет над выводом всегда показывает полную картину независимо от того, какой режим отчета выбран — сколько ключей находится в A, сколько в B и сколько отсутствует с каждой стороны — так что вы можете сразу уловить разницу, прежде чем читать детали. О недопустимом JSON в любом файле сообщается по имени с цитированием собственного сообщения синтаксического анализатора, поэтому вы сразу узнаете, какой файл нужно исправить.

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

FAQ

Что считается «ключом» для сравнения?
Каждое листовое значение в JSON, адресуемое по полному точечному пути — вложенный объект типа {"nav":{"home":"Home"}} создает ключ "nav.home". Массивы сравниваются как целые значения, а не разбиваются на индексированные ключи.
Что на самом деле обнаруживает «непереведенный» режим?
Ключи, существующие в обоих файлах, имеют одинаковое значение. Он помечает, вероятно, непереведенные строки, но также будет отображаться короткое значение, которое действительно одинаково на обоих языках (название бренда, номер) — рассматривайте это как повод для проверки, а не как гарантированный промах.
Что произойдет, если ключ содержит объект в одном файле и простую строку в другом?
Каждая сторона сглаживается независимо, поэтому несоответствие проявляется естественным образом: собственные вложенные ключи объекта отображаются как отсутствующие на стороне строки, а ключ строки отображается как отсутствующий на стороне объекта.
Есть ли ограничение на размер файла?
Нет фиксированного ограничения, превышающего ограничение в 10 МБ, которое используют большинство инструментов. Обработка выполняется на вашем устройстве, поэтому даже большие каталоги с тысячами ключей сравниваются за миллисекунды.
Загружены ли куда-нибудь мои файлы локализации?
Нет. И JSON A, и JSON B анализируются и сравниваются полностью в вашем браузере — ни один файл не покидает ваше устройство.