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