# General Translation Changelog: gt-i18n 0.9.0: Переводы на основе словарей
URL: https://generaltranslation.com/ru/blog/gt-i18n_v0_9_0.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 
Authors: Ernest McCarter
Published: 2026-05-07

## Обзор

`gt-i18n` теперь предоставляет переводы на основе словарей для интеграций с фреймворками. В приложениях Node.js используйте публичный экспорт [`getTranslations()`](/docs/node/reference/functions/get-translations) из `gt-node`; `gt-i18n@0.9.0` не экспортирует его из корня пакета.

| Пакет     | Версия  |
| --------- | ------- |
| `gt-i18n` | `0.9.0` |
| `gt-node` | `0.7.0` |

## Настройка

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

```json title="dictionary.json"
{
  "greeting": {
    "hello": "Hello!"
  },
  "user": {
    "welcome": "Welcome, {name}!"
  },
  "errors": {
    "notFound": "Page not found",
    "unauthorized": "Access denied"
  }
}
```

Когда вы запускаете CLI ([`npx gt translate`](/docs/cli/reference/commands/translate)), он находит `dictionary.json` в корне проекта и переводит его для настроенных локалей.

Настройте среду выполнения Node.js с помощью [`initializeGT`](/docs/node/reference/functions/initialize-gt):

```ts
import { initializeGT } from 'gt-node';
import dictionary from './dictionary.json';

initializeGT({
  defaultLocale: 'en',
  locales: ['en', 'es'],
  dictionary,
});
```

<Accordions>
  <Accordion title="Использование собственных словарей">
    Если вы хотите загружать собственные заранее переведённые словари, передайте асинхронную опцию [`loadDictionary`](/docs/node/reference/config#load-dictionary) при инициализации `gt-node`. При этом словарь по умолчанию всё равно нужно указать явно — этот загрузчик предоставляет переведённые локали:

    ```ts
    import { initializeGT } from 'gt-node';
    import dictionary from './dictionary.json';

    initializeGT({
      defaultLocale: 'en',
      locales: ['en', 'es'],
      dictionary,
      loadDictionary: async (locale) => {
        const dict = await import(`./locales/${locale}.json`);
        return dict.default;
      },
    });
    ```

    Этот загрузчик предоставляет ваши переведённые словари вместо того, чтобы запрашивать сгенерированные.
  </Accordion>
</Accordions>

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

Имея приведённый выше исходный словарь, вызовите [`getTranslations()`](/docs/node/reference/functions/get-translations), чтобы получить функцию `t`, которая возвращает записи из вашего словаря:

```ts
import { getTranslations, withGT } from 'gt-node';

await withGT('en', async () => {
  const t = await getTranslations();

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

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

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

```ts
// Внутри приведённого выше callback withGT:
t('errors.notFound'); // "Страница не найдена"

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

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

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

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

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

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

## Ссылки

* [PR #1359](https://github.com/generaltranslation/gt/pull/1359)
* [Справочник API `getTranslations`](/docs/node/reference/functions/get-translations)
* [Руководство по словарям](/docs/react/guides/translating-with-dictionaries)

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
