|
|
#!/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()) |