Назад

gt-i18n@0.9.0

Ernest McCarter avatarErnest McCarter
gt-i18ngt-nodedictionariesgetTranslationsi18n

Обзор

gt-i18n теперь поддерживает переводы с использованием словарей через getTranslations(). Это приводит gt-i18n в соответствие с gt-next, gt-react и другими библиотеками i18n, в которых словари используются как основной способ организации переводов.

ПакетВерсия
gt-i18n0.9.0
gt-node0.7.0

Настройка

Создайте в корне проекта файл dictionary.json с исходными (английскими) строками:

{
  "greeting": {
    "hello": "Hello!"
  },
  "user": {
    "welcome": "Welcome, {name}!"
  },
  "errors": {
    "notFound": "Page not found",
    "unauthorized": "Access denied"
  }
}

Когда вы запускаете GT CLI (npx gtx translate), он автоматически найдёт dictionary.json в корне проекта и переведёт его для настроенных локалей.

Использование

Имея приведённый выше исходный словарь, вызовите getTranslations(), чтобы получить функцию t, которая возвращает записи из вашего словаря:

import { getTranslations } from 'gt-i18n';

const t = await getTranslations();

t('greeting.hello'); // "Привет!"
t('user.welcome', { name: 'Alice' }); // "Добро пожаловать, Alice!"

Подсловари с t.obj()

t() возвращает одну строку. t.obj() возвращает целое поддерево словаря в виде объекта:

const t = await getTranslations();

t('errors.notFound'); // "Страница не найдена"

const errors = t.obj('errors');
// { notFound: "Страница не найдена", unauthorized: "Доступ запрещён" }

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

Поведение поиска

Поиск выполняется по двум правилам:

  1. Нет перевода → используется локаль по умолчанию. Если ключ существует в исходном словаре, но для текущей локали у него нет перевода, t() возвращает исходный текст.
  2. Нет исходной записи → ошибка. Если ключа вообще нет в исходном словаре, t() выбрасывает ошибку. Это сделано намеренно: если ключ не определён в исходном тексте, это баг, а не отсутствующий перевод. В рамках предстоящего рефакторинга такое поведение будет применяться во всех библиотеках GT.

Второе правило предполагает, что переведённые словари соответствуют структуре исходного словаря — именно так GT автоматически создаёт переводы.

Ссылки