Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+106
@@ -0,0 +1,106 @@
|
||||
# Сводка изменений: Система локализации
|
||||
|
||||
## ✅ Выполнено
|
||||
|
||||
### 1. Создана структура локализации
|
||||
```
|
||||
lang/
|
||||
├── README.md # Инструкция по добавлению языков
|
||||
├── en.json # Английский язык
|
||||
├── ru.json # Русский язык
|
||||
└── kz.json # Казахский язык (пример)
|
||||
```
|
||||
|
||||
### 2. Модифицирован бэкенд (main.py)
|
||||
- ✅ Добавлена константа `LANG_DIR` для папки локализаций
|
||||
- ✅ Функция `get_available_languages()` — сканирует папку lang
|
||||
- ✅ Функция `load_language(lang_code)` — загружает JSON локализации
|
||||
- ✅ API эндпоинт `GET /api/languages` — список доступных языков
|
||||
- ✅ API эндпоинт `GET /api/language/{lang_code}` — получение переводов
|
||||
- ✅ Поле `language` добавлено в `config.json` и `SettingsModel`
|
||||
|
||||
### 3. Модифицирован фронтенд (Vue 3)
|
||||
- ✅ Реактивная система локализации с функцией `t(key, params)`
|
||||
- ✅ Автоматическая загрузка языка при старте приложения
|
||||
- ✅ Селектор языка в настройках
|
||||
- ✅ Мгновенная смена языка без перезагрузки страницы
|
||||
- ✅ Все текстовые строки заменены на вызовы `t()`
|
||||
- ✅ Поддержка параметров в строках: `{id}`, `{words}`, `{error}`
|
||||
|
||||
### 4. Документация
|
||||
- ✅ `lang/README.md` — инструкция по добавлению языков
|
||||
- ✅ `LOCALIZATION.md` — техническая документация
|
||||
- ✅ Обновлён основной `README.md`
|
||||
|
||||
## 🎯 Как это работает
|
||||
|
||||
### Добавление нового языка
|
||||
1. Создайте файл `lang/код.json` (например, `de.json` для немецкого)
|
||||
2. Скопируйте содержимое из `en.json` или `ru.json`
|
||||
3. Переведите значения (не меняя ключи)
|
||||
4. Перезапустите приложение
|
||||
5. **Готово!** Язык автоматически появится в настройках
|
||||
|
||||
### Смена языка пользователем
|
||||
1. Открыть настройки (⚙️)
|
||||
2. Выбрать язык в выпадающем списке "🌍 Язык интерфейса"
|
||||
3. Интерфейс мгновенно переключится
|
||||
4. Сохранить настройки
|
||||
|
||||
## 📊 Статистика
|
||||
|
||||
- **Строк кода в main.py:** 1375 (было ~1246)
|
||||
- **Файлов локализации:** 3 (en, ru, kz)
|
||||
- **Локализованных строк:** ~50 ключей
|
||||
- **API эндпоинтов:** +2 новых
|
||||
|
||||
## 🌍 Доступные языки
|
||||
|
||||
- 🇬🇧 **English** (`en.json`)
|
||||
- 🇷🇺 **Русский** (`ru.json`)
|
||||
- 🇰🇿 **Қазақша** (`kz.json`) — пример для демонстрации
|
||||
|
||||
## 🔧 Технические особенности
|
||||
|
||||
- **Динамическое обнаружение:** Новые языки обнаруживаются автоматически
|
||||
- **Горячая замена:** Язык меняется без перезагрузки страницы
|
||||
- **Параметризация:** Поддержка подстановки значений в строки
|
||||
- **Fallback:** Если перевод не найден, показывается ключ
|
||||
- **UTF-8:** Полная поддержка Unicode для всех языков
|
||||
- **Реактивность:** Vue 3 автоматически обновляет интерфейс
|
||||
|
||||
## 🎨 Пример использования в коде
|
||||
|
||||
### Простая строка
|
||||
```javascript
|
||||
{{ t('app_title') }} // → "Readeck Importer"
|
||||
```
|
||||
|
||||
### Строка с параметрами
|
||||
```javascript
|
||||
{{ t('content_stats', { words: wordCount }) }} // → "симв. · 42 слов"
|
||||
t('success_bookmark_created', { id: '123' }) // → "Успешно! Закладка создана (ID: 123)"
|
||||
```
|
||||
|
||||
## 📝 Структура файла локализации
|
||||
|
||||
```json
|
||||
{
|
||||
"lang_name": "Название языка на этом языке",
|
||||
"lang_code": "код_языка",
|
||||
"ключ": "Переведённое значение",
|
||||
"ключ_с_параметром": "Текст с {параметром}"
|
||||
}
|
||||
```
|
||||
|
||||
## ✨ Преимущества реализации
|
||||
|
||||
1. **Простота** — добавить язык = создать один JSON файл
|
||||
2. **Автоматизация** — не нужно менять код для добавления языка
|
||||
3. **Масштабируемость** — можно добавить неограниченное количество языков
|
||||
4. **UX** — мгновенная смена языка без перезагрузки
|
||||
5. **Поддержка** — легко обновлять и исправлять переводы
|
||||
|
||||
---
|
||||
|
||||
**Система готова к использованию!** 🚀
|
||||
Reference in New Issue
Block a user