diff --git a/ModAssistant/App.xaml.cs b/ModAssistant/App.xaml.cs index 55c2c2c..9204ba9 100644 --- a/ModAssistant/App.xaml.cs +++ b/ModAssistant/App.xaml.cs @@ -34,6 +34,7 @@ namespace ModAssistant { // Set SecurityProtocol to prevent crash with TLS System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12; + Languages.LoadLanguages(); if (ModAssistant.Properties.Settings.Default.UpgradeRequired) { @@ -136,7 +137,12 @@ namespace ModAssistant } else { - Languages.LoadLanguage(args[1]); + if (Languages.LoadLanguage(args[1])) + { + ModAssistant.Properties.Settings.Default.LanguageCode = args[1]; + ModAssistant.Properties.Settings.Default.Save(); + Languages.UpdateUI(args[1]); + } } args = Shift(args, 2); diff --git a/ModAssistant/Classes/Languages.cs b/ModAssistant/Classes/Languages.cs index 3bec80a..77902d6 100644 --- a/ModAssistant/Classes/Languages.cs +++ b/ModAssistant/Classes/Languages.cs @@ -14,10 +14,10 @@ namespace ModAssistant { public static string LoadedLanguage { get; private set; } public static List LoadedLanguages { get => availableCultures.ToList(); } - + public static bool FirstRun = true; private static string[] availableLanguageCodes = { "de", "en", "fr", "it", "ko", "nl", "ru", "zh" }; - private static IEnumerable availableCultures; + public static void LoadLanguages() { var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures); @@ -26,28 +26,27 @@ namespace ModAssistant availableCultures = allCultures.Where(cultureInfo => availableLanguageCodes.Any(code => code.Equals(cultureInfo.Name))); string savedLanguageCode = Properties.Settings.Default.LanguageCode; - - if (savedLanguageCode.Length == 0) + if (!LoadLanguage(savedLanguageCode)) { // If no language code was saved, load system language - savedLanguageCode = CultureInfo.CurrentUICulture.Name.Split('-').First(); - } - else if (!availableLanguageCodes.Any(code => code.Equals(savedLanguageCode))) - { - // If language code isn't supported, load English instead - savedLanguageCode = "en"; + if (!LoadLanguage(CultureInfo.CurrentUICulture.Name)) + { + LoadLanguage("en"); + } } + UpdateUI(LoadedLanguage); + } + public static void UpdateUI(string languageCode) + { if (Options.Instance != null && Options.Instance.LanguageSelectComboBox != null) { Options.Instance.LanguageSelectComboBox.ItemsSource = availableCultures.Select(cultureInfo => cultureInfo.NativeName).ToList(); - Options.Instance.LanguageSelectComboBox.SelectedIndex = LoadedLanguages.FindIndex(cultureInfo => cultureInfo.Name.Equals(savedLanguageCode)); ; + Options.Instance.LanguageSelectComboBox.SelectedIndex = LoadedLanguages.FindIndex(cultureInfo => cultureInfo.Name.Equals(languageCode)); } - - LoadLanguage(savedLanguageCode); } - private static ResourceDictionary LanguagesDict + public static ResourceDictionary LanguagesDict { get { @@ -55,21 +54,22 @@ namespace ModAssistant } } - public static void LoadLanguage(string languageCode) + public static bool LoadLanguage(string languageCode) { + if (string.IsNullOrEmpty(languageCode)) return false; try { LanguagesDict.Source = new Uri($"Localisation/{languageCode}.xaml", UriKind.Relative); - Properties.Settings.Default.LanguageCode = languageCode; - Properties.Settings.Default.Save(); + LoadedLanguage = languageCode; + return true; } catch (IOException) { if (languageCode.Contains("-")) { - LoadLanguage(languageCode.Split('-').First()); + return LoadLanguage(languageCode.Split('-').First()); } - // Can't load language file + return false; } } } diff --git a/ModAssistant/MainWindow.xaml.cs b/ModAssistant/MainWindow.xaml.cs index 6eb7602..4eca6c9 100644 --- a/ModAssistant/MainWindow.xaml.cs +++ b/ModAssistant/MainWindow.xaml.cs @@ -65,8 +65,6 @@ namespace ModAssistant Themes.LoadThemes(); Themes.FirstLoad(Properties.Settings.Default.SelectedTheme); - Languages.LoadLanguages(); - Task.Run(() => LoadVersionsAsync()); if (!Properties.Settings.Default.Agreed || string.IsNullOrEmpty(Properties.Settings.Default.LastTab)) diff --git a/ModAssistant/Pages/Options.xaml.cs b/ModAssistant/Pages/Options.xaml.cs index f63b60b..f9d6035 100644 --- a/ModAssistant/Pages/Options.xaml.cs +++ b/ModAssistant/Pages/Options.xaml.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Configuration; +using System.Diagnostics; using System.IO; using System.Net; using System.Net.Http; @@ -344,7 +345,20 @@ namespace ModAssistant.Pages // Get the matching language from the LoadedLanguages array, then try and use it var languageName = (sender as ComboBox).SelectedItem.ToString(); var selectedLanguage = Languages.LoadedLanguages.Find(language => language.NativeName.CompareTo(languageName) == 0); - Languages.LoadLanguage(selectedLanguage.Name); + if (Languages.LoadLanguage(selectedLanguage.Name)) + { + Properties.Settings.Default.LanguageCode = selectedLanguage.Name; + Properties.Settings.Default.Save(); + if (Languages.FirstRun) + { + Languages.FirstRun = false; + } + else + { + Process.Start(Utils.ExePath, App.Arguments); + Application.Current.Dispatcher.Invoke(() => { Application.Current.Shutdown(); }); + } + } } }