# Vue: createGT
URL: https://generaltranslation.com/ru/docs/vue/reference/functions/create-gt.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Создаёт изолированный плагин перевода для Vue с реактивным состоянием локали и кэшем каталогов. Справочник API createGT.

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

## Обзор [#overview]

```ts
function createGT(options?: CreateGTOptions): GTPlugin;
```

[`createGT()`](#overview) сразу возвращает результат. Установите плагин с помощью `app.use()` или перед рендерингом предварительно загрузите локаль через возвращаемый [`GTPlugin`](/docs/vue/reference/types/gt-plugin).

```ts
import { createApp } from 'vue';
import { createGT } from 'gt-vue';
import App from './App.vue';

const gt = createGT({
  defaultLocale: 'en',
  loadTranslations: async (locale) =>
    (await import(`./_gt/${locale}.json`)).default,
});

createApp(App).use(gt).mount('#app');
```

## Параметры [#parameters]

| Параметр  | Описание                                                           | Тип                                                              | Необязательный | По умолчанию |
| --------- | ------------------------------------------------------------------ | ---------------------------------------------------------------- | -------------- | ------------ |
| `options` | Конфигурация начальной локали, cookie-файла и загрузчика каталога. | [`CreateGTOptions`](/docs/vue/reference/types/create-gt-options) | Да             | `{}`         |

Объект `options` поддерживает следующие поля:

| Параметр           | Описание                                                                    | Тип                                                                   | Необязательный | По умолчанию                       |
| ------------------ | --------------------------------------------------------------------------- | --------------------------------------------------------------------- | -------------- | ---------------------------------- |
| `customMapping`    | Алиасы локалей для форматирования и выбора формы множественного числа.      | [`CustomMapping`](/docs/platform/core/reference/types/custom-mapping) | Да             | Нет                                |
| `defaultLocale`    | Исходная и резервная локаль.                                                | `string`                                                              | Да             | `en`                               |
| `loadTranslations` | Асинхронный загрузчик целевого каталога.                                    | [`LoadTranslations`](/docs/vue/reference/types/load-translations)     | Да             | Пустой каталог                     |
| `locale`           | Явно заданная начальная локаль. Имеет приоритет над cookie-файлом браузера. | `string`                                                              | Да             | Cookie-файл, затем `defaultLocale` |
| `localeCookieName` | Cookie-файл браузера для сохранения локали.                                 | `string`                                                              | Да             | `generaltranslation.locale`        |

Локаль по умолчанию всегда отображает исходный контент, поэтому её загрузчик никогда не вызывается. В отличие от [`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa), [`createGT()`](#overview) не принимает список разрешённых локалей `locales`; вызывающий код и загрузчик определяют, какие ключи каталога доступны. Параметр `customMapping` влияет на зависящее от локали форматирование и выбор формы множественного числа, не изменяя ключи каталога или cookie-файла.

## Возвращаемое значение [#returns]

**Тип** [`GTPlugin`](/docs/vue/reference/types/gt-plugin)

Возвращаемый плагин предоставляет методы `install()`, `getLocale()`, `loadTranslations()` и `setLocale()`. Установите тот же экземпляр плагина, императивные методы которого используете.

Этот плагин не связан с глобальным состоянием браузера, используемым [`t()`](/docs/vue/reference/functions/t). Клиентское приложение, которому нужны переводы на уровне модуля, должно вместо этого установить именно плагин, возвращаемый [`initializeGTSPA()`](/docs/vue/reference/functions/initialize-gt-spa).

## Как это работает [#how-it-works]

* **Начальная локаль:** явно заданная `locale` имеет приоритет над cookie-файлом браузера, который, в свою очередь, имеет приоритет над `defaultLocale`. На сервере cookie-файл браузера отсутствует. В браузере явно заданная локаль также записывается в cookie-файл для согласованности при гидратации.
* **Начальная загрузка:** `app.use(gt)` начинает загружать активную целевую локаль, не блокируя монтирование. Пока каталог не загрузится, отображается исходный контент; затем компоненты, выполнившие lookup, перерисовываются.
* **Кэширование:** успешно загруженные каталоги кэшируются на время жизни плагина. Параллельные запросы одной и той же локали используют один promise. Локаль по умолчанию представлена исходным текстом и уже кэшируется как пустой каталог.
* **Изменение локали:** `setLocale(locale)` загружает отсутствующий в кэше каталог, прежде чем обновить cookie-файл и реактивные компоненты. Если запросы локали перекрываются, активную локаль изменяет только последний запрос; успешно загруженные ранее каталоги остаются в кэше.
* **Внешние изменения cookie-файла:** `getLocale()` считывает текущий cookie-файл браузера. Браузеры не генерируют реактивное событие изменения cookie-файла, поэтому прямое изменение `document.cookie` не запускает рендеринг; вызовите сеттер плагина или [`useSetLocale()`](/docs/vue/reference/composables/use-set-locale).

Если загрузчик отклоняет запрос, плагин записывает диагностическое сообщение `gt-vue`, повторно выбрасывает ошибку и не кэширует сбой. При отклонении `setLocale()` сохраняются предыдущие локаль и cookie-файл. Фоновая загрузка, запущенная `install()`, записывает сбой в журнал, но перехватывает отклонение, чтобы приложение могло продолжать отображать исходный контент.

## Рендеринг на сервере [#server-rendering]

Для каждого запроса создавайте новый плагин и явно передавайте локаль запроса. Перед рендерингом дождитесь завершения `loadTranslations(locale)` или `setLocale(locale)`:

```ts title="src/gt-server.ts"
import { createGT } from 'gt-vue';
import loadTranslations from './loadTranslations';

export async function createRequestGT(locale: string) {
  const gt = createGT({
    defaultLocale: 'en',
    locale,
    loadTranslations,
  });

  await gt.loadTranslations(locale);
  return gt;
}
```

Не используйте этот плагин совместно для нескольких запросов. Его кэш локали и каталог принадлежат одному экземпляру приложения. Перед гидратацией создайте и предварительно загрузите клиентский плагин с той же явно указанной локалью; гидратация с незагруженным каталогом может отобразить исходный контент и вызвать несоответствие.

## Пример [#example]

Используйте методы, возвращаемые плагином, вне компонента, если основное приложение управляет сменой локали:

```ts
const gt = createGT({ defaultLocale: 'en', loadTranslations });

await gt.loadTranslations('fr'); // предзагрузка без смены локали
await gt.setLocale('fr'); // использует кэшированный каталог и перерендеривает компоненты

console.log(gt.getLocale()); // "fr"
```

## Sitemap

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