Initial commit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
# Локализация / Localization
|
||||
|
||||
Эта папка содержит файлы локализации для интерфейса приложения.
|
||||
|
||||
## Как добавить новый язык
|
||||
|
||||
1. Создайте новый JSON-файл в этой папке с кодом языка в качестве имени файла, например: `de.json` для немецкого языка.
|
||||
|
||||
2. Скопируйте содержимое из `en.json` или `ru.json` в качестве шаблона.
|
||||
|
||||
3. Переведите все значения (правая часть после двоеточия) на ваш язык. **Не изменяйте ключи** (левая часть).
|
||||
|
||||
4. Обязательно укажите:
|
||||
- `lang_name` — название языка на этом языке (например, "Deutsch" для немецкого)
|
||||
- `lang_code` — код языка (должен совпадать с именем файла)
|
||||
|
||||
5. Сохраните файл в кодировке UTF-8.
|
||||
|
||||
6. Перезапустите приложение — новый язык автоматически появится в настройках!
|
||||
|
||||
## Структура файла локализации
|
||||
|
||||
```json
|
||||
{
|
||||
"lang_name": "Название языка",
|
||||
"lang_code": "код",
|
||||
"ключ": "Переведённое значение",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### Параметры в строках
|
||||
|
||||
Некоторые строки содержат параметры в фигурных скобках, например:
|
||||
- `{id}` — будет заменён на ID закладки
|
||||
- `{words}` — будет заменён на количество слов
|
||||
- `{error}` — будет заменён на текст ошибки
|
||||
|
||||
**Не удаляйте эти параметры** при переводе, просто переместите их в нужное место в предложении.
|
||||
|
||||
## Доступные языки
|
||||
|
||||
- `en.json` — English (Английский)
|
||||
- `ru.json` — Русский
|
||||
- `kz.json` — Қазақша (Казахский)
|
||||
|
||||
---
|
||||
|
||||
# Localization
|
||||
|
||||
This folder contains localization files for the application interface.
|
||||
|
||||
## How to add a new language
|
||||
|
||||
1. Create a new JSON file in this folder with the language code as the filename, e.g., `de.json` for German.
|
||||
|
||||
2. Copy the content from `en.json` or `ru.json` as a template.
|
||||
|
||||
3. Translate all values (right side after the colon) to your language. **Do not change the keys** (left side).
|
||||
|
||||
4. Make sure to specify:
|
||||
- `lang_name` — the name of the language in that language (e.g., "Deutsch" for German)
|
||||
- `lang_code` — language code (must match the filename)
|
||||
|
||||
5. Save the file in UTF-8 encoding.
|
||||
|
||||
6. Restart the application — the new language will automatically appear in settings!
|
||||
|
||||
## Localization file structure
|
||||
|
||||
```json
|
||||
{
|
||||
"lang_name": "Language name",
|
||||
"lang_code": "code",
|
||||
"key": "Translated value",
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
### Parameters in strings
|
||||
|
||||
Some strings contain parameters in curly braces, for example:
|
||||
- `{id}` — will be replaced with bookmark ID
|
||||
- `{words}` — will be replaced with word count
|
||||
- `{error}` — will be replaced with error text
|
||||
|
||||
**Do not remove these parameters** when translating, just move them to the appropriate place in the sentence.
|
||||
|
||||
## Available languages
|
||||
|
||||
- `en.json` — English
|
||||
- `ru.json` — Русский (Russian)
|
||||
- `kz.json` — Қазақша (Kazakh)
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"lang_name": "English",
|
||||
"lang_code": "en",
|
||||
"app_title": "Readeck Importer",
|
||||
"app_subtitle": "Import local articles to Readeck with translation",
|
||||
"settings": "Settings",
|
||||
"theme_light": "Light theme",
|
||||
"theme_dark": "Dark theme",
|
||||
|
||||
"section_upload": "Upload and Content",
|
||||
"section_metadata": "Metadata",
|
||||
"section_readeck": "Readeck Options",
|
||||
|
||||
"import_url": "Import from URL",
|
||||
"import_url_placeholder": "https://example.com/article",
|
||||
"import_url_button": "⬇️ Download",
|
||||
"import_url_loading": "Loading...",
|
||||
|
||||
"file_upload": "File (.txt, .html, .md)",
|
||||
|
||||
"content_format": "Content Format",
|
||||
"format_html": "HTML",
|
||||
"format_markdown": "Markdown",
|
||||
"format_text": "Text",
|
||||
|
||||
"content_label": "Content",
|
||||
"content_placeholder": "Upload a file, drag it here, paste text, or import from URL...",
|
||||
"content_stats": "chars · {words} words",
|
||||
|
||||
"translation": "Translation:",
|
||||
"translate_button": "🔄 Translate",
|
||||
"translating": "Translating...",
|
||||
|
||||
"preview_button": "👁️ Preview",
|
||||
"preview_title": "Preview",
|
||||
"preview_new_tab": "↗️ Open in new tab",
|
||||
"preview_close": "✕ Close",
|
||||
|
||||
"autofill_button": "✨ Autofill",
|
||||
"autofill_tooltip": "Fill from HTML meta tags",
|
||||
|
||||
"meta_title": "Title *",
|
||||
"meta_title_placeholder": "My article",
|
||||
"meta_authors": "Authors",
|
||||
"meta_authors_placeholder": "John Doe",
|
||||
"meta_date": "Date (ISO)",
|
||||
"meta_date_placeholder": "2023-10-01",
|
||||
"meta_description": "Description",
|
||||
"meta_description_placeholder": "Brief description...",
|
||||
"meta_site_name": "Site Name",
|
||||
"meta_site_name_placeholder": "Local Source",
|
||||
|
||||
"tags_label": "🏷️ Tags",
|
||||
"tags_placeholder": "tech, news, translated",
|
||||
|
||||
"favorite": "⭐ Add to Favorites",
|
||||
"archive": "📦 Archive",
|
||||
|
||||
"submit_button": "🚀 Create Bookmark",
|
||||
"submitting": "⏳ Sending to Readeck...",
|
||||
|
||||
"settings_title": "Settings",
|
||||
"settings_readeck_url": "🌐 Readeck URL",
|
||||
"settings_readeck_url_placeholder": "http://192.168.1.10:8000",
|
||||
"settings_token": "🔑 API Token",
|
||||
"settings_token_placeholder": "rdk_...",
|
||||
"settings_lan_ip": "📡 Your LAN IP",
|
||||
"settings_lan_ip_placeholder": "192.168.x.x",
|
||||
"settings_language": "🌍 Interface Language",
|
||||
"settings_test": "🔌 Test Connection",
|
||||
"settings_testing": "Testing...",
|
||||
"settings_cancel": "Cancel",
|
||||
"settings_save": "💾 Save",
|
||||
|
||||
"error_title_required": "Error: Title and Content are required!",
|
||||
"success_bookmark_created": "Success! Bookmark created (ID: {id})",
|
||||
"success_article_loaded": "✅ Article loaded and metadata filled",
|
||||
"error_loading": "Loading error:\\n{error}",
|
||||
"error_translation": "Translation error:\\n{error}",
|
||||
"error_settings_save": "Failed to save settings:\\n{error}",
|
||||
"error_network": "Network error while saving:\\n{error}",
|
||||
"error_file_read": "Failed to read file:\\n{error}",
|
||||
"error_metadata": "Failed to extract metadata:\\n{error}",
|
||||
"error_preview": "Failed to build preview:\\n{error}",
|
||||
"error_submit": "Error:\\n{error}",
|
||||
|
||||
"test_success": "✅ Connection successful",
|
||||
"test_error": "❌ {error}"
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"lang_name": "Қазақша",
|
||||
"lang_code": "kz",
|
||||
"app_title": "Readeck Importer",
|
||||
"app_subtitle": "Readeck-ке аудармамен жергілікті мақалаларды импорттау",
|
||||
"settings": "Баптаулар",
|
||||
"theme_light": "Ашық тақырып",
|
||||
"theme_dark": "Қараңғы тақырып",
|
||||
|
||||
"section_upload": "Жүктеу және Мазмұн",
|
||||
"section_metadata": "Метадеректер",
|
||||
"section_readeck": "Readeck опциялары",
|
||||
|
||||
"import_url": "Сілтеме бойынша импорттау",
|
||||
"import_url_placeholder": "https://example.com/article",
|
||||
"import_url_button": "⬇️ Жүктеу",
|
||||
"import_url_loading": "Жүктелуде...",
|
||||
|
||||
"file_upload": "Файл (.txt, .html, .md)",
|
||||
|
||||
"content_format": "Мазмұн форматы",
|
||||
"format_html": "HTML",
|
||||
"format_markdown": "Markdown",
|
||||
"format_text": "Мәтін",
|
||||
|
||||
"content_label": "Мазмұн",
|
||||
"content_placeholder": "Файлды жүктеңіз, мұнда апарыңыз, мәтінді қойыңыз немесе сілтеме бойынша импорттаңыз...",
|
||||
"content_stats": "таңба · {words} сөз",
|
||||
|
||||
"translation": "Аударма:",
|
||||
"translate_button": "🔄 Аудару",
|
||||
"translating": "Аударылуда...",
|
||||
|
||||
"preview_button": "👁️ Алдын ала қарау",
|
||||
"preview_title": "Алдын ала қарау",
|
||||
"preview_new_tab": "↗️ Жаңа қойындыда ашу",
|
||||
"preview_close": "✕ Жабу",
|
||||
|
||||
"autofill_button": "✨ Автотолтыру",
|
||||
"autofill_tooltip": "HTML мета тегтерінен толтыру",
|
||||
|
||||
"meta_title": "Тақырып *",
|
||||
"meta_title_placeholder": "Менің мақалам",
|
||||
"meta_authors": "Авторлар",
|
||||
"meta_authors_placeholder": "Иван Иванов",
|
||||
"meta_date": "Күні (ISO)",
|
||||
"meta_date_placeholder": "2023-10-01",
|
||||
"meta_description": "Сипаттама",
|
||||
"meta_description_placeholder": "Қысқаша сипаттама...",
|
||||
"meta_site_name": "Сайт атауы",
|
||||
"meta_site_name_placeholder": "Жергілікті көз",
|
||||
|
||||
"tags_label": "🏷️ Тегтер",
|
||||
"tags_placeholder": "tech, news, translated",
|
||||
|
||||
"favorite": "⭐ Таңдаулыларға қосу",
|
||||
"archive": "📦 Мұрағатқа",
|
||||
|
||||
"submit_button": "🚀 Бетбелгі жасау",
|
||||
"submitting": "⏳ Readeck-ке жіберілуде...",
|
||||
|
||||
"settings_title": "Баптаулар",
|
||||
"settings_readeck_url": "🌐 Readeck URL",
|
||||
"settings_readeck_url_placeholder": "http://192.168.1.10:8000",
|
||||
"settings_token": "🔑 API токені",
|
||||
"settings_token_placeholder": "rdk_...",
|
||||
"settings_lan_ip": "📡 Сіздің LAN IP",
|
||||
"settings_lan_ip_placeholder": "192.168.x.x",
|
||||
"settings_language": "🌍 Интерфейс тілі",
|
||||
"settings_test": "🔌 Қосылымды тексеру",
|
||||
"settings_testing": "Тексерілуде...",
|
||||
"settings_cancel": "Болдырмау",
|
||||
"settings_save": "💾 Сақтау",
|
||||
|
||||
"error_title_required": "Қате: Тақырып және Мазмұн міндетті!",
|
||||
"success_bookmark_created": "Сәтті! Бетбелгі жасалды (ID: {id})",
|
||||
"success_article_loaded": "✅ Мақала жүктелді және метадеректер толтырылды",
|
||||
"error_loading": "Жүктеу қатесі:\\n{error}",
|
||||
"error_translation": "Аударма қатесі:\\n{error}",
|
||||
"error_settings_save": "Баптауларды сақтау мүмкін болмады:\\n{error}",
|
||||
"error_network": "Сақтау кезінде желі қатесі:\\n{error}",
|
||||
"error_file_read": "Файлды оқу мүмкін болмады:\\n{error}",
|
||||
"error_metadata": "Метадеректерді алу мүмкін болмады:\\n{error}",
|
||||
"error_preview": "Алдын ала қарауды құру мүмкін болмады:\\n{error}",
|
||||
"error_submit": "Қате:\\n{error}",
|
||||
|
||||
"test_success": "✅ Қосылым сәтті",
|
||||
"test_error": "❌ {error}"
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"lang_name": "Русский",
|
||||
"lang_code": "ru",
|
||||
"app_title": "Readeck Importer",
|
||||
"app_subtitle": "Импорт локальных статей в Readeck с переводом",
|
||||
"settings": "Настройки",
|
||||
"theme_light": "Светлая тема",
|
||||
"theme_dark": "Тёмная тема",
|
||||
|
||||
"section_upload": "Загрузка и Контент",
|
||||
"section_metadata": "Метаданные",
|
||||
"section_readeck": "Опции Readeck",
|
||||
|
||||
"import_url": "Импорт по ссылке",
|
||||
"import_url_placeholder": "https://example.com/article",
|
||||
"import_url_button": "⬇️ Загрузить",
|
||||
"import_url_loading": "Загрузка...",
|
||||
|
||||
"file_upload": "Файл (.txt, .html, .md)",
|
||||
|
||||
"content_format": "Формат контента",
|
||||
"format_html": "HTML",
|
||||
"format_markdown": "Markdown",
|
||||
"format_text": "Текст",
|
||||
|
||||
"content_label": "Контент",
|
||||
"content_placeholder": "Загрузите файл, перетащите его сюда, вставьте текст или импортируйте по ссылке...",
|
||||
"content_stats": "симв. · {words} слов",
|
||||
|
||||
"translation": "Перевод:",
|
||||
"translate_button": "🔄 Перевести",
|
||||
"translating": "Перевод...",
|
||||
|
||||
"preview_button": "👁️ Предпросмотр",
|
||||
"preview_title": "Предпросмотр",
|
||||
"preview_new_tab": "↗️ В новой вкладке",
|
||||
"preview_close": "✕ Закрыть",
|
||||
|
||||
"autofill_button": "✨ Автозаполнить",
|
||||
"autofill_tooltip": "Заполнить из HTML-метатегов контента",
|
||||
|
||||
"meta_title": "Заголовок *",
|
||||
"meta_title_placeholder": "Моя статья",
|
||||
"meta_authors": "Авторы",
|
||||
"meta_authors_placeholder": "Иван Иванов",
|
||||
"meta_date": "Дата (ISO)",
|
||||
"meta_date_placeholder": "2023-10-01",
|
||||
"meta_description": "Описание",
|
||||
"meta_description_placeholder": "Краткое описание...",
|
||||
"meta_site_name": "Название сайта",
|
||||
"meta_site_name_placeholder": "Local Source",
|
||||
|
||||
"tags_label": "🏷️ Теги",
|
||||
"tags_placeholder": "tech, news, translated",
|
||||
|
||||
"favorite": "⭐ В Избранное",
|
||||
"archive": "📦 В Архив",
|
||||
|
||||
"submit_button": "🚀 Создать закладку",
|
||||
"submitting": "⏳ Отправка в Readeck...",
|
||||
|
||||
"settings_title": "Настройки",
|
||||
"settings_readeck_url": "🌐 Readeck URL",
|
||||
"settings_readeck_url_placeholder": "http://192.168.1.10:8000",
|
||||
"settings_token": "🔑 API Токен",
|
||||
"settings_token_placeholder": "rdk_...",
|
||||
"settings_lan_ip": "📡 Ваш LAN IP",
|
||||
"settings_lan_ip_placeholder": "192.168.x.x",
|
||||
"settings_language": "🌍 Язык интерфейса",
|
||||
"settings_test": "🔌 Проверить подключение",
|
||||
"settings_testing": "Проверка...",
|
||||
"settings_cancel": "Отмена",
|
||||
"settings_save": "💾 Сохранить",
|
||||
|
||||
"error_title_required": "Ошибка: Заголовок и Контент обязательны!",
|
||||
"success_bookmark_created": "Успешно! Закладка создана (ID: {id})",
|
||||
"success_article_loaded": "✅ Статья загружена и метаданные заполнены",
|
||||
"error_loading": "Ошибка загрузки:\\n{error}",
|
||||
"error_translation": "Ошибка перевода:\\n{error}",
|
||||
"error_settings_save": "Не удалось сохранить настройки:\\n{error}",
|
||||
"error_network": "Сетевая ошибка при сохранении:\\n{error}",
|
||||
"error_file_read": "Не удалось прочитать файл:\\n{error}",
|
||||
"error_metadata": "Не удалось извлечь метаданные:\\n{error}",
|
||||
"error_preview": "Не удалось построить предпросмотр:\\n{error}",
|
||||
"error_submit": "Ошибка:\\n{error}",
|
||||
|
||||
"test_success": "✅ Подключение успешно",
|
||||
"test_error": "❌ {error}"
|
||||
}
|
||||
Reference in New Issue
Block a user