diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 87f1e0b5b..29f43e66f 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,6 +1,6 @@ --- -name: Feature request -about: Suggest an idea for this project +name: Feature/Enhancement request +about: Suggest an idea for new feature or changes title: "[Request]" labels: Enhancement assignees: '' diff --git a/CollapseLauncher/App.xaml.cs b/CollapseLauncher/App.xaml.cs index 9c7436936..88ed324b4 100644 --- a/CollapseLauncher/App.xaml.cs +++ b/CollapseLauncher/App.xaml.cs @@ -1,4 +1,4 @@ -using Hi3Helper; +using Hi3Helper; using Hi3Helper.Shared.Region; using Microsoft.UI; using Microsoft.UI.Xaml; @@ -40,6 +40,10 @@ public App() m_window = new MainWindow(); ((MainWindow)m_window).InitializeWindowProperties(); break; + case AppMode.OOBEState: + m_window = new MainWindow(); + ((MainWindow)m_window).InitializeWindowProperties(true); + break; } m_window.Activate(); diff --git a/CollapseLauncher/XAMLs/Prototype/genshin-logo.png b/CollapseLauncher/Assets/Images/GameLogo/genshin-logo.png similarity index 100% rename from CollapseLauncher/XAMLs/Prototype/genshin-logo.png rename to CollapseLauncher/Assets/Images/GameLogo/genshin-logo.png diff --git a/CollapseLauncher/XAMLs/Prototype/honkai-logo.png b/CollapseLauncher/Assets/Images/GameLogo/honkai-logo.png similarity index 100% rename from CollapseLauncher/XAMLs/Prototype/honkai-logo.png rename to CollapseLauncher/Assets/Images/GameLogo/honkai-logo.png diff --git a/CollapseLauncher/XAMLs/Prototype/starrail-logo.png b/CollapseLauncher/Assets/Images/GameLogo/starrail-logo.png similarity index 100% rename from CollapseLauncher/XAMLs/Prototype/starrail-logo.png rename to CollapseLauncher/Assets/Images/GameLogo/starrail-logo.png diff --git a/CollapseLauncher/XAMLs/Prototype/zenless-logo.png b/CollapseLauncher/Assets/Images/GameLogo/zenless-logo.png similarity index 100% rename from CollapseLauncher/XAMLs/Prototype/zenless-logo.png rename to CollapseLauncher/Assets/Images/GameLogo/zenless-logo.png diff --git a/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs b/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs index 19a289bb7..09667d7b5 100644 --- a/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs +++ b/CollapseLauncher/Classes/EventsManagement/BackgroundActivityManager.cs @@ -1,6 +1,8 @@ using CollapseLauncher.Interfaces; +using CollapseLauncher.Statics; using Hi3Helper; using Hi3Helper.Data; +using Hi3Helper.Preset; using Hi3Helper.Shared.Region; using Microsoft.UI.Text; using Microsoft.UI.Xaml; @@ -9,8 +11,6 @@ using Microsoft.UI.Xaml.Media.Imaging; using System; using System.Collections.Generic; -using CollapseLauncher.Statics; -using Hi3Helper.Preset; using static Hi3Helper.Locale; namespace CollapseLauncher @@ -18,11 +18,8 @@ namespace CollapseLauncher internal class BackgroundActivityManager { private static ThemeShadow _infoBarShadow = new ThemeShadow(); - public static Dictionary BackgroundActivities = new Dictionary(); - private static GamePresetProperty CurrentGameProperty; - public static void Attach(int hashID, IBackgroundActivity activity, string activityTitle, string activitySubtitle) { if (!BackgroundActivities.ContainsKey(hashID)) @@ -93,56 +90,22 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac }; _parentGrid.Children.Add(progressLogoContainer); Grid.SetColumn(progressLogoContainer, 0); - - CurrentGameProperty = GamePropertyVault.GetCurrentGameProperty(); - switch (CurrentGameProperty._GameVersion.GameType) + + GamePresetProperty CurrentGameProperty = GamePropertyVault.GetCurrentGameProperty(); + Image processLogo = new Image() { - case GameType.Honkai: - Image progressLogoHonkai = new Image() - { - Source = new BitmapImage(new Uri("ms-appx:///XAMLs/Prototype/honkai-logo.png")), - Width = 64, - Height = 64 - }; - progressLogoContainer.Children.Add(progressLogoHonkai); - break; - case GameType.Genshin: - Image progressLogoGenshin = new Image() - { - Source = new BitmapImage(new Uri("ms-appx:///XAMLs/Prototype/genshin-logo.png")), - Width = 64, - Height = 64 - }; - progressLogoContainer.Children.Add(progressLogoGenshin); - break; - case GameType.StarRail: - Image progressLogoStarRail = new Image() - { - Source = new BitmapImage(new Uri("ms-appx:///XAMLs/Prototype/starrail-logo.png")), - Width = 64, - Height = 64 - }; - progressLogoContainer.Children.Add(progressLogoStarRail); - break; - case GameType.Zenless: - Image progressLogoZenless = new Image() - { - Source = new BitmapImage(new Uri("ms-appx:///XAMLs/Prototype/zenless-logo.png")), - Width = 64, - Height = 64 - }; - progressLogoContainer.Children.Add(progressLogoZenless); - break; - case GameType.Unknown: - Image progressLogoUnknown = new Image() - { - Source = new BitmapImage(new Uri("ms-appx:///XAMLs/Prototype/honkai-logo.png")), - Width = 64, - Height = 64 - }; - progressLogoContainer.Children.Add(progressLogoUnknown); - break; - } + Source = new BitmapImage(new Uri(CurrentGameProperty._GameVersion.GameType switch + { + GameType.Honkai => "ms-appx:///Assets/Images/GameLogo/honkai-logo.png", + GameType.Genshin => "ms-appx:///Assets/Images/GameLogo/genshin-logo.png", + GameType.StarRail => "ms-appx:///Assets/Images/GameLogo/zenless-logo.png", + GameType.Zenless => "ms-appx:///Assets/Images/GameLogo/honkai-logo.png", + _ => "ms-appx:///Assets/Images/PaimonWhat.png" + })), + Width = 64, + Height = 64 + }; + progressLogoContainer.Children.Add(processLogo); StackPanel progressStatusContainer = new StackPanel() { @@ -171,24 +134,24 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac TextBlock progressLeftTitle = new TextBlock() { Style = Application.Current.Resources["BodyStrongTextBlockStyle"] as Style, - Text = "Downloading Package: 1 / 3" + Text = Lang._BackgroundNotification.LoadingTitle, }; TextBlock progressLeftSubtitle = new TextBlock() { Style = Application.Current.Resources["CaptionTextBlockStyle"] as Style, - Text = "Speed: 69.42 MB/s" + Text = Lang._BackgroundNotification.Placeholder, }; TextBlock progressRightTitle = new TextBlock() { Style = Application.Current.Resources["BodyStrongTextBlockStyle"] as Style, - Text = "Estimated Time: 0h 32m left", + Text = Lang._BackgroundNotification.Placeholder, HorizontalAlignment = HorizontalAlignment.Right }; TextBlock progressRightSubtitle = new TextBlock() { Style = Application.Current.Resources["CaptionTextBlockStyle"] as Style, - Text = "Progress: 69.42%", + Text = Lang._BackgroundNotification.Placeholder, HorizontalAlignment = HorizontalAlignment.Right }; progressStatusGrid.Children.Add(progressLeftTitle); @@ -200,7 +163,7 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac Grid.SetColumn(progressRightTitle, 1); Grid.SetRow(progressRightTitle, 0); Grid.SetColumn(progressRightSubtitle, 1); Grid.SetRow(progressRightSubtitle, 1); - ProgressBar progressBar = new ProgressBar() { Minimum = 0, Maximum = 100, Value = 69.42 }; + ProgressBar progressBar = new ProgressBar() { Minimum = 0, Maximum = 100, Value = 0, IsIndeterminate = true }; progressStatusContainer.Children.Add(progressBar); Button cancelButton = new Button() @@ -239,7 +202,7 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac _parentNotifUI.IsOpen = false; }; - activity.ProgressChanged += (_, args) => activity.Dispatch(() => + EventHandler ProgressChangedEventHandler = (_, args) => activity?.Dispatch(() => { progressBar.Value = args.ProgressTotalPercentage; progressLeftSubtitle.Text = string.Format(Lang._Misc.Speed, ConverterTool.SummarizeSizeSimple(args.ProgressTotalSpeed)); @@ -247,15 +210,16 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac progressRightSubtitle.Text = string.Format(Lang._UpdatePage.UpdateHeader1 + " {0}%", args.ProgressTotalPercentage); }); - activity.StatusChanged += (_, args) => activity.Dispatch(() => + EventHandler StatusChangedEventHandler = (_, args) => activity?.Dispatch(() => { + progressBar.IsIndeterminate = args.IsProgressTotalIndetermined; progressLeftTitle.Text = args.ActivityStatus; if (args.IsCanceled) { cancelButton.IsEnabled = false; cancelButton.Visibility = Visibility.Collapsed; _parentNotifUI.Severity = InfoBarSeverity.Error; - _parentNotifUI.Title = "[Error] " + activityTitle; + _parentNotifUI.Title = string.Format(Lang._BackgroundNotification.NotifBadge_Error, activityTitle); _parentNotifUI.IsClosable = true; _parentContainer.Margin = containerClosableMargin; } @@ -264,7 +228,7 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac cancelButton.IsEnabled = false; cancelButton.Visibility = Visibility.Collapsed; _parentNotifUI.Severity = InfoBarSeverity.Success; - _parentNotifUI.Title = "[Completed] " + activityTitle; + _parentNotifUI.Title = string.Format(Lang._BackgroundNotification.NotifBadge_Completed, activityTitle); _parentNotifUI.IsClosable = true; _parentContainer.Margin = containerClosableMargin; } @@ -279,7 +243,21 @@ private static void AttachEventToNotification(int hashID, IBackgroundActivity ac } }); - _parentNotifUI.Closing += (_, _) => Detach(hashID); + activity.ProgressChanged += ProgressChangedEventHandler; + activity.StatusChanged += StatusChangedEventHandler; + + activity.FlushingTrigger += (obj, sender) => + { + activity.ProgressChanged -= ProgressChangedEventHandler; + activity.StatusChanged -= StatusChangedEventHandler; + }; + + _parentNotifUI.Closing += (_, _) => + { + activity.ProgressChanged -= ProgressChangedEventHandler; + activity.StatusChanged -= StatusChangedEventHandler; + Detach(hashID); + }; _parentContainer.Children.Add(cancelButton); NotificationSender.SendCustomNotification(hashID, _parentNotifUI); diff --git a/CollapseLauncher/Classes/EventsManagement/EventsHandler.cs b/CollapseLauncher/Classes/EventsManagement/EventsHandler.cs index 1a391aadc..d4ec03cd6 100644 --- a/CollapseLauncher/Classes/EventsManagement/EventsHandler.cs +++ b/CollapseLauncher/Classes/EventsManagement/EventsHandler.cs @@ -5,14 +5,16 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Animation; -using Squirrel; using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using System.Threading.Tasks; using Windows.Foundation; +#if !DEBUG +using Squirrel; using static CollapseLauncher.InnerLauncherConfig; +#endif using static Hi3Helper.Locale; using static Hi3Helper.Logger; using static Hi3Helper.Shared.Region.LauncherConfig; @@ -67,8 +69,8 @@ public static async void StartCheckUpdate() LogWriteLine($"Update check has failed! Will retry in 15 mins.\r\n{ex}", LogType.Error, true); } } - // Delay for 15 minutes - await Task.Delay(900 * 1000); + // Delay for 15 minutes + await Task.Delay(900 * 1000); } #endif } @@ -120,7 +122,7 @@ internal class LauncherUpdateProperty public GameVersion NewVersionName { get; set; } public bool QuitFromUpdateMenu { get; set; } = false; } -#endregion + #endregion #region ThemeChangeRegion internal static class ThemeChanger { diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/BaseClass/TypeExtensions.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/BaseClass/TypeExtensions.cs deleted file mode 100644 index aa4934044..000000000 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/BaseClass/TypeExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Reflection; - -namespace CollapseLauncher -{ - public static class TypeExtensions - { - public static bool IsInstancePropertyEqual(T self, T to) where T : class - { - // Check if the one of the value is null, if true check the other value if it's null - if (self == null) - { - if (to != null) return false; - else return true; - } - if (to == null) - { - if (self != null) return false; - else return true; - } - - // Get the type of the instance - Type type = typeof(T); - // Enumerate the PropertyInfo out of instance - foreach (PropertyInfo pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance)) - { - // Get the property name and value from both self and to - object selfValue = type.GetProperty(pi.Name).GetValue(self, null); - object toValue = type.GetProperty(pi.Name).GetValue(to, null); - - // If the value on both self and to is different, then return false (not equal) - if (selfValue != toValue && (selfValue == null || !selfValue.Equals(toValue))) - { - return false; - } - } - - // If all passes, then return true (equal) - return true; - } - } -} diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/GeneralData.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/GeneralData.cs index eba4045f7..9ebe16900 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/GeneralData.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/GeneralData.cs @@ -1,5 +1,6 @@ using CollapseLauncher.GameSettings.Genshin.Context; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Collections.Generic; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/ScreenManager.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/ScreenManager.cs index 8faa4f027..2f66f2344 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/ScreenManager.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Genshin/RegistryClass/ScreenManager.cs @@ -1,6 +1,7 @@ using CollapseLauncher.GameSettings.Base; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Hi3Helper.Screen; using Microsoft.Win32; using System; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSetting.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSetting.cs index fde2678f9..39dc4d5b8 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSetting.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSetting.cs @@ -1,6 +1,7 @@ using CollapseLauncher.GameSettings.Honkai.Context; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Text; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSettingVolume.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSettingVolume.cs index 8ab1b3ee9..15527b7c1 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSettingVolume.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalAudioSettingVolume.cs @@ -1,6 +1,7 @@ using CollapseLauncher.GameSettings.Honkai.Context; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Text; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalGraphicsSettingV2.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalGraphicsSettingV2.cs index 510bcdc86..79e57035c 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalGraphicsSettingV2.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/PersonalGraphicsSettingV2.cs @@ -2,6 +2,7 @@ using CollapseLauncher.GameSettings.Honkai.Enums; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Text; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/ScreenSettingData.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/ScreenSettingData.cs index b1a9d66e8..eae400ef7 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/ScreenSettingData.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/Honkai/RegistryClass/ScreenSettingData.cs @@ -2,6 +2,7 @@ using CollapseLauncher.GameSettings.Honkai.Context; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Hi3Helper.Screen; using Microsoft.Win32; using System; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/BGMVolume.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/BGMVolume.cs index 838c22967..6fb7a33b1 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/BGMVolume.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/BGMVolume.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using static CollapseLauncher.GameSettings.Base.SettingsBase; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalAudioLanguage.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalAudioLanguage.cs index 45ec39c56..47a93007a 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalAudioLanguage.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalAudioLanguage.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Text; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalTextLanguage.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalTextLanguage.cs index b96af6202..39eef4fe8 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalTextLanguage.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/LocalTextLanguage.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Text; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/MasterVolume.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/MasterVolume.cs index f340c99e7..781d0a74d 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/MasterVolume.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/MasterVolume.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using static CollapseLauncher.GameSettings.Base.SettingsBase; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/Model.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/Model.cs index feb18977c..f42e5aee0 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/Model.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/Model.cs @@ -1,6 +1,7 @@ using CollapseLauncher.GameSettings.StarRail.Context; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using System.Collections.Generic; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/PCResolution.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/PCResolution.cs index 0b5c1ca91..9336444f4 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/PCResolution.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/PCResolution.cs @@ -2,6 +2,7 @@ using CollapseLauncher.GameSettings.StarRail.Context; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Hi3Helper.Screen; using Microsoft.Win32; using System; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/SFXVolume.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/SFXVolume.cs index a7ec102c7..659291a79 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/SFXVolume.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/SFXVolume.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using static CollapseLauncher.GameSettings.Base.SettingsBase; diff --git a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/VOVolume.cs b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/VOVolume.cs index 1fdf96a0e..f5aaa69df 100644 --- a/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/VOVolume.cs +++ b/CollapseLauncher/Classes/GameManagement/GameSettings/StarRail/RegistryClass/VOVolume.cs @@ -1,5 +1,6 @@ using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.EncTool; using Microsoft.Win32; using System; using static CollapseLauncher.GameSettings.Base.SettingsBase; diff --git a/CollapseLauncher/Classes/GameManagement/GameVersion/BaseClass/GameVersionBase.cs b/CollapseLauncher/Classes/GameManagement/GameVersion/BaseClass/GameVersionBase.cs index df4e2f875..54a6081e5 100644 --- a/CollapseLauncher/Classes/GameManagement/GameVersion/BaseClass/GameVersionBase.cs +++ b/CollapseLauncher/Classes/GameManagement/GameVersion/BaseClass/GameVersionBase.cs @@ -1,4 +1,4 @@ -using CollapseLauncher.Interfaces; +using CollapseLauncher.Interfaces; using Hi3Helper; using Hi3Helper.Data; using Hi3Helper.Preset; @@ -90,23 +90,12 @@ protected GameVersion? GameVersionAPIPreload { GameVersion? currentInstalled = GameVersionInstalled; - // Check if the pre_download_game property has value. If not, then return null - if (GameAPIProp.data.pre_download_game == null) return null; // If no installation installed, then return null if (currentInstalled == null) return null; + // Check if the pre_download_game property has value. If not, then return null + if (GameAPIProp.data.pre_download_game == null) return null; - // If has it, then check if the pre_download_game has diff. - // If null or no data, then return the latest one. - if (GameAPIProp.data.pre_download_game.diffs == null - || GameAPIProp.data.pre_download_game.diffs.Count == 0) return TryGetNextVersionFromPkgFileName(GameAPIProp.data.pre_download_game.latest); - - // Try get the diff version - RegionResourceVersion diffVersion = GameAPIProp.data.pre_download_game.diffs.Where(x => x.version == currentInstalled?.VersionString).FirstOrDefault(); - // If diff is not found for current version, then return the latest one - if (diffVersion == null) return TryGetNextVersionFromPkgFileName(GameAPIProp.data.pre_download_game.latest); - - // If all passes, then return diff version - return TryGetNextVersionFromPkgFileName(diffVersion); + return new GameVersion(GameAPIProp.data.pre_download_game.latest.version); } } @@ -185,7 +174,7 @@ public virtual List GetGamePreloadZip() if (GameAPIProp.data.pre_download_game == null) return null; // Try get the diff file by the first or default (null) - RegionResourceVersion diff = GameAPIProp.data.pre_download_game.diffs + RegionResourceVersion diff = GameAPIProp.data.pre_download_game?.diffs? .Where(x => x.version == GameVersionInstalled?.VersionString) .FirstOrDefault(); @@ -287,34 +276,6 @@ private void InitializeIniProp() VendorTypeProp = new GameVendorProp(GameDirPath, Path.GetFileNameWithoutExtension(GamePreset.GameExecutableName), GamePreset.VendorType); } - private GameVersion TryGetNextVersionFromPkgFileName(RegionResourceVersion pkgVersion) - { - // Get the package name - string pkgName = Path.GetFileNameWithoutExtension(pkgVersion.path); - - try - { - // Split the package into sections by _ - string[] pkgSections = pkgName.Split('_'); - - // Set the offset of the section. If the length > 2, then set 1 - // Otherwise, set 2; - int offset = pkgSections.Length > 2 ? 1 : 2; - - // Try get the version string, lower it and trim it - string versionStr = pkgSections[offset].ToLower().Trim('v'); - - // Try parse it and return it - return new GameVersion(versionStr); - } - catch (Exception ex) - { - // If fail, then fallback to the one provided by the pkgVersion - Logger.LogWriteLine($"Error while parsing version from package name! Will return the one from version variable instead.\r\nRAW String: {pkgVersion?.path ?? ""}\r\n{ex}"); - return new GameVersion(pkgVersion.version); - } - } - private string TryFindGamePathFromExecutableAndConfig(string path) { // Phase 1: Check on the root directory diff --git a/CollapseLauncher/Classes/PageStatics.cs b/CollapseLauncher/Classes/GamePropertyVault.cs similarity index 83% rename from CollapseLauncher/Classes/PageStatics.cs rename to CollapseLauncher/Classes/GamePropertyVault.cs index 5c40c60e8..5edcbbf68 100644 --- a/CollapseLauncher/Classes/PageStatics.cs +++ b/CollapseLauncher/Classes/GamePropertyVault.cs @@ -12,11 +12,13 @@ using Microsoft.UI.Xaml; using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; namespace CollapseLauncher.Statics { - internal class GamePresetProperty + internal class GamePresetProperty : IDisposable { internal GamePresetProperty(UIElement UIElementParent, RegionResourceProp APIResouceProp, PresetConfigV2 GamePreset) { @@ -120,7 +122,7 @@ private static List CopyReturn(IEnumerable Source) ZonePosterURL = GamePreset.ZonePosterURL, ZoneURL = GamePreset.ZoneURL, }; -#endregion + #endregion internal RegionResourceProp _APIResouceProp { get; set; } internal PresetConfigV2 _GamePreset { get; set; } @@ -129,6 +131,36 @@ private static List CopyReturn(IEnumerable Source) internal ICache _GameCache { get; set; } internal IGameVersionCheck _GameVersion { get; set; } internal IGameInstallManager _GameInstall { get; set; } + internal bool IsGameRunning => Process.GetProcessesByName(Path.GetFileNameWithoutExtension(_GamePreset.GameExecutableName)).Length > 0; + + /* + ~GamePresetProperty() + { +#if DEBUG + Logger.LogWriteLine($"[~GamePresetProperty()] Deconstructor getting called in GamePresetProperty for Hash ID: {_GamePreset.HashID}", LogType.Warning, true); +#endif + Dispose(); + } + */ + + public void Dispose() + { + _GameRepair?.CancelRoutine(); + _GameCache?.CancelRoutine(); + _GameInstall?.CancelRoutine(); + + _GameRepair?.Dispose(); + _GameCache?.Dispose(); + _GameInstall?.Dispose(); + + _APIResouceProp = null; + _GamePreset = null; + _GameSettings = null; + _GameRepair = null; + _GameCache = null; + _GameVersion = null; + _GameInstall = null; + } } internal static class GamePropertyVault @@ -163,12 +195,14 @@ public static void RegisterGameProperty(UIElement UIElementParent, RegionResourc #endif } - private static void CleanupUnusedGameProperty() +#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously + private static async void CleanupUnusedGameProperty() +#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously { if (Vault.Count == 0) return; int[] unusedGamePropertyHashID = Vault.Values - .Where(x => !x._GameInstall.IsRunning && x._GamePreset.HashID != CurrentGameHashID)? + .Where(x => !x._GameInstall.IsRunning && !x.IsGameRunning && x._GamePreset.HashID != CurrentGameHashID)? .Select(x => x._GamePreset.HashID)? .ToArray(); @@ -192,7 +226,13 @@ private static void AttachNotifForCurrentGame_Inner(int HashID) GamePresetProperty GameProperty = Vault[HashID]; if (GameProperty._GameInstall.IsRunning) { - string actTitle = $"Downloading game: {GameProperty._GameVersion.GamePreset.GameName}"; + string actTitle = string.Format(GameProperty._GameVersion.GetGameState() switch + { + GameInstallStateEnum.InstalledHavePreload => Locale.Lang._BackgroundNotification.CategoryTitle_DownloadingPreload, + GameInstallStateEnum.NeedsUpdate => Locale.Lang._BackgroundNotification.CategoryTitle_Updating, + _ => Locale.Lang._BackgroundNotification.CategoryTitle_Downloading + }, GameProperty._GameVersion.GamePreset.GameName); + string actSubtitle = GameProperty._GameVersion.GamePreset.ZoneName; BackgroundActivityManager.Attach(HashID, GameProperty._GameInstall, actTitle, actSubtitle); } diff --git a/CollapseLauncher/Classes/InstallManagement/BaseClass/GameInstallPackage.cs b/CollapseLauncher/Classes/InstallManagement/BaseClass/GameInstallPackage.cs index 3095ab5b3..0a500cd7b 100644 --- a/CollapseLauncher/Classes/InstallManagement/BaseClass/GameInstallPackage.cs +++ b/CollapseLauncher/Classes/InstallManagement/BaseClass/GameInstallPackage.cs @@ -113,33 +113,19 @@ public Stream GetReadStream(int count) return GetCombinedStreamFromPackageAsset(count); } - public void DeleteFile(int count) + public long GetStreamLength(int count) { - string lastFile = PathOutput; - try - { - FileInfo fileInfo = new FileInfo(PathOutput); - if (fileInfo.Exists && fileInfo.Length == Size) - { - fileInfo.Delete(); - } - - for (int i = 0; i < count; i++) - { - long ID = Http.GetHashNumber(count, i); - string path = $"{PathOutput}.{ID}"; - lastFile = path; - fileInfo = new FileInfo(path); - if (fileInfo.Exists) - { - fileInfo.Delete(); - } - } - } - catch (Exception ex) + // Get the file info of the single file + FileInfo fileInfo = new FileInfo(PathOutput); + // Check if the file exist and the length is equal to the size + if (fileInfo.Exists && fileInfo.Length == Size) { - Logger.LogWriteLine($"Failed while deleting file: {lastFile}. Skipping!\r\n{ex}", LogType.Warning, true); + // Return the stream for read + return fileInfo.Length; } + + // If the single file doesn't exist, then try getting chunk stream + return GetCombinedLengthFromPackageAsset(count); } private CombinedStream GetCombinedStreamFromPackageAsset(int count) @@ -178,6 +164,61 @@ private CombinedStream GetCombinedStreamFromPackageAsset(int count) return new CombinedStream(streamList); } + private long GetCombinedLengthFromPackageAsset(int count) + { + // Initialize length + long length = 0; + // Enumerate the ID + for (int i = 0; i < count; i++) + { + // Get the hash ID + long ID = Http.GetHashNumber(count, i); + // Append hash ID to the path + string path = $"{PathOutput}.{ID}"; + // Get the file info and check if the file exist + FileInfo fileInfo = new FileInfo(path); + if (fileInfo.Exists) + { + // Add length to the existing one + length += fileInfo.Length; + // Then go back to the loop routine + continue; + } + } + + // Return the length + return length; + } + + public void DeleteFile(int count) + { + string lastFile = PathOutput; + try + { + FileInfo fileInfo = new FileInfo(PathOutput); + if (fileInfo.Exists && fileInfo.Length == Size) + { + fileInfo.Delete(); + } + + for (int i = 0; i < count; i++) + { + long ID = Http.GetHashNumber(count, i); + string path = $"{PathOutput}.{ID}"; + lastFile = path; + fileInfo = new FileInfo(path); + if (fileInfo.Exists) + { + fileInfo.Delete(); + } + } + } + catch (Exception ex) + { + Logger.LogWriteLine($"Failed while deleting file: {lastFile}. Skipping!\r\n{ex}", LogType.Warning, true); + } + } + public string PrintSummary() => $"File [T: {PackageType}]: {URL}\t{ConverterTool.SummarizeSizeSimple(Size)} ({Size} bytes)"; public long GetAssetSize() => Size; } diff --git a/CollapseLauncher/Classes/InstallManagement/BaseClass/InstallManagerBase.cs b/CollapseLauncher/Classes/InstallManagement/BaseClass/InstallManagerBase.cs index 8d274db71..ab555811b 100644 --- a/CollapseLauncher/Classes/InstallManagement/BaseClass/InstallManagerBase.cs +++ b/CollapseLauncher/Classes/InstallManagement/BaseClass/InstallManagerBase.cs @@ -1,5 +1,4 @@ using CollapseLauncher.Interfaces; -using CollapseLauncher.Statics; using Hi3Helper; using Hi3Helper.Data; using Hi3Helper.EncTool; @@ -15,10 +14,10 @@ using System.Data; using System.IO; using System.Linq; -using System.Reflection.Metadata.Ecma335; using System.Security.Cryptography; using System.Text; using System.Text.Json; +using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using static CollapseLauncher.Dialogs.SimpleDialogs; @@ -28,8 +27,18 @@ namespace CollapseLauncher.InstallManager.Base { - internal class InstallManagerBase : ProgressBase where T : IGameVersionCheck + internal abstract class InstallManagerBase : ProgressBase where T : IGameVersionCheck { + #region Internal Struct + protected struct UninstallGameProperty + { + public string gameDataFolderName; + public string[] filesToDelete; + public string[] foldersToDelete; + public string[] foldersToKeepInData; + } + #endregion + #region Properties protected readonly string _gamePersistentFolderBasePath; protected readonly string _gameStreamingAssetsFolderBasePath; @@ -54,6 +63,7 @@ internal class InstallManagerBase : ProgressBase Dispose(); + /* + ~InstallManagerBase() + { +#if DEBUG + LogWriteLine($"[~InstallManagerBase()] Deconstructor getting called in {_gameVersionManager}", LogType.Warning, true); +#endif + Dispose(); + } + */ protected void ResetToken() => _token = new CancellationTokenSource(); @@ -81,9 +99,10 @@ public void Dispose() public virtual void Flush() { + UpdateCompletenessStatus(CompletenessStatus.Idle); _gameRepairTool?.Dispose(); _assetIndex.Clear(); - UpdateCompletenessStatus(CompletenessStatus.Idle); + FlushingTrigger?.Invoke(this, EventArgs.Empty); } #region Public Methods @@ -445,10 +464,8 @@ public virtual async ValueTask IsPreloadCompleted() // Check if the read stream exist if (segment.IsReadStreamExist(_downloadThreadCount)) { - // Get the stream of the segment and using (and auto dispose) it - using Stream segmentStream = segment.GetReadStream(_downloadThreadCount); - // Return the size/length of the stream - return segmentStream.Length; + // Return the size/length of the chunk stream + return segment.GetStreamLength(_downloadThreadCount); } // If not, then return 0 return 0; @@ -458,10 +475,8 @@ public virtual async ValueTask IsPreloadCompleted() // If segment is none, check if the single stream exist if (asset.IsReadStreamExist(_downloadThreadCount)) { - // If yes, then using single stream - using Stream singleStream = asset.GetReadStream(_downloadThreadCount); - // Return the size of the stream - return singleStream.Length; + // If yes, then return the size of the single stream + return asset.GetStreamLength(_downloadThreadCount); } // If neither of both exist, then return 0 @@ -480,24 +495,143 @@ public async Task MoveGameLocation() public async ValueTask UninstallGame() { + // Get the Game folder string GameFolder = ConverterTool.NormalizePath(_gamePath); - switch (await Dialog_UninstallGame(_parentUI, GameFolder, _gameVersionManager.GamePreset.ZoneFullname)) + // Check if the dialog result is Okay (Primary). If not, then return false + ContentDialogResult DialogResult = await Dialog_UninstallGame(_parentUI, GameFolder, _gameVersionManager.GamePreset.ZoneFullname); + if (DialogResult != ContentDialogResult.Primary) return false; + + try { - case ContentDialogResult.Primary: + // Assign UninstallProperty from each overrides + UninstallGameProperty UninstallProperty = AssignUninstallFolders(); + + //Preparing paths + var _DataFolderFullPath = Path.Combine(GameFolder, UninstallProperty.gameDataFolderName); + + var foldersToKeepInDataFullPath = new string[UninstallProperty.foldersToKeepInData.Length]; // Just in case mhy put more not-to-be-deleted folders in _Data + for (int i = 0; i < UninstallProperty.foldersToKeepInData.Length; i++) // yes i'm still salty about it + { + foldersToKeepInDataFullPath[i] = Path.Combine(_DataFolderFullPath, UninstallProperty.foldersToKeepInData[i]); + } + + LogWriteLine($"Uninstalling game: {_gameVersionManager.GameType} - region: {_gameVersionManager.GamePreset.ZoneName}\r\n" + + $" GameFolder : {GameFolder}\r\n" + + $" gameDataFolderName : {UninstallProperty.gameDataFolderName}\r\n" + + $" foldersToDelete : {string.Join(", ", UninstallProperty.foldersToDelete)}\r\n" + + $" filesToDelete : {string.Join(", ", UninstallProperty.filesToDelete)}\r\n" + + $" foldersToKeepInData : {string.Join(", ", UninstallProperty.foldersToKeepInData)}\r\n" + + $" _Data folder path : {_DataFolderFullPath}\r\n" + + $" Excluded full paths : {string.Join(", ", foldersToKeepInDataFullPath)}", LogType.Warning, true); + + // Cleanup Game_Data folder while keeping whatever specified in foldersToKeepInData + foreach (string folderGameData in Directory.EnumerateFileSystemEntries(_DataFolderFullPath)) + { try { - Directory.Delete(GameFolder, true); + if (UninstallProperty.foldersToKeepInData.Length != 0 && !foldersToKeepInDataFullPath.Contains(folderGameData)) // Skip this entire process if foldersToKeepInData is null + { + // Delete directories inside gameDataFolderName that is not included in foldersToKeepInData + if (File.GetAttributes(folderGameData).HasFlag(FileAttributes.Directory)) + { + Directory.Delete(folderGameData, true); + LogWriteLine($"Deleted folder: {folderGameData}", LogType.Default, true); + } + // Delete files inside gameDataFolderName that is not included in foldersToKeepInData + else + { + File.Delete(folderGameData); + LogWriteLine($"Deleted file: {folderGameData}", LogType.Default, true); + } + continue; + } } catch (Exception ex) { - LogWriteLine($"Failed while deleting the game folder: {GameFolder}\r\n{ex}", LogType.Error, true); + LogWriteLine($"An error occurred while deleting object {folderGameData}\r\n{ex}", LogType.Error, true); } - _gameVersionManager.Reinitialize(); - return true; - default: - return false; + } + // Check if _DataFolderPath folder empty after cleaning up + if (!Directory.EnumerateFileSystemEntries(_DataFolderFullPath).Any()) + { + Directory.Delete(_DataFolderFullPath); + LogWriteLine($"Deleted empty game folder: {_DataFolderFullPath}", LogType.Default, true); + } + + // Cleanup any folders in foldersToDelete + foreach (string folderNames in Directory.EnumerateDirectories(GameFolder)) + { + if (UninstallProperty.foldersToDelete.Length != 0 && UninstallProperty.foldersToDelete.Contains(Path.GetFileName(folderNames))) + { + try + { + Directory.Delete(folderNames, true); + LogWriteLine($"Deleted {folderNames}", LogType.Default, true); + } + catch (Exception ex) + { + LogWriteLine($"An error occurred while deleting folder {folderNames}\r\n{ex}", LogType.Error, true); + } + continue; + } + } + + // Cleanup any files in filesToDelete + foreach (string fileNames in Directory.EnumerateFiles(GameFolder)) + { + if (UninstallProperty.filesToDelete.Length != 0 && UninstallProperty.filesToDelete.Contains(Path.GetFileName(fileNames)) || + UninstallProperty.filesToDelete.Length != 0 && UninstallProperty.filesToDelete.Any(pattern => Regex.IsMatch(Path.GetFileName(fileNames), pattern, RegexOptions.Compiled | RegexOptions.NonBacktracking))) + { + try + { + File.Delete(fileNames); + LogWriteLine($"Deleted {fileNames}", LogType.Default, true); + } + catch (Exception ex) + { + LogWriteLine($"An error occurred while deleting file {fileNames}\r\n{ex}", LogType.Error, true); + } + continue; + } + } + + // Cleanup Game App Data + string appDataPath = _gameVersionManager.GameDirAppDataPath; + try + { + Directory.Delete(appDataPath, true); + LogWriteLine($"Deleted {appDataPath}", LogType.Default, true); + } + catch (Exception ex) + { + LogWriteLine($"An error occurred while deleting game AppData folder: {_gameVersionManager.GameDirAppDataPath}\r\n{ex}", LogType.Error, true); + } + + // Remove the entire folder if nothing is there + if (Directory.Exists(GameFolder) && !Directory.EnumerateFileSystemEntries(GameFolder).Any()) + { + try + { + Directory.Delete(GameFolder); + LogWriteLine($"Deleted empty game folder: {GameFolder}", LogType.Default, true); + } + catch (Exception ex) + { + LogWriteLine($"An error occurred while deleting empty game folder: {GameFolder}\r\n{ex}", LogType.Error, true); + } + } + else + { + LogWriteLine($"Game folder {GameFolder} is not empty, skipping delete root directory...", LogType.Default, true); + } } + catch (Exception ex) + { + LogWriteLine($"Failed while uninstalling game: {_gameVersionManager.GameType} - region: {_gameVersionManager.GamePreset.ZoneName}\r\n{ex}", LogType.Error, true); + } + _gameVersionManager.Reinitialize(); + return true; } public void CancelRoutine() @@ -595,7 +729,7 @@ public virtual async ValueTask ApplyHdiffListPatch() await Task.Run(() => { patcher.Initialize(patchPath); - patcher.Patch(sourceBasePath, destPath, false, _token.Token); + patcher.Patch(sourceBasePath, destPath, true, _token.Token); }, _token.Token); File.Move(destPath, sourceBasePath, true); @@ -1231,6 +1365,9 @@ private void UpdateCompletenessStatus(CompletenessStatus status) _status.IsRunning = false; _status.IsCompleted = true; _status.IsCanceled = false; + // HACK: Fix the progress not achieving 100% while completed + _progress.ProgressTotalPercentage = 100f; + _progress.ProgressPerFilePercentage = 100f; break; case CompletenessStatus.Cancelled: IsRunning = false; @@ -1245,7 +1382,7 @@ private void UpdateCompletenessStatus(CompletenessStatus status) _status.IsCanceled = false; break; } - UpdateStatus(); + UpdateAll(); } protected async Task TryGetPackageRemoteSize(GameInstallPackage asset, CancellationToken token) @@ -1271,6 +1408,10 @@ protected async Task TryGetSegmentedPackageRemoteSize(GameInstallPackage asset, } #endregion + #region Virtual Methods - UninstallGame + protected virtual UninstallGameProperty AssignUninstallFolders() => throw new NotSupportedException($"Cannot uninstall game: {_gameVersionManager.GamePreset.GameType}. Uninstall method is not yet implemented!"); + #endregion + #region Event Methods protected void UpdateProgressBase() => base.UpdateProgress(); diff --git a/CollapseLauncher/Classes/InstallManagement/Genshin/GenshinInstall.cs b/CollapseLauncher/Classes/InstallManagement/Genshin/GenshinInstall.cs index 011f6618b..664ac2d23 100644 --- a/CollapseLauncher/Classes/InstallManagement/Genshin/GenshinInstall.cs +++ b/CollapseLauncher/Classes/InstallManagement/Genshin/GenshinInstall.cs @@ -2,6 +2,7 @@ using CollapseLauncher.InstallManager.Base; using CollapseLauncher.Interfaces; using Hi3Helper; +using Hi3Helper.Preset; using Hi3Helper.Shared.ClassStruct; using Microsoft.UI.Xaml; using System; @@ -130,7 +131,7 @@ public override async ValueTask IsPreloadCompleted() // Get the secondary file check bool secondaryAsset = voicePackList.All(x => File.Exists(x.PathOutput)); - return primaryAsset && secondaryAsset; + return (primaryAsset && secondaryAsset) || await base.IsPreloadCompleted(); } public override void ApplyGameConfig(bool forceUpdateToLatest = false) @@ -275,5 +276,25 @@ private void TryAddOtherVoicePacksDictionary(string key, RegionResourceVersion v } } #endregion + + #region Override Methods - UninstallGame + protected override UninstallGameProperty AssignUninstallFolders() + { + string execName = _gameVersionManager.GamePreset.ZoneName switch + { + "Global" => "GenshinImpact", + "Mainland China" => "YuanShen", + _ => throw new NotSupportedException($"Unknown GI Game Region!: {_gameVersionManager.GamePreset.ZoneName}") + }; + + return new UninstallGameProperty() + { + gameDataFolderName = $"{execName}_Data", + foldersToDelete = new string[] { $"{execName}_Data" }, + filesToDelete = new string[] { "HoYoKProtect.sys", "pkg_version", $"{execName}.exe", "UnityPlayer.dll", "config.ini", "^mhyp.*", "^Audio.*" }, + foldersToKeepInData = new string[] { "ScreenShot" } + }; + } + #endregion } } diff --git a/CollapseLauncher/Classes/InstallManagement/Honkai/HonkaiInstall.cs b/CollapseLauncher/Classes/InstallManagement/Honkai/HonkaiInstall.cs index 26944046e..a7a01f1da 100644 --- a/CollapseLauncher/Classes/InstallManagement/Honkai/HonkaiInstall.cs +++ b/CollapseLauncher/Classes/InstallManagement/Honkai/HonkaiInstall.cs @@ -351,5 +351,15 @@ private string GetFailedGameConversionFolder(string basepath) return null; } #endregion + + #region Override Methods - UninstallGame + protected override UninstallGameProperty AssignUninstallFolders() => new UninstallGameProperty() + { + gameDataFolderName = "BH3_Data", + foldersToDelete = new string[] { "BH3_Data", "AntiCheatExpert" }, + filesToDelete = new string[] { "ACE-BASE.sys", "bugtrace.dll", "pkg_version", "UnityPlayer.dll", "config.ini" }, + foldersToKeepInData = null + }; + #endregion } } diff --git a/CollapseLauncher/Classes/InstallManagement/StarRail/StarRailInstall.cs b/CollapseLauncher/Classes/InstallManagement/StarRail/StarRailInstall.cs index f118c8e45..e3921ea15 100644 --- a/CollapseLauncher/Classes/InstallManagement/StarRail/StarRailInstall.cs +++ b/CollapseLauncher/Classes/InstallManagement/StarRail/StarRailInstall.cs @@ -72,5 +72,15 @@ private List EnumerateAudioLanguageString() }; } #endregion + + #region Override Methods - UninstallGame + protected override UninstallGameProperty AssignUninstallFolders() => new UninstallGameProperty() + { + gameDataFolderName = "StarRail_Data", + foldersToDelete = new string[] { "AntiCheatExpert" }, + filesToDelete = new string[] { "ACE-BASE.sys", "GameAssembly.dll", "pkg_version", "config.ini", "^StarRail.*", "^Unity.*" }, + foldersToKeepInData = new string[] { "ScreenShots" } + }; + #endregion } } diff --git a/CollapseLauncher/Classes/Interfaces/Class/Structs.cs b/CollapseLauncher/Classes/Interfaces/Class/Structs.cs index 24251d78a..0b8ce6a0b 100644 --- a/CollapseLauncher/Classes/Interfaces/Class/Structs.cs +++ b/CollapseLauncher/Classes/Interfaces/Class/Structs.cs @@ -128,7 +128,23 @@ public bool IsMatch(string versionToCompare) public bool IsMatch(GameVersion versionToCompare) => Major == versionToCompare.Major && Minor == versionToCompare.Minor && Build == versionToCompare.Build && Revision == versionToCompare.Revision; + public GameVersion GetIncrementedVersion() + { + int NextMajor = Major; + int NextMinor = Minor; + + NextMinor++; + if (NextMinor >= 10) + { + NextMinor = 0; + NextMajor++; + } + + return new GameVersion(new int[] { NextMajor, NextMinor, Build, Revision }); + } + public Version ToVersion() => new Version(Major, Minor, Build, Revision); + public override string ToString() => $"{Major}.{Minor}.{Build}"; public string VersionStringManifest { get => string.Join('.', VersionArrayManifest); } public string VersionString { get => string.Join('.', VersionArray); } diff --git a/CollapseLauncher/Classes/Interfaces/IBackgroundActivity.cs b/CollapseLauncher/Classes/Interfaces/IBackgroundActivity.cs index b77aae1c4..17db2d2f4 100644 --- a/CollapseLauncher/Classes/Interfaces/IBackgroundActivity.cs +++ b/CollapseLauncher/Classes/Interfaces/IBackgroundActivity.cs @@ -8,6 +8,8 @@ internal interface IBackgroundActivity { event EventHandler ProgressChanged; event EventHandler StatusChanged; + event EventHandler FlushingTrigger; + bool IsRunning { get; } UIElement _parentUI { get; } void CancelRoutine(); diff --git a/CollapseLauncher/Classes/Interfaces/IGameInstallManager.cs b/CollapseLauncher/Classes/Interfaces/IGameInstallManager.cs index c85624c88..ca3df2565 100644 --- a/CollapseLauncher/Classes/Interfaces/IGameInstallManager.cs +++ b/CollapseLauncher/Classes/Interfaces/IGameInstallManager.cs @@ -1,8 +1,9 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace CollapseLauncher.Interfaces { - internal interface IGameInstallManager : IBackgroundActivity + internal interface IGameInstallManager : IBackgroundActivity, IDisposable { ValueTask GetInstallationPath(); Task StartPackageDownload(bool skipDialog = false); diff --git a/CollapseLauncher/Classes/Properties/ArgumentParser.cs b/CollapseLauncher/Classes/Properties/ArgumentParser.cs index 5d5d507f8..e68ab9c0b 100644 --- a/CollapseLauncher/Classes/Properties/ArgumentParser.cs +++ b/CollapseLauncher/Classes/Properties/ArgumentParser.cs @@ -46,6 +46,10 @@ public static void ParseArguments(params string[] args) m_appMode = AppMode.InvokerMoveSteam; ParseMoveSteamArguments(args); break; + case "oobesetup": + m_appMode = AppMode.OOBEState; + ParseOOBEArguments(args); + break; } if (rootCommand.Invoke(args) > 0) @@ -119,6 +123,11 @@ public static void ParseMigrateArguments(bool isBHI3L = false, params string[] a AddMigrateOptions(isBHI3L); } + public static void ParseOOBEArguments(params string[] args) + { + rootCommand.AddArgument(new Argument("oobesetup", "Starts Collapse in OOBE mode, to simulate first-time setup") { HelpName = null }); + } + private static void AddMigrateOptions(bool isBHI3L) { Option o_Input, o_Output, o_GameVer = null, o_RegLoc = null; diff --git a/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs b/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs index dc8ef841c..7e40212af 100644 --- a/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs +++ b/CollapseLauncher/Classes/Properties/InnerLauncherConfig.cs @@ -37,7 +37,8 @@ public enum AppMode InvokerMigrate, InvokerTakeOwnership, InvokerMoveSteam, - Hi3CacheUpdater + Hi3CacheUpdater, + OOBEState } public static AppMode m_appMode; diff --git a/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs b/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs index 00ee38316..7f053abbb 100644 --- a/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs +++ b/CollapseLauncher/Classes/RegionManagement/RegionManagement.cs @@ -38,7 +38,6 @@ private enum ResourceLoadingType private GamePresetProperty CurrentGameProperty; private bool IsLoadRegionComplete; private bool IsExplicitCancel; - private string PreviousTag = string.Empty; private CancellationTokenSource InnerTokenSource = new CancellationTokenSource(); private uint MaxRetry = 5; // Max 5 times of retry attempt @@ -48,6 +47,7 @@ private enum ResourceLoadingType private string RegionToChangeName; private IList LastNavigationItem; private HomeMenuPanel LastRegionNewsProp; + public static string PreviousTag = string.Empty; public async Task LoadRegionFromCurrentConfigV2(PresetConfigV2 preset) { @@ -208,6 +208,33 @@ private async ValueTask FetchLauncherDownloadInformation(CancellationToken token if (_gameAPIProp.data.pre_download_game?.latest?.decompressed_path != null) LogWriteLine($"Decompressed Path Pre-load: {_gameAPIProp.data.pre_download_game?.latest?.decompressed_path}", LogType.Default, true); if (_gameAPIProp.data.pre_download_game?.latest?.path != null) LogWriteLine($"ZIP Path Pre-load: {_gameAPIProp.data.pre_download_game?.latest?.path}", LogType.Default, true); #endif + +#if SIMULATEPRELOAD && !SIMULATEAPPLYPRELOAD + if (_gameAPIProp.data.pre_download_game == null) + { + LogWriteLine("[FetchLauncherDownloadInformation] SIMULATEPRELOAD: Simulating Pre-load!"); + RegionResourceVersion simDataLatest = _gameAPIProp.data.game.latest.Copy(); + List simDataDiff = _gameAPIProp.data.game.diffs.Copy(); + + simDataLatest.version = new GameVersion(simDataLatest.version).GetIncrementedVersion().ToString(); + _gameAPIProp.data.pre_download_game = new RegionResourceLatest() { latest = simDataLatest }; + + if (simDataDiff == null || simDataDiff.Count == 0) return; + foreach (RegionResourceVersion diff in simDataDiff) + { + diff.version = new GameVersion(diff.version) + .GetIncrementedVersion() + .ToString(); + } + _gameAPIProp.data.pre_download_game.diffs = simDataDiff; + } +#endif +#if !SIMULATEPRELOAD && SIMULATEAPPLYPRELOAD + if (_gameAPIProp.data.pre_download_game != null) + { + _gameAPIProp.data.game = _gameAPIProp.data.pre_download_game; + } +#endif } private async ValueTask TryGetMultiLangResourceProp(CancellationToken Token, PresetConfigV2 Preset) diff --git a/CollapseLauncher/CollapseLauncher.csproj b/CollapseLauncher/CollapseLauncher.csproj index 2d9d8d396..1b7ebd1a9 100644 --- a/CollapseLauncher/CollapseLauncher.csproj +++ b/CollapseLauncher/CollapseLauncher.csproj @@ -9,7 +9,7 @@ preview Debug;Release;Publish true - 1.71.5 + 1.71.6 portable app.manifest CollapseLauncher.MainEntryPoint @@ -23,7 +23,7 @@ true - DISABLE_XAML_GENERATED_MAIN;PREVIEW;DISABLETRANSPARENT;DISABLEMOVEMIGRATE + DISABLE_XAML_GENERATED_MAIN;PREVIEW;DISABLETRANSPARENT;DISABLEMOVEMIGRATE;SIMULATEAPPLYPRELOAD DISABLE_XAML_GENERATED_MAIN;PREVIEW;DISABLETRANSPARENT;DISABLEMOVEMIGRATE @@ -33,9 +33,6 @@ DISABLE_XAML_GENERATED_MAIN;DISABLETRANSPARENT;DISABLEMOVEMIGRATE True - - - @@ -67,22 +64,6 @@ Always - - - Always - - - - Always - - - - Always - - - - Always - @@ -98,6 +79,22 @@ Always + + Always + + + + Always + + + + Always + + + + Always + + Always diff --git a/CollapseLauncher/Program.cs b/CollapseLauncher/Program.cs index 8706b054a..efd9d3705 100644 --- a/CollapseLauncher/Program.cs +++ b/CollapseLauncher/Program.cs @@ -23,6 +23,7 @@ using static Hi3Helper.Locale; using static Hi3Helper.Logger; using static Hi3Helper.Shared.Region.LauncherConfig; +using System.IO; namespace CollapseLauncher { @@ -42,7 +43,6 @@ public static void Main(params string[] args) try { - StartSquirrelHook(); AppCurrentArgument = args; @@ -50,6 +50,11 @@ public static void Main(params string[] args) InitAppPreset(); string logPath = AppGameLogsFolder; _log = IsConsoleEnabled ? new LoggerConsole(logPath, Encoding.UTF8) : new LoggerNull(logPath, Encoding.UTF8); + if (Directory.GetCurrentDirectory() != AppFolder) + { + LogWriteLine($"Force changing the working directory from {Directory.GetCurrentDirectory()} to {AppFolder}!", LogType.Warning, true); + Directory.SetCurrentDirectory(AppFolder); + } LogWriteLine(string.Format("Running Collapse Launcher [{0}], [{3}], under {1}, as {2}", AppCurrentVersion.VersionString, diff --git a/CollapseLauncher/Properties/launchSettings.json b/CollapseLauncher/Properties/launchSettings.json index 79c74c9d1..dcba7b53c 100644 --- a/CollapseLauncher/Properties/launchSettings.json +++ b/CollapseLauncher/Properties/launchSettings.json @@ -4,6 +4,11 @@ "commandName": "Project", "nativeDebugging": false }, + "OOBE Setup": { + "commandName": "Project", + "commandLineArgs": "oobesetup", + "nativeDebugging": false + }, "Updater": { "commandName": "Project", "commandLineArgs": "update --input \"C:\\Program Files\\Collapse Launcher\" --channel Preview", diff --git a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml index 22ccc43fe..08c9988ff 100644 --- a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml +++ b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml @@ -23,7 +23,7 @@ IsBackButtonVisible="Visible" IsBackEnabled="{Binding CanGoBack, ElementName=LauncherFrame, Mode=OneWay}" IsSettingsVisible="true" - PaneTitle="Menu" + PaneTitle="{x:Bind helper:Locale.Lang._MainPage.NavigationMenu}" PaneDisplayMode="LeftCompact" Visibility="Visible" IsPaneOpen="False" Background="{ThemeResource NavigationBarBrush}" @@ -173,7 +173,7 @@ Margin="-16,-12,0,0" Grid.Column="4" Grid.ColumnSpan="2" Background="{ThemeResource AccentColor}" HorizontalAlignment="Right" VerticalAlignment="Center" CornerRadius="3" Visibility="Visible"> - + diff --git a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs index 51b3d8453..6f62f2750 100644 --- a/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs +++ b/CollapseLauncher/XAMLs/MainApp/MainPage.xaml.cs @@ -1,4 +1,4 @@ -using CollapseLauncher.Pages; +using CollapseLauncher.Pages; using CollapseLauncher.Statics; using Hi3Helper; using Hi3Helper.Http; @@ -34,6 +34,7 @@ public partial class MainPage : Page private bool LockRegionChangeBtn; private bool IsLoadFrameCompleted = true; public static bool IsChangeDragArea = true; + public static List PreviousTagString = new List(); private RectInt32[] DragAreaMode_Normal { @@ -157,6 +158,12 @@ private async void StartRoutine(object sender, RoutedEventArgs e) LoadGamePreset(); SetThemeParameters(); + VersionNumberIndicator.Text = AppCurrentVersion.VersionString; +#if DEBUG + VersionNumberIndicator.Text += "d"; +#endif + if (IsPreview)VersionNumberIndicator.Text += "-PRE"; + m_actualMainFrameSize = new Size((m_window as MainWindow).Bounds.Width, (m_window as MainWindow).Bounds.Height); SubscribeEvents(); @@ -643,7 +650,7 @@ private void SpawnNotificationoUI(int tagID, InfoBar Notification) NewNotificationCountBadge.Value--; } NoNotificationIndicator.Opacity = NotificationContainer.Children.Count > 0 ? 0f : 1f; - NewNotificationCountBadge.Visibility = NotificationContainer.Children.Count > 0 ? Visibility.Visible : Visibility.Collapsed; + NewNotificationCountBadge.Visibility = NewNotificationCountBadge.Value > 0 ? Visibility.Visible : Visibility.Collapsed; }; Container.Children.Add(Notification); @@ -924,7 +931,7 @@ private void InitializeNavigationItems() if ((GetCurrentGameProperty()._GameVersion.GamePreset.IsCacheUpdateEnabled ?? false) || (GetCurrentGameProperty()._GameVersion.GamePreset.IsRepairEnabled ?? false)) { - NavigationViewControl.MenuItems.Add(new NavigationViewItemHeader() { Content = "Utilities" }); + NavigationViewControl.MenuItems.Add(new NavigationViewItemHeader() { Content = Lang._MainPage.NavigationUtilities }); if (GetCurrentGameProperty()._GameVersion.GamePreset.IsRepairEnabled ?? false) { @@ -1019,8 +1026,6 @@ private void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvoke } } - private List PreviousTagString = new List(); - void Navigate(Type sourceType, string tagStr) { MainFrameChanger.ChangeMainFrame(sourceType, new DrillInNavigationTransitionInfo()); diff --git a/CollapseLauncher/XAMLs/MainApp/MainWindow.xaml.cs b/CollapseLauncher/XAMLs/MainApp/MainWindow.xaml.cs index bf099aa70..6e05e7a0d 100644 --- a/CollapseLauncher/XAMLs/MainApp/MainWindow.xaml.cs +++ b/CollapseLauncher/XAMLs/MainApp/MainWindow.xaml.cs @@ -32,14 +32,14 @@ public MainWindow() } } - public void InitializeWindowProperties() + public void InitializeWindowProperties(bool startOOBE = false) { try { InitializeWindowSettings(); if (m_appWindow.TitleBar.ExtendsContentIntoTitleBar) m_appWindow.TitleBar.PreferredHeightOption = TitleBarHeightOption.Tall; - if (IsFirstInstall) + if (IsFirstInstall || startOOBE == true) { ExtendsContentIntoTitleBar = false; SetWindowSize(m_windowHandle, WindowSize.WindowSize.CurrentWindowSize.WindowBounds.Width, WindowSize.WindowSize.CurrentWindowSize.WindowBounds.Height); diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.Ext.cs b/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.Ext.cs index 9934ad78b..b35dc1013 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.Ext.cs +++ b/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.Ext.cs @@ -93,17 +93,28 @@ public bool IsFullscreenEnabled if (value) { GameResolutionFullscreenExclusive.IsEnabled = !IsCustomResolutionEnabled; + GameResolutionBorderless.IsChecked = false; return; } GameResolutionFullscreenExclusive.IsEnabled = false; GameResolutionFullscreenExclusive.IsChecked = false; + GameResolutionBorderless.IsEnabled = true; } } public bool IsBorderlessEnabled { get => Settings.SettingsCollapseScreen.UseBorderlessScreen; - set => Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + set + { + Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + if (value) + { + GameResolutionFullscreen.IsEnabled = false; + GameResolutionFullscreen.IsChecked = false; + } + GameResolutionFullscreen.IsEnabled = true; + } } public bool IsCustomResolutionEnabled diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.xaml b/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.xaml index 3cc68f3e3..f7c76744b 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.xaml +++ b/CollapseLauncher/XAMLs/MainApp/Pages/GameSettingsPage.xaml @@ -32,13 +32,13 @@ - + Settings.SettingsCollapseScreen.UseBorderlessScreen; - set => Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + set + { + Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + if (value) + { + GameResolutionFullscreen.IsEnabled = false; + GameResolutionFullscreen.IsChecked = false; + } + GameResolutionFullscreen.IsEnabled = true; + } } public bool IsCustomResolutionEnabled diff --git a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml index 2dd5c0fd8..54043fb8d 100644 --- a/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml +++ b/CollapseLauncher/XAMLs/MainApp/Pages/HomePage.xaml @@ -121,8 +121,8 @@ Settings.SettingsCollapseScreen.UseBorderlessScreen; - set => Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + set + { + Settings.SettingsCollapseScreen.UseBorderlessScreen = value; + if (value) + { + GameResolutionFullscreen.IsEnabled = false; + GameResolutionFullscreen.IsChecked = false; + } + GameResolutionFullscreen.IsEnabled = true; + } } public bool IsCustomResolutionEnabled diff --git a/Hi3Helper.Core/Classes/DiscordPresence/DiscordPresenceManager.cs b/Hi3Helper.Core/Classes/DiscordPresence/DiscordPresenceManager.cs index 4d86712d4..f2e8b4a07 100644 --- a/Hi3Helper.Core/Classes/DiscordPresence/DiscordPresenceManager.cs +++ b/Hi3Helper.Core/Classes/DiscordPresence/DiscordPresenceManager.cs @@ -4,10 +4,11 @@ using Hi3Helper.Preset; using System; using System.IO; +using System.Text; using System.Threading; using System.Threading.Tasks; -using static Hi3Helper.Shared.Region.LauncherConfig; using static Hi3Helper.Locale; +using static Hi3Helper.Shared.Region.LauncherConfig; #pragma warning disable CA2007 namespace Hi3Helper.DiscordPresence @@ -196,10 +197,10 @@ public async void SetActivity(ActivityType activity, int delay = 500) default: _activity = new Activity { - Details = Lang._Misc.DiscordRP_Default, + Details = StrToByteUtf8(Lang._Misc.DiscordRP_Default), Assets = new ActivityAssets { - LargeImage = $"launcher-logo" + LargeImage = StrToByteUtf8($"launcher-logo") } }; break; @@ -217,14 +218,14 @@ private void BuildActivityGameStatus(string activityName, bool isGameStatusEnabl { _activity = new Activity { - Details = $"{activityName} {(!isGameStatusEnabled ? ConfigV2Store.CurrentConfigV2GameCategory : Lang._Misc.DiscordRP_Ad)}", - State = $"{Lang._Misc.DiscordRP_Region} {ConfigV2Store.CurrentConfigV2GameRegion}", + Details = StrToByteUtf8($"{activityName} {(!isGameStatusEnabled ? ConfigV2Store.CurrentConfigV2GameCategory : Lang._Misc.DiscordRP_Ad)}"), + State = StrToByteUtf8($"{Lang._Misc.DiscordRP_Region} {ConfigV2Store.CurrentConfigV2GameRegion}"), Assets = new ActivityAssets { - LargeImage = $"game-{ConfigV2Store.CurrentConfigV2.GameType.ToString().ToLower()}-logo", - LargeText = $"{ConfigV2Store.CurrentConfigV2GameCategory} - {ConfigV2Store.CurrentConfigV2GameRegion}", - SmallImage = $"launcher-logo", - SmallText = $"Collapse Launcher v{AppCurrentVersionString} {(IsPreview ? "Preview" : "Stable")}" + LargeImage = StrToByteUtf8($"game-{ConfigV2Store.CurrentConfigV2.GameType.ToString().ToLower()}-logo"), + LargeText = StrToByteUtf8($"{ConfigV2Store.CurrentConfigV2GameCategory} - {ConfigV2Store.CurrentConfigV2GameRegion}"), + SmallImage = StrToByteUtf8($"launcher-logo"), + SmallText = StrToByteUtf8($"Collapse Launcher v{AppCurrentVersionString} {(IsPreview ? "Preview" : "Stable")}") }, Timestamps = new ActivityTimestamps { @@ -247,21 +248,21 @@ private void BuildActivityAppStatus(string activityName, bool isGameStatusEnable { _activity = new Activity { - Details = $"{activityName} {(!isGameStatusEnabled ? string.Empty : Lang._Misc.DiscordRP_Ad)}", - State = $"{Lang._Misc.DiscordRP_Region} {ConfigV2Store.CurrentConfigV2GameRegion}", + Details = StrToByteUtf8($"{activityName} {(!isGameStatusEnabled ? string.Empty : Lang._Misc.DiscordRP_Ad)}"), + State = StrToByteUtf8($"{Lang._Misc.DiscordRP_Region} {ConfigV2Store.CurrentConfigV2GameRegion}"), Assets = new ActivityAssets { - LargeImage = $"game-{ConfigV2Store.CurrentConfigV2.GameType.ToString().ToLower()}-logo", - LargeText = $"{ConfigV2Store.CurrentConfigV2GameCategory}", - SmallImage = $"launcher-logo", - SmallText = $"Collapse Launcher v{AppCurrentVersionString} {(IsPreview ? "Preview" : "Stable")}" + LargeImage = StrToByteUtf8($"game-{ConfigV2Store.CurrentConfigV2.GameType.ToString().ToLower()}-logo"), + LargeText = StrToByteUtf8($"{ConfigV2Store.CurrentConfigV2GameCategory}"), + SmallImage = StrToByteUtf8($"launcher-logo"), + SmallText = StrToByteUtf8($"Collapse Launcher v{AppCurrentVersionString} {(IsPreview ? "Preview" : "Stable")}") }, }; } private void UpdateActivity() => _activityManager?.UpdateActivity(_activity, (a) => { - Logger.LogWriteLine($"Activity updated! => {_activity.Details} - {_activity.State}"); + Logger.LogWriteLine($"Activity updated! => {ReadUtf8Byte(_activity.Details)} - {ReadUtf8Byte(_activity.State)}"); }); private void UpdateCallbacksRoutine() @@ -286,6 +287,18 @@ private void UpdateCallbacksRoutine() } }, _clientToken.Token); } + + private string ReadUtf8Byte(byte[] input) => input == null || input.Length == 0 ? string.Empty : Encoding.UTF8.GetString(input); + + private byte[] StrToByteUtf8(string s) + { + // Use fixed width (128 bytes) as defined in field's SizeConst + byte[] bufferOut = new byte[128]; + // Get the UTF-8 bytes (converting 16-bit (UTF-16) to 8-bit (UTF-8) char (as byte)) + Encoding.UTF8.GetBytes(s, bufferOut); + // return the buffer + return bufferOut; + } } } #endif \ No newline at end of file diff --git a/Hi3Helper.Core/Classes/DiscordPresence/src/Core.cs b/Hi3Helper.Core/Classes/DiscordPresence/src/Core.cs index ba6722a6f..d3ca3e593 100644 --- a/Hi3Helper.Core/Classes/DiscordPresence/src/Core.cs +++ b/Hi3Helper.Core/Classes/DiscordPresence/src/Core.cs @@ -2,6 +2,7 @@ using System; using System.Runtime.InteropServices; using System.Text; +using Hi3Helper.EncTool; namespace Discord { @@ -210,124 +211,114 @@ public enum InputModeType PushToTalk, } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct User + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct User { public Int64 Id; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public string Username; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public byte[] Username; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] - public string Discriminator; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + public byte[] Discriminator; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Avatar; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Avatar; public bool Bot; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct OAuth2Token + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct OAuth2Token { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string AccessToken; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] AccessToken; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)] - public string Scopes; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)] + public byte[] Scopes; public Int64 Expires; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ImageHandle - { - public ImageType Type; - - public Int64 Id; - - public UInt32 Size; - } - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ImageDimensions + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ImageDimensions { public UInt32 Width; public UInt32 Height; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ActivityTimestamps + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ActivityTimestamps { public Int64 Start; public Int64 End; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ActivityAssets + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ActivityAssets { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string LargeImage; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] LargeImage; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string LargeText; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] LargeText; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string SmallImage; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] SmallImage; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string SmallText; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] SmallText; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct PartySize + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct PartySize { public Int32 CurrentSize; public Int32 MaxSize; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ActivityParty + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ActivityParty { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Id; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Id; public PartySize Size; public ActivityPartyPrivacy Privacy; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ActivitySecrets + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ActivitySecrets { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Match; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Match; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Join; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Join; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Spectate; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Spectate; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Activity : IEquatable + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Activity : IEquatable { public ActivityType Type; public Int64 ApplicationId; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Name; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Name; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string State; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] State; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Details; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Details; public ActivityTimestamps Timestamps; @@ -341,25 +332,29 @@ public partial struct Activity : IEquatable public UInt32 SupportedPlatforms; - public bool Equals(Activity to) - { - return to.Type == Type && to.ApplicationId == ApplicationId && to.Name == Name && - to.State == State && to.Details == Details && to.Assets.Equals(Assets) && - to.Party.Equals(Party) && to.Secrets.Equals(Secrets) && to.Instance == Instance && - to.SupportedPlatforms == SupportedPlatforms; - } + public bool Equals(Activity to) => + to.Type == Type + && to.ApplicationId == ApplicationId + && to.Name.AsSpan().SequenceEqual(Name) + && to.State.AsSpan().SequenceEqual(State) + && to.Details.AsSpan().SequenceEqual(Details) + && TypeExtensions.IsInstancePropertyEqual(Assets, to.Assets) + && TypeExtensions.IsInstancePropertyEqual(Party, to.Party) + && TypeExtensions.IsInstancePropertyEqual(Secrets, to.Secrets) + && to.Instance == Instance + && to.SupportedPlatforms == SupportedPlatforms; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Presence + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Presence { public Status Status; public Activity Activity; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Relationship + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Relationship { public RelationshipType Type; @@ -368,8 +363,8 @@ public partial struct Relationship public Presence Presence; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Lobby + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Lobby { public Int64 Id; @@ -377,16 +372,16 @@ public partial struct Lobby public Int64 OwnerId; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)] - public string Secret; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] + public byte[] Secret; public UInt32 Capacity; public bool Locked; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct ImeUnderline + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct ImeUnderline { public Int32 From; @@ -399,8 +394,8 @@ public partial struct ImeUnderline public bool Thick; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Rect + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Rect { public Int32 Left; @@ -411,19 +406,19 @@ public partial struct Rect public Int32 Bottom; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct FileStat + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct FileStat { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] - public string Filename; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] + public byte[] Filename; public UInt64 Size; public UInt64 LastModified; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Entitlement + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Entitlement { public Int64 Id; @@ -432,39 +427,39 @@ public partial struct Entitlement public Int64 SkuId; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct SkuPrice + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct SkuPrice { public UInt32 Amount; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] - public string Currency; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] + public byte[] Currency; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct Sku + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct Sku { public Int64 Id; public SkuType Type; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public string Name; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public byte[] Name; public SkuPrice Price; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct InputMode + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct InputMode { public InputModeType Type; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] - public string Shortcut; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] + public byte[] Shortcut; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct UserAchievement + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct UserAchievement { public Int64 UserId; @@ -472,12 +467,12 @@ public partial struct UserAchievement public byte PercentComplete; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] - public string UnlockedAt; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + public byte[] UnlockedAt; } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct LobbyTransaction + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct LobbyTransaction { [StructLayout(LayoutKind.Sequential)] internal partial struct FFIMethods @@ -492,10 +487,10 @@ internal partial struct FFIMethods internal delegate Result SetCapacityMethod(IntPtr methodsPtr, UInt32 capacity); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result SetMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key, [MarshalAs(UnmanagedType.LPStr)]string value); + internal delegate Result SetMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key, [MarshalAs(UnmanagedType.LPStr)] string value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result DeleteMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key); + internal delegate Result DeleteMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result SetLockedMethod(IntPtr methodsPtr, bool locked); @@ -603,17 +598,17 @@ public void SetLocked(bool locked) } } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct LobbyMemberTransaction + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct LobbyMemberTransaction { [StructLayout(LayoutKind.Sequential)] internal partial struct FFIMethods { [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result SetMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key, [MarshalAs(UnmanagedType.LPStr)]string value); + internal delegate Result SetMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key, [MarshalAs(UnmanagedType.LPStr)] string value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result DeleteMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key); + internal delegate Result DeleteMetadataMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key); internal SetMetadataMethod SetMetadata; @@ -662,17 +657,17 @@ public void DeleteMetadata(string key) } } - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public partial struct LobbySearchQuery + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + public struct LobbySearchQuery { [StructLayout(LayoutKind.Sequential)] internal partial struct FFIMethods { [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result FilterMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key, LobbySearchComparison comparison, LobbySearchCast cast, [MarshalAs(UnmanagedType.LPStr)]string value); + internal delegate Result FilterMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key, LobbySearchComparison comparison, LobbySearchCast cast, [MarshalAs(UnmanagedType.LPStr)] string value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result SortMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string key, LobbySearchCast cast, [MarshalAs(UnmanagedType.LPStr)]string value); + internal delegate Result SortMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string key, LobbySearchCast cast, [MarshalAs(UnmanagedType.LPStr)] string value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result LimitMethod(IntPtr methodsPtr, UInt32 limit); @@ -782,7 +777,7 @@ internal partial struct FFIMethods internal delegate Result RunCallbacksMethod(IntPtr methodsPtr); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void SetLogHookCallback(IntPtr ptr, LogLevel level, [MarshalAs(UnmanagedType.LPStr)]string message); + internal delegate void SetLogHookCallback(IntPtr ptr, LogLevel level, [MarshalAs(UnmanagedType.LPStr)] string message); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void SetLogHookMethod(IntPtr methodsPtr, LogLevel minLevel, IntPtr callbackData, SetLogHookCallback callback); @@ -1108,8 +1103,9 @@ public void Dispose() Marshal.FreeHGlobal(StoreEventsPtr); Marshal.FreeHGlobal(VoiceEventsPtr); Marshal.FreeHGlobal(AchievementEventsPtr); - if (setLogHook.HasValue) { - setLogHook.Value.Free(); + if (setLogHook.HasValue) + { + setLogHook.Value.Free(); } } @@ -1138,16 +1134,18 @@ private static void SetLogHookCallbackImpl(IntPtr ptr, LogLevel level, string me public void SetLogHook(LogLevel minLevel, SetLogHookHandler callback) { - if (setLogHook.HasValue) { - setLogHook.Value.Free(); + if (setLogHook.HasValue) + { + setLogHook.Value.Free(); } - setLogHook = GCHandle.Alloc(callback); + setLogHook = GCHandle.Alloc(callback); Methods.SetLogHook(MethodsPtr, minLevel, GCHandle.ToIntPtr(setLogHook.Value), SetLogHookCallbackImpl); } public ApplicationManager GetApplicationManager() { - if (ApplicationManagerInstance == null) { + if (ApplicationManagerInstance == null) + { ApplicationManagerInstance = new ApplicationManager( Methods.GetApplicationManager(MethodsPtr), ApplicationEventsPtr, @@ -1159,7 +1157,8 @@ ref ApplicationEvents public UserManager GetUserManager() { - if (UserManagerInstance == null) { + if (UserManagerInstance == null) + { UserManagerInstance = new UserManager( Methods.GetUserManager(MethodsPtr), UserEventsPtr, @@ -1171,7 +1170,8 @@ ref UserEvents public ImageManager GetImageManager() { - if (ImageManagerInstance == null) { + if (ImageManagerInstance == null) + { ImageManagerInstance = new ImageManager( Methods.GetImageManager(MethodsPtr), ImageEventsPtr, @@ -1183,7 +1183,8 @@ ref ImageEvents public ActivityManager GetActivityManager() { - if (ActivityManagerInstance == null) { + if (ActivityManagerInstance == null) + { ActivityManagerInstance = new ActivityManager( Methods.GetActivityManager(MethodsPtr), ActivityEventsPtr, @@ -1195,7 +1196,8 @@ ref ActivityEvents public RelationshipManager GetRelationshipManager() { - if (RelationshipManagerInstance == null) { + if (RelationshipManagerInstance == null) + { RelationshipManagerInstance = new RelationshipManager( Methods.GetRelationshipManager(MethodsPtr), RelationshipEventsPtr, @@ -1207,7 +1209,8 @@ ref RelationshipEvents public LobbyManager GetLobbyManager() { - if (LobbyManagerInstance == null) { + if (LobbyManagerInstance == null) + { LobbyManagerInstance = new LobbyManager( Methods.GetLobbyManager(MethodsPtr), LobbyEventsPtr, @@ -1219,7 +1222,8 @@ ref LobbyEvents public NetworkManager GetNetworkManager() { - if (NetworkManagerInstance == null) { + if (NetworkManagerInstance == null) + { NetworkManagerInstance = new NetworkManager( Methods.GetNetworkManager(MethodsPtr), NetworkEventsPtr, @@ -1231,7 +1235,8 @@ ref NetworkEvents public OverlayManager GetOverlayManager() { - if (OverlayManagerInstance == null) { + if (OverlayManagerInstance == null) + { OverlayManagerInstance = new OverlayManager( Methods.GetOverlayManager(MethodsPtr), OverlayEventsPtr, @@ -1243,7 +1248,8 @@ ref OverlayEvents public StorageManager GetStorageManager() { - if (StorageManagerInstance == null) { + if (StorageManagerInstance == null) + { StorageManagerInstance = new StorageManager( Methods.GetStorageManager(MethodsPtr), StorageEventsPtr, @@ -1255,7 +1261,8 @@ ref StorageEvents public StoreManager GetStoreManager() { - if (StoreManagerInstance == null) { + if (StoreManagerInstance == null) + { StoreManagerInstance = new StoreManager( Methods.GetStoreManager(MethodsPtr), StoreEventsPtr, @@ -1267,7 +1274,8 @@ ref StoreEvents public VoiceManager GetVoiceManager() { - if (VoiceManagerInstance == null) { + if (VoiceManagerInstance == null) + { VoiceManagerInstance = new VoiceManager( Methods.GetVoiceManager(MethodsPtr), VoiceEventsPtr, @@ -1279,7 +1287,8 @@ ref VoiceEvents public AchievementManager GetAchievementManager() { - if (AchievementManagerInstance == null) { + if (AchievementManagerInstance == null) + { AchievementManagerInstance = new AchievementManager( Methods.GetAchievementManager(MethodsPtr), AchievementEventsPtr, @@ -1325,7 +1334,7 @@ internal partial struct FFIMethods internal delegate void GetOAuth2TokenMethod(IntPtr methodsPtr, IntPtr callbackData, GetOAuth2TokenCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void GetTicketCallback(IntPtr ptr, Result result, [MarshalAs(UnmanagedType.LPStr)]ref string data); + internal delegate void GetTicketCallback(IntPtr ptr, Result result, [MarshalAs(UnmanagedType.LPStr)] ref string data); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void GetTicketMethod(IntPtr methodsPtr, IntPtr callbackData, GetTicketCallback callback); @@ -1366,12 +1375,14 @@ private FFIMethods Methods internal ApplicationManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -1504,12 +1515,14 @@ private FFIMethods Methods internal UserManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -1631,12 +1644,14 @@ private FFIMethods Methods internal ImageManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -1688,10 +1703,10 @@ public partial class ActivityManager internal partial struct FFIEvents { [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ActivityJoinHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)]string secret); + internal delegate void ActivityJoinHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)] string secret); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ActivitySpectateHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)]string secret); + internal delegate void ActivitySpectateHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)] string secret); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void ActivityJoinRequestHandler(IntPtr ptr, ref User user); @@ -1712,7 +1727,7 @@ internal partial struct FFIEvents internal partial struct FFIMethods { [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result RegisterCommandMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string command); + internal delegate Result RegisterCommandMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string command); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result RegisterSteamMethod(IntPtr methodsPtr, UInt32 steamId); @@ -1739,7 +1754,7 @@ internal partial struct FFIMethods internal delegate void SendInviteCallback(IntPtr ptr, Result result); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void SendInviteMethod(IntPtr methodsPtr, Int64 userId, ActivityActionType type, [MarshalAs(UnmanagedType.LPStr)]string content, IntPtr callbackData, SendInviteCallback callback); + internal delegate void SendInviteMethod(IntPtr methodsPtr, Int64 userId, ActivityActionType type, [MarshalAs(UnmanagedType.LPStr)] string content, IntPtr callbackData, SendInviteCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void AcceptInviteCallback(IntPtr ptr, Result result); @@ -1807,12 +1822,14 @@ private FFIMethods Methods internal ActivityManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -2036,12 +2053,14 @@ private FFIMethods Methods internal RelationshipManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -2204,13 +2223,13 @@ internal partial struct FFIMethods internal delegate void ConnectLobbyCallback(IntPtr ptr, Result result, ref Lobby lobby); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ConnectLobbyMethod(IntPtr methodsPtr, Int64 lobbyId, [MarshalAs(UnmanagedType.LPStr)]string secret, IntPtr callbackData, ConnectLobbyCallback callback); + internal delegate void ConnectLobbyMethod(IntPtr methodsPtr, Int64 lobbyId, [MarshalAs(UnmanagedType.LPStr)] string secret, IntPtr callbackData, ConnectLobbyCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void ConnectLobbyWithActivitySecretCallback(IntPtr ptr, Result result, ref Lobby lobby); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ConnectLobbyWithActivitySecretMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string activitySecret, IntPtr callbackData, ConnectLobbyWithActivitySecretCallback callback); + internal delegate void ConnectLobbyWithActivitySecretMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string activitySecret, IntPtr callbackData, ConnectLobbyWithActivitySecretCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void DisconnectLobbyCallback(IntPtr ptr, Result result); @@ -2225,7 +2244,7 @@ internal partial struct FFIMethods internal delegate Result GetLobbyActivitySecretMethod(IntPtr methodsPtr, Int64 lobbyId, StringBuilder secret); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result GetLobbyMetadataValueMethod(IntPtr methodsPtr, Int64 lobbyId, [MarshalAs(UnmanagedType.LPStr)]string key, StringBuilder value); + internal delegate Result GetLobbyMetadataValueMethod(IntPtr methodsPtr, Int64 lobbyId, [MarshalAs(UnmanagedType.LPStr)] string key, StringBuilder value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result GetLobbyMetadataKeyMethod(IntPtr methodsPtr, Int64 lobbyId, Int32 index, StringBuilder key); @@ -2243,7 +2262,7 @@ internal partial struct FFIMethods internal delegate Result GetMemberUserMethod(IntPtr methodsPtr, Int64 lobbyId, Int64 userId, ref User user); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result GetMemberMetadataValueMethod(IntPtr methodsPtr, Int64 lobbyId, Int64 userId, [MarshalAs(UnmanagedType.LPStr)]string key, StringBuilder value); + internal delegate Result GetMemberMetadataValueMethod(IntPtr methodsPtr, Int64 lobbyId, Int64 userId, [MarshalAs(UnmanagedType.LPStr)] string key, StringBuilder value); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result GetMemberMetadataKeyMethod(IntPtr methodsPtr, Int64 lobbyId, Int64 userId, Int32 index, StringBuilder key); @@ -2445,12 +2464,14 @@ private FFIMethods Methods internal LobbyManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -2967,7 +2988,7 @@ internal partial struct FFIEvents internal delegate void MessageHandler(IntPtr ptr, UInt64 peerId, byte channelId, IntPtr dataPtr, Int32 dataLen); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void RouteUpdateHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)]string routeData); + internal delegate void RouteUpdateHandler(IntPtr ptr, [MarshalAs(UnmanagedType.LPStr)] string routeData); internal MessageHandler OnMessage; @@ -2984,10 +3005,10 @@ internal partial struct FFIMethods internal delegate Result FlushMethod(IntPtr methodsPtr); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result OpenPeerMethod(IntPtr methodsPtr, UInt64 peerId, [MarshalAs(UnmanagedType.LPStr)]string routeData); + internal delegate Result OpenPeerMethod(IntPtr methodsPtr, UInt64 peerId, [MarshalAs(UnmanagedType.LPStr)] string routeData); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result UpdatePeerMethod(IntPtr methodsPtr, UInt64 peerId, [MarshalAs(UnmanagedType.LPStr)]string routeData); + internal delegate Result UpdatePeerMethod(IntPtr methodsPtr, UInt64 peerId, [MarshalAs(UnmanagedType.LPStr)] string routeData); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result ClosePeerMethod(IntPtr methodsPtr, UInt64 peerId); @@ -3045,12 +3066,14 @@ private FFIMethods Methods internal NetworkManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -3217,7 +3240,7 @@ internal partial struct FFIMethods internal delegate void OpenGuildInviteCallback(IntPtr ptr, Result result); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void OpenGuildInviteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string code, IntPtr callbackData, OpenGuildInviteCallback callback); + internal delegate void OpenGuildInviteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string code, IntPtr callbackData, OpenGuildInviteCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void OpenVoiceSettingsCallback(IntPtr ptr, Result result); @@ -3235,10 +3258,10 @@ internal partial struct FFIMethods internal delegate void ForwardMessageMethod(IntPtr methodsPtr, IntPtr message); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void KeyEventMethod(IntPtr methodsPtr, bool down, [MarshalAs(UnmanagedType.LPStr)]string keyCode, KeyVariant variant); + internal delegate void KeyEventMethod(IntPtr methodsPtr, bool down, [MarshalAs(UnmanagedType.LPStr)] string keyCode, KeyVariant variant); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void CharEventMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string character); + internal delegate void CharEventMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string character); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void MouseButtonEventMethod(IntPtr methodsPtr, byte down, Int32 clickCount, MouseButton which, Int32 x, Int32 y); @@ -3247,10 +3270,10 @@ internal partial struct FFIMethods internal delegate void MouseMotionEventMethod(IntPtr methodsPtr, Int32 x, Int32 y); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ImeCommitTextMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string text); + internal delegate void ImeCommitTextMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string text); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ImeSetCompositionMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string text, ref ImeUnderline underlines, Int32 from, Int32 to); + internal delegate void ImeSetCompositionMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string text, ref ImeUnderline underlines, Int32 from, Int32 to); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void ImeCancelCompositionMethod(IntPtr methodsPtr); @@ -3344,12 +3367,14 @@ private FFIMethods Methods internal OverlayManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -3547,40 +3572,40 @@ internal partial struct FFIEvents internal partial struct FFIMethods { [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result ReadMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, byte[] data, Int32 dataLen, ref UInt32 read); + internal delegate Result ReadMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, byte[] data, Int32 dataLen, ref UInt32 read); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void ReadAsyncCallback(IntPtr ptr, Result result, IntPtr dataPtr, Int32 dataLen); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ReadAsyncMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, IntPtr callbackData, ReadAsyncCallback callback); + internal delegate void ReadAsyncMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, IntPtr callbackData, ReadAsyncCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void ReadAsyncPartialCallback(IntPtr ptr, Result result, IntPtr dataPtr, Int32 dataLen); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void ReadAsyncPartialMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, UInt64 offset, UInt64 length, IntPtr callbackData, ReadAsyncPartialCallback callback); + internal delegate void ReadAsyncPartialMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, UInt64 offset, UInt64 length, IntPtr callbackData, ReadAsyncPartialCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result WriteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, byte[] data, Int32 dataLen); + internal delegate Result WriteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, byte[] data, Int32 dataLen); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void WriteAsyncCallback(IntPtr ptr, Result result); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate void WriteAsyncMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, byte[] data, Int32 dataLen, IntPtr callbackData, WriteAsyncCallback callback); + internal delegate void WriteAsyncMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, byte[] data, Int32 dataLen, IntPtr callbackData, WriteAsyncCallback callback); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result DeleteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name); + internal delegate Result DeleteMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result ExistsMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, ref bool exists); + internal delegate Result ExistsMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, ref bool exists); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate void CountMethod(IntPtr methodsPtr, ref Int32 count); [UnmanagedFunctionPointer(CallingConvention.Winapi)] - internal delegate Result StatMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)]string name, ref FileStat stat); + internal delegate Result StatMethod(IntPtr methodsPtr, [MarshalAs(UnmanagedType.LPStr)] string name, ref FileStat stat); [UnmanagedFunctionPointer(CallingConvention.Winapi)] internal delegate Result StatAtMethod(IntPtr methodsPtr, Int32 index, ref FileStat stat); @@ -3636,12 +3661,14 @@ private FFIMethods Methods internal StorageManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -3893,12 +3920,14 @@ private FFIMethods Methods internal StoreManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -4140,12 +4169,14 @@ private FFIMethods Methods internal VoiceManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } @@ -4347,12 +4378,14 @@ private FFIMethods Methods internal AchievementManager(IntPtr ptr, IntPtr eventsPtr, ref FFIEvents events) { - if (eventsPtr == IntPtr.Zero) { + if (eventsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } InitEvents(eventsPtr, ref events); MethodsPtr = ptr; - if (MethodsPtr == IntPtr.Zero) { + if (MethodsPtr == IntPtr.Zero) + { throw new ResultException(Result.InternalError); } } diff --git a/Hi3Helper.Core/Classes/DiscordPresence/src/ImageManager.cs b/Hi3Helper.Core/Classes/DiscordPresence/src/ImageManager.cs index 17e8980c5..202f361ac 100644 --- a/Hi3Helper.Core/Classes/DiscordPresence/src/ImageManager.cs +++ b/Hi3Helper.Core/Classes/DiscordPresence/src/ImageManager.cs @@ -7,7 +7,7 @@ namespace Discord { - public partial struct ImageHandle + public struct ImageHandle { static public ImageHandle User(Int64 id) { @@ -23,6 +23,12 @@ static public ImageHandle User(Int64 id, UInt32 size) Size = size, }; } + + public ImageType Type; + + public Int64 Id; + + public UInt32 Size; } public partial class ImageManager diff --git a/Hi3Helper.Core/Classes/Shared/ClassStruct/Class/RegionResource.cs b/Hi3Helper.Core/Classes/Shared/ClassStruct/Class/RegionResource.cs index 84f25c7ec..1f60ae03a 100644 --- a/Hi3Helper.Core/Classes/Shared/ClassStruct/Class/RegionResource.cs +++ b/Hi3Helper.Core/Classes/Shared/ClassStruct/Class/RegionResource.cs @@ -16,6 +16,7 @@ public static List Copy(this List source) where T : IRegionResourceCopyable { if (source == null) return null; + if (source.Count == 0) return new List(); return new List(source); } } diff --git a/Hi3Helper.Core/Classes/Shared/Region/LauncherConfig.cs b/Hi3Helper.Core/Classes/Shared/Region/LauncherConfig.cs index af5de90ed..a54421f23 100644 --- a/Hi3Helper.Core/Classes/Shared/Region/LauncherConfig.cs +++ b/Hi3Helper.Core/Classes/Shared/Region/LauncherConfig.cs @@ -38,7 +38,7 @@ public static class LauncherConfig new CDNURLProperty { Name = "Cloudflare", - URLPrefix = "https://r2-render.bagelnl.my.id/cl-cdn", + URLPrefix = "https://r2.bagelnl.my.id/cl-cdn", Description = Lang._Misc.CDNDescription_Cloudflare, PartialDownloadSupport = true }, @@ -50,14 +50,14 @@ public static class LauncherConfig }, new CDNURLProperty { - Name = "Statically", + Name = "Statically (Deprecated)", URLPrefix = "https://cdn.statically.io/gh/neon-nyan/CollapseLauncher-ReleaseRepo/main", Description = Lang._Misc.CDNDescription_Statically, PartialDownloadSupport = true }, new CDNURLProperty { - Name = "jsDelivr", + Name = "jsDelivr (Deprecated)", URLPrefix = "https://cdn.jsdelivr.net/gh/neon-nyan/CollapseLauncher-ReleaseRepo@latest", Description = Lang._Misc.CDNDescription_jsDelivr, PartialDownloadSupport = true @@ -80,7 +80,7 @@ public static class LauncherConfig public static AppIniStruct appIni = new AppIniStruct(); public static string AppFolder = Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName); - public static string AppDefaultBG = Path.Combine(AppFolder, "Assets", "BG", "default.png"); + public static string AppDefaultBG = Path.Combine(AppFolder, "Assets", "Images", "default.png"); public static string AppLangFolder = Path.Combine(AppFolder, "Lang"); public static string AppDataFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "AppData", "LocalLow", "CollapseLauncher"); public static string AppGameFolder @@ -107,7 +107,7 @@ public static string AppExecutablePath public static string AppCurrentVersionString { get; set; } public static string GamePathOnSteam; - public const long AppDiscordApplicationID = 1089467141096484955; + public const long AppDiscordApplicationID = 1138126643592970251; public const long AppDiscordApplicationID_HI3 = 1124126288370737314; public const long AppDiscordApplicationID_GI = 1124137436650426509; public const long AppDiscordApplicationID_HSR = 1124153902959431780; @@ -163,7 +163,7 @@ public static bool IsShowRegionChangeWarning public static Dictionary AppSettingsTemplate = new Dictionary { - { "CurrentBackground", "ms-appx:///Assets/BG/default.png" }, + { "CurrentBackground", "ms-appx:///Assets/Images/default.png" }, { "DownloadThread", 4 }, { "ExtractionThread", 0 }, { "GameFolder", Path.Combine(AppDataFolder, "GameFolder") }, diff --git a/Hi3Helper.Core/Hi3Helper.Core.csproj b/Hi3Helper.Core/Hi3Helper.Core.csproj index f489fbf97..b3ec5f56c 100644 --- a/Hi3Helper.Core/Hi3Helper.Core.csproj +++ b/Hi3Helper.Core/Hi3Helper.Core.csproj @@ -116,5 +116,12 @@ + + + + + + + diff --git a/Hi3Helper.Core/Lang/Locale/LangBackgroundNotification.cs b/Hi3Helper.Core/Lang/Locale/LangBackgroundNotification.cs new file mode 100644 index 000000000..e77808a03 --- /dev/null +++ b/Hi3Helper.Core/Lang/Locale/LangBackgroundNotification.cs @@ -0,0 +1,22 @@ +namespace Hi3Helper +{ + public sealed partial class Locale + { + #region BackgroundNotification + public sealed partial class LocalizationParams + { + public LangBackgroundNotification _BackgroundNotification { get; set; } = LangFallback?._BackgroundNotification; + public sealed class LangBackgroundNotification + { + public string LoadingTitle { get; set; } = LangFallback?._BackgroundNotification.LoadingTitle; + public string Placeholder { get; set; } = LangFallback?._BackgroundNotification.Placeholder; + public string CategoryTitle_Downloading { get; set; } = LangFallback?._BackgroundNotification.CategoryTitle_Downloading; + public string CategoryTitle_DownloadingPreload { get; set; } = LangFallback?._BackgroundNotification.CategoryTitle_DownloadingPreload; + public string CategoryTitle_Updating { get; set; } = LangFallback?._BackgroundNotification.CategoryTitle_Updating; + public string NotifBadge_Completed { get; set; } = LangFallback?._BackgroundNotification.NotifBadge_Completed; + public string NotifBadge_Error { get; set; } = LangFallback?._BackgroundNotification.NotifBadge_Error; + } + } + #endregion + } +} diff --git a/Hi3Helper.Core/Lang/Locale/LangMainPage.cs b/Hi3Helper.Core/Lang/Locale/LangMainPage.cs index 71aabe7e8..71aacb98a 100644 --- a/Hi3Helper.Core/Lang/Locale/LangMainPage.cs +++ b/Hi3Helper.Core/Lang/Locale/LangMainPage.cs @@ -20,6 +20,8 @@ public sealed class LangMainPage public string RegionLoadingSubtitleTooLong { get; set; } = LangFallback?._MainPage.RegionLoadingSubtitleTooLong; public string NotifNeverAsk { get; set; } = LangFallback?._MainPage.NotifNeverAsk; public string NotifNoNewNotifs { get; set; } = LangFallback?._MainPage.NotifNoNewNotifs; + public string NavigationMenu { get; set; } = LangFallback?._MainPage.NavigationMenu; + public string NavigationUtilities { get; set; } = LangFallback?._MainPage.NavigationUtilities; } } #endregion diff --git a/Hi3Helper.Core/Lang/de-de.json b/Hi3Helper.Core/Lang/de-de.json index 26c8c2334..c5b81e839 100644 --- a/Hi3Helper.Core/Lang/de-de.json +++ b/Hi3Helper.Core/Lang/de-de.json @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "Aktion (> {1} Sekunden). Versuche Region {0} erneut zu laden...", "RegionLoadingSubtitleTooLong": "Das dauert etwas länger als erwartet... Bitte stelle sicher, dass deine Internetverbindung stabil ist!", "NavCtrlTitleSettings": "App Einstellungen", - "NotifNeverAsk": "Nicht mehr anzeigen" + "NotifNeverAsk": "Nicht mehr anzeigen", + "NotifNoNewNotifs": "No new notifications", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" }, "_HomePage": { "PageTitle": "Launcher", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "Verifiziere Vorabladepaket", "PreloadDownloadNotifbarSubtitle": "Wichtiges Paket", "UpdatingVoicePack": "Aktualisiere Sprachpaket...", - "InstallBtn": "Spiel installieren", + "InstallBtn": "Install/Locate Game", "UpdateBtn": "Spiel aktualisieren", "PauseDownloadBtn": "Pausieren", "ResumeDownloadBtn": "Fortsetzen", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Spiel reparieren", "GameSettings_Panel2UninstallGame": "Spiel deinstallieren", "GameSettings_Panel2ConvertVersion": "Spielversion konvertieren", + "GameSettings_Panel2StopGame": "Force Close Game", "GameSettings_Panel3": "Benutzerdefinierte Startoptionen", "GameSettings_Panel4": "Andere Einstellungen", "GameSettings_Panel4ShowEventsPanel": "Aktionspanel anzeigen", "GameSettings_Panel4ShowSocialMediaPanel": "Social Media Panel anzeigen", + "GamePlaytime_Panel1": "Edit Playtime", + "GamePlaytime_Idle_Panel1Hours": "Hours", + "GamePlaytime_Idle_Panel1Minutes": "Minutes", + "GamePlaytime_Idle_ResetBtn": "Reset", + "GamePlaytime_Idle_ChangeBtn": "Change", + "GamePlaytime_Idle_InvalidTimeBlock": "Invalid values provided.", + "GamePlaytime_Running_Info1": "An instance of this game is currently running, therefore playtime can't be edited.", + "GamePlaytime_Running_Info2": "Please be aware that fully closing Collapse will stop playtime tracking (saving what was played until that point) & only sessions started using Collapse will be tracked.", "PostPanel_Events": "Aktionen", "PostPanel_Notices": "Ankündigungen", "PostPanel_Info": "Informationen", @@ -196,6 +208,7 @@ "PageTitle": "Spieleinstellungen", "Graphics_Title": "Grafikeinstellungen", "Graphics_ResolutionPanel": "Spielauflösung", + "Graphics_Borderless": "Use Borderless Windowed Mode", "Graphics_Fullscreen": "Vollbild", "Graphics_ExclusiveFullscreen": "Exklusiven Vollbildmodus verwenden", "Graphics_ResSelectPlaceholder": "Auswählen", @@ -273,8 +286,8 @@ "PageTitle": "App Einstellungen", "Debug": "Debuggen", "Debug_Console": "Konsole anzeigen", + "Debug_IncludeGameLogs": "Save Game logs to Collapse's (might contain sensitive data)", "Debug_MultipleInstance": "Ausführen von mehr als einer Instanz von Collapse erlauben", - "DiscordRPC_Toggle": "Discord Präsenz anzeigen", "ChangeRegionWarning_Toggle": "Region Änderungswarnung angzeigen", "ChangeRegionWarning_Warning": "*Du musst die Anwendung neu starten, damit diese Einstellung wirksam wird.", "Language": "App-Sprache", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Automatisch erkennen)", "AppThreads_Help5": "Dieser Thread wird den Extraktions-/Verifizierungsprozess während der Installation/Reparatur des Spiels durchführen.", "AppThreads_Help6": "Hinweis: Diese Einstellung ist bei der Installation von Honkai Impact 3rd nicht mehr wirksam.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Discord Präsenz anzeigen", + "DiscordRPC_GameStatusToggle": "Show current game on Discord status", "Update": "Nach Updates suchen", "Update_CurVer": "Aktuelle Version:", "Update_CheckBtn": "Auf Aktualisierungen prüfen", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "Bilddateien löschen", "ReportIssueBtn": "Ein Problem melden", "ContributePRBtn": "Mit einer Pull Request beitragen", + "ContributorListBtn": "Open Source Contributors", "About": "Info", "About_Copyright1": "© 2022-2023 Erstellt von", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Unter der", - "About_Copyright4": " lizenz. Alle Rechte vorbehalten.", + "About_Copyright4": ". All rights reserved.", "Disclaimer": "Haftungsausschluss", "Disclaimer1": "Diese App ist in keinster Weise mit", "Disclaimer2": "verbunden", @@ -327,7 +344,9 @@ "DiscordBtn1": "Tritt unserem Armada Discord bei!", "DiscordBtn2": "Honkai Impact 3rd Discord", "DiscordBtn3": "Offizieller Collapse Discord!", - "AppChangeReleaseChannel": "Zum Release Channel {0} wechseln" + "AppChangeReleaseChannel": "Zum Release Channel {0} wechseln", + "EnableAcrylicEffect": "Use Acrylic Blur Effect", + "EnableDownloadChunksMerging": "Merge Downloaded Package Chunks" }, "_Misc": { "UpdateCompleteTitle": "Update abgeschlossen!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Vorschau", "BuildChannelStable": "Stabil", "CDNDescription_Github": "Die offizielle (Haupt-)Repository des Launchers.", + "CDNDescription_Cloudflare": "A mirror of the official (main) repository hosted in Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "A mirror of the official (main) repository hosted in Bitbucket.", "CDNDescription_Statically": "Ein Mirror der offiziellen (Haupt-)Repository, von Statically bereitgestellt. Benutze dies wenn du in einem Land wohnst in dem GitHub nicht zugänglich ist.", "CDNDescription_jsDelivr": "jsDelivr nutzt mehrere CDN-Anbieter wie CloudFlare, Fastly und Quantil, um die bestmögliche Verfügbarkeit und Leistung zu gewährleisten.", - "LocateExecutable": "Anwendung suchen" + "LocateExecutable": "Anwendung suchen", + "OpenDownloadPage": "Open Download Page", + "DiscordRP_Play": "Playing", + "DiscordRP_InGame": "In Game", + "DiscordRP_Update": "Updating", + "DiscordRP_Repair": "Repairing Game", + "DiscordRP_Cache": "Updating Cache", + "DiscordRP_GameSettings": "Changing Game Settings", + "DiscordRP_AppSettings": "Changing App Settings", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "No Activity", + "DiscordRP_Ad": "- With Collapse Launcher", + "DiscordRP_Region": "Region:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Achtung: Delta-Patch Update wurde erkannt!", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Du bist dabei den Release-Kanal zu ändern auf:", "ReleaseChannelChangeSubtitle2": "Hinweis:", "ReleaseChannelChangeSubtitle3": "Diese Aktion kann zu unwiderruflichen Änderungen führen und/oder dazu, dass Dinge in deinem aktuellen Setup nicht mehr funktionieren. Wir sind nicht verantwortlich für den Verlust oder die Beschädigung von Daten, die mit deinem Spiel verbunden sind.", + "ChangePlaytimeTitle": "Are you sure you want to change your playtime?", + "ChangePlaytimeSubtitle": "Changing your playtime means overwriting the current value with the one you just inputted. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "ResetPlaytimeTitle": "Are you sure you want to reset your playtime?", + "ResetPlaytimeSubtitle": "Resetting your playtime means setting the playtime counter back to 0. This is a ", + "ResetPlaytimeSubtitle2": "destructive", + "ResetPlaytimeSubtitle3": " action, meaning that you cannot undo this once you confirm. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", "LocateExePathTitle": "Installationspfad der Anwendung suchen", - "LocateExePathSubtitle": "Bitte verweise Collapse auf den Ort, an dem sich die ausführbare Datei deiner Anwendung befindet:" + "LocateExePathSubtitle": "Bitte verweise Collapse auf den Ort, an dem sich die ausführbare Datei deiner Anwendung befindet:", + "CannotUseAppLocationForGameDirTitle": "Folder is invalid!", + "CannotUseAppLocationForGameDirSubtitle": "You can't use this folder as it is being used as a system folder or being used for main executable of the app. Please choose another folder!", + "StopGameTitle": "Force Stop Game", + "StopGameSubtitle": "Are you sure you want to force stop current running game?\r\nYou may lose some in-game progress." }, "_InstallMgmt": { "IntegrityCheckTitle": "Integritätsprüfung", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Reflektionsqualität", "Graphics_BloomQuality": "Bloom-Qualität", "Graphics_AAMode": "Anti-Aliasing-Modus", + "Graphics_SFXQuality": "SFX Quality", "Graphics_SpecPanel": "Allgemeine Grafikeinstellungen", "SpecEnabled": "Aktiviert", "SpecDisabled": "Deaktiviert", @@ -655,11 +699,78 @@ "Language": "Spracheinstellungen", "Language_Help1": "Collapse kann das Audiopaket derzeit nicht direkt herunterladen.", "Language_Help2": "Das Audiopaket wird beim nächsten Start des Spieles im Spiel heruntergeladen.", - "Audio": "Audio", - "Text": "Text", + "LanguageAudio": "Audio", + "LanguageText": "Text", "VO_en": "Englisch", "VO_cn": "Chinesisch", "VO_jp": "Japanisch", "VO_kr": "Koreanisch" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Game Settings", + "Graphics_Title": "Graphics Settings", + "Graphics_ResolutionPanel": "Game Resolution", + "Graphics_Fullscreen": "Fullscreen", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ExclusiveFullscreen_Help": "Exclusive Fullscreen might cause random game freezes!", + "Graphics_ResSelectPlaceholder": "Select", + "Graphics_ResCustom": "Use Custom Resolution", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Render Scale", + "Graphics_ShadowQuality": "Shadow Quality", + "Graphics_VisualFX": "Visual Effects", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_EnvDetailQuality": "Environment Detail", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Reflection", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Crowd Density", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Teammate Effects", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Global Graphics Settings", + "SpecEnabled": "Enabled", + "SpecDisabled": "Disabled", + "SpecVeryLow": "Very Low", + "SpecLow": "Low", + "SpecMedium": "Medium", + "SpecHigh": "High", + "SpecVeryHigh": "Very High", + "SpecPartiallyOff": "Partially Off", + "ApplyBtn": "Apply Settings", + "SettingsApplied": "Changes have been saved!", + "OverlayNotInstalledTitle": "You cannot use this feature as the region isn't installed or needs to be updated!", + "OverlayNotInstalledSubtitle": "Please download/update the game first on the game's launcher page!", + "OverlayGameRunningTitle": "Game is Currently Running!", + "OverlayGameRunningSubtitle": "Please close the game first to use this feature!", + "OverlayFirstTimeTitle": "You have never played this game before!", + "OverlayFirstTimeSubtitle": "Please run the game first to generate the necessary files, then come back here to use this feature.", + "CustomArgs_Title": "Custom Start-up Arguments (Advanced)", + "CustomArgs_Subtitle": "Start-up Arguments", + "CustomArgs_Footer1": "For more information about the Start-up Argument, please check the", + "CustomArgs_Footer2": "Unity Standalone Player command line documentation", + "CustomArgs_Footer3": "to see more parameters.", + "Audio_Title": "Audio Settings", + "Audio_Master": "Master Volume", + "Audio_BGM": "BGM Volume", + "Audio_SFX": "Sound Effects Volume", + "Audio_VO": "Voice Over Volume", + "Audio_Output_Surround": "Use Surround Sound", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Language Settings", + "Language_Help1": "Collapse currently cannot download Audio package directly.", + "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "English", + "VO_cn": "Chinese", + "VO_jp": "Japanese", + "VO_kr": "Korean" } } diff --git a/Hi3Helper.Core/Lang/en-us.json b/Hi3Helper.Core/Lang/en-us.json index a27fe0117..969c1c33e 100644 --- a/Hi3Helper.Core/Lang/en-us.json +++ b/Hi3Helper.Core/Lang/en-us.json @@ -35,7 +35,7 @@ "Subtitle1": "Hi!", "Subtitle2": "Seems like it's your first time using this launcher.", "Subtitle3": "Thank you for trying out the project! To set everything up, please choose where you want Collapse to store the launcher data.", - "Subtitle4_1": "To Start, click on the", + "Subtitle4_1": "To start, click on the", "Subtitle4_2": "\"Locate folder\"", "Subtitle4_3": "button below to choose where you want to install your game.", "Title1": "Welcome", @@ -77,7 +77,9 @@ "RegionLoadingSubtitleTooLong": "This is taking a bit longer than expected... Please ensure that your Internet connection is stable!", "NavCtrlTitleSettings": "App Settings", "NotifNeverAsk": "Never show again", - "NotifNoNewNotifs": "No new notifications" + "NotifNoNewNotifs": "No new notifications", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" }, "_HomePage": { @@ -217,7 +219,7 @@ "Graphics_Title": "Graphics Settings", "Graphics_ResolutionPanel": "Game Resolution", - "Graphics_Borderless": "Borderless Screen", + "Graphics_Borderless": "Use Borderless Windowed Mode", "Graphics_Fullscreen": "Fullscreen", "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", "Graphics_ResSelectPlaceholder": "Select", @@ -482,6 +484,18 @@ "DiscordRP_Region": "Region:" }, + "_BackgroundNotification": { + "LoadingTitle": "Loading activity...", + "Placeholder": "-", + + "CategoryTitle_Downloading": "Downloading game: {0}", + "CategoryTitle_DownloadingPreload": "Downloading preload: {0}", + "CategoryTitle_Updating": "Updating game: {0}", + + "NotifBadge_Completed": "[Completed] {0}", + "NotifBadge_Error": "[Error/Canceled] {0}" + }, + "_Dialogs": { "DeltaPatchDetectedTitle": "Warning: Delta Patch Update is Detected!", "DeltaPatchDetectedSubtitle": "Delta patch will be used to update your game from {0} to {1}.\r\nRemember that you may still need to download some files in-game.\r\n\r\nDo you wish to proceed?", diff --git a/Hi3Helper.Core/Lang/es-419.json b/Hi3Helper.Core/Lang/es-419.json index 27b01ecca..68654c245 100644 --- a/Hi3Helper.Core/Lang/es-419.json +++ b/Hi3Helper.Core/Lang/es-419.json @@ -1,7 +1,7 @@ { - "LanguageName": "Español (Latinoamérica)", + "LanguageName": "Español (LATAM)", "LanguageID": "es-419", - "Author": "BloodDragooner, d-l-n", + "Author": "BloodDragooner, d-l-n, IhoFox", "_StartupPage": { "ChooseFolderBtn": "Buscar carpeta", "ChooseFolderDialogCancel": "Cancelar", @@ -51,11 +51,11 @@ }, "_UnhandledExceptionPage": { "UnhandledTitle1": "Error No Procesado", - "UnhandledSubtitle1": "Un Error No Procesado ha ocurrido con un Lanzamiento Erroneo que se muestra debajo:", + "UnhandledSubtitle1": "La siguiente excepción a causado un Error No Procesado:", "UnhandledTitle2": "Error al Conectarse", "UnhandledSubtitle2": "Vaya, parece que te has desconectado de Internet~ ¿O será por algo más?", - "UnhandledTitle3": "El Juego se Detuvo", - "UnhandledSubtitle3": "El juego se detuvo con los detalles sobre el error mostrados abajo:", + "UnhandledTitle3": "El Juego se detuvo", + "UnhandledSubtitle3": "El juego se detuvo por un error. Detalles a continuación:", "CopyClipboardBtn1": "Copiar Todo al Portapapeles", "CopyClipboardBtn2": "¡Copiado al Portapapeles!", "GoBackPageBtn1": "Volver a la Página Anterior" @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "Acción agotada (> {1} segundos). Reintentando cargar la región {0}...", "RegionLoadingSubtitleTooLong": "Esto está tardando un poco más de lo esperado... ¡Por favor asegúrate de que tu conexión a Internet es estable!", "NavCtrlTitleSettings": "Ajustes de la Aplicación", - "NotifNeverAsk": "No mostrar de nuevo" + "NotifNeverAsk": "No mostrar de nuevo", + "NotifNoNewNotifs": "No hay nuevas notificaciones", + "NavigationMenu": "Menú", + "NavigationUtilities": "Utilidades" }, "_HomePage": { "PageTitle": "Lanzador", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "Verificando Paquete de Precarga", "PreloadDownloadNotifbarSubtitle": "Paquete Obligatorio", "UpdatingVoicePack": "Actualizando el Paquete de Voz...", - "InstallBtn": "Instalar el Juego", + "InstallBtn": "Instalar/Localizar el Juego", "UpdateBtn": "Actualizar el Juego", "PauseDownloadBtn": "Pausar", "ResumeDownloadBtn": "Reanudar", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Reparar Juego", "GameSettings_Panel2UninstallGame": "Desinstalar Juego", "GameSettings_Panel2ConvertVersion": "Convertir Versión del Juego", + "GameSettings_Panel2StopGame": "Forzar el cierre del juego", "GameSettings_Panel3": "Argumentos Personalizados de Arranque", "GameSettings_Panel4": "Otros", "GameSettings_Panel4ShowEventsPanel": "Mostrar Panel de Eventos", "GameSettings_Panel4ShowSocialMediaPanel": "Mostrar Panel de Redes Sociales", + "GamePlaytime_Panel1": "Editar tiempo de juego", + "GamePlaytime_Idle_Panel1Hours": "Horas", + "GamePlaytime_Idle_Panel1Minutes": "Minutos", + "GamePlaytime_Idle_ResetBtn": "Restablecer", + "GamePlaytime_Idle_ChangeBtn": "Cambiar", + "GamePlaytime_Idle_InvalidTimeBlock": "Valor inválido.", + "GamePlaytime_Running_Info1": "El juego se está ejecutando, por lo tanto no se puede editar el tiempo de juego.", + "GamePlaytime_Running_Info2": "Por favor ten en cuenta que al cerrar Collapse se detendra el seguimiento del tiempo de juego (guardando lo jugado hasta ese punto) y solo los juegos iniciados usando Collapse tendran seguimiento.", "PostPanel_Events": "Eventos", "PostPanel_Notices": "Anuncios", "PostPanel_Info": "Información", @@ -196,6 +208,7 @@ "PageTitle": "Ajustes del Juego", "Graphics_Title": "Ajustes de Gráficos", "Graphics_ResolutionPanel": "Resolución del juego", + "Graphics_Borderless": "Usar modo ventana sin bordes", "Graphics_Fullscreen": "Pantalla Completa", "Graphics_ExclusiveFullscreen": "Usar Pantalla Completa Exclusiva", "Graphics_ResSelectPlaceholder": "Seleccionar", @@ -273,8 +286,8 @@ "PageTitle": "Ajustes de la Aplicación", "Debug": "Depuración", "Debug_Console": "Mostrar Consola", + "Debug_IncludeGameLogs": "Guardar registros de juego en Collapse (podría contener datos sensibles)", "Debug_MultipleInstance": "Permitir ejecutar múltiples ventanas de Collapse", - "DiscordRPC_Toggle": "Mostrar Presencia de Discord", "ChangeRegionWarning_Toggle": "Mostrar Advertencia de Cambio de Región", "ChangeRegionWarning_Warning": "*Necesitas reiniciar la aplicación para que los cambios del tema surtan efecto.", "Language": "Idioma de la Aplicación", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Autodetectar)", "AppThreads_Help5": "Este thread manejará el proceso de extracción/verificación mientras se instala/repara el juego.", "AppThreads_Help6": "Aviso: Esta configuración ya no funciona al instalar Honkai Impact 3rd.", + "DiscordRPC": "Estado de actividad en Discord (Rich Presence)", + "DiscordRPC_Toggle": "Mostrar Presencia de Discord", + "DiscordRPC_GameStatusToggle": "Mostrar el juego actual en el estado de Discord", "Update": "Buscar Actualizaciones", "Update_CurVer": "Versión Actual:", "Update_CheckBtn": "Buscar Actualización", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "Borrar Archivos de Imagen", "ReportIssueBtn": "Reportar un problema", "ContributePRBtn": "Contribuye con un Pull Request", + "ContributorListBtn": "Colaboradores del Open Source", "About": "Acerca de", "About_Copyright1": "©️ 2022-2023 Creado por", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Bajo", - "About_Copyright4": " licencia. Todos los derechos reservados.", + "About_Copyright4": ". Todos los derechos reservados.", "Disclaimer": "Aviso", "Disclaimer1": "Esta aplicación no está afiliada con", "Disclaimer2": "de cualquier forma", @@ -327,7 +344,9 @@ "DiscordBtn1": "¡Únete a nuestro Discord Armada!", "DiscordBtn2": "Discord de Honkai Impact 3rd", "DiscordBtn3": "¡Discord Oficial de Collapse!", - "AppChangeReleaseChannel": "Cambiar a Canal de Lanzamiento" + "AppChangeReleaseChannel": "Cambiar a Canal de Lanzamiento", + "EnableAcrylicEffect": "Usar efecto de desenfoque", + "EnableDownloadChunksMerging": "Combinar Paquetes Descargados" }, "_Misc": { "UpdateCompleteTitle": "¡Actualización Completada!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Version Preview", "BuildChannelStable": "Estable", "CDNDescription_Github": "El repositorio oficial (principal) del lanzador.", + "CDNDescription_Cloudflare": "Mirror del repositorio oficial (principal) alojado en Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "Mirror del repositorio oficial (principal) alojado en Bitbucket.", "CDNDescription_Statically": "Una copia del repositorio oficial (principal), proporcionada por Statically. Úsalo si vives en un lugar donde GitHub es inaccesible.", "CDNDescription_jsDelivr": "jsDelivr utiliza múltiples proveedores CDN como CloudFlare, Fastly y Quantil, resultando en el mejor tiempo de actividad y rendimiento posible.", - "LocateExecutable": "Localiza el Ejecutable" + "LocateExecutable": "Localiza el Ejecutable", + "OpenDownloadPage": "Abrir página de descarga", + "DiscordRP_Play": "Jugando", + "DiscordRP_InGame": "En el juego", + "DiscordRP_Update": "Actualizando", + "DiscordRP_Repair": "Reparando el juego", + "DiscordRP_Cache": "Actualizando Caché", + "DiscordRP_GameSettings": "Cambiando ajustes del juego", + "DiscordRP_AppSettings": "Cambiando ajustes de la aplicación", + "DiscordRP_Idle": "Inactivo", + "DiscordRP_Default": "Sin actividad", + "DiscordRP_Ad": "- Con Collapse Launcher", + "DiscordRP_Region": "Región:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Advertencia: ¡Una actualización al Delta Patch ha sido detectada!", @@ -446,7 +479,7 @@ "InsufficientDiskSubtitle": "No tienes suficiente espacio libre para instalar este juego en el disco duro{2}!\n\nEspacio libre: {0}\nEspacio necesario: {1}.\n\nPor favor, asegúrese de tener suficiente espacio en eldisco duro antes de proceder con la instalación.", "RelocateFolderTitle": "Reubicar Carpeta de Datos de la Aplicación", "RelocateFolderSubtitle": "Actualmente estás usando esta carpeta como la Carpeta de Datos de la Aplicación:\n\n {0}\n\n¿Deseas cambiar su ubicación?", - "UninstallGameTitle": "Desinstalando Juego: {0}", + "UninstallGameTitle": "Desinstalando juego: {0}", "UninstallGameSubtitle": "Estás a punto de desinstalar el juego ubicado en:\n\n{0}\n\n¿Continuar?", "MigrationTitle": "Ubicando Carpeta de Destino", "MigrationSubtitle": "Antes de migrar, ¿deseas especificar la ubicación del juego?", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Estás a punto de cambiar el canal de lanzamiento a:", "ReleaseChannelChangeSubtitle2": "Aviso:", "ReleaseChannelChangeSubtitle3": "Esta acción puede causar cambios irreversibles y/o causar que las cosas se rompan de la configuración actual. No nos hacemos responsables de ninguna pérdida o corrupción de datos asociados al juego.", + "ChangePlaytimeTitle": "¿Estás seguro de que quieres cambiar tu tiempo de juego?", + "ChangePlaytimeSubtitle": "Cambiar el tiempo de juego significa reemplazar los valores actuales con los que acabas de ingresar.\n\n¿Deseas continuar?\n\nNota: Esto no afectara como funciona Collapse y cuando no estés jugando, puedes volver a cambiar los valores.", + "ResetPlaytimeTitle": "¿Estás seguro de que quieres restablecer tu tiempo de juego?", + "ResetPlaytimeSubtitle": "Restablecer el tiempo de juego significa volver a 0 el contador. Esta es una acción ", + "ResetPlaytimeSubtitle2": "destructiva", + "ResetPlaytimeSubtitle3": ", lo que significa que no puedes deshacer esto una vez confirmado.\n\n¿Deseas continuar?\n\nNota: Esto no afectara como funciona Collapse y cuando no estés jugando, puedes volver a cambiar los valores.", "LocateExePathTitle": "Localiza la Carpeta del Ejecutable", - "LocateExePathSubtitle": "Por favor, selecciona la ubicacion del ejecutable de la aplicación:" + "LocateExePathSubtitle": "Por favor, selecciona la ubicacion del ejecutable de la aplicación:", + "CannotUseAppLocationForGameDirTitle": "¡La carpeta no es válida!", + "CannotUseAppLocationForGameDirSubtitle": "No puede utilizar esta carpeta ya que está siendo usada como una carpeta del sistema o usada para el ejecutable principal de la aplicación. ¡Por favor, elige otra carpeta!", + "StopGameTitle": "Forzar el cierre del juego", + "StopGameSubtitle": "¿Estás seguro de que quieres forzar el cierre del juego en ejecución?\nEs posible que pierdas algún progreso en el juego." }, "_InstallMgmt": { "IntegrityCheckTitle": "Verificación de Integridad", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Calidad de Reflejos", "Graphics_BloomQuality": "Calidad de Bloom", "Graphics_AAMode": "Modo de Anti-Aliasing", + "Graphics_SFXQuality": "Calidad de SFX", "Graphics_SpecPanel": "Configuración Grafica Global", "SpecEnabled": "Habilitado", "SpecDisabled": "Desactivado", @@ -641,8 +685,8 @@ "OverlayGameRunningSubtitle": "¡Por favor, cierra el juego antes de utilizar esta función!", "OverlayFirstTimeTitle": "¡Nunca has jugado antes a este juego!", "OverlayFirstTimeSubtitle": "Por favor, inicia el juego para generar los archivos necesarios, luego vuelve aquí para usar esta función.", - "CustomArgs_Title": "Argumentos personalizados de inicio (Avanzado)", - "CustomArgs_Subtitle": "Argumentos de iniciación", + "CustomArgs_Title": "Comandos Personalizados de inicio (Avanzado)", + "CustomArgs_Subtitle": "Argumentos de Arranque", "CustomArgs_Footer1": "Para mas información sobre los argumentos de inicio, consulta el", "CustomArgs_Footer2": "Unity Standalone Command-line documentation (en Ingles)", "CustomArgs_Footer3": "para ver mas parámetros.", @@ -655,8 +699,75 @@ "Language": "Configuración de Idioma", "Language_Help1": "Por el momento Collapse no puede descargar el paquete de audio.", "Language_Help2": "El paquete de audio se descargará dentro del juego la próxima vez que se inicie.", - "Audio": "Voces", - "Text": "Texto", + "LanguageAudio": "Voces", + "LanguageText": "Texto", + "VO_en": "Ingles", + "VO_cn": "Chino", + "VO_jp": "Japones", + "VO_kr": "Coreano" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Ajustes del Juego", + "Graphics_Title": "Configuración Gráfica", + "Graphics_ResolutionPanel": "Resolución del juego", + "Graphics_Fullscreen": "Pantalla Completa", + "Graphics_ExclusiveFullscreen": "Usar Pantalla Completa Exclusiva", + "Graphics_ExclusiveFullscreen_Help": "¡La pantalla completa exclusiva puede causar que el juego se detenga aleatoriamente!", + "Graphics_ResSelectPlaceholder": "Seleccionar", + "Graphics_ResCustom": "Usar Resolucion Personalizada", + "Graphics_ResCustomW": "An", + "Graphics_ResCustomH": "Al", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Escala de Renderizado", + "Graphics_ShadowQuality": "Calidad de Sombras", + "Graphics_VisualFX": "Efectos Visuales", + "Graphics_SFXQuality": "Calidad de SFX", + "Graphics_EnvDetailQuality": "Detalle de Escena", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Modo de Anti-Aliasing", + "Graphics_VolFogs": "Niebla volumétrica", + "Graphics_ReflectionQuality": "Reflejos", + "Graphics_MotionBlur": "Desenfoque de movimiento", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Densidad de personas", + "Graphics_SubsurfaceScattering": "Dispersión subsuperficial", + "Graphics_TeammateFX": "Efectos de compañeros", + "Graphics_AnisotropicFiltering": "Filtrado anisotrópico", + "Graphics_SpecPanel": "Configuración Grafica Global", + "SpecEnabled": "Activado", + "SpecDisabled": "Desactivado", + "SpecVeryLow": "Muy Bajo", + "SpecLow": "Bajo", + "SpecMedium": "Medio", + "SpecHigh": "Alto", + "SpecVeryHigh": "Muy Alto", + "SpecPartiallyOff": "Parcialmente apagado", + "ApplyBtn": "Aplicar Ajustes", + "SettingsApplied": "¡Se guardaron los cambios!", + "OverlayNotInstalledTitle": "¡No puedes utilizar esta función debido a que la región no esta instalada o necesita ser actualizada!", + "OverlayNotInstalledSubtitle": "Por favor, descarga/actualiza el juego primero desde la pagina principal!", + "OverlayGameRunningTitle": "¡El Juego Está Corriendo!", + "OverlayGameRunningSubtitle": "¡Por favor, cierra el juego antes de utilizar esta función!", + "OverlayFirstTimeTitle": "¡Nunca has jugado antes a este juego!", + "OverlayFirstTimeSubtitle": "Por favor, inicia el juego para generar los archivos necesarios, luego vuelve aquí para usar esta función.", + "CustomArgs_Title": "Comandos Personalizados de inicio (Avanzado)", + "CustomArgs_Subtitle": "Argumentos de Arranque", + "CustomArgs_Footer1": "Para más información sobre los Argumentos de Arranque, por favor revisa el", + "CustomArgs_Footer2": "Unity Standalone Command-line documentation (en Ingles)", + "CustomArgs_Footer3": "para ver mas parámetros.", + "Audio_Title": "Configuración de Audio", + "Audio_Master": "Volumen Principal", + "Audio_BGM": "Volumen BGM", + "Audio_SFX": "Volumen Efectos de Sonido", + "Audio_VO": "Volumen Voces", + "Audio_Output_Surround": "Usar Sonido Envolvente", + "Audio_DynamicRange": "Rango Dinámico completo", + "Language": "Configuración de Idioma", + "Language_Help1": "Por el momento Collapse no puede descargar el paquete de audio.", + "Language_Help2": "El paquete de audio se descargará dentro del juego la próxima vez que se inicie.", + "LanguageAudio": "Voces", + "LanguageText": "Texto", "VO_en": "Ingles", "VO_cn": "Chino", "VO_jp": "Japones", diff --git a/Hi3Helper.Core/Lang/id-ID.json b/Hi3Helper.Core/Lang/id-ID.json index 146737ea2..ad7599ebc 100644 --- a/Hi3Helper.Core/Lang/id-ID.json +++ b/Hi3Helper.Core/Lang/id-ID.json @@ -1,7 +1,7 @@ { "LanguageName": "Bahasa Indonesia", "LanguageID": "id-ID", - "Author": "neon-nyan", + "Author": "neon-nyan, bagusnl", "_StartupPage": { "ChooseFolderBtn": "Pilih Folder", "ChooseFolderDialogCancel": "Batal", @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "Terjadi masa tenggang saat membaca wilayah {0} (> {1} detik). Mencoba lagi...", "RegionLoadingSubtitleTooLong": "Proses memakan waktu lebih lama dari perkiraan. Pastikan bahwa koneksimu stabil.", "NavCtrlTitleSettings": "Pengaturan App", - "NotifNeverAsk": "Jangan munculkan ini lagi" + "NotifNeverAsk": "Jangan munculkan ini lagi", + "NotifNoNewNotifs": "Tidak ada notifikasi baru", + "NavigationMenu": "Menu", + "NavigationUtilities": "Perkakas" }, "_HomePage": { "PageTitle": "Launcher", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "Memeriksa Pra-unduh", "PreloadDownloadNotifbarSubtitle": "Berkas yang Diperlukan", "UpdatingVoicePack": "Perbarui Berkas Suara", - "InstallBtn": "Pasang Game", + "InstallBtn": "Install/Cari Game", "UpdateBtn": "Perbarui Game", "PauseDownloadBtn": "Jeda Unduhan", "ResumeDownloadBtn": "Lanjutkan Unduhan", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Perbaiki Game", "GameSettings_Panel2UninstallGame": "Hapus Game", "GameSettings_Panel2ConvertVersion": "Ubah Versi", + "GameSettings_Panel2StopGame": "Tutup Paksa Game", "GameSettings_Panel3": "Penyesuaian Argumen Pemulaian", "GameSettings_Panel4": "Lainnya", "GameSettings_Panel4ShowEventsPanel": "Munculkan Panel Event", "GameSettings_Panel4ShowSocialMediaPanel": "Munculkan Panel Sosmed", + "GamePlaytime_Panel1": "Ubah Waktu Main", + "GamePlaytime_Idle_Panel1Hours": "Jam", + "GamePlaytime_Idle_Panel1Minutes": "Menit", + "GamePlaytime_Idle_ResetBtn": "Atur Ulang", + "GamePlaytime_Idle_ChangeBtn": "Ubah", + "GamePlaytime_Idle_InvalidTimeBlock": "Nilai yang dimasukkan tidak benar.", + "GamePlaytime_Running_Info1": "Game ini sedang berjalan, maka dari itu waktu main tidak dapat diubah.", + "GamePlaytime_Running_Info2": "Perlu diketahui bahwa dengan menutup Collapse akan memberhentikan tracking dari waktu main (untuk disimpan pada saat dimainkan) dan hanya sesi yang dijalankan dari Collapse saja yang dapat ditrack.", "PostPanel_Events": "Event", "PostPanel_Notices": "Pemberitahuan", "PostPanel_Info": "Informasi", @@ -196,6 +208,7 @@ "PageTitle": "Pengaturan Game", "Graphics_Title": "Pengaturan Grafis", "Graphics_ResolutionPanel": "Resolusi Game", + "Graphics_Borderless": "Gunakan Mode Borderless Window", "Graphics_Fullscreen": "Layar Penuh", "Graphics_ExclusiveFullscreen": "Gunakan Layar Penuh Eksklusif", "Graphics_ResSelectPlaceholder": "Pilih", @@ -273,8 +286,8 @@ "PageTitle": "Pengaturan Aplikasi", "Debug": "Debugging", "Debug_Console": "Perlihatkan Konsol", + "Debug_IncludeGameLogs": "Simpan catatan game ke Collapse (kemungkinan berisi data sensitif)", "Debug_MultipleInstance": "Perbolehkan Multiple Instance", - "DiscordRPC_Toggle": "Perlihatkan Discord Presence", "ChangeRegionWarning_Toggle": "Tampilkan Peringatan Penggantian Region", "ChangeRegionWarning_Warning": "*Anda perlu memulai ulang launcher untuk menerapkan setelan ini.", "Language": "Bahasa", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Deteksi otomatis)", "AppThreads_Help5": "Utas ini akan bertanggungjawab untuk menangani utas-utas untuk proses extract/verifikasi pada saat memasang/memulihkan game.", "AppThreads_Help6": "Catatan: Pengaturan ini tidak lagi berpengaruh pada saat memasang Honkai Impact 3.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Perlihatkan Discord Presence", + "DiscordRPC_GameStatusToggle": "Munculkan game yang dimainkan pada status Discord", "Update": "Periksa Pembaruan", "Update_CurVer": "Versi saat ini:", "Update_CheckBtn": "Periksa Pembaruan", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "Bersihkan Berkas Gambar", "ReportIssueBtn": "Laporkan Isu", "ContributePRBtn": "Kontribusi ke Pull Request", + "ContributorListBtn": "Kontributor Open Source", "About": "Tentang", "About_Copyright1": "© 2023 Dibuat oleh", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Di bawah lisensi", - "About_Copyright4": ". Semua hak dilindungi.", + "About_Copyright4": ". Hak cipta dilindungi.", "Disclaimer": "Sanggahan", "Disclaimer1": "Aplikasi ini tidak berkaitan dengan", "Disclaimer2": "dengan cara apapun", @@ -327,7 +344,9 @@ "DiscordBtn1": "Gabung Discord Armada Kami", "DiscordBtn2": "Kunjungi Discord Honkai Impact 3rd", "DiscordBtn3": "Discord Resmi Collapse!", - "AppChangeReleaseChannel": "Ubah Kanal Rilis ke {0}" + "AppChangeReleaseChannel": "Ubah Kanal Rilis ke {0}", + "EnableAcrylicEffect": "Gunakan Efek Blur Akrilik", + "EnableDownloadChunksMerging": "Gabung Potongan Unduhan Package" }, "_Misc": { "UpdateCompleteTitle": "Pembaruan Selesai!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Preview", "BuildChannelStable": "Stable", "CDNDescription_Github": "Repositori resmi (utama) untuk launcher", + "CDNDescription_Cloudflare": "Mirror dari repositori resmi (main) yang dihost dalam bucket Cloudflare R2.", + "CDNDescription_Bitbucket": "Mirror dari repositori resmi (main) yang dihost dalam Bitbucket.", "CDNDescription_Statically": "Sebuah mirror dari Repository resmi (utama) dan disediakan oleh Statically. Gunakan ini apabila kamu tinggal di daerah dimana GitHub tidak dapat diakses", "CDNDescription_jsDelivr": "jsDelivr menggunakan beragam penyedia CDN seperti CloudFlare, Fastly dan Quantil, dan menawarkan performa dan uptime sebaik mungkin.", - "LocateExecutable": "Pilih Executable Program" + "LocateExecutable": "Pilih Executable Program", + "OpenDownloadPage": "Buka Halaman Download", + "DiscordRP_Play": "Memainkan", + "DiscordRP_InGame": "Di dalam Game", + "DiscordRP_Update": "Memperbarui", + "DiscordRP_Repair": "Memperbaiki Game", + "DiscordRP_Cache": "Memperbarui Cache", + "DiscordRP_GameSettings": "Mengubah Setelan Game", + "DiscordRP_AppSettings": "Mengubah Setelan Aplikasi", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "Tidak ada Aktivitas", + "DiscordRP_Ad": "- Dengan Collapse Launcher", + "DiscordRP_Region": "Wilayah:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Pemberitahuan: Pembaruan Delta Patch Terdeteksi!", @@ -445,7 +478,7 @@ "InsufficientDiskTitle": "Ruang Penyimpanan Tidak Cukup", "InsufficientDiskSubtitle": "Kamu tidak memiliki ruang yang cukup untuk memasang game ini pada disk drive {2}-mu!\r\n\r\nSisa Ruang: {0}\r\nRuang yang Dibutuhkan: {1}.\r\n\r\nPastikan kamu punya cukup ruang untuk memasang game ini.", "RelocateFolderTitle": "Pindahkan Folder Data Aplikasi", - "RelocateFolderSubtitle": "Kamu sedang menggunakan folder ini untuk lokasi data aplikasi:\r\n\r\n {0}\r\n\r\nApkaah kamu ingin ganti ke lokasi lain?", + "RelocateFolderSubtitle": "Kamu sedang menggunakan folder ini untuk lokasi data aplikasi:\n\n {0}\n\nApakah kamu ingin ganti ke lokasi lain?", "UninstallGameTitle": "Hapus Game: {0}", "UninstallGameSubtitle": "Kamu akan menghapus game di lokasi ini:\r\n\r\n{0}\r\n\r\nLanjutkan?", "MigrationTitle": "Memilih Folder Target", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Kamu akan mengubah kanal rilismu ke:", "ReleaseChannelChangeSubtitle2": "Catatan:", "ReleaseChannelChangeSubtitle3": "Melakukan hal ini memungkinkan adanya perubahan yang tidak bisa dikembalikan atau inkompatibilitas.", + "ChangePlaytimeTitle": "Apakah anda yakin untuk mengubah waktu main?", + "ChangePlaytimeSubtitle": "Mengubah waktu main anda berarti menimpa nilai saat ini dengan yang sudah anda masukkan.\n\nLanjut untuk mengubah?\n\nCatatan: Hal ini tidak akan mempengaruhi cara Collapse berjalan dan anda dapat mengubah nilai kembali kapan saja saat anda tidak sedang memainkan gamenya.", + "ResetPlaytimeTitle": "Apakah anda yakin untuk setel ulang waktu main?", + "ResetPlaytimeSubtitle": "Menyetel ulang waktu main anda akan mengatur ulang hitungan menjadi 0. Hal ini bersifat ", + "ResetPlaytimeSubtitle2": "\"destructive\"", + "ResetPlaytimeSubtitle3": "yang berarti anda tidak akan bisa mengembalikannya setelah anda mengkonfirmasi.\n\nLanjut untuk mengubah?\n\nCatatan: Hal ini tidak akan mempengaruhi cara Collapse berjalan dan anda dapat mengubah nilai kembali kapan saja saat anda tidak sedang memainkan gamenya.", "LocateExePathTitle": "Pilih Lokasi Pemasangan Executable", - "LocateExePathSubtitle": "Silahkan arahkan Collapse ke lokasi dari executable aplikasimu:" + "LocateExePathSubtitle": "Silahkan arahkan Collapse ke lokasi dari executable aplikasimu:", + "CannotUseAppLocationForGameDirTitle": "Folder tidak valid!", + "CannotUseAppLocationForGameDirSubtitle": "Anda tidak dapat menggunakan folder ini karena digunakan sebagai folder sistem atau digunakan sebagai folder utama dari executable aplikasi ini. Mohon untuk gunakan folder lainnya!", + "StopGameTitle": "Tutup Paksa Game", + "StopGameSubtitle": "Apakah anda yakin ingin menutup game yang sedang berjalan?\nAnda akan kehilangan progress di dalam game." }, "_InstallMgmt": { "IntegrityCheckTitle": "Cek Integritas", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Kualitas Bayangan", "Graphics_BloomQuality": "Efek Bloom", "Graphics_AAMode": "Mode Anti-Aliasing", + "Graphics_SFXQuality": "Kualitas SFX", "Graphics_SpecPanel": "Pengaturan Grafis Keseluruhan", "SpecEnabled": "Hidup", "SpecDisabled": "Mati", @@ -655,8 +699,75 @@ "Language": "Pengaturan Bahasa", "Language_Help1": "Collapse saat ini tidak mendukung pengunduhan paket Audio secara langsung.", "Language_Help2": "Paket Audio dapat diunduh di dalam game setelah kamu menjalankan gamenya kemudian.", - "Audio": "Audio", - "Text": "Text", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "Inggris", + "VO_cn": "Mandarin", + "VO_jp": "Jepang", + "VO_kr": "Korea" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Pengaturan Game", + "Graphics_Title": "Pengaturan Grafik", + "Graphics_ResolutionPanel": "Resolusi Game", + "Graphics_Fullscreen": "Layar Penuh", + "Graphics_ExclusiveFullscreen": "Gunakan Layar Penuh Eksklusif", + "Graphics_ExclusiveFullscreen_Help": "Layar Penuh Eksklusif akan menyebabkan freeze random pada game!", + "Graphics_ResSelectPlaceholder": "Pilih", + "Graphics_ResCustom": "Gunakan Resolusi Lainnya", + "Graphics_ResCustomW": "P", + "Graphics_ResCustomH": "T", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Ukuran Render", + "Graphics_ShadowQuality": "Kualitas Bayangan", + "Graphics_VisualFX": "Efek Visual", + "Graphics_SFXQuality": "Kualitas SFX", + "Graphics_EnvDetailQuality": "Detil Environment", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Mode Anti-Aliasing", + "Graphics_VolFogs": "Kabut Volumetric", + "Graphics_ReflectionQuality": "Refleksi", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Detil Kerumunan", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Efek Teammate", + "Graphics_AnisotropicFiltering": "Filter Anisotropic", + "Graphics_SpecPanel": "Pengaturan Grafis Global", + "SpecEnabled": "Aktif", + "SpecDisabled": "Mati", + "SpecVeryLow": "S. Rendah", + "SpecLow": "Rendah", + "SpecMedium": "Sedang", + "SpecHigh": "Tinggi", + "SpecVeryHigh": "S. Tinggi", + "SpecPartiallyOff": "Dimatikan Sebagian", + "ApplyBtn": "Terapkan Pengaturan", + "SettingsApplied": "Perubahan telah disimpan!", + "OverlayNotInstalledTitle": "Anda tidak dapat menggunakan fitur ini dikarenakan game belum dipasang atau perlu diperbaruhi!", + "OverlayNotInstalledSubtitle": "Silahkan download/perbarui game terlebih dahulu pada halaman utama!", + "OverlayGameRunningTitle": "Game Sedang Berjalan!", + "OverlayGameRunningSubtitle": "Mohon tutup game terlebih dahulu untuk menggunakan fitur ini!", + "OverlayFirstTimeTitle": "Anda belum pernah memainkan game ini sebelumnya!", + "OverlayFirstTimeSubtitle": "Mohon jalankan game terlebih dahulu untuk generate file yang dibutuhkan, lalu kembali untuk menggunakan fitur ini.", + "CustomArgs_Title": "Penyesuaian Argument Pemulaian", + "CustomArgs_Subtitle": "Argumen Pemulaian", + "CustomArgs_Footer1": "Untuk informasi lebih lanjut mengenai Argumen Pemulaian, silahkan cek dokumentasi", + "CustomArgs_Footer2": "Unity Standalone Player Command-line", + "CustomArgs_Footer3": "berikut untuk melihat parameter lainnya.", + "Audio_Title": "Pengaturan Audio", + "Audio_Master": "Volume Utama", + "Audio_BGM": "Volume BGM", + "Audio_SFX": "Volume Efek Suara", + "Audio_VO": "Volume Pengisi Suara", + "Audio_Output_Surround": "Gunakan Suara Surround", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Pengaturan Bahasa", + "Language_Help1": "Collapse saat ini tidak dapat men-download paket Audio secara langsung.", + "Language_Help2": "Paket Audio akan di-download di dalam game pada saat game dijalankan.", + "LanguageAudio": "Audio", + "LanguageText": "Text", "VO_en": "Inggris", "VO_cn": "Mandarin", "VO_jp": "Jepang", diff --git a/Hi3Helper.Core/Lang/ja-jp.json b/Hi3Helper.Core/Lang/ja-jp.json index 24dfa4ec6..4288fd8c6 100644 --- a/Hi3Helper.Core/Lang/ja-jp.json +++ b/Hi3Helper.Core/Lang/ja-jp.json @@ -3,16 +3,16 @@ "LanguageID": "ja-JP", "Author": "Vermilion-Shinsha", "_StartupPage": { - "ChooseFolderBtn": "フォルダを選択", + "ChooseFolderBtn": "フォルダーを選択", "ChooseFolderDialogCancel": "キャンセル", "ChooseFolderDialogPrimary": "はい!", - "ChooseFolderDialogSecondary": "別のフォルダを選ぶ", + "ChooseFolderDialogSecondary": "別のフォルダーを選択", "ChooseFolderDialogSubtitle": "デフォルトのインストールディレクトリは次の場所です。:\r\n\r\n{0}\r\n\r\n このディレクトリを使用しますか?", - "ChooseFolderDialogTitle": "フォルダを選択", - "FolderInsufficientPermission": "アクセスが拒否されました!別のフォルダを選択してください。", - "FolderNotSelected": "フォルダが選択されていません。フォルダを選択してください!", - "OverlayPrepareFolderSubtitle": "権限を適用中...", - "OverlayPrepareFolderTitle": "アプリケーションフォルダを準備中", + "ChooseFolderDialogTitle": "フォルダーを選択", + "FolderInsufficientPermission": "アクセスが拒否されました!別のフォルダーを選択してください。", + "FolderNotSelected": "フォルダーが選択されていません。フォルダーを選択してください!", + "OverlayPrepareFolderSubtitle": "権限を適用しています...", + "OverlayPrepareFolderTitle": "アプリフォルダーを準備中", "PageTitle": "はじめに", "Pg1LoadingSubitle1": "サポートされているゲームのリストを準備中...", "Pg1LoadingSubitle2": "完了!次のステップに進みます!", @@ -21,7 +21,7 @@ "Pg2ComboBox": "ゲームの選択", "Pg2ComboBoxRegion": "サーバーの選択", "Pg2NextBtn": "終了 - ランチャーを開始", - "Pg2PrevBtn": "戻る - フォルダを選択", + "Pg2PrevBtn": "戻る - フォルダーを選択", "Pg2Subtitle1_1": "もう少しで", "Pg2Subtitle1_2": "Collapse Launcher", "Pg2Subtitle1_3": "を開始できます。", @@ -35,7 +35,7 @@ "Subtitle2": "Collapseを初めて起動したようですね。", "Subtitle3": "プロジェクトをご利用いただきありがとうございます!設定を完了するには、Collapseのデータを保存する場所を選択してください。", "Subtitle4_1": "最初に、", - "Subtitle4_2": "\"フォルダを選択\"", + "Subtitle4_2": "\"フォルダーを選択\"", "Subtitle4_3": "を押して、ランチャーに必要なデータを保存する場所を選択してください。", "Title1": "Collapse Launcher", "Title2": "へようこそ!" @@ -71,8 +71,11 @@ "RegionLoadingAPITitle2": "ランチャーAPI", "RegionLoadingSubtitleTimeOut": "{0} サーバーの読込がタイムアウトしました。 (> {1}秒)。 再試行中...", "RegionLoadingSubtitleTooLong": "再試行に時間がかかっています...インターネット接続の安定を確認してください!", - "NavCtrlTitleSettings": "アプリ設定", - "NotifNeverAsk": "次回から表示しない" + "NavCtrlTitleSettings": "ランチャー設定", + "NotifNeverAsk": "次回から表示しない", + "NotifNoNewNotifs": "通知はありません", + "NavigationMenu": "メニュー", + "NavigationUtilities": "機能" }, "_HomePage": { "PageTitle": "ランチャー", @@ -91,26 +94,35 @@ "PreloadDownloadNotifbarVerifyTitle": "プリロードパッケージのチェック中", "PreloadDownloadNotifbarSubtitle": "必須パッケージ", "UpdatingVoicePack": "音声パックの更新中...", - "InstallBtn": "インストール", + "InstallBtn": "ゲームをインストール/紐づけ", "UpdateBtn": "アップデート", "PauseDownloadBtn": "一時停止", - "ResumeDownloadBtn": "再開", + "ResumeDownloadBtn": "継続", "PauseCancelDownloadBtn": "一時停止/キャンセル", "PauseCancelBtn": "一時停止/キャンセル", "DownloadBtn": "ダウンロード", "GameSettingsBtn": "クイック設定", "GameSettings_Panel1": "クイック設定", - "GameSettings_Panel1OpenGameFolder": "ゲームフォルダを開く", - "GameSettings_Panel1OpenCacheFolder": "キャッシュフォルダを開く", - "GameSettings_Panel1OpenScreenshotFolder": "スクリーンショットフォルダを開く", + "GameSettings_Panel1OpenGameFolder": "ゲームフォルダーを開く", + "GameSettings_Panel1OpenCacheFolder": "キャッシュフォルダーを開く", + "GameSettings_Panel1OpenScreenshotFolder": "スクショフォルダーを開く", "GameSettings_Panel2": "インストール", "GameSettings_Panel2RepairGame": "修復", "GameSettings_Panel2UninstallGame": "アンインストール", - "GameSettings_Panel2ConvertVersion": "バージョンを変更", + "GameSettings_Panel2ConvertVersion": "リージョンを変更", + "GameSettings_Panel2StopGame": "ゲームを強制終了", "GameSettings_Panel3": "カスタム起動引数", "GameSettings_Panel4": "その他", "GameSettings_Panel4ShowEventsPanel": "イベントパネルを表示", "GameSettings_Panel4ShowSocialMediaPanel": "ソーシャルメディアパネルを表示", + "GamePlaytime_Panel1": "プレイ時間を編集", + "GamePlaytime_Idle_Panel1Hours": "時間", + "GamePlaytime_Idle_Panel1Minutes": "分", + "GamePlaytime_Idle_ResetBtn": "リセット", + "GamePlaytime_Idle_ChangeBtn": "変更", + "GamePlaytime_Idle_InvalidTimeBlock": "無効な値です。", + "GamePlaytime_Running_Info1": "ゲームが実行中なため、プレイ時間を編集できません。", + "GamePlaytime_Running_Info2": "Collapseを完全に閉じると、プレイ時間の記録が中断される(閉じた瞬間までのプレイ時間が記録されます)ことと、Collapseから起動したプレイ時間のみが加算されることに注意してください。", "PostPanel_Events": "イベント", "PostPanel_Notices": "お知らせ", "PostPanel_Info": "インフォメーション", @@ -154,7 +166,7 @@ "RepairBtn2Full": "フルチェック", "RepairBtn2FullDesc": "ファイルのチェックサム/整合性、サイズ、可用性をチェックします。", "RepairBtn2Quick": "クイックチェック", - "RepairBtn2QuickDesc": "この方式はファイルサイズと可用性のみをチェックします。ファイルの整合性をチェックする場合は、フルチェックを使用してください。", + "RepairBtn2QuickDesc": "ファイルサイズと可用性のみをチェックします。ファイルの整合性をチェックしたい場合は、フルチェックを使用してください。", "OverlayNotInstalledTitle": "このサーバーがまだインストールされていないか更新されていないため、この機能は利用できません!", "OverlayNotInstalledSubtitle": "ゲームランチャーページで先にゲームをダウンロード/更新してください!", "OverlayGameRunningTitle": "ゲームが実行中です!", @@ -181,9 +193,9 @@ "CachesBtn1": "キャッシュ更新", "CachesBtn2": "アップデートの確認", "CachesBtn2Full": "フルチェック", - "CachesBtn2FullDesc": "このメソッドはキャッシュのチェックサム/整合性、サイズ、可用性のみをチェックします。ファイルの整合性をチェックしたい場合は\"フルチェック\"を使用してください。", + "CachesBtn2FullDesc": "キャッシュのチェックサム/整合性、サイズ、可用性をチェックします。", "CachesBtn2Quick": "クイックチェック", - "CachesBtn2QuickDesc": "この方式はキャッシュのサイズと可用性のみをチェックします。キャッシュの整合性をチェックしたい場合は\"フルチェック\"を使用してください。", + "CachesBtn2QuickDesc": "キャッシュのサイズと可用性のみをチェックします。キャッシュの整合性をチェックしたい場合はフルチェックを使用してください。", "OverlayNotInstalledTitle": "このサーバーがまだインストールされていないか更新されていないため、この機能は利用できません!", "OverlayNotInstalledSubtitle": "ゲームランチャーページで先にゲームをダウンロード/更新してください!", "OverlayGameRunningTitle": "ゲームが実行中です!", @@ -196,6 +208,7 @@ "PageTitle": "ゲーム設定", "Graphics_Title": "グラフィック", "Graphics_ResolutionPanel": "解像度", + "Graphics_Borderless": "ボーダーレスウィンドウを使用", "Graphics_Fullscreen": "フルスクリーン", "Graphics_ExclusiveFullscreen": "排他的フルスクリーンを使用", "Graphics_ResSelectPlaceholder": "選択", @@ -252,7 +265,7 @@ "SettingsRegImportTitle": "Collapse レジストリ ファイルを選択します...", "SettingsRegErr1": "パスが選択されていません!", "SettingsRegErr2": "Collapse レジストリのヘッダーが正しくありません!", - "RegImportExport": "レジストリのインポート/エクスポート", + "RegImportExport": "レジストリのエクスポート/インポート", "RegExportTitle": "エクスポート", "RegExportTooltip": "レジストリキーをCollapse レジストリファイルにエクスポートします。", "RegImportTitle": "インポート", @@ -266,17 +279,17 @@ "CustomArgs_Title": "カスタム起動引数(高度な設定)", "CustomArgs_Subtitle": "起動引数", "CustomArgs_Footer1": "起動引数の詳細については", - "CustomArgs_Footer2": "Unity Standalone コマンドラインドキュメント", + "CustomArgs_Footer2": "Unity スタンドアロンプレイヤーのコマンドライン引数", "CustomArgs_Footer3": "を参照して、より多くの引数を確認してください。" }, "_SettingsPage": { "PageTitle": "ランチャー設定", "Debug": "デバッグ", "Debug_Console": "コンソールを表示", + "Debug_IncludeGameLogs": "Collapseにゲームログを保存(個人情報も保存される可能性有り)", "Debug_MultipleInstance": "Collapse の多重起動を許可する", - "DiscordRPC_Toggle": "Discordのステータスに表示", "ChangeRegionWarning_Toggle": "サーバー変更時に確認する", - "ChangeRegionWarning_Warning": "*この設定を反映するにはアプリを再起動してください。", + "ChangeRegionWarning_Warning": "*設定の変更を適用するには、ランチャーを再起動してください。", "Language": "言語", "LanguageEntry": "{0} ({1} 提供)", "AppLang_ApplyNeedRestart": "*言語の変更を適用するには、ランチャーを再起動してください。", @@ -291,7 +304,7 @@ "AppCDNRepository": "リポジトリCDN", "AppBG": "背景", "AppBG_Checkbox": "カスタム背景を使用する", - "AppBG_Note": "注: 拡張子は.png, .jpg, .tiff, .bmp、解像度は 4096x4096 以内。", + "AppBG_Note": "注: 拡張子は.png、.jpg、.tiff、.bmp。解像度は4096x4096以内。", "AppThreads": "アプリケーションスレッド", "AppThreads_Download": "ダウンロードスレッド", "AppThreads_Extract": "抽出スレッド", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (自動検出)", "AppThreads_Help5": "このスレッドはゲームのインストール/修復中に解凍/整合性チェック操作を処理します。", "AppThreads_Help6": "注: この設定は、崩壊3rd のインストール中は無効になります。", + "DiscordRPC": "Discordアクティビティステータス", + "DiscordRPC_Toggle": "Discordのステータスに表示", + "DiscordRPC_GameStatusToggle": "今遊んでいるゲームをステータスに表示", "Update": "アップデートの確認", "Update_CurVer": "現在のバージョン:", "Update_CheckBtn": "アップデートをチェック", @@ -308,26 +324,29 @@ "Update_NewVer1": "バージョン", "Update_NewVer2": "に更新できます!", "Update_LatestVer": "最新バージョンです。", - "AppFiles": "ファイル管理", - "AppFiles_OpenDataFolderBtn": "データフォルダを開く", - "AppFiles_RelocateDataFolderBtn": "データフォルダの場所変更", + "AppFiles": "ランチャーのファイル管理", + "AppFiles_OpenDataFolderBtn": "ランチャーのデータフォルダーを開く", + "AppFiles_RelocateDataFolderBtn": "ランチャーのデータフォルダーの場所を変更", "AppFiles_ClearLogBtn": "ログファイルの削除", "AppFiles_ClearImgCachesBtn": "画像ファイルの削除", "ReportIssueBtn": "問題を報告", "ContributePRBtn": "プルリクエストで貢献", + "ContributorListBtn": "コントリビューターリスト", "About": "Collapse Launcherについて", "About_Copyright1": "© 2022-2023 Created by", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Under", - "About_Copyright4": " license. All rights reserved.", + "About_Copyright4": ". All rights reserved.", "Disclaimer": "免責事項", - "Disclaimer1": "このアプリは", + "Disclaimer1": "当ランチャーは", "Disclaimer2": "とは何の関係もありません。", "Disclaimer3": "完全にオープンソースです。どんな貢献も歓迎します。", "DiscordBtn1": "開発者の艦隊Discord(SEA)", "DiscordBtn2": "崩壊3rd公式Discord(GLB)", "DiscordBtn3": "Collapse Launcher公式Discord", - "AppChangeReleaseChannel": "{0} リリースチャンネルに変更" + "AppChangeReleaseChannel": "{0} リリースチャンネルに変更", + "EnableAcrylicEffect": "背景をぼかす", + "EnableDownloadChunksMerging": "分割されたダウンロードパッケージを結合" }, "_Misc": { "UpdateCompleteTitle": "更新が完了しました!", @@ -345,7 +364,7 @@ "Cancel": "キャンセル", "Close": "閉じる", "UseCurrentDir": "現在のディレクトリを使用", - "UseDefaultDir": "デフォルトのディレクトリを使用する", + "UseDefaultDir": "既定のディレクトリを使用", "LocateDir": "ディレクトリ検索", "Okay": "オッケー", "OkaySad": "オッケー ;-;)", @@ -359,7 +378,7 @@ "Yes": "はい", "YesRedownload": "ダウンロード続行", "YesResume": "再開する", - "YesRelocate": "再設定する", + "YesRelocate": "変更する", "YesMigrateIt": "移動する", "YesConvertIt": "変換する", "YesIHaveBeefyPC": "はい、つよつよPCなので!ᕦ(ò_ó)ᕤ", @@ -397,21 +416,35 @@ "BuildChannelPreview": "プレビュー版", "BuildChannelStable": "安定版", "CDNDescription_Github": "ランチャーの公式(メイン)リポジトリ。", + "CDNDescription_Cloudflare": "Cloudflare R2が提供する公式(メイン)リポジトリのミラー。", + "CDNDescription_Bitbucket": "Bitbucketが提供する公式(メイン)リポジトリのミラー。", "CDNDescription_Statically": "Statically が提供する公式(メイン)リポジトリのミラー。GitHubにアクセスできない場所に住んでいる場合に使用してください。", "CDNDescription_jsDelivr": "jsDelivrは、CloudFlare、Fastly、Quantilなどの複数の CDN プロバイダを使用しており、アップタイムとパフォーマンスを最適化します。", - "LocateExecutable": ".exeファイルを指定" + "LocateExecutable": ".exeファイルを指定", + "OpenDownloadPage": "配布サイトを開く", + "DiscordRP_Play": "プレイ", + "DiscordRP_InGame": "ゲーム", + "DiscordRP_Update": "アップデート", + "DiscordRP_Repair": "修復", + "DiscordRP_Cache": "キャッシュ更新", + "DiscordRP_GameSettings": "ゲーム設定", + "DiscordRP_AppSettings": "ランチャー設定", + "DiscordRP_Idle": "待機", + "DiscordRP_Default": "放置", + "DiscordRP_Ad": "- Collapse Launcherから起動", + "DiscordRP_Region": "サーバー:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "警告: デルタ パッチ アップデートが検出されました!", "DeltaPatchDetectedSubtitle": "ゲームを {0} から {1} に更新するために、デルタ パッチが使用されます。\r\n一部のファイルはゲーム内でダウンロードする必要があります。\r\n\r\n続行しますか?", - "DeltaPatchPrevFailedTitle": "以前のデルタパッチが正しく適用されていないか、適用を完了できませんでした!", - "DeltaPatchPrevFailedSubtitle": "以前のデルタパッチの適用に失敗しました。再ダウンロードを防ぐためにゲームを復元しますか?", - "GameConversionPrevFailedTitle": "以前のゲーム変換が失敗したか、完了していません!", - "GameConversionPrevFailedSubtitle": "以前のゲーム変換に失敗しました。再ダウンロードを防ぐためにゲームを復元しますか?", + "DeltaPatchPrevFailedTitle": "前回のデルタパッチが正しく適用されていないか、適用を完了できませんでした!", + "DeltaPatchPrevFailedSubtitle": "前回のデルタパッチの適用に失敗しました。再ダウンロードを防ぐためにゲームを復元しますか?", + "GameConversionPrevFailedTitle": "前回のゲーム変換が失敗したか、完了していません!", + "GameConversionPrevFailedSubtitle": "前回のゲーム変換に失敗しました。再ダウンロードを防ぐためにゲームを復元しますか?", "PreloadVerifiedTitle": "パッケージのプリロードが確認されました!", "PreloadVerifiedSubtitle": "プリロードパッケージが検証され、インストールの準備ができました!", - "LocateInstallTitle": "インストールフォルダの指定", - "LocateInstallSubtitle": "ゲームをインストールする前にゲームの場所を指定しますか?", + "LocateInstallTitle": "インストールフォルダーの指定", + "LocateInstallSubtitle": "ゲームを保存する場所を指定してからダウンロードしますか?", "UnauthorizedDirTitle": "権限のない場所が選択されました", "UnauthorizedDirSubtitle": "書き込み権限がありません:\n\n{0}\n\n別の場所を選択してください!", "ChooseAudioLangSelectPlaceholder": "CV言語を選択してください", @@ -432,8 +465,8 @@ "ExistingInstallBHI3LSubtitle": "ゲームは既に次の場所にインストールされています:\r\n\r\n{0}\r\n\r\nゲームをCollapse Launcherに紐づけすることをお勧めします。\r\nゲームを紐づけしてもBetterHi3Launcherを使用してゲームを開始できます。\r\n\r\n続行しますか?", "ExistingInstallSteamTitle": "Steam版の既存のインストールが検出されました!", "ExistingInstallSteamSubtitle": "ゲームはすでにSteamの次の場所にインストールされています:\r\n\r\n{0}\r\n\r\nこのバージョンをSteam版ではないPC版に変換しますか?\n注:変換するとSteamアカウントでログインできなくなります。miHoYo/HoYoverse通行証ログインのみ選択できます。\r\n\r\n続行しますか?", - "SteamConvertNeedMigrateTitle": "フォルダを移行する必要があります", - "SteamConvertNeedMigrateSubtitle": "Collapseがそのディレクトリに書き込む権限がないため、ゲームのインストールフォルダを別の場所に移動する必要があります。\nCollapseLauncherゲームフォルダに場所を移動することをお勧めしますが、直接場所を選択することもできます。\n\nCollapseLauncherゲームフォルダに移動しますか?", + "SteamConvertNeedMigrateTitle": "フォルダーを移行する必要があります", + "SteamConvertNeedMigrateSubtitle": "Collapseがそのディレクトリに書き込む権限がないため、ゲームのインストール先を別のディレクトリに変更する必要があります。\nCollapseLauncherのゲームフォルダーに場所を移動することをお勧めしますが、直接場所を選択することもできます。\n\nCollapseLauncherのゲームフォルダーに移動しますか?", "SteamConvertIntegrityDoneTitle": "整合性チェックが完了しました!", "SteamConvertIntegrityDoneSubtitle": "ゲームデータの整合性チェックが完了しました。変換プロセスで {0} 個以上のファイルをダウンロードします。\n続行するか、キャンセルして後で再開することができます。\n\n変換プロセスを開始しますか?", "SteamConvertFailedTitle": "変換に失敗しました!", @@ -441,14 +474,14 @@ "InstallDataCorruptTitle": "ゲームのインストールが破損しています", "InstallDataCorruptSubtitle": "ダウンロードしたファイルが破損しています。\r\n\r\nサーバーハッシュ: {0}\r\nダウンロードしたハッシュ: {1}\r\n\r\nファイルを再ダウンロードしますか?", "InstallDataDownloadResumeTitle": "ダウンロードを再開しますか?", - "InstallDataDownloadResumeSubtitle": "以前にゲームの {0}/{1}をダウンロードしました。\r\n\r\nダウンロードを再開しますか?", + "InstallDataDownloadResumeSubtitle": "既にゲームの {0}/{1}がダウンロードされています。\n\n引き続きダウンロードしますか?", "InsufficientDiskTitle": "ディスク容量不足", "InsufficientDiskSubtitle": "空き容量不足のため、{2} ドライブにこのゲームをインストールできません!\r\n\r\n利用可能なスペース: {0}\r\n必要なスペース: {1}.\r\n\r\nインストールする前に十分なディスク容量があることを確認してください。", - "RelocateFolderTitle": "アプリのデータフォルダの場所を変更する", - "RelocateFolderSubtitle": "現在、このフォルダをアプリのデータフォルダとして使用しています:\r\n\r\n {0}\r\n\r\n場所を変更しますか?", + "RelocateFolderTitle": "データフォルダーの場所を変更する", + "RelocateFolderSubtitle": "現在、このフォルダーをランチャーのアプリデータフォルダーに使用しています:\n\n {0}\n\n場所を変更しますか?", "UninstallGameTitle": "ゲームを削除中: {0}", "UninstallGameSubtitle": "次のゲームを削除しようとしています。:\r\n\r\n{0}\r\n\r\n続行しますか?", - "MigrationTitle": "ターゲットフォルダの指定", + "MigrationTitle": "ターゲットフォルダーの指定", "MigrationSubtitle": "移動する前にゲームの場所を指定しますか?", "NeedInstallMediaPackTitle": "Media Feature Packが見つかりません!", "NeedInstallMediaPackSubtitle1": "警告: バージョン5.8以降、崩壊3rdの実行にはPCに \"Media Feature Pack\"をインストールする必要があります。これにより \"Unable to load DLL 'cri_ware_unity'\" エラーが修正されます。\r\n\r\n", @@ -475,9 +508,19 @@ "ReleaseChannelChangeTitle": "リリースチャネルの変更", "ReleaseChannelChangeSubtitle1": "リリースチャネルを次に変更しようとしています:", "ReleaseChannelChangeSubtitle2": "注意:", - "ReleaseChannelChangeSubtitle3": "この操作により、元に戻せない変更や非互換性が発生する可能性があります。", + "ReleaseChannelChangeSubtitle3": "この操作により、元に戻せない変更や非互換性が発生する可能性があります。ゲームデータの消失や破損が発生しても責任を負いかねます。", + "ChangePlaytimeTitle": "本当にプレイ時間を編集しますか?", + "ChangePlaytimeSubtitle": "プレイ時間を編集すると、現在の値が入力した値で上書きされます。\n\n続行しますか?\n\n注: 変更してもCollapseの動作には影響しません。ゲームを起動していない時なら、またいつでも編集できます。", + "ResetPlaytimeTitle": "本当にプレイ時間をリセットしますか?", + "ResetPlaytimeSubtitle": "プレイ時間をリセットすると、記録されたプレイ時間が0になります。これは", + "ResetPlaytimeSubtitle2": "元に戻せない", + "ResetPlaytimeSubtitle3": "変更です。\n\n続行しますか?\n\n注: 変更してもCollapseの動作には影響しません。ゲームを起動していない時なら、またいつでも編集できます。", "LocateExePathTitle": ".exeファイルのパスを指定", - "LocateExePathSubtitle": "ツールの.exeファイルを指定すると、リンクから直接開けるようになります。" + "LocateExePathSubtitle": "ツールの.exeファイルを指定すると、リンクから直接開けるようになります。", + "CannotUseAppLocationForGameDirTitle": "無効なフォルダーです!", + "CannotUseAppLocationForGameDirSubtitle": "選択したフォルダーはシステムフォルダーまたはランチャーの実行ファイルを含むフォルダーのため、使用できません。別のフォルダーを選択してください。", + "StopGameTitle": "ゲームを強制終了します", + "StopGameSubtitle": "本当に起動中のゲームを強制終了しますか?\nゲーム内の進捗の一部が失われる可能性があります。" }, "_InstallMgmt": { "IntegrityCheckTitle": "整合性チェック", @@ -520,8 +563,8 @@ }, "_InstallMigrateSteam": { "PageTitle": "Steam変換", - "Step1Title": "フォルダ権限の確認", - "Step1Subtitle": "フォルダのアクセス許可を確認しています", + "Step1Title": "フォルダー権限の確認", + "Step1Subtitle": "フォルダーのアクセス許可を確認しています", "Step2Title": "ゲームの位置を移動中", "Step2Subtitle1": "移動は5秒後に実行されます。移動タスクを開始するには、管理者権限を許可してください。", "Step2Subtitle2": "実行中...", @@ -596,7 +639,7 @@ "NotifMetadataUpdateBtnCountdown": "メタデータを {0}秒後に更新します。", "NotifMetadataUpdateBtnUpdating": "メタデータを更新しています。お待ちください...", "NotifFirstWelcomeTitle": "Collapseへようこそ!", - "NotifFirstWelcomeSubtitle": "開始するには、下の \"{0}\" ボタンをクリックして、既存のゲームをインストールまたは紐づけする方法を確認してください。", + "NotifFirstWelcomeSubtitle": "最初に、下の \"{0}\" ボタンをクリックして、既存のゲームをインストールまたは紐づけする方法を確認してください。", "NotifFirstWelcomeBtn": "GitHub Wiki にアクセス", "NotifPreviewBuildUsedTitle": "プレビュービルドを使用しています!", "NotifPreviewBuildUsedSubtitle": "現在テスト中のプレビュービルドを使用しています。問題が発生した場合は、下の \"{0}\" ボタンを使用して問題を報告してください。よろしくね!", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "反射品質", "Graphics_BloomQuality": "ブルーム効果", "Graphics_AAMode": "アンチエイリアス", + "Graphics_SFXQuality": "エフェクトのクオリティ", "Graphics_SpecPanel": "画質", "SpecEnabled": "有効", "SpecDisabled": "無効", @@ -644,7 +688,7 @@ "CustomArgs_Title": "カスタム起動引数(高度な設定)", "CustomArgs_Subtitle": "起動引数", "CustomArgs_Footer1": "起動引数の詳細については", - "CustomArgs_Footer2": "Unity Standalone コマンドラインドキュメント", + "CustomArgs_Footer2": "Unity スタンドアロンプレイヤーのコマンドライン引数", "CustomArgs_Footer3": "を参照して、より多くの引数を確認してください。", "Audio_Title": "音声設定", "Audio_Master": "全体音量", @@ -655,8 +699,75 @@ "Language": "言語設定", "Language_Help1": "Collapseには音声パッケージを直接ダウンロードする機能がありません。", "Language_Help2": "音声パッケージはゲームの次回起動時にダウンロードされます。", - "Audio": "キャラボイス", - "Text": "テキスト言語", + "LanguageAudio": "キャラボイス", + "LanguageText": "テキスト言語", + "VO_en": "英語", + "VO_cn": "中国語", + "VO_jp": "日本語", + "VO_kr": "韓国語" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "ゲーム設定", + "Graphics_Title": "画面設定", + "Graphics_ResolutionPanel": "表示モード", + "Graphics_Fullscreen": "フルスクリーン", + "Graphics_ExclusiveFullscreen": "排他的フルスクリーンを使用", + "Graphics_ExclusiveFullscreen_Help": "排他的フルスクリーンを使うとゲームがフリーズすることがあります!", + "Graphics_ResSelectPlaceholder": "選択", + "Graphics_ResCustom": "カスタム解像度を使用", + "Graphics_ResCustomW": "横", + "Graphics_ResCustomH": "縦", + "Graphics_Gamma": "明るさ", + "Graphics_FPS": "フレームレート", + "Graphics_RenderScale": "レンダリング精度", + "Graphics_ShadowQuality": "シャドウ品質", + "Graphics_VisualFX": "視覚効果", + "Graphics_SFXQuality": "SFX品質", + "Graphics_EnvDetailQuality": "シーン細部", + "Graphics_VSync": "垂直同期", + "Graphics_AAMode": "アンチエイリアス", + "Graphics_VolFogs": "ボリュームフォグ", + "Graphics_ReflectionQuality": "反射", + "Graphics_MotionBlur": "モーションブラー", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "人群れの密度", + "Graphics_SubsurfaceScattering": "サブサーフェス・スキャタリング", + "Graphics_TeammateFX": "チームメイトのSFX", + "Graphics_AnisotropicFiltering": "異方性サンプリング", + "Graphics_SpecPanel": "画質", + "SpecEnabled": "ON", + "SpecDisabled": "OFF", + "SpecVeryLow": "最低", + "SpecLow": "低", + "SpecMedium": "中", + "SpecHigh": "高", + "SpecVeryHigh": "最高", + "SpecPartiallyOff": "一部ブロック", + "ApplyBtn": "設定を適用", + "SettingsApplied": "変更が保存されました!", + "OverlayNotInstalledTitle": "このサーバーがまだインストールされていないか更新されていないため、この機能は利用できません!", + "OverlayNotInstalledSubtitle": "ゲームランチャーページで先にゲームをダウンロード/更新してください!", + "OverlayGameRunningTitle": "ゲームが実行中です!", + "OverlayGameRunningSubtitle": "この機能を使用するには、まずゲームを終了してください!", + "OverlayFirstTimeTitle": "このゲームを実行したことがありません!", + "OverlayFirstTimeSubtitle": "まず、ゲームを実行して必要なファイルを生成してください。", + "CustomArgs_Title": "カスタム起動引数(高度な設定)", + "CustomArgs_Subtitle": "起動引数", + "CustomArgs_Footer1": "起動引数の詳細については", + "CustomArgs_Footer2": "Unity スタンドアロンプレイヤーのコマンドライン引数", + "CustomArgs_Footer3": "を参照して、より多くの引数を確認してください。", + "Audio_Title": "音声設定", + "Audio_Master": "メイン音量", + "Audio_BGM": "ミュージック音量", + "Audio_SFX": "効果音音量", + "Audio_VO": "ボイス音量", + "Audio_Output_Surround": "サラウンド出力をON", + "Audio_DynamicRange": "フルダイナミックレンジをON", + "Language": "言語設定", + "Language_Help1": "Collapseには音声パッケージを直接ダウンロードする機能がありません。", + "Language_Help2": "音声パッケージはゲームの次回起動時にダウンロードされます。", + "LanguageAudio": "キャラボイス", + "LanguageText": "ゲーム言語", "VO_en": "英語", "VO_cn": "中国語", "VO_jp": "日本語", diff --git a/Hi3Helper.Core/Lang/ko-KR.json b/Hi3Helper.Core/Lang/ko-KR.json index 3ad75ba5c..f1e7a7713 100644 --- a/Hi3Helper.Core/Lang/ko-KR.json +++ b/Hi3Helper.Core/Lang/ko-KR.json @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "{0} 서버 로딩 시간이 초과되었어요 (> {1}초). 다시 시도하는 중...", "RegionLoadingSubtitleTooLong": "다시 시도하는 데 예상보다 시간이 더 걸리고 있어요. 연결 상태가 안정적인지 확인해 주세요!", "NavCtrlTitleSettings": "앱 설정", - "NotifNeverAsk": "다시 표시하지 않기" + "NotifNeverAsk": "다시 표시하지 않기", + "NotifNoNewNotifs": "No new notifications", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" }, "_HomePage": { "PageTitle": "런처", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "사전 로드 패키지 검사 중", "PreloadDownloadNotifbarSubtitle": "필수 패키지", "UpdatingVoicePack": "음성 팩을 업데이트하는 중...", - "InstallBtn": "게임 설치", + "InstallBtn": "Install/Locate Game", "UpdateBtn": "게임 업데이트", "PauseDownloadBtn": "일시 중지", "ResumeDownloadBtn": "다시 시작", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "게임 복구", "GameSettings_Panel2UninstallGame": "게임 삭제", "GameSettings_Panel2ConvertVersion": "게임 버전 변경", + "GameSettings_Panel2StopGame": "Force Close Game", "GameSettings_Panel3": "사용자 지정 시작 인수", "GameSettings_Panel4": "기타", "GameSettings_Panel4ShowEventsPanel": "이벤트 패널 표시", "GameSettings_Panel4ShowSocialMediaPanel": "소셜 미디어 패널 표시", + "GamePlaytime_Panel1": "Edit Playtime", + "GamePlaytime_Idle_Panel1Hours": "Hours", + "GamePlaytime_Idle_Panel1Minutes": "Minutes", + "GamePlaytime_Idle_ResetBtn": "Reset", + "GamePlaytime_Idle_ChangeBtn": "Change", + "GamePlaytime_Idle_InvalidTimeBlock": "Invalid values provided.", + "GamePlaytime_Running_Info1": "An instance of this game is currently running, therefore playtime can't be edited.", + "GamePlaytime_Running_Info2": "Please be aware that fully closing Collapse will stop playtime tracking (saving what was played until that point) & only sessions started using Collapse will be tracked.", "PostPanel_Events": "이벤트", "PostPanel_Notices": "공지사항", "PostPanel_Info": "소식", @@ -196,6 +208,7 @@ "PageTitle": "게임 설정", "Graphics_Title": "그래픽 설정", "Graphics_ResolutionPanel": "게임 해상도", + "Graphics_Borderless": "Use Borderless Windowed Mode", "Graphics_Fullscreen": "전체 화면", "Graphics_ExclusiveFullscreen": "독점 전체 화면 사용", "Graphics_ResSelectPlaceholder": "선택", @@ -273,8 +286,8 @@ "PageTitle": "앱 설정", "Debug": "디버깅", "Debug_Console": "콘솔 표시", + "Debug_IncludeGameLogs": "Save Game logs to Collapse's (might contain sensitive data)", "Debug_MultipleInstance": "여러 인스턴스에서 실행 허용", - "DiscordRPC_Toggle": "Discord 활동 표시", "ChangeRegionWarning_Toggle": "서버 변경 경고 표시", "ChangeRegionWarning_Warning": "*이 설정을 적용하려면 앱을 다시 시작해야 해요.", "Language": "앱 언어", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (자동 감지)", "AppThreads_Help5": "이 스레드는 게임을 설치/복구하는 동안 압축 해제/무결성 검사 작업을 처리해요.", "AppThreads_Help6": "참고: 이 설정은 더 이상 붕괴3rd 설치와 작동하지 않아요.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Discord 활동 표시", + "DiscordRPC_GameStatusToggle": "Show current game on Discord status", "Update": "업데이트 확인", "Update_CurVer": "현재 버전:", "Update_CheckBtn": "업데이트 확인", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "이미지 파일 삭제", "ReportIssueBtn": "문제 보고", "ContributePRBtn": "기여하기", + "ContributorListBtn": "Open Source Contributors", "About": "정보", "About_Copyright1": "© 2023 Created by", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Under", - "About_Copyright4": " license. All rights reserved.", + "About_Copyright4": ". All rights reserved.", "Disclaimer": "고지사항", "Disclaimer1": "이 앱은", "Disclaimer2": "와 어떠한 관계도 없으며", @@ -327,7 +344,9 @@ "DiscordBtn1": "Armada Discord 참여하기", "DiscordBtn2": "Honkai Impact 3rd Discord 방문하기", "DiscordBtn3": "Collapse's Official Discord!", - "AppChangeReleaseChannel": "{0} 릴리스 채널로 변경" + "AppChangeReleaseChannel": "{0} 릴리스 채널로 변경", + "EnableAcrylicEffect": "Use Acrylic Blur Effect", + "EnableDownloadChunksMerging": "Merge Downloaded Package Chunks" }, "_Misc": { "UpdateCompleteTitle": "업데이트 완료!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "미리 보기", "BuildChannelStable": "안정", "CDNDescription_Github": "런처의 공식 (기본) 저장소", + "CDNDescription_Cloudflare": "A mirror of the official (main) repository hosted in Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "A mirror of the official (main) repository hosted in Bitbucket.", "CDNDescription_Statically": "Statically에서 제공하는 공식 (기본) 저장소의 미러. GitHub에 접속할 수 없는 곳에 살고 있다면 이 미러를 사용하세요.", "CDNDescription_jsDelivr": "jsDelivr는 CloudFlare, Fastly 및 Quantil과 같은 여러 CDN 공급자를 사용하여 최상의 가동 시간 및 성능을 제공해요.", - "LocateExecutable": "Locate Program Executable" + "LocateExecutable": "Locate Program Executable", + "OpenDownloadPage": "Open Download Page", + "DiscordRP_Play": "Playing", + "DiscordRP_InGame": "In Game", + "DiscordRP_Update": "Updating", + "DiscordRP_Repair": "Repairing Game", + "DiscordRP_Cache": "Updating Cache", + "DiscordRP_GameSettings": "Changing Game Settings", + "DiscordRP_AppSettings": "Changing App Settings", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "No Activity", + "DiscordRP_Ad": "- With Collapse Launcher", + "DiscordRP_Region": "Region:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "경고: 델타 패치 업데이트가 감지되었어요!", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "릴리스 채널을 다음으로 변경하려고 해요:", "ReleaseChannelChangeSubtitle2": "참고:", "ReleaseChannelChangeSubtitle3": "이 작업으로 인해 되돌릴 수 없는 변경이나 비호환성이 발생할 수 있어요.", + "ChangePlaytimeTitle": "Are you sure you want to change your playtime?", + "ChangePlaytimeSubtitle": "Changing your playtime means overwriting the current value with the one you just inputted. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "ResetPlaytimeTitle": "Are you sure you want to reset your playtime?", + "ResetPlaytimeSubtitle": "Resetting your playtime means setting the playtime counter back to 0. This is a ", + "ResetPlaytimeSubtitle2": "destructive", + "ResetPlaytimeSubtitle3": " action, meaning that you cannot undo this once you confirm. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", "LocateExePathTitle": "Locate Executable Install Path", - "LocateExePathSubtitle": "Please point Collapse to the location of your application's executable:" + "LocateExePathSubtitle": "Please point Collapse to the location of your application's executable:", + "CannotUseAppLocationForGameDirTitle": "Folder is invalid!", + "CannotUseAppLocationForGameDirSubtitle": "You can't use this folder as it is being used as a system folder or being used for main executable of the app. Please choose another folder!", + "StopGameTitle": "Force Stop Game", + "StopGameSubtitle": "Are you sure you want to force stop current running game?\r\nYou may lose some in-game progress." }, "_InstallMgmt": { "IntegrityCheckTitle": "무결성 검사", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Reflection Quality", "Graphics_BloomQuality": "Bloom Quality", "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_SFXQuality": "SFX Quality", "Graphics_SpecPanel": "Global Graphics Settings", "SpecEnabled": "Enabled", "SpecDisabled": "Disabled", @@ -655,8 +699,75 @@ "Language": "Language Settings", "Language_Help1": "Collapse currently cannot download Audio package directly.", "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", - "Audio": "Audio", - "Text": "Text", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "English", + "VO_cn": "Chinese", + "VO_jp": "Japanese", + "VO_kr": "Korean" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Game Settings", + "Graphics_Title": "Graphics Settings", + "Graphics_ResolutionPanel": "Game Resolution", + "Graphics_Fullscreen": "Fullscreen", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ExclusiveFullscreen_Help": "Exclusive Fullscreen might cause random game freezes!", + "Graphics_ResSelectPlaceholder": "Select", + "Graphics_ResCustom": "Use Custom Resolution", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Render Scale", + "Graphics_ShadowQuality": "Shadow Quality", + "Graphics_VisualFX": "Visual Effects", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_EnvDetailQuality": "Environment Detail", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Reflection", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Crowd Density", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Teammate Effects", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Global Graphics Settings", + "SpecEnabled": "Enabled", + "SpecDisabled": "Disabled", + "SpecVeryLow": "Very Low", + "SpecLow": "Low", + "SpecMedium": "Medium", + "SpecHigh": "High", + "SpecVeryHigh": "Very High", + "SpecPartiallyOff": "Partially Off", + "ApplyBtn": "Apply Settings", + "SettingsApplied": "Changes have been saved!", + "OverlayNotInstalledTitle": "You cannot use this feature as the region isn't installed or needs to be updated!", + "OverlayNotInstalledSubtitle": "Please download/update the game first on the game's launcher page!", + "OverlayGameRunningTitle": "Game is Currently Running!", + "OverlayGameRunningSubtitle": "Please close the game first to use this feature!", + "OverlayFirstTimeTitle": "You have never played this game before!", + "OverlayFirstTimeSubtitle": "Please run the game first to generate the necessary files, then come back here to use this feature.", + "CustomArgs_Title": "Custom Start-up Arguments (Advanced)", + "CustomArgs_Subtitle": "Start-up Arguments", + "CustomArgs_Footer1": "For more information about the Start-up Argument, please check the", + "CustomArgs_Footer2": "Unity Standalone Player command line documentation", + "CustomArgs_Footer3": "to see more parameters.", + "Audio_Title": "Audio Settings", + "Audio_Master": "Master Volume", + "Audio_BGM": "BGM Volume", + "Audio_SFX": "Sound Effects Volume", + "Audio_VO": "Voice Over Volume", + "Audio_Output_Surround": "Use Surround Sound", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Language Settings", + "Language_Help1": "Collapse currently cannot download Audio package directly.", + "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", + "LanguageAudio": "Audio", + "LanguageText": "Text", "VO_en": "English", "VO_cn": "Chinese", "VO_jp": "Japanese", diff --git a/Hi3Helper.Core/Lang/pl-PL.json b/Hi3Helper.Core/Lang/pl-PL.json new file mode 100644 index 000000000..3e211eba2 --- /dev/null +++ b/Hi3Helper.Core/Lang/pl-PL.json @@ -0,0 +1,776 @@ +{ + "LanguageName": "Polish", + "LanguageID": "pl-PL", + "Author": "ribxne", + "_StartupPage": { + "ChooseFolderBtn": "Wybierz folder", + "ChooseFolderDialogCancel": "Anuluj", + "ChooseFolderDialogPrimary": "Tak, proszę!", + "ChooseFolderDialogSecondary": "Nie, wybierz folder", + "ChooseFolderDialogSubtitle": "Domyślny folder instalacji jest ustawiony na:\n\n{0}\n\nCzy chcesz użyć tego folderu?", + "ChooseFolderDialogTitle": "Wybierz folder", + "FolderInsufficientPermission": "Brak uprawnień! Proszę wybrać inny folder.", + "FolderNotSelected": "Nie wybrano folderu. Proszę wybrać folder!", + "OverlayPrepareFolderSubtitle": "Stosowanie uprawnień...", + "OverlayPrepareFolderTitle": "Przygotowuję folder aplikacji", + "PageTitle": "Strona startowa", + "Pg1LoadingSubitle1": "Przygotowuję dla Ciebie listę wspieranych gier...", + "Pg1LoadingSubitle2": "Zakończono! Przechodzę do następnego kroku...", + "Pg1LoadingTitle1": "Wczytuję listę gier...", + "Pg1NextBtn": "Dalej — wybierz grę", + "Pg2ComboBox": "Wybierz grę", + "Pg2ComboBoxRegion": "Wybierz region", + "Pg2NextBtn": "Zakończ — przejdź do launchera", + "Pg2PrevBtn": "Wstecz — Wybierz folder", + "Pg2Subtitle1_1": "Jeszcze jeden krok, aby włączyć grę z", + "Pg2Subtitle1_2": "Collapse Launcher.", + "Pg2Subtitle1_3": "", + "Pg2Subtitle2_1": "Mamy kilka gier", + "Pg2Subtitle2_2": "miHoYo/HoYoverse", + "Pg2Subtitle2_3": "które są wspierane. Wybierz grę poniżej, aby zacząć korzystać z", + "Pg2Subtitle2_4": "Collapse Launcher.", + "Pg2Subtitle2_5": "", + "Pg2Title": "Time to fly~", + "Subtitle1": "Cześć!", + "Subtitle2": "Wygląda na to, że po raz pierwszy używasz tego launchera.", + "Subtitle3": "Dziękujemy za wypróbowanie projektu! Aby wszystko skonfigurować, wybierz miejsce, gdzie chcesz, aby Collapse przechowywał swoje dane.", + "Subtitle4_1": "Aby rozpocząć, kliknij", + "Subtitle4_2": "„Wybierz folder”", + "Subtitle4_3": "aby wybrać gdzie chcesz zainstalować grę.", + "Title1": "Witaj", + "Title2": "w Collapse Launcher" + }, + "_DisconnectedPage": { + "PageTitle": "Rozłączono", + "Header1": "Twój Internet jest", + "Header2": "rozłączony", + "Footer1": "Sprawdź połączenie z Internetem i kliknij", + "Footer2": "Paimon", + "Footer3": "aby spróbować ponownie.", + "ShowErrorBtn": "Pokaż komunikat o błędzie" + }, + "_UnhandledExceptionPage": { + "UnhandledTitle1": "Nieznany błąd", + "UnhandledSubtitle1": "Nieobsłużony wyjątek poniżej:", + "UnhandledTitle2": "Problem z połączeniem", + "UnhandledSubtitle2": "Ups, wygląda na to, że nie masz dostępu do internetu~ A może to coś jeszcze innego?", + "UnhandledTitle3": "Gra przestała działać", + "UnhandledSubtitle3": "Gra uległa awarii z powodu błędu poniżej:", + "CopyClipboardBtn1": "Skopiuj wszystko do schowka", + "CopyClipboardBtn2": "Skopiowano do schowka!", + "GoBackPageBtn1": "Wróć do poprzedniej strony" + }, + "_MainPage": { + "PageTitle": "Strona główna", + "RegionChangeConfirm": "Region gry zostanie zmieniony. Czy chcesz kontynuować?", + "RegionChangeConfirmBtn": "Tak, zmień to!", + "RegionChangeWarnTitle": "Uwaga:", + "RegionChangeWarnExper1": "Gra jest obecnie w {0}.\nUżywaj na własne ryzyko!", + "RegionLoadingTitle": "Ładuję region", + "RegionLoadingAPITitle1": "Ładowanie", + "RegionLoadingAPITitle2": "API Launchera", + "RegionLoadingSubtitleTimeOut": "Przekroczono czas oczekiwania (> {1} sekund). Próbuję ponownie załadować region {0}...", + "RegionLoadingSubtitleTooLong": "To trwa nieco dłużej niż oczekiwano... Upewnij się, że Twoje połączenie internetowe jest stabilne!", + "NavCtrlTitleSettings": "Ustawienia aplikacji", + "NotifNeverAsk": "Nie pokazuj ponownie", + "NotifNoNewNotifs": "Brak nowych powiadomień", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" + }, + "_HomePage": { + "PageTitle": "Launcher", + "PreloadTitle": "Wstępna aktualizacja jest dostępna!", + "PreloadNotifTitle": "Wstępna aktualizacja dla wersji {0} jest dostępna!", + "PreloadNotifDeltaDetectTitle": "Wykryto aktualizacje w formacie delta dla wersji {0}!", + "PreloadNotifSubtitle": "Kliknij \"Pobierz grę\", aby rozpocząć pobieranie w tle.", + "PreloadNotifDeltaDetectSubtitle": "Pomyślnie załadowano aktualizację w formacie delta. Zostanie ona użyta do aktualizacji gry później.", + "PreloadNotifCompleteTitle": "Wstępna aktualizacja została pobrana!", + "PreloadNotifCompleteSubtitle": "Pomyślnie załadowano aktualizację dla wersji {0}!", + "PreloadNotifIntegrityCheckBtn": "Sprawdź integralność pakietu", + "StartBtn": "Rozpocznij grę", + "StartBtnRunning": "Gra jest włączona!", + "VerifyingPkgTitle": "Weryfikowanie pakietu", + "PreloadDownloadNotifbarTitle": "Pobieranie wstępnej aktualizacji", + "PreloadDownloadNotifbarVerifyTitle": "Weryfikowanie wstępnej aktualizacji", + "PreloadDownloadNotifbarSubtitle": "Obowiązkowy pakiet", + "UpdatingVoicePack": "Aktualizowanie pakietu głosowego...", + "InstallBtn": "Zainstaluj/Zlokalizuj grę", + "UpdateBtn": "Zaktualizuj grę", + "PauseDownloadBtn": "Pauza", + "ResumeDownloadBtn": "Wznów", + "PauseCancelDownloadBtn": "Wstrzymaj/Anuluj", + "PauseCancelBtn": "Wstrzymaj/Anuluj", + "DownloadBtn": "Pobierz grę", + "GameSettingsBtn": "Szybkie ustawienia", + "GameSettings_Panel1": "Szybkie ustawienia", + "GameSettings_Panel1OpenGameFolder": "Otwórz folder gry", + "GameSettings_Panel1OpenCacheFolder": "Otwórz folder pamięci podręcznej", + "GameSettings_Panel1OpenScreenshotFolder": "Otwórz folder zrzutów ekranu", + "GameSettings_Panel2": "Instalacja gry", + "GameSettings_Panel2RepairGame": "Napraw Grę", + "GameSettings_Panel2UninstallGame": "Odinstaluj grę", + "GameSettings_Panel2ConvertVersion": "Konwertuj wersję gry", + "GameSettings_Panel2StopGame": "Wymuś zamknięcie gry", + "GameSettings_Panel3": "Niestandardowe argumenty startowe", + "GameSettings_Panel4": "Pozostałe", + "GameSettings_Panel4ShowEventsPanel": "Pokaż panel z wydarzeniami", + "GameSettings_Panel4ShowSocialMediaPanel": "Pokaż panel mediów społecznościowych", + "GamePlaytime_Panel1": "Edytuj czas grania", + "GamePlaytime_Idle_Panel1Hours": "Godziny", + "GamePlaytime_Idle_Panel1Minutes": "Minuty", + "GamePlaytime_Idle_ResetBtn": "Resetuj", + "GamePlaytime_Idle_ChangeBtn": "Zmień", + "GamePlaytime_Idle_InvalidTimeBlock": "Podane wartości są nieprawidłowe.", + "GamePlaytime_Running_Info1": "Instancja tej gry jest aktualnie uruchomiona, dlatego czas gry nie może być edytowany.", + "GamePlaytime_Running_Info2": "Pamiętaj, że pełne zamknięcie Collapse zatrzyma liczenie czasu grania (od momentu zamknięcia) i tylko sesje włączone przez Launcher będą wliczanie.", + "PostPanel_Events": "Wydarzenia", + "PostPanel_Notices": "Powiadomienia", + "PostPanel_Info": "Informacje", + "PostPanel_NoNews": "Jak to?\nBrak wiadomości na dziś?", + "CommunityToolsBtn": "Narzędzia społeczności", + "CommunityToolsBtn_OfficialText": "Oficjalne narzędzia", + "CommunityToolsBtn_CommunityText": "Narzędzia społeczności", + "CommunityToolsBtn_OpenExecutableAppDialogTitle": "Wybierz plik wykonywalny: {0}" + }, + "_GameRepairPage": { + "PageTitle": "Napraw grę", + "ListCol1": "Nazwa", + "ListCol2": "Typ", + "ListCol3": "Źródło", + "ListCol4": "Rozmiar", + "ListCol5": "L.CRC", + "ListCol6": "R.CRC", + "Status1": "Kliknij \"Szybka weryfikacja\" lub \"Pełna weryfikacja\", aby zweryfikować integralność plików gry.", + "Status2": "Ładowanie indeksów...", + "Status3": "{0} plik(ów) może być uszkodzonych ({1} w całości). Kliknij „Napraw grę”, aby rozpocząć naprawę.", + "Status4": "Nie wykryto uszkodzonych plików!", + "Status5": "Sprawdzam blk: {0}", + "Status6": "Sprawdzam: {0}", + "Status7": "Naprawa zakończona!", + "Status8": "Naprawiam: {0}", + "Status9": "Naprawiam blk: {0}", + "Status10": "Naprawiam blk {0} | Offset: 0x{1} - Rozmiar: 0x{2}", + "Status11": "Oczekuję na rozpoczęcie naprawy...", + "Status12": "Aktualizuję dźwięk: {0}", + "Status13": "Aktualizuję blok: {0}", + "StatusNone": "Brak", + "PerProgressTitle1": "Postęp na plik", + "PerProgressSubtitle1": "Czekam...", + "PerProgressSubtitle2": "Postęp: {0}/{1}", + "PerProgressSubtitle3": "Pobieranie: {0}/s", + "PerProgressSubtitle4": "Pobieranie łatki: {0}/{1}", + "PerProgressSubtitle5": "Patchowanie: {0}/s", + "TotalProgressTitle1": "Całkowity postęp", + "RepairBtn1": "Napraw pliki", + "RepairBtn2": "Sprawdź pliki", + "RepairBtn2Full": "Pełne sprawdzenie", + "RepairBtn2FullDesc": "Ten sposób sprawdza sumę kontrolną/integralność, rozmiar i dostępność", + "RepairBtn2Quick": "Szybkie sprawdzenie", + "RepairBtn2QuickDesc": "Ten sposób sprawdza tylko rozmiar i dostępność pliku. Proszę użyć pełnego sprawdzenia, jeśli chcesz sprawdzić integralność plików", + "OverlayNotInstalledTitle": "Nie możesz użyć tej funkcji, ponieważ wybrany region nie jest zainstalowany lub musi zostać zaktualizowany!", + "OverlayNotInstalledSubtitle": "Proszę najpierw pobrać/zaktualizować grę na jej stronie w launcherze!", + "OverlayGameRunningTitle": "Gra jest obecnie uruchomiona!", + "OverlayGameRunningSubtitle": "Proszę zamknąć grę, aby użyć tej funkcji!" + }, + "_CachesPage": { + "PageTitle": "Aktualizacja pamięci podręcznej", + "ListCol1": "Nazwa", + "ListCol2": "Typ", + "ListCol3": "Źródło", + "ListCol4": "Rozmiar", + "ListCol5": "L.CRC", + "ListCol6": "R.CRC", + "ListCol7": "Status", + "Status1": "Kliknij „Szybkie sprawdzenie” lub „Pełne sprawdzenie”, aby sprawdzić aktualizacje pamięci podręcznej", + "CachesStatusHeader1": "Całkowity postęp", + "CachesStatusCancelled": "Operacja została anulowana!", + "CachesStatusFetchingType": "Fetching Caches Type: {0}", + "CachesStatusNeedUpdate": "{0} cache file(s) ({1} in size) can be updated. Click \"Update Caches\" to start updating them.", + "CachesStatusUpToDate": "Pamięć podręczna jest aktualna!", + "CachesStatusChecking": "Sprawdzam {0}: {1}", + "CachesTotalStatusNone": "Brak", + "CachesTotalStatusChecking": "Przetwarzam: {0}/{1}", + "CachesBtn1": "Aktualizuj pamięć podręczną", + "CachesBtn2": "Szybkie sprawdzenie", + "CachesBtn2Full": "Pełne sprawdzenie", + "CachesBtn2FullDesc": "Ten sposób sprawdza tylko rozmiar i dostępność pamięci podręcznej. Proszę użyć pełnego sprawdzenia, jeśli chcesz sprawdzić integralność pamięci podręcznej", + "CachesBtn2Quick": "Szybkie sprawdzenie", + "CachesBtn2QuickDesc": "Ten sposób sprawdza tylko rozmiar i dostępność pamięci podręcznej. Proszę użyć „pełnego sprawdzenia”, jeśli chcesz sprawdzić integralność pamięci podręcznej", + "OverlayNotInstalledTitle": "Nie możesz użyć tej funkcji, ponieważ region nie jest zainstalowany lub musi zostać zaktualizowany!", + "OverlayNotInstalledSubtitle": "Proszę najpierw pobrać/zaktualizować grę na jej stronie w launcherze!", + "OverlayGameRunningTitle": "Gra jest obecnie uruchomiona!", + "OverlayGameRunningSubtitle": "Proszę zamknąć grę, aby użyć tej funkcji!" + }, + "_CutscenesPage": { + "PageTitle": "Przerywniki" + }, + "_GameSettingsPage": { + "PageTitle": "Ustawienia gry", + "Graphics_Title": "Ustawienia graficzne", + "Graphics_ResolutionPanel": "Rozdzielczość", + "Graphics_Borderless": "Use Borderless Windowed Mode", + "Graphics_Fullscreen": "Pełny ekran", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ResSelectPlaceholder": "Wybierz", + "Graphics_ResCustom": "Użyj niestandardowej rozdzielczości", + "Graphics_ResCustomW": "Szerokość", + "Graphics_ResCustomH": "Wysokość", + "Graphics_FPSPanel": "Maksymalna liczba klatek na sekundę", + "Graphics_FPSInCombat": "Podczas walki", + "Graphics_FPSInMenu": "Menu główne", + "Graphics_APIPanel": "Interfejs graficzny", + "Graphics_APIHelp1": "Jest dostępnych kilka trybów interfejsu graficznego dla tej gry, w tym:", + "Graphics_APIHelp2": "Uwaga:", + "Graphics_APIHelp3": "Używanie DirectX 12 może spowodować awarie w niektórych momentach gry, ponieważ gra nie była natywnie skompilowana z interfejsem DirectX 12", + "Graphics_SpecPanel": "Globalne ustawienia graficzne", + "Graphics_Preset": "Graphics Preset", + "Graphics_Render": "Dokładność renderowania", + "Graphics_Shadow": "Jakość cieni", + "Graphics_Reflection": "Jakość odbić", + "Graphics_FX": "Efekty wizualne", + "Graphics_FXPost": "Post Processing", + "Graphics_FXPhysics": "Physics", + "Graphics_FXHDR": "HDR", + "Graphics_FXHQ": "Wysoka jakość", + "Graphics_FXAA": "FXAA", + "Graphics_FXDistort": "Zniekształcenie", + "Graphics_APHO2Panel": "Ustawienia graficzne APHO2 i nowych rozdziałów", + "Graphics_APHO2GI": "Globalne oświetlenie", + "Graphics_APHO2VL": "Oświetlenie wolumetryczne", + "Graphics_APHO2AO": "Ambient Occlusion", + "Graphics_APHO2LOD": "Poziom detali", + "SpecDisabled": "Wyłączone", + "SpecLow": "Niska", + "SpecMedium": "Średnia", + "SpecHigh": "Wysoka", + "SpecVeryHigh": "Bardzo Wysoka", + "SpecMaximum": "Maksymalna", + "Audio_Title": "Ustawienia dźwięku", + "Audio_Master": "Głośność główna", + "Audio_BGM": "Głośność muzyki", + "Audio_SFX": "Głośność efektów dźwiękowych", + "Audio_VOLang": "Język głosu", + "Audio_VOLang1": "Chiński (ChRL)", + "Audio_VOLang2": "Japoński", + "Audio_VODefault": " [Default]", + "Audio_VO": "Głośność dialogów", + "Audio_Elf": "Głośność dźwięków Elfów", + "Audio_Cutscenes": "Głośność przerywników", + "Audio_Mute": "Wycisz dźwięk", + "ApplyBtn": "Zastosuj ustawienia", + "SettingsApplied": "Zmiany zostały zapisane!", + "SettingsRegExported": "Rejestr został wyeksportowany!", + "SettingsRegExportTitle": "Zapisz rejestr Collapse do...", + "SettingsRegImported": "Rejestr został zaimportowany! (Ponowne uruchomienie launchera jest wymagane, aby zastosować zmiany)", + "SettingsRegImportTitle": "Wybierz plik rejestru Collapse...", + "SettingsRegErr1": "Plik nie został wybrany.", + "SettingsRegErr2": "Nagłówek rejestru Collapse jest nieprawidłowy!", + "RegImportExport": "Import/Eksport rejestru", + "RegExportTitle": "Eksportuj", + "RegExportTooltip": "Eksportuj klucze rejestru do pliku rejestru Collapse", + "RegImportTitle": "Importuj", + "RegImportTooltip": "Importuj klucze rejestru z pliku rejestru Collapse", + "OverlayNotInstalledTitle": "Nie możesz użyć tej funkcji, ponieważ region nie jest zainstalowany lub musi zostać zaktualizowany!", + "OverlayNotInstalledSubtitle": "Proszę najpierw pobrać/zaktualizować grę na jej stronie w launcherze!", + "OverlayGameRunningTitle": "Gra jest obecnie uruchomiona!", + "OverlayGameRunningSubtitle": "Proszę zamknąć grę, aby użyć tej funkcji!", + "OverlayFirstTimeTitle": "Gra nie była nigdy włączona!", + "OverlayFirstTimeSubtitle": "Proszę najpierw włączyć grę, aby wygenerować potrzebne pliki, a następnej wróć tutaj, aby użyć tej funkcji.", + "CustomArgs_Title": "Niestandardowe argumenty startowe (zaawansowane)", + "CustomArgs_Subtitle": "Argumenty startowe", + "CustomArgs_Footer1": "Aby dowiedzieć się więcej o argumentach startowych, sprawdź", + "CustomArgs_Footer2": "dokumentacje „Unity Standalone Player”", + "CustomArgs_Footer3": "aby zobaczyć więcej parametrów." + }, + "_SettingsPage": { + "PageTitle": "Ustawienia aplikacji", + "Debug": "Debugowanie", + "Debug_Console": "Pokaż konsolę", + "Debug_IncludeGameLogs": "Zapisz logi gier do logów Collapse (mogą zawierać wrażliwe dane)", + "Debug_MultipleInstance": "Zezwalaj na uruchamianie wielu instancji Collapse", + "ChangeRegionWarning_Toggle": "Pokaż ostrzeżenie o zmianie regionu", + "ChangeRegionWarning_Warning": "*Musisz ponownie uruchomić aplikacje, aby zastosować zmiany.", + "Language": "Język aplikacji", + "LanguageEntry": "{0} przez {1}", + "AppLang_ApplyNeedRestart": "*Musisz ponownie uruchomić aplikacje, aby zastosować zmianę języka.", + "AppThemes": "Motyw aplikacji", + "AppThemes_Default": "Domyślny (Użyj ustawień systemu)", + "AppThemes_Light": "Jasny", + "AppThemes_Dark": "Ciemny", + "AppThemes_ApplyNeedRestart": "*Musisz ponownie uruchomić aplikacje, aby zastosować zmianę motywu.", + "AppWindowSize": "Rozmiar okna", + "AppWindowSize_Normal": "Normalny", + "AppWindowSize_Small": "Mały", + "AppCDNRepository": "Repository CDN", + "AppBG": "Tło aplikacji", + "AppBG_Checkbox": "Użyj niestandardowego tło", + "AppBG_Note": "Uwaga: Obraz musi być w formacie .png, .jpg, .tiff lub .bmp, a rozdzielczość musi być mniejsza niż 4096x4096", + "AppThreads": "Wątki aplikacji", + "AppThreads_Download": "Download Threads", + "AppThreads_Extract": "Extraction Threads", + "AppThreads_Help1": "This thread will handle how many chunks will be split while downloading files. This mechanism behaves in the same way as what IDM and aria2c do.", + "AppThreads_Help2": "Domyślna wartość:", + "AppThreads_Help3": "Zakres wartości:", + "AppThreads_Help4": "0 (Auto wykrywanie)", + "AppThreads_Help5": "Ten wątek obsługuje proces ekstrakcji/weryfikacji podczas instalowania/naprawy gry.", + "AppThreads_Help6": "Uwaga: To ustawienie nie działa podczas instalacji Honkai Impact 3rd.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Show Discord Presence", + "DiscordRPC_GameStatusToggle": "Pokazuj grę w statusie Discord", + "Update": "Sprawdź dostępność aktualizacji", + "Update_CurVer": "Aktualna wersja:", + "Update_CheckBtn": "Sprawdź dostępność aktualizacji", + "Update_ForceBtn": "Wymuś aktualizację", + "Update_NewVer1": "Aktualizacja do", + "Update_NewVer2": "jest dostępna!", + "Update_LatestVer": "Używasz najnowszej wersji.", + "AppFiles": "Zarządzanie plikami aplikacji", + "AppFiles_OpenDataFolderBtn": "Otwórz folder danych aplikacji", + "AppFiles_RelocateDataFolderBtn": "Przenieś folder danych aplikacji", + "AppFiles_ClearLogBtn": "Wyczyść logi", + "AppFiles_ClearImgCachesBtn": "Clear Image Files", + "ReportIssueBtn": "Report an Issue", + "ContributePRBtn": "Contribute with a Pull Request", + "ContributorListBtn": "Open Source Contributors", + "About": "About", + "About_Copyright1": "© 2022-2023 Created by", + "About_Copyright2": " neon-nyan [14372096 SEA]", + "About_Copyright3": "Under", + "About_Copyright4": ". All rights reserved.", + "Disclaimer": "Disclaimer", + "Disclaimer1": "This app is not affiliated with", + "Disclaimer2": "by any means", + "Disclaimer3": "and completely open-sourced. Any contribution is welcomed.", + "DiscordBtn1": "Join our Armada Discord!", + "DiscordBtn2": "Honkai Impact 3rd Discord", + "DiscordBtn3": "Collapse's Official Discord!", + "AppChangeReleaseChannel": "Change to {0} Release Channel", + "EnableAcrylicEffect": "Use Acrylic Blur Effect", + "EnableDownloadChunksMerging": "Merge Downloaded Package Chunks" + }, + "_Misc": { + "UpdateCompleteTitle": "Update Completed!", + "UpdateCompleteSubtitle": "Your launcher version has been updated to {0}! (Release Channel: {1})", + "FeatureUnavailableTitle": "This feature is unavailable at the moment", + "FeatureUnavailableSubtitle": "Please check back later!", + "TimeRemain": "Time Remaining", + "TimeRemainHMSFormat": "{0:%h}h{0:%m}m{0:%s}s left", + "TimeRemainHMSFormatPlaceholder": "--h--m--s left", + "Speed": "Speed: {0}/s", + "SpeedPerSec": "{0}/s", + "SpeedPlaceholder": "Speed: - /s", + "PerFromTo": "{0} / {1}", + "PerFromToPlaceholder": "- / -", + "Cancel": "Cancel", + "Close": "Close", + "UseCurrentDir": "Use current directory", + "UseDefaultDir": "Use default directory", + "LocateDir": "Locate directory", + "Okay": "Okay", + "OkaySad": "Okay ;-;)", + "OkayHappy": "Okay (≧▽≦)ノ", + "OkayBackToMenu": "Okay, back to menu", + "Skip": "Skip", + "Next": "Next", + "Prev": "Previous", + "Uninstall": "Odinstaluj", + "Install": "Zainstaluj", + "Yes": "Tak", + "YesRedownload": "Tak, pobierz ponownie", + "YesResume": "Tak, Wznów", + "YesRelocate": "Tak, Wznów", + "YesMigrateIt": "Tak, migruj", + "YesConvertIt": "Tak, konwertuj", + "YesIHaveBeefyPC": "Tak, mam potężny komputer! ᕦ(ò_ó)ᕤ", + "YesChangeLocation": "Tak, zmień lokalizacje", + "No": "Nie", + "NoStartFromBeginning": "Nie, zacznij od nowa", + "NoCancel": "Nie, anuluj", + "NoKeepInstallIt": "Kontynuuj instalację", + "NoIgnoreIt": "Ignoruj", + "NoOtherLocation": "Kontynuuj instalację", + "NotSelected": "Nie wybrano", + "LangNameENUS": "Angielski (USA)", + "LangNameJP": "Japoński", + "LangNameCN": "Chiński (uproszczony)", + "LangNameKR": "Koreański", + "Downloading": "Pobieranie", + "Merging": "Łączenie", + "Idle": "Idle", + "Change": "Zmień", + "Cancelled": "Anulowano", + "Extracting": "Wypakowywanie", + "Converting": "Konwertowanie", + "Patching": "Patchowanie", + "Verifying": "Weryfikowanie", + "Completed": "Zakończono", + "Skipped": "Pominięto", + "Select": "Wybierz", + "NotRunning": "Nie uruchomiono", + "MovingFile": "Przenoszenie plików", + "CheckingFile": "Sprawdzanie plików", + "RepairingFile": "Naprawianie plików", + "ApplyingPatch": "Stosowanie łatek", + "Disabled": "Wyłączone", + "Enabled": "Enabled", + "BuildChannelPreview": "Preview", + "BuildChannelStable": "Stable", + "CDNDescription_Github": "The official (main) repository for the launcher.", + "CDNDescription_Cloudflare": "A mirror of the official (main) repository hosted in Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "A mirror of the official (main) repository hosted in Bitbucket.", + "CDNDescription_Statically": "A mirror of the official (main) repository, provided by Statically. Use this if you're living in a place where GitHub is inaccessible.", + "CDNDescription_jsDelivr": "jsDelivr uses multiple CDN providers like CloudFlare, Fastly and Quantil, resulting in the best possible uptime and performance.", + "LocateExecutable": "Locate Program Executable", + "OpenDownloadPage": "Open Download Page", + "DiscordRP_Play": "Gra", + "DiscordRP_InGame": "W grze", + "DiscordRP_Update": "Aktualizuję", + "DiscordRP_Repair": "Naprawia grę", + "DiscordRP_Cache": "Aktualizuje pamięć podręczną", + "DiscordRP_GameSettings": "Zmienia ustawienia gry", + "DiscordRP_AppSettings": "Zmienia ustawienia aplikacji", + "DiscordRP_Idle": "Nieaktywny", + "DiscordRP_Default": "Brak aktywności", + "DiscordRP_Ad": "- w Collapse Launcher", + "DiscordRP_Region": "Region:" + }, + "_Dialogs": { + "DeltaPatchDetectedTitle": "Warning: Delta Patch Update is Detected!", + "DeltaPatchDetectedSubtitle": "Delta patch will be used to update your game from {0} to {1}.\r\nRemember that you may still need to download some files in-game.\r\n\r\nDo you wish to proceed?", + "DeltaPatchPrevFailedTitle": "Previous Delta Patch has been incorrectly applied or failed to finish applying!", + "DeltaPatchPrevFailedSubtitle": "The previous Delta Patch failed to apply. Do you want to restore your game to prevent a redownload?", + "GameConversionPrevFailedTitle": "Previous Game Conversion either failed or was not completed!", + "GameConversionPrevFailedSubtitle": "The previous Game Conversion failed. Do you want to restore your game to prevent from redownloading?", + "PreloadVerifiedTitle": "Pre-load Package Verified!", + "PreloadVerifiedSubtitle": "Your pre-load package is verified and ready for installation!", + "LocateInstallTitle": "Locating Installation Folder", + "LocateInstallSubtitle": "Before Installing the Game, Do you want to specify the location of the game?", + "UnauthorizedDirTitle": "Unauthorized Location Chosen", + "UnauthorizedDirSubtitle": "You don't have permission to write in:\n\n{0}\n\nPlease choose another location!", + "ChooseAudioLangSelectPlaceholder": "Select Your Audio Language", + "ChooseAudioLangTitle": "Choose Audio Language", + "ChooseAudioLangSubtitle": "Before installing the game, you need to choose which audio language you want to use (Default: Japanese):", + "AddtDownloadNeededTitle": "Additional Download is Needed", + "AddtDownloadNeededSubtitle": "You must download at least {0} of additional/persistent files. You can also skip this process and download it in-game instead.\nWould you like to download them now?", + "AddtDownloadCompletedTitle": "Additional Download Completed!", + "AddtDownloadCompletedSubtitle": "Additional/Persistent Download has been completed! \nHappy gaming!", + "RepairCompletedTitle": "Repair Process Completed!", + "RepairCompletedSubtitle": "{0} file(s) have been repaired.", + "RepairCompletedSubtitleNoBroken": "No broken files found.", + "ExtremeGraphicsSettingsWarnTitle": "Very High Setting Preset Selected!", + "ExtremeGraphicsSettingsWarnSubtitle": "You are about to set the setting preset to Very High!\r\nVery High setting preset is essentially a 2x Render Scale with MSAA Enabled and is VERY UNOPTIMIZED!\r\n\r\nAre you sure you want to use this setting?", + "ExistingInstallTitle": "Existing Installation Detected!", + "ExistingInstallSubtitle": "Game has already been installed at:\r\n\r\n{0}\r\n\r\nIt is recommended to migrate the game to Collapse Launcher for better support and integration.\r\nRest assured, you can still use Official Launcher to start the game.\r\n\r\nDo you wish to proceed?", + "ExistingInstallBHI3LTitle": "Existing Installation via BetterHI3Launcher Detected!", + "ExistingInstallBHI3LSubtitle": "Game has already been installed at:\r\n\r\n{0}\r\n\r\nIt is recommended to migrate the game to Collapse Launcher for better support and integration.\r\nRest assured, you can still use BetterHi3Launcher to start the game.\r\n\r\nDo you wish to proceed?", + "ExistingInstallSteamTitle": "Existing Installation via Steam Detected!", + "ExistingInstallSteamSubtitle": "Game has already been installed on Steam at:\r\n\r\n{0}\r\n\r\nDo you wish to convert this version to the Non-Steam Global version?\nNote: Once you initiate the conversion, you can no longer log-in with your Steam account. Only the miHoYo/HoYoverse account login method will be available.\r\n\r\nDo you wish to proceed with the conversion and migration?", + "SteamConvertNeedMigrateTitle": "Folder Migration Required", + "SteamConvertNeedMigrateSubtitle": "You need to migrate the game installation folder to another location as Collapse does not have permission to write to that directory.\nIt is recommended to move the location to the CollapseLauncher game folder.\n\nDo you want to move it to the CollapseLauncher game folder?", + "SteamConvertIntegrityDoneTitle": "Integrity Check Complete!", + "SteamConvertIntegrityDoneSubtitle": "Game Data Integrity check complete! The conversion process will download at least {0} of files.\nYou can continue or cancel and come back later.\n\nDo you wish to start the conversion process?", + "SteamConvertFailedTitle": "Conversion Failed!", + "SteamConvertFailedSubtitle": "Conversion process has failed! :(\nPlease try to start the conversion process again.", + "InstallDataCorruptTitle": "Game Installation Corrupted", + "InstallDataCorruptSubtitle": "One of the downloaded file is corrupted.\r\n\r\nServer Hash: {0}\r\nDownloaded Hash: {1}\r\n\r\nDo you want to try and redownload the file?", + "InstallDataDownloadResumeTitle": "Resume Download?", + "InstallDataDownloadResumeSubtitle": "You have downloaded {0}/{1} of the game previously.\r\n\r\nDo you want to resume the download?", + "InsufficientDiskTitle": "Insufficient Disk Space", + "InsufficientDiskSubtitle": "You do not have enough free space to install this game on your {2} drive!\r\n\r\nFree Space: {0}\r\nRequired Space: {1}.\r\n\r\nPlease ensure that you have enough disk space before proceeding with the installation.", + "RelocateFolderTitle": "Relocate App Data Folder", + "RelocateFolderSubtitle": "You are currently using this folder as your App Data Folder:\r\n\r\n {0}\r\n\r\nDo you wish to change its location?", + "UninstallGameTitle": "Uninstalling Game: {0}", + "UninstallGameSubtitle": "You are about to uninstall the game located at:\r\n\r\n{0}\r\n\r\nProceed?", + "MigrationTitle": "Locating Target Folder", + "MigrationSubtitle": "Before migrating, do you wish to specify the location of the game?", + "NeedInstallMediaPackTitle": "Media Feature Pack cannot be found!", + "NeedInstallMediaPackSubtitle1": "WARNING: Starting from the v5.8 update, Honkai Impact 3rd needs the \"Media Feature Pack\" to be installed on your PC in order to run properly. This will fix the \"Unable to load DLL 'cri_ware_unity'\" error in-game.\r\n\r\n", + "NeedInstallMediaPackSubtitle2": "You may need to restart your PC after you've installed the \"Media Feature Pack\". You can safely ignore this warning if you already have it installed or wish to attempt playing Honkai Impact 3rd, but there is a chance that you will get the error while running the game.", + "InstallMediaPackCompleteTitle": "Media Feature Pack has been installed!", + "InstallMediaPackCompleteSubtitle": "Media Feature Pack has been installed on your PC.\r\nPlease restart your PC to apply the patch!", + "InstallingMediaPackTitle": "Installing Media Feature Pack", + "InstallingMediaPackSubtitle": "Waiting until installation is complete...", + "InstallingMediaPackSubtitleFinished": "Finished", + "GameConfigBrokenTitle1": "Game Config Broken", + "GameConfigBrokenSubtitle1": "The Launcher Scope's config is broken. Please choose your previous game path manually.", + "GameConfigBrokenSubtitle2": "\r\nMake sure that the location of the game is not the same as the path of your launcher's \"config.ini\" file, which is found at:\r\n\r\n{0}\r\n\r\n", + "GameConfigBrokenSubtitle3": "If the above is valid, please move all of your game files to another location, then click on \"Locate directory\" to choose the path.", + "CookbookLocateTitle": "Locate Cookbook File", + "CookbookLocateSubtitle1": "Please locate the downloaded Cookbook before starting the process.\r\nIf you haven't downloaded it yet, ", + "CookbookLocateSubtitle2": "CLICK HERE", + "CookbookLocateSubtitle3": " to download the Cookbook file and then click", + "CookbookLocateSubtitle4": "Next", + "CookbookLocateSubtitle5": "to locate the downloaded Cookbook file before continuing.\r\n\r\n", + "CookbookLocateSubtitle6": "Note:\r\n", + "CookbookLocateSubtitle7": "Here is the name of the Cookbook file you need to download:\r\n", + "PrivilegeMustRunTitle": "Collapse requires privilege elevation!", + "PrivilegeMustRunSubtitle": "Collapse requires administrative privileges to function properly. Would you like to restart Collapse and run it as administrator?", + "ReleaseChannelChangeTitle": "Change Release Channel", + "ReleaseChannelChangeSubtitle1": "You are about to change your release channel to:", + "ReleaseChannelChangeSubtitle2": "Note:", + "ReleaseChannelChangeSubtitle3": "This action may cause irreversible changes and/or cause things to break from your current setup. We are not responsible for any loss or corruption of data associated with your game.", + "ChangePlaytimeTitle": "Are you sure you want to change your playtime?", + "ChangePlaytimeSubtitle": "Changing your playtime means overwriting the current value with the one you just inputted. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "ResetPlaytimeTitle": "Are you sure you want to reset your playtime?", + "ResetPlaytimeSubtitle": "Resetting your playtime means setting the playtime counter back to 0. This is a ", + "ResetPlaytimeSubtitle2": "destructive", + "ResetPlaytimeSubtitle3": " action, meaning that you cannot undo this once you confirm. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "LocateExePathTitle": "Locate Executable Install Path", + "LocateExePathSubtitle": "Please point Collapse to the location of your application's executable:", + "CannotUseAppLocationForGameDirTitle": "Folder is invalid!", + "CannotUseAppLocationForGameDirSubtitle": "You can't use this folder as it is being used as a system folder or being used for main executable of the app. Please choose another folder!", + "StopGameTitle": "Force Stop Game", + "StopGameSubtitle": "Are you sure you want to force stop current running game?\r\nYou may lose some in-game progress." + }, + "_InstallMgmt": { + "IntegrityCheckTitle": "Integrity Check", + "PreparePatchTitle": "Preparing Patch", + "AddtDownloadTitle": "Addt. Download: {0}/{1}", + "RepairFilesRequiredShowFilesBtn": "Show list of broken files", + "RepairFilesRequiredTitle": "{0} files need to be repaired!", + "RepairFilesRequiredSubtitle": "You have at least {0} files ({1}) that need to be repaired before updating!\r\n\r\nNote: This process may takes longer than expected (as it depends on the stability and bandwidth of your connection). Consider using a VPN if you have slow download speeds :)" + }, + "_InstallConvert": { + "PageTitle": "Cross-version Conversion", + "Step1Title": "Select Game and Fetching Dependencies", + "Step2Title": "Downloading Recipe", + "Step2Subtitle": "Querying API...", + "Step3Title": "Preparing Ingredients", + "Step3Title1": "Repairing Ingredients", + "Step3Title2": "Verifying Ingredients", + "Step3Subtitle": "Preparing Ingredients", + "Step4Title": "Conversion Task", + "Step4Subtitle": "Starting Conversion...", + "Step5Title": "Post-Conversion Integrity Verification", + "Step5Subtitle": "Waiting for Verification...", + "StepNotRunning": "Not Running", + "PageFooter1": "Please", + "PageFooter2": "DO NOT", + "PageFooter3": "close the launcher while the conversion process is running", + "SelectDialogTitle": "Select Game", + "SelectDialogSource": "Select Source", + "SelectDialogTarget": "Select Target", + "SelectDialogSubtitle": "Note: This conversion will break the integration with the default launcher if you have installed this game by migrating it.\r\n\r\nPlease choose your source and target game to be converted:", + "SelectDialogSubtitleNotInstalled": "Source game not Installed! Please choose another game.", + "ConvertSuccessTitle": "Conversion Successful", + "ConvertSuccessSubtitle": "Game Conversion from {0} to {1} has been successfully completed!", + "CookbookDownloadTitle": "Downloading Recipe", + "CookbookDownloadSubtitle": "Downloading recipe for conversion from {0} to {1}", + "CancelBtn": "Cancel Conversion", + "CancelMsgTitle": "Cancelling Conversion...", + "CancelMsgSubtitle1": "You are about to cancel the conversion process. Any conversion progress will be aborted.\r\n\r\nAre you sure?", + "CancelMsgSubtitle2": "You are about to cancel the conversion process but your game has been already converted to {0}. You'll be skipping the \"Post-Conversion Integrity Verification\" phase.\r\n\r\nAre you sure?" + }, + "_InstallMigrateSteam": { + "PageTitle": "Steam Conversion", + "Step1Title": "Checking Folder Permission", + "Step1Subtitle": "Checking Folder Permission", + "Step2Title": "Migrating Game Location", + "Step2Subtitle1": "Migration process will be running in 5 seconds.", + "Step2Subtitle2": "Running...", + "Step3Title": "Comparing Game Data Integrity for Conversion", + "Step3Subtitle": "Fetching Reference API...", + "Step4Title": "Conversion Task", + "Step4Subtitle": "Waiting for Prompt...", + "Step5Title": "Data Integrity Verification", + "Step5Subtitle": "Fetching Verification API...", + "StepNotRunning": "Not Running", + "PageFooter1": "Please", + "PageFooter2": "DO NOT", + "PageFooter3": "switch to another page or close the launcher while the process is running", + "SelectDialogTitle": "Select Game", + "SelectDialogSource": "Select Source", + "SelectDialogTarget": "Select Target", + "SelectDialogSubtitle": "Note: This conversion will break the integration with default launcher if you have installed this game by migrating it.\r\n\r\nPlease choose your source and target game to be converted:", + "SelectDialogSubtitleNotInstalled": "Source game not installed! Please choose another game.", + "ConvertSuccessTitle": "Conversion Successful", + "ConvertSuccessSubtitle": "Game Conversion from {0} to {1} has been successfully completed!", + "InnerCheckFile": "Checking {0} File [{1}/{2}]: {3}", + "InnerCheckBlock1": "Checking {0}: {1}", + "InnerCheckBlock2": "Checking {0}: {1} -> (0x{2} | S: 0x{3})", + "InnerConvertFile1": "Converting {0} File [{1}/{2}]: {3}", + "InnerConvertFile2": "Downloading {0} [{1}/{2}]: {3}", + "InnerConvertFile3": "Downloading {0} [{1}/{2}]: {3} -> (0x{4} | S: 0x{5})" + }, + "_InstallMigrate": { + "PageTitle": "Game Migration", + "Step1Title": "Process will start in 5 seconds. Please accept the UAC dialog to start the migration process", + "Step2Title": "Migration is in progress. You may see a console window pop up. Please wait until the process is completed", + "Step3Title": "Migration process is done! Returning in a moment...", + "StepCancelledTitle": "Migration canceled! Returning in a moment...", + "PageFooter1": "Please", + "PageFooter2": "DO NOT", + "PageFooter3": "switch to another page or close the launcher while the process is running" + }, + "_UpdatePage": { + "PageTitle1": "UPDATE", + "PageTitle2": "IS AVAILABLE!", + "VerCurLabel": "Current Version:", + "VerNewLabel": "New Version:", + "VerChannelLabel": "Update Channel:", + "VerDateLabel": "Compiled on:", + "ReleaseNote": "Release Notes", + "NeverShowNotification": "Never show again", + "RemindLaterBtn": "Remind me later", + "UpdateNowBtn": "Update Now", + "LoadingRelease": "Acquiring Release Notes...", + "LoadingReleaseFailed": "Error while fetching Release Notes.\r\n{0}", + "UpdateHeader1": "Progress:", + "UpdateHeader2": "Time Elapsed:", + "UpdateHeader3": "Download Size:", + "UpdateHeader4": "Speed:", + "UpdateHeader5PlaceHolder": "Downloading Update [- / -]:", + "UpdateStatus1": "Fetching Update:", + "UpdateMessage1": "Connecting to Update Repository...", + "UpdateStatus2": "Verifying:", + "UpdateStatus3": "Downloading Update [{0} / {1}]:", + "UpdateStatus4": "You're using the latest version ({0}) now!", + "UpdateMessage4": "Returning to game launcher scope shortly...", + "UpdateStatus5": "Version has been updated to {0}!", + "UpdateMessage5": "Your launcher will re-open shortly...", + "UpdateCountdownMessage1": "Your launcher will be updated in {0}...", + "UpdateCountdownMessage2": "(Click", + "UpdateCountdownMessage3": "to abort the countdown)" + }, + "_AppNotification": { + "NotifMetadataUpdateTitle": "Launcher Metadata Update is Available!", + "NotifMetadataUpdateSubtitle": "New metadata for the launcher is available! This process is automatic and is done to ensure that the launcher can properly communicate with the miHoYo/HoYoverse servers. The update will begin shortly!", + "NotifMetadataUpdateBtn": "Update Metadata", + "NotifMetadataUpdateBtnCountdown": "Updating metadata in: {0}", + "NotifMetadataUpdateBtnUpdating": "Updating Metadata, please wait...", + "NotifFirstWelcomeTitle": "Welcome to Collapse!", + "NotifFirstWelcomeSubtitle": "To get started, click the \"{0}\" button below to see how to install or migrate an existing game.", + "NotifFirstWelcomeBtn": "Visit GitHub Wiki", + "NotifPreviewBuildUsedTitle": "You are using a Preview Build!", + "NotifPreviewBuildUsedSubtitle": "You are currently using a [PREVIEW] build, which is still being tested. If you encounter any issues, please report them by using the \"{0}\" button below. Thanks!", + "NotifPreviewBuildUsedBtn": "Submit an Issue" + }, + "_StarRailGameSettingsPage": { + "PageTitle": "Game Settings", + "Graphics_Title": "Graphics Settings", + "Graphics_ResolutionPanel": "Game Resolution", + "Graphics_Fullscreen": "Fullscreen", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ResSelectPlaceholder": "Select", + "Graphics_ResCustom": "Use Custom Resolution", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_FPS": "FPS", + "Graphics_FPS_Help": "120 FPS is EXPERIMENTAL! Please use with caution as Honkai: Star Rail does not officially support this!", + "Graphics_FPS_Help2": "Setting the FPS value to 120 will break the in-game Graphics Settings menu.\r\nIf your menu is broken in-game, use Collapse to change the Game Graphics Settings.", + "Graphics_VSync": "VSync", + "Graphics_RenderScale": "Render Scale", + "Graphics_ResolutionQuality": "Resolution Quality", + "Graphics_ShadowQuality": "Shadow Quality", + "Graphics_LightQuality": "Light Quality", + "Graphics_CharacterQuality": "Character Quality", + "Graphics_EnvDetailQuality": "Environment Detail", + "Graphics_ReflectionQuality": "Reflection Quality", + "Graphics_BloomQuality": "Bloom Quality", + "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_SpecPanel": "Global Graphics Settings", + "SpecEnabled": "Enabled", + "SpecDisabled": "Wyłączone", + "SpecVeryLow": "Very Low", + "SpecLow": "Low", + "SpecMedium": "Medium", + "SpecHigh": "High", + "SpecVeryHigh": "Very High", + "ApplyBtn": "Apply Settings", + "SettingsApplied": "Changes have been saved!", + "OverlayNotInstalledTitle": "You cannot use this feature as the region isn't installed or needs to be updated!", + "OverlayNotInstalledSubtitle": "Please download/update the game first on the game's launcher page!", + "OverlayGameRunningTitle": "Game is Currently Running!", + "OverlayGameRunningSubtitle": "Please close the game first to use this feature!", + "OverlayFirstTimeTitle": "You have never played this game before!", + "OverlayFirstTimeSubtitle": "Please run the game first to generate the necessary files, then come back here to use this feature.", + "CustomArgs_Title": "Custom Start-up Arguments (Advanced)", + "CustomArgs_Subtitle": "Start-up Arguments", + "CustomArgs_Footer1": "For more information about the Start-up Argument, please check the", + "CustomArgs_Footer2": "Unity Standalone Player command line documentation", + "CustomArgs_Footer3": "to see more parameters.", + "Audio_Title": "Audio Settings", + "Audio_Master": "Master Volume", + "Audio_BGM": "BGM Volume", + "Audio_SFX": "Sound Effects Volume", + "Audio_VO": "Voice Over Volume", + "Audio_Mute": "Mute Audio", + "Language": "Language Settings", + "Language_Help1": "Collapse currently cannot download Audio package directly.", + "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "English", + "VO_cn": "Chinese", + "VO_jp": "Japanese", + "VO_kr": "Korean" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Game Settings", + "Graphics_Title": "Graphics Settings", + "Graphics_ResolutionPanel": "Game Resolution", + "Graphics_Fullscreen": "Fullscreen", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ExclusiveFullscreen_Help": "Exclusive Fullscreen might cause random game freezes!", + "Graphics_ResSelectPlaceholder": "Select", + "Graphics_ResCustom": "Use Custom Resolution", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Render Scale", + "Graphics_ShadowQuality": "Shadow Quality", + "Graphics_VisualFX": "Visual Effects", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_EnvDetailQuality": "Environment Detail", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Reflection", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Crowd Density", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Teammate Effects", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Global Graphics Settings", + "SpecEnabled": "Enabled", + "SpecDisabled": "Wyłączone", + "SpecVeryLow": "Very Low", + "SpecLow": "Low", + "SpecMedium": "Medium", + "SpecHigh": "High", + "SpecVeryHigh": "Very High", + "SpecPartiallyOff": "Partially Off", + "ApplyBtn": "Apply Settings", + "SettingsApplied": "Changes have been saved!", + "OverlayNotInstalledTitle": "You cannot use this feature as the region isn't installed or needs to be updated!", + "OverlayNotInstalledSubtitle": "Please download/update the game first on the game's launcher page!", + "OverlayGameRunningTitle": "Game is Currently Running!", + "OverlayGameRunningSubtitle": "Please close the game first to use this feature!", + "OverlayFirstTimeTitle": "You have never played this game before!", + "OverlayFirstTimeSubtitle": "Please run the game first to generate the necessary files, then come back here to use this feature.", + "CustomArgs_Title": "Custom Start-up Arguments (Advanced)", + "CustomArgs_Subtitle": "Start-up Arguments", + "CustomArgs_Footer1": "For more information about the Start-up Argument, please check the", + "CustomArgs_Footer2": "Unity Standalone Player command line documentation", + "CustomArgs_Footer3": "to see more parameters.", + "Audio_Title": "Audio Settings", + "Audio_Master": "Master Volume", + "Audio_BGM": "BGM Volume", + "Audio_SFX": "Sound Effects Volume", + "Audio_VO": "Voice Over Volume", + "Audio_Output_Surround": "Use Surround Sound", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Language Settings", + "Language_Help1": "Collapse currently cannot download Audio package directly.", + "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "English", + "VO_cn": "Chinese", + "VO_jp": "Japanese", + "VO_kr": "Korean" + } +} diff --git a/Hi3Helper.Core/Lang/pt-pt.json b/Hi3Helper.Core/Lang/pt-pt.json index 2aea28618..e65185e79 100644 --- a/Hi3Helper.Core/Lang/pt-pt.json +++ b/Hi3Helper.Core/Lang/pt-pt.json @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "O tempo de carregamento da região {0} passou o esperado (> {1} seconds). Tentando novamente...", "RegionLoadingSubtitleTooLong": "Está a demorar mais do que o esperado. Por favor verifica se a tua conexão é estável.", "NavCtrlTitleSettings": "Definições da aplicação", - "NotifNeverAsk": "Não mostrar novamente" + "NotifNeverAsk": "Não mostrar novamente", + "NotifNoNewNotifs": "No new notifications", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" }, "_HomePage": { "PageTitle": "Launcher", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "A verificar o pré-carregamento", "PreloadDownloadNotifbarSubtitle": "Pacote necessário", "UpdatingVoicePack": "A atualizar pacote de vozes", - "InstallBtn": "Instalar jogo", + "InstallBtn": "Instalar/Localizar jogo", "UpdateBtn": "Atualizar jogo", "PauseDownloadBtn": "Pausar", "ResumeDownloadBtn": "Continuar", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Reparar jogo", "GameSettings_Panel2UninstallGame": "Desinstalar jogo", "GameSettings_Panel2ConvertVersion": "Converter versão", + "GameSettings_Panel2StopGame": "Force Close Game", "GameSettings_Panel3": "Args de inicialização", "GameSettings_Panel4": "Variado", "GameSettings_Panel4ShowEventsPanel": "Exibir painel de eventos", "GameSettings_Panel4ShowSocialMediaPanel": "Exibir painel social", + "GamePlaytime_Panel1": "Editar tempo de jogo", + "GamePlaytime_Idle_Panel1Hours": "Horas", + "GamePlaytime_Idle_Panel1Minutes": "Minutos", + "GamePlaytime_Idle_ResetBtn": "Redefinir", + "GamePlaytime_Idle_ChangeBtn": "Mudar", + "GamePlaytime_Idle_InvalidTimeBlock": "Invalid values provided.", + "GamePlaytime_Running_Info1": "Uma instância deste jogo está aberta, deste modo o tempo de jogo não pode ser editado.", + "GamePlaytime_Running_Info2": "Tem em consideração que o tempo de jogo deixará de ser contado se fechares totalmente o Collapse (salvando o tempo decorrido até este ponto) & apenas sessões iniciadas pelo Collapse irão ser contadas.", "PostPanel_Events": "Eventos", "PostPanel_Notices": "Notícias", "PostPanel_Info": "Info", @@ -196,6 +208,7 @@ "PageTitle": "Definições de jogo", "Graphics_Title": "Definições gráficas", "Graphics_ResolutionPanel": "Resolução", + "Graphics_Borderless": "Use Borderless Windowed Mode", "Graphics_Fullscreen": "Tela cheia", "Graphics_ExclusiveFullscreen": "Usar tela cheia exclusiva", "Graphics_ResSelectPlaceholder": "Selecionar", @@ -273,8 +286,8 @@ "PageTitle": "Definições da aplicação", "Debug": "Depuração", "Debug_Console": "Mostrar consola", + "Debug_IncludeGameLogs": "Save Game logs to Collapse's (might contain sensitive data)", "Debug_MultipleInstance": "Permitir várias instâncias do Collapse", - "DiscordRPC_Toggle": "Mostrar presença no Discord", "ChangeRegionWarning_Toggle": "Mostrar aviso de mudança de região", "ChangeRegionWarning_Warning": "*Tens de reiniciar a aplicação para esta definição entrar em efeito.", "Language": "Idioma", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Auto-detetar)", "AppThreads_Help5": "Este thread é responsável pelo processo de extração/verificação durante a instalação/reparação do jogo.", "AppThreads_Help6": "Nota: Esta opção já não é efetiva ao instalar Honkai Impact 3rd.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Mostrar presença no Discord", + "DiscordRPC_GameStatusToggle": "Show current game on Discord status", "Update": "Atualizações", "Update_CurVer": "Versão atual:", "Update_CheckBtn": "Procurar atualizações", @@ -315,6 +331,7 @@ "AppFiles_ClearImgCachesBtn": "Limpar ficheiros de imagem", "ReportIssueBtn": "Reportar um problema", "ContributePRBtn": "Contribuir com um \"Pull Request\"", + "ContributorListBtn": "Open Source Contributors", "About": "Sobre", "About_Copyright1": "© 2022-2023 Criado por", "About_Copyright2": " neon-nyan [14372096 SEA]", @@ -327,7 +344,9 @@ "DiscordBtn1": "Junta-te ao Discord da nossa Armada", "DiscordBtn2": "Visita o Discord do Honkai Impact 3rd", "DiscordBtn3": "Discord oficial do Collapse!", - "AppChangeReleaseChannel": "Mudar para o canal da lançamento {0}" + "AppChangeReleaseChannel": "Mudar para o canal da lançamento {0}", + "EnableAcrylicEffect": "Use Acrylic Blur Effect", + "EnableDownloadChunksMerging": "Merge Downloaded Package Chunks" }, "_Misc": { "UpdateCompleteTitle": "Atualização Concluída!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Preview", "BuildChannelStable": "Stable", "CDNDescription_Github": "O repositório oficial (principal) do launcher.", + "CDNDescription_Cloudflare": "A mirror of the official (main) repository hosted in Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "A mirror of the official (main) repository hosted in Bitbucket.", "CDNDescription_Statically": "Um mirror do repositório oficial (principal), através da Statically. Usa isto se viveres num sítio onde não é possível acessar o GitHub.", "CDNDescription_jsDelivr": "jsDelivr usa vários provedores de CDN como a CloudFlare, a Fastly e a Quantil, o que resulta na melhor disponibilide e performance possível.", - "LocateExecutable": "Localizar executável" + "LocateExecutable": "Localizar executável", + "OpenDownloadPage": "Open Download Page", + "DiscordRP_Play": "Playing", + "DiscordRP_InGame": "In Game", + "DiscordRP_Update": "Updating", + "DiscordRP_Repair": "Repairing Game", + "DiscordRP_Cache": "Updating Cache", + "DiscordRP_GameSettings": "Changing Game Settings", + "DiscordRP_AppSettings": "Changing App Settings", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "No Activity", + "DiscordRP_Ad": "- With Collapse Launcher", + "DiscordRP_Region": "Region:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Aviso: atualização Delta detetada!", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Estás prestes a mudar o teu canal de lançamentos para:", "ReleaseChannelChangeSubtitle2": "Nota:", "ReleaseChannelChangeSubtitle3": "Esta ação poderá causar mudanças irreversíveis e/ou estragar elementos da tua configuração atual. Não nos responsabilizamos por qualquer perda ou corrupção de dados associados com o jogo.", + "ChangePlaytimeTitle": "Are you sure you want to change your playtime?", + "ChangePlaytimeSubtitle": "Changing your playtime means overwriting the current value with the one you just inputted. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "ResetPlaytimeTitle": "Tens a certeza que queres redefinir o teu tempo de jogo?", + "ResetPlaytimeSubtitle": "Redefinir o teu tempo de jogo significa que o contador voltará ao 0. Isto é uma ação ", + "ResetPlaytimeSubtitle2": "destrutiva", + "ResetPlaytimeSubtitle3": " , o que significa que não podes voltar atrás após confirmares.\n\nQueres continuar?\n\nNota: Isto não impacta o modo como o Collapse opera e podes mudar este valor novamente a qualquer momento deste que o jogo não esteja aberto.", "LocateExePathTitle": "Localizar caminho de instalação do executável", - "LocateExePathSubtitle": "Indica a localização do executável da aplicação:" + "LocateExePathSubtitle": "Indica a localização do executável da aplicação:", + "CannotUseAppLocationForGameDirTitle": "Folder is invalid!", + "CannotUseAppLocationForGameDirSubtitle": "You can't use this folder as it is being used as a system folder or being used for main executable of the app. Please choose another folder!", + "StopGameTitle": "Force Stop Game", + "StopGameSubtitle": "Are you sure you want to force stop current running game?\r\nYou may lose some in-game progress." }, "_InstallMgmt": { "IntegrityCheckTitle": "Verificação de integridade", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Qualidade das reflexões", "Graphics_BloomQuality": "Qualidade do bloom", "Graphics_AAMode": "Modo de anti-aliasing", + "Graphics_SFXQuality": "SFX Quality", "Graphics_SpecPanel": "Definições gráficas globais", "SpecEnabled": "Ativado", "SpecDisabled": "Desativado", @@ -655,8 +699,75 @@ "Language": "Definições de idioma", "Language_Help1": "O Collapse não consegue baixar pacotes de áudio diretamente.", "Language_Help2": "Pacotes de áudio irão ser baixados na próxima vez que iniciares o jogo.", - "Audio": "Áudio", - "Text": "Texto", + "LanguageAudio": "Áudio", + "LanguageText": "Texto", + "VO_en": "Inglês", + "VO_cn": "Chinês", + "VO_jp": "Japonês", + "VO_kr": "Coreano" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Definições de jogo", + "Graphics_Title": "Definições gráficas", + "Graphics_ResolutionPanel": "Resolução", + "Graphics_Fullscreen": "Tela cheia", + "Graphics_ExclusiveFullscreen": "Usar tela cheia exclusiva", + "Graphics_ExclusiveFullscreen_Help": "Exclusive Fullscreen might cause random game freezes!", + "Graphics_ResSelectPlaceholder": "Selecionar", + "Graphics_ResCustom": "Usar resolução customizada", + "Graphics_ResCustomW": "L", + "Graphics_ResCustomH": "A", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Escala de renderização", + "Graphics_ShadowQuality": "Qualidade das sombras", + "Graphics_VisualFX": "Visual Effects", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_EnvDetailQuality": "Detalhe do ambiente", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Modo de anti-aliasing", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Reflection", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Crowd Density", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Teammate Effects", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Definições gráficas globais", + "SpecEnabled": "Ativado", + "SpecDisabled": "Desativado", + "SpecVeryLow": "Muito baixo", + "SpecLow": "Baixo", + "SpecMedium": "Médio", + "SpecHigh": "Alto", + "SpecVeryHigh": "Muito alto", + "SpecPartiallyOff": "Parcialmente desligado", + "ApplyBtn": "Aplicar alterações", + "SettingsApplied": "Alterações guardadas!", + "OverlayNotInstalledTitle": "Não podes usar esta funcionalidade dado que a região ainda não está instalada ou precisa de ser atualizada!", + "OverlayNotInstalledSubtitle": "Por favor descarrega/atualiza o jogo primeiro na página principal!", + "OverlayGameRunningTitle": "Jogo está a correr!", + "OverlayGameRunningSubtitle": "Fecha o jogo primeiro antes de usares esta funcionalidade!", + "OverlayFirstTimeTitle": "Ainda não jogaste pela primeira vez!", + "OverlayFirstTimeSubtitle": "Abre o jogo primeiro de modo a gerar os ficheiros necessários e volta mais tarde para usar esta funcionalidade.", + "CustomArgs_Title": "Argumentos de inicialização customizados (Avançado)", + "CustomArgs_Subtitle": "Argumentos de inicialização", + "CustomArgs_Footer1": "Para mais informações sobre argumentos de inicialização, consulta a", + "CustomArgs_Footer2": "Unity Standalone Command-line documentation (em Inglês)", + "CustomArgs_Footer3": "para ver mais parâmetros.", + "Audio_Title": "Definições de áudio", + "Audio_Master": "Volume principal", + "Audio_BGM": "Volume da BGM", + "Audio_SFX": "Volume dos efeitos sonoros", + "Audio_VO": "Nível de destaque das vozes", + "Audio_Output_Surround": "Use Surround Sound", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Definições de idioma", + "Language_Help1": "O Collapse não consegue baixar pacotes de áudio diretamente.", + "Language_Help2": "Pacotes de áudio irão ser baixados na próxima vez que iniciares o jogo.", + "LanguageAudio": "Áudio", + "LanguageText": "Texto", "VO_en": "Inglês", "VO_cn": "Chinês", "VO_jp": "Japonês", diff --git a/Hi3Helper.Core/Lang/ru-RU.json b/Hi3Helper.Core/Lang/ru-RU.json index 774c993ff..bb626bd9d 100644 --- a/Hi3Helper.Core/Lang/ru-RU.json +++ b/Hi3Helper.Core/Lang/ru-RU.json @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "Таймаут действия (> {1} секунд). Попытка повторной загрузки региона {0}...", "RegionLoadingSubtitleTooLong": "Это занимает немного больше времени, чем ожидалось... Пожалуйста, убедитесь, что Ваше подключение к интернету стабильно!", "NavCtrlTitleSettings": "Настройки приложения", - "NotifNeverAsk": "Больше не показывать" + "NotifNeverAsk": "Больше не показывать", + "NotifNoNewNotifs": "No new notifications", + "NavigationMenu": "Menu", + "NavigationUtilities": "Utilities" }, "_HomePage": { "PageTitle": "Лаунчер", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "Проверка пакета предзагрузки", "PreloadDownloadNotifbarSubtitle": "Обязательный пакет", "UpdatingVoicePack": "Обновление пакета озвучки...", - "InstallBtn": "Установить игру", + "InstallBtn": "Install/Locate Game", "UpdateBtn": "Обновить игру", "PauseDownloadBtn": "Пауза", "ResumeDownloadBtn": "Возобновить", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Восстановить игру", "GameSettings_Panel2UninstallGame": "Удалить игру", "GameSettings_Panel2ConvertVersion": "Изменить версию игры", + "GameSettings_Panel2StopGame": "Force Close Game", "GameSettings_Panel3": "Пользовательские команды запуска", "GameSettings_Panel4": "Разное", "GameSettings_Panel4ShowEventsPanel": "Показать панель событий", "GameSettings_Panel4ShowSocialMediaPanel": "Показать панель соцсетей", + "GamePlaytime_Panel1": "Edit Playtime", + "GamePlaytime_Idle_Panel1Hours": "Hours", + "GamePlaytime_Idle_Panel1Minutes": "Minutes", + "GamePlaytime_Idle_ResetBtn": "Reset", + "GamePlaytime_Idle_ChangeBtn": "Change", + "GamePlaytime_Idle_InvalidTimeBlock": "Invalid values provided.", + "GamePlaytime_Running_Info1": "An instance of this game is currently running, therefore playtime can't be edited.", + "GamePlaytime_Running_Info2": "Please be aware that fully closing Collapse will stop playtime tracking (saving what was played until that point) & only sessions started using Collapse will be tracked.", "PostPanel_Events": "События", "PostPanel_Notices": "Примечания", "PostPanel_Info": "Информация", @@ -196,6 +208,7 @@ "PageTitle": "Настройки игры", "Graphics_Title": "Настройки графики", "Graphics_ResolutionPanel": "Разрешение экрана", + "Graphics_Borderless": "Use Borderless Windowed Mode", "Graphics_Fullscreen": "Полноэкранный режим (в окне)", "Graphics_ExclusiveFullscreen": "Использовать полноэкранный режим", "Graphics_ResSelectPlaceholder": "Выбрать", @@ -273,8 +286,8 @@ "PageTitle": "Настройки приложения", "Debug": "Отладка", "Debug_Console": "Показать консоль", + "Debug_IncludeGameLogs": "Save Game logs to Collapse's (might contain sensitive data)", "Debug_MultipleInstance": "Разрешить запуск нескольких лаунчеров Collapse", - "DiscordRPC_Toggle": "Показывать статус в Discord", "ChangeRegionWarning_Toggle": "Показывать предупреждение об изменении региона", "ChangeRegionWarning_Warning": "*Чтобы изменение настройки вступило в силу, необходимо перезапустить приложение.", "Language": "Язык приложения", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Автоопределение)", "AppThreads_Help5": "Этот поток будет обрабатывать процесс извлечения/верификации во время установки/ремонта игры.", "AppThreads_Help6": "Примечание: Эта настройка во время установки Honkai Impact 3rd больше неэффективна.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Показывать статус в Discord", + "DiscordRPC_GameStatusToggle": "Show current game on Discord status", "Update": "Проверить наличие обновлений", "Update_CurVer": "Текущая версия:", "Update_CheckBtn": "Проверить наличие обновлений", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "Очистить файлы изображений", "ReportIssueBtn": "Сообщить о проблеме", "ContributePRBtn": "Внести свой вклад, сделав Pull Request", + "ContributorListBtn": "Open Source Contributors", "About": "О программе", "About_Copyright1": "© 2022-2023 создано", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "защищённый", - "About_Copyright4": " лицензией. Все права защищены.", + "About_Copyright4": ". All rights reserved.", "Disclaimer": "Дисклеймер", "Disclaimer1": "Это приложение не ассоциировано с", "Disclaimer2": "любым способом", @@ -327,7 +344,9 @@ "DiscordBtn1": "Присоединяйтесь к нам в Discord!", "DiscordBtn2": "Honkai Impact 3rd Discord", "DiscordBtn3": "Официальный Discord сервер Collapse!", - "AppChangeReleaseChannel": "Изменить на {0} канал релиза" + "AppChangeReleaseChannel": "Изменить на {0} канал релиза", + "EnableAcrylicEffect": "Use Acrylic Blur Effect", + "EnableDownloadChunksMerging": "Merge Downloaded Package Chunks" }, "_Misc": { "UpdateCompleteTitle": "Обновление завершено!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Предпросмотр", "BuildChannelStable": "Стабильная", "CDNDescription_Github": "Официальный (основной) репозиторий лаунчера.", + "CDNDescription_Cloudflare": "A mirror of the official (main) repository hosted in Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "A mirror of the official (main) repository hosted in Bitbucket.", "CDNDescription_Statically": "Зеркало официального (основного) репозитория, предоставленное Statically. Используйте это, если Вы живете в месте, где GitHub недоступен.", "CDNDescription_jsDelivr": "jsDelivr использует несколько CDN провайдеров таких как CloudFlare, Fastly и Quantil, что приводит к лучшему возможному аптайму и производительности.", - "LocateExecutable": "Указать путь к исполняемому файлу программы" + "LocateExecutable": "Указать путь к исполняемому файлу программы", + "OpenDownloadPage": "Open Download Page", + "DiscordRP_Play": "Playing", + "DiscordRP_InGame": "In Game", + "DiscordRP_Update": "Updating", + "DiscordRP_Repair": "Repairing Game", + "DiscordRP_Cache": "Updating Cache", + "DiscordRP_GameSettings": "Changing Game Settings", + "DiscordRP_AppSettings": "Changing App Settings", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "No Activity", + "DiscordRP_Ad": "- With Collapse Launcher", + "DiscordRP_Region": "Region:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Внимание: Обнаружено обновление Delta Patch!", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Вы собираетесь изменить канал релиза на:", "ReleaseChannelChangeSubtitle2": "Примечание:", "ReleaseChannelChangeSubtitle3": "Это действие может привести к необратимым изменениям и/или нарушить работу вашей текущей установки. Мы не несем ответственность за потерю или повреждение данных, связанных с игрой.", + "ChangePlaytimeTitle": "Are you sure you want to change your playtime?", + "ChangePlaytimeSubtitle": "Changing your playtime means overwriting the current value with the one you just inputted. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", + "ResetPlaytimeTitle": "Are you sure you want to reset your playtime?", + "ResetPlaytimeSubtitle": "Resetting your playtime means setting the playtime counter back to 0. This is a ", + "ResetPlaytimeSubtitle2": "destructive", + "ResetPlaytimeSubtitle3": " action, meaning that you cannot undo this once you confirm. \n\nDo you wish to proceed?\n\nNote: This has no impact on how Collapse operates and you can change this value again at any time when not playing the game.", "LocateExePathTitle": "Указать путь к исполняемому файлу установщика", - "LocateExePathSubtitle": "Пожалуйста, укажите Collapse директорию исполняемого файла Вашего приложения:" + "LocateExePathSubtitle": "Пожалуйста, укажите Collapse директорию исполняемого файла Вашего приложения:", + "CannotUseAppLocationForGameDirTitle": "Folder is invalid!", + "CannotUseAppLocationForGameDirSubtitle": "You can't use this folder as it is being used as a system folder or being used for main executable of the app. Please choose another folder!", + "StopGameTitle": "Force Stop Game", + "StopGameSubtitle": "Are you sure you want to force stop current running game?\r\nYou may lose some in-game progress." }, "_InstallMgmt": { "IntegrityCheckTitle": "Проверка целостности", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Качество отражений", "Graphics_BloomQuality": "Качество растительности", "Graphics_AAMode": "Режим сглаживания", + "Graphics_SFXQuality": "SFX Quality", "Graphics_SpecPanel": "Общие настройки графики", "SpecEnabled": "Включено", "SpecDisabled": "Выключено", @@ -655,11 +699,78 @@ "Language": "Настройки языка", "Language_Help1": "В данный момент Collapse не может загружать аудио пакеты напрямую.", "Language_Help2": "Аудио пакет будет загружен при следующем запуске во время игры.", - "Audio": "Озвучка", - "Text": "Интерфейс", + "LanguageAudio": "Audio", + "LanguageText": "Text", "VO_en": "Английский", "VO_cn": "Китайский", "VO_jp": "Японский", "VO_kr": "Корейский" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Game Settings", + "Graphics_Title": "Graphics Settings", + "Graphics_ResolutionPanel": "Game Resolution", + "Graphics_Fullscreen": "Fullscreen", + "Graphics_ExclusiveFullscreen": "Use Exclusive Fullscreen", + "Graphics_ExclusiveFullscreen_Help": "Exclusive Fullscreen might cause random game freezes!", + "Graphics_ResSelectPlaceholder": "Select", + "Graphics_ResCustom": "Use Custom Resolution", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Render Scale", + "Graphics_ShadowQuality": "Shadow Quality", + "Graphics_VisualFX": "Visual Effects", + "Graphics_SFXQuality": "SFX Quality", + "Graphics_EnvDetailQuality": "Environment Detail", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Anti-Aliasing Mode", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Reflection", + "Graphics_MotionBlur": "Motion Blur", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Crowd Density", + "Graphics_SubsurfaceScattering": "Subsurface Scattering", + "Graphics_TeammateFX": "Teammate Effects", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Global Graphics Settings", + "SpecEnabled": "Enabled", + "SpecDisabled": "Disabled", + "SpecVeryLow": "Very Low", + "SpecLow": "Low", + "SpecMedium": "Medium", + "SpecHigh": "High", + "SpecVeryHigh": "Very High", + "SpecPartiallyOff": "Partially Off", + "ApplyBtn": "Apply Settings", + "SettingsApplied": "Changes have been saved!", + "OverlayNotInstalledTitle": "You cannot use this feature as the region isn't installed or needs to be updated!", + "OverlayNotInstalledSubtitle": "Please download/update the game first on the game's launcher page!", + "OverlayGameRunningTitle": "Game is Currently Running!", + "OverlayGameRunningSubtitle": "Please close the game first to use this feature!", + "OverlayFirstTimeTitle": "You have never played this game before!", + "OverlayFirstTimeSubtitle": "Please run the game first to generate the necessary files, then come back here to use this feature.", + "CustomArgs_Title": "Custom Start-up Arguments (Advanced)", + "CustomArgs_Subtitle": "Start-up Arguments", + "CustomArgs_Footer1": "For more information about the Start-up Argument, please check the", + "CustomArgs_Footer2": "Unity Standalone Player command line documentation", + "CustomArgs_Footer3": "to see more parameters.", + "Audio_Title": "Audio Settings", + "Audio_Master": "Master Volume", + "Audio_BGM": "BGM Volume", + "Audio_SFX": "Sound Effects Volume", + "Audio_VO": "Voice Over Volume", + "Audio_Output_Surround": "Use Surround Sound", + "Audio_DynamicRange": "Full Dynamic Range", + "Language": "Language Settings", + "Language_Help1": "Collapse currently cannot download Audio package directly.", + "Language_Help2": "Audio package will be downloaded in-game next time you launch the game.", + "LanguageAudio": "Audio", + "LanguageText": "Text", + "VO_en": "English", + "VO_cn": "Chinese", + "VO_jp": "Japanese", + "VO_kr": "Korean" } } diff --git a/Hi3Helper.Core/Lang/vi-vn.json b/Hi3Helper.Core/Lang/vi-vn.json index 49889b97e..f266bb9a0 100644 --- a/Hi3Helper.Core/Lang/vi-vn.json +++ b/Hi3Helper.Core/Lang/vi-vn.json @@ -72,7 +72,10 @@ "RegionLoadingSubtitleTimeOut": "Server đang tải {0} đã quá hạn (> {1} giây). Đang thử lại...", "RegionLoadingSubtitleTooLong": "Lần thử lại sẽ lâu hơn dự kiến. Hãy đảm bảo rằng mạng của bạn vẫn đang kết nối ổn định!", "NavCtrlTitleSettings": "Cài đặt trình khởi chạy", - "NotifNeverAsk": "Không hiển thị lại" + "NotifNeverAsk": "Không hiển thị lại", + "NotifNoNewNotifs": "Không có thông báo mới", + "NavigationMenu": "Menu", + "NavigationUtilities": "Tiện ích" }, "_HomePage": { "PageTitle": "Trình khởi chạy", @@ -91,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "Đang xác minh gói tải trước", "PreloadDownloadNotifbarSubtitle": "Gói bắt buộc", "UpdatingVoicePack": "Đang cập nhật gói lồng tiếng...", - "InstallBtn": "Cài đặt trò chơi", + "InstallBtn": "Cài đặt/Vị trí trò chơi", "UpdateBtn": "Cập nhật trò chơi", "PauseDownloadBtn": "Tạm dừng", "ResumeDownloadBtn": "Tiếp tục", @@ -107,10 +110,19 @@ "GameSettings_Panel2RepairGame": "Sửa trò chơi", "GameSettings_Panel2UninstallGame": "Gỡ cài đặt trò chơi", "GameSettings_Panel2ConvertVersion": "Chuyển đổi phiên bản", + "GameSettings_Panel2StopGame": "Buộc đóng trò chơi", "GameSettings_Panel3": "Tuỳ chọn khởi động cho trò chơi", "GameSettings_Panel4": "Cài đặt khác", "GameSettings_Panel4ShowEventsPanel": "Hiển thị bảng sự kiện", "GameSettings_Panel4ShowSocialMediaPanel": "Hiển thị bảng mạng xã hội", + "GamePlaytime_Panel1": "Chỉnh sửa thời gian chơi", + "GamePlaytime_Idle_Panel1Hours": "Giờ", + "GamePlaytime_Idle_Panel1Minutes": "Phút", + "GamePlaytime_Idle_ResetBtn": "Đặt lại", + "GamePlaytime_Idle_ChangeBtn": "Thay đổi", + "GamePlaytime_Idle_InvalidTimeBlock": "Giá trị được cung cấp không hợp lệ.", + "GamePlaytime_Running_Info1": "Tiến trình của trò chơi này hiện đang chạy, do đó không thể chỉnh sửa thời gian chơi.", + "GamePlaytime_Running_Info2": "Xin lưu ý rằng việc đóng hoàn toàn Collapse sẽ ngừng theo dõi thời gian chơi (lưu thời gian chơi cho đến thời điểm đó) và chỉ khi Collapse được mở lại mới tiếp tục theo dõi thời gian chơi.", "PostPanel_Events": "Sự kiện", "PostPanel_Notices": "Thông báo", "PostPanel_Info": "Thông tin", @@ -118,7 +130,7 @@ "CommunityToolsBtn": "Công cụ cộng đồng", "CommunityToolsBtn_OfficialText": "Công cụ chính thức", "CommunityToolsBtn_CommunityText": "Công cụ cộng đồng", - "CommunityToolsBtn_OpenExecutableAppDialogTitle": "Select Program Executable: {0}" + "CommunityToolsBtn_OpenExecutableAppDialogTitle": "Chọn chương trình có thể thực thi: {0}" }, "_GameRepairPage": { "PageTitle": "Sửa trò chơi", @@ -196,6 +208,7 @@ "PageTitle": "Cài đặt trò chơi", "Graphics_Title": "Đồ hoạ", "Graphics_ResolutionPanel": "Độ phân giải", + "Graphics_Borderless": "Sử dụng Chế độ cửa sổ không viền", "Graphics_Fullscreen": "Toàn màn hình", "Graphics_ExclusiveFullscreen": "Toàn màn hình với độ phân giải đã chọn", "Graphics_ResSelectPlaceholder": "Chọn", @@ -273,8 +286,8 @@ "PageTitle": "Cài đặt trình khởi chạy", "Debug": "Gỡ lỗi", "Debug_Console": "Hiển thị console (cmd)", + "Debug_IncludeGameLogs": "Lưu nhật ký trò chơi vào Collapse (có thể chứa dữ liệu nhạy cảm)", "Debug_MultipleInstance": "Cho phép chạy nhiều phiên bản Collapse", - "DiscordRPC_Toggle": "Hiện Trạng Thái Chi Tiết trên Discord", "ChangeRegionWarning_Toggle": "Hiện thông báo Thay Đổi Lục Địa", "ChangeRegionWarning_Warning": "*Bạn cần phải khởi động lại ứng dụng để áp dụng cài đặt này.", "Language": "Ngôn ngữ", @@ -301,6 +314,9 @@ "AppThreads_Help4": "0 (Tự động)", "AppThreads_Help5": "Tuỳ chọn này sẽ giới hạn số tệp để giải nén/xác thực tài nguyên khi tải/sửa tài nguyên trò chơi.", "AppThreads_Help6": "Lưu ý: Tuỳ chọn này không có tác dụng với Honkai Impact 3rd.", + "DiscordRPC": "Discord Rich Presence", + "DiscordRPC_Toggle": "Hiện Trạng Thái Chi Tiết trên Discord", + "DiscordRPC_GameStatusToggle": "Hiện trò chơi hiện tại trên trạng thái của Discord", "Update": "Cập nhật", "Update_CurVer": "Phiên bản hiện tại:", "Update_CheckBtn": "Kiểm tra cập nhật", @@ -315,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "Xoá tệp ảnh đĩa", "ReportIssueBtn": "Báo lỗi", "ContributePRBtn": "Đóng góp", + "ContributorListBtn": "Người đóng góp mã nguồn mở", "About": "Về chúng tôi", "About_Copyright1": "© 2023 Được tạo bởi", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Được dùng bởi bản quyền của", - "About_Copyright4": ". Đã đăng ký bản quyền.", + "About_Copyright4": ". Đã đăng ký Bản quyền.", "Disclaimer": "Trách nhiệm và pháp lí", "Disclaimer1": "trình khởi chạy này không thuộc về", "Disclaimer2": "với bất kì điều nào", @@ -327,7 +344,9 @@ "DiscordBtn1": "Tham gia Armada Discord của chúng tôi", "DiscordBtn2": "Xem qua Discord Honkai Impact 3rd", "DiscordBtn3": "Discord Chính thức của Collapse!", - "AppChangeReleaseChannel": "Thay đổi tới {0} kênh phát hành" + "AppChangeReleaseChannel": "Thay đổi tới {0} kênh phát hành", + "EnableAcrylicEffect": "Dùng Hiệu Ứng Acrylic Blur", + "EnableDownloadChunksMerging": "Hợp nhất các gói đã tải xuống" }, "_Misc": { "UpdateCompleteTitle": "Cập nhật hoàn tất!", @@ -397,9 +416,23 @@ "BuildChannelPreview": "Xem trước", "BuildChannelStable": "Ổn định", "CDNDescription_Github": "Kho lưu trữ chính thức của trình khởi động.", + "CDNDescription_Cloudflare": "Bản sao của repository (main) được lưu trữ trên Cloudflare R2 bucket.", + "CDNDescription_Bitbucket": "Bản sao của repository (main) được lưu trữ trên Bitbucket.", "CDNDescription_Statically": "Một nhánh khác của kho lưu trữ chính thức, được cung cấp bởi Statically. Sử dụng nó nếu nơi ở của bạn không thể truy cập vào Github.", "CDNDescription_jsDelivr": "jsDelivr sử dụng nhiều CDN được cung cấp sẵn như CloudFlare, Fastly và Quantil, dẫn đến thời gian hoạt động và hiệu suất tốt nhất có thể.", - "LocateExecutable": "Locate Program Executable" + "LocateExecutable": "Chọn vị trí chương trình có thể thực thi", + "OpenDownloadPage": "Mở trang Tải xuống", + "DiscordRP_Play": "Đang chơi", + "DiscordRP_InGame": "Đang trong trò chơi", + "DiscordRP_Update": "Đang cập nhật", + "DiscordRP_Repair": "Đang sửa trò chơi", + "DiscordRP_Cache": "Đang cập nhật bộ nhớ cache", + "DiscordRP_GameSettings": "Đang thay đổi cài đặt trò chơi", + "DiscordRP_AppSettings": "Đang thay đổi cài đặt ứng dụng", + "DiscordRP_Idle": "Idle", + "DiscordRP_Default": "Không hoạt động", + "DiscordRP_Ad": "- Với Collapse Launcher", + "DiscordRP_Region": "Khu vực:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "Cảnh báo: Có bản cập nhật bản vá tạm thời!", @@ -476,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "Bạn đang thay đổi kênh phát hành của bạn tới:", "ReleaseChannelChangeSubtitle2": "Lưu ý:", "ReleaseChannelChangeSubtitle3": "Hành động này có thể làm thay đổi/khiến mọi thứ bị hỏng so với thiết lập hiện tại của bạn. Chúng tôi không chịu trách nhiệm về bất kỳ mất mát hoặc hư hỏng dữ liệu nào liên quan đến trò chơi của bạn.", - "LocateExePathTitle": "Locate Executable Install Path", - "LocateExePathSubtitle": "Please point Collapse to the location of your application's executable:" + "ChangePlaytimeTitle": "Bạn có chắc chắn muốn thay đổi thời gian chơi của mình không?", + "ChangePlaytimeSubtitle": "Thay đổi thời gian chơi của bạn có nghĩa là ghi đè giá trị hiện tại bằng giá trị bạn vừa nhập.\n\nBạn có muốn tiếp tục?\n\nLưu ý: Điều này không ảnh hưởng đến cách Collapse hoạt động và bạn có thể thay đổi lại giá trị này bất kỳ lúc nào khi không chơi trò chơi.", + "ResetPlaytimeTitle": "Bạn có chắc muốn đặt lại thời gian chơi?", + "ResetPlaytimeSubtitle": "Đặt lại thời gian chơi của bạn có nghĩa là đặt bộ đếm thời gian phát về 0. Đây là ", + "ResetPlaytimeSubtitle2": "phá hoại", + "ResetPlaytimeSubtitle3": " hành động, nghĩa là bạn không thể hoàn tác thao tác này sau khi đã xác nhận. \n\nBạn có muốn tiếp tục?\n\nLưu ý: Điều này không ảnh hưởng đến cách Collapse hoạt động và bạn có thể thay đổi lại giá trị này bất kỳ lúc nào khi không chơi trò chơi.", + "LocateExePathTitle": "Xác định vị trí đường dẫn cài đặt thực thi", + "LocateExePathSubtitle": "Vui lòng chỉ Collapse tới vị trí thực thi của ứng dụng của bạn:", + "CannotUseAppLocationForGameDirTitle": "Thư mục không hợp lệ!", + "CannotUseAppLocationForGameDirSubtitle": "Bạn không thể sử dụng thư mục này vì nó đang được sử dụng làm thư mục hệ thống hoặc được sử dụng để thực thi chính của ứng dụng. Vui lòng chọn thư mục khác!", + "StopGameTitle": "Buộc dừng trò chơi", + "StopGameSubtitle": "Bạn có chắc chắn muốn buộc dừng trò chơi đang chạy hiện tại không?\nBạn có thể mất một số tiến trình trong trò chơi." }, "_InstallMgmt": { "IntegrityCheckTitle": "Kiểm tra tính toàn vẹn", @@ -625,6 +668,7 @@ "Graphics_ReflectionQuality": "Chất lượng phản chiếu", "Graphics_BloomQuality": "Hiệu ứng toả sáng", "Graphics_AAMode": "Khử răng cưa", + "Graphics_SFXQuality": "Chất lượng SFX", "Graphics_SpecPanel": "Thiết lập đồ hoạ", "SpecEnabled": "Bật", "SpecDisabled": "Tắt", @@ -652,11 +696,78 @@ "Audio_SFX": "Âm lượng hiệu ứng", "Audio_VO": "Âm lượng lồng tiếng", "Audio_Mute": "Tắt tiếng", - "Language": "Language Settings", + "Language": "Cài đặt ngôn ngữ", + "Language_Help1": "Collapse hiện không thể tải trực tiếp gói ngôn ngữ.", + "Language_Help2": "Gói ngôn ngữ sẽ được tải xuống trong lần tới bạn khởi động trò chơi.", + "LanguageAudio": "Âm thanh", + "LanguageText": "Văn bản", + "VO_en": "Tiếng Anh", + "VO_cn": "Tiếng Trung", + "VO_jp": "Tiếng Nhật", + "VO_kr": "Tiếng Hàn" + }, + "_GenshinGameSettingsPage": { + "PageTitle": "Cài đặt trò chơi", + "Graphics_Title": "Cài đặt đồ hoạ", + "Graphics_ResolutionPanel": "Độ phân giải trò chơi", + "Graphics_Fullscreen": "Toàn màn hình", + "Graphics_ExclusiveFullscreen": "Dùng chế độ toàn màn hình độc quyền", + "Graphics_ExclusiveFullscreen_Help": "Chế độ toàn màn hình độc quyền có thể gây ra hiện tượng đơ game ngẫu nhiên!", + "Graphics_ResSelectPlaceholder": "Chọn", + "Graphics_ResCustom": "Dùng độ phân giải tùy chỉnh", + "Graphics_ResCustomW": "W", + "Graphics_ResCustomH": "H", + "Graphics_Gamma": "Gamma", + "Graphics_FPS": "FPS", + "Graphics_RenderScale": "Mức độ kết xuất", + "Graphics_ShadowQuality": "Chất lượng bóng đổ", + "Graphics_VisualFX": "Hiệu ứng hình ảnh", + "Graphics_SFXQuality": "Chất lượng SFX", + "Graphics_EnvDetailQuality": "Chi tiết môi trường", + "Graphics_VSync": "VSync", + "Graphics_AAMode": "Chế độ khử răng cưa", + "Graphics_VolFogs": "Volumetric Fogs", + "Graphics_ReflectionQuality": "Phản Chiếu", + "Graphics_MotionBlur": "Làm mờ chuyển động", + "Graphics_BloomQuality": "Bloom", + "Graphics_CrowdDensity": "Mật độ đám đông", + "Graphics_SubsurfaceScattering": "Tán xạ bề mặt phụ", + "Graphics_TeammateFX": "Hiệu ứng của đồng đội", + "Graphics_AnisotropicFiltering": "Anisotropic Filtering", + "Graphics_SpecPanel": "Cài đặt đồ hoạ chung", + "SpecEnabled": "Bật", + "SpecDisabled": "Tắt", + "SpecVeryLow": "Rất thấp", + "SpecLow": "Thấp", + "SpecMedium": "Trung bình", + "SpecHigh": "Cao", + "SpecVeryHigh": "Rất cao", + "SpecPartiallyOff": "Tắt Một Phần", + "ApplyBtn": "Áp dụng cài đặt", + "SettingsApplied": "Các thay đổi đã được lưu!", + "OverlayNotInstalledTitle": "Bạn không thể sử dụng tính năng này vì chưa được cài đặt hoặc cần được cập nhật!", + "OverlayNotInstalledSubtitle": "Vui lòng tải xuống/cập nhật trò chơi trước trên trang trình khởi động của trò chơi!", + "OverlayGameRunningTitle": "Trò chơi hiện tại đang chạy!", + "OverlayGameRunningSubtitle": "Vui lòng đóng trò chơi trước để sử dụng tính năng này!", + "OverlayFirstTimeTitle": "Bạn chưa từng chơi trò chơi này trước đó!", + "OverlayFirstTimeSubtitle": "Vui lòng chạy trò chơi trước để tạo các tệp cần thiết, sau đó hãy quay lại đây để sử dụng tính năng này.", + "CustomArgs_Title": "Tùy chọn khởi động tùy chỉnh (Nâng cao)", + "CustomArgs_Subtitle": "Tùy chọn khởi động", + "CustomArgs_Footer1": "Để biết thêm thông tin về tùy chọn khởi động, vui lòng xem tại", + "CustomArgs_Footer2": "Tùy chọn dòng lệnh cho Unity Standalone Player", + "CustomArgs_Footer3": "để xem nhiều tham số hơn.", + "Audio_Title": "Cài đặt âm thanh", + "Audio_Master": "Âm lượng chung", + "Audio_BGM": "Âm lượng nhạc", + "Audio_SFX": "Âm lượng hiệu ứng", + "Audio_VO": "Âm lượng lồng tiếng", + "Audio_Output_Surround": "Âm thanh vòm", + "Audio_DynamicRange": "Đầy Đủ Dynamic Range", + "Language": "Cài Đặt Ngôn Ngữ", "Language_Help1": "Collapse hiện không thể tải trực tiếp gói ngôn ngữ.", "Language_Help2": "Gói ngôn ngữ sẽ được tải xuống trong lần tới bạn khởi động trò chơi.", - "Audio": "Audio", - "Text": "Text", + "LanguageAudio": "Âm thanh", + "LanguageText": "Văn bản", "VO_en": "Tiếng Anh", "VO_cn": "Tiếng Trung", "VO_jp": "Tiếng Nhật", diff --git a/Hi3Helper.Core/Lang/zh-TW.json b/Hi3Helper.Core/Lang/zh-TW.json index 73e74d0e7..98c561c53 100644 --- a/Hi3Helper.Core/Lang/zh-TW.json +++ b/Hi3Helper.Core/Lang/zh-TW.json @@ -1,20 +1,20 @@ { "LanguageName": "繁體中文", "LanguageID": "zh-TW", - "Author": "Seria Ati, xTaiwanPingLord", + "Author": "Seria Ati", "_StartupPage": { "ChooseFolderBtn": "選擇資料夾", "ChooseFolderDialogCancel": "取消", "ChooseFolderDialogPrimary": "是的!", "ChooseFolderDialogSecondary": "不,另行選擇資料夾", - "ChooseFolderDialogSubtitle": "當前的預設安裝資料夾為:\n\n{0}\n\n您想要使用這個資料夾嗎?", + "ChooseFolderDialogSubtitle": "當前的預設安裝資料夾為:\n\n{0}\n\n你想要使用這個資料夾嗎?", "ChooseFolderDialogTitle": "選擇資料夾", "FolderInsufficientPermission": "存取遭拒!請另行選擇其他資料夾。", "FolderNotSelected": "尚未選擇資料夾。請選擇一個資料夾!", "OverlayPrepareFolderSubtitle": "應用權限中…", "OverlayPrepareFolderTitle": "正在準備應用程式資料夾", "PageTitle": "首次啟動頁面", - "Pg1LoadingSubitle1": "正在為您準備一份已支持遊戲的列表…", + "Pg1LoadingSubitle1": "正在為你準備一份已支持遊戲的列表…", "Pg1LoadingSubitle2": "完成!正在前往下個步驟…", "Pg1LoadingTitle1": "正在載入遊戲清單…", "Pg1NextBtn": "下一步 - 選擇遊戲", @@ -32,7 +32,7 @@ "Pg2Subtitle2_5": "", "Pg2Title": "準備起飛~", "Subtitle1": "嗨!", - "Subtitle2": "看來您是第一次使用這個啟動器。", + "Subtitle2": "看來你是第一次使用這個啟動器。", "Subtitle3": "感謝嘗試這個專案!為了完成設定,請選擇一個用於儲存啟動器檔案的資料夾。", "Subtitle4_1": "如需開始,請點擊下方的", "Subtitle4_2": "「選擇資料夾」", @@ -42,9 +42,9 @@ }, "_DisconnectedPage": { "PageTitle": "連線中斷", - "Header1": "您的網路連線", + "Header1": "你的網路連線", "Header2": "已中斷", - "Footer1": "請檢查您的網路連線並點擊", + "Footer1": "請檢查你的網路連線並點擊", "Footer2": "派蒙", "Footer3": "來重試。", "ShowErrorBtn": "顯示錯誤訊息" @@ -53,7 +53,7 @@ "UnhandledTitle1": "未處理的錯誤", "UnhandledSubtitle1": "一個未經處理的錯誤發生了,以下是該異常的拋出例外:", "UnhandledTitle2": "連接錯誤", - "UnhandledSubtitle2": "哎呀,您的網路連線似乎斷開了~也有可能是其他原因?", + "UnhandledSubtitle2": "哎呀,你的網路連線似乎斷開了~也有可能是其他原因?", "UnhandledTitle3": "遊戲崩潰", "UnhandledSubtitle3": "遊戲已崩潰,錯誤訊息如下:", "CopyClipboardBtn1": "複製所有內容到剪貼簿", @@ -62,18 +62,20 @@ }, "_MainPage": { "PageTitle": "主頁面", - "RegionChangeConfirm": "將更改遊戲區域。是否繼續?", - "RegionChangeConfirmBtn": "是,請更改!", + "RegionChangeConfirm": "將更換遊戲區域。是否繼續?", + "RegionChangeConfirmBtn": "是,請更換!", "RegionChangeWarnTitle": "警告:", "RegionChangeWarnExper1": "遊戲區域目前在{0}。\n請自行承擔風險!", "RegionLoadingTitle": "正在加載區域", "RegionLoadingAPITitle1": "載入中", "RegionLoadingAPITitle2": "啟動器 API", "RegionLoadingSubtitleTimeOut": "操作逾時(> {1} 秒)。正在嘗試重新加載區域 {0}…", - "RegionLoadingSubtitleTooLong": "這比預期中的還要久… 請確認您的網際網路連線是穩定的!", - "NavCtrlTitleSettings": "應用程式設定", + "RegionLoadingSubtitleTooLong": "這比預期中的還要久… 請確認你的網際網路連線是穩定的!", + "NavCtrlTitleSettings": "應用設定", "NotifNeverAsk": "不再顯示", - "NotifNoNewNotifs": "沒有新的通知" + "NotifNoNewNotifs": "沒有新的通知", + "NavigationMenu": "目錄", + "NavigationUtilities": "工具箱" }, "_HomePage": { "PageTitle": "啟動器", @@ -81,18 +83,18 @@ "PreloadNotifTitle": "v{0} 的預載檔案可提供下載!", "PreloadNotifDeltaDetectTitle": "檢測到 v{0} 的 Delta-Patch 格式的預載包!", "PreloadNotifSubtitle": "點擊「下載遊戲」以開始在後台下載。", - "PreloadNotifDeltaDetectSubtitle": "您已成功以 Delta-Path 格式預載補丁。這個預載格式將會在您稍後更新遊戲時被使用。", + "PreloadNotifDeltaDetectSubtitle": "你已成功以 Delta-Path 格式預載了個補釘。這個預載格式將會在你稍後更新遊戲時被使用。", "PreloadNotifCompleteTitle": "預載包已下載!", - "PreloadNotifCompleteSubtitle": "您已成功預載了 v{0} 的預載包!", + "PreloadNotifCompleteSubtitle": "你已成功預載了 v{0} 的預載包!", "PreloadNotifIntegrityCheckBtn": "驗證預載包的完整性", "StartBtn": "開始遊戲", - "StartBtnRunning": "遊戲執行中!", + "StartBtnRunning": "遊戲運行中!", "VerifyingPkgTitle": "正在驗證軟體包", "PreloadDownloadNotifbarTitle": "正在下載預載包", "PreloadDownloadNotifbarVerifyTitle": "正在驗證預載包", "PreloadDownloadNotifbarSubtitle": "必要軟體包", "UpdatingVoicePack": "正在更新語音包…", - "InstallBtn": "安裝遊戲", + "InstallBtn": "安裝/定位遊戲", "UpdateBtn": "更新遊戲", "PauseDownloadBtn": "暫停", "ResumeDownloadBtn": "繼續", @@ -108,10 +110,19 @@ "GameSettings_Panel2RepairGame": "遊戲修復", "GameSettings_Panel2UninstallGame": "解除安裝遊戲", "GameSettings_Panel2ConvertVersion": "轉換遊戲版本", + "GameSettings_Panel2StopGame": "強制關閉遊戲", "GameSettings_Panel3": "自定義啟動參數", "GameSettings_Panel4": "雜項", "GameSettings_Panel4ShowEventsPanel": "顯示活動面板", "GameSettings_Panel4ShowSocialMediaPanel": "顯示社交媒體面板", + "GamePlaytime_Panel1": "編輯遊玩時數", + "GamePlaytime_Idle_Panel1Hours": "時", + "GamePlaytime_Idle_Panel1Minutes": "分", + "GamePlaytime_Idle_ResetBtn": "重置", + "GamePlaytime_Idle_ChangeBtn": "更改", + "GamePlaytime_Idle_InvalidTimeBlock": "提供了無效的值。", + "GamePlaytime_Running_Info1": "此遊戲的一個實例正在運行當中,因此其遊玩時數不可被更改。", + "GamePlaytime_Running_Info2": "請注意,完全關閉 Collapse 將停止遊玩時數追蹤(遊玩至當前的時數會被儲存),且只有由 Collapse 啟動的遊戲實例會被追蹤遊玩時數。", "PostPanel_Events": "活動", "PostPanel_Notices": "公告", "PostPanel_Info": "資訊", @@ -131,7 +142,7 @@ "ListCol6": "R.CRC", "Status1": "點擊「快速檢查」或「完整檢查」來驗證遊戲檔案的完整性。", "Status2": "正在載入索引…", - "Status3": "{0} 個檔案可能已損壞(共 {1} 個)。點擊「修復遊戲」以開始修復作業。", + "Status3": "{0} 個檔案可能已損壞(共 {1} )。點擊「修復遊戲」以開始修復作業。", "Status4": "沒有檢測到已損壞的文件!", "Status5": "正在檢查 Blk:{0}", "Status6": "正在檢查:{0}", @@ -156,9 +167,9 @@ "RepairBtn2FullDesc": "此方法將檢查檔案的完整性、大小、及可用性", "RepairBtn2Quick": "快速檢查", "RepairBtn2QuickDesc": "此方法只會檢查檔案的大小和可用性。如欲檢查檔案的完整性,請使用「完整檢查」。", - "OverlayNotInstalledTitle": "由於當前選擇的區域尚未安裝或需要更新,您無法使用此功能!", + "OverlayNotInstalledTitle": "由於當前選擇的區域尚未安裝或需要更新,你無法使用此功能!", "OverlayNotInstalledSubtitle": "請先在遊戲啟動器頁面下載/更新遊戲!", - "OverlayGameRunningTitle": "遊戲正在執行!", + "OverlayGameRunningTitle": "遊戲正在運行!", "OverlayGameRunningSubtitle": "請先關閉遊戲以使用此功能!" }, "_CachesPage": { @@ -173,7 +184,7 @@ "Status1": "點擊「快速檢查」或「完整檢查」以檢查快取的更新情況", "CachesStatusHeader1": "總進度", "CachesStatusCancelled": "操作已被取消!", - "CachesStatusFetchingType": "正在獲取快取類型:{0}", + "CachesStatusFetchingType": "正在獲取緩存類型:{0}", "CachesStatusNeedUpdate": "{0} 個快取檔案(總大小為 {1} )可更新。點擊「更新快取」以開始更新。", "CachesStatusUpToDate": "快取都是最新的!", "CachesStatusChecking": "正在檢查 {0}:{1}", @@ -185,9 +196,9 @@ "CachesBtn2FullDesc": "此方法只會檢查快取的完整性、大小、和可用性。如欲檢查檔案的完整性,請使用「完整檢查」。", "CachesBtn2Quick": "快速檢查", "CachesBtn2QuickDesc": "此方法只會檢查快取的大小和可用性。如欲檢查快取的完整性,請使用「完整檢查」。", - "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,您無法使用此功能。", + "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,你無法使用此功能。", "OverlayNotInstalledSubtitle": "請先在遊戲啟動器頁面下載/更新遊戲!", - "OverlayGameRunningTitle": "遊戲正在執行!", + "OverlayGameRunningTitle": "遊戲正在運行!", "OverlayGameRunningSubtitle": "請先關閉遊戲以使用此功能!" }, "_CutscenesPage": { @@ -195,23 +206,24 @@ }, "_GameSettingsPage": { "PageTitle": "遊戲設定", - "Graphics_Title": "畫面設定", - "Graphics_ResolutionPanel": "遊戲解析度", + "Graphics_Title": "圖像設定", + "Graphics_ResolutionPanel": "遊戲分辨率", + "Graphics_Borderless": "使用無邊框視窗模式", "Graphics_Fullscreen": "全螢幕", "Graphics_ExclusiveFullscreen": "使用獨佔全螢幕", "Graphics_ResSelectPlaceholder": "選擇", - "Graphics_ResCustom": "使用自定義解析度", + "Graphics_ResCustom": "使用自定義分辨率", "Graphics_ResCustomW": "寬", "Graphics_ResCustomH": "高", - "Graphics_FPSPanel": "最大 FPS", + "Graphics_FPSPanel": "最大幀率", "Graphics_FPSInCombat": "戰鬥中", "Graphics_FPSInMenu": "主選單", "Graphics_APIPanel": "圖形 API", "Graphics_APIHelp1": "這個遊戲有幾個可用的 API 模式,包括:", "Graphics_APIHelp2": "注:", "Graphics_APIHelp3": "由於該遊戲並非使用 DirectX 12 API 進行編譯,使用 DirectX 12 可能會導致遊戲在特定階段崩潰。", - "Graphics_SpecPanel": "全局畫面設定", - "Graphics_Preset": "畫面預設方案", + "Graphics_SpecPanel": "全局圖像設定", + "Graphics_Preset": "圖像預設方案", "Graphics_Render": "渲染精細度", "Graphics_Shadow": "陰影品質", "Graphics_Reflection": "反射品質", @@ -222,7 +234,7 @@ "Graphics_FXHQ": "高畫質", "Graphics_FXAA": "FXAA", "Graphics_FXDistort": "失真效果", - "Graphics_APHO2Panel": "APHO2 和新章節畫面設定", + "Graphics_APHO2Panel": "APHO2 和新章節圖像設定", "Graphics_APHO2GI": "全局光照", "Graphics_APHO2VL": "體積光", "Graphics_APHO2AO": "環境光遮蔽", @@ -258,59 +270,60 @@ "RegExportTooltip": "將登錄檔的鍵匯出到一個 Collapse 登錄檔檔案。", "RegImportTitle": "匯入", "RegImportTooltip": "從一個 Collapse 登錄檔檔案匯入登錄檔的鍵", - "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,您無法使用此功能!", + "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,你無法使用此功能!", "OverlayNotInstalledSubtitle": "請先在遊戲啟動器頁面下載/更新遊戲!", - "OverlayGameRunningTitle": "遊戲正在執行!", + "OverlayGameRunningTitle": "遊戲正在運行!", "OverlayGameRunningSubtitle": "請先關閉遊戲以使用此功能!", - "OverlayFirstTimeTitle": "您從來沒有遊玩過這個遊戲!", - "OverlayFirstTimeSubtitle": "請先執行遊戲以生成必要的檔案,再回來使用此功能。", + "OverlayFirstTimeTitle": "你從來沒有遊玩過這個遊戲!", + "OverlayFirstTimeSubtitle": "請先運行遊戲以生成必要的檔案,再回來使用此功能。", "CustomArgs_Title": "自定義啟動參數(進階)", "CustomArgs_Subtitle": "啟動參數", "CustomArgs_Footer1": "關於啟動參數的更多資訊,請查看", - "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元說明文件", + "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元文檔", "CustomArgs_Footer3": "來查看更多的參數。" }, "_SettingsPage": { - "PageTitle": "應用程式設定", + "PageTitle": "應用設定", "Debug": "除錯", "Debug_Console": "顯示控制台", - "Debug_MultipleInstance": "允許同時執行多個 Collapse", - "DiscordRPC": "Discord 遊戲狀態", - "DiscordRPC_Toggle": "顯示 Discord 遊戲狀態", - "DiscordRPC_GameStatusToggle": "顯示當前的遊戲於 Discord 遊戲狀態", + "Debug_IncludeGameLogs": "將遊戲日誌合併至 Collapse 的(可能包含敏感信息)", + "Debug_MultipleInstance": "允許同時運行多個 Collapse", "ChangeRegionWarning_Toggle": "顯示區域更改警告", - "ChangeRegionWarning_Warning": "*您必須重新啟動啟動器才能使這個設定更改生效。", + "ChangeRegionWarning_Warning": "*你必須重新啟動啟動器才能使這個設定更改生效。", "Language": "應用語言", "LanguageEntry": "{0} (由 {1} 提供)", - "AppLang_ApplyNeedRestart": "*您必須重新啟動啟動器才能使語言更改生效。", + "AppLang_ApplyNeedRestart": "*你必須重新啟動啟動器才能使語言更改生效。", "AppThemes": "界面主題", "AppThemes_Default": "預設(使用系統設定)", "AppThemes_Light": "淺色", "AppThemes_Dark": "深色", - "AppThemes_ApplyNeedRestart": "*您必須重新啟動啟動器才能使這些更改生效。", + "AppThemes_ApplyNeedRestart": "*你必須重新啟動啟動器才能使這些更改生效。", "AppWindowSize": "窗口大小", "AppWindowSize_Normal": "正常", - "AppWindowSize_Small": "較小", + "AppWindowSize_Small": "小", "AppCDNRepository": "儲存庫 CDN", "AppBG": "應用背景", "AppBG_Checkbox": "使用自定義背景", - "AppBG_Note": "注:圖片需為 PNG、JPG、TIFF、或 BMP 格式,並且解析度需低於 4096x4096", - "AppThreads": "執行緒設定", - "AppThreads_Download": "下載執行緒", - "AppThreads_Extract": "解壓縮執行緒", - "AppThreads_Help1": "下載執行緒數量決定下載過程中會分割多少區塊。此機制的行為與 IDM 和 aria2c 的行為相同。", + "AppBG_Note": "注:圖片需為 PNG、JPG、TIFF、或 BMP 格式,並且分辨率需低於 4096x4096", + "AppThreads": "應用線程", + "AppThreads_Download": "下載線程", + "AppThreads_Extract": "解壓縮線程", + "AppThreads_Help1": "這個線程將決定下載過程中會分割多少個區塊。此機制的行為與 IDM 和 aria2c 的行為相同。", "AppThreads_Help2": "預設值:", "AppThreads_Help3": "範圍:", "AppThreads_Help4": "0(自動偵測)", - "AppThreads_Help5": "解壓縮執行緒數量決定安裝/修復遊戲的過程中,程式分成多少執行緒以解壓縮/驗證檔案。", - "AppThreads_Help6": "注:此設定在安裝崩壞三時無效。", + "AppThreads_Help5": "這個線程將負責安裝/修復遊戲的過程中,解壓縮/驗證檔案的程序。", + "AppThreads_Help6": "注:此設定在安裝崩壞三時將不再有效", + "DiscordRPC": "Discord 遊戲狀態", + "DiscordRPC_Toggle": "顯示 Discord 狀態", + "DiscordRPC_GameStatusToggle": "將當前遊戲的名稱顯示在 Discord 狀態上", "Update": "檢查更新", "Update_CurVer": "目前版本:", "Update_CheckBtn": "檢查更新", "Update_ForceBtn": "強制更新", "Update_NewVer1": "更新至", "Update_NewVer2": "可用!", - "Update_LatestVer": "您正在使用最新版本。", + "Update_LatestVer": "你正在使用最新版本。", "AppFiles": "應用檔案管理", "AppFiles_OpenDataFolderBtn": "打開 AppData 資料夾", "AppFiles_RelocateDataFolderBtn": "重新定位 AppData 資料夾", @@ -318,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "清除圖片檔案", "ReportIssueBtn": "回報問題", "ContributePRBtn": "透過發起 Pull Request 的方式貢獻", + "ContributorListBtn": "開源協作者", "About": "關於", "About_Copyright1": "© 2022-2023 由", "About_Copyright2": " neon-nyan [14372096 SEA] 製作", "About_Copyright3": "在", - "About_Copyright4": "授權條款之下。版權所有。", + "About_Copyright4": "。版權所有。", "Disclaimer": "免責聲明", "Disclaimer1": "此應用不以任何方式與", "Disclaimer2": "有關連", @@ -330,11 +344,13 @@ "DiscordBtn1": "加入我們的 Armada Discord 伺服器!", "DiscordBtn2": "崩壞3 Discord 伺服器", "DiscordBtn3": "Collapse 的官方 Discord 伺服器!", - "AppChangeReleaseChannel": "變更為 {0} 發布渠道" + "AppChangeReleaseChannel": "變更為 {0} 發布渠道", + "EnableAcrylicEffect": "使用壓克力模糊效果", + "EnableDownloadChunksMerging": "合併已下載的軟體包區塊" }, "_Misc": { "UpdateCompleteTitle": "更新完成!", - "UpdateCompleteSubtitle": "您的啟動器版本已更新至 {0}!(發布渠道:{1})", + "UpdateCompleteSubtitle": "你的啟動器版本已更新至 {0}!(發布渠道:{1})", "FeatureUnavailableTitle": "此功能目前不可用", "FeatureUnavailableSubtitle": "請稍後再來看看!", "TimeRemain": "剩餘時間", @@ -390,105 +406,129 @@ "Completed": "完成", "Skipped": "已略過", "Select": "選擇", - "NotRunning": "未執行", + "NotRunning": "未運行", "MovingFile": "正在移動檔案", "CheckingFile": "正在檢查檔案", "RepairingFile": "正在修復檔案", - "ApplyingPatch": "正在應用補丁", + "ApplyingPatch": "正在應用補釘", "Disabled": "已停用", "Enabled": "已啟用", "BuildChannelPreview": "預覽", "BuildChannelStable": "穩定", "CDNDescription_Github": "啟動器的官方(主要)儲存庫。", - "CDNDescription_Statically": "官方(主要)儲存庫的鏡像,由 Statically提供。如果您的居住地無法存取 GitHub,選擇此選項。", + "CDNDescription_Cloudflare": "在 Cloudflare R2 Bucket 上托管的官方(主要)儲存庫的鏡像。", + "CDNDescription_Bitbucket": "在 Bitbucket 上托管的官方(主要)儲存庫的鏡像。", + "CDNDescription_Statically": "官方(主要)儲存庫的鏡像,由 Statically提供。如果你的居住地無法存取 GitHub,選擇此選項。", "CDNDescription_jsDelivr": "jsDelivr 使用多個 CDN 提供商,如 CloudFlare、Fastly、和 Quantil,這使得它擁有最穩定的上線時間和最快的效能。", - "LocateExecutable": "定位執行檔" + "LocateExecutable": "定位執行檔", + "OpenDownloadPage": "開啟下載頁面", + "DiscordRP_Play": "正在遊玩", + "DiscordRP_InGame": "在遊戲中", + "DiscordRP_Update": "更新中", + "DiscordRP_Repair": "正在修復遊戲", + "DiscordRP_Cache": "正在更新快取", + "DiscordRP_GameSettings": "正在更改遊戲設定", + "DiscordRP_AppSettings": "正在更改應用程式設定", + "DiscordRP_Idle": "閒置", + "DiscordRP_Default": "沒有活動", + "DiscordRP_Ad": "- 使用 Collapse 啟動器", + "DiscordRP_Region": "區域:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "警告:已偵測到 Delta Patch 更新", - "DeltaPatchDetectedSubtitle": "Delta Patch 將用於將您的遊戲由 {0} 更新至 {1}。\n請記住,您可能在遊戲中仍然需要下載一些檔案。", + "DeltaPatchDetectedSubtitle": "Delta Patch 將用於將你的遊戲由 {0} 更新至 {1}。\n請記住,你可能在遊戲中仍然需要下載一些檔案。", "DeltaPatchPrevFailedTitle": "上一個 Delta Patch 應用失敗!", "DeltaPatchPrevFailedSubtitle": "上一個 Delta Patch 應用失敗。為了避免重新下載,是否要恢復遊戲資料?", "GameConversionPrevFailedTitle": "上一個遊戲轉換失敗了!", "GameConversionPrevFailedSubtitle": "上一個遊戲轉換失敗了。為了避免重新下載,是否要恢復遊戲資料?", "PreloadVerifiedTitle": "預載包驗證完成!", - "PreloadVerifiedSubtitle": "您的預載包已完成驗證並可用以進行安裝!", + "PreloadVerifiedSubtitle": "你的預載包已完成驗證並可用以進行安裝!", "LocateInstallTitle": "正在定位安裝資料夾", "LocateInstallSubtitle": "在安裝遊戲之前,是否要指定遊戲的安裝位置?", "UnauthorizedDirTitle": "選擇到未經授權的目錄", - "UnauthorizedDirSubtitle": "您沒有寫入的權限:\n\n{0}\n\n請選擇其他目錄!", - "ChooseAudioLangSelectPlaceholder": "選擇您的配音語言", + "UnauthorizedDirSubtitle": "你沒有寫入的權限:\n\n{0}\n\n請選擇其他目錄!", + "ChooseAudioLangSelectPlaceholder": "選擇你的配音語言", "ChooseAudioLangTitle": "選擇配音語言", "ChooseAudioLangSubtitle": "在安裝遊戲前,請先選擇欲使用的配音語言(預設:日文):", "AddtDownloadNeededTitle": "需要額外下載", - "AddtDownloadNeededSubtitle": "您需要下載至少 {0} 的額外/永久檔案。您也可以跳過這個步驟並在遊戲內下載它們。\n您是否要現在下載它們?", + "AddtDownloadNeededSubtitle": "你需要下載至少 {0} 的額外/永久檔案。你也可以跳過這個步驟並在遊戲內下載它們。\n你是否要現在下載它們?", "AddtDownloadCompletedTitle": "額外下載已完成!", "AddtDownloadCompletedSubtitle": "額外/永久檔案已完成下載!\n玩的開心!", "RepairCompletedTitle": "修復作業已完成!", "RepairCompletedSubtitle": "已修復 {0} 個檔案。", "RepairCompletedSubtitleNoBroken": "未找到已損壞的文件。", - "ExtremeGraphicsSettingsWarnTitle": "已選擇「非常高」的畫面預設方案!", - "ExtremeGraphicsSettingsWarnSubtitle": "您正打算將畫面預設方案設定到「非常高」!\n「非常高」畫面預設方案實質上是兩倍的渲染比例,開啟 MSAA,並且優化非常差!\n\n您是否確定要使用這個預設方案?", + "ExtremeGraphicsSettingsWarnTitle": "已選擇「非常高」的圖像預設方案!", + "ExtremeGraphicsSettingsWarnSubtitle": "你正打算將圖像預設方案設定到「非常高」!\n「非常高」圖像預設方案實質上是兩倍的渲染比例,開啟 MSAA,並且優化非常差!\n\n你是否確定要使用這個預設方案?", "ExistingInstallTitle": "檢測到現有安裝!", - "ExistingInstallSubtitle": "此遊戲已經在以下目錄安裝:\n\n{0}\n\n建議將遊戲遷移至 Collapse 啟動器以獲得更好的支援和整合。\n然而,您仍然可以使用官方的啟動器來開始遊戲。\n\n是否繼續?", + "ExistingInstallSubtitle": "此遊戲已經在以下目錄安裝:\n\n{0}\n\n建議將遊戲遷移至 Collapse 啟動器以獲得更好的支援和整合。\n然而,你仍然可以使用官方的啟動器來開始遊戲。\n\n是否繼續?", "ExistingInstallBHI3LTitle": "檢測到 BetterHi3 啟動器的現有安裝!", - "ExistingInstallBHI3LSubtitle": "此遊戲已經在以下目錄安裝:\n\n{0}\n\n建議將遊戲遷移至 Collapse 啟動器以獲得更好的支援和整合。\n然而,您仍然可以使用 BetterHi3 啟動器來開始遊戲。\n\n是否繼續?", + "ExistingInstallBHI3LSubtitle": "此遊戲已經在以下目錄安裝:\n\n{0}\n\n建議將遊戲遷移至 Collapse 啟動器以獲得更好的支援和整合。\n然而,你仍然可以使用 BetterHi3 啟動器來開始遊戲。\n\n是否繼續?", "ExistingInstallSteamTitle": "檢測到 Steam 上的現有安裝!", - "ExistingInstallSteamSubtitle": "此遊戲已經透過 Steam 在以下目錄安裝:\n\n{0}\n\n是否要將此版本轉換為非 Steam 的全球版本?\n注:一旦開始轉換,您將無法使用 Steam 帳戶登入。只有米哈遊/HoYoverse 帳戶的登入方式可用。\n\n是否開始轉換及遷移作業?", + "ExistingInstallSteamSubtitle": "此遊戲已經透過 Steam 在以下目錄安裝:\n\n{0}\n\n是否要將此版本轉換為非 Steam 的全球版本?\n注:一旦開始轉換,你將無法使用 Steam 帳戶登入。只有米哈遊/HoYoverse 帳戶的登入方式可用。\n\n是否開始轉換及遷移作業?", "SteamConvertNeedMigrateTitle": "需要遷移資料夾", - "SteamConvertNeedMigrateSubtitle": "由於 Collapase 沒有存取遊戲安裝資料夾的權限,您需要將它遷移至另一個位置。\n建議移動至 CollapseLauncher 的遊戲資料夾。\n\n是否要移動至 CollapseLauncher 的遊戲資料夾?", + "SteamConvertNeedMigrateSubtitle": "由於 Collapase 沒有存取遊戲安裝資料夾的權限,你需要將它遷移至另一個位置。\n建議移動至 CollapseLauncher 的遊戲資料夾。\n\n是否要移動至 CollapseLauncher 的遊戲資料夾?", "SteamConvertIntegrityDoneTitle": "完整性檢查完成!", - "SteamConvertIntegrityDoneSubtitle": "遊戲資料完整性檢查完成!轉換程序將會下載至少 {0} 個檔案。\n您可以選擇繼續或是取消並稍後回來。\n\n是否要開始轉換作業?", + "SteamConvertIntegrityDoneSubtitle": "遊戲資料完整性檢查完成!轉換程序將會下載至少 {0} 個檔案。\n你可以選擇繼續或是取消並稍後回來。\n\n是否要開始轉換作業?", "SteamConvertFailedTitle": "轉換失敗!", "SteamConvertFailedSubtitle": "轉換程序失敗了! :(\n請嘗試重新開始轉換程序。", "InstallDataCorruptTitle": "遊戲檔案已損毀", "InstallDataCorruptSubtitle": "其中一個已下載的檔案發生損毀。\n\n伺服器散列:{0}\n下載散列:{1}\n\n是否要重新下載該檔案?", "InstallDataDownloadResumeTitle": "繼續下載?", - "InstallDataDownloadResumeSubtitle": "您已經在先前下載遊戲的{0}/{1}。\n\n是否要繼續下載?", + "InstallDataDownloadResumeSubtitle": "你已經在先前下載遊戲的{0}/{1}。\n\n是否要繼續下載?", "InsufficientDiskTitle": "硬碟空間不足", - "InsufficientDiskSubtitle": "您的 {2} 磁碟沒有足夠的空間安裝這個遊戲!\n\n可用空間: {0}\n需要空間:{1}\n\n在繼續安裝之前,請確認您的磁碟由足夠的空間。", + "InsufficientDiskSubtitle": "你的 {2} 磁碟沒有足夠的空間安裝這個遊戲!\n\n可用空間: {0}\n需要空間:{1}\n\n在繼續安裝之前,請確認你的磁碟由足夠的空間。", "RelocateFolderTitle": "重新定位 AppData 資料夾", - "RelocateFolderSubtitle": "您目前正使用這個資料夾作為您的 AppData 資料夾:\n\n{0}\n\n是否要更改它的位置?", + "RelocateFolderSubtitle": "你目前正使用這個資料夾作為你的 AppData 資料夾:\n\n{0}\n\n是否要更改它的位置?", "UninstallGameTitle": "正在解除安裝遊戲:{0}", - "UninstallGameSubtitle": "您將要解除安裝位於此資料夾的遊戲:\n\n{0}\n\n是否繼續?", + "UninstallGameSubtitle": "你將要解除安裝位於此資料夾的遊戲:\n\n{0}\n\n是否繼續?", "MigrationTitle": "正在定位目標資料夾", - "MigrationSubtitle": "在遷移之前,您想要指定遊戲的位置嗎?", + "MigrationSubtitle": "在遷移之前,你想要指定遊戲的位置嗎?", "NeedInstallMediaPackTitle": "找不到媒體功能包!", - "NeedInstallMediaPackSubtitle1": "警告:自 v5.8 更新起,您的電腦需要安裝「媒體功能包」才能正常執行崩壞三。這會修復遊戲內「Unable to load DLL 'cri_ware_unity'」的錯誤。", - "NeedInstallMediaPackSubtitle2": "在安裝完「媒體功能包」後,您可能需要重新啟動您的電腦。如果您已安裝過該功能包,或是欲嘗試遊玩崩壞三,您可以忽略這個警告,但您在執行遊戲的過程中有一定機率會出現錯誤。", + "NeedInstallMediaPackSubtitle1": "警告:自 v5.8 更新起,你的電腦需要安裝「媒體功能包」才能正常運行崩壞三。這會修復遊戲內「Unable to load DLL 'cri_ware_unity'」的錯誤。", + "NeedInstallMediaPackSubtitle2": "在安裝完「媒體功能包」後,你可能需要重新啟動你的電腦。如果你已安裝過該功能包,或是欲嘗試遊玩崩壞三,你可以忽略這個警告,但你在運行遊戲的過程中有一定機率會出現錯誤。", "InstallMediaPackCompleteTitle": "媒體功能包安裝完畢!", - "InstallMediaPackCompleteSubtitle": "媒體功能包已安裝在您的電腦上。\n請重新啟動您的電腦來套用該補釘!", + "InstallMediaPackCompleteSubtitle": "媒體功能包已安裝在你的電腦上。\n請重新啟動你的電腦來套用該補釘!", "InstallingMediaPackTitle": "正在下載媒體功能包", "InstallingMediaPackSubtitle": "正在等待安裝作業完成…", "InstallingMediaPackSubtitleFinished": "已完成", "GameConfigBrokenTitle1": "遊戲設定已損毀", "GameConfigBrokenSubtitle1": "啟動器的範圍設定已損壞。請手動選擇遊戲原本安裝的路徑。", "GameConfigBrokenSubtitle2": "請確認遊戲的位置與啟動器的「config.ini」檔案位在不同資料夾,該檔案位於:\n\n{0}", - "GameConfigBrokenSubtitle3": "如果上述可行,請將您的所有遊戲檔案移動至其他位置,接著點擊「定位目錄」來選擇路徑。", + "GameConfigBrokenSubtitle3": "如果上述可行,請將你的所有遊戲檔案移動至其他位置,接著點擊「定位目錄」來選擇路徑。", "CookbookLocateTitle": "定位 CookBook 檔案", - "CookbookLocateSubtitle1": "請在程序開始前定位已下載的 Cookbook 檔案。\n如果您尚未下載它,", + "CookbookLocateSubtitle1": "請在程序開始前定位已下載的 Cookbook 檔案。\n如果你尚未下載它,", "CookbookLocateSubtitle2": "點擊此處", "CookbookLocateSubtitle3": "來下載 Cookbook 檔案並點擊", "CookbookLocateSubtitle4": "下一步", "CookbookLocateSubtitle5": "來定位已下載的 Cookbook 檔案並繼續。", "CookbookLocateSubtitle6": "注:", - "CookbookLocateSubtitle7": "這是您需要下載的 Cookbook 檔案的名稱:", + "CookbookLocateSubtitle7": "這是你需要下載的 Cookbook 檔案的名稱:", "PrivilegeMustRunTitle": "Collapse 需要管理員權限!", "PrivilegeMustRunSubtitle": "Collapse 需要管理員權限來正常運作。是否要重新啟動 Collapase 並以管理員身份啟動?", "ReleaseChannelChangeTitle": "變更發布渠道", - "ReleaseChannelChangeSubtitle1": "您將要變更您的發布渠道至:", + "ReleaseChannelChangeSubtitle1": "你將要變更你的發布渠道至:", "ReleaseChannelChangeSubtitle2": "注:", - "ReleaseChannelChangeSubtitle3": "此行為可能導致不可回復的變動並/或導致您當前的設定出現問題。我們將不負責任何遊戲資料的損失或損壞。", + "ReleaseChannelChangeSubtitle3": "此行為可能導致不可回復的變動並/或導致你當前的設定出現問題。我們將不負責任何遊戲資料的損失或損壞。", + "ChangePlaytimeTitle": "是否確定要變更你的遊玩時數?", + "ChangePlaytimeSubtitle": "變更你的遊玩時數意味著使用你輸入的值覆蓋當前的時數。\n\n是否繼續?\n\n注:遊玩時數不會影響 Collapse 的運作方式,並且你可以在沒有遊玩時的任意時刻變更你的遊玩時數。", + "ResetPlaytimeTitle": "你是否確認要重置遊玩時數?", + "ResetPlaytimeSubtitle": "重置遊玩時數意味著將其值設置為 0。這是一個具有", + "ResetPlaytimeSubtitle2": "破壞性", + "ResetPlaytimeSubtitle3": "的操作,這意味著在經過確認後,你無法撤銷此變更。\n\n是否繼續?\n\n注:遊玩時數不會影響 Collapse 的運作方式,並且你可以在沒有遊玩時的任意時刻變更你的遊玩時數。", "LocateExePathTitle": "定位執行檔安裝路徑", - "LocateExePathSubtitle": "請將 Collapse 指定至您的應用程式的執行檔位置。" + "LocateExePathSubtitle": "請將 Collapse 指定至你的應用程式的執行檔位置。", + "CannotUseAppLocationForGameDirTitle": "無效的資料夾!", + "CannotUseAppLocationForGameDirSubtitle": "由於此資料夾已經被系統佔用,或被用於啟動器的主要資料夾,你不能使用它。請選擇另一個資料夾!", + "StopGameTitle": "強制停止遊戲", + "StopGameSubtitle": "你是否要強制停止當前正在運行的遊戲?\n你可以能會失去一些遊戲進度。" }, "_InstallMgmt": { "IntegrityCheckTitle": "完整性檢查", - "PreparePatchTitle": "正在準備補丁", + "PreparePatchTitle": "正在準備補釘", "AddtDownloadTitle": "額外下載:{0}/{1}", "RepairFilesRequiredShowFilesBtn": "顯示損壞檔案列表", "RepairFilesRequiredTitle": "{0} 個檔案需要修復!", - "RepairFilesRequiredSubtitle": "在更新前,您有至少 {0} 個檔案({1})需要修復!\n\n注:這個程序可能會花費比預計還有久的時間(因為這取決於您的網際網路的頻寬的穩定性)。如果您的下載速度偏慢,可以考慮使用 VPN。" + "RepairFilesRequiredSubtitle": "在更新前,你有至少 {0} 個檔案({1})需要修復!\n\n注:這個程序可能會花費比預計還有久的時間(因為這取決於你的網際網路的頻寬的穩定性)。如果你的下載速度偏慢,可以考慮使用 VPN。" }, "_InstallConvert": { "PageTitle": "跨版本轉換", @@ -503,14 +543,14 @@ "Step4Subtitle": "正在開始轉換…", "Step5Title": "轉換後完整性驗證", "Step5Subtitle": "正在等待驗證…", - "StepNotRunning": "未執行", + "StepNotRunning": "未運行", "PageFooter1": "請", "PageFooter2": "請勿", - "PageFooter3": "在轉換程序執行的過程中關閉啟動器。", + "PageFooter3": "在轉換程序運行的過程中關閉啟動器。", "SelectDialogTitle": "選擇遊戲", "SelectDialogSource": "選擇來源", "SelectDialogTarget": "選擇目標", - "SelectDialogSubtitle": "注:如果您透過遷移的方式安裝此遊戲,轉換作業將會損壞預設啟動器的完整性。\n\n請選擇要轉換的遊戲的來源及目標:", + "SelectDialogSubtitle": "注:如果你透過遷移的方式安裝此遊戲,轉換作業將會損壞預設啟動器的完整性。\n\n請選擇要轉換的遊戲的來源及目標:", "SelectDialogSubtitleNotInstalled": "沒有安裝來源遊戲!請選擇其他遊戲。", "ConvertSuccessTitle": "轉換成功", "ConvertSuccessSubtitle": "已完成 {0} 到 {1} 的遊戲轉換!", @@ -518,8 +558,8 @@ "CookbookDownloadSubtitle": "正在下載從 {0} 轉換至 {1} 的配方", "CancelBtn": "取消轉換", "CancelMsgTitle": "正在取消轉換…", - "CancelMsgSubtitle1": "您將要取消轉換程序。任何轉換進度將被中止。\n\n確定嗎?", - "CancelMsgSubtitle2": "您將要取消轉換程序,但是您的遊戲已經被轉換至 {0}。將略過「轉換後完整性驗證」階段。" + "CancelMsgSubtitle1": "你將要取消轉換程序。任何轉換進度將被中止。\n\n確定嗎?", + "CancelMsgSubtitle2": "你將要取消轉換程序,但是你的遊戲已經被轉換至 {0}。將略過「轉換後完整性驗證」階段。" }, "_InstallMigrateSteam": { "PageTitle": "Steam 轉換", @@ -534,14 +574,14 @@ "Step4Subtitle": "正在等待提示…", "Step5Title": "資料完整性驗證", "Step5Subtitle": "正在獲取驗證 API…", - "StepNotRunning": "未執行", + "StepNotRunning": "未運行", "PageFooter1": "請", "PageFooter2": "不要", - "PageFooter3": "在執行過程中切換至另一個頁面,或是關閉啟動器", + "PageFooter3": "在運行過程中切換至另一個頁面,或是關閉啟動器", "SelectDialogTitle": "選擇遊戲", "SelectDialogSource": "選擇來源", "SelectDialogTarget": "選擇目標", - "SelectDialogSubtitle": "注:如果您透過遷移的方式安裝此遊戲,轉換作業將會損壞預設啟動器的完整性。\n\n請選擇要轉換的遊戲的來源及目標:", + "SelectDialogSubtitle": "注:如果你透過遷移的方式安裝此遊戲,轉換作業將會損壞預設啟動器的完整性。\n\n請選擇要轉換的遊戲的來源及目標:", "SelectDialogSubtitleNotInstalled": "沒有安裝來源遊戲!請選擇其他遊戲。", "ConvertSuccessTitle": "轉換成功", "ConvertSuccessSubtitle": "已完成 {0} 到 {1} 的遊戲轉換!", @@ -555,12 +595,12 @@ "_InstallMigrate": { "PageTitle": "遊戲遷移", "Step1Title": "程序將在 5 秒內開始。請同意使用者帳戶控制的提示框以開始遷移作業", - "Step2Title": "遷移作業正在進行。您可能會看到一個控制台窗口跳出。請等待直至該程序完成", + "Step2Title": "遷移作業正在進行。你可能會看到一個控制台窗口跳出。請等待直至該程序完成", "Step3Title": "遷移作業完成!正在返回…", "StepCancelledTitle": "遷移作業已取消!正在返回…", "PageFooter1": "請", "PageFooter2": "不要", - "PageFooter3": "在執行過程中切換至另一個頁面,或是關閉啟動器" + "PageFooter3": "在運行過程中切換至另一個頁面,或是關閉啟動器" }, "_UpdatePage": { "PageTitle1": "有可用", @@ -584,11 +624,11 @@ "UpdateMessage1": "正在連結到更新儲存庫…", "UpdateStatus2": "正在驗證:", "UpdateStatus3": "正在下載更新 [{0} / {1}]:", - "UpdateStatus4": "您正在使用最新版本({0})!", + "UpdateStatus4": "你正在使用最新版本({0})!", "UpdateMessage4": "正在返回遊戲啟動器範圍…", "UpdateStatus5": "版本已更新至 {0}!", - "UpdateMessage5": "您的啟動器將很快的重新啟動…", - "UpdateCountdownMessage1": "您的啟動器將在 {0} 更新…", + "UpdateMessage5": "你的啟動器將很快的重新啟動…", + "UpdateCountdownMessage1": "你的啟動器將在 {0} 更新…", "UpdateCountdownMessage2": "(點擊", "UpdateCountdownMessage3": "以終止倒計時)" }, @@ -600,35 +640,36 @@ "NotifMetadataUpdateBtnUpdating": "正在更新詮釋資料,請稍後…", "NotifFirstWelcomeTitle": "歡迎來到 Collapse!", "NotifFirstWelcomeSubtitle": "如欲開始,點擊下方的「{0}」按鈕來查看如何安裝遊戲或遷移現有安裝。", - "NotifFirstWelcomeBtn": "訪問 GitHub Wiki", - "NotifPreviewBuildUsedTitle": "您正在使用預覽版本!", - "NotifPreviewBuildUsedSubtitle": "您目前正在使用 [PREVIEW] 版本,它仍然在測試階段。如果您遇到任何問題,請點擊下方的「{0}」按鈕來回報。謝謝!", + "NotifFirstWelcomeBtn": "訪問 GitHub 維基", + "NotifPreviewBuildUsedTitle": "你正在使用預覽版本!", + "NotifPreviewBuildUsedSubtitle": "你目前正在使用 [PREVIEW] 版本,它仍然在測試階段。如果你遇到任何問題,請點擊下方的「{0}」按鈕來回報。謝謝!", "NotifPreviewBuildUsedBtn": "回報問題" }, "_StarRailGameSettingsPage": { "PageTitle": "遊戲設定", - "Graphics_Title": "畫面設定", - "Graphics_ResolutionPanel": "遊戲解析度", + "Graphics_Title": "圖像設定", + "Graphics_ResolutionPanel": "遊戲分辨率", "Graphics_Fullscreen": "全螢幕", "Graphics_ExclusiveFullscreen": "使用獨佔全螢幕", "Graphics_ResSelectPlaceholder": "選擇", - "Graphics_ResCustom": "使用自定義解析度", + "Graphics_ResCustom": "使用自定義分辨率", "Graphics_ResCustomW": "寬", "Graphics_ResCustomH": "高", - "Graphics_FPS": "FPS", - "Graphics_FPS_Help": "120 FPS 屬於實驗性功能!請謹慎使用,並自行承擔風險。", - "Graphics_FPS_Help2": "此外,將 FPS 設定為 120 將會導致遊戲內的畫面設定損壞。\n使用 Collapse 來更改遊戲的畫面設定。", + "Graphics_FPS": "幀率", + "Graphics_FPS_Help": "120 幀率屬於實驗性功能!請謹慎使用,並自行承擔風險。", + "Graphics_FPS_Help2": "此外,將幀率設定為 120 將會導致遊戲內的圖像設定損壞。\n使用 Collapse 來更改遊戲的圖像設定。", "Graphics_VSync": "垂直同步", - "Graphics_RenderScale": "渲染精細度", - "Graphics_ResolutionQuality": "解析度品質", + "Graphics_RenderScale": "渲染精度", + "Graphics_ResolutionQuality": "分辨率品質", "Graphics_ShadowQuality": "陰影品質", "Graphics_LightQuality": "光照品質", "Graphics_CharacterQuality": "角色品質", "Graphics_EnvDetailQuality": "場景細節", "Graphics_ReflectionQuality": "反射品質", - "Graphics_BloomQuality": "泛光(Bloom)品質", - "Graphics_AAMode": "反鋸齒模式", - "Graphics_SpecPanel": "全局畫面設定", + "Graphics_BloomQuality": "泛光效果品質", + "Graphics_AAMode": "抗鋸齒模式", + "Graphics_SFXQuality": "特效品質", + "Graphics_SpecPanel": "全局圖像設定", "SpecEnabled": "已啟用", "SpecDisabled": "已停用", "SpecVeryLow": "極低", @@ -638,16 +679,16 @@ "SpecVeryHigh": "非常高", "ApplyBtn": "應用設定", "SettingsApplied": "已保存變更!", - "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,您無法使用此功能!", + "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,你無法使用此功能!", "OverlayNotInstalledSubtitle": "請先在遊戲啟動器頁面下載/更新遊戲!", - "OverlayGameRunningTitle": "遊戲正在執行!", + "OverlayGameRunningTitle": "遊戲正在運行!", "OverlayGameRunningSubtitle": "請先關閉遊戲以使用此功能!", - "OverlayFirstTimeTitle": "您從來沒有遊玩過這個遊戲!", - "OverlayFirstTimeSubtitle": "請先執行遊戲以生成必要的檔案,再回來使用此功能。", + "OverlayFirstTimeTitle": "你從來沒有遊玩過這個遊戲!", + "OverlayFirstTimeSubtitle": "請先運行遊戲以生成必要的檔案,再回來使用此功能。", "CustomArgs_Title": "自定義啟動參數(進階)", "CustomArgs_Subtitle": "啟動參數", "CustomArgs_Footer1": "關於啟動參數的更多資訊,請查看", - "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元說明文件", + "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元文檔", "CustomArgs_Footer3": "來查看更多的參數。", "Audio_Title": "音量設定", "Audio_Master": "主音量", @@ -657,7 +698,7 @@ "Audio_Mute": "靜音", "Language": "語言設定", "Language_Help1": "Collapse 目前無法直接下載音訊包。", - "Language_Help2": "音訊包會在您下次啟動遊戲時在遊戲內下載。", + "Language_Help2": "音訊包會在你下次啟動遊戲時在遊戲內下載。", "LanguageAudio": "音訊", "LanguageText": "文字", "VO_en": "英文", @@ -667,36 +708,33 @@ }, "_GenshinGameSettingsPage": { "PageTitle": "遊戲設定", - - "Graphics_Title": "畫面設定", - "Graphics_ResolutionPanel": "遊戲解析度", + "Graphics_Title": "圖像設定", + "Graphics_ResolutionPanel": "遊戲分辨率", "Graphics_Fullscreen": "全螢幕", "Graphics_ExclusiveFullscreen": "使用獨佔全螢幕", - "Graphics_ExclusiveFullscreen_Help": "獨佔全螢幕有機率導致遊戲本體凍結", + "Graphics_ExclusiveFullscreen_Help": "獨占全螢幕可能會導致隨機的遊戲畫面凍結!", "Graphics_ResSelectPlaceholder": "選擇", - "Graphics_ResCustom": "使用自定義解析度", + "Graphics_ResCustom": "使用自定義分辨率", "Graphics_ResCustomW": "寬", "Graphics_ResCustomH": "高", - "Graphics_Gamma": "亮度", - "Graphics_FPS": "FPS", - "Graphics_RenderScale": "渲染精細度", + "Graphics_FPS": "幀率", + "Graphics_RenderScale": "渲染精度", "Graphics_ShadowQuality": "陰影品質", - "Graphics_VisualFX": "後期效果", + "Graphics_VisualFX": "視覺效果", "Graphics_SFXQuality": "特效品質", "Graphics_EnvDetailQuality": "場景細節", "Graphics_VSync": "垂直同步", - "Graphics_AAMode": "反鋸齒模式", + "Graphics_AAMode": "抗鋸齒模式", "Graphics_VolFogs": "體積霧", "Graphics_ReflectionQuality": "反射", "Graphics_MotionBlur": "動態模糊", - "Graphics_BloomQuality": "泛光(Bloom)", + "Graphics_BloomQuality": "Bloom", "Graphics_CrowdDensity": "人群密度", "Graphics_SubsurfaceScattering": "次表面散射", - "Graphics_TeammateFX": "多人遊戲隊友特效", - "Graphics_AnisotropicFiltering": "各向異性採樣", - - "Graphics_SpecPanel": "全域畫面設定", + "Graphics_TeammateFX": "隊友特效", + "Graphics_AnisotropicFiltering": "各向異性過濾", + "Graphics_SpecPanel": "全局圖像設定", "SpecEnabled": "已啟用", "SpecDisabled": "已停用", "SpecVeryLow": "極低", @@ -704,36 +742,30 @@ "SpecMedium": "中", "SpecHigh": "高", "SpecVeryHigh": "非常高", - "SpecPartiallyOff": "部分關閉", - + "SpecPartiallyOff": "部份封鎖", "ApplyBtn": "應用設定", "SettingsApplied": "已保存變更!", - - "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,您無法使用此功能!", + "OverlayNotInstalledTitle": "由於該區域尚未安裝或需要更新,你無法使用此功能!", "OverlayNotInstalledSubtitle": "請先在遊戲啟動器頁面下載/更新遊戲!", - "OverlayGameRunningTitle": "遊戲正在執行!", + "OverlayGameRunningTitle": "遊戲正在運行!", "OverlayGameRunningSubtitle": "請先關閉遊戲以使用此功能!", - "OverlayFirstTimeTitle": "您從來沒有遊玩過這個遊戲!", - "OverlayFirstTimeSubtitle": "請先執行遊戲以生成必要的檔案,再回來使用此功能。", - + "OverlayFirstTimeTitle": "你從來沒有遊玩過這個遊戲!", + "OverlayFirstTimeSubtitle": "請先運行遊戲以生成必要的檔案,再回來使用此功能。", "CustomArgs_Title": "自定義啟動參數(進階)", "CustomArgs_Subtitle": "啟動參數", "CustomArgs_Footer1": "關於啟動參數的更多資訊,請查看", - "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元說明文件", + "CustomArgs_Footer2": "Unity Standalone Player 命令提示字元文檔", "CustomArgs_Footer3": "來查看更多的參數。", - "Audio_Title": "音量設定", "Audio_Master": "主音量", "Audio_BGM": "背景音樂音量", "Audio_SFX": "音效音量", "Audio_VO": "配音音量", - - "Audio_Output_Surround": "使用環繞聲", - "Audio_DynamicRange": "完整動態範圍", - + "Audio_Output_Surround": "使用環繞音效", + "Audio_DynamicRange": "全動態範圍", "Language": "語言設定", "Language_Help1": "Collapse 目前無法直接下載音訊包。", - "Language_Help2": "音訊包會在您下次啟動遊戲時在遊戲內下載。", + "Language_Help2": "音訊包會在你下次啟動遊戲時在遊戲內下載。", "LanguageAudio": "音訊", "LanguageText": "文字", "VO_en": "英文", diff --git a/Hi3Helper.Core/Lang/zh-cn.json b/Hi3Helper.Core/Lang/zh-cn.json index 02fcfea89..3255f51f1 100644 --- a/Hi3Helper.Core/Lang/zh-cn.json +++ b/Hi3Helper.Core/Lang/zh-cn.json @@ -1,7 +1,7 @@ { "LanguageName": "简体中文", "LanguageID": "zh-CN", - "Author": "misaka10843, imgradeone, SatoSouta, xTaiwanPingLord", + "Author": "misaka10843, imgradeone, SatoSouta", "_StartupPage": { "ChooseFolderBtn": "选择文件夹", "ChooseFolderDialogCancel": "不想选", @@ -41,9 +41,9 @@ "Title2": "Collapse Launcher" }, "_DisconnectedPage": { - "PageTitle": "断开链接", - "Header1": "你现在", - "Header2": "已从互联网断开连接", + "PageTitle": "断开连接", + "Header1": "你的网络连接", + "Header2": "已断开", "Footer1": "请检查您的互联网连接,并点击", "Footer2": "派蒙", "Footer3": "重试.", @@ -73,7 +73,9 @@ "RegionLoadingSubtitleTooLong": "重试的时间比预期的长一些.请确保你的网络连接稳定!", "NavCtrlTitleSettings": "程序设置", "NotifNeverAsk": "不再显示", - "NotifNoNewNotifs": "没有新的通知" + "NotifNoNewNotifs": "没有新的通知", + "NavigationMenu": "菜单", + "NavigationUtilities": "工具" }, "_HomePage": { "PageTitle": "启动器", @@ -92,7 +94,7 @@ "PreloadDownloadNotifbarVerifyTitle": "正在验证预载包", "PreloadDownloadNotifbarSubtitle": "必要的软件包", "UpdatingVoicePack": "正在更新语音包...", - "InstallBtn": "安装游戏", + "InstallBtn": "安装/定位游戏", "UpdateBtn": "更新游戏", "PauseDownloadBtn": "暂停", "ResumeDownloadBtn": "恢复", @@ -108,10 +110,19 @@ "GameSettings_Panel2RepairGame": "修复游戏", "GameSettings_Panel2UninstallGame": "卸载游戏", "GameSettings_Panel2ConvertVersion": "转换游戏版本", + "GameSettings_Panel2StopGame": "强制关闭游戏", "GameSettings_Panel3": "自定义启动参数", "GameSettings_Panel4": "杂项", "GameSettings_Panel4ShowEventsPanel": "显示公告面板", "GameSettings_Panel4ShowSocialMediaPanel": "显示社交媒体面板", + "GamePlaytime_Panel1": "编辑游玩时间", + "GamePlaytime_Idle_Panel1Hours": "小时", + "GamePlaytime_Idle_Panel1Minutes": "分钟", + "GamePlaytime_Idle_ResetBtn": "重置", + "GamePlaytime_Idle_ChangeBtn": "更改", + "GamePlaytime_Idle_InvalidTimeBlock": "提供的值无效", + "GamePlaytime_Running_Info1": "目前游戏有一个进程在运行,所以无法编辑游戏时间。", + "GamePlaytime_Running_Info2": "请注意,完全关闭 Collapse 会导致游戏时间记录停止(之前的记录会被保存),并且时间会在下次 Collapse 启动时再次开始记录。", "PostPanel_Events": "活动", "PostPanel_Notices": "公告", "PostPanel_Info": "资讯", @@ -197,6 +208,7 @@ "PageTitle": "游戏设置", "Graphics_Title": "图形设置", "Graphics_ResolutionPanel": "游戏分辨率", + "Graphics_Borderless": "使用无边框窗口", "Graphics_Fullscreen": "全屏", "Graphics_ExclusiveFullscreen": "使用独占全屏", "Graphics_ResSelectPlaceholder": "选择", @@ -274,10 +286,8 @@ "PageTitle": "程序设置", "Debug": "调试", "Debug_Console": "显示控制台", + "Debug_IncludeGameLogs": "保存游戏日志到 Collapse(可能含有敏感数据)", "Debug_MultipleInstance": "允许开启多个Collapse", - "DiscordRPC": "Discord 游戏状态", - "DiscordRPC_Toggle": "显示 Discord 游戏状态", - "DiscordRPC_GameStatusToggle": "显示当前的游戏于 Discord 游戏状态", "ChangeRegionWarning_Toggle": "显示区域更改警告", "ChangeRegionWarning_Warning": "*您需要重新启动应用程序使此设置生效.", "Language": "语言设置", @@ -304,6 +314,9 @@ "AppThreads_Help4": "0 (自动侦测)", "AppThreads_Help5": "这个线程将在安装/修复游戏时处理读取/验证过程.", "AppThreads_Help6": "注意:在安装崩坏三时,该设置不再有效.", + "DiscordRPC": "Discord 活动状态", + "DiscordRPC_Toggle": "显示 Discord 状态", + "DiscordRPC_GameStatusToggle": "在 Discord 状态中显示当前游戏", "Update": "检查更新", "Update_CurVer": "当前版本:", "Update_CheckBtn": "检查更新", @@ -318,11 +331,12 @@ "AppFiles_ClearImgCachesBtn": "清除图像文件", "ReportIssueBtn": "报告问题", "ContributePRBtn": "贡献", + "ContributorListBtn": "开源贡献者", "About": "关于", "About_Copyright1": "© 2022 Created by", "About_Copyright2": " neon-nyan [14372096 SEA]", "About_Copyright3": "Under", - "About_Copyright4": " license. All rights reserved.", + "About_Copyright4": "。版权所有。", "Disclaimer": "免责声明", "Disclaimer1": "本程序与", "Disclaimer2": "没有任何关系", @@ -330,7 +344,9 @@ "DiscordBtn1": "加入我们的Armada Discord(大陆无法正常访问)", "DiscordBtn2": "访问崩坏3 Discord(大陆无法正常访问)", "DiscordBtn3": "Collapse 的官方 Discord!", - "AppChangeReleaseChannel": "更改为 {0} 发布频道" + "AppChangeReleaseChannel": "更改为 {0} 发布频道", + "EnableAcrylicEffect": "使用亚克力模糊效果", + "EnableDownloadChunksMerging": "合并已下载的软件包块" }, "_Misc": { "UpdateCompleteTitle": "更新完成!", @@ -400,9 +416,23 @@ "BuildChannelPreview": "预览版", "BuildChannelStable": "正式版", "CDNDescription_Github": "启动器的官方(主) 存储库.", + "CDNDescription_Cloudflare": "在 Cloudflare R2 bucket 托管的官方(主)仓库镜像。", + "CDNDescription_Bitbucket": "在 Bitbucket 托管的官方(主)仓库镜像。", "CDNDescription_Statically": "官方(主) 存储库的镜像,由static提供。如果你住在一个无法访问GitHub的地方,可以使用这个。", "CDNDescription_jsDelivr": "jsDelivr使用多个CDN提供商,如CloudFlare、Fastly和Quantil,从而获得最佳的正常运行时间和性能。", - "LocateExecutable": "查找程序文件" + "LocateExecutable": "查找程序文件", + "OpenDownloadPage": "打开下载界面", + "DiscordRP_Play": "正在玩", + "DiscordRP_InGame": "在游戏内", + "DiscordRP_Update": "在更新", + "DiscordRP_Repair": "在修复游戏", + "DiscordRP_Cache": "在更新缓存", + "DiscordRP_GameSettings": "在更改游戏设置", + "DiscordRP_AppSettings": "在更改应用设置", + "DiscordRP_Idle": "闲置", + "DiscordRP_Default": "没有活动", + "DiscordRP_Ad": "- 使用 Collapse 启动器", + "DiscordRP_Region": "区域:" }, "_Dialogs": { "DeltaPatchDetectedTitle": "警告.检测到Delta补丁更新!", @@ -479,8 +509,18 @@ "ReleaseChannelChangeSubtitle1": "您将要更改您的发行频道为:", "ReleaseChannelChangeSubtitle2": "注:", "ReleaseChannelChangeSubtitle3": "此操作可能会导致不可逆的更改和/或导致您当前的设置中断。 我们不应对与您的游戏相关的任何数据丢失或损坏负责。", + "ChangePlaytimeTitle": "是否确认更改游戏时间?", + "ChangePlaytimeSubtitle": "您刚刚输入的内容将会覆盖现在的游玩时间。\n\n是否要继续?\n\n注意:更改时间不会影响到 Collapse,您可以随时在不玩游戏时再次更改这个值。", + "ResetPlaytimeTitle": "是否确认更改游戏时间?", + "ResetPlaytimeSubtitle": "重置游戏时间意味着将游戏时间设置为 0。这是一个 ", + "ResetPlaytimeSubtitle2": "破坏性的", + "ResetPlaytimeSubtitle3": " 操作,一旦确认,此操作将无法撤销。\n\n是否要继续?\n\n注意:更改时间不会影响到 Collapse,您可以随时在不玩游戏时再次更改这个值。", "LocateExePathTitle": "查找程序文件的安装路径", - "LocateExePathSubtitle": "请为 Collapse 定位应用程序文件的位置:" + "LocateExePathSubtitle": "请为 Collapse 定位应用程序文件的位置:", + "CannotUseAppLocationForGameDirTitle": "文件夹无效", + "CannotUseAppLocationForGameDirSubtitle": "您无法使用此文件夹,因为它已被用作系统文件夹或被用于存放应用程序的主执行文件。请选择其他文件夹!", + "StopGameTitle": "强制停止游戏", + "StopGameSubtitle": "您确定要强制中止当前正在运行的游戏吗?\n您的游戏进度可能会丢失。" }, "_InstallMgmt": { "IntegrityCheckTitle": "完整性检查", @@ -628,6 +668,7 @@ "Graphics_ReflectionQuality": "反射质量", "Graphics_BloomQuality": "泛光效果(Bloom)", "Graphics_AAMode": "抗锯齿模式", + "Graphics_SFXQuality": "特效质量", "Graphics_SpecPanel": "全局图形设置", "SpecEnabled": "启用", "SpecDisabled": "禁用", @@ -667,22 +708,20 @@ }, "_GenshinGameSettingsPage": { "PageTitle": "游戏设置", - "Graphics_Title": "图像设置", "Graphics_ResolutionPanel": "游戏分辨率", "Graphics_Fullscreen": "全屏", "Graphics_ExclusiveFullscreen": "使用独占全屏", - "Graphics_ExclusiveFullscreen_Help": "独占全屏有概率导致游戏本体冻结", + "Graphics_ExclusiveFullscreen_Help": "独占全屏可能会导致游戏意外冻结!", "Graphics_ResSelectPlaceholder": "选择", "Graphics_ResCustom": "使用自定义分辨率", "Graphics_ResCustomW": "宽", "Graphics_ResCustomH": "高", - "Graphics_Gamma": "亮度", "Graphics_FPS": "帧率", "Graphics_RenderScale": "渲染精度", "Graphics_ShadowQuality": "阴影质量", - "Graphics_VisualFX": "后期效果", + "Graphics_VisualFX": "视觉效果", "Graphics_SFXQuality": "特效质量", "Graphics_EnvDetailQuality": "场景细节", "Graphics_VSync": "垂直同步(VSync)", @@ -690,47 +729,40 @@ "Graphics_VolFogs": "体积雾", "Graphics_ReflectionQuality": "反射", "Graphics_MotionBlur": "动态模糊", - "Graphics_BloomQuality": "泛光效果(Bloom)", + "Graphics_BloomQuality": "Bloom", "Graphics_CrowdDensity": "人群密度", "Graphics_SubsurfaceScattering": "次表面散射", - "Graphics_TeammateFX": "多人游戏队友特效", + "Graphics_TeammateFX": "队友特效", "Graphics_AnisotropicFiltering": "各向异性采样", - "Graphics_SpecPanel": "全局图形设置", - "SpecEnabled": "启用", - "SpecDisabled": "禁用", + "SpecEnabled": "打开", + "SpecDisabled": "关闭", "SpecVeryLow": "非常低", "SpecLow": "低", "SpecMedium": "中", "SpecHigh": "高", "SpecVeryHigh": "非常高", "SpecPartiallyOff": "部分关闭", - "ApplyBtn": "应用设置", "SettingsApplied": "已保存更改!", - "OverlayNotInstalledTitle": "由于该区服尚未安装或需要更新,您无法使用此功能!", "OverlayNotInstalledSubtitle": "请先前往游戏启动器页面下载 / 更新游戏!", "OverlayGameRunningTitle": "游戏正在运行中!", "OverlayGameRunningSubtitle": "使用此功能前,请先关闭游戏!", "OverlayFirstTimeTitle": "您还未曾游玩过该游戏!", "OverlayFirstTimeSubtitle": "请首先运行游戏,以生成必要文件;此后您可以返回这里,以使用该功能。", - "CustomArgs_Title": "自定义启动参数(高级)", "CustomArgs_Subtitle": "启动参数", "CustomArgs_Footer1": "关于启动参数的更多详情,请查阅", "CustomArgs_Footer2": "Unity 独立平台 Player 命令行参数文档", "CustomArgs_Footer3": "以了解更多命令行参数。", - "Audio_Title": "声音设置", "Audio_Master": "总音量", "Audio_BGM": "音乐音量", "Audio_SFX": "音效音量", "Audio_VO": "语音音量", - "Audio_Output_Surround": "使用环绕声", - "Audio_DynamicRange": "完整动态范围", - + "Audio_DynamicRange": "全动态范围", "Language": "语言设置", "Language_Help1": "目前 Collapse 无法直接下载音频包。", "Language_Help2": "下次启动游戏时,音频包将会在游戏中下载。", diff --git a/Hi3Helper.EncTool b/Hi3Helper.EncTool index fd3d5f3d5..aef74668f 160000 --- a/Hi3Helper.EncTool +++ b/Hi3Helper.EncTool @@ -1 +1 @@ -Subproject commit fd3d5f3d5e4b12c1c3f582dd2cf5a1f9b4f104c1 +Subproject commit aef74668fa5f2e8689eb85120de5c2403cf4faf0 diff --git a/Hi3Helper.Http b/Hi3Helper.Http index 7e191f0e1..0a06b9524 160000 --- a/Hi3Helper.Http +++ b/Hi3Helper.Http @@ -1 +1 @@ -Subproject commit 7e191f0e139fd98c1c0515820bfb0af4a9120166 +Subproject commit 0a06b9524c83af359b4da311d05c7df86001c08f diff --git a/Hi3Helper.SharpHDiffPatch b/Hi3Helper.SharpHDiffPatch index 3bc996afe..0198521b8 160000 --- a/Hi3Helper.SharpHDiffPatch +++ b/Hi3Helper.SharpHDiffPatch @@ -1 +1 @@ -Subproject commit 3bc996afe6140edc89a4d3a2b39903353478cdf8 +Subproject commit 0198521b82ff211630ff263fddd55482eb1f58aa diff --git a/InstallerProp/WizardBannerDesign.bmp b/InstallerProp/WizardBannerDesign.bmp index 9fe7e6570..66b4de34e 100644 Binary files a/InstallerProp/WizardBannerDesign.bmp and b/InstallerProp/WizardBannerDesign.bmp differ diff --git a/InstallerProp/WizardBannerDesign.png b/InstallerProp/WizardBannerDesign.png index bc430ff9c..3db169f18 100644 Binary files a/InstallerProp/WizardBannerDesign.png and b/InstallerProp/WizardBannerDesign.png differ diff --git a/README.md b/README.md index 42000a6f0..c65021477 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ +

- +

-> Art used for light mode by: [**Rafa** (@Pixiv)](https://www.pixiv.net/en/artworks/102448848) - **Collapse** was originally designed for **Honkai Impact 3rd**. However, as the project evolved, this launcher is now a game client for all currently released **miHoYo Games**. [![Build-Canary](https://github.com/neon-nyan/Collapse/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/neon-nyan/Collapse/actions/workflows/build.yml) @@ -13,6 +12,7 @@ ![id translation](https://img.shields.io/badge/dynamic/json?color=blue&label=id&style=flat&logo=crowdin&query=%24.progress.2.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) ![ja translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ja&style=flat&logo=crowdin&query=%24.progress.3.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) ![ko translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ko&style=flat&logo=crowdin&query=%24.progress.4.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) +![pl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pl&style=flat&logo=crowdin&query=%24.progress.5.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) ![pt-PT translation](https://img.shields.io/badge/dynamic/json?color=blue&label=pt-PT&style=flat&logo=crowdin&query=%24.progress.5.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) ![ru translation](https://img.shields.io/badge/dynamic/json?color=blue&label=ru&style=flat&logo=crowdin&query=%24.progress.6.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) ![th translation](https://img.shields.io/badge/dynamic/json?color=blue&label=th&style=flat&logo=crowdin&query=%24.progress.7.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json) @@ -21,9 +21,17 @@ ![zh-TW translation](https://img.shields.io/badge/dynamic/json?color=blue&label=zh-TW&style=flat&logo=crowdin&query=%24.progress.10.data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-15551431-552387.json)

- - Discord Shield for Collapse Launcher Discord server - + + Collapse Launcher Localization at Crowdin + +   + + Discord Shield for Collapse Launcher Discord server + +   + + Collapse Launcher Trello board +

# Why "Collapse"? @@ -175,11 +183,11 @@ Not only that, this launcher also has some advanced features for **Genshin Impac > > Please keep in mind that the Game Conversion feature is currently only available for Honkai Impact: 3rd. Other miHoYo/Cognosphere Pte. Ltd. games are currently not planned for game conversion. # Download Ready-To-Use Build -[](https://github.com/neon-nyan/Collapse/releases/download/CL-v1.70.13/CL-1.70.13_Installer.exe) -> **Note**: The version for this build is `1.70.13` (Released on: August 4th, 2023). +[](https://github.com/neon-nyan/Collapse/releases/download/CL-v1.70.14/CL-1.70.14_Installer.exe) +> **Note**: The version for this build is `1.70.14` (Released on: August 5th, 2023). -[](https://github.com/neon-nyan/Collapse/releases/download/CL-v1.71.4-pre/CL-1.71.4-preview_Installer.exe) -> **Note**: The version for this build is `1.71.4` (Released on: August 4th, 2023). +[](https://github.com/neon-nyan/Collapse/releases/download/CL-v1.71.5-pre/CL-1.71.5-preview_Installer.exe) +> **Note**: The version for this build is `1.71.5` (Released on: August 5th, 2023). To view all releases, [**click here**](https://github.com/neon-nyan/CollapseLauncher/releases). diff --git a/SECURITY.md b/SECURITY.md index 12ec0004c..c265c9046 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -19,4 +19,4 @@ Please report any vulnerability regarding Collapse Launcher here on Issues with - @bagusnl(`bagusnl`) - @muscularcandy67(`muscularcandy67`) -Please allow some time for us to process your report and get back to you at timely manner. We are volunteers and maintain this project in our free time in such that its bound to any IRL situations we face. +Please allow some time for us to process your report and get back to you at timely manner. We are volunteers and maintain this project in our free time and as such, real life situations take priority over this project.