feat: app full l10n support

This commit is contained in:
xkeyC 2024-03-16 19:13:49 +08:00
parent 66738abf60
commit a6b69553d5
25 changed files with 636 additions and 501 deletions

View File

@ -40,84 +40,94 @@ class MessageLookup extends MessageLookupByLibrary {
static String m9(v0) => "不支持的操作系统:${v0}";
static String m10(v0) => "点击修复为您创建 LIVE 文件夹,完成后重试安装。(${v0})";
static String m10(v0) =>
"为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区(${v0})";
static String m11(v0) => "修复建议: ${v0}";
static String m11(v0) => "中文安装路径!这可能会导致游戏 启动/安装 错误!(${v0}请在RSI启动器更换安装路径。";
static String m12(v0) => "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小${v0}";
static String m12(v0) => "点击修复为您创建 LIVE 文件夹,完成后重试安装。(${v0})";
static String m13(v0) => "请升级您的系统 (${v0})";
static String m13(v0) => "修复建议: ${v0}";
static String m14(v0) => "一键诊断 -> ${v0}";
static String m14(v0) => "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小${v0}";
static String m15(v0, v1) => "下载: ${v0}/s 上传:${v1}/s";
static String m15(v0) => "请升级您的系统 (${v0})";
static String m16(v0) => "已下载:${v0}";
static String m16(v0) => "一键诊断 -> ${v0}";
static String m17(v0) => "状态:${v0}";
static String m17(v0, v1) => "下载: ${v0}/s 上传:${v1}/s";
static String m18(v1) => "总大小:${v1}";
static String m18(v0) => "已下载:${v0}";
static String m19(v0) => "已上传:${v0}";
static String m19(v0) => "下载中... (${v0}%)";
static String m20(v2) => "校验中...${v2}";
static String m20(v0) => "状态:${v0}";
static String m21(v0, v1, v2, v3, v4) =>
static String m21(v1) => "总大小:${v1}";
static String m22(v0) => "已上传:${v0}";
static String m23(v2) => "校验中...${v2}";
static String m24(v0, v1, v2, v3, v4) =>
"游戏非正常退出\nexitCode=${v0}\nstdout=${v1}\nstderr=${v2}\n\n诊断信息:${v3} \n${v4}";
static String m22(v0) => "初始化网页汉化资源失败!${v0}";
static String m25(v0) => "初始化网页汉化资源失败!${v0}";
static String m23(v0) => "扫描完毕,共找到 ${v0} 个有效安装目录";
static String m26(v0) => "扫描完毕,共找到 ${v0} 个有效安装目录";
static String m24(v0) => "您在 ${v0} 安装的汉化有新版本啦!";
static String m27(v0) => "您在 ${v0} 安装的汉化有新版本啦!";
static String m25(v1, v2) =>
static String m28(v1, v2) =>
"RSI 服务器报告版本号:${v1} \n\n本地版本号:${v2} \n\n建议使用 RSI Launcher 更新游戏!";
static String m26(v0) => "通道:${v0}";
static String m29(v0) => "通道:${v0}";
static String m27(v0) => "自定义_${v0}";
static String m30(v0) => "自定义_${v0}";
static String m28(v0) => "启用(${v0}";
static String m31(v0) => "启用(${v0}";
static String m29(v0) => "安装出错!\n\n ${v0}";
static String m32(v0) => "安装出错!\n\n ${v0}";
static String m30(v0) => "已安装版本:${v0}";
static String m33(v0) => "已安装版本:${v0}";
static String m31(v0) => "更新时间:${v0}";
static String m34(v0) => "更新时间:${v0}";
static String m32(v0) => "版本号:${v0}";
static String m35(v0) => "版本号:${v0}";
static String m33(v0) => "当前状态:${v0}";
static String m36(v0) => "当前状态:${v0}";
static String m34(v0, v1, v2) => "${v0} 最小值: ${v1} / 最大值: ${v2}";
static String m37(v0, v1, v2) => "${v0} 最小值: ${v1} / 最大值: ${v2}";
static String m35(v0) => "性能优化 -> ${v0}";
static String m38(v0) => "性能优化 -> ${v0}";
static String m36(v0) => "缓存大小 ${v0}MB清理盒子下载的汉化文件缓存不会影响已安装的汉化";
static String m39(v0) => "缓存大小 ${v0}MB清理盒子下载的汉化文件缓存不会影响已安装的汉化";
static String m37(v0, v1, v2, v3) =>
static String m40(v0, v1, v2, v3) =>
"启用:${v0} 设备支持:${v1} 邮箱:${v2} 密码:${v3}";
static String m38(v0) =>
static String m41(v0) =>
"已设置的核心数量:${v0} (此功能适用于首页的盒子一键启动 或 工具中的RSI启动器管理员模式当为 0 时不启用此功能 ";
static String m39(v0) => "清理失败,请手动移除,文件位置:${v0}";
static String m42(v0) => "清理失败,请手动移除,文件位置:${v0}";
static String m40(v0) => "出现错误:${v0}";
static String m43(v0) => "出现错误:${v0}";
static String m41(v0) => "初始化失败,请截图报告给开发者。${v0}";
static String m44(v0) => "初始化失败,请截图报告给开发者。${v0}";
static String m42(v0) =>
static String m45(v0) =>
"若您使用 nvme 补丁出现问题,请运行此工具。(可能导致游戏 安装/更新 不可用。)\n\n当前补丁状态:${v0}";
static String m43(v0) =>
static String m46(v0) =>
"在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:${v0} MB";
static String m47(v0) =>
"若游戏画面出现异常或版本更新后可使用本工具清理过期的着色器当大于500M时建议清理 \n\n缓存大小:${v0} MB";
static String m44(v0, v1, v2, v3, v4) =>
static String m48(v0, v1, v2, v3, v4) =>
"系统:${v0}\n\n处理器:${v1}\n\n内存大小:${v2}GB\n\n显卡信息:\n${v3}\n\n硬盘信息:\n${v4}\n\n";
static String m45(v0) => "处理失败!:${v0}";
static String m49(v0) => "处理失败!:${v0}";
final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@ -157,6 +167,8 @@ class MessageLookup extends MessageLookupByLibrary {
"app_index_menu_tools": MessageLookupByLibrary.simpleMessage("工具"),
"app_index_version_info": m0,
"app_init_failed_with_reason": m1,
"app_shortcut_name":
MessageLookupByLibrary.simpleMessage("SC汉化盒子DEV.lnk"),
"app_splash_almost_done":
MessageLookupByLibrary.simpleMessage("即将完成..."),
"app_splash_checking_availability":
@ -233,23 +245,19 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("需要帮助? 点击加群寻求免费人工支援!"),
"doctor_info_processing":
MessageLookupByLibrary.simpleMessage("正在处理..."),
"doctor_info_result_add_registry_value":
MessageLookupByLibrary.simpleMessage(
"为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({0})"),
"doctor_info_result_add_registry_value": m10,
"doctor_info_result_chinese_install_path":
MessageLookupByLibrary.simpleMessage("中文安装路径!"),
"doctor_info_result_chinese_install_path_error":
MessageLookupByLibrary.simpleMessage(
"中文安装路径!这可能会导致游戏 启动/安装 错误!({0}请在RSI启动器更换安装路径。"),
"doctor_info_result_chinese_install_path_error": m11,
"doctor_info_result_chinese_username":
MessageLookupByLibrary.simpleMessage("中文用户名!"),
"doctor_info_result_chinese_username_error":
MessageLookupByLibrary.simpleMessage(
"中文用户名可能会导致游戏启动/安装错误! 点击修复按钮查看修改教程!"),
"doctor_info_result_create_live_folder": m10,
"doctor_info_result_create_live_folder": m12,
"doctor_info_result_easyanticheat_not_installed":
MessageLookupByLibrary.simpleMessage("EasyAntiCheat 未安装 或 未正常退出"),
"doctor_info_result_fix_suggestion": m11,
"doctor_info_result_fix_suggestion": m13,
"doctor_info_result_incompatible_nvme_device":
MessageLookupByLibrary.simpleMessage(
"新型 NVME 设备,与 RSI 启动器暂不兼容,可能导致安装失败"),
@ -258,7 +266,7 @@ class MessageLookup extends MessageLookupByLibrary {
"EasyAntiCheat 未安装,请点击修复为您一键安装。(在游戏正常启动并结束前,该问题会一直出现,若您因为其他原因游戏闪退,可忽略此条目)"),
"doctor_info_result_low_physical_memory":
MessageLookupByLibrary.simpleMessage("物理内存过低"),
"doctor_info_result_memory_requirement": m12,
"doctor_info_result_memory_requirement": m14,
"doctor_info_result_missing_easyanticheat_files":
MessageLookupByLibrary.simpleMessage("EasyAntiCheat 文件丢失"),
"doctor_info_result_missing_live_folder":
@ -267,7 +275,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("暂无解决方法,请截图反馈"),
"doctor_info_result_unsupported_os":
MessageLookupByLibrary.simpleMessage("不支持的操作系统,游戏可能无法运行"),
"doctor_info_result_upgrade_system": m13,
"doctor_info_result_upgrade_system": m15,
"doctor_info_result_verify_files_with_rsi_launcher":
MessageLookupByLibrary.simpleMessage(
"未在 LIVE 文件夹找到 EasyAntiCheat 文件 或 文件不完整,请使用 RSI 启动器校验文件"),
@ -278,7 +286,7 @@ class MessageLookup extends MessageLookupByLibrary {
"注意:本工具检测结果仅供参考,若您不理解以下操作,请提供截图给有经验的玩家!"),
"doctor_tip_title_select_game_directory":
MessageLookupByLibrary.simpleMessage("请在首页选择游戏安装目录。"),
"doctor_title_one_click_diagnosis": m14,
"doctor_title_one_click_diagnosis": m16,
"downloader_action_cancel_all":
MessageLookupByLibrary.simpleMessage("全部取消"),
"downloader_action_cancel_download":
@ -304,10 +312,9 @@ class MessageLookup extends MessageLookupByLibrary {
"downloader_info_download_unit_input_prompt":
MessageLookupByLibrary.simpleMessage(
"请输入下载单位1、100k、10m 0或留空为不限速。"),
"downloader_info_download_upload_speed": m15,
"downloader_info_downloaded": m16,
"downloader_info_downloading":
MessageLookupByLibrary.simpleMessage("下载中... ({0}%)"),
"downloader_info_download_upload_speed": m17,
"downloader_info_downloaded": m18,
"downloader_info_downloading": m19,
"downloader_info_downloading_status":
MessageLookupByLibrary.simpleMessage("下载中..."),
"downloader_info_manual_file_deletion_note":
@ -318,10 +325,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"SC 汉化盒子使用 p2p 网络来加速文件下载,如果您流量有限,可在此处将上传带宽设置为 1(byte)。"),
"downloader_info_paused": MessageLookupByLibrary.simpleMessage("已暂停"),
"downloader_info_status": m17,
"downloader_info_total_size": m18,
"downloader_info_uploaded": m19,
"downloader_info_verifying": m20,
"downloader_info_status": m20,
"downloader_info_total_size": m21,
"downloader_info_uploaded": m22,
"downloader_info_verifying": m23,
"downloader_info_waiting": MessageLookupByLibrary.simpleMessage("等待中"),
"downloader_input_download_speed_limit":
MessageLookupByLibrary.simpleMessage("下载限速:"),
@ -340,14 +347,14 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("DPS计算器汉化"),
"home_action_external_browser_extension":
MessageLookupByLibrary.simpleMessage("外部浏览器拓展:"),
"home_action_info_abnormal_game_exit": m21,
"home_action_info_abnormal_game_exit": m24,
"home_action_info_check_web_link":
MessageLookupByLibrary.simpleMessage("请查看弹出的网页链接获得详细信息。"),
"home_action_info_engine_config_optimization":
MessageLookupByLibrary.simpleMessage("调整引擎配置文件,优化游戏性能"),
"home_action_info_game_built_in":
MessageLookupByLibrary.simpleMessage("游戏内置"),
"home_action_info_initialization_failed": m22,
"home_action_info_initialization_failed": m25,
"home_action_info_initializing_resources":
MessageLookupByLibrary.simpleMessage("正在初始化汉化资源..."),
"home_action_info_log_file_parse_fail":
@ -360,7 +367,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("快捷安装汉化资源"),
"home_action_info_roberts_space_industries_origin":
MessageLookupByLibrary.simpleMessage("罗伯茨航天工业公司,万物的起源"),
"home_action_info_scan_complete_valid_directories_found": m23,
"home_action_info_scan_complete_valid_directories_found": m26,
"home_action_info_scanning":
MessageLookupByLibrary.simpleMessage("正在扫描 ..."),
"home_action_info_ship_upgrade_damage_value_query":
@ -423,7 +430,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_install_location": MessageLookupByLibrary.simpleMessage("安装位置:"),
"home_localization_new_version_available":
MessageLookupByLibrary.simpleMessage("汉化有新版本!"),
"home_localization_new_version_installed": m24,
"home_localization_new_version_installed": m27,
"home_login_action_title_box_one_click_launch":
MessageLookupByLibrary.simpleMessage("盒子一键启动"),
"home_login_action_title_need_webview2_runtime":
@ -440,7 +447,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_login_info_password_encryption_notice":
MessageLookupByLibrary.simpleMessage(
"盒子将使用 PIN 与 Windows 凭据加密保存您的密码,密码只存储在您的设备中。\n\n当下次登录需要输入密码时您只需授权PIN即可自动填充登录。"),
"home_login_info_rsi_server_report": m25,
"home_login_info_rsi_server_report": m28,
"home_login_title_launching_game":
MessageLookupByLibrary.simpleMessage("正在为您启动游戏..."),
"home_login_title_welcome_back":
@ -462,12 +469,12 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("汉化反馈"),
"localization_action_uninstall_translation":
MessageLookupByLibrary.simpleMessage("卸载汉化"),
"localization_info_channel": m26,
"localization_info_channel": m29,
"localization_info_community_translation":
MessageLookupByLibrary.simpleMessage("社区汉化"),
"localization_info_corrupted_file":
MessageLookupByLibrary.simpleMessage("文件受损,请重新下载"),
"localization_info_custom_file": m27,
"localization_info_custom_file": m30,
"localization_info_custom_file_instructions":
MessageLookupByLibrary.simpleMessage(
"即将打开本地化文件夹,请将自定义的 任意名称.ini 文件放入 Customize_ini 文件夹。\n\n添加新文件后未显示请使用右上角刷新按钮。\n\n安装时请确保选择了正确的语言。"),
@ -475,14 +482,14 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("自定义文件"),
"localization_info_custom_text":
MessageLookupByLibrary.simpleMessage("自定义文本"),
"localization_info_enabled": m28,
"localization_info_enabled": m31,
"localization_info_incompatible_translation_params_warning":
MessageLookupByLibrary.simpleMessage(
"USER.cfg 包含不兼容的汉化参数,这可能是以前的汉化文件的残留信息。\n\n这将可能导致汉化无效或乱码,点击确认为您一键移除(不会影响其他配置)。"),
"localization_info_installation_error": m29,
"localization_info_installation_error": m32,
"localization_info_installed":
MessageLookupByLibrary.simpleMessage("已安装"),
"localization_info_installed_version": m30,
"localization_info_installed_version": m33,
"localization_info_language":
MessageLookupByLibrary.simpleMessage("语言: "),
"localization_info_machine_translation_warning":
@ -499,8 +506,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("汉化状态"),
"localization_info_unavailable":
MessageLookupByLibrary.simpleMessage("不可用"),
"localization_info_update_time": m31,
"localization_info_version_number": m32,
"localization_info_update_time": m34,
"localization_info_version_number": m35,
"performance_action_apply": MessageLookupByLibrary.simpleMessage("应用"),
"performance_action_apply_and_clear_shaders":
MessageLookupByLibrary.simpleMessage("应用并清理着色器(推荐)"),
@ -520,7 +527,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(" 恢复默认 "),
"performance_action_super": MessageLookupByLibrary.simpleMessage("超级"),
"performance_info_applied": MessageLookupByLibrary.simpleMessage("已应用"),
"performance_info_current_status": m33,
"performance_info_current_status": m36,
"performance_info_delete_config_file":
MessageLookupByLibrary.simpleMessage("删除配置文件..."),
"performance_info_done": MessageLookupByLibrary.simpleMessage("完成..."),
@ -532,7 +539,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"该功能对优化显卡瓶颈有很大帮助,但对 CPU 瓶颈可能起反效果,如果您显卡性能强劲,可以尝试使用更好的画质来获得更高的显卡利用率。"),
"performance_info_graphics": MessageLookupByLibrary.simpleMessage("图形"),
"performance_info_min_max_values": m34,
"performance_info_min_max_values": m37,
"performance_info_not_applied":
MessageLookupByLibrary.simpleMessage("未应用"),
"performance_info_shader_clearing_warning":
@ -540,7 +547,7 @@ class MessageLookup extends MessageLookupByLibrary {
"清理着色器后首次进入游戏可能会出现卡顿,请耐心等待游戏初始化完毕。"),
"performance_info_write_out_config_file":
MessageLookupByLibrary.simpleMessage("写出配置文件"),
"performance_title_performance_optimization": m35,
"performance_title_performance_optimization": m38,
"setting_action_clear_translation_file_cache":
MessageLookupByLibrary.simpleMessage("清理汉化文件缓存"),
"setting_action_create_desktop_shortcut":
@ -552,7 +559,7 @@ class MessageLookup extends MessageLookupByLibrary {
"启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 "),
"setting_action_info_autofill_data_cleared":
MessageLookupByLibrary.simpleMessage("已清理自动填充数据"),
"setting_action_info_cache_clearing_info": m36,
"setting_action_info_cache_clearing_info": m39,
"setting_action_info_clear_cache_warning":
MessageLookupByLibrary.simpleMessage("这不会影响已安装的汉化。"),
"setting_action_info_confirm_clear_cache":
@ -564,7 +571,7 @@ class MessageLookup extends MessageLookupByLibrary {
"setting_action_info_delete_local_account_warning":
MessageLookupByLibrary.simpleMessage(
"这将会删除本地的账号记录,或在下次启动游戏时将自动填充选择 ‘否’ 以禁用自动填充。"),
"setting_action_info_device_support_info": m37,
"setting_action_info_device_support_info": m40,
"setting_action_info_disabled":
MessageLookupByLibrary.simpleMessage("已禁用"),
"setting_action_info_enabled":
@ -605,7 +612,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("查看汉化盒子的 log 文件,以定位盒子的 bug"),
"setting_action_reset_auto_password_fill":
MessageLookupByLibrary.simpleMessage("重置自动密码填充"),
"setting_action_set_core_count": m38,
"setting_action_set_core_count": m41,
"setting_action_set_game_file":
MessageLookupByLibrary.simpleMessage("设置游戏文件 StarCitizen.exe"),
"setting_action_set_launcher_file":
@ -622,13 +629,13 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Hosts 加速(实验性)"),
"tools_action_info_cleanup_complete":
MessageLookupByLibrary.simpleMessage("清理完毕,请完成一次安装 / 游戏启动 操作。"),
"tools_action_info_cleanup_failed": m39,
"tools_action_info_cleanup_failed": m42,
"tools_action_info_config_file_not_exist":
MessageLookupByLibrary.simpleMessage("配置文件不存在,请尝试运行一次游戏"),
"tools_action_info_eac_file_removed":
MessageLookupByLibrary.simpleMessage(
"已为您移除 EAC 文件,接下来将为您打开 RSI 启动器,请您前往 SETTINGS -> VERIFY 重装 EAC。"),
"tools_action_info_error_occurred": m40,
"tools_action_info_error_occurred": m43,
"tools_action_info_fix_success_restart":
MessageLookupByLibrary.simpleMessage(
"修复成功,请尝试重启电脑后继续安装游戏! 若注册表修改操作导致其他软件出现兼容问题,请使用 工具 中的 NVME 注册表清理。"),
@ -637,7 +644,7 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_hosts_acceleration_experimental_tip":
MessageLookupByLibrary.simpleMessage(
"将 IP 信息写入 Hosts 文件,解决部分地区的 DNS 污染导致无法登录官网等问题。\n该功能正在进行第一阶段测试,遇到问题请及时反馈。"),
"tools_action_info_init_failed": m41,
"tools_action_info_init_failed": m44,
"tools_action_info_log_file_not_exist":
MessageLookupByLibrary.simpleMessage(
"日志文件不存在,请尝试进行一次游戏启动或游戏安装,并退出启动器,若无法解决问题,请尝试将启动器更新至最新版本!"),
@ -649,7 +656,7 @@ class MessageLookup extends MessageLookupByLibrary {
"手动写入NVM补丁该功能仅在您知道自己在作什么的情况下使用"),
"tools_action_info_not_installed":
MessageLookupByLibrary.simpleMessage("未安装"),
"tools_action_info_nvme_patch_issue": m42,
"tools_action_info_nvme_patch_issue": m45,
"tools_action_info_one_key_close_lens_shake":
MessageLookupByLibrary.simpleMessage(
"一键关闭游戏内镜头晃动以便于摄影操作。\n\n @拉邦那 Lapernum 提供参数信息。"),
@ -662,12 +669,6 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_p4k_file_description":
MessageLookupByLibrary.simpleMessage(
"P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。"),
"tools_action_info_p4k_file_description_part1":
MessageLookupByLibrary.simpleMessage(
"P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。"),
"tools_action_info_p4k_file_description_part2":
MessageLookupByLibrary.simpleMessage(
"\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。"),
"tools_action_info_reinstall_eac": MessageLookupByLibrary.simpleMessage(
"若您遇到 EAC 错误,且自动修复无效,请尝试使用此功能重装 EAC。"),
"tools_action_info_removed_restart_effective":
@ -677,9 +678,7 @@ class MessageLookup extends MessageLookupByLibrary {
"还原镜头摇晃效果。\n\n@拉邦那 Lapernum 提供参数信息。"),
"tools_action_info_rsi_launcher_directory_not_found":
MessageLookupByLibrary.simpleMessage("未找到 RSI 启动器目录,请您尝试手动操作。"),
"tools_action_info_rsi_launcher_log_issue":
MessageLookupByLibrary.simpleMessage(
"在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:{0} MB"),
"tools_action_info_rsi_launcher_log_issue": m46,
"tools_action_info_rsi_launcher_not_found":
MessageLookupByLibrary.simpleMessage(
"未找到 RSI 启动器,请尝试重新安装,或在设置中手动添加。"),
@ -688,11 +687,11 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_run_rsi_as_admin":
MessageLookupByLibrary.simpleMessage(
"以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数,也会在此应用。"),
"tools_action_info_shader_cache_issue": m43,
"tools_action_info_shader_cache_issue": m47,
"tools_action_info_star_citizen_not_found":
MessageLookupByLibrary.simpleMessage(
"未找到星际公民游戏安装位置,请至少完成一次游戏启动操作 或在设置中手动添加。"),
"tools_action_info_system_info_content": m44,
"tools_action_info_system_info_content": m48,
"tools_action_info_system_info_title":
MessageLookupByLibrary.simpleMessage("系统信息"),
"tools_action_info_valid_game_directory_needed":
@ -739,10 +738,12 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("正在写入 Hosts ..."),
"tools_info_game_install_location":
MessageLookupByLibrary.simpleMessage("游戏安装位置: "),
"tools_info_processing_failed": m45,
"tools_info_processing_failed": m49,
"tools_info_rsi_launcher_location":
MessageLookupByLibrary.simpleMessage("RSI启动器位置"),
"tools_info_scanning": MessageLookupByLibrary.simpleMessage("正在扫描..."),
"webview_localization_device_windows_hello_toast":
MessageLookupByLibrary.simpleMessage("请完成 Windows Hello 验证以填充密码"),
"webview_localization_enter_device_pin":
MessageLookupByLibrary.simpleMessage("请输入设备PIN以自动登录RSI账户"),
"webview_localization_finished_invitations":

View File

@ -40,84 +40,94 @@ class MessageLookup extends MessageLookupByLibrary {
static String m9(v0) => "不支持的操作系统:${v0}";
static String m10(v0) => "点击修复为您创建 LIVE 文件夹,完成后重试安装。(${v0})";
static String m10(v0) =>
"为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区(${v0})";
static String m11(v0) => "修复建议: ${v0}";
static String m11(v0) => "中文安装路径!这可能会导致游戏 启动/安装 错误!(${v0}请在RSI启动器更换安装路径。";
static String m12(v0) => "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小${v0}";
static String m12(v0) => "点击修复为您创建 LIVE 文件夹,完成后重试安装。(${v0})";
static String m13(v0) => "请升级您的系统 (${v0})";
static String m13(v0) => "修复建议: ${v0}";
static String m14(v0) => "一键诊断 -> ${v0}";
static String m14(v0) => "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小${v0}";
static String m15(v0, v1) => "下载: ${v0}/s 上传:${v1}/s";
static String m15(v0) => "请升级您的系统 (${v0})";
static String m16(v0) => "已下载:${v0}";
static String m16(v0) => "一键诊断 -> ${v0}";
static String m17(v0) => "状态:${v0}";
static String m17(v0, v1) => "下载: ${v0}/s 上传:${v1}/s";
static String m18(v1) => "总大小:${v1}";
static String m18(v0) => "已下载:${v0}";
static String m19(v0) => "已上传:${v0}";
static String m19(v0) => "下载中... (${v0}%)";
static String m20(v2) => "校验中...${v2}";
static String m20(v0) => "状态:${v0}";
static String m21(v0, v1, v2, v3, v4) =>
static String m21(v1) => "总大小:${v1}";
static String m22(v0) => "已上传:${v0}";
static String m23(v2) => "校验中...${v2}";
static String m24(v0, v1, v2, v3, v4) =>
"游戏非正常退出\nexitCode=${v0}\nstdout=${v1}\nstderr=${v2}\n\n诊断信息:${v3} \n${v4}";
static String m22(v0) => "初始化网页汉化资源失败!${v0}";
static String m25(v0) => "初始化网页汉化资源失败!${v0}";
static String m23(v0) => "扫描完毕,共找到 ${v0} 个有效安装目录";
static String m26(v0) => "扫描完毕,共找到 ${v0} 个有效安装目录";
static String m24(v0) => "您在 ${v0} 安装的汉化有新版本啦!";
static String m27(v0) => "您在 ${v0} 安装的汉化有新版本啦!";
static String m25(v1, v2) =>
static String m28(v1, v2) =>
"RSI 服务器报告版本号:${v1} \n\n本地版本号:${v2} \n\n建议使用 RSI Launcher 更新游戏!";
static String m26(v0) => "通道:${v0}";
static String m29(v0) => "通道:${v0}";
static String m27(v0) => "自定义_${v0}";
static String m30(v0) => "自定义_${v0}";
static String m28(v0) => "启用(${v0}";
static String m31(v0) => "启用(${v0}";
static String m29(v0) => "安装出错!\n\n ${v0}";
static String m32(v0) => "安装出错!\n\n ${v0}";
static String m30(v0) => "已安装版本:${v0}";
static String m33(v0) => "已安装版本:${v0}";
static String m31(v0) => "更新时间:${v0}";
static String m34(v0) => "更新时间:${v0}";
static String m32(v0) => "版本号:${v0}";
static String m35(v0) => "版本号:${v0}";
static String m33(v0) => "当前状态:${v0}";
static String m36(v0) => "当前状态:${v0}";
static String m34(v0, v1, v2) => "${v0} 最小值: ${v1} / 最大值: ${v2}";
static String m37(v0, v1, v2) => "${v0} 最小值: ${v1} / 最大值: ${v2}";
static String m35(v0) => "性能优化 -> ${v0}";
static String m38(v0) => "性能优化 -> ${v0}";
static String m36(v0) => "缓存大小 ${v0}MB清理盒子下载的汉化文件缓存不会影响已安装的汉化";
static String m39(v0) => "缓存大小 ${v0}MB清理盒子下载的汉化文件缓存不会影响已安装的汉化";
static String m37(v0, v1, v2, v3) =>
static String m40(v0, v1, v2, v3) =>
"启用:${v0} 设备支持:${v1} 邮箱:${v2} 密码:${v3}";
static String m38(v0) =>
static String m41(v0) =>
"已设置的核心数量:${v0} (此功能适用于首页的盒子一键启动 或 工具中的RSI启动器管理员模式当为 0 时不启用此功能 ";
static String m39(v0) => "清理失败,请手动移除,文件位置:${v0}";
static String m42(v0) => "清理失败,请手动移除,文件位置:${v0}";
static String m40(v0) => "出现错误:${v0}";
static String m43(v0) => "出现错误:${v0}";
static String m41(v0) => "初始化失败,请截图报告给开发者。${v0}";
static String m44(v0) => "初始化失败,请截图报告给开发者。${v0}";
static String m42(v0) =>
static String m45(v0) =>
"若您使用 nvme 补丁出现问题,请运行此工具。(可能导致游戏 安装/更新 不可用。)\n\n当前补丁状态:${v0}";
static String m43(v0) =>
static String m46(v0) =>
"在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:${v0} MB";
static String m47(v0) =>
"若游戏画面出现异常或版本更新后可使用本工具清理过期的着色器当大于500M时建议清理 \n\n缓存大小:${v0} MB";
static String m44(v0, v1, v2, v3, v4) =>
static String m48(v0, v1, v2, v3, v4) =>
"系统:${v0}\n\n处理器:${v1}\n\n内存大小:${v2}GB\n\n显卡信息:\n${v3}\n\n硬盘信息:\n${v4}\n\n";
static String m45(v0) => "处理失败!:${v0}";
static String m49(v0) => "处理失败!:${v0}";
final messages = _notInlinedMessages(_notInlinedMessages);
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@ -157,6 +167,8 @@ class MessageLookup extends MessageLookupByLibrary {
"app_index_menu_tools": MessageLookupByLibrary.simpleMessage("工具"),
"app_index_version_info": m0,
"app_init_failed_with_reason": m1,
"app_shortcut_name":
MessageLookupByLibrary.simpleMessage("SC汉化盒子DEV.lnk"),
"app_splash_almost_done":
MessageLookupByLibrary.simpleMessage("即将完成..."),
"app_splash_checking_availability":
@ -233,23 +245,19 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("需要帮助? 点击加群寻求免费人工支援!"),
"doctor_info_processing":
MessageLookupByLibrary.simpleMessage("正在处理..."),
"doctor_info_result_add_registry_value":
MessageLookupByLibrary.simpleMessage(
"为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({0})"),
"doctor_info_result_add_registry_value": m10,
"doctor_info_result_chinese_install_path":
MessageLookupByLibrary.simpleMessage("中文安装路径!"),
"doctor_info_result_chinese_install_path_error":
MessageLookupByLibrary.simpleMessage(
"中文安装路径!这可能会导致游戏 启动/安装 错误!({0}请在RSI启动器更换安装路径。"),
"doctor_info_result_chinese_install_path_error": m11,
"doctor_info_result_chinese_username":
MessageLookupByLibrary.simpleMessage("中文用户名!"),
"doctor_info_result_chinese_username_error":
MessageLookupByLibrary.simpleMessage(
"中文用户名可能会导致游戏启动/安装错误! 点击修复按钮查看修改教程!"),
"doctor_info_result_create_live_folder": m10,
"doctor_info_result_create_live_folder": m12,
"doctor_info_result_easyanticheat_not_installed":
MessageLookupByLibrary.simpleMessage("EasyAntiCheat 未安装 或 未正常退出"),
"doctor_info_result_fix_suggestion": m11,
"doctor_info_result_fix_suggestion": m13,
"doctor_info_result_incompatible_nvme_device":
MessageLookupByLibrary.simpleMessage(
"新型 NVME 设备,与 RSI 启动器暂不兼容,可能导致安装失败"),
@ -258,7 +266,7 @@ class MessageLookup extends MessageLookupByLibrary {
"EasyAntiCheat 未安装,请点击修复为您一键安装。(在游戏正常启动并结束前,该问题会一直出现,若您因为其他原因游戏闪退,可忽略此条目)"),
"doctor_info_result_low_physical_memory":
MessageLookupByLibrary.simpleMessage("物理内存过低"),
"doctor_info_result_memory_requirement": m12,
"doctor_info_result_memory_requirement": m14,
"doctor_info_result_missing_easyanticheat_files":
MessageLookupByLibrary.simpleMessage("EasyAntiCheat 文件丢失"),
"doctor_info_result_missing_live_folder":
@ -267,7 +275,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("暂无解决方法,请截图反馈"),
"doctor_info_result_unsupported_os":
MessageLookupByLibrary.simpleMessage("不支持的操作系统,游戏可能无法运行"),
"doctor_info_result_upgrade_system": m13,
"doctor_info_result_upgrade_system": m15,
"doctor_info_result_verify_files_with_rsi_launcher":
MessageLookupByLibrary.simpleMessage(
"未在 LIVE 文件夹找到 EasyAntiCheat 文件 或 文件不完整,请使用 RSI 启动器校验文件"),
@ -278,7 +286,7 @@ class MessageLookup extends MessageLookupByLibrary {
"注意:本工具检测结果仅供参考,若您不理解以下操作,请提供截图给有经验的玩家!"),
"doctor_tip_title_select_game_directory":
MessageLookupByLibrary.simpleMessage("请在首页选择游戏安装目录。"),
"doctor_title_one_click_diagnosis": m14,
"doctor_title_one_click_diagnosis": m16,
"downloader_action_cancel_all":
MessageLookupByLibrary.simpleMessage("全部取消"),
"downloader_action_cancel_download":
@ -304,10 +312,9 @@ class MessageLookup extends MessageLookupByLibrary {
"downloader_info_download_unit_input_prompt":
MessageLookupByLibrary.simpleMessage(
"请输入下载单位1、100k、10m 0或留空为不限速。"),
"downloader_info_download_upload_speed": m15,
"downloader_info_downloaded": m16,
"downloader_info_downloading":
MessageLookupByLibrary.simpleMessage("下载中... ({0}%)"),
"downloader_info_download_upload_speed": m17,
"downloader_info_downloaded": m18,
"downloader_info_downloading": m19,
"downloader_info_downloading_status":
MessageLookupByLibrary.simpleMessage("下载中..."),
"downloader_info_manual_file_deletion_note":
@ -318,10 +325,10 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"SC 汉化盒子使用 p2p 网络来加速文件下载,如果您流量有限,可在此处将上传带宽设置为 1(byte)。"),
"downloader_info_paused": MessageLookupByLibrary.simpleMessage("已暂停"),
"downloader_info_status": m17,
"downloader_info_total_size": m18,
"downloader_info_uploaded": m19,
"downloader_info_verifying": m20,
"downloader_info_status": m20,
"downloader_info_total_size": m21,
"downloader_info_uploaded": m22,
"downloader_info_verifying": m23,
"downloader_info_waiting": MessageLookupByLibrary.simpleMessage("等待中"),
"downloader_input_download_speed_limit":
MessageLookupByLibrary.simpleMessage("下载限速:"),
@ -340,14 +347,14 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("DPS计算器汉化"),
"home_action_external_browser_extension":
MessageLookupByLibrary.simpleMessage("外部浏览器拓展:"),
"home_action_info_abnormal_game_exit": m21,
"home_action_info_abnormal_game_exit": m24,
"home_action_info_check_web_link":
MessageLookupByLibrary.simpleMessage("请查看弹出的网页链接获得详细信息。"),
"home_action_info_engine_config_optimization":
MessageLookupByLibrary.simpleMessage("调整引擎配置文件,优化游戏性能"),
"home_action_info_game_built_in":
MessageLookupByLibrary.simpleMessage("游戏内置"),
"home_action_info_initialization_failed": m22,
"home_action_info_initialization_failed": m25,
"home_action_info_initializing_resources":
MessageLookupByLibrary.simpleMessage("正在初始化汉化资源..."),
"home_action_info_log_file_parse_fail":
@ -360,7 +367,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("快捷安装汉化资源"),
"home_action_info_roberts_space_industries_origin":
MessageLookupByLibrary.simpleMessage("罗伯茨航天工业公司,万物的起源"),
"home_action_info_scan_complete_valid_directories_found": m23,
"home_action_info_scan_complete_valid_directories_found": m26,
"home_action_info_scanning":
MessageLookupByLibrary.simpleMessage("正在扫描 ..."),
"home_action_info_ship_upgrade_damage_value_query":
@ -423,7 +430,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_install_location": MessageLookupByLibrary.simpleMessage("安装位置:"),
"home_localization_new_version_available":
MessageLookupByLibrary.simpleMessage("汉化有新版本!"),
"home_localization_new_version_installed": m24,
"home_localization_new_version_installed": m27,
"home_login_action_title_box_one_click_launch":
MessageLookupByLibrary.simpleMessage("盒子一键启动"),
"home_login_action_title_need_webview2_runtime":
@ -440,7 +447,7 @@ class MessageLookup extends MessageLookupByLibrary {
"home_login_info_password_encryption_notice":
MessageLookupByLibrary.simpleMessage(
"盒子将使用 PIN 与 Windows 凭据加密保存您的密码,密码只存储在您的设备中。\n\n当下次登录需要输入密码时您只需授权PIN即可自动填充登录。"),
"home_login_info_rsi_server_report": m25,
"home_login_info_rsi_server_report": m28,
"home_login_title_launching_game":
MessageLookupByLibrary.simpleMessage("正在为您启动游戏..."),
"home_login_title_welcome_back":
@ -462,12 +469,12 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("汉化反馈"),
"localization_action_uninstall_translation":
MessageLookupByLibrary.simpleMessage("卸载汉化"),
"localization_info_channel": m26,
"localization_info_channel": m29,
"localization_info_community_translation":
MessageLookupByLibrary.simpleMessage("社区汉化"),
"localization_info_corrupted_file":
MessageLookupByLibrary.simpleMessage("文件受损,请重新下载"),
"localization_info_custom_file": m27,
"localization_info_custom_file": m30,
"localization_info_custom_file_instructions":
MessageLookupByLibrary.simpleMessage(
"即将打开本地化文件夹,请将自定义的 任意名称.ini 文件放入 Customize_ini 文件夹。\n\n添加新文件后未显示请使用右上角刷新按钮。\n\n安装时请确保选择了正确的语言。"),
@ -475,14 +482,14 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("自定义文件"),
"localization_info_custom_text":
MessageLookupByLibrary.simpleMessage("自定义文本"),
"localization_info_enabled": m28,
"localization_info_enabled": m31,
"localization_info_incompatible_translation_params_warning":
MessageLookupByLibrary.simpleMessage(
"USER.cfg 包含不兼容的汉化参数,这可能是以前的汉化文件的残留信息。\n\n这将可能导致汉化无效或乱码,点击确认为您一键移除(不会影响其他配置)。"),
"localization_info_installation_error": m29,
"localization_info_installation_error": m32,
"localization_info_installed":
MessageLookupByLibrary.simpleMessage("已安装"),
"localization_info_installed_version": m30,
"localization_info_installed_version": m33,
"localization_info_language":
MessageLookupByLibrary.simpleMessage("语言: "),
"localization_info_machine_translation_warning":
@ -499,8 +506,8 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("汉化状态"),
"localization_info_unavailable":
MessageLookupByLibrary.simpleMessage("不可用"),
"localization_info_update_time": m31,
"localization_info_version_number": m32,
"localization_info_update_time": m34,
"localization_info_version_number": m35,
"performance_action_apply": MessageLookupByLibrary.simpleMessage("应用"),
"performance_action_apply_and_clear_shaders":
MessageLookupByLibrary.simpleMessage("应用并清理着色器(推荐)"),
@ -520,7 +527,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(" 恢复默认 "),
"performance_action_super": MessageLookupByLibrary.simpleMessage("超级"),
"performance_info_applied": MessageLookupByLibrary.simpleMessage("已应用"),
"performance_info_current_status": m33,
"performance_info_current_status": m36,
"performance_info_delete_config_file":
MessageLookupByLibrary.simpleMessage("删除配置文件..."),
"performance_info_done": MessageLookupByLibrary.simpleMessage("完成..."),
@ -532,7 +539,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage(
"该功能对优化显卡瓶颈有很大帮助,但对 CPU 瓶颈可能起反效果,如果您显卡性能强劲,可以尝试使用更好的画质来获得更高的显卡利用率。"),
"performance_info_graphics": MessageLookupByLibrary.simpleMessage("图形"),
"performance_info_min_max_values": m34,
"performance_info_min_max_values": m37,
"performance_info_not_applied":
MessageLookupByLibrary.simpleMessage("未应用"),
"performance_info_shader_clearing_warning":
@ -540,7 +547,7 @@ class MessageLookup extends MessageLookupByLibrary {
"清理着色器后首次进入游戏可能会出现卡顿,请耐心等待游戏初始化完毕。"),
"performance_info_write_out_config_file":
MessageLookupByLibrary.simpleMessage("写出配置文件"),
"performance_title_performance_optimization": m35,
"performance_title_performance_optimization": m38,
"setting_action_clear_translation_file_cache":
MessageLookupByLibrary.simpleMessage("清理汉化文件缓存"),
"setting_action_create_desktop_shortcut":
@ -552,7 +559,7 @@ class MessageLookup extends MessageLookupByLibrary {
"启动游戏时忽略能效核心( 适用于Intel 12th+ 处理器 "),
"setting_action_info_autofill_data_cleared":
MessageLookupByLibrary.simpleMessage("已清理自动填充数据"),
"setting_action_info_cache_clearing_info": m36,
"setting_action_info_cache_clearing_info": m39,
"setting_action_info_clear_cache_warning":
MessageLookupByLibrary.simpleMessage("这不会影响已安装的汉化。"),
"setting_action_info_confirm_clear_cache":
@ -564,7 +571,7 @@ class MessageLookup extends MessageLookupByLibrary {
"setting_action_info_delete_local_account_warning":
MessageLookupByLibrary.simpleMessage(
"这将会删除本地的账号记录,或在下次启动游戏时将自动填充选择 ‘否’ 以禁用自动填充。"),
"setting_action_info_device_support_info": m37,
"setting_action_info_device_support_info": m40,
"setting_action_info_disabled":
MessageLookupByLibrary.simpleMessage("已禁用"),
"setting_action_info_enabled":
@ -605,7 +612,7 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("查看汉化盒子的 log 文件,以定位盒子的 bug"),
"setting_action_reset_auto_password_fill":
MessageLookupByLibrary.simpleMessage("重置自动密码填充"),
"setting_action_set_core_count": m38,
"setting_action_set_core_count": m41,
"setting_action_set_game_file":
MessageLookupByLibrary.simpleMessage("设置游戏文件 StarCitizen.exe"),
"setting_action_set_launcher_file":
@ -622,13 +629,13 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("Hosts 加速(实验性)"),
"tools_action_info_cleanup_complete":
MessageLookupByLibrary.simpleMessage("清理完毕,请完成一次安装 / 游戏启动 操作。"),
"tools_action_info_cleanup_failed": m39,
"tools_action_info_cleanup_failed": m42,
"tools_action_info_config_file_not_exist":
MessageLookupByLibrary.simpleMessage("配置文件不存在,请尝试运行一次游戏"),
"tools_action_info_eac_file_removed":
MessageLookupByLibrary.simpleMessage(
"已为您移除 EAC 文件,接下来将为您打开 RSI 启动器,请您前往 SETTINGS -> VERIFY 重装 EAC。"),
"tools_action_info_error_occurred": m40,
"tools_action_info_error_occurred": m43,
"tools_action_info_fix_success_restart":
MessageLookupByLibrary.simpleMessage(
"修复成功,请尝试重启电脑后继续安装游戏! 若注册表修改操作导致其他软件出现兼容问题,请使用 工具 中的 NVME 注册表清理。"),
@ -637,7 +644,7 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_hosts_acceleration_experimental_tip":
MessageLookupByLibrary.simpleMessage(
"将 IP 信息写入 Hosts 文件,解决部分地区的 DNS 污染导致无法登录官网等问题。\n该功能正在进行第一阶段测试,遇到问题请及时反馈。"),
"tools_action_info_init_failed": m41,
"tools_action_info_init_failed": m44,
"tools_action_info_log_file_not_exist":
MessageLookupByLibrary.simpleMessage(
"日志文件不存在,请尝试进行一次游戏启动或游戏安装,并退出启动器,若无法解决问题,请尝试将启动器更新至最新版本!"),
@ -649,7 +656,7 @@ class MessageLookup extends MessageLookupByLibrary {
"手动写入NVM补丁该功能仅在您知道自己在作什么的情况下使用"),
"tools_action_info_not_installed":
MessageLookupByLibrary.simpleMessage("未安装"),
"tools_action_info_nvme_patch_issue": m42,
"tools_action_info_nvme_patch_issue": m45,
"tools_action_info_one_key_close_lens_shake":
MessageLookupByLibrary.simpleMessage(
"一键关闭游戏内镜头晃动以便于摄影操作。\n\n @拉邦那 Lapernum 提供参数信息。"),
@ -662,12 +669,6 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_p4k_file_description":
MessageLookupByLibrary.simpleMessage(
"P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。"),
"tools_action_info_p4k_file_description_part1":
MessageLookupByLibrary.simpleMessage(
"P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。"),
"tools_action_info_p4k_file_description_part2":
MessageLookupByLibrary.simpleMessage(
"\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。"),
"tools_action_info_reinstall_eac": MessageLookupByLibrary.simpleMessage(
"若您遇到 EAC 错误,且自动修复无效,请尝试使用此功能重装 EAC。"),
"tools_action_info_removed_restart_effective":
@ -677,9 +678,7 @@ class MessageLookup extends MessageLookupByLibrary {
"还原镜头摇晃效果。\n\n@拉邦那 Lapernum 提供参数信息。"),
"tools_action_info_rsi_launcher_directory_not_found":
MessageLookupByLibrary.simpleMessage("未找到 RSI 启动器目录,请您尝试手动操作。"),
"tools_action_info_rsi_launcher_log_issue":
MessageLookupByLibrary.simpleMessage(
"在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:{0} MB"),
"tools_action_info_rsi_launcher_log_issue": m46,
"tools_action_info_rsi_launcher_not_found":
MessageLookupByLibrary.simpleMessage(
"未找到 RSI 启动器,请尝试重新安装,或在设置中手动添加。"),
@ -688,11 +687,11 @@ class MessageLookup extends MessageLookupByLibrary {
"tools_action_info_run_rsi_as_admin":
MessageLookupByLibrary.simpleMessage(
"以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数,也会在此应用。"),
"tools_action_info_shader_cache_issue": m43,
"tools_action_info_shader_cache_issue": m47,
"tools_action_info_star_citizen_not_found":
MessageLookupByLibrary.simpleMessage(
"未找到星际公民游戏安装位置,请至少完成一次游戏启动操作 或在设置中手动添加。"),
"tools_action_info_system_info_content": m44,
"tools_action_info_system_info_content": m48,
"tools_action_info_system_info_title":
MessageLookupByLibrary.simpleMessage("系统信息"),
"tools_action_info_valid_game_directory_needed":
@ -739,10 +738,12 @@ class MessageLookup extends MessageLookupByLibrary {
MessageLookupByLibrary.simpleMessage("正在写入 Hosts ..."),
"tools_info_game_install_location":
MessageLookupByLibrary.simpleMessage("游戏安装位置: "),
"tools_info_processing_failed": m45,
"tools_info_processing_failed": m49,
"tools_info_rsi_launcher_location":
MessageLookupByLibrary.simpleMessage("RSI启动器位置"),
"tools_info_scanning": MessageLookupByLibrary.simpleMessage("正在扫描..."),
"webview_localization_device_windows_hello_toast":
MessageLookupByLibrary.simpleMessage("请完成 Windows Hello 验证以填充密码"),
"webview_localization_enter_device_pin":
MessageLookupByLibrary.simpleMessage("请输入设备PIN以自动登录RSI账户"),
"webview_localization_finished_invitations":

View File

@ -60,6 +60,16 @@ class S {
);
}
/// `SC汉化盒子DEV.lnk`
String get app_shortcut_name {
return Intl.message(
'SC汉化盒子DEV.lnk',
name: 'app_shortcut_name',
desc: '',
args: [],
);
}
/// ``
String get about_check_update {
return Intl.message(
@ -470,13 +480,13 @@ class S {
);
}
/// `... ({0}%)`
String get downloader_info_downloading {
/// `... ({v0}%)`
String downloader_info_downloading(Object v0) {
return Intl.message(
'下载中... ({0}%)',
'下载中... ($v0%)',
name: 'downloader_info_downloading',
desc: '',
args: [],
args: [v0],
);
}
@ -860,13 +870,13 @@ class S {
);
}
/// ` ForcedPhysicalSectorSizeInBytes ({0})`
String get doctor_info_result_add_registry_value {
/// ` ForcedPhysicalSectorSizeInBytes ({v0})`
String doctor_info_result_add_registry_value(Object v0) {
return Intl.message(
'为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({0})',
'为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区($v0)',
name: 'doctor_info_result_add_registry_value',
desc: '',
args: [],
args: [v0],
);
}
@ -940,13 +950,13 @@ class S {
);
}
/// ` / {0}RSI启动器更换安装路径`
String get doctor_info_result_chinese_install_path_error {
/// ` / {v0}RSI启动器更换安装路径`
String doctor_info_result_chinese_install_path_error(Object v0) {
return Intl.message(
'中文安装路径!这可能会导致游戏 启动/安装 错误!({0}请在RSI启动器更换安装路径。',
'中文安装路径!这可能会导致游戏 启动/安装 错误!($v0请在RSI启动器更换安装路径。',
name: 'doctor_info_result_chinese_install_path_error',
desc: '',
args: [],
args: [v0],
);
}
@ -2992,13 +3002,13 @@ class S {
);
}
/// ` RSI启动器 log 使 log \n\n当前日志文件大小{0} MB`
String get tools_action_info_rsi_launcher_log_issue {
/// ` RSI启动器 log 使 log \n\n当前日志文件大小{v0} MB`
String tools_action_info_rsi_launcher_log_issue(Object v0) {
return Intl.message(
'在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:{0} MB',
'在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:$v0 MB',
name: 'tools_action_info_rsi_launcher_log_issue',
desc: '',
args: [],
args: [v0],
);
}
@ -3273,26 +3283,6 @@ class S {
);
}
/// `P4k 100GB+线p4k文件下载超级慢的用户 p4k `
String get tools_action_info_p4k_file_description_part1 {
return Intl.message(
'P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。',
name: 'tools_action_info_p4k_file_description_part1',
desc: '',
args: [],
);
}
/// `\n\n接下来会弹窗询问您保存位置 P4K LIVE 使`
String get tools_action_info_p4k_file_description_part2 {
return Intl.message(
'\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。',
name: 'tools_action_info_p4k_file_description_part2',
desc: '',
args: [],
);
}
/// `p4k下载任务正在进行中`
String get tools_action_info_p4k_download_in_progress {
return Intl.message(
@ -3382,6 +3372,16 @@ class S {
args: [],
);
}
/// ` Windows Hello `
String get webview_localization_device_windows_hello_toast {
return Intl.message(
'请完成 Windows Hello 验证以填充密码',
name: 'webview_localization_device_windows_hello_toast',
desc: '',
args: [],
);
}
}
class AppLocalizationDelegate extends LocalizationsDelegate<S> {

View File

@ -0,0 +1,4 @@
class NoL10n {
static const String langZHS = '简体中文';
static const String langZHT = '繁體中文';
}

View File

@ -1,6 +1,7 @@
{
"@@locale": "en",
"app_index_version_info": "SC汉化盒子 V{v0} {v1}",
"app_shortcut_name": "SC汉化盒子DEV.lnk",
"about_check_update": "检查更新",
"about_app_description": "不仅仅是汉化!\n\nSC汉化盒子是你探索宇宙的好帮手我们致力于为各位公民解决游戏中的常见问题并为社区汉化、性能调优、常用网站汉化 等操作提供便利。",
"about_online_feedback": "在线反馈",
@ -42,7 +43,7 @@
"downloader_info_no_download_tasks": "无下载任务",
"downloader_info_total_size": "总大小:{v1}",
"downloader_info_verifying": "校验中...{v2}",
"downloader_info_downloading": "下载中... ({0}%)",
"downloader_info_downloading": "下载中... ({v0}%)",
"downloader_info_status": "状态:{v0}",
"downloader_info_uploaded": "已上传:{v0}",
"downloader_info_downloaded": "已下载:{v0}",
@ -81,7 +82,7 @@
"doctor_info_result_missing_live_folder": "安装目录缺少LIVE文件夹可能导致安装失败",
"doctor_info_result_create_live_folder": "点击修复为您创建 LIVE 文件夹,完成后重试安装。({v0})",
"doctor_info_result_incompatible_nvme_device": "新型 NVME 设备,与 RSI 启动器暂不兼容,可能导致安装失败",
"doctor_info_result_add_registry_value": "为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({0})",
"doctor_info_result_add_registry_value": "为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({v0})",
"doctor_info_result_missing_easyanticheat_files": "EasyAntiCheat 文件丢失",
"doctor_info_result_verify_files_with_rsi_launcher": "未在 LIVE 文件夹找到 EasyAntiCheat 文件 或 文件不完整,请使用 RSI 启动器校验文件",
"doctor_info_result_easyanticheat_not_installed": "EasyAntiCheat 未安装 或 未正常退出",
@ -89,7 +90,7 @@
"doctor_info_result_chinese_username": "中文用户名!",
"doctor_info_result_chinese_username_error": "中文用户名可能会导致游戏启动/安装错误! 点击修复按钮查看修改教程!",
"doctor_info_result_chinese_install_path": "中文安装路径!",
"doctor_info_result_chinese_install_path_error": "中文安装路径!这可能会导致游戏 启动/安装 错误!({0}请在RSI启动器更换安装路径。",
"doctor_info_result_chinese_install_path_error": "中文安装路径!这可能会导致游戏 启动/安装 错误!({v0}请在RSI启动器更换安装路径。",
"doctor_info_result_low_physical_memory": "物理内存过低",
"doctor_info_result_memory_requirement": "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小{v0}",
"doctor_info_result_fix_suggestion": "修复建议: {v0}",
@ -294,7 +295,7 @@
"tools_action_info_run_rsi_as_admin": "以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数也会在此应用。",
"tools_action_info_init_failed": "初始化失败,请截图报告给开发者。{v0}",
"tools_action_rsi_launcher_log_fix": "RSI Launcher Log 修复",
"tools_action_info_rsi_launcher_log_issue": "在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小{0} MB",
"tools_action_info_rsi_launcher_log_issue": "在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小{v0} MB",
"tools_action_remove_nvme_registry_patch": "移除 nvme 注册表补丁",
"tools_action_info_nvme_patch_issue": "若您使用 nvme 补丁出现问题,请运行此工具。(可能导致游戏 安装/更新 不可用。)\n\n当前补丁状态{v0}",
"tools_action_info_not_installed": "未安装",
@ -322,8 +323,6 @@
"tools_action_info_system_info_title": "系统信息",
"tools_action_info_rsi_launcher_running_warning": "RSI启动器正在运行请先关闭启动器再使用此功能",
"tools_action_info_p4k_file_description": "P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。\n\n接下来会弹窗询问您保存位置可以选择星际公民文件夹也可以选择别处下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。",
"tools_action_info_p4k_file_description_part1": "P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。",
"tools_action_info_p4k_file_description_part2": "\n\n接下来会弹窗询问您保存位置可以选择星际公民文件夹也可以选择别处下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。",
"tools_action_info_p4k_download_in_progress": "已经有一个p4k下载任务正在进行中请前往下载管理器查看",
"tools_action_info_function_under_maintenance": "功能维护中,请稍后重试!",
"tools_action_info_config_file_not_exist": "配置文件不存在,请尝试运行一次游戏",
@ -332,5 +331,6 @@
"webview_localization_unfinished_invitations": "未完成的邀请",
"webview_localization_finished_invitations": "已完成的邀请",
"app_init_failed_with_reason": "初始化失败:{v0}",
"webview_localization_enter_device_pin": "请输入设备PIN以自动登录RSI账户"
"webview_localization_enter_device_pin": "请输入设备PIN以自动登录RSI账户",
"webview_localization_device_windows_hello_toast": "请完成 Windows Hello 验证以填充密码"
}

View File

@ -1,6 +1,7 @@
{
"@@locale": "zh_CN",
"app_index_version_info": "SC汉化盒子 V{v0} {v1}",
"app_shortcut_name": "SC汉化盒子DEV.lnk",
"about_check_update": "检查更新",
"about_app_description": "不仅仅是汉化!\n\nSC汉化盒子是你探索宇宙的好帮手我们致力于为各位公民解决游戏中的常见问题并为社区汉化、性能调优、常用网站汉化 等操作提供便利。",
"about_online_feedback": "在线反馈",
@ -42,7 +43,7 @@
"downloader_info_no_download_tasks": "无下载任务",
"downloader_info_total_size": "总大小:{v1}",
"downloader_info_verifying": "校验中...{v2}",
"downloader_info_downloading": "下载中... ({0}%)",
"downloader_info_downloading": "下载中... ({v0}%)",
"downloader_info_status": "状态:{v0}",
"downloader_info_uploaded": "已上传:{v0}",
"downloader_info_downloaded": "已下载:{v0}",
@ -81,7 +82,7 @@
"doctor_info_result_missing_live_folder": "安装目录缺少LIVE文件夹可能导致安装失败",
"doctor_info_result_create_live_folder": "点击修复为您创建 LIVE 文件夹,完成后重试安装。({v0})",
"doctor_info_result_incompatible_nvme_device": "新型 NVME 设备,与 RSI 启动器暂不兼容,可能导致安装失败",
"doctor_info_result_add_registry_value": "为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({0})",
"doctor_info_result_add_registry_value": "为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区({v0})",
"doctor_info_result_missing_easyanticheat_files": "EasyAntiCheat 文件丢失",
"doctor_info_result_verify_files_with_rsi_launcher": "未在 LIVE 文件夹找到 EasyAntiCheat 文件 或 文件不完整,请使用 RSI 启动器校验文件",
"doctor_info_result_easyanticheat_not_installed": "EasyAntiCheat 未安装 或 未正常退出",
@ -89,7 +90,7 @@
"doctor_info_result_chinese_username": "中文用户名!",
"doctor_info_result_chinese_username_error": "中文用户名可能会导致游戏启动/安装错误! 点击修复按钮查看修改教程!",
"doctor_info_result_chinese_install_path": "中文安装路径!",
"doctor_info_result_chinese_install_path_error": "中文安装路径!这可能会导致游戏 启动/安装 错误!({0}请在RSI启动器更换安装路径。",
"doctor_info_result_chinese_install_path_error": "中文安装路径!这可能会导致游戏 启动/安装 错误!({v0}请在RSI启动器更换安装路径。",
"doctor_info_result_low_physical_memory": "物理内存过低",
"doctor_info_result_memory_requirement": "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小{v0}",
"doctor_info_result_fix_suggestion": "修复建议: {v0}",
@ -294,7 +295,7 @@
"tools_action_info_run_rsi_as_admin": "以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数也会在此应用。",
"tools_action_info_init_failed": "初始化失败,请截图报告给开发者。{v0}",
"tools_action_rsi_launcher_log_fix": "RSI Launcher Log 修复",
"tools_action_info_rsi_launcher_log_issue": "在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小{0} MB",
"tools_action_info_rsi_launcher_log_issue": "在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小{v0} MB",
"tools_action_remove_nvme_registry_patch": "移除 nvme 注册表补丁",
"tools_action_info_nvme_patch_issue": "若您使用 nvme 补丁出现问题,请运行此工具。(可能导致游戏 安装/更新 不可用。)\n\n当前补丁状态{v0}",
"tools_action_info_not_installed": "未安装",
@ -322,8 +323,6 @@
"tools_action_info_system_info_title": "系统信息",
"tools_action_info_rsi_launcher_running_warning": "RSI启动器正在运行请先关闭启动器再使用此功能",
"tools_action_info_p4k_file_description": "P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。\n\n接下来会弹窗询问您保存位置可以选择星际公民文件夹也可以选择别处下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。",
"tools_action_info_p4k_file_description_part1": "P4k 是星际公民的核心游戏文件,高达 100GB+盒子提供的离线下载是为了帮助一些p4k文件下载超级慢的用户 或用于修复官方启动器无法修复的 p4k 文件。",
"tools_action_info_p4k_file_description_part2": "\n\n接下来会弹窗询问您保存位置可以选择星际公民文件夹也可以选择别处下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。",
"tools_action_info_p4k_download_in_progress": "已经有一个p4k下载任务正在进行中请前往下载管理器查看",
"tools_action_info_function_under_maintenance": "功能维护中,请稍后重试!",
"tools_action_info_config_file_not_exist": "配置文件不存在,请尝试运行一次游戏",
@ -332,5 +331,6 @@
"webview_localization_unfinished_invitations": "未完成的邀请",
"webview_localization_finished_invitations": "已完成的邀请",
"app_init_failed_with_reason": "初始化失败:{v0}",
"webview_localization_enter_device_pin": "请输入设备PIN以自动登录RSI账户"
"webview_localization_enter_device_pin": "请输入设备PIN以自动登录RSI账户",
"webview_localization_device_windows_hello_toast": "请完成 Windows Hello 验证以填充密码"
}

View File

@ -25,13 +25,14 @@ class AboutUI extends HookConsumerWidget {
const SizedBox(height: 32),
Image.asset("assets/app_logo.png", width: 128, height: 128),
const SizedBox(height: 6),
const Text(
"SC汉化盒子 V${ConstConf.appVersion} ${ConstConf.isMSE ? "" : " +Dev"}",
style: TextStyle(fontSize: 18)),
Text(
S.current.app_index_version_info(
ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev"),
style: const TextStyle(fontSize: 18)),
const SizedBox(height: 12),
Button(
onPressed: () => _onCheckUpdate(context, ref),
child: Padding(
child: Padding(
padding: const EdgeInsets.all(4),
child: Text(S.current.about_check_update),
)),
@ -45,7 +46,7 @@ class AboutUI extends HookConsumerWidget {
child: Column(
children: [
Text(
"不仅仅是汉化!\n\nSC汉化盒子是你探索宇宙的好帮手我们致力于为各位公民解决游戏中的常见问题并为社区汉化、性能调优、常用网站汉化 等操作提供便利。",
S.current.about_app_description,
style: TextStyle(
fontSize: 14, color: Colors.white.withOpacity(.9)),
),
@ -172,8 +173,7 @@ class AboutUI extends HookConsumerWidget {
static const tipTextEN =
"This is an unofficial Star Citizen fan-made tools, not affiliated with the Cloud Imperium group of companies. All content on this Software not authored by its host or users are property of their respective owners. \nStar Citizen®, Roberts Space Industries® and Cloud Imperium® are registered trademarks of Cloud Imperium Rights LLC.";
static const tipTextCN =
"这是一个非官方的星际公民工具,不隶属于 Cloud Imperium 公司集团。 本软件中非由其主机或用户创作的所有内容均为其各自所有者的财产。 \nStar Citizen®、Roberts Space Industries® 和 Cloud Imperium® 是 Cloud Imperium Rights LLC 的注册商标。";
static String get tipTextCN => S.current.about_disclaimer;
Widget makeAnalyticsWidget(BuildContext context) {
return LoadingWidget(
@ -239,7 +239,8 @@ class AboutUI extends HookConsumerWidget {
fontSize: 20,
),
),
Text(" ${name == "firstLaunch" ? "" : ""}")
Text(
" ${name == "firstLaunch" ? S.current.about_analytics_units_user : S.current.about_analytics_units_times}"),
],
),
],
@ -260,4 +261,4 @@ class AboutUI extends HookConsumerWidget {
}
}
}
}
}

View File

@ -99,8 +99,7 @@ class HomeGameLoginUIModel extends _$HomeGameLoginUIModel {
final ok = await showConfirmDialogs(
context,
S.current.home_action_q_auto_password_fill_prompt,
const Text(
"盒子将使用 PIN 与 Windows 凭据加密保存您的密码,密码只存储在您的设备中。\n\n当下次登录需要输入密码时您只需授权PIN即可自动填充登录。"));
Text(S.current.home_login_info_password_encryption_notice));
if (ok == true) {
if (await _localAuth.authenticate(
localizedReason:
@ -131,8 +130,9 @@ class HomeGameLoginUIModel extends _$HomeGameLoginUIModel {
final ok = await showConfirmDialogs(
context,
S.current.home_login_info_game_version_outdated,
Text(
"RSI 服务器报告版本号:${releaseInfo?["versionLabel"]} \n\n本地版本号:${buildInfo["RequestedP4ChangeNum"]} \n\n建议使用 RSI Launcher 更新游戏!"),
Text(S.current.home_login_info_rsi_server_report(
releaseInfo?["versionLabel"],
buildInfo["RequestedP4ChangeNum"])),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .4),
cancel: S.current.home_login_info_action_ignore);
@ -165,10 +165,9 @@ class HomeGameLoginUIModel extends _$HomeGameLoginUIModel {
final ok = await showConfirmDialogs(
context,
S.current.home_login_action_title_box_one_click_launch,
const Text(
"本功能可以帮您更加便利的启动游戏。\n\n为确保账户安全 ,本功能使用汉化浏览器保留登录状态,且不会保存您的密码信息(除非你启用了自动填充功能)。"
"\n\n使用此功能登录账号时请确保您的 SC汉化盒子 是从可信任的来源下载。",
style: TextStyle(fontSize: 16),
Text(
S.current.home_login_info_one_click_launch_description,
style: const TextStyle(fontSize: 16),
),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .6));
@ -183,8 +182,8 @@ class HomeGameLoginUIModel extends _$HomeGameLoginUIModel {
}
if (!await WebviewWindow.isWebviewAvailable()) {
if (!context.mounted) return;
await showToast(context,
S.current.home_login_action_title_need_webview2_runtime);
await showToast(
context, S.current.home_login_action_title_need_webview2_runtime);
if (!context.mounted) return;
await launchUrlString(
"https://developer.microsoft.com/en-us/microsoft-edge/webview2/");

View File

@ -24,13 +24,17 @@ class HomeDownloaderUI extends HookConsumerWidget {
const SizedBox(width: 24),
const SizedBox(width: 12),
for (final item in <MapEntry<String, IconData>, String>{
const MapEntry("settings", FluentIcons.settings): S.current.downloader_speed_limit_settings,
const MapEntry("settings", FluentIcons.settings):
S.current.downloader_speed_limit_settings,
if (state.tasks.isNotEmpty)
const MapEntry("pause_all", FluentIcons.pause): S.current.downloader_action_pause_all,
const MapEntry("pause_all", FluentIcons.pause):
S.current.downloader_action_pause_all,
if (state.waitingTasks.isNotEmpty)
const MapEntry("resume_all", FluentIcons.download): S.current.downloader_action_resume_all,
const MapEntry("resume_all", FluentIcons.download):
S.current.downloader_action_resume_all,
if (state.tasks.isNotEmpty || state.waitingTasks.isNotEmpty)
const MapEntry("cancel_all", FluentIcons.cancel): S.current.downloader_action_cancel_all,
const MapEntry("cancel_all", FluentIcons.cancel):
S.current.downloader_action_cancel_all,
}.entries)
Padding(
padding: const EdgeInsets.only(left: 6, right: 6),
@ -119,7 +123,9 @@ class HomeDownloaderUI extends HookConsumerWidget {
Row(
children: [
Text(
"总大小:${FileSize.getSize(task.totalLength ?? 0)}",
S.current.downloader_info_total_size(
FileSize.getSize(
task.totalLength ?? 0)),
style: const TextStyle(fontSize: 14),
),
const SizedBox(width: 12),
@ -127,17 +133,22 @@ class HomeDownloaderUI extends HookConsumerWidget {
task.verifiedLength != null &&
task.verifiedLength != 0)
Text(
"校验中...${FileSize.getSize(task.verifiedLength)}",
S.current.downloader_info_verifying(
FileSize.getSize(
task.verifiedLength)),
style: const TextStyle(fontSize: 14),
)
else if (task.status == "active")
Text(
"下载中... (${((task.completedLength ?? 0) * 100 / (task.totalLength ?? 1)).toStringAsFixed(4)}%)")
Text(S.current
.downloader_info_downloading(
((task.completedLength ?? 0) *
100 /
(task.totalLength ?? 1))
.toStringAsFixed(4)))
else
Text(
"状态:${model.statusMap[task.status]}",
style: const TextStyle(fontSize: 14),
),
Text(S.current.downloader_info_status(
model.statusMap[task.status] ??
"Unknown")),
const SizedBox(width: 24),
if (task.status == "active" &&
task.verifiedLength == null)
@ -151,10 +162,10 @@ class HomeDownloaderUI extends HookConsumerWidget {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"已上传:${FileSize.getSize(task.uploadLength)}"),
Text(
"已下载:${FileSize.getSize(task.completedLength)}"),
Text(S.current.downloader_info_uploaded(
FileSize.getSize(task.uploadLength))),
Text(S.current.downloader_info_downloaded(
FileSize.getSize(task.completedLength))),
],
),
const SizedBox(width: 18),
@ -173,20 +184,23 @@ class HomeDownloaderUI extends HookConsumerWidget {
closeAfterClick: false,
title: Padding(
padding: const EdgeInsets.all(3),
child: Text(S.current.downloader_action_options),
child:
Text(S.current.downloader_action_options),
),
items: [
if (task.status == "paused")
MenuFlyoutItem(
leading:
const Icon(FluentIcons.download),
text: Text(S.current.downloader_action_continue_download),
text: Text(S.current
.downloader_action_continue_download),
onPressed: () =>
model.resumeTask(task.gid))
else if (task.status == "active")
MenuFlyoutItem(
leading: const Icon(FluentIcons.pause),
text: Text(S.current.downloader_action_pause_download),
text: Text(S.current
.downloader_action_pause_download),
onPressed: () =>
model.pauseTask(task.gid)),
const MenuFlyoutSeparator(),
@ -195,7 +209,8 @@ class HomeDownloaderUI extends HookConsumerWidget {
FluentIcons.chrome_close,
size: 14,
),
text: Text(S.current.downloader_action_cancel_download),
text: Text(S.current
.downloader_action_cancel_download),
onPressed: () =>
model.cancelTask(context, task.gid)),
MenuFlyoutItem(
@ -231,10 +246,9 @@ class HomeDownloaderUI extends HookConsumerWidget {
),
),
const SizedBox(width: 12),
Text(
"下载: ${FileSize.getSize(state.globalStat?.downloadSpeed ?? 0)}/s 上传:${FileSize.getSize(state.globalStat?.uploadSpeed ?? 0)}/s",
style: const TextStyle(fontSize: 12),
)
Text(S.current.downloader_info_download_upload_speed(
FileSize.getSize(state.globalStat?.downloadSpeed ?? 0),
FileSize.getSize(state.globalStat?.uploadSpeed ?? 0)))
],
),
),
@ -243,4 +257,4 @@ class HomeDownloaderUI extends HookConsumerWidget {
),
useBodyContainer: true);
}
}
}

View File

@ -79,7 +79,9 @@ class HomeDownloaderUIModel extends _$HomeDownloaderUIModel {
return;
case "cancel_all":
final userOK = await showConfirmDialogs(
context, "确认取消全部任务?", Text(S.current.downloader_info_manual_file_deletion_note));
context,
S.current.downloader_action_confirm_cancel_all_tasks,
Text(S.current.downloader_info_manual_file_deletion_note));
if (userOK == true) {
if (!aria2cState.isRunning) return;
try {
@ -170,7 +172,9 @@ class HomeDownloaderUIModel extends _$HomeDownloaderUIModel {
if (gid != null) {
if (!context.mounted) return;
final ok = await showConfirmDialogs(
context, "确认取消下载?", Text(S.current.downloader_info_manual_file_deletion_note));
context,
S.current.downloader_action_confirm_cancel_download,
Text(S.current.downloader_info_manual_file_deletion_note));
if (ok == true) {
final aria2c = ref.read(aria2cModelProvider).aria2c;
await aria2c?.remove(gid);
@ -303,4 +307,4 @@ class HomeDownloaderUIModel extends _$HomeDownloaderUIModel {
}
}
}
}
}

View File

@ -30,7 +30,8 @@ class HomeGameDoctorUI extends HookConsumerWidget {
}, []);
return makeDefaultPage(context,
title: "一键诊断 -> ${homeState.scInstalledPath}",
title: S.current
.doctor_title_one_click_diagnosis(homeState.scInstalledPath ?? ""),
useBodyContainer: true,
content: Stack(
children: [
@ -40,7 +41,7 @@ class HomeGameDoctorUI extends HookConsumerWidget {
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
for (final item in {
for (final item in {
"rsi_log": S.current.doctor_action_rsi_launcher_log,
"game_log": S.current.doctor_action_game_run_log,
}.entries)
@ -82,7 +83,8 @@ class HomeGameDoctorUI extends HookConsumerWidget {
mainAxisSize: MainAxisSize.min,
children: [
const SizedBox(height: 12),
Text(S.current.doctor_info_scan_complete_no_issues, maxLines: 1),
Text(S.current.doctor_info_scan_complete_no_issues,
maxLines: 1),
const SizedBox(height: 64),
],
),
@ -121,8 +123,8 @@ class HomeGameDoctorUI extends HookConsumerWidget {
Widget makeRescueBanner(BuildContext context) {
return GestureDetector(
onTap: () async {
await showToast(context,
S.current.doctor_info_game_rescue_service_note);
await showToast(
context, S.current.doctor_info_game_rescue_service_note);
launchUrlString(
"https://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=-M4wEme_bCXbUGT4LFKLH0bAYTFt70Ad&authKey=vHVr0TNgRmKu%2BHwywoJV6EiLa7La2VX74Vkyixr05KA0H9TqB6qWlCdY%2B9jLQ4Ha&noverify=0&group_code=536454632");
},
@ -175,22 +177,26 @@ class HomeGameDoctorUI extends HookConsumerWidget {
Widget makeResultItem(BuildContext context, MapEntry<String, String> item,
HomeGameDoctorState state, HomeGameDoctorUIModel model) {
final errorNames = {
"unSupport_system":
MapEntry("不支持的操作系统,游戏可能无法运行", "请升级您的系统 (${item.value})"),
"unSupport_system": MapEntry(S.current.doctor_info_result_unsupported_os,
S.current.doctor_info_result_upgrade_system(item.value)),
"no_live_path": MapEntry(S.current.doctor_info_result_missing_live_folder,
"点击修复为您创建 LIVE 文件夹,完成后重试安装。(${item.value})"),
"nvme_PhysicalBytes": MapEntry(S.current.doctor_info_result_incompatible_nvme_device,
"为注册表项添加 ForcedPhysicalSectorSizeInBytes 值 模拟旧设备。硬盘分区(${item.value})"),
"eac_file_miss": MapEntry(S.current.doctor_info_result_missing_easyanticheat_files,
S.current.doctor_info_result_create_live_folder(item.value)),
"nvme_PhysicalBytes": MapEntry(
S.current.doctor_info_result_incompatible_nvme_device,
S.current.doctor_info_result_add_registry_value(item.value)),
"eac_file_miss": MapEntry(
S.current.doctor_info_result_missing_easyanticheat_files,
S.current.doctor_info_result_verify_files_with_rsi_launcher),
"eac_not_install": MapEntry(S.current.doctor_info_result_easyanticheat_not_installed,
"eac_not_install": MapEntry(
S.current.doctor_info_result_easyanticheat_not_installed,
S.current.doctor_info_result_install_easyanticheat),
"cn_user_name":
MapEntry("中文用户名!", S.current.doctor_info_result_chinese_username_error),
"cn_install_path": MapEntry(S.current.doctor_info_result_chinese_install_path,
"中文安装路径!这可能会导致游戏 启动/安装 错误!(${item.value}请在RSI启动器更换安装路径。"),
"low_ram": MapEntry(
"物理内存过低", "您至少需要 16GB 的物理内存Memory才可运行此游戏。当前大小${item.value}"),
"cn_user_name": MapEntry(S.current.doctor_info_result_chinese_username,
S.current.doctor_info_result_chinese_username_error),
"cn_install_path": MapEntry(
S.current.doctor_info_result_chinese_install_path,
S.current.doctor_info_result_chinese_install_path_error(item.value)),
"low_ram": MapEntry(S.current.doctor_info_result_low_physical_memory,
S.current.doctor_info_result_memory_requirement(item.value)),
};
bool isCheckedError = errorNames.containsKey(item.key);
@ -211,7 +217,9 @@ class HomeGameDoctorUI extends HookConsumerWidget {
children: [
const SizedBox(height: 4),
Text(
"修复建议: ${errorNames[item.key]?.value ?? "暂无解决方法,请截图反馈"}",
S.current.doctor_info_result_fix_suggestion(
errorNames[item.key]?.value ??
S.current.doctor_info_result_no_solution),
style: TextStyle(
fontSize: 14, color: Colors.white.withOpacity(.7)),
),
@ -225,7 +233,8 @@ class HomeGameDoctorUI extends HookConsumerWidget {
await model.doFix(context, item);
},
child: Padding(
padding: const EdgeInsets.only(left: 8, right: 8, top: 4, bottom: 4),
padding:
const EdgeInsets.only(left: 8, right: 8, top: 4, bottom: 4),
child: Text(S.current.doctor_info_action_fix),
),
),
@ -263,8 +272,8 @@ class HomeGameDoctorUI extends HookConsumerWidget {
launchUrlString(item.value);
},
child: Padding(
padding:
const EdgeInsets.only(left: 8, right: 8, top: 4, bottom: 4),
padding: const EdgeInsets.only(
left: 8, right: 8, top: 4, bottom: 4),
child: Text(S.current.doctor_action_view_solution),
),
)
@ -291,4 +300,4 @@ class HomeGameDoctorUI extends HookConsumerWidget {
return;
}
}
}
}

View File

@ -49,29 +49,30 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
try {
await Directory(item.value).create(recursive: true);
if (!context.mounted) break;
showToast(context, S.current.doctor_action_result_create_folder_success);
showToast(
context, S.current.doctor_action_result_create_folder_success);
checkResult.remove(item);
state = state.copyWith(checkResult: checkResult);
} catch (e) {
showToast(context, "创建文件夹失败,请尝试手动创建。\n目录:${item.value} \n错误:$e");
showToast(context,
S.current.doctor_action_result_create_folder_fail(item.value, e));
}
break;
case "nvme_PhysicalBytes":
final r = await SystemHelper.addNvmePatch();
if (r == "") {
if (!context.mounted) break;
showToast(context,
S.current.doctor_action_result_fix_success);
showToast(context, S.current.doctor_action_result_fix_success);
checkResult.remove(item);
state = state.copyWith(checkResult: checkResult);
} else {
if (!context.mounted) break;
showToast(context, "修复失败,$r");
showToast(context, S.current.doctor_action_result_fix_fail(r));
}
break;
case "eac_file_miss":
showToast(
context, S.current.doctor_info_result_verify_files_with_rsi_launcher);
showToast(context,
S.current.doctor_info_result_verify_files_with_rsi_launcher);
break;
case "eac_not_install":
final eacJsonPath = "${item.value}\\Settings.json";
@ -84,16 +85,18 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
dPrint("${item.value}\\EasyAntiCheat_EOS_Setup.exe install $eacID");
if (result.stderr == "") {
if (!context.mounted) break;
showToast(context, S.current.doctor_action_result_game_start_success);
showToast(
context, S.current.doctor_action_result_game_start_success);
checkResult.remove(item);
state = state.copyWith(checkResult: checkResult);
} else {
if (!context.mounted) break;
showToast(context, "修复失败,${result.stderr}");
showToast(context,
S.current.doctor_action_result_fix_fail(result.stderr));
}
} catch (e) {
if (!context.mounted) break;
showToast(context, "修复失败,$e");
showToast(context, S.current.doctor_action_result_fix_fail(e));
}
break;
case "cn_user_name":
@ -112,7 +115,8 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
// ignore: avoid_build_context_in_providers
doCheck(BuildContext context) async {
if (state.isChecking) return;
state = state.copyWith(isChecking: true, lastScreenInfo: S.current.doctor_action_analyzing);
state = state.copyWith(
isChecking: true, lastScreenInfo: S.current.doctor_action_analyzing);
dPrint("-------- start docker check -----");
if (!context.mounted) return;
await _statCheck(context);
@ -140,7 +144,9 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
final lastScreenInfo = S.current.doctor_action_result_analysis_no_issue;
state = state.copyWith(checkResult: null, lastScreenInfo: lastScreenInfo);
} else {
final lastScreenInfo = "分析完毕,发现 ${checkResult.length} 个问题";
final lastScreenInfo = S.current
.doctor_action_result_analysis_issues_found(
checkResult.length.toString());
state = state.copyWith(
checkResult: checkResult, lastScreenInfo: lastScreenInfo);
}
@ -162,10 +168,13 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
final info = SCLoggerHelper.getGameRunningLogInfo(logs);
if (info != null) {
if (info.key != "_") {
checkResult.add(MapEntry("游戏异常退出:${info.key}", info.value));
checkResult.add(MapEntry(
S.current.doctor_action_info_game_abnormal_exit(info..key),
info.value));
} else {
checkResult
.add(MapEntry("游戏异常退出:未知异常", "info:${info.value},请点击右下角加群反馈。"));
checkResult.add(MapEntry(
S.current.doctor_action_info_game_abnormal_exit_unknown,
S.current.doctor_action_info_info_feedback(info.value)));
}
}
}
@ -212,7 +221,8 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
Platform.operatingSystemVersion.contains("Windows 11"))) {
checkResult
.add(MapEntry("unSupport_system", Platform.operatingSystemVersion));
final lastScreenInfo = "不支持的操作系统:${Platform.operatingSystemVersion}";
final lastScreenInfo = S.current.doctor_action_result_info_unsupported_os(
Platform.operatingSystemVersion);
state = state.copyWith(lastScreenInfo: lastScreenInfo);
await showToast(context, lastScreenInfo);
}
@ -226,7 +236,8 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
if (ramSize < 16) {
checkResult.add(MapEntry("low_ram", "$ramSize"));
}
state = state.copyWith(lastScreenInfo: S.current.doctor_action_info_checking_install_info);
state = state.copyWith(
lastScreenInfo: S.current.doctor_action_info_checking_install_info);
//
try {
final listData = await SCLoggerHelper.getGameInstallPath(
@ -270,4 +281,4 @@ class HomeGameDoctorUIModel extends _$HomeGameDoctorUIModel {
dPrint(e);
}
}
}
}

View File

@ -207,10 +207,13 @@ class HomeUI extends HookConsumerWidget {
colorFilter: makeSvgColor(Colors.white),
height: 18,
),
name: S.current.home_action_star_citizen_website_localization,
webTitle: S.current.home_action_star_citizen_website_localization,
name: S.current
.home_action_star_citizen_website_localization,
webTitle: S.current
.home_action_star_citizen_website_localization,
webURL: "https://robertsspaceindustries.com",
info: S.current.home_action_info_roberts_space_industries_origin,
info: S.current
.home_action_info_roberts_space_industries_origin,
useLocalization: true,
width: width,
touchKey: "webLocalization_rsi"),
@ -228,7 +231,8 @@ class HomeUI extends HookConsumerWidget {
name: S.current.home_action_uex_localization,
webTitle: S.current.home_action_uex_localization,
webURL: "https://uexcorp.space/",
info: S.current.home_action_info_mining_refining_trade_calculator,
info: S.current
.home_action_info_mining_refining_trade_calculator,
useLocalization: true,
width: width,
touchKey: "webLocalization_uex"),
@ -244,9 +248,11 @@ class HomeUI extends HookConsumerWidget {
],
),
name: S.current.home_action_dps_calculator_localization,
webTitle: S.current.home_action_dps_calculator_localization,
webTitle:
S.current.home_action_dps_calculator_localization,
webURL: "https://www.erkul.games/live/calculator",
info: S.current.home_action_info_ship_upgrade_damage_value_query,
info: S.current
.home_action_info_ship_upgrade_damage_value_query,
useLocalization: true,
width: width,
touchKey: "webLocalization_dps"),
@ -434,11 +440,20 @@ class HomeUI extends HookConsumerWidget {
Widget makeIndexActionLists(BuildContext context, HomeUIModel model,
HomeUIModelState homeState, WidgetRef ref) {
final items = [
_HomeItemData("game_doctor", "一键诊断", S.current.home_action_info_one_click_diagnosis_star_citizen,
_HomeItemData(
"game_doctor",
S.current.home_action_one_click_diagnosis,
S.current.home_action_info_one_click_diagnosis_star_citizen,
FluentIcons.auto_deploy_settings),
_HomeItemData(
"localization", "汉化管理", S.current.home_action_info_quick_install_localization_resources, FluentIcons.locale_language),
_HomeItemData("performance", "性能优化", S.current.home_action_info_engine_config_optimization,
"localization",
S.current.home_action_localization_management,
S.current.home_action_info_quick_install_localization_resources,
FluentIcons.locale_language),
_HomeItemData(
"performance",
S.current.home_action_performance_optimization,
S.current.home_action_info_engine_config_optimization,
FluentIcons.process_meta_task),
];
return Padding(
@ -591,7 +606,8 @@ class HomeUI extends HookConsumerWidget {
double width, HomeUIModelState homeState) {
final statusCnName = {
"Platform": S.current.home_action_rsi_status_platform,
"Persistent Universe": S.current.home_action_rsi_status_persistent_universe,
"Persistent Universe":
S.current.home_action_rsi_status_persistent_universe,
"Electronic Access": S.current.home_action_rsi_status_electronic_access,
"Arena Commander": S.current.home_action_rsi_status_arena_commander
};
@ -601,7 +617,9 @@ class HomeUI extends HookConsumerWidget {
borderRadius: BorderRadius.circular(12),
child: GestureDetector(
onTap: () {
model.goWebView(context, S.current.home_action_rsi_status_rsi_server_status,
model.goWebView(
context,
S.current.home_action_rsi_status_rsi_server_status,
"https://status.robertsspaceindustries.com/",
useLocalization: true);
},
@ -741,7 +759,8 @@ class HomeUI extends HookConsumerWidget {
context: context,
builder: (context) {
return HomeMdContentDialogUI(
title: homeState.appPlacardData?.title ?? S.current.home_announcement_details,
title: homeState.appPlacardData?.title ??
S.current.home_announcement_details,
url: homeState.appPlacardData?.link,
);
});
@ -757,7 +776,7 @@ class HomeUI extends HookConsumerWidget {
_onMenuTap(BuildContext context, String key, HomeUIModelState homeState,
WidgetRef ref) async {
String gameInstallReqInfo =
"该功能需要一个有效的安装位置\n\n如果您的游戏未下载完成,请等待下载完毕后使用此功能。\n\n如果您的游戏已下载完毕但未识别,请启动一次游戏后重新打开盒子 或 在设置选项中手动设置安装位置。";
S.current.home_action_info_valid_install_location_required;
switch (key) {
case "localization":
if (homeState.scInstalledPath == "not_install") {
@ -786,4 +805,4 @@ class _HomeItemData {
String name;
String infoString;
IconData icon;
}
}

View File

@ -91,7 +91,9 @@ class HomeUIModel extends _$HomeUIModel {
if (scInstallPaths.isNotEmpty) {
scInstalledPath = scInstallPaths.first;
}
final lastScreenInfo = "扫描完毕,共找到 ${scInstallPaths.length} 个有效安装目录";
final lastScreenInfo = S.current
.home_action_info_scan_complete_valid_directories_found(
scInstallPaths.length.toString());
state = state.copyWith(
scInstalledPath: scInstalledPath,
scInstallPaths: scInstallPaths,
@ -141,10 +143,9 @@ class HomeUIModel extends _$HomeUIModel {
final ok = await showConfirmDialogs(
context,
S.current.home_action_title_star_citizen_website_localization,
const Text(
"本插功能件仅供大致浏览使用,不对任何有关本功能产生的问题负责!在涉及账号操作前请注意确认网站的原本内容!"
"\n\n\n使用此功能登录账号时请确保您的 SC汉化盒子 是从可信任的来源下载。",
style: TextStyle(fontSize: 16),
Text(
S.current.home_action_info_web_localization_plugin_disclaimer,
style: const TextStyle(fontSize: 16),
),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .6));
@ -159,8 +160,8 @@ class HomeUIModel extends _$HomeUIModel {
}
if (!await WebviewWindow.isWebviewAvailable()) {
if (!context.mounted) return;
showToast(context,
S.current.home_login_action_title_need_webview2_runtime);
showToast(
context, S.current.home_login_action_title_need_webview2_runtime);
launchUrlString(
"https://developer.microsoft.com/en-us/microsoft-edge/webview2/");
return;
@ -171,13 +172,12 @@ class HomeUIModel extends _$HomeUIModel {
if (useLocalization) {
state = state.copyWith(
isFixing: true,
isFixingString:
S.current.home_action_info_initializing_resources);
isFixingString: S.current.home_action_info_initializing_resources);
try {
await webViewModel.initLocalization(state.webLocalizationVersionsData!);
} catch (e) {
if (!context.mounted) return;
showToast(context, "初始化网页汉化资源失败!$e");
showToast(context, S.current.home_action_info_initialization_failed(e));
}
state = state.copyWith(isFixingString: "", isFixing: false);
}
@ -294,7 +294,8 @@ class HomeUIModel extends _$HomeUIModel {
if (toastContent != null) {
final xmlNodeList = toastContent.getElementsByTagName('text');
final title = S.current.home_localization_new_version_available;
final content = '您在 ${updates.first} 安装的汉化有新版本啦!';
final content =
S.current.home_localization_new_version_installed(updates.first);
xmlNodeList.item(0)?.appendChild(toastContent.createTextNode(title));
xmlNodeList
.item(1)
@ -329,8 +330,7 @@ class HomeUIModel extends _$HomeUIModel {
final ok = await showConfirmDialogs(
context,
S.current.home_info_one_click_launch_warning,
const Text("为确保账户安全,一键启动功能已在开发版中禁用,我们将在微软商店版本中提供此功能。"
"\n\n微软商店版由微软提供可靠的分发下载与数字签名,可有效防止软件被恶意篡改。\n\n提示:您无需使用盒子启动游戏也可使用汉化。"),
Text(S.current.home_info_account_security_warning),
confirm: S.current.home_action_install_microsoft_store_version,
cancel: S.current.home_action_cancel);
if (ok == true) {
@ -389,8 +389,21 @@ class HomeUIModel extends _$HomeUIModel {
}
}
if (!context.mounted) return;
showToast(context,
"游戏非正常退出\nexitCode=${result.exitCode}\nstdout=${result.stdout ?? ""}\nstderr=${result.stderr ?? ""}\n\n诊断信息:${exitInfo == null ? "未知错误,请通过一键诊断加群反馈。" : exitInfo.key} \n${hasUrl ? "请查看弹出的网页链接获得详细信息。" : exitInfo?.value ?? ""}");
// showToast(context,
// "游戏非正常退出\nexitCode=${result.exitCode}\nstdout=${result.stdout ?? ""}\nstderr=${result.stderr ?? ""}\n\n诊断信息:${exitInfo == null ? "未知错误,请通过一键诊断加群反馈。" : exitInfo.key} \n${hasUrl ? "请查看弹出的网页链接获得详细信息。" : exitInfo?.value ?? ""}");
// S.current.home_action_info_abnormal_game_exit
showToast(
context,
S.current.home_action_info_abnormal_game_exit(
result.exitCode.toString(),
result.stdout ?? "",
result.stderr ?? "",
exitInfo == null
? S.current.home_action_info_unknown_error
: exitInfo.key,
hasUrl
? S.current.home_action_info_check_web_link
: exitInfo?.value ?? ""));
if (hasUrl) {
await Future.delayed(const Duration(seconds: 3));
launchUrlString(exitInfo!.value);

View File

@ -41,8 +41,8 @@ class LocalizationDialogUI extends HookConsumerWidget {
padding: const EdgeInsets.only(bottom: 12),
child: InfoBar(
title: Text(S.current.home_action_info_warning),
content: Text(
S.current.localization_info_machine_translation_warning),
content: Text(S.current
.localization_info_machine_translation_warning),
severity: InfoBarSeverity.info,
style: InfoBarThemeData(decoration: (severity) {
return const BoxDecoration(
@ -66,8 +66,10 @@ class LocalizationDialogUI extends HookConsumerWidget {
Row(
children: [
Center(
child: Text(
"启用(${LocalizationUIModel.languageSupport[state.selectedLanguage]}"),
child: Text(S.current.localization_info_enabled(
LocalizationUIModel.languageSupport[
state.selectedLanguage] ??
"")),
),
const Spacer(),
ToggleSwitch(
@ -79,7 +81,8 @@ class LocalizationDialogUI extends HookConsumerWidget {
const SizedBox(height: 12),
Row(
children: [
Text("已安装版本:${state.patchStatus?.value}"),
Text(S.current.localization_info_installed_version(
state.patchStatus?.value ?? "")),
const Spacer(),
if (state.patchStatus?.value !=
S.current.home_action_info_game_built_in)
@ -93,8 +96,8 @@ class LocalizationDialogUI extends HookConsumerWidget {
children: [
const Icon(FluentIcons.feedback),
const SizedBox(width: 6),
Text(
S.current.localization_action_translation_feedback),
Text(S.current
.localization_action_translation_feedback),
],
),
)),
@ -107,8 +110,8 @@ class LocalizationDialogUI extends HookConsumerWidget {
children: [
const Icon(FluentIcons.delete),
const SizedBox(width: 6),
Text(
S.current.localization_action_uninstall_translation),
Text(S.current
.localization_action_uninstall_translation),
],
),
)),
@ -185,8 +188,7 @@ class LocalizationDialogUI extends HookConsumerWidget {
? FluentIcons.chevron_up
: FluentIcons.chevron_down),
const SizedBox(width: 12),
Text(
S.current.localization_action_advanced_features),
Text(S.current.localization_action_advanced_features),
],
),
onPressed: model.toggleCustomize),
@ -233,8 +235,8 @@ class LocalizationDialogUI extends HookConsumerWidget {
right: 8,
top: 4,
bottom: 4),
child: Text(
S.current.localization_action_install),
child: Text(S.current
.localization_action_install),
))
],
)
@ -288,17 +290,20 @@ class LocalizationDialogUI extends HookConsumerWidget {
),
const SizedBox(height: 4),
Text(
"版本号:${item.value.versionName}",
S.current.localization_info_version_number(
item.value.versionName ?? ""),
style: TextStyle(color: Colors.white.withOpacity(.6)),
),
const SizedBox(height: 4),
Text(
"通道:${item.value.gameChannel}",
S.current.localization_info_channel(
item.value.gameChannel ?? ""),
style: TextStyle(color: Colors.white.withOpacity(.6)),
),
const SizedBox(height: 4),
Text(
"更新时间:${item.value.updateAt}",
S.current.localization_info_update_time(
item.value.updateAt ?? ""),
style: TextStyle(color: Colors.white.withOpacity(.6)),
),
],
@ -332,7 +337,7 @@ class LocalizationDialogUI extends HookConsumerWidget {
Text(isInstalled
? S.current.localization_info_installed
: ((item.value.enable ?? false)
? "安装"
? S.current.localization_action_install
: S.current.localization_info_unavailable)),
],
),

View File

@ -16,6 +16,7 @@ import 'package:starcitizen_doctor/common/io/rs_http.dart';
import 'package:starcitizen_doctor/common/utils/log.dart';
import 'package:starcitizen_doctor/common/utils/provider.dart';
import 'package:starcitizen_doctor/data/sc_localization_data.dart';
import 'package:starcitizen_doctor/generated/no_l10n_strings.dart';
import 'package:starcitizen_doctor/ui/home/home_ui_model.dart';
import 'package:starcitizen_doctor/widgets/widgets.dart';
import 'package:url_launcher/url_launcher_string.dart';
@ -38,9 +39,9 @@ class LocalizationUIState with _$LocalizationUIState {
@riverpod
class LocalizationUIModel extends _$LocalizationUIModel {
static const languageSupport = {
"chinese_(simplified)": "简体中文",
"chinese_(traditional)": "繁體中文",
static const languageSupport = {
"chinese_(simplified)": NoL10n.langZHS,
"chinese_(traditional)": NoL10n.langZHT,
};
late final _downloadDir =
@ -123,8 +124,8 @@ class LocalizationUIModel extends _$LocalizationUIModel {
final ok = await showConfirmDialogs(
context,
S.current.localization_info_remove_incompatible_translation_params,
const Text(
"USER.cfg 包含不兼容的汉化参数,这可能是以前的汉化文件的残留信息。\n\n这将可能导致汉化无效或乱码,点击确认为您一键移除(不会影响其他配置)。"),
Text(S.current
.localization_info_incompatible_translation_params_warning),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .35));
if (ok == true) {
@ -226,7 +227,9 @@ class LocalizationUIModel extends _$LocalizationUIModel {
state = state.copyWith(workingVersion: filePath);
final str = await f.readAsString();
await _installFormString(
StringBuffer(str), "自定义_${getCustomizeFileName(filePath)}");
StringBuffer(str),
S.current
.localization_info_custom_file(getCustomizeFileName(filePath)));
state = state.copyWith(workingVersion: "");
};
}
@ -256,8 +259,7 @@ class LocalizationUIModel extends _$LocalizationUIModel {
}
openDir(BuildContext context) async {
showToast(context,
"即将打开本地化文件夹,请将自定义的 任意名称.ini 文件放入 Customize_ini 文件夹。\n\n添加新文件后未显示请使用右上角刷新按钮。\n\n安装时请确保选择了正确的语言。");
showToast(context, S.current.localization_info_custom_file_instructions);
await Process.run(SystemHelper.powershellPath,
["explorer.exe", "/select,\"${_customizeDir.absolute.path}\"\\"]);
}
@ -293,7 +295,8 @@ class LocalizationUIModel extends _$LocalizationUIModel {
await _installFormString(globalIni, value.versionName ?? "");
} catch (e) {
if (!context.mounted) return;
await showToast(context, "安装出错!\n\n $e");
await showToast(
context, S.current.localization_info_installation_error(e));
if (await savePath.exists()) await savePath.delete();
}
state = state.copyWith(workingVersion: "");
@ -371,7 +374,9 @@ class LocalizationUIModel extends _$LocalizationUIModel {
static Future<String> _getInstalledIniVersion(String iniPath) async {
final iniFile = File(iniPath);
if (!await iniFile.exists()) return S.current.home_action_info_game_built_in;
if (!await iniFile.exists()) {
return S.current.home_action_info_game_built_in;
}
final iniStringSplit = (await iniFile.readAsString()).split("\n");
for (var i = iniStringSplit.length - 1; i > 0; i--) {
if (iniStringSplit[i]
@ -408,7 +413,9 @@ class LocalizationUIModel extends _$LocalizationUIModel {
if (element.path.contains(lang)) {
final installedVersion =
await _getInstalledIniVersion("${element.path}\\global.ini");
if (installedVersion == S.current.home_action_info_game_built_in) continue;
if (installedVersion == S.current.home_action_info_game_built_in) {
continue;
}
final curData = _allVersionLocalizationData[lang];
dPrint("check Localization update $scInstallPath");
if (!(curData?.keys.contains(installedVersion) ?? false)) {
@ -428,4 +435,4 @@ class LocalizationUIModel extends _$LocalizationUIModel {
}
return updates;
}
}
}

View File

@ -30,10 +30,11 @@ class HomePerformanceUI extends HookConsumerWidget {
children: [
if (state.showGraphicsPerformanceTip)
InfoBar(
title: Text(
S.current.performance_info_graphic_optimization_hint),
title: Text(S.current
.performance_info_graphic_optimization_hint),
content: Text(
S.current.performance_info_graphic_optimization_warning,
S.current
.performance_info_graphic_optimization_warning,
),
onClose: () => model.closeTip(),
),
@ -41,7 +42,10 @@ class HomePerformanceUI extends HookConsumerWidget {
Row(
children: [
Text(
"当前状态:${state.enabled ? "已应用" : "未应用"}",
S.current.performance_info_current_status(
state.enabled
? S.current.performance_info_applied
: S.current.performance_info_not_applied),
style: const TextStyle(fontSize: 18),
),
const SizedBox(width: 32),
@ -66,8 +70,8 @@ class HomePerformanceUI extends HookConsumerWidget {
onPressed: () =>
model.onChangePreProfile(item.key)),
),
Text(
S.current.performance_action_info_preset_only_changes_graphics),
Text(S.current
.performance_action_info_preset_only_changes_graphics),
const Spacer(),
Button(
onPressed: () => model.refresh(),
@ -93,7 +97,8 @@ class HomePerformanceUI extends HookConsumerWidget {
const SizedBox(width: 6),
Button(
child: Text(
S.current.performance_action_apply_and_clear_shaders,
S.current
.performance_action_apply_and_clear_shaders,
style: const TextStyle(fontSize: 16),
),
onPressed: () => model.applyProfile(true)),
@ -138,7 +143,8 @@ class HomePerformanceUI extends HookConsumerWidget {
}
return makeDefaultPage(context,
title: "性能优化 -> ${model.scPath}",
title:
S.current.performance_title_performance_optimization(model.scPath),
useBodyContainer: true,
content: content);
}
@ -246,8 +252,7 @@ class HomePerformanceUI extends HookConsumerWidget {
else if (item.type == "customize")
TextFormBox(
maxLines: 10,
placeholder:
"您可以在这里输入未收录进盒子的自定义参数。配置示例:\n\nr_displayinfo=0\nr_VSync=0",
placeholder: S.current.performance_action_custom_parameters_input,
controller: model.customizeCtrl,
),
if (item.info != null && item.info!.isNotEmpty) ...[
@ -264,7 +269,8 @@ class HomePerformanceUI extends HookConsumerWidget {
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
"${item.key} 最小值: ${item.min} / 最大值: ${item.max}",
S.current.performance_info_min_max_values(
item.key ?? "", item.min ?? "", item.max ?? ""),
style: TextStyle(color: Colors.white.withOpacity(.6)),
)
],

View File

@ -18,57 +18,71 @@ class SettingsUI extends HookConsumerWidget {
margin: const EdgeInsets.all(16),
child: Column(
children: [
makeSettingsItem(const Icon(FluentIcons.link, size: 20), S.current.setting_action_create_settings_shortcut,
subTitle: S.current.setting_action_create_desktop_shortcut, onTap: ()=> model.addShortCut(context)),
makeSettingsItem(const Icon(FluentIcons.link, size: 20),
S.current.setting_action_create_settings_shortcut,
subTitle: S.current.setting_action_create_desktop_shortcut,
onTap: () => model.addShortCut(context)),
if (ConstConf.isMSE) ...[
const SizedBox(height: 12),
makeSettingsItem(
const Icon(FluentIcons.reset_device, size: 20), S.current.setting_action_reset_auto_password_fill,
subTitle:
"启用:${sate.isEnableAutoLogin ? "已启用" : "已禁用"} 设备支持:${sate.isDeviceSupportWinHello ? "支持" : "不支持"} 邮箱:${sate.autoLoginEmail} 密码:${sate.isEnableAutoLoginPwd ? "已加密保存" : "未保存"}",
onTap: ()=> model.onResetAutoLogin(context)),
makeSettingsItem(const Icon(FluentIcons.reset_device, size: 20),
S.current.setting_action_reset_auto_password_fill,
subTitle: S.current.setting_action_info_device_support_info(
sate.isEnableAutoLogin
? S.current.setting_action_info_enabled
: S.current.setting_action_info_disabled,
sate.isDeviceSupportWinHello
? S.current.setting_action_info_support
: S.current.setting_action_info_not_support,
sate.autoLoginEmail,
sate.isEnableAutoLoginPwd
? S.current.setting_action_info_encrypted_saved
: S.current.setting_action_info_not_saved),
onTap: () => model.onResetAutoLogin(context)),
],
const SizedBox(height: 12),
makeSettingsItem(const Icon(FontAwesomeIcons.microchip, size: 20),
S.current.setting_action_ignore_efficiency_cores_on_launch,
subTitle:
"已设置的核心数量:${sate.inputGameLaunchECore} (此功能适用于首页的盒子一键启动 或 工具中的RSI启动器管理员模式当为 0 时不启用此功能 ",
onTap:()=> model.setGameLaunchECore(context)),
subTitle: S.current
.setting_action_set_core_count(sate.inputGameLaunchECore),
onTap: () => model.setGameLaunchECore(context)),
const SizedBox(height: 12),
makeSettingsItem(const Icon(FluentIcons.folder_open, size: 20),
S.current.setting_action_set_launcher_file,
subTitle: sate.customLauncherPath != null
? "${sate.customLauncherPath}"
: S.current.setting_action_info_manual_launcher_location_setting,
onTap: ()=> model.setLauncherPath(context), onDel: () {
model.delName("custom_launcher_path");
}),
: S.current
.setting_action_info_manual_launcher_location_setting,
onTap: () => model.setLauncherPath(context),
onDel: () {
model.delName("custom_launcher_path");
}),
const SizedBox(height: 12),
makeSettingsItem(const Icon(FluentIcons.game, size: 20),
S.current.setting_action_set_game_file,
subTitle: sate.customGamePath != null
? "${sate.customGamePath}"
: S.current.setting_action_info_manual_game_location_setting,
onTap: ()=> model.setGamePath(context), onDel: () {
model.delName("custom_game_path");
}),
onTap: () => model.setGamePath(context),
onDel: () {
model.delName("custom_game_path");
}),
const SizedBox(height: 12),
makeSettingsItem(const Icon(FluentIcons.delete, size: 20), S.current.setting_action_clear_translation_file_cache,
subTitle:
"缓存大小 ${(sate.locationCacheSize / 1024 / 1024).toStringAsFixed(2)}MB清理盒子下载的汉化文件缓存不会影响已安装的汉化",
onTap: ()=> model.cleanLocationCache(context)),
makeSettingsItem(const Icon(FluentIcons.delete, size: 20),
S.current.setting_action_clear_translation_file_cache,
subTitle: S.current.setting_action_info_cache_clearing_info(
(sate.locationCacheSize / 1024 / 1024).toStringAsFixed(2)),
onTap: () => model.cleanLocationCache(context)),
const SizedBox(height: 12),
makeSettingsItem(
const Icon(FluentIcons.speed_high, size: 20), S.current.setting_action_tool_site_access_acceleration,
makeSettingsItem(const Icon(FluentIcons.speed_high, size: 20),
S.current.setting_action_tool_site_access_acceleration,
onTap: () =>
model.onChangeToolSiteMirror(!sate.isEnableToolSiteMirrors),
subTitle:
S.current.setting_action_info_mirror_server_info,
subTitle: S.current.setting_action_info_mirror_server_info,
onSwitch: model.onChangeToolSiteMirror,
switchStatus: sate.isEnableToolSiteMirrors),
const SizedBox(height: 12),
makeSettingsItem(
const Icon(FluentIcons.document_set, size: 20), S.current.setting_action_view_log,
makeSettingsItem(const Icon(FluentIcons.document_set, size: 20),
S.current.setting_action_view_log,
onTap: () => model.showLogs(),
subTitle: S.current.setting_action_info_view_log_file),
],
@ -129,4 +143,4 @@ class SettingsUI extends HookConsumerWidget {
),
);
}
}
}

View File

@ -57,7 +57,9 @@ class SettingsUIModel extends _$SettingsUIModel {
}
Future<void> onResetAutoLogin(BuildContext context) async {
final ok = await showConfirmDialogs(context, S.current.setting_action_info_confirm_reset_autofill,
final ok = await showConfirmDialogs(
context,
S.current.setting_action_info_confirm_reset_autofill,
Text(S.current.setting_action_info_delete_local_account_warning));
if (ok) {
final userBox = await Hive.openBox("rsi_account_data");
@ -90,8 +92,7 @@ class SettingsUIModel extends _$SettingsUIModel {
if (!context.mounted) return;
final input = await showInputDialogs(context,
title: S.current.setting_action_info_enter_cpu_core_to_ignore,
content:
"Tip您的设备拥有几个能效核心就输入几非大小核设备请保持 0\n\n此功能适用于首页的盒子一键启动 或 工具中的 RSI启动器管理员模式当为 0 时不启用此功能。",
content: S.current.setting_action_info_cpu_core_tip,
initialValue: defaultInput,
inputFormatters: [FilteringTextInputFormatter.digitsOnly]);
if (input == null) return;
@ -175,7 +176,9 @@ class SettingsUIModel extends _$SettingsUIModel {
Future<void> cleanLocationCache(BuildContext context) async {
final ok = await showConfirmDialogs(
context, "确认清理汉化缓存?", Text(S.current.setting_action_info_clear_cache_warning));
context,
S.current.setting_action_info_confirm_clear_cache,
Text(S.current.setting_action_info_clear_cache_warning));
if (ok == true) {
final dir =
Directory("${appGlobalState.applicationSupportDir}/Localizations");
@ -187,15 +190,17 @@ class SettingsUIModel extends _$SettingsUIModel {
Future<void> addShortCut(BuildContext context) async {
if (ConstConf.isMSE) {
showToast(context, S.current.setting_action_info_microsoft_version_limitation);
showToast(
context, S.current.setting_action_info_microsoft_version_limitation);
await Future.delayed(const Duration(seconds: 1));
Process.run("explorer.exe", ["shell:AppsFolder"]);
return;
}
dPrint(Platform.resolvedExecutable);
final shortCuntName = S.current.app_shortcut_name;
final script = """
\$targetPath = "${Platform.resolvedExecutable}";
\$shortcutPath = [System.IO.Path]::Combine([System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::DesktopDirectory), "SC汉化盒子DEV.lnk");
\$shortcutPath = [System.IO.Path]::Combine([System.Environment]::GetFolderPath([System.Environment+SpecialFolder]::DesktopDirectory), "$shortCuntName");
\$shell = New-Object -ComObject WScript.Shell
\$shortcut = \$shell.CreateShortcut(\$shortcutPath)
if (\$shortcut -eq \$null) {
@ -228,4 +233,4 @@ class SettingsUIModel extends _$SettingsUIModel {
showLogs() async {
SystemHelper.openDir(getDPrintFile()?.absolute.path.replaceAll("/", "\\"));
}
}
}

View File

@ -44,7 +44,8 @@ class UpgradeDialogUI extends HookConsumerWidget {
return Material(
child: ContentDialog(
title: Text("发现新版本 -> $targetVersion"),
title:
Text(S.current.app_upgrade_title_new_version_found(targetVersion)),
constraints:
BoxConstraints(maxWidth: MediaQuery.of(context).size.width * .55),
content: Column(
@ -64,7 +65,8 @@ class UpgradeDialogUI extends HookConsumerWidget {
children: [
const ProgressRing(),
const SizedBox(height: 16),
Text(S.current.app_upgrade_info_getting_new_version_details)
Text(S.current
.app_upgrade_info_getting_new_version_details)
],
),
)
@ -98,7 +100,8 @@ class UpgradeDialogUI extends HookConsumerWidget {
children: [
Text(progress.value == 100
? S.current.app_upgrade_info_installing
: "正在下载: ${progress.value.toStringAsFixed(2)}% "),
: S.current.app_upgrade_info_downloading(
progress.value.toStringAsFixed(2))),
Expanded(
child: ProgressBar(
value: progress.value == 100 ? null : progress.value,
@ -260,4 +263,4 @@ class UpgradeDialogUI extends HookConsumerWidget {
["explorer.exe", "/select,\"$fileName\""]);
}
}
}
}

View File

@ -51,8 +51,8 @@ class SplashUI extends HookConsumerWidget {
fit: BoxFit.cover,
),
const SizedBox(width: 12),
const Text(
"SC汉化盒子 V${ConstConf.appVersion} ${ConstConf.isMSE ? "" : " Dev"}")
Text(S.current.app_index_version_info(
ConstConf.appVersion, ConstConf.isMSE ? "" : " Dev"))
],
),
));
@ -75,4 +75,4 @@ class SplashUI extends HookConsumerWidget {
if (!context.mounted) return;
context.go("/index");
}
}
}

View File

@ -144,8 +144,7 @@ class ToolsUI extends HookConsumerWidget {
try {
item.onTap?.call();
} catch (e) {
showToast(
context, "处理失败!:$e");
showToast(context, S.current.tools_info_processing_failed(e));
}
},
child: const Padding(

View File

@ -72,21 +72,21 @@ class ToolsUIModel extends _$ToolsUIModel {
ToolsItemData(
"systemnfo",
S.current.tools_action_view_system_info,
"查看系统关键信息,用于快速问诊 \n\n耗时操作,请耐心等待。",
S.current.tools_action_info_view_critical_system_info,
const Icon(FluentIcons.system, size: 24),
onTap: () => _showSystemInfo(context),
),
ToolsItemData(
"p4k_downloader",
S.current.tools_action_p4k_download_repair,
"使用星际公民中文百科提供的分流下载服务,可用于下载或修复 p4k。 \n资源有限,请勿滥用。",
S.current.tools_action_info_p4k_download_repair_tip,
const Icon(FontAwesomeIcons.download, size: 24),
onTap: () => _downloadP4k(context),
),
ToolsItemData(
"hosts_booster",
S.current.tools_action_hosts_acceleration_experimental,
"将 IP 信息写入 Hosts 文件,解决部分地区的 DNS 污染导致无法登录官网等问题。\n该功能正在进行第一阶段测试,遇到问题请及时反馈。",
S.current.tools_action_info_hosts_acceleration_experimental_tip,
const Icon(FluentIcons.virtual_network, size: 24),
onTap: () => _doHostsBooster(context),
),
@ -100,7 +100,7 @@ class ToolsUIModel extends _$ToolsUIModel {
ToolsItemData(
"rsilauncher_admin_mode",
S.current.tools_action_rsi_launcher_admin_mode,
"以管理员身份运行RSI启动器可能会解决一些问题。\n\n若设置了能效核心屏蔽参数,也会在此应用。",
S.current.tools_action_info_run_rsi_as_admin,
const Icon(FluentIcons.admin, size: 24),
onTap: () => _adminRSILauncher(context),
),
@ -121,7 +121,7 @@ class ToolsUIModel extends _$ToolsUIModel {
state = state.copyWith(items: items, isItemLoading: false);
} catch (e) {
if (!context.mounted) return;
showToast(context, "初始化失败,请截图报告给开发者。$e");
showToast(context, S.current.tools_action_info_init_failed(e));
}
}
@ -137,7 +137,8 @@ class ToolsUIModel extends _$ToolsUIModel {
ToolsItemData(
"rsilauncher_log_fix",
S.current.tools_action_rsi_launcher_log_fix,
"在某些情况下 RSI启动器 的 log 文件会损坏,导致无法完成问题扫描,使用此工具清理损坏的 log 文件。\n\n当前日志文件大小:${(logPathLen.toStringAsFixed(4))} MB",
S.current.tools_action_info_rsi_launcher_log_issue(
logPathLen.toStringAsFixed(4)),
const Icon(FontAwesomeIcons.bookBible, size: 24),
onTap: () => _rsiLogFix(context),
),
@ -151,7 +152,9 @@ class ToolsUIModel extends _$ToolsUIModel {
ToolsItemData(
"remove_nvme_settings",
S.current.tools_action_remove_nvme_registry_patch,
"若您使用 nvme 补丁出现问题,请运行此工具。(可能导致游戏 安装/更新 不可用。)\n\n当前补丁状态:${(nvmePatchStatus) ? "已安装" : "未安装"}",
S.current.tools_action_info_nvme_patch_issue(nvmePatchStatus
? S.current.localization_info_installed
: S.current.tools_action_info_not_installed),
const Icon(FluentIcons.hard_drive, size: 24),
onTap: nvmePatchStatus
? () async {
@ -159,7 +162,8 @@ class ToolsUIModel extends _$ToolsUIModel {
await SystemHelper.doRemoveNvmePath();
state = state.copyWith(working: false);
if (!context.mounted) return;
showToast(context, S.current.tools_action_info_removed_restart_effective);
showToast(context,
S.current.tools_action_info_removed_restart_effective);
loadToolsCard(context, skipPathScan: true);
}
: null,
@ -175,11 +179,11 @@ class ToolsUIModel extends _$ToolsUIModel {
final r = await SystemHelper.addNvmePatch();
if (r == "") {
if (!context.mounted) return;
showToast(context,
S.current.tools_action_info_fix_success_restart);
showToast(
context, S.current.tools_action_info_fix_success_restart);
} else {
if (!context.mounted) return;
showToast(context, "修复失败,$r");
showToast(context, S.current.doctor_action_result_fix_fail(r));
}
state = state.copyWith(working: false);
loadToolsCard(context, skipPathScan: true);
@ -190,12 +194,15 @@ class ToolsUIModel extends _$ToolsUIModel {
Future<ToolsItemData> _addShaderCard(BuildContext context) async {
final gameShaderCachePath = await SCLoggerHelper.getShaderCachePath();
final shaderSize = ((await SystemHelper.getDirLen(gameShaderCachePath ?? "",
skipPath: ["$gameShaderCachePath\\Crashes"])) /
1024 /
1024)
.toStringAsFixed(4);
return ToolsItemData(
"clean_shaders",
S.current.tools_action_clear_shader_cache,
"若游戏画面出现异常或版本更新后可使用本工具清理过期的着色器当大于500M时建议清理 \n\n缓存大小:${((await SystemHelper.getDirLen(gameShaderCachePath ?? "", skipPath: [
"$gameShaderCachePath\\Crashes"
])) / 1024 / 1024).toStringAsFixed(4)} MB",
S.current.tools_action_info_shader_cache_issue(shaderSize),
const Icon(FontAwesomeIcons.shapes, size: 24),
onTap: () => _cleanShaderCache(context),
);
@ -207,10 +214,12 @@ class ToolsUIModel extends _$ToolsUIModel {
return ToolsItemData(
"photography_mode",
isEnable ? "关闭摄影模式" : S.current.tools_action_open_photography_mode,
isEnable
? "还原镜头摇晃效果。\n\n@拉邦那 Lapernum 提供参数信息。"
: "一键${S.current.action_close}游戏内镜头晃动以便于摄影操作。\n\n @拉邦那 Lapernum 提供参数信息。",
? S.current.tools_action_close_photography_mode
: S.current.tools_action_open_photography_mode,
isEnable
? S.current.tools_action_info_restore_lens_shake
: S.current.tools_action_info_one_key_close_lens_shake,
const Icon(FontAwesomeIcons.camera, size: 24),
onTap: () => _onChangePhotographyMode(context, isEnable),
);
@ -255,7 +264,7 @@ class ToolsUIModel extends _$ToolsUIModel {
} catch (e) {
dPrint(e);
if (!context.mounted) return;
showToast(context, "解析 log 文件失败!\n请尝试使用 RSI Launcher log 修复 工具!");
showToast(context, S.current.tools_action_info_log_file_parse_failed);
}
if (rsiLauncherInstalledPath == "") {
@ -271,7 +280,8 @@ class ToolsUIModel extends _$ToolsUIModel {
/// EAC
Future<void> _reinstallEAC(BuildContext context) async {
if (state.scInstalledPath.isEmpty) {
showToast(context, S.current.tools_action_info_valid_game_directory_needed);
showToast(
context, S.current.tools_action_info_valid_game_directory_needed);
return;
}
state = state.copyWith(working: true);
@ -301,28 +311,29 @@ class ToolsUIModel extends _$ToolsUIModel {
await eacLauncher.delete(recursive: true);
}
if (!context.mounted) return;
showToast(context,
S.current.tools_action_info_eac_file_removed);
showToast(context, S.current.tools_action_info_eac_file_removed);
_adminRSILauncher(context);
} catch (e) {
showToast(context, "出现错误:$e");
showToast(context, S.current.tools_action_info_error_occurred(e));
}
state = state.copyWith(working: false);
loadToolsCard(context, skipPathScan: true);
}
Future<String> getSystemInfo() async {
return "系统:${await SystemHelper.getSystemName()}\n\n"
"处理器:${await SystemHelper.getCpuName()}\n\n"
"内存大小:${await SystemHelper.getSystemMemorySizeGB()}GB\n\n"
"显卡信息:\n${await SystemHelper.getGpuInfo()}\n\n"
"硬盘信息:\n${await SystemHelper.getDiskInfo()}\n\n";
return S.current.tools_action_info_system_info_content(
await SystemHelper.getSystemName(),
await SystemHelper.getCpuName(),
await SystemHelper.getSystemMemorySizeGB(),
await SystemHelper.getGpuInfo(),
await SystemHelper.getDiskInfo());
}
/// RSI
Future _adminRSILauncher(BuildContext context) async {
if (state.rsiLauncherInstalledPath == "") {
showToast(context, S.current.tools_action_info_rsi_launcher_directory_not_found);
showToast(context,
S.current.tools_action_info_rsi_launcher_directory_not_found);
}
SystemHelper.checkAndLaunchRSILauncher(state.rsiLauncherInstalledPath);
}
@ -332,8 +343,7 @@ class ToolsUIModel extends _$ToolsUIModel {
final path = await SCLoggerHelper.getLogFilePath();
if (!await File(path!).exists()) {
if (!context.mounted) return;
showToast(
context, S.current.tools_action_info_log_file_not_exist);
showToast(context, S.current.tools_action_info_log_file_not_exist);
return;
}
try {
@ -344,7 +354,7 @@ class ToolsUIModel extends _$ToolsUIModel {
SystemHelper.checkAndLaunchRSILauncher(state.rsiLauncherInstalledPath);
} catch (_) {
if (!context.mounted) return;
showToast(context, "清理失败,请手动移除,文件位置:$path");
showToast(context, S.current.tools_action_info_cleanup_failed(path));
}
state = state.copyWith(working: false);
@ -370,7 +380,8 @@ class ToolsUIModel extends _$ToolsUIModel {
actions: [
FilledButton(
child: Padding(
padding: const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
padding:
const EdgeInsets.only(top: 2, bottom: 2, left: 8, right: 8),
child: Text(S.current.action_close),
),
onPressed: () => Navigator.pop(context),
@ -404,18 +415,15 @@ class ToolsUIModel extends _$ToolsUIModel {
if ((await SystemHelper.getPID("\"RSI Launcher\"")).isNotEmpty) {
if (!context.mounted) return;
showToast(context, S.current.tools_action_info_rsi_launcher_running_warning,
showToast(
context, S.current.tools_action_info_rsi_launcher_running_warning,
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * .35));
return;
}
if (!context.mounted) return;
await showToast(
context,
"${S.current.tools_action_info_p4k_file_description_part1}"
"\n\n接下来会弹窗询问您保存位置(可以选择星际公民文件夹也可以选择别处),下载完成后请确保 P4K 文件夹位于 LIVE 文件夹内,之后使用星际公民启动器校验更新即可。");
await showToast(context, S.current.tools_action_info_p4k_file_description);
try {
state = state.copyWith(working: true);
final aria2cManager = ref.read(aria2cModelProvider.notifier);
@ -431,7 +439,8 @@ class ToolsUIModel extends _$ToolsUIModel {
final t = HomeDownloaderUIModel.getTaskTypeAndName(value);
if (t.key == "torrent" && t.value.contains("Data.p4k")) {
if (!context.mounted) return;
showToast(context, S.current.tools_action_info_p4k_download_in_progress);
showToast(
context, S.current.tools_action_info_p4k_download_in_progress);
state = state.copyWith(working: false);
return;
}
@ -447,7 +456,8 @@ class ToolsUIModel extends _$ToolsUIModel {
if (torrentUrl == "") {
state = state.copyWith(working: false);
if (!context.mounted) return;
showToast(context, S.current.tools_action_info_function_under_maintenance);
showToast(
context, S.current.tools_action_info_function_under_maintenance);
return;
}
@ -486,7 +496,7 @@ class ToolsUIModel extends _$ToolsUIModel {
} catch (e) {
state = state.copyWith(working: false);
if (!context.mounted) return;
showToast(context, "初始化失败!: $e");
showToast(context, S.current.app_init_failed_with_reason(e));
}
await Future.delayed(const Duration(seconds: 3));
launchUrlString(
@ -496,7 +506,7 @@ class ToolsUIModel extends _$ToolsUIModel {
Future<bool> _checkPhotographyStatus(BuildContext context,
{bool? setMode}) async {
final scInstalledPath = state.scInstalledPath;
final keys = ["AudioShakeStrength", "CameraSpringMovement", "ShakeScale"];
final keys = ["AudioShakeStrength", "CameraSpringMovement", "ShakeScale"];
final attributesFile = File(
"$scInstalledPath\\USER\\Client\\0\\Profiles\\default\\attributes.xml");
if (setMode == null) {
@ -564,4 +574,4 @@ class ToolsUIModel extends _$ToolsUIModel {
context: context,
builder: (BuildContext context) => const HostsBoosterDialogUI());
}
}
}

View File

@ -199,7 +199,7 @@ class WebViewModel {
.then((value) => {webview.setWebviewWindowVisibility(false)});
}
} catch (e) {
showToast(context, "初始化失败:$e");
showToast(context, S.current.app_init_failed_with_reason(e));
}
}
@ -317,7 +317,9 @@ class WebViewModel {
webview.evaluateJavaScript("RSIAutoLogin(\"$email\",\"\")");
if (pwdE != "" && nonceStr != "" && macStr != "") {
// send toast
webview.evaluateJavaScript("SCTShowToast(\"请完成 Windows Hello 验证以填充密码\")");
final toastMsg =
S.current.webview_localization_device_windows_hello_toast;
webview.evaluateJavaScript("SCTShowToast(\"$toastMsg\")");
// decrypt
if (await localAuth.authenticate(
localizedReason:

View File

@ -5,10 +5,10 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051
sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7"
url: "https://pub.dev"
source: hosted
version: "64.0.0"
version: "67.0.0"
adaptive_number:
dependency: transitive
description:
@ -21,10 +21,10 @@ packages:
dependency: transitive
description:
name: analyzer
sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893"
sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d"
url: "https://pub.dev"
source: hosted
version: "6.2.0"
version: "6.4.1"
args:
dependency: "direct main"
description:
@ -69,10 +69,10 @@ packages:
dependency: transitive
description:
name: coverage
sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097"
sha256: "8acabb8306b57a409bf4c83522065672ee13179297a6bb0cb9ead73948df7c76"
url: "https://pub.dev"
source: hosted
version: "1.6.3"
version: "1.7.2"
crypto:
dependency: "direct main"
description:
@ -173,10 +173,10 @@ packages:
dependency: transitive
description:
name: js
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.dev"
source: hosted
version: "0.6.7"
version: "0.7.1"
json_annotation:
dependency: transitive
description:
@ -205,26 +205,26 @@ packages:
dependency: transitive
description:
name: matcher
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
url: "https://pub.dev"
source: hosted
version: "0.12.16"
version: "0.12.16+1"
meta:
dependency: transitive
description:
name: meta
sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
url: "https://pub.dev"
source: hosted
version: "1.9.1"
version: "1.12.0"
mime:
dependency: transitive
description:
name: mime
sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
url: "https://pub.dev"
source: hosted
version: "1.0.4"
version: "1.0.5"
node_preamble:
dependency: transitive
description:
@ -365,26 +365,26 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9"
sha256: "7ee446762c2c50b3bd4ea96fe13ffac69919352bd3b4b17bac3f3465edc58073"
url: "https://pub.dev"
source: hosted
version: "1.24.6"
version: "1.25.2"
test_api:
dependency: transitive
description:
name: test_api
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
url: "https://pub.dev"
source: hosted
version: "0.6.1"
version: "0.7.0"
test_core:
dependency: transitive
description:
name: test_core
sha256: "4bef837e56375537055fdbbbf6dd458b1859881f4c7e6da936158f77d61ab265"
sha256: "2bc4b4ecddd75309300d8096f781c0e3280ca1ef85beda558d33fcbedc2eead4"
url: "https://pub.dev"
source: hosted
version: "0.5.6"
version: "0.6.0"
toml:
dependency: "direct main"
description:
@ -413,10 +413,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "0fae432c85c4ea880b33b497d32824b97795b04cdaa74d270219572a1f50268d"
sha256: e7d5ecd604e499358c5fe35ee828c0298a320d54455e791e9dcf73486bc8d9f0
url: "https://pub.dev"
source: hosted
version: "11.9.0"
version: "14.1.0"
watcher:
dependency: transitive
description:
@ -425,22 +425,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.0"
web:
dependency: transitive
description:
name: web
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
url: "https://pub.dev"
source: hosted
version: "0.5.1"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b
sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2"
url: "https://pub.dev"
source: hosted
version: "2.4.0"
version: "2.4.4"
webkit_inspection_protocol:
dependency: transitive
description:
name: webkit_inspection_protocol
sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d"
sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.2.1"
yaml:
dependency: "direct main"
description:
@ -450,4 +458,4 @@ packages:
source: hosted
version: "3.1.2"
sdks:
dart: ">=3.0.0 <4.0.0"
dart: ">=3.3.0 <4.0.0"