Формат JSON является основным способом хранения переводов в i18next и используется по умолчанию в большинстве конфигураций. Его ключевая особенность — строгая структура и предсказуемость, что делает его удобным для автоматической обработки и интеграции в сборочные процессы.
Структура обычно строится вокруг ключей, где каждый ключ соответствует строке интерфейса или группе строк:
{
"welcome": "Добро пожаловать",
"button": {
"save": "Сохранить",
"cancel": "Отмена"
}
}
Иерархия вложенных объектов позволяет организовывать переводы по логическим группам. i18next интерпретирует вложенные ключи через точечную нотацию:
button.savebutton.cancelТакой подход упрощает масштабирование переводов в больших приложениях, где количество строк может исчисляться тысячами.
Особое значение в JSON-структурах имеют интерполяции:
{
"greeting": "Привет, {{name}}"
}
i18next заменяет {{name}} значением, переданным в
runtime, что позволяет динамически формировать текст без изменения
исходного файла переводов.
Поддержка множественных форм реализуется через специальные ключи:
{
"car_one": "{{count}} машина",
"car_few": "{{count}} машины",
"car_many": "{{count}} машин"
}
Система pluralization в i18next выбирает нужную форму на основе правил языка, что критично для языков с развитой морфологией.
Ключевое ограничение JSON — отсутствие комментариев. Это влияет на сопровождение больших файлов переводов, где часто требуется пояснение контекста использования строки.
JSON5 расширяет стандарт JSON, добавляя более гибкий синтаксис, который облегчает поддержку файлов переводов в крупных проектах.
Основные отличия от JSON:
Пример структуры:
{
// Главное приветствие
welcome: 'Добро пожаловать',
button: {
save: 'Сохранить',
cancel: 'Отмена', // кнопка отмены
},
}
Наличие комментариев существенно улучшает сопровождение переводов. В реальных проектах это позволяет фиксировать контекст строки, ограничения длины или особенности отображения в интерфейсе.
Интерполяции и pluralization работают идентично JSON, поскольку различие касается только синтаксиса хранения, а не логики i18next.
{
greeting: 'Привет, {{name}}',
message_one: '{{count}} сообщение',
message_other: '{{count}} сообщений',
}
JSON5 часто используется в локальных средах разработки, где важно удобство редактирования и читаемость. Однако в production-сборках такие файлы нередко транспилируются в строгий JSON для повышения совместимости.
YAML применяется как альтернатива JSON в проектах, где приоритетом является читаемость и компактность записи. Он особенно удобен для больших файлов переводов, содержащих глубокую вложенность.
Пример структуры:
welcome: "Добро пожаловать"
button:
save: "Сохранить"
cancel: "Отмена"
Отсутствие фигурных скобок и запятых делает формат визуально чище. Иерархия выражается через отступы, что требует строгого соблюдения структуры, поскольку даже незначительное смещение пробелов меняет смысл данных.
Интерполяция в YAML полностью совместима с механизмом i18next:
greeting: "Привет, {{name}}"
Pluralization также реализуется через суффиксы ключей:
car_one: "{{count}} машина"
car_few: "{{count}} машины"
car_many: "{{count}} машин"
YAML поддерживает комментарии, что используется для документирования переводов:
# Текст отображается на главной странице
welcome: "Добро пожаловать"
В сравнении с JSON и JSON5 YAML обладает более высокой читаемостью, но требует аккуратного обращения с отступами и не допускает произвольных структурных ошибок.
JSON, JSON5 и YAML решают одну задачу — хранение ключ-значение пар переводов, но различаются уровнем строгости и удобством сопровождения.
JSON:
JSON5:
YAML:
i18next активно использует вложенные структуры независимо от выбранного формата. Это позволяет формировать логические модули переводов:
{
"auth": {
"login": {
"title": "Вход",
"submit": "Войти"
}
}
}
или в YAML:
auth:
login:
title: "Вход"
submit: "Войти"
Такая организация облегчает разделение переводов по функциональным областям приложения: авторизация, профиль пользователя, настройки, ошибки.
Во всех трёх форматах используется единый механизм плейсхолдеров i18next:
{{variable}} — базовая подстановка{{variable, format}} — форматирование значенийПример:
{
"price": "Цена: {{value}} ₽"
}
Особое внимание уделяется экранированию символов, особенно в YAML, где кавычки и двоеточия могут влиять на структуру документа.
i18next использует CLDR-правила для определения форм множественного числа. Структура ключей зависит от языка и может включать несколько форм:
{
"item_one": "{{count}} элемент",
"item_few": "{{count}} элемента",
"item_many": "{{count}} элементов"
}
В YAML и JSON5 структура сохраняется идентичной, так как логика pluralization обрабатывается библиотекой, а не форматом хранения.
Форматы JSON, JSON5 и YAML интегрируются в i18next через загрузчики ресурсов. На уровне конфигурации происходит преобразование файлов в объектную структуру:
fetch или
requireЭто влияет на сборку приложения, поскольку YAML и JSON5 обычно требуют дополнительных шагов трансформации на этапе bundling.
JSON обладает наименьшими накладными расходами при загрузке, так как парсится встроенными средствами JavaScript. JSON5 и YAML требуют дополнительных библиотек, что увеличивает размер бандла и время инициализации.
В крупных приложениях часто применяется стратегия:
Такой подход объединяет удобство разработки и производительность исполнения.