Организация файловой структуры в проектах с использованием i18next напрямую влияет на масштабируемость, скорость разработки и количество конфликтов при командной работе. При росте количества языков и интерфейсных сущностей хаотичное хранение переводов приводит к дублированию ключей, сложностям ревью и ошибкам синхронизации.
i18next опирается на концепцию языков (locales) и пространств имён (namespaces). Это определяет фундаментальную структуру каталогов:
Типовая структура:
/locales
/en
common.json
auth.json
dashboard.json
/ru
common.json
auth.json
dashboard.json
/kk
common.json
auth.json
dashboard.json
Такое разбиение позволяет:
Namespaces в i18next — ключевой инструмент масштабирования. Вместо одного большого файла переводов используется набор логических модулей:
common — общие элементы интерфейса (кнопки, ошибки,
системные сообщения)auth — авторизация, регистрация, восстановление
пароляprofile — пользовательские данныеdashboard — панели управленияvalidation — сообщения валидации формПример структуры:
/locales
/en
common.json
auth.json
profile.json
Пример содержимого auth.json:
{
"login": "Login",
"logout": "Logout",
"errors": {
"invalid_credentials": "Invalid email or password",
"blocked_account": "Account is blocked"
}
}
Такой подход уменьшает вероятность пересечений ключей и упрощает работу нескольких разработчиков одновременно.
При развитии проекта более устойчивой становится структура, привязанная не к типу перевода, а к функциональным модулям приложения.
/locales
/en
/auth
login.json
register.json
/cart
cart.json
checkout.json
/ru
/auth
login.json
register.json
/cart
cart.json
checkout.json
Преимущества:
Недостатки:
Слишком крупные файлы переводов создают узкие места при работе в команде. Оптимальная гранулярность зависит от размера проекта:
Пример чрезмерно крупного файла (антипаттерн):
common.json (5000+ ключей)
Проблемы:
Структура ключей влияет на читаемость и повторное использование:
{
"loginButton": "Login",
"logoutButton": "Logout"
}
Проблемы:
{
"auth": {
"login": "Login",
"logout": "Logout"
}
}
Иерархия:
В реальных проектах структура часто дополняется разделением по окружениям:
/locales
/en
common.json
common.override.json
или:
/locales
/en
common.json
/en-override
common.json
Это используется для:
При использовании backend-загрузчиков (например,
i18next-http-backend) структура файлов становится частью
API:
/public/locales/en/common.json
/public/locales/ru/common.json
Загрузка происходит по шаблону:
/locales/{lng}/{ns}.json
Это требует строгого соблюдения:
В сложных системах применяют доменное разделение:
/locales
/en
/billing
/notifications
/users
/admin
Каждый домен:
Наиболее частые причины конфликтов в Git при работе с i18next:
Общий файл переводов
Отсутствие namespaces
Несогласованная структура ключей
Ручное добавление языков
Минимизация конфликтов достигается через:
Критически важно, чтобы структура JSON совпадала:
en/auth.json
ru/auth.json
kk/auth.json
Несоответствие структуры приводит к:
Для контроля применяются:
В крупных проектах структура переводов часто генерируется автоматически:
Пример генерации базового файла:
i18n extract → keys.json → locales/{lng}/{ns}.json
Такой подход позволяет:
Для упрощения импорта используют index-файлы:
/locales
/en
index.js
Пример:
import common from './common.json'
import auth from './auth.json'
export default {
common,
auth
}
Это облегчает:
По мере роста проекта структура обычно эволюционирует:
Критическим моментом становится переход от “ручного редактирования JSON” к “системе управления переводами”, где структура файлов лишь отражает внутреннюю модель данных, а не является единственным источником управления текстами интерфейса