1 line
42 KiB
JSON
1 line
42 KiB
JSON
{"repo": "andrewthemaster/flashcardsapp", "files": {"lib/localization/app_localizations.dart": {"1cc1ab43410bceb341c7a289a6c6bc195ee8535b": {"t": 1785745917.0336866, "n": 10625, "h": "d8d20548dd6ab0dd", "c": "import 'package:flutter/material.dart';\nimport '../models/settings_model.dart';\n\nclass AppLocalizations {\n final AppLanguage language;\n\n AppLocalizations(this.language);\n\n static AppLocalizations of(BuildContext context) {\n return Localizations.of<AppLocalizations>(context, AppLocalizations) ??\n AppLocalizations(AppLanguage.english);\n }\n\n static Map<String, Map<String, String>> _localizedValues = {\n 'en': {\n 'app_title': 'Flashcards',\n 'welcome_message': 'Welcome to Flashcards App',\n 'create_new_pack': 'Create New Pack',\n 'enter_pack_name': 'Enter pack name',\n 'enter_characters': 'Enter characters (one per line)',\n 'cancel': 'Cancel',\n 'create': 'Create',\n 'cards_to_review': 'Card to review',\n 'no_cards_in_pack': 'No cards in this pack',\n 'again_button': 'Again',\n 'good_button': 'Good',\n 'new_pack': 'New Pack',\n 'next_card': 'Next Card',\n 'settings': 'Settings',\n 'theme': 'Theme',\n 'language': 'Language',\n 'light_mode': 'Light Mode',\n 'dark_mode': 'Dark Mode',\n 'system_mode': 'System Mode',\n 'english': 'English',\n 'russian': 'Russian',\n 'fill_blanks': 'Fill in the Blanks',\n 'no_cards_available': 'No cards available',\n 'correct_answer': 'Correct answer',\n 'check': 'Check',\n 'next': 'Next',\n 'flashcards': 'Flashcards',\n 'edit_cards': 'Edit Cards',\n 'memory_game': 'Memory Game',\n 'victory': 'Victory!',\n 'found_all_pairs': 'You found all pairs!',\n 'play_again': 'Play Again',\n 'find_matching_pairs': 'Find matching pairs',\n 'edit_flashcard': 'Edit Flashcard',\n 'hanzi': 'Character',\n 'pinyin': 'Pinyin',\n 'translation': 'Translation',\n 'save': 'Save',\n 'suggested_translation': 'Suggested translation:',\n 'translation_error': 'Translation error',\n 'required_fields_error': 'Please fill in all required fields',\n 'exercises': 'Exercises',\n 'translation_service': 'Translation Service',\n 'exercise_service': 'Exercise Generation Service',\n 'server_settings': 'Server Settings',\n 'bkrs_parser': 'BKRS Parser',\n 'bkrs_parser_desc': 'Parse translations from BKRS dictionary website',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Use local BERT-based server for translations',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Use local BERT model for generating exercises',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Use DeepSeek API for generating exercises',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Use server translation with Helsinki-NLP models',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Use server generation with subsequent validation',\n 'offline_mode': 'Offline Mode',\n 'offline_mode_desc': 'Use local resources only, no server connection',\n 'server_address': 'Server Address',\n 'test_connection': 'Test Connection',\n 'checking_server': 'Checking server connection...',\n 'server_connected': 'Server connected successfully',\n 'server_error': 'Server connection error',\n 'api_keys': 'API Keys',\n 'deepseek_api_key': 'DeepSeek API Key',\n 'deepseek_api_key_desc': 'Required for DeepSeek API exercises generation',\n 'exercise_complexity': 'Exercise Complexity',\n 'simple_complexity': 'Simple',\n 'simple_complexity_desc': 'Easier exercises with fewer options',\n 'normal_complexity': 'Normal',\n 'normal_complexity_desc': 'Balanced difficulty for regular practice',\n 'complex_complexity': 'Complex',\n 'complex_complexity_desc': 'More challenging exercises with additional options',\n 'tech': 'Technical',\n 'food': 'Food',\n 'everyday': 'Everyday',\n 'professions': 'Professions',\n 'general': 'General',\n 'found_in_dictionary': 'Found in local dictionary',\n 'no_reverse_translation': 'No translation found',\n 'reverse_translation_error': 'Translation error',\n 'reverse_translation_success': 'Translation found',\n 'Type translation to find Chinese': 'Type translation to find Chinese',\n 'srs_quiz': 'SRS Quiz',\n 'character_first': 'Character',\n 'translation_first': 'Translation',\n 'type_translation': 'Type translation',\n 'type_character': 'Type character',\n 'correct': 'Correct!',\n 'incorrect': 'Incorrect',\n 'clear_cache': 'Clear Cache',\n 'cache_cleared': 'Exercise cache cleared successfully',\n 'cache_clear_error': 'Error clearing cache',\n 'testing_connection': 'Testing connection...',\n 'connection_successful': 'Connection successful',\n 'connection_failed': 'Connection failed',\n 'connection_error': 'Connection error',\n 'server_modules': 'Server modules',\n 'translator': 'Translator',\n 'validator': 'Validator',\n 'available_models': 'Available models',\n 'debug_mode': 'Debug Mode',\n 'debug_mode_desc': 'Hide answer blocks and validation data for exercises',\n },\n 'ru': {\n 'app_title': 'Карточки',\n 'welcome_message': 'Добро пожаловать в приложение Карточки',\n 'create_new_pack': 'Создать новый набор',\n 'enter_pack_name': 'Введите название набора',\n 'enter_characters': 'Введите символы (по одному в строке)',\n 'cancel': 'Отмена',\n 'create': 'Создать',\n 'cards_to_review': 'Карточка для повторения',\n 'no_cards_in_pack': 'В этом наборе нет карточек',\n 'again_button': 'Снова',\n 'good_button': 'Хорошо',\n 'new_pack': 'Новый набор',\n 'next_card': 'Следующая карточка',\n 'settings': 'Настройки',\n 'theme': 'Тема',\n 'language': 'Язык',\n 'light_mode': 'Светлая тема',\n 'dark_mode': 'Тёмная тема',\n 'system_mode': 'Системная тема',\n 'english': 'Английский',\n 'russian': 'Русский',\n 'fill_blanks': 'Заполните пропуски',\n 'no_cards_available': 'Нет доступных карточек',\n 'correct_answer': 'Правильный ответ',\n 'check': 'Проверить',\n 'next': 'Далее',\n 'flashcards': 'Карточки',\n 'edit_cards': 'Редактировать карточки',\n 'memory_game': 'Игра на память',\n 'victory': 'Победа!',\n 'found_all_pairs': 'Вы нашли все пары!',\n 'play_again': 'Играть снова',\n 'find_matching_pairs': 'Найдите соответствующие пары',\n 'edit_flashcard': 'Редактировать карточку',\n 'hanzi': 'Символ',\n 'pinyin': 'Пиньинь',\n 'translation': 'Перевод',\n 'save': 'Сохранить',\n 'suggested_translation': 'Предлагаемый перевод:',\n 'translation_error': 'Ошибка перевода',\n 'required_fields_error': 'Пожалуйста, заполните все обязательные поля',\n 'exercises': 'Упражнения',\n 'translation_service': 'Сервис перевода',\n 'exercise_service': 'Сервис генерации упражнений',\n 'server_settings': 'Настройки сервера',\n 'bkrs_parser': 'Парсинг БКРС',\n 'bkrs_parser_desc': 'Получать переводы с сайта словаря БКРС',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Использовать локальный сервер на базе BERT для переводов',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Использовать локальную модель BERT для создания упражнений',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Использовать API DeepSeek для создания упражнений',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Использовать серверный перевод с моделями Helsinki-NLP',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Использовать серверную генерацию с последующей валидацией',\n 'offline_mode': 'Автономный режим',\n 'offline_mode_desc': 'Использовать только локальные ресурсы, без подключения к серверу',\n 'server_address': 'Адрес сервера',\n 'test_connection': 'Проверить соединение',\n 'checking_server': 'Проверка подключения к серверу...',\n 'server_connected': 'Сервер успешно подключен',\n 'server_error': 'Ошибка подключения к серверу',\n 'api_keys': 'API ключи',\n 'deepseek_api_key': 'DeepSeek API ключ',\n 'deepseek_api_key_desc': 'Необходим для генерации упражнений через DeepSeek API',\n 'exercise_complexity': 'Сложность упражнений',\n 'simple_complexity': 'Простой',\n 'simple_complexity_desc': 'Более лёгкие упражнения с меньшим количеством вариантов',\n 'normal_complexity': 'Обычный',\n 'normal_complexity_desc': 'Сбалансированная сложность для регулярных тренировок',\n 'complex_complexity': 'Сложный',\n 'complex_complexity_desc': 'Более сложные упражнения с дополнительными вариантами',\n 'tech': 'Технические',\n 'food': 'Еда',\n 'everyday': 'Повседневные',\n 'professions': 'Профессии',\n 'general': 'Общие',\n 'found_in_dictionary': 'Найдено в локальном словаре',\n 'no_reverse_translation': 'Перевод не найден',\n 'reverse_translation_error': 'Ошибка перевода',\n 'reverse_translation_success': 'Перевод найден',\n 'Type translation to find Chinese': 'Введите перевод, чтобы найти китайский',\n 'srs_quiz': 'SRS-тренировка',\n 'character_first': 'Иероглиф',\n 'translation_first': 'Перевод',\n 'type_translation': 'Введите перевод',\n 'type_character': 'Введите иероглиф',\n 'correct': 'Правильно!',\n 'incorrect': 'Неправильно',\n 'clear_cache': 'Очистить кэш',\n 'cache_cleared': 'Кэш упражнений успешно очищен',\n 'cache_clear_error': 'Ошибка при очистке кэша',\n 'testing_connection': 'Проверка соединения...',\n 'connection_successful': 'Соединение установлено',\n 'connection_failed': 'Ошибка соединения',\n 'connection_error': 'Ошибка подключения',\n 'server_modules': 'Модули сервера',\n 'translator': 'Переводчик',\n 'validator': 'Валидатор',\n 'available_models': 'Доступные модели',\n 'debug_mode': 'Режим отладки',\n 'debug_mode_desc': 'Скрывать блоки ответов и данные проверки для упражнений',\n },\n };\n\n String translate(String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n\n static String staticTranslate(AppLanguage language, String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n}\n\n// Extension method for String to easily use translations\nextension StringExtension on String {\n String tr(BuildContext context) {\n return AppLocalizations.of(context).translate(this);\n }\n} "}, "bd2c254d903cd65071a54d3d01b6c65337bb1678": {"t": 1785757894.8195944, "n": 10625, "h": "d8d20548dd6ab0dd", "c": "import 'package:flutter/material.dart';\nimport '../models/settings_model.dart';\n\nclass AppLocalizations {\n final AppLanguage language;\n\n AppLocalizations(this.language);\n\n static AppLocalizations of(BuildContext context) {\n return Localizations.of<AppLocalizations>(context, AppLocalizations) ??\n AppLocalizations(AppLanguage.english);\n }\n\n static Map<String, Map<String, String>> _localizedValues = {\n 'en': {\n 'app_title': 'Flashcards',\n 'welcome_message': 'Welcome to Flashcards App',\n 'create_new_pack': 'Create New Pack',\n 'enter_pack_name': 'Enter pack name',\n 'enter_characters': 'Enter characters (one per line)',\n 'cancel': 'Cancel',\n 'create': 'Create',\n 'cards_to_review': 'Card to review',\n 'no_cards_in_pack': 'No cards in this pack',\n 'again_button': 'Again',\n 'good_button': 'Good',\n 'new_pack': 'New Pack',\n 'next_card': 'Next Card',\n 'settings': 'Settings',\n 'theme': 'Theme',\n 'language': 'Language',\n 'light_mode': 'Light Mode',\n 'dark_mode': 'Dark Mode',\n 'system_mode': 'System Mode',\n 'english': 'English',\n 'russian': 'Russian',\n 'fill_blanks': 'Fill in the Blanks',\n 'no_cards_available': 'No cards available',\n 'correct_answer': 'Correct answer',\n 'check': 'Check',\n 'next': 'Next',\n 'flashcards': 'Flashcards',\n 'edit_cards': 'Edit Cards',\n 'memory_game': 'Memory Game',\n 'victory': 'Victory!',\n 'found_all_pairs': 'You found all pairs!',\n 'play_again': 'Play Again',\n 'find_matching_pairs': 'Find matching pairs',\n 'edit_flashcard': 'Edit Flashcard',\n 'hanzi': 'Character',\n 'pinyin': 'Pinyin',\n 'translation': 'Translation',\n 'save': 'Save',\n 'suggested_translation': 'Suggested translation:',\n 'translation_error': 'Translation error',\n 'required_fields_error': 'Please fill in all required fields',\n 'exercises': 'Exercises',\n 'translation_service': 'Translation Service',\n 'exercise_service': 'Exercise Generation Service',\n 'server_settings': 'Server Settings',\n 'bkrs_parser': 'BKRS Parser',\n 'bkrs_parser_desc': 'Parse translations from BKRS dictionary website',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Use local BERT-based server for translations',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Use local BERT model for generating exercises',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Use DeepSeek API for generating exercises',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Use server translation with Helsinki-NLP models',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Use server generation with subsequent validation',\n 'offline_mode': 'Offline Mode',\n 'offline_mode_desc': 'Use local resources only, no server connection',\n 'server_address': 'Server Address',\n 'test_connection': 'Test Connection',\n 'checking_server': 'Checking server connection...',\n 'server_connected': 'Server connected successfully',\n 'server_error': 'Server connection error',\n 'api_keys': 'API Keys',\n 'deepseek_api_key': 'DeepSeek API Key',\n 'deepseek_api_key_desc': 'Required for DeepSeek API exercises generation',\n 'exercise_complexity': 'Exercise Complexity',\n 'simple_complexity': 'Simple',\n 'simple_complexity_desc': 'Easier exercises with fewer options',\n 'normal_complexity': 'Normal',\n 'normal_complexity_desc': 'Balanced difficulty for regular practice',\n 'complex_complexity': 'Complex',\n 'complex_complexity_desc': 'More challenging exercises with additional options',\n 'tech': 'Technical',\n 'food': 'Food',\n 'everyday': 'Everyday',\n 'professions': 'Professions',\n 'general': 'General',\n 'found_in_dictionary': 'Found in local dictionary',\n 'no_reverse_translation': 'No translation found',\n 'reverse_translation_error': 'Translation error',\n 'reverse_translation_success': 'Translation found',\n 'Type translation to find Chinese': 'Type translation to find Chinese',\n 'srs_quiz': 'SRS Quiz',\n 'character_first': 'Character',\n 'translation_first': 'Translation',\n 'type_translation': 'Type translation',\n 'type_character': 'Type character',\n 'correct': 'Correct!',\n 'incorrect': 'Incorrect',\n 'clear_cache': 'Clear Cache',\n 'cache_cleared': 'Exercise cache cleared successfully',\n 'cache_clear_error': 'Error clearing cache',\n 'testing_connection': 'Testing connection...',\n 'connection_successful': 'Connection successful',\n 'connection_failed': 'Connection failed',\n 'connection_error': 'Connection error',\n 'server_modules': 'Server modules',\n 'translator': 'Translator',\n 'validator': 'Validator',\n 'available_models': 'Available models',\n 'debug_mode': 'Debug Mode',\n 'debug_mode_desc': 'Hide answer blocks and validation data for exercises',\n },\n 'ru': {\n 'app_title': 'Карточки',\n 'welcome_message': 'Добро пожаловать в приложение Карточки',\n 'create_new_pack': 'Создать новый набор',\n 'enter_pack_name': 'Введите название набора',\n 'enter_characters': 'Введите символы (по одному в строке)',\n 'cancel': 'Отмена',\n 'create': 'Создать',\n 'cards_to_review': 'Карточка для повторения',\n 'no_cards_in_pack': 'В этом наборе нет карточек',\n 'again_button': 'Снова',\n 'good_button': 'Хорошо',\n 'new_pack': 'Новый набор',\n 'next_card': 'Следующая карточка',\n 'settings': 'Настройки',\n 'theme': 'Тема',\n 'language': 'Язык',\n 'light_mode': 'Светлая тема',\n 'dark_mode': 'Тёмная тема',\n 'system_mode': 'Системная тема',\n 'english': 'Английский',\n 'russian': 'Русский',\n 'fill_blanks': 'Заполните пропуски',\n 'no_cards_available': 'Нет доступных карточек',\n 'correct_answer': 'Правильный ответ',\n 'check': 'Проверить',\n 'next': 'Далее',\n 'flashcards': 'Карточки',\n 'edit_cards': 'Редактировать карточки',\n 'memory_game': 'Игра на память',\n 'victory': 'Победа!',\n 'found_all_pairs': 'Вы нашли все пары!',\n 'play_again': 'Играть снова',\n 'find_matching_pairs': 'Найдите соответствующие пары',\n 'edit_flashcard': 'Редактировать карточку',\n 'hanzi': 'Символ',\n 'pinyin': 'Пиньинь',\n 'translation': 'Перевод',\n 'save': 'Сохранить',\n 'suggested_translation': 'Предлагаемый перевод:',\n 'translation_error': 'Ошибка перевода',\n 'required_fields_error': 'Пожалуйста, заполните все обязательные поля',\n 'exercises': 'Упражнения',\n 'translation_service': 'Сервис перевода',\n 'exercise_service': 'Сервис генерации упражнений',\n 'server_settings': 'Настройки сервера',\n 'bkrs_parser': 'Парсинг БКРС',\n 'bkrs_parser_desc': 'Получать переводы с сайта словаря БКРС',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Использовать локальный сервер на базе BERT для переводов',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Использовать локальную модель BERT для создания упражнений',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Использовать API DeepSeek для создания упражнений',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Использовать серверный перевод с моделями Helsinki-NLP',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Использовать серверную генерацию с последующей валидацией',\n 'offline_mode': 'Автономный режим',\n 'offline_mode_desc': 'Использовать только локальные ресурсы, без подключения к серверу',\n 'server_address': 'Адрес сервера',\n 'test_connection': 'Проверить соединение',\n 'checking_server': 'Проверка подключения к серверу...',\n 'server_connected': 'Сервер успешно подключен',\n 'server_error': 'Ошибка подключения к серверу',\n 'api_keys': 'API ключи',\n 'deepseek_api_key': 'DeepSeek API ключ',\n 'deepseek_api_key_desc': 'Необходим для генерации упражнений через DeepSeek API',\n 'exercise_complexity': 'Сложность упражнений',\n 'simple_complexity': 'Простой',\n 'simple_complexity_desc': 'Более лёгкие упражнения с меньшим количеством вариантов',\n 'normal_complexity': 'Обычный',\n 'normal_complexity_desc': 'Сбалансированная сложность для регулярных тренировок',\n 'complex_complexity': 'Сложный',\n 'complex_complexity_desc': 'Более сложные упражнения с дополнительными вариантами',\n 'tech': 'Технические',\n 'food': 'Еда',\n 'everyday': 'Повседневные',\n 'professions': 'Профессии',\n 'general': 'Общие',\n 'found_in_dictionary': 'Найдено в локальном словаре',\n 'no_reverse_translation': 'Перевод не найден',\n 'reverse_translation_error': 'Ошибка перевода',\n 'reverse_translation_success': 'Перевод найден',\n 'Type translation to find Chinese': 'Введите перевод, чтобы найти китайский',\n 'srs_quiz': 'SRS-тренировка',\n 'character_first': 'Иероглиф',\n 'translation_first': 'Перевод',\n 'type_translation': 'Введите перевод',\n 'type_character': 'Введите иероглиф',\n 'correct': 'Правильно!',\n 'incorrect': 'Неправильно',\n 'clear_cache': 'Очистить кэш',\n 'cache_cleared': 'Кэш упражнений успешно очищен',\n 'cache_clear_error': 'Ошибка при очистке кэша',\n 'testing_connection': 'Проверка соединения...',\n 'connection_successful': 'Соединение установлено',\n 'connection_failed': 'Ошибка соединения',\n 'connection_error': 'Ошибка подключения',\n 'server_modules': 'Модули сервера',\n 'translator': 'Переводчик',\n 'validator': 'Валидатор',\n 'available_models': 'Доступные модели',\n 'debug_mode': 'Режим отладки',\n 'debug_mode_desc': 'Скрывать блоки ответов и данные проверки для упражнений',\n },\n };\n\n String translate(String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n\n static String staticTranslate(AppLanguage language, String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n}\n\n// Extension method for String to easily use translations\nextension StringExtension on String {\n String tr(BuildContext context) {\n return AppLocalizations.of(context).translate(this);\n }\n} "}, "e278ed0bc4bf8c916147b39d835d943c7674eb4d": {"t": 1785757896.1917152, "n": 10389, "h": "bffc293d00686822", "c": "import 'package:flutter/material.dart';\nimport '../models/settings_model.dart';\n\nclass AppLocalizations {\n final AppLanguage language;\n\n AppLocalizations(this.language);\n\n static AppLocalizations of(BuildContext context) {\n return Localizations.of<AppLocalizations>(context, AppLocalizations) ??\n AppLocalizations(AppLanguage.english);\n }\n\n static Map<String, Map<String, String>> _localizedValues = {\n 'en': {\n 'app_title': 'Flashcards',\n 'welcome_message': 'Welcome to Flashcards App',\n 'create_new_pack': 'Create New Pack',\n 'enter_pack_name': 'Enter pack name',\n 'enter_characters': 'Enter characters (one per line)',\n 'cancel': 'Cancel',\n 'create': 'Create',\n 'cards_to_review': 'Card to review',\n 'no_cards_in_pack': 'No cards in this pack',\n 'again_button': 'Again',\n 'good_button': 'Good',\n 'new_pack': 'New Pack',\n 'next_card': 'Next Card',\n 'settings': 'Settings',\n 'theme': 'Theme',\n 'language': 'Language',\n 'light_mode': 'Light Mode',\n 'dark_mode': 'Dark Mode',\n 'system_mode': 'System Mode',\n 'english': 'English',\n 'russian': 'Russian',\n 'fill_blanks': 'Fill in the Blanks',\n 'no_cards_available': 'No cards available',\n 'correct_answer': 'Correct answer',\n 'check': 'Check',\n 'next': 'Next',\n 'flashcards': 'Flashcards',\n 'edit_cards': 'Edit Cards',\n 'memory_game': 'Memory Game',\n 'victory': 'Victory!',\n 'found_all_pairs': 'You found all pairs!',\n 'play_again': 'Play Again',\n 'find_matching_pairs': 'Find matching pairs',\n 'edit_flashcard': 'Edit Flashcard',\n 'hanzi': 'Character',\n 'pinyin': 'Pinyin',\n 'translation': 'Translation',\n 'save': 'Save',\n 'suggested_translation': 'Suggested translation:',\n 'translation_error': 'Translation error',\n 'required_fields_error': 'Please fill in all required fields',\n 'exercises': 'Exercises',\n 'translation_service': 'Translation Service',\n 'exercise_service': 'Exercise Generation Service',\n 'server_settings': 'Server Settings',\n 'bkrs_parser': 'BKRS Parser',\n 'bkrs_parser_desc': 'Parse translations from BKRS dictionary website',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Use local BERT-based server for translations',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Use local BERT model for generating exercises',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Use DeepSeek API for generating exercises',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Use server translation with Helsinki-NLP models',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Use server generation with subsequent validation',\n 'offline_mode': 'Offline Mode',\n 'offline_mode_desc': 'Use local resources only, no server connection',\n 'server_address': 'Server Address',\n 'test_connection': 'Test Connection',\n 'checking_server': 'Checking server connection...',\n 'server_connected': 'Server connected successfully',\n 'server_error': 'Server connection error',\n 'api_keys': 'API Keys',\n 'deepseek_api_key': 'DeepSeek API Key',\n 'deepseek_api_key_desc': 'Required for DeepSeek API exercises generation',\n 'exercise_complexity': 'Exercise Complexity',\n 'simple_complexity': 'Simple',\n 'simple_complexity_desc': 'Easier exercises with fewer options',\n 'normal_complexity': 'Normal',\n 'normal_complexity_desc': 'Balanced difficulty for regular practice',\n 'complex_complexity': 'Complex',\n 'complex_complexity_desc': 'More challenging exercises with additional options',\n 'tech': 'Technical',\n 'food': 'Food',\n 'everyday': 'Everyday',\n 'professions': 'Professions',\n 'general': 'General',\n 'found_in_dictionary': 'Found in local dictionary',\n 'no_reverse_translation': 'No translation found',\n 'reverse_translation_error': 'Translation error',\n 'reverse_translation_success': 'Translation found',\n 'Type translation to find Chinese': 'Type translation to find Chinese',\n 'srs_quiz': 'SRS Quiz',\n 'character_first': 'Character',\n 'translation_first': 'Translation',\n 'type_translation': 'Type translation',\n 'type_character': 'Type character',\n 'correct': 'Correct!',\n 'incorrect': 'Incorrect',\n 'clear_cache': 'Clear Cache',\n 'cache_cleared': 'Exercise cache cleared successfully',\n 'cache_clear_error': 'Error clearing cache',\n 'testing_connection': 'Testing connection...',\n 'connection_successful': 'Connection successful',\n 'connection_failed': 'Connection failed',\n 'connection_error': 'Connection error',\n 'server_modules': 'Server modules',\n 'translator': 'Translator',\n 'validator': 'Validator',\n 'available_models': 'Available models',\n },\n 'ru': {\n 'app_title': 'Карточки',\n 'welcome_message': 'Добро пожаловать в приложение Карточки',\n 'create_new_pack': 'Создать новый набор',\n 'enter_pack_name': 'Введите название набора',\n 'enter_characters': 'Введите символы (по одному в строке)',\n 'cancel': 'Отмена',\n 'create': 'Создать',\n 'cards_to_review': 'Карточка для повторения',\n 'no_cards_in_pack': 'В этом наборе нет карточек',\n 'again_button': 'Снова',\n 'good_button': 'Хорошо',\n 'new_pack': 'Новый набор',\n 'next_card': 'Следующая карточка',\n 'settings': 'Настройки',\n 'theme': 'Тема',\n 'language': 'Язык',\n 'light_mode': 'Светлая тема',\n 'dark_mode': 'Тёмная тема',\n 'system_mode': 'Системная тема',\n 'english': 'Английский',\n 'russian': 'Русский',\n 'fill_blanks': 'Заполните пропуски',\n 'no_cards_available': 'Нет доступных карточек',\n 'correct_answer': 'Правильный ответ',\n 'check': 'Проверить',\n 'next': 'Далее',\n 'flashcards': 'Карточки',\n 'edit_cards': 'Редактировать карточки',\n 'memory_game': 'Игра на память',\n 'victory': 'Победа!',\n 'found_all_pairs': 'Вы нашли все пары!',\n 'play_again': 'Играть снова',\n 'find_matching_pairs': 'Найдите соответствующие пары',\n 'edit_flashcard': 'Редактировать карточку',\n 'hanzi': 'Символ',\n 'pinyin': 'Пиньинь',\n 'translation': 'Перевод',\n 'save': 'Сохранить',\n 'suggested_translation': 'Предлагаемый перевод:',\n 'translation_error': 'Ошибка перевода',\n 'required_fields_error': 'Пожалуйста, заполните все обязательные поля',\n 'exercises': 'Упражнения',\n 'translation_service': 'Сервис перевода',\n 'exercise_service': 'Сервис генерации упражнений',\n 'server_settings': 'Настройки сервера',\n 'bkrs_parser': 'Парсинг БКРС',\n 'bkrs_parser_desc': 'Получать переводы с сайта словаря БКРС',\n 'rest_api_bert': 'REST API (Argos+BERT)',\n 'rest_api_bert_desc': 'Использовать локальный сервер на базе BERT для переводов',\n 'bert_chinese': 'BERT Chinese WWM',\n 'bert_chinese_desc': 'Использовать локальную модель BERT для создания упражнений',\n 'deepseek': 'DeepSeek',\n 'deepseek_desc': 'Использовать API DeepSeek для создания упражнений',\n 'helsinki_translation': 'Helsinki-NLP',\n 'helsinki_translation_desc': 'Использовать серверный перевод с моделями Helsinki-NLP',\n 'gemma3_bert_wwm': 'Gemma3-IT-QAT + BERT-WWM',\n 'gemma3_bert_wwm_desc': 'Использовать серверную генерацию с последующей валидацией',\n 'offline_mode': 'Автономный режим',\n 'offline_mode_desc': 'Использовать только локальные ресурсы, без подключения к серверу',\n 'server_address': 'Адрес сервера',\n 'test_connection': 'Проверить соединение',\n 'checking_server': 'Проверка подключения к серверу...',\n 'server_connected': 'Сервер успешно подключен',\n 'server_error': 'Ошибка подключения к серверу',\n 'api_keys': 'API ключи',\n 'deepseek_api_key': 'DeepSeek API ключ',\n 'deepseek_api_key_desc': 'Необходим для генерации упражнений через DeepSeek API',\n 'exercise_complexity': 'Сложность упражнений',\n 'simple_complexity': 'Простой',\n 'simple_complexity_desc': 'Более лёгкие упражнения с меньшим количеством вариантов',\n 'normal_complexity': 'Обычный',\n 'normal_complexity_desc': 'Сбалансированная сложность для регулярных тренировок',\n 'complex_complexity': 'Сложный',\n 'complex_complexity_desc': 'Более сложные упражнения с дополнительными вариантами',\n 'tech': 'Технические',\n 'food': 'Еда',\n 'everyday': 'Повседневные',\n 'professions': 'Профессии',\n 'general': 'Общие',\n 'found_in_dictionary': 'Найдено в локальном словаре',\n 'no_reverse_translation': 'Перевод не найден',\n 'reverse_translation_error': 'Ошибка перевода',\n 'reverse_translation_success': 'Перевод найден',\n 'Type translation to find Chinese': 'Введите перевод, чтобы найти китайский',\n 'srs_quiz': 'SRS-тренировка',\n 'character_first': 'Иероглиф',\n 'translation_first': 'Перевод',\n 'type_translation': 'Введите перевод',\n 'type_character': 'Введите иероглиф',\n 'correct': 'Правильно!',\n 'incorrect': 'Неправильно',\n 'clear_cache': 'Очистить кэш',\n 'cache_cleared': 'Кэш упражнений успешно очищен',\n 'cache_clear_error': 'Ошибка при очистке кэша',\n 'testing_connection': 'Проверка соединения...',\n 'connection_successful': 'Соединение установлено',\n 'connection_failed': 'Ошибка соединения',\n 'connection_error': 'Ошибка подключения',\n 'server_modules': 'Модули сервера',\n 'translator': 'Переводчик',\n 'validator': 'Валидатор',\n 'available_models': 'Доступные модели',\n },\n };\n\n String translate(String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n\n static String staticTranslate(AppLanguage language, String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n}\n\n// Extension method for String to easily use translations\nextension StringExtension on String {\n String tr(BuildContext context) {\n return AppLocalizations.of(context).translate(this);\n }\n} "}, "53f3c6df36dbf70e44551799a15c65453811bbb0": {"t": 1785757898.025141, "n": 4244, "h": "b5d35b6da503058e", "c": "import 'package:flutter/material.dart';\nimport '../models/settings_model.dart';\n\nclass AppLocalizations {\n final AppLanguage language;\n\n AppLocalizations(this.language);\n\n static AppLocalizations of(BuildContext context) {\n return Localizations.of<AppLocalizations>(context, AppLocalizations) ??\n AppLocalizations(AppLanguage.english);\n }\n\n static Map<String, Map<String, String>> _localizedValues = {\n 'en': {\n 'app_title': 'Flashcards',\n 'welcome_message': 'Welcome to Flashcards App',\n 'create_new_pack': 'Create New Pack',\n 'enter_pack_name': 'Enter pack name',\n 'enter_characters': 'Enter characters (one per line)',\n 'cancel': 'Cancel',\n 'create': 'Create',\n 'cards_to_review': 'Card to review',\n 'no_cards_in_pack': 'No cards in this pack',\n 'again_button': 'Again',\n 'good_button': 'Good',\n 'new_pack': 'New Pack',\n 'next_card': 'Next Card',\n 'settings': 'Settings',\n 'theme': 'Theme',\n 'language': 'Language',\n 'light_mode': 'Light Mode',\n 'dark_mode': 'Dark Mode',\n 'system_mode': 'System Mode',\n 'english': 'English',\n 'russian': 'Russian',\n 'fill_blanks': 'Fill in the Blanks',\n 'no_cards_available': 'No cards available',\n 'correct_answer': 'Correct answer',\n 'check': 'Check',\n 'next': 'Next',\n 'flashcards': 'Flashcards',\n 'edit_cards': 'Edit Cards',\n 'memory_game': 'Memory Game',\n 'victory': 'Victory!',\n 'found_all_pairs': 'You found all pairs!',\n 'play_again': 'Play Again',\n 'find_matching_pairs': 'Find matching pairs',\n 'edit_flashcard': 'Edit Flashcard',\n 'hanzi': 'Character',\n 'pinyin': 'Pinyin',\n 'translation': 'Translation',\n 'save': 'Save',\n 'suggested_translation': 'Suggested translation:',\n 'translation_error': 'Translation error',\n 'required_fields_error': 'Please fill in all required fields',\n 'exercises': 'Exercises',\n },\n 'ru': {\n 'app_title': 'Карточки',\n 'welcome_message': 'Добро пожаловать в приложение Карточки',\n 'create_new_pack': 'Создать новый набор',\n 'enter_pack_name': 'Введите название набора',\n 'enter_characters': 'Введите символы (по одному в строке)',\n 'cancel': 'Отмена',\n 'create': 'Создать',\n 'cards_to_review': 'Карточка для повторения',\n 'no_cards_in_pack': 'В этом наборе нет карточек',\n 'again_button': 'Снова',\n 'good_button': 'Хорошо',\n 'new_pack': 'Новый набор',\n 'next_card': 'Следующая карточка',\n 'settings': 'Настройки',\n 'theme': 'Тема',\n 'language': 'Язык',\n 'light_mode': 'Светлая тема',\n 'dark_mode': 'Тёмная тема',\n 'system_mode': 'Системная тема',\n 'english': 'Английский',\n 'russian': 'Русский',\n 'fill_blanks': 'Заполните пропуски',\n 'no_cards_available': 'Нет доступных карточек',\n 'correct_answer': 'Правильный ответ',\n 'check': 'Проверить',\n 'next': 'Далее',\n 'flashcards': 'Карточки',\n 'edit_cards': 'Редактировать карточки',\n 'memory_game': 'Игра на память',\n 'victory': 'Победа!',\n 'found_all_pairs': 'Вы нашли все пары!',\n 'play_again': 'Играть снова',\n 'find_matching_pairs': 'Найдите соответствующие пары',\n 'edit_flashcard': 'Редактировать карточку',\n 'hanzi': 'Символ',\n 'pinyin': 'Пиньинь',\n 'translation': 'Перевод',\n 'save': 'Сохранить',\n 'suggested_translation': 'Предложенный перевод:',\n 'translation_error': 'Ошибка перевода',\n 'required_fields_error': 'Пожалуйста, заполните все обязательные поля',\n 'exercises': 'Упражнения',\n },\n };\n\n String translate(String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n\n static String staticTranslate(AppLanguage language, String key) {\n final languageCode = language == AppLanguage.russian ? 'ru' : 'en';\n return _localizedValues[languageCode]?[key] ?? key;\n }\n}\n\n// Extension method for String to easily use translations\nextension StringExtension on String {\n String tr(BuildContext context) {\n return AppLocalizations.of(context).translate(this);\n }\n} "}}}} |