From c80a6fff05b95d9858c4cd25bedfad467e6390f7 Mon Sep 17 00:00:00 2001 From: ManicSteiner Date: Tue, 20 Aug 2024 20:31:26 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E5=85=81=E8=AE=B8=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E6=8C=87=E5=AE=9AWPFGUI=E4=B8=AD=E5=B9=B2=E5=91=98?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=98=BE=E7=A4=BA=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/Res/Localizations/en-us.xaml | 1 + src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 1 + src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 1 + src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 1 + src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 1 + .../ViewModels/UI/SettingsViewModel.cs | 31 ++++++++++++++++--- 6 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml index 2a88f119a5..19b5af7bbd 100644 --- a/src/MaaWpfGui/Res/Localizations/en-us.xaml +++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml @@ -411,6 +411,7 @@ Only supports Official(CN) and Bilibili server. Login account is not supported.< Operator display language Follow MAA Follow game client + Force use of specified language Light Dark Sync with OS diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml index d02291b974..16db094323 100644 --- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml +++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml @@ -410,6 +410,7 @@ オペレーター名の表示言語 MAAをフォローする ゲームクライアントをフォローする + 指定された言語を強制的に使用する ライトモード ダークモード OSと同期する diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml index 84d72eb2f5..f1c3bce440 100644 --- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml +++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml @@ -410,6 +410,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요. 간부 이름 표시 언어 MAA 따라가기 게임 클라이언트 따라가기 + 지정된 언어를 강제로 사용 라이트 다크 시스템 연동 diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml index d604c64950..67bb505444 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml @@ -411,6 +411,7 @@ 干员名称显示语言 跟随MAA 跟随游戏客户端 + 强制使用指定语言 亮色 暗色 与系统同步 diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml index 2fb72d9de2..ba49f07911 100644 --- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml +++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml @@ -401,6 +401,7 @@ 幹員名稱顯示語言 跟隨MAA 跟隨遊戲客戶端 + 強制使用指定語言 亮色 暗色 與系統同步 diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index fd073a3a8b..b0835d56b0 100755 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -4572,9 +4572,9 @@ namespace MaaWpfGui.ViewModels.UI public List LanguageList { get; set; } /// - /// Gets the list of operator name language settings + /// Gets or sets the list of operator name language settings /// - public List OperNameLanguageModeList { get; } = + public List OperNameLanguageModeList { get; set; } = [ new() { Display = LocalizationHelper.GetString("OperNameLanguageMAA"), Value = "OperNameLanguageMAA" }, new() { Display = LocalizationHelper.GetString("OperNameLanguageClient"), Value = "OperNameLanguageClient" } @@ -4926,15 +4926,30 @@ namespace MaaWpfGui.ViewModels.UI { "txwy", "zh-tw" }, }; + /// + /// Opername display language, can set force display when it was set as "OperNameLanguageForce.en-us" + /// private string _operNameLanguage = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, "OperNameLanguageMAA"); public string OperNameLanguage { - get => _operNameLanguage; + get + { + if (_operNameLanguage.Contains('.')) + { + if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) + { + OperNameLanguageModeList.Add(new() { Display = LocalizationHelper.GetString("OperNameLanguageForce"), Value = "OperNameLanguageForce" }); + return "OperNameLanguageForce"; + } + } + + return _operNameLanguage; + } set { - if (value == _operNameLanguage) + if (value == _operNameLanguage.Split('.')[0]) { return; } @@ -4984,6 +4999,14 @@ namespace MaaWpfGui.ViewModels.UI return _clientLanguageMapper[ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty)]; } + if (_operNameLanguage.Contains('.')) + { + if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) + { + return _operNameLanguage.Split('.')[1]; + } + } + return _language; } } From 637b302cc3b5bbff78efe164cc35621d1169f3a6 Mon Sep 17 00:00:00 2001 From: ManicSteiner Date: Tue, 20 Aug 2024 22:43:09 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=E5=B9=B2=E5=91=98=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E6=94=AF=E6=8C=81=E6=8C=87=E5=AE=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/UI/RecognizerViewModel.cs | 56 ++++++++++++++----- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs index 97bbfeffcb..9cd654f620 100644 --- a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs @@ -617,23 +617,49 @@ namespace MaaWpfGui.ViewModels.UI List> operHave = []; List> operNotHave = []; - string localizedName = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, string.Empty) == "OperNameLanguageClient" ? - ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty) switch + string localizedName; + string operNameLanguage = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, string.Empty); + + if (operNameLanguage == "OperNameLanguageClient") { - "Official" => "name", - "Bilibili" => "name", - "YoStarJP" => "name_jp", - "YoStarKR" => "name_kr", - "txwy" => "name_tw", - _ => "name_en", - } : ConfigurationHelper.GetValue(ConfigurationKeys.Localization, string.Empty) switch + localizedName = ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty) switch + { + "Official" => "name", + "Bilibili" => "name", + "YoStarJP" => "name_jp", + "YoStarKR" => "name_kr", + "txwy" => "name_tw", + _ => "name_en", + }; + } + else { - "zh-cn" => "name", - "ja-jp" => "name_jp", - "ko-kr" => "name_kr", - "zh-tw" => "name_tw", - _ => "name_en", - }; + string localization = ConfigurationHelper.GetValue(ConfigurationKeys.Localization, string.Empty); + if (operNameLanguage.Contains('.')) + { + if (operNameLanguage.Split('.')[0] == "OperNameLanguageForce") + { + localization = operNameLanguage.Split('.')[1] switch + { + "zh-cn" => "zh-cn", + "en-us" => "en-us", + "ja-jp" => "ja-jp", + "ko-kr" => "ko-kr", + "zh-tw" => "zh-tw", + _ => localization, + }; + } + } + + localizedName = localization switch + { + "zh-cn" => "name", + "ja-jp" => "name_jp", + "ko-kr" => "name_kr", + "zh-tw" => "name_tw", + _ => "name_en", + }; + } foreach (JObject operBox in operBoxes.Cast()) { From 350963877328b5e0ccb4dc3742a1e6efba52ca35 Mon Sep 17 00:00:00 2001 From: ManicSteiner Date: Tue, 20 Aug 2024 22:46:20 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20buff=E9=80=89=E9=A1=B9=E4=B8=8D?= =?UTF-8?q?=E7=AC=A6=E5=90=88=E8=A7=84=E5=88=99=E6=97=B6=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs index 2037d91d9f..4d3bedcefe 100644 --- a/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/CopilotViewModel.cs @@ -409,7 +409,8 @@ namespace MaaWpfGui.ViewModels.UI if (json.TryGetValue("buff", out var buffValue)) { string buffLog = LocalizationHelper.GetString("DirectiveECTerm"); - AddLog(buffLog + DataHelper.GetLocalizedCharacterName((string?)buffValue), UiLogColor.Message, showTime: false); + string? localizedBuffName = DataHelper.GetLocalizedCharacterName((string?)buffValue); + AddLog(buffLog + (string.IsNullOrEmpty(localizedBuffName) ? (string?)buffValue : localizedBuffName), UiLogColor.Message, showTime: false); } if (json.TryGetValue("tool_men", out var toolMenValue)) From a737e978bd9e7df323f4310e3954b12adaada73e Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:20:37 +0800 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20RecognizerViewModel=20=E6=94=B9?= =?UTF-8?q?=E7=94=A8=20GetLocalizedCharacterName?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/UI/RecognizerViewModel.cs | 76 ++++--------------- 1 file changed, 16 insertions(+), 60 deletions(-) diff --git a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs index 9cd654f620..24e1e5b6dd 100644 --- a/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/RecognizerViewModel.cs @@ -514,8 +514,8 @@ namespace MaaWpfGui.ViewModels.UI /// /// 未实装干员,但在battle_data中, /// - private static readonly HashSet _virtuallyOpers = new HashSet - { + private static readonly HashSet _virtuallyOpers = + [ "char_504_rguard", "char_505_rcast", "char_506_rmedic", @@ -527,8 +527,8 @@ namespace MaaWpfGui.ViewModels.UI "char_509_acast", "char_508_aguard", "char_1001_amiya2", - "char_1037_amiya3", - }; + "char_1037_amiya3" + ]; private string _operBoxInfo = LocalizationHelper.GetString("OperBoxRecognitionTip"); @@ -585,11 +585,6 @@ namespace MaaWpfGui.ViewModels.UI { get { - if (OperBoxDataArray == null) - { - return null; - } - if (_operBoxPotential != null) { return _operBoxPotential; @@ -612,65 +607,26 @@ namespace MaaWpfGui.ViewModels.UI public bool OperBoxParse(JObject details) { - var operBoxes = (JArray)details["all_opers"]; + var operBoxes = (JArray?)details["all_opers"]; + + if (operBoxes == null) + { + return false; + } List> operHave = []; List> operNotHave = []; - string localizedName; - string operNameLanguage = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, string.Empty); - - if (operNameLanguage == "OperNameLanguageClient") - { - localizedName = ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty) switch - { - "Official" => "name", - "Bilibili" => "name", - "YoStarJP" => "name_jp", - "YoStarKR" => "name_kr", - "txwy" => "name_tw", - _ => "name_en", - }; - } - else - { - string localization = ConfigurationHelper.GetValue(ConfigurationKeys.Localization, string.Empty); - if (operNameLanguage.Contains('.')) - { - if (operNameLanguage.Split('.')[0] == "OperNameLanguageForce") - { - localization = operNameLanguage.Split('.')[1] switch - { - "zh-cn" => "zh-cn", - "en-us" => "en-us", - "ja-jp" => "ja-jp", - "ko-kr" => "ko-kr", - "zh-tw" => "zh-tw", - _ => localization, - }; - } - } - - localizedName = localization switch - { - "zh-cn" => "name", - "ja-jp" => "name_jp", - "ko-kr" => "name_kr", - "zh-tw" => "name_tw", - _ => "name_en", - }; - } - foreach (JObject operBox in operBoxes.Cast()) { - var tuple = new Tuple((string)operBox[localizedName], (int)operBox["rarity"]); + var tuple = new Tuple(DataHelper.GetLocalizedCharacterName((string?)operBox["name"]) ?? "???", (int)(operBox["rarity"] ?? -1)); - if (_virtuallyOpers.Contains((string)operBox["id"])) + if (_virtuallyOpers.Contains((string?)operBox["id"])) { continue; } - if ((bool)operBox["own"]) + if ((bool)(operBox["own"] ?? false)) { /*已拥有干员*/ operHave.Add(tuple); @@ -714,13 +670,13 @@ namespace MaaWpfGui.ViewModels.UI newlineFlag = 0; } - bool done = (bool)details["done"]; + bool done = (bool)(details["done"] ?? false); if (done) { OperBoxInfo = LocalizationHelper.GetString("IdentificationCompleted") + "\n" + LocalizationHelper.GetString("OperBoxRecognitionTip"); OperBoxResult = string.Format(LocalizationHelper.GetString("OperBoxRecognitionResult"), operNotHave.Count, operNotHaveNames, operHave.Count, operHaveNames); - OperBoxExportData = details["own_opers"].ToString(); - OperBoxDataArray = (JArray)details["own_opers"]; + OperBoxExportData = details["own_opers"]?.ToString() ?? string.Empty; + OperBoxDataArray = (JArray)(details["own_opers"] ?? new JArray()); OperBoxDone = true; } else From 77808ffca2a0015b626e49acfb55a444e8dbbd27 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:21:18 +0800 Subject: [PATCH 5/5] =?UTF-8?q?style:=20=E4=BC=98=E5=8C=96=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewModels/UI/SettingsViewModel.cs | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs index b0835d56b0..b49120f304 100755 --- a/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs +++ b/src/MaaWpfGui/ViewModels/UI/SettingsViewModel.cs @@ -4935,16 +4935,18 @@ namespace MaaWpfGui.ViewModels.UI { get { - if (_operNameLanguage.Contains('.')) + if (!_operNameLanguage.Contains('.')) { - if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) - { - OperNameLanguageModeList.Add(new() { Display = LocalizationHelper.GetString("OperNameLanguageForce"), Value = "OperNameLanguageForce" }); - return "OperNameLanguageForce"; - } + return _operNameLanguage; } - return _operNameLanguage; + if (_operNameLanguage.Split('.')[0] != "OperNameLanguageForce" || !LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) + { + return _operNameLanguage; + } + + OperNameLanguageModeList.Add(new CombinedData { Display = LocalizationHelper.GetString("OperNameLanguageForce"), Value = "OperNameLanguageForce" }); + return "OperNameLanguageForce"; } set @@ -4996,15 +4998,17 @@ namespace MaaWpfGui.ViewModels.UI { if (_operNameLanguage == "OperNameLanguageClient") { - return _clientLanguageMapper[ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty)]; + return _clientLanguageMapper[_clientType]; } - if (_operNameLanguage.Contains('.')) + if (!_operNameLanguage.Contains('.')) { - if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) - { - return _operNameLanguage.Split('.')[1]; - } + return _language; + } + + if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1])) + { + return _operNameLanguage.Split('.')[1]; } return _language;