import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/# Перевод'/>

# Перевод

Класс `Translate` — это централизованная система для работы с мультиязычным контентом. Он поддерживает автоматическую подгрузку недостающих ключей через API, кэширование, вставку переменных и многоуровневую систему запасных вариантов (fallback).

```javascript
import { Translate } from '@dxtmisha/functional-basic'

// 1. Настройка API (по умолчанию /api/translate)
Translate.setUrl('/api/v1/dictionary')

// 2. Получение перевода (Async)
// Если ключа нет в кэше, он будет автоматически запрошен у сервера
const text = await Translate.get('welcome_message', { name: 'Admin' })

// 3. Синхронное получение (из кэша)
const label = Translate.getSync('save_button')
```

## Шаблонизация

Класс поддерживает гибкую систему вставок через функцию `applyTemplate`. Вы можете использовать именованные ключи, позиционные метки или функциональные обертки.

### Ключи и метки
Поддерживаются фигурные `{}` и квадратные `[]` скобки для имен, а также `%` с буквами для порядковых аргументов.

```javascript
// 1. Именованные ключи (объект)
// Текст: "Привет, {name}!"
await Translate.get('hi', { name: 'Алексей' }) // Привет, Алексей!

// 2. Позиционные метки (массив)
// Текст: "Файл %d из %e"
Translate.getSync('status', false, ['1', '10']) // Файл 1 из 10
// %d — 1-й элемент, %e — 2-й, %f — 3-й и т.д.
```

### Обертки (Taging)
Позволяют упаковывать текст в HTML-теги или дополнительные компоненты. Текст внутри тега попадает в переменную `{content}`.

```javascript
// Текст: "{link}Читать далее{/link} в источнике."
const replacement = { 
  link: '<a href="/news">{content}</a>' 
}
Translate.getSync('more', false, replacement)
// <a href="/news">Читать далее</a> в источнике.
```

## Управление данными

Вы можете вручную добавлять переводы в реестр, что полезно для статических констант или при инициализации из локальных файлов.

```javascript
// Добавление списка переводов
Translate.addSync({
  'ru-button_ok': 'Ок',
  'ru-button_cancel': 'Отмена'
})

// Групповая предзагрузка ключей с сервера
await Translate.add(['title', 'description', 'footer_text'])
```

## Иерархия поиска

При поиске перевода система следует строгому порядку:
1. Текущая локаль (например, `ru-RU-key`)
2. Текущий язык (`ru-key`)
3. Глобальный префикс (`global-key`)
