e1b2485156
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
89 lines
4.9 KiB
Markdown
89 lines
4.9 KiB
Markdown
# Обновление: Добавлена система локализации
|
||
|
||
## Что изменилось
|
||
|
||
### 1. Создана папка `lang` с файлами локализации
|
||
- `en.json` — английский язык
|
||
- `ru.json` — русский язык
|
||
- `kz.json` — казахский язык (пример)
|
||
- `README.md` — инструкция по добавлению новых языков
|
||
|
||
### 2. Изменения в `main.py`
|
||
|
||
#### Бэкенд:
|
||
- Добавлена константа `LANG_DIR` для папки с локализациями
|
||
- Добавлена функция `get_available_languages()` — сканирует папку lang и возвращает список доступных языков
|
||
- Добавлена функция `load_language(lang_code)` — загружает файл локализации
|
||
- Добавлен эндпоинт `GET /api/languages` — возвращает список доступных языков
|
||
- Добавлен эндпоинт `GET /api/language/{lang_code}` — возвращает строки локализации для языка
|
||
- В `config.json` добавлено поле `language` (по умолчанию "ru")
|
||
- Обновлена модель `SettingsModel` с полем `language`
|
||
|
||
#### Фронтенд:
|
||
- Добавлены реактивные переменные:
|
||
- `availableLanguages` — список доступных языков
|
||
- `translations` — текущие строки локализации
|
||
- `currentLang` — текущий выбранный язык
|
||
- Добавлена функция `t(key, params)` — возвращает локализованную строку с подстановкой параметров
|
||
- Добавлена функция `loadLanguage(langCode)` — загружает локализацию
|
||
- Добавлена функция `changeLanguage(langCode)` — меняет язык интерфейса
|
||
- Все текстовые строки в интерфейсе заменены на вызовы `t('ключ')`
|
||
- В настройках добавлен селектор языка интерфейса
|
||
- При загрузке приложения автоматически загружается язык из настроек
|
||
|
||
### 3. Изменения в `config.json`
|
||
Теперь файл содержит дополнительное поле:
|
||
```json
|
||
{
|
||
"readeck_url": "...",
|
||
"readeck_token": "...",
|
||
"public_host": "...",
|
||
"language": "ru"
|
||
}
|
||
```
|
||
|
||
## Как использовать
|
||
|
||
### Смена языка интерфейса
|
||
1. Откройте настройки (кнопка ⚙️)
|
||
2. Выберите язык в выпадающем списке "🌍 Язык интерфейса"
|
||
3. Интерфейс сразу переключится на выбранный язык
|
||
4. Нажмите "Сохранить" чтобы сохранить выбор
|
||
|
||
### Добавление нового языка
|
||
1. Создайте файл `lang/код_языка.json` (например, `de.json` для немецкого)
|
||
2. Скопируйте структуру из `en.json` или `ru.json`
|
||
3. Переведите все значения (не меняя ключи)
|
||
4. Укажите `lang_name` и `lang_code`
|
||
5. Перезапустите приложение
|
||
6. Новый язык автоматически появится в настройках!
|
||
|
||
## Пример файла локализации
|
||
|
||
```json
|
||
{
|
||
"lang_name": "Deutsch",
|
||
"lang_code": "de",
|
||
"app_title": "Readeck Importer",
|
||
"app_subtitle": "Lokale Artikel mit Übersetzung in Readeck importieren",
|
||
"settings": "Einstellungen",
|
||
...
|
||
}
|
||
```
|
||
|
||
## Технические детали
|
||
|
||
- Локализация загружается асинхронно при старте приложения
|
||
- Язык сохраняется в `config.json` и восстанавливается при следующем запуске
|
||
- Система поддерживает параметры в строках: `{id}`, `{words}`, `{error}` и т.д.
|
||
- Если файл локализации не найден, используются ключи как fallback
|
||
- Все файлы должны быть в кодировке UTF-8
|
||
|
||
## Преимущества реализации
|
||
|
||
✅ **Простота добавления языков** — просто положите JSON-файл в папку `lang`
|
||
✅ **Автоматическое обнаружение** — новые языки появляются в интерфейсе без изменения кода
|
||
✅ **Горячая замена** — язык меняется мгновенно без перезагрузки страницы
|
||
✅ **Расширяемость** — легко добавить любое количество языков
|
||
✅ **Централизация** — все переводы в одном месте
|