diff --git a/CollapseLauncher.slnx b/CollapseLauncher.slnx
index fcb1edfc72..b9c1c02b68 100644
--- a/CollapseLauncher.slnx
+++ b/CollapseLauncher.slnx
@@ -50,6 +50,9 @@
+
+
+
@@ -66,6 +69,9 @@
+
+
+
diff --git a/CollapseLauncher/App.xaml b/CollapseLauncher/App.xaml
index 802e171716..71c8a5ea4d 100644
--- a/CollapseLauncher/App.xaml
+++ b/CollapseLauncher/App.xaml
@@ -1,7 +1,7 @@
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
diff --git a/CollapseLauncher/Classes/CachesManagement/Honkai/Check.cs b/CollapseLauncher/Classes/CachesManagement/Honkai/Check.cs
index 92e9568542..6a883cd9cc 100644
--- a/CollapseLauncher/Classes/CachesManagement/Honkai/Check.cs
+++ b/CollapseLauncher/Classes/CachesManagement/Honkai/Check.cs
@@ -1,4 +1,5 @@
-using CollapseLauncher.Helper.StreamUtility;
+using CollapseLauncher.Helper;
+using CollapseLauncher.Helper.StreamUtility;
using CollapseLauncher.Interfaces;
using Hi3Helper;
using System;
@@ -9,7 +10,6 @@
using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
-using static Hi3Helper.Locale;
using static Hi3Helper.Logger;
// ReSharper disable CommentTypo
@@ -123,8 +123,8 @@ private async ValueTask CheckAsset(CacheAsset asset, List returnAsse
{
// Increment the count and update the status
Interlocked.Add(ref ProgressAllCountCurrent, 1);
- Status.ActivityStatus = string.Format(Lang!._CachesPage!.CachesStatusChecking!, asset!.DataType, asset.N);
- Status.ActivityAll = string.Format(Lang._CachesPage.CachesTotalStatusChecking!, ProgressAllCountCurrent, ProgressAllCountTotal);
+ Status.ActivityStatus = string.Format(Locale.Current.Lang?._CachesPage?.CachesStatusChecking ?? "", asset!.DataType, asset.N);
+ Status.ActivityAll = string.Format(Locale.Current.Lang?._CachesPage?.CachesTotalStatusChecking ?? "", ProgressAllCountCurrent, ProgressAllCountTotal);
// Assign the file info.
FileInfo fileInfo = new FileInfo(asset.ConcatPath).EnsureNoReadOnly(out bool isExist);
diff --git a/CollapseLauncher/Classes/CachesManagement/Honkai/Fetch.cs b/CollapseLauncher/Classes/CachesManagement/Honkai/Fetch.cs
index b97b435d69..7647658109 100644
--- a/CollapseLauncher/Classes/CachesManagement/Honkai/Fetch.cs
+++ b/CollapseLauncher/Classes/CachesManagement/Honkai/Fetch.cs
@@ -15,7 +15,6 @@
using System.Threading;
using System.Threading.Tasks;
using static Hi3Helper.Data.ConverterTool;
-using static Hi3Helper.Locale;
using static Hi3Helper.Logger;
// ReSharper disable SwitchStatementHandlesSomeKnownEnumValuesWithDefault
// ReSharper disable CommentTypo
@@ -127,7 +126,7 @@ private async Task BuildGameRepoURL(HttpClient client, CancellationToken token)
private async Task<(int, long)> FetchByType(CacheAssetType type, HttpClient client, List assetIndex, CancellationToken token)
{
// Set total activity string as "Fetching Caches Type: "
- Status.ActivityStatus = string.Format(Lang!._CachesPage!.CachesStatusFetchingType!, type);
+ Status.ActivityStatus = string.Format(Locale.Current.Lang?._CachesPage?.CachesStatusFetchingType ?? "", type);
Status.IsProgressAllIndetermined = true;
Status.IsIncludePerFileIndicator = false;
UpdateStatus();
@@ -282,7 +281,7 @@ await Parallel.ForEachAsync(EnumerateCacheTextAsset(type, dataTextAsset.GetStrin
if (content.DLM == 2)
{
// Update the status
- Status.ActivityStatus = string.Format(Lang._CachesPage.Status2, type, content.N);
+ Status.ActivityStatus = string.Format(Locale.Current.Lang?._CachesPage?.Status2 ?? "", type, content.N);
Status.IsProgressAllIndetermined = true;
Status.IsProgressPerFileIndetermined = true;
UpdateStatus();
diff --git a/CollapseLauncher/Classes/CachesManagement/Honkai/HonkaiCache.cs b/CollapseLauncher/Classes/CachesManagement/Honkai/HonkaiCache.cs
index 6b459e6796..ee8a3eb711 100644
--- a/CollapseLauncher/Classes/CachesManagement/Honkai/HonkaiCache.cs
+++ b/CollapseLauncher/Classes/CachesManagement/Honkai/HonkaiCache.cs
@@ -1,4 +1,5 @@
using CollapseLauncher.Extension;
+using CollapseLauncher.Helper;
using CollapseLauncher.Interfaces;
using Hi3Helper.Data;
using Hi3Helper.EncTool.Parser.KianaDispatch;
@@ -6,7 +7,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
-using static Hi3Helper.Locale;
namespace CollapseLauncher
{
@@ -72,8 +72,8 @@ private async Task CheckRoutine()
// either way, returns false.
return SummarizeStatusAndProgress(
UpdateAssetIndex,
- string.Format(Lang!._CachesPage!.CachesStatusNeedUpdate!, ProgressAllCountFound, ConverterTool.SummarizeSizeSimple(ProgressAllSizeFound)),
- Lang._CachesPage.CachesStatusUpToDate);
+ string.Format(Locale.Current.Lang?._CachesPage?.CachesStatusNeedUpdate ?? "", ProgressAllCountFound, ConverterTool.SummarizeSizeSimple(ProgressAllSizeFound)),
+ Locale.Current.Lang?._CachesPage?.CachesStatusUpToDate ?? "");
}
public async Task StartUpdateRoutine(bool showInteractivePrompt = false)
@@ -95,9 +95,9 @@ private async Task UpdateRoutine()
ResetStatusAndProgress();
// Set as completed
- Status.IsCompleted = true;
- Status.IsCanceled = false;
- Status.ActivityStatus = Lang!._CachesPage!.CachesStatusUpToDate;
+ Status.IsCompleted = true;
+ Status.IsCanceled = false;
+ Status.ActivityStatus = Locale.Current.Lang?._CachesPage?.CachesStatusUpToDate;
// Update status and progress
UpdateAll();
diff --git a/CollapseLauncher/Classes/CachesManagement/Honkai/Update.cs b/CollapseLauncher/Classes/CachesManagement/Honkai/Update.cs
index 9a13041d16..12b59a9adb 100644
--- a/CollapseLauncher/Classes/CachesManagement/Honkai/Update.cs
+++ b/CollapseLauncher/Classes/CachesManagement/Honkai/Update.cs
@@ -12,7 +12,6 @@
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
-using static Hi3Helper.Locale;
using static Hi3Helper.Logger;
// ReSharper disable CommentTypo
// ReSharper disable GrammarMistakeInComment
@@ -123,7 +122,7 @@ private async Task UpdateCacheAsset((CacheAsset AssetIndex, IAssetProperty Asset
{
// Increment total count and update the status
ProgressAllCountCurrent++;
- Status.ActivityStatus = string.Format(Lang!._Misc!.Downloading + " {0}: {1}", asset!.AssetIndex.DataType, asset.AssetIndex.N);
+ Status.ActivityStatus = string.Format(Locale.Current.Lang?._Misc?.Downloading + " {0}: {1}", asset!.AssetIndex.DataType, asset.AssetIndex.N);
UpdateAll();
FileInfo fileInfo = new FileInfo(asset.AssetIndex.ConcatPath!)
diff --git a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs
index ee7b54b1ad..5bbaf94010 100644
--- a/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs
+++ b/CollapseLauncher/Classes/DiscordPresence/DiscordPresenceManager.cs
@@ -1,4 +1,5 @@
-using CollapseLauncher.Helper.Metadata;
+using CollapseLauncher.Helper;
+using CollapseLauncher.Helper.Metadata;
using CollapseLauncher.Helper.Update;
using CollapseLauncher.Plugins;
using DiscordRPC;
@@ -8,7 +9,6 @@
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
using System.Threading.Tasks.Dataflow;
-using static Hi3Helper.Locale;
using static Hi3Helper.Shared.Region.LauncherConfig;
// ReSharper disable PartialTypeWithSinglePart
// ReSharper disable StringLiteralTypo
@@ -186,8 +186,8 @@ public void SetupPresence()
{
if (!IsRpcEnabled) return;
- var gameCategory = GetAppConfigValue("GameCategory").ToString();
- var isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
+ string? gameCategory = GetAppConfigValue("GameCategory").ToString();
+ bool isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
if (isGameStatusEnabled)
{
@@ -248,33 +248,33 @@ public void SetActivity(ActivityType activity, DateTime? activityOffset = null)
case ActivityType.Play:
{
bool isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
- BuildActivityGameStatus(isGameStatusEnabled ? Lang._Misc.DiscordRP_InGame : Lang._Misc.DiscordRP_Play,
+ BuildActivityGameStatus((isGameStatusEnabled ? Locale.Current.Lang?._Misc?.DiscordRP_InGame : Locale.Current.Lang?._Misc?.DiscordRP_Play) ?? "",
isGameStatusEnabled, activityOffset);
break;
}
case ActivityType.Update:
{
bool isGameStatusEnabled = GetAppConfigValue("EnableDiscordGameStatus").ToBool();
- BuildActivityGameStatus(Lang._Misc.DiscordRP_Update, isGameStatusEnabled);
+ BuildActivityGameStatus(Locale.Current.Lang?._Misc?.DiscordRP_Update ?? "", isGameStatusEnabled);
break;
}
case ActivityType.Repair:
- BuildActivityAppStatus(Lang._Misc.DiscordRP_Repair);
+ BuildActivityAppStatus(Locale.Current.Lang?._Misc?.DiscordRP_Repair ?? "");
break;
case ActivityType.Cache:
- BuildActivityAppStatus(Lang._Misc.DiscordRP_Cache);
+ BuildActivityAppStatus(Locale.Current.Lang?._Misc?.DiscordRP_Cache ?? "");
break;
case ActivityType.GameSettings:
- BuildActivityAppStatus(Lang._Misc.DiscordRP_GameSettings);
+ BuildActivityAppStatus(Locale.Current.Lang?._Misc?.DiscordRP_GameSettings ?? "");
break;
case ActivityType.AppSettings:
- BuildActivityAppStatus(Lang._Misc.DiscordRP_AppSettings);
+ BuildActivityAppStatus(Locale.Current.Lang?._Misc?.DiscordRP_AppSettings ?? "");
break;
case ActivityType.Idle:
_lastPlayTime = null;
if (_cachedIsIdleEnabled)
{
- BuildActivityAppStatus(Lang._Misc.DiscordRP_Idle);
+ BuildActivityAppStatus(Locale.Current.Lang?._Misc?.DiscordRP_Idle ?? "");
}
else
{
@@ -285,7 +285,7 @@ public void SetActivity(ActivityType activity, DateTime? activityOffset = null)
default:
_presence = new RichPresence
{
- Details = Lang._Misc.DiscordRP_Default,
+ Details = Locale.Current.Lang?._Misc?.DiscordRP_Default,
Assets = new Assets
{
LargeImageKey = "launcher-logo-new",
@@ -302,16 +302,14 @@ public void SetActivity(ActivityType activity, DateTime? activityOffset = null)
private void BuildActivityGameStatus(string activityName, bool isGameStatusEnabled, DateTime? activityOffset = null)
{
- var curGameName = LauncherMetadataHelper.CurrentMetadataConfigGameName;
- var curGameRegion = LauncherMetadataHelper.CurrentMetadataConfigGameRegion;
+ string? curGameName = LauncherMetadataHelper.CurrentMetadataConfigGameName;
+ string? curGameRegion = LauncherMetadataHelper.CurrentMetadataConfigGameRegion;
if (string.IsNullOrEmpty(curGameName) || string.IsNullOrEmpty(curGameRegion))
return;
- var curGameNameTranslate =
- InnerLauncherConfig.GetGameTitleRegionTranslationString(curGameName, Lang._GameClientTitles);
- var curGameRegionTranslate =
- InnerLauncherConfig.GetGameTitleRegionTranslationString(curGameRegion, Lang._GameClientRegions);
+ string? curGameNameTranslate = LauncherMetadataHelper.GetGameTitleTranslation(curGameName);
+ string? curGameRegionTranslate = LauncherMetadataHelper.GetGameRegionTranslation(curGameRegion);
if (TryBuildActivityGameStatusFromPlugin(activityName,
curGameNameTranslate,
@@ -326,7 +324,7 @@ private void BuildActivityGameStatus(string activityName, bool isGameStatusEnabl
_presence = new RichPresence
{
Details = $"{activityName} {(!isGameStatusEnabled ? curGameNameTranslate : null)}",
- State = $"{Lang._Misc.DiscordRP_Region} {curGameRegionTranslate}",
+ State = $"{Locale.Current.Lang?._Misc?.DiscordRP_Region} {curGameRegionTranslate}",
Assets = new Assets
{
LargeImageKey = $"game-{LauncherMetadataHelper.CurrentMetadataConfig?.GameType.ToString().ToLower()}-logo",
@@ -367,7 +365,7 @@ is not PluginPresetConfigWrapper asPluginPresetConfig ||
presence = new RichPresence
{
Details = $"{activityName} {(!isGameStatusEnabled ? translatedGameName : null)}",
- State = $"{Lang._Misc.DiscordRP_Region} {translatedRegionName}",
+ State = $"{Locale.Current.Lang?._Misc?.DiscordRP_Region} {translatedRegionName}",
Assets = new Assets
{
LargeImageKey = largeIconUrl ?? CollapseLogoExt,
@@ -395,16 +393,14 @@ private DateTime GetCachedStartPlayTime(DateTime? activityOffset)
private void BuildActivityAppStatus(string activityName)
{
- var curGameName = LauncherMetadataHelper.CurrentMetadataConfigGameName;
- var curGameRegion = LauncherMetadataHelper.CurrentMetadataConfigGameRegion;
+ string? curGameName = LauncherMetadataHelper.CurrentMetadataConfigGameName;
+ string? curGameRegion = LauncherMetadataHelper.CurrentMetadataConfigGameRegion;
if (string.IsNullOrEmpty(curGameName) || string.IsNullOrEmpty(curGameRegion))
return;
- var curGameNameTranslate =
- InnerLauncherConfig.GetGameTitleRegionTranslationString(curGameName, Lang._GameClientTitles);
- var curGameRegionTranslate =
- InnerLauncherConfig.GetGameTitleRegionTranslationString(curGameRegion, Lang._GameClientRegions);
+ string? curGameNameTranslate = LauncherMetadataHelper.GetGameTitleTranslation(curGameName);
+ string? curGameRegionTranslate = LauncherMetadataHelper.GetGameRegionTranslation(curGameRegion);
if (TryBuildActivityAppStatusFromPlugin(activityName,
curGameNameTranslate,
@@ -417,7 +413,7 @@ private void BuildActivityAppStatus(string activityName)
_presence = new RichPresence
{
Details = activityName,
- State = $"{Lang._Misc.DiscordRP_Region} {curGameRegionTranslate}",
+ State = $"{Locale.Current.Lang?._Misc?.DiscordRP_Region} {curGameRegionTranslate}",
Assets = new Assets
{
LargeImageKey = $"game-{LauncherMetadataHelper.CurrentMetadataConfig?.GameType.ToString().ToLower()}-logo",
@@ -453,7 +449,7 @@ is not PluginPresetConfigWrapper asPluginPresetConfig ||
presence = new RichPresence
{
Details = activityName,
- State = $"{Lang._Misc.DiscordRP_Region} {translatedRegionName}",
+ State = $"{Locale.Current.Lang?._Misc?.DiscordRP_Region} {translatedRegionName}",
Assets = new Assets
{
LargeImageKey = largeIconUrl ?? CollapseLogoExt,
diff --git a/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs b/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs
index 0b1c3b8055..03406d6aca 100644
--- a/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs
+++ b/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs
@@ -6,7 +6,6 @@
using CollapseLauncher.Statics;
using Hi3Helper;
using Hi3Helper.Data;
-using Hi3Helper.Shared.Region;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media;
@@ -14,7 +13,6 @@
using System;
using System.Collections.Generic;
using System.Numerics;
-using static Hi3Helper.Locale;
// ReSharper disable StringLiteralTypo
// ReSharper disable ClassNeverInstantiated.Global
#pragma warning disable IDE0130
@@ -125,34 +123,33 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac
TextBlock progressLeftTitle = progressStatusGrid.AddElementToGridRowColumn(new TextBlock
{
Style = UIElementExtensions.GetApplicationResource