mass refactor
This commit is contained in:
160
docs/LOCALIZATION.md
Normal file
160
docs/LOCALIZATION.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# Система локализации Telegram Tinder Bot
|
||||
|
||||
## Обзор
|
||||
|
||||
Система локализации обеспечивает многоязычную поддержку бота с использованием i18next для интерфейса и DeepSeek AI для перевода анкет пользователей.
|
||||
|
||||
## Архитектура
|
||||
|
||||
### Компоненты системы
|
||||
|
||||
1. **LocalizationService** - основной сервис локализации интерфейса
|
||||
2. **DeepSeekTranslationService** - сервис для перевода анкет с помощью AI
|
||||
3. **TranslationController** - контроллер для управления переводами
|
||||
4. **Файлы переводов** - JSON файлы с переводами для каждого языка
|
||||
|
||||
### Поддерживаемые языки
|
||||
|
||||
- 🇷🇺 Русский (ru) - по умолчанию
|
||||
- 🇺🇸 Английский (en)
|
||||
- 🇪🇸 Испанский (es)
|
||||
- 🇫🇷 Французский (fr)
|
||||
- 🇩🇪 Немецкий (de)
|
||||
- 🇮🇹 Итальянский (it)
|
||||
- 🇵🇹 Португальский (pt)
|
||||
- 🇨🇳 Китайский (zh)
|
||||
- 🇯🇵 Японский (ja)
|
||||
- 🇰🇷 Корейский (ko)
|
||||
|
||||
## Использование
|
||||
|
||||
### Локализация интерфейса
|
||||
|
||||
```typescript
|
||||
import { t } from '../services/localizationService';
|
||||
|
||||
// Простой перевод
|
||||
const message = t('welcome.greeting');
|
||||
|
||||
// Перевод с параметрами
|
||||
const message = t('profile.ageRange', { min: 18, max: 65 });
|
||||
|
||||
// Установка языка пользователя
|
||||
localizationService.setLanguage('en');
|
||||
```
|
||||
|
||||
### Структура файлов переводов
|
||||
|
||||
```json
|
||||
{
|
||||
"welcome": {
|
||||
"greeting": "Добро пожаловать в Telegram Tinder Bot! 💕",
|
||||
"description": "Найди свою вторую половинку прямо здесь!"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Имя",
|
||||
"age": "Возраст",
|
||||
"bio": "О себе"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Перевод анкет (Premium функция)
|
||||
|
||||
```typescript
|
||||
import DeepSeekTranslationService from '../services/deepSeekTranslationService';
|
||||
|
||||
const translationService = DeepSeekTranslationService.getInstance();
|
||||
|
||||
// Перевод текста анкеты
|
||||
const result = await translationService.translateProfile({
|
||||
text: "Привет! Я люблю путешествовать и читать книги.",
|
||||
targetLanguage: 'en',
|
||||
sourceLanguage: 'ru'
|
||||
});
|
||||
```
|
||||
|
||||
## Настройка
|
||||
|
||||
### Переменные окружения
|
||||
|
||||
```env
|
||||
# DeepSeek API для перевода анкет
|
||||
DEEPSEEK_API_KEY=your_deepseek_api_key_here
|
||||
```
|
||||
|
||||
### База данных
|
||||
|
||||
Таблица `users` содержит поле `language` для хранения предпочитаемого языка пользователя:
|
||||
|
||||
```sql
|
||||
ALTER TABLE users
|
||||
ADD COLUMN language VARCHAR(5) DEFAULT 'ru';
|
||||
```
|
||||
|
||||
## Функции
|
||||
|
||||
### Автоматическое определение языка
|
||||
|
||||
- При регистрации пользователя язык определяется по `language_code` из Telegram
|
||||
- Пользователь может изменить язык в настройках
|
||||
- Поддерживается определение языка текста для перевода
|
||||
|
||||
### Премиум функции перевода
|
||||
|
||||
- **Перевод анкет** - доступен только для премиум пользователей
|
||||
- **AI-перевод** - используется DeepSeek API для качественного перевода
|
||||
- **Контекстный перевод** - сохраняется тон и стиль исходного текста
|
||||
|
||||
### Клавиатуры и меню
|
||||
|
||||
Все кнопки и меню автоматически локализуются на основе языка пользователя:
|
||||
|
||||
```typescript
|
||||
// Пример создания локализованной клавиатуры
|
||||
public getLanguageSelectionKeyboard() {
|
||||
return {
|
||||
inline_keyboard: [
|
||||
[
|
||||
{ text: '🇷🇺 Русский', callback_data: 'set_language_ru' },
|
||||
{ text: '🇺🇸 English', callback_data: 'set_language_en' }
|
||||
]
|
||||
]
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Расширение
|
||||
|
||||
### Добавление нового языка
|
||||
|
||||
1. Создать файл перевода `src/locales/{language_code}.json`
|
||||
2. Добавить язык в массив поддерживаемых языков в `LocalizationService`
|
||||
3. Обновить ограничение в базе данных
|
||||
4. Добавить кнопку в меню выбора языка
|
||||
|
||||
### Добавление новых переводов
|
||||
|
||||
1. Добавить ключи в основной файл перевода (`ru.json`)
|
||||
2. Перевести на все поддерживаемые языки
|
||||
3. Использовать в коде через функцию `t()`
|
||||
|
||||
## Безопасность
|
||||
|
||||
- API ключ DeepSeek хранится в переменных окружения
|
||||
- Проверка премиум статуса перед доступом к переводу
|
||||
- Ограничение по количеству запросов к API
|
||||
- Таймауты для предотвращения зависания
|
||||
|
||||
## Мониторинг
|
||||
|
||||
- Логирование ошибок перевода
|
||||
- Отслеживание использования API
|
||||
- Статистика по языкам пользователей
|
||||
|
||||
## Производительность
|
||||
|
||||
- Кэширование переводов интерфейса
|
||||
- Ленивая загрузка файлов переводов
|
||||
- Асинхронная обработка запросов к DeepSeek API
|
||||
- Индексы в базе данных для быстрого поиска по языку
|
||||
Reference in New Issue
Block a user