#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Language translations for menu system # Supported languages: en (English), zh (Chinese), ru (Russian) TRANSLATIONS = { 'en': { 'title': 'Xiaomi MiR Patcher', 'main_menu': [ 'Set IP-address (current value: {})', 'Connect to device (install exploit)', 'Read full device info', 'Create full backup', 'Install EN/RU/ZH languages', 'Install permanent SSH', 'Install firmware (from directory "firmware")', '{{{ Other functions }}}', 'Change language', '[[ Reboot device ]]', 'Exit' ], 'extended_menu': [ 'Set IP-address (current value: {})', 'Change root password', 'Read dmesg and syslog', 'Create a backup of the specified partition', 'Uninstall EN/RU/ZH languages', 'Set kernel boot address', 'Install bootloader (Breed/U-Boot)', '__test__', '[[ Reboot device ]]', 'Return to main menu' ], 'prompts': { 'select': 'Select: ', 'choice': 'Choice: ', 'enter_ip': 'Enter device IP-address: ', 'extended_functions': '(extended functions)', 'language_menu': 'Language / 语言 / Язык', 'language_prompt': 'Select language [1-English, 2-中文, 3-Русский]: ', 'bootloader_choice': 'Select bootloader [1-Breed, 2-U-Boot]: ' }, 'messages': { 'firmware_downgrade_title': 'FIRMWARE DOWNGRADE SUGGESTION:', 'firmware_downgrade_be3600': 'If exploits are not working on your BE3600 router, please\ndowngrade to firmware version 1.0.68 or older.', 'firmware_downgrade_rd15': 'RD15 (BE3600 2.5G) latest firmware v1.0.68 has fixed the vulnerability.\nPlease downgrade to v1.0.65 or older.', 'firmware_downgrade_rd16': 'RD16 (BE3600 1G) latest firmware v1.0.40 has fixed the vulnerability.\nPlease downgrade to v1.0.34 or older.', 'firmware_downgrade_tutorial': 'Firmware downgrade tutorial:\nhttps://github.com/uyez/lyq/releases/tag/be3600', 'firmware_downgrade_tool': 'You can use the Xiaomi Router Repair Tool for downgrade.', 'exploit_failed_title': 'EXPLOIT FAILED:', 'exploit_failed_message': 'All available exploits failed to work on this device.\nThis may be due to newer firmware versions that have\npatched the vulnerabilities.', 'exploit_failed_suggestion': 'Consider checking for alternative firmware versions\nor contact the community for device-specific solutions.' } }, 'zh': { 'title': '小米路由器破解工具', 'main_menu': [ '设置IP地址 (当前值: {})', '连接设备 (安装漏洞利用)', '读取完整设备信息', '创建完整备份', '安装 英文/俄文/中文 语言包', '安装永久SSH', '安装固件 (从 "firmware" 目录)', '{{{ 其他功能 }}}', '更改语言', '[[ 重启设备 ]]', '退出' ], 'extended_menu': [ '设置IP地址 (当前值: {})', '修改root密码', '读取dmesg和系统日志', '创建指定分区备份', '卸载 英文/俄文/中文 语言包', '设置内核启动地址', '安装引导程序 (Breed/U-Boot)', '__测试__', '[[ 重启设备 ]]', '返回主菜单' ], 'prompts': { 'select': '请选择: ', 'choice': '请选择: ', 'enter_ip': '请输入设备IP地址: ', 'extended_functions': '(扩展功能)', 'language_menu': 'Language / 语言 / Язык', 'language_prompt': '选择语言 [1-English, 2-中文, 3-Русский]: ', 'bootloader_choice': '选择引导程序 [1-Breed, 2-U-Boot]: ' }, 'messages': { 'firmware_downgrade_title': '固件降级建议:', 'firmware_downgrade_be3600': '如果漏洞利用在您的BE3600路由器上不工作,请\n降级到固件版本1.0.68或更旧版本。', 'firmware_downgrade_rd15': 'RD15(BE3600 2.5G版本)最新固件v1.0.68已修复漏洞。\n请降级到v1.0.65或更旧版本。', 'firmware_downgrade_rd16': 'RD16(BE3600 1G版本)最新固件v1.0.40已修复漏洞。\n请降级到v1.0.34或更旧版本。', 'firmware_downgrade_tutorial': '固件降级教程:\nhttps://github.com/uyez/lyq/releases/tag/be3600', 'firmware_downgrade_tool': '您可以使用小米路由器修复工具进行降级。', 'exploit_failed_title': '漏洞利用失败:', 'exploit_failed_message': '所有可用的漏洞利用都无法在此设备上工作。\n这可能是由于较新的固件版本已修补了\n这些漏洞。', 'exploit_failed_suggestion': '请考虑检查替代固件版本\n或联系社区获取设备特定解决方案。' } }, 'ru': { 'title': 'Xiaomi MiR Patcher', 'main_menu': [ 'Установить IP-адрес (текущее значение: {})', 'Подключиться к устройству (установить эксплойт)', 'Читать полную информацию об устройстве', 'Создать полную резервную копию', 'Установить языки EN/RU/ZH', 'Установить постоянный SSH', 'Установить прошивку (из папки "firmware")', '{{{ Другие функции }}}', 'Изменить язык', '[[ Перезагрузить устройство ]]', 'Выход' ], 'extended_menu': [ 'Установить IP-адрес (текущее значение: {})', 'Изменить пароль root', 'Прочитать dmesg и syslog', 'Создать резервную копию указанного раздела', 'Удалить языки EN/RU/ZH', 'Установить адрес загрузки ядра', 'Установить загрузчик (Breed/U-Boot)', '__тест__', '[[ Перезагрузить устройство ]]', 'Вернуться в главное меню' ], 'prompts': { 'select': 'Выбрать: ', 'choice': 'Выбор: ', 'enter_ip': 'Введите IP-адрес устройства: ', 'extended_functions': '(расширенные функции)', 'language_menu': 'Language / 语言 / Язык', 'language_prompt': 'Выберите язык [1-English, 2-中文, 3-Русский]: ', 'bootloader_choice': 'Выберите загрузчик [1-Breed, 2-U-Boot]: ' }, 'messages': { 'firmware_downgrade_title': 'ПРЕДЛОЖЕНИЕ ПОНИЖЕНИЯ ВЕРСИИ ПРОШИВКИ:', 'firmware_downgrade_be3600': 'Если эксплойты не работают на вашем роутере BE3600, пожалуйста\nпонизьте версию прошивки до 1.0.68 или старше.', 'firmware_downgrade_rd15': 'RD15 (BE3600 2.5G) последняя прошивка v1.0.68 исправила уязвимость.\nПожалуйста, понизьте до v1.0.65 или старше.', 'firmware_downgrade_rd16': 'RD16 (BE3600 1G) последняя прошивка v1.0.40 исправила уязвимость.\nПожалуйста, понизьте до v1.0.34 или старше.', 'firmware_downgrade_tutorial': 'Руководство по понижению версии прошивки:\nhttps://github.com/uyez/lyq/releases/tag/be3600', 'firmware_downgrade_tool': 'Вы можете использовать инструмент восстановления роутера Xiaomi для понижения версии.', 'exploit_failed_title': 'ЭКСПЛОЙТ НЕ СРАБОТАЛ:', 'exploit_failed_message': 'Все доступные эксплойты не смогли работать на этом устройстве.\nЭто может быть связано с более новыми версиями прошивки,\nкоторые исправили уязвимости.', 'exploit_failed_suggestion': 'Рассмотрите возможность проверки альтернативных версий прошивки\nили обратитесь к сообществу за решениями для конкретного устройства.' } } } def get_translation(lang, key, subkey=None, *args): """Get translated text for given language and key""" if lang not in TRANSLATIONS: lang = 'en' # fallback to English trans = TRANSLATIONS[lang] # Handle nested dictionary lookup if subkey: if key in trans and isinstance(trans[key], dict) and subkey in trans[key]: text = trans[key][subkey] if args: return text.format(*args) return text # fallback to English elif lang != 'en' and key in TRANSLATIONS['en'] and isinstance(TRANSLATIONS['en'][key], dict) and subkey in TRANSLATIONS['en'][key]: text = TRANSLATIONS['en'][key][subkey] if args: return text.format(*args) return text else: return f"{key}.{subkey}" # fallback key # Handle normal key lookup if key in trans: if isinstance(trans[key], list): return trans[key] elif args: return trans[key].format(*args) else: return trans[key] elif key in trans.get('prompts', {}): text = trans['prompts'][key] if args: return text.format(*args) return text else: # fallback to English only if we're not already using English if lang != 'en': return get_translation('en', key, subkey, *args) else: # If key not found even in English, return a default message if subkey: return f"[Missing translation: {key}.{subkey}]" else: return f"[Missing translation: {key}]" def get_supported_languages(): """Get list of supported language codes""" return list(TRANSLATIONS.keys())