# ctx.t()

Вспомогательная функция i18n в RunJS, используемая для перевода текста на основе языковых настроек текущего контекста. Подходит для интернационализации встроенных текстов, таких как кнопки, заголовки и подсказки.

## Сценарии использования

`ctx.t()` можно использовать во всех средах выполнения RunJS.

## Определение типа

```ts
t(key: string, options?: Record<string, any>): string
```

## Параметры

| Параметр | Тип | Описание |
|----------|------|-------------|
| `key` | `string` | Ключ перевода или шаблон с плейсхолдерами (например, `Hello {{name}}`, `{{count}} rows`). |
| `options` | `object` | Необязательно. Переменные интерполяции (например, `{ name: 'Иван', count: 5 }`) или опции i18n (например, `defaultValue`, `ns`). |

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

- Возвращает переведенную строку. Если перевод для ключа отсутствует и не указано значение `defaultValue`, может быть возвращен сам ключ или строка с подставленными значениями.

## Пространство имен (ns)

Пространством имен по умолчанию для среды RunJS является **`runjs`**. Если `ns` не указано, `ctx.t(key)` будет искать ключ в пространстве имен `runjs`.

```ts
// По умолчанию ищет ключ в пространстве имен 'runjs'
ctx.t('Submit'); // Эквивалентно ctx.t('Submit', { ns: 'runjs' })

// Поиск ключа в конкретном пространстве имен
ctx.t('Submit', { ns: 'myModule' });

// Последовательный поиск в нескольких пространствах имен (сначала 'runjs', затем 'common')
ctx.t('Save', { ns: ['runjs', 'common'] });
```

## Примеры

### Простой ключ

```ts
ctx.t('Submit');
ctx.t('No data');
```

### С переменными интерполяции

```ts
const text = ctx.t('Hello {{name}}', { name: ctx.user?.nickname || 'Guest' });
ctx.render(`<div>${text}</div>`);
```

```ts
ctx.message.success(ctx.t('Processed {{count}} rows', { count: rows.length }));
```

### Динамический текст (например, относительное время)

```ts
if (minutes < 60) return ctx.t('{{count}} minutes ago', { count: minutes });
if (hours < 24) return ctx.t('{{count}} hours ago', { count: hours });
```

### Указание пространства имен

```ts
ctx.t('Hello {{name}}', { name: 'Guest', ns: 'myModule' });
```

## Примечания

- **Плагин локализации**: Чтобы переводить текст, необходимо активировать плагин локализации. Отсутствующие ключи перевода будут автоматически извлечены в список управления локализацией для централизованного обслуживания и перевода.
- Поддержка интерполяции в стиле i18next: используйте `{{variableName}}` в ключе и передайте соответствующую переменную в `options` для замены.
- Язык определяется текущим контекстом (например, `ctx.i18n.language`, локаль пользователя).

## Связанные разделы

- [ctx.i18n](./i18n.md): чтение или переключение языка