diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart index 69d0993..a805a37 100644 --- a/lib/generated/intl/messages_en.dart +++ b/lib/generated/intl/messages_en.dart @@ -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 _notInlinedMessages(_) => { @@ -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": diff --git a/lib/generated/intl/messages_zh_CN.dart b/lib/generated/intl/messages_zh_CN.dart index ea957df..2f6a1b5 100644 --- a/lib/generated/intl/messages_zh_CN.dart +++ b/lib/generated/intl/messages_zh_CN.dart @@ -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 _notInlinedMessages(_) => { @@ -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": diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart index 3fca78a..2a952db 100644 --- a/lib/generated/l10n.dart +++ b/lib/generated/l10n.dart @@ -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 { diff --git a/lib/generated/no_l10n_strings.dart b/lib/generated/no_l10n_strings.dart new file mode 100644 index 0000000..584c3c1 --- /dev/null +++ b/lib/generated/no_l10n_strings.dart @@ -0,0 +1,4 @@ +class NoL10n { + static const String langZHS = '简体中文'; + static const String langZHT = '繁體中文'; +} diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 479da75..f751297 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -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 验证以填充密码" } \ No newline at end of file diff --git a/lib/l10n/intl_zh_CN.arb b/lib/l10n/intl_zh_CN.arb index 7a11458..b2a3b31 100644 --- a/lib/l10n/intl_zh_CN.arb +++ b/lib/l10n/intl_zh_CN.arb @@ -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 验证以填充密码" } \ No newline at end of file diff --git a/lib/ui/about/about_ui.dart b/lib/ui/about/about_ui.dart index 6688b38..ea52913 100644 --- a/lib/ui/about/about_ui.dart +++ b/lib/ui/about/about_ui.dart @@ -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 { } } } -} \ No newline at end of file +} diff --git a/lib/ui/home/dialogs/home_game_login_dialog_ui_model.dart b/lib/ui/home/dialogs/home_game_login_dialog_ui_model.dart index e20dbd4..fd114cb 100644 --- a/lib/ui/home/dialogs/home_game_login_dialog_ui_model.dart +++ b/lib/ui/home/dialogs/home_game_login_dialog_ui_model.dart @@ -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/"); diff --git a/lib/ui/home/downloader/home_downloader_ui.dart b/lib/ui/home/downloader/home_downloader_ui.dart index f956646..5df51c9 100644 --- a/lib/ui/home/downloader/home_downloader_ui.dart +++ b/lib/ui/home/downloader/home_downloader_ui.dart @@ -24,13 +24,17 @@ class HomeDownloaderUI extends HookConsumerWidget { const SizedBox(width: 24), const SizedBox(width: 12), for (final item in , 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); } -} \ No newline at end of file +} diff --git a/lib/ui/home/downloader/home_downloader_ui_model.dart b/lib/ui/home/downloader/home_downloader_ui_model.dart index 3d38ca5..5e2aaf0 100644 --- a/lib/ui/home/downloader/home_downloader_ui_model.dart +++ b/lib/ui/home/downloader/home_downloader_ui_model.dart @@ -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 { } } } -} \ No newline at end of file +} diff --git a/lib/ui/home/game_doctor/game_doctor_ui.dart b/lib/ui/home/game_doctor/game_doctor_ui.dart index 7bba454..906899d 100644 --- a/lib/ui/home/game_doctor/game_doctor_ui.dart +++ b/lib/ui/home/game_doctor/game_doctor_ui.dart @@ -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 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; } } -} \ No newline at end of file +} diff --git a/lib/ui/home/game_doctor/game_doctor_ui_model.dart b/lib/ui/home/game_doctor/game_doctor_ui_model.dart index 89ffbd9..4182284 100644 --- a/lib/ui/home/game_doctor/game_doctor_ui_model.dart +++ b/lib/ui/home/game_doctor/game_doctor_ui_model.dart @@ -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); } } -} \ No newline at end of file +} diff --git a/lib/ui/home/home_ui.dart b/lib/ui/home/home_ui.dart index 1f59ea9..34c672c 100644 --- a/lib/ui/home/home_ui.dart +++ b/lib/ui/home/home_ui.dart @@ -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; -} \ No newline at end of file +} diff --git a/lib/ui/home/home_ui_model.dart b/lib/ui/home/home_ui_model.dart index 825490f..467f229 100644 --- a/lib/ui/home/home_ui_model.dart +++ b/lib/ui/home/home_ui_model.dart @@ -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); diff --git a/lib/ui/home/localization/localization_dialog_ui.dart b/lib/ui/home/localization/localization_dialog_ui.dart index bf6a6e4..947f269 100644 --- a/lib/ui/home/localization/localization_dialog_ui.dart +++ b/lib/ui/home/localization/localization_dialog_ui.dart @@ -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)), ], ), diff --git a/lib/ui/home/localization/localization_ui_model.dart b/lib/ui/home/localization/localization_ui_model.dart index 9611d47..4985531 100644 --- a/lib/ui/home/localization/localization_ui_model.dart +++ b/lib/ui/home/localization/localization_ui_model.dart @@ -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 _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; } -} \ No newline at end of file +} diff --git a/lib/ui/home/performance/performance_ui.dart b/lib/ui/home/performance/performance_ui.dart index 166aa49..b598765 100644 --- a/lib/ui/home/performance/performance_ui.dart +++ b/lib/ui/home/performance/performance_ui.dart @@ -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)), ) ], diff --git a/lib/ui/settings/settings_ui.dart b/lib/ui/settings/settings_ui.dart index 23756ce..d13ebf7 100644 --- a/lib/ui/settings/settings_ui.dart +++ b/lib/ui/settings/settings_ui.dart @@ -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 { ), ); } -} \ No newline at end of file +} diff --git a/lib/ui/settings/settings_ui_model.dart b/lib/ui/settings/settings_ui_model.dart index ecd7448..1cc72c6 100644 --- a/lib/ui/settings/settings_ui_model.dart +++ b/lib/ui/settings/settings_ui_model.dart @@ -57,7 +57,9 @@ class SettingsUIModel extends _$SettingsUIModel { } Future 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 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 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("/", "\\")); } -} \ No newline at end of file +} diff --git a/lib/ui/settings/upgrade_dialog.dart b/lib/ui/settings/upgrade_dialog.dart index 3d4da24..b2e512c 100644 --- a/lib/ui/settings/upgrade_dialog.dart +++ b/lib/ui/settings/upgrade_dialog.dart @@ -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\""]); } } -} \ No newline at end of file +} diff --git a/lib/ui/splash_ui.dart b/lib/ui/splash_ui.dart index f9cbc75..6c1f21d 100644 --- a/lib/ui/splash_ui.dart +++ b/lib/ui/splash_ui.dart @@ -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"); } -} \ No newline at end of file +} diff --git a/lib/ui/tools/tools_ui.dart b/lib/ui/tools/tools_ui.dart index 7100ee7..69dc876 100644 --- a/lib/ui/tools/tools_ui.dart +++ b/lib/ui/tools/tools_ui.dart @@ -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( diff --git a/lib/ui/tools/tools_ui_model.dart b/lib/ui/tools/tools_ui_model.dart index 5f23fe1..d5e4bd3 100644 --- a/lib/ui/tools/tools_ui_model.dart +++ b/lib/ui/tools/tools_ui_model.dart @@ -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 _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 _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 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 _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()); } -} \ No newline at end of file +} diff --git a/lib/ui/webview/webview.dart b/lib/ui/webview/webview.dart index 709cb46..ae66c41 100644 --- a/lib/ui/webview/webview.dart +++ b/lib/ui/webview/webview.dart @@ -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: diff --git a/rust_builder/cargokit/build_tool/pubspec.lock b/rust_builder/cargokit/build_tool/pubspec.lock index 343bdd3..109e1ac 100644 --- a/rust_builder/cargokit/build_tool/pubspec.lock +++ b/rust_builder/cargokit/build_tool/pubspec.lock @@ -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"