Fix'd localizations not loading correctly

This commit is contained in:
Assistant 2020-06-02 16:47:59 -06:00
parent fe2fcfb7f9
commit 6327c197fb
4 changed files with 41 additions and 23 deletions

View file

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

View file

@ -14,10 +14,10 @@ namespace ModAssistant
{
public static string LoadedLanguage { get; private set; }
public static List<CultureInfo> LoadedLanguages { get => availableCultures.ToList(); }
public static bool FirstRun = true;
private static string[] availableLanguageCodes = { "de", "en", "fr", "it", "ko", "nl", "ru", "zh" };
private static IEnumerable<CultureInfo> 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;
}
}
}

View file

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

View file

@ -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(); });
}
}
}
}