mirror of
https://ghfast.top/https://github.com/StarCitizenToolBox/app.git
synced 2025-06-28 14:54:45 +08:00
feat: l10n
This commit is contained in:
@ -321,7 +321,9 @@ class AdvancedLocalizationUIModel extends _$AdvancedLocalizationUIModel {
|
||||
// ignore: avoid_build_context_in_providers
|
||||
Future<void> onInstall(BuildContext context) async {
|
||||
var isEnableCommunityInputMethod = true;
|
||||
final userOK = await showConfirmDialogs(context, "确认安装高级汉化?", HookConsumer(
|
||||
final userOK = await showConfirmDialogs(context,
|
||||
S.current.input_method_confirm_install_advanced_localization,
|
||||
HookConsumer(
|
||||
builder: (BuildContext context, WidgetRef ref, Widget? child) {
|
||||
final globalIni = useState<StringBuffer?>(null);
|
||||
final enableCommunityInputMethod = useState(true);
|
||||
@ -369,7 +371,7 @@ class AdvancedLocalizationUIModel extends _$AdvancedLocalizationUIModel {
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"安装社区输入法支持",
|
||||
S.current.input_method_install_community_input_method_support,
|
||||
),
|
||||
Spacer(),
|
||||
ToggleSwitch(
|
||||
|
@ -113,7 +113,10 @@ class LocalizationDialogUI extends HookConsumerWidget {
|
||||
.installedCommunityInputMethodSupportVersion !=
|
||||
null)
|
||||
Text(
|
||||
"社区输入法支持:${state.installedCommunityInputMethodSupportVersion}",
|
||||
S.current
|
||||
.input_method_community_input_method_support_version(
|
||||
state.installedCommunityInputMethodSupportVersion ??
|
||||
"?"),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
@ -138,7 +138,7 @@ class LocalizationFromFileDialogUI extends HookConsumerWidget {
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"安装社区输入法支持",
|
||||
S.current.input_method_install_community_input_method_support,
|
||||
),
|
||||
Spacer(),
|
||||
ToggleSwitch(
|
||||
@ -160,4 +160,4 @@ class LocalizationFromFileDialogUI extends HookConsumerWidget {
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -22,6 +22,8 @@ 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';
|
||||
|
||||
import 'package:starcitizen_doctor/common/rust/api/win32_api.dart' as win32;
|
||||
|
||||
part 'localization_ui_model.g.dart';
|
||||
|
||||
part 'localization_ui_model.freezed.dart';
|
||||
@ -323,6 +325,36 @@ class LocalizationUIModel extends _$LocalizationUIModel {
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<(String, String)>
|
||||
getIniContentWithoutCommunityInputMethodSupportData() async {
|
||||
final iniPath =
|
||||
"${_scDataDir.absolute.path}\\Localization\\${state.selectedLanguage}\\global.ini";
|
||||
final iniFile = File(iniPath);
|
||||
if (!await iniFile.exists()) {
|
||||
return ("", "");
|
||||
}
|
||||
final iniStringSplit = (await iniFile.readAsString()).split("\n");
|
||||
final sb = StringBuffer();
|
||||
var b = false;
|
||||
for (var i = 0; i < iniStringSplit.length; i++) {
|
||||
final line = iniStringSplit[i];
|
||||
|
||||
if (line.trim().startsWith(
|
||||
"_starcitizen_doctor_localization_community_input_method_version=")) {
|
||||
b = true;
|
||||
continue;
|
||||
} else if (line
|
||||
.trim()
|
||||
.startsWith("_starcitizen_doctor_localization_version=")) {
|
||||
b = false;
|
||||
return (sb.toString(), line.split("=").last.trim());
|
||||
} else if (!b) {
|
||||
sb.writeln(line);
|
||||
}
|
||||
}
|
||||
return ("", "");
|
||||
}
|
||||
|
||||
Future? doRemoteInstall(BuildContext context, ScLocalizationData value,
|
||||
{bool isEnableCommunityInputMethod = false}) async {
|
||||
AnalyticsApi.touch("install_localization");
|
||||
@ -557,9 +589,35 @@ class LocalizationUIModel extends _$LocalizationUIModel {
|
||||
}
|
||||
}
|
||||
}
|
||||
await checkCommunityInputMethodUpdate();
|
||||
return updates;
|
||||
}
|
||||
|
||||
Future<void> checkCommunityInputMethodUpdate() async {
|
||||
final cloudVersion = state.communityInputMethodLanguageData?.version;
|
||||
final localVersion = state.installedCommunityInputMethodSupportVersion;
|
||||
if (cloudVersion == null || localVersion == null) return;
|
||||
if (localVersion != cloudVersion) {
|
||||
// 版本不一致,自动检查更新
|
||||
final (localIniString, versioName) =
|
||||
await getIniContentWithoutCommunityInputMethodSupportData();
|
||||
if (localIniString.trim().isEmpty) {
|
||||
dPrint(
|
||||
"[InputMethodDialogUIModel] check update Error localIniString is empty");
|
||||
return;
|
||||
}
|
||||
await installFormString(StringBuffer(localIniString), versioName,
|
||||
isEnableCommunityInputMethod: true);
|
||||
await win32.sendNotify(
|
||||
summary: S.current.input_method_support_updated,
|
||||
body: S.current.input_method_support_updated_to_version(cloudVersion),
|
||||
appName: S.current.home_title_app_name,
|
||||
appId: ConstConf.isMSE
|
||||
? "56575xkeyC.MSE_bsn1nexg8e4qe!starcitizendoctor"
|
||||
: "{6D809377-6AF0-444B-8957-A3773F02200E}\\Starcitizen_Doctor\\starcitizen_doctor.exe");
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onChangeGameInstallPath(String value) async {
|
||||
await _loadData();
|
||||
}
|
||||
@ -622,7 +680,7 @@ class LocalizationUIModel extends _$LocalizationUIModel {
|
||||
Row(
|
||||
children: [
|
||||
Text(
|
||||
"安装社区输入法支持",
|
||||
S.current.input_method_install_community_input_method_support,
|
||||
),
|
||||
Spacer(),
|
||||
StatefulBuilder(
|
||||
|
Reference in New Issue
Block a user