feat: 允许手动指定WPFGUI中干员名称显示语言 (#10310)

This commit is contained in:
uye
2024-08-21 11:38:29 +08:00
committed by GitHub
8 changed files with 55 additions and 40 deletions

View File

@@ -411,6 +411,7 @@ Only supports Official(CN) and Bilibili server. Login account is not supported.<
<system:String x:Key="OperNameLanguage">Operator display language</system:String>
<system:String x:Key="OperNameLanguageMAA">Follow MAA</system:String>
<system:String x:Key="OperNameLanguageClient">Follow game client</system:String>
<system:String x:Key="OperNameLanguageForce">Force use of specified language</system:String>
<system:String x:Key="Light">Light</system:String>
<system:String x:Key="Dark">Dark</system:String>
<system:String x:Key="SyncWithOs">Sync with OS</system:String>

View File

@@ -410,6 +410,7 @@
<system:String x:Key="OperNameLanguage">オペレーター名の表示言語</system:String>
<system:String x:Key="OperNameLanguageMAA">MAAをフォローする</system:String>
<system:String x:Key="OperNameLanguageClient">ゲームクライアントをフォローする</system:String>
<system:String x:Key="OperNameLanguageForce">指定された言語を強制的に使用する</system:String>
<system:String x:Key="Light">ライトモード</system:String>
<system:String x:Key="Dark">ダークモード</system:String>
<system:String x:Key="SyncWithOs">OSと同期する</system:String>

View File

@@ -410,6 +410,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요.</system:String>
<system:String x:Key="OperNameLanguage">간부 이름 표시 언어</system:String>
<system:String x:Key="OperNameLanguageMAA">MAA 따라가기</system:String>
<system:String x:Key="OperNameLanguageClient">게임 클라이언트 따라가기</system:String>
<system:String x:Key="OperNameLanguageForce">지정된 언어를 강제로 사용</system:String>
<system:String x:Key="Light">라이트</system:String>
<system:String x:Key="Dark">다크</system:String>
<system:String x:Key="SyncWithOs">시스템 연동</system:String>

View File

@@ -411,6 +411,7 @@
<system:String x:Key="OperNameLanguage">干员名称显示语言</system:String>
<system:String x:Key="OperNameLanguageMAA">跟随MAA</system:String>
<system:String x:Key="OperNameLanguageClient">跟随游戏客户端</system:String>
<system:String x:Key="OperNameLanguageForce">强制使用指定语言</system:String>
<system:String x:Key="Light">亮色</system:String>
<system:String x:Key="Dark">暗色</system:String>
<system:String x:Key="SyncWithOs">与系统同步</system:String>

View File

@@ -401,6 +401,7 @@
<system:String x:Key="OperNameLanguage">幹員名稱顯示語言</system:String>
<system:String x:Key="OperNameLanguageMAA">跟隨MAA</system:String>
<system:String x:Key="OperNameLanguageClient">跟隨遊戲客戶端</system:String>
<system:String x:Key="OperNameLanguageForce">強制使用指定語言</system:String>
<system:String x:Key="Light">亮色</system:String>
<system:String x:Key="Dark">暗色</system:String>
<system:String x:Key="SyncWithOs">與系統同步</system:String>

View File

@@ -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))

View File

@@ -514,8 +514,8 @@ namespace MaaWpfGui.ViewModels.UI
/// <summary>
/// 未实装干员但在battle_data中
/// </summary>
private static readonly HashSet<string> _virtuallyOpers = new HashSet<string>
{
private static readonly HashSet<string?> _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,39 +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<Tuple<string, int>> operHave = [];
List<Tuple<string, int>> operNotHave = [];
string localizedName = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, string.Empty) == "OperNameLanguageClient" ?
ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty) switch
{
"Official" => "name",
"Bilibili" => "name",
"YoStarJP" => "name_jp",
"YoStarKR" => "name_kr",
"txwy" => "name_tw",
_ => "name_en",
} : ConfigurationHelper.GetValue(ConfigurationKeys.Localization, string.Empty) switch
{
"zh-cn" => "name",
"ja-jp" => "name_jp",
"ko-kr" => "name_kr",
"zh-tw" => "name_tw",
_ => "name_en",
};
foreach (JObject operBox in operBoxes.Cast<JObject>())
{
var tuple = new Tuple<string, int>((string)operBox[localizedName], (int)operBox["rarity"]);
var tuple = new Tuple<string, int>(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);
@@ -688,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

View File

@@ -4572,9 +4572,9 @@ namespace MaaWpfGui.ViewModels.UI
public List<CombinedData> LanguageList { get; set; }
/// <summary>
/// Gets the list of operator name language settings
/// Gets or sets the list of operator name language settings
/// </summary>
public List<CombinedData> OperNameLanguageModeList { get; } =
public List<CombinedData> OperNameLanguageModeList { get; set; } =
[
new() { Display = LocalizationHelper.GetString("OperNameLanguageMAA"), Value = "OperNameLanguageMAA" },
new() { Display = LocalizationHelper.GetString("OperNameLanguageClient"), Value = "OperNameLanguageClient" }
@@ -4926,15 +4926,32 @@ namespace MaaWpfGui.ViewModels.UI
{ "txwy", "zh-tw" },
};
/// <summary>
/// Opername display language, can set force display when it was set as "OperNameLanguageForce.en-us"
/// </summary>
private string _operNameLanguage = ConfigurationHelper.GetValue(ConfigurationKeys.OperNameLanguage, "OperNameLanguageMAA");
public string OperNameLanguage
{
get => _operNameLanguage;
get
{
if (!_operNameLanguage.Contains('.'))
{
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
{
if (value == _operNameLanguage)
if (value == _operNameLanguage.Split('.')[0])
{
return;
}
@@ -4981,7 +4998,17 @@ namespace MaaWpfGui.ViewModels.UI
{
if (_operNameLanguage == "OperNameLanguageClient")
{
return _clientLanguageMapper[ConfigurationHelper.GetValue(ConfigurationKeys.ClientType, string.Empty)];
return _clientLanguageMapper[_clientType];
}
if (!_operNameLanguage.Contains('.'))
{
return _language;
}
if (_operNameLanguage.Split('.')[0] == "OperNameLanguageForce" && LocalizationHelper.SupportedLanguages.ContainsKey(_operNameLanguage.Split('.')[1]))
{
return _operNameLanguage.Split('.')[1];
}
return _language;