diff --git a/src/XIVLauncher/Windows/SettingsControl.xaml b/src/XIVLauncher/Windows/SettingsControl.xaml
index 1ff7e033f..eb6b7e480 100644
--- a/src/XIVLauncher/Windows/SettingsControl.xaml
+++ b/src/XIVLauncher/Windows/SettingsControl.xaml
@@ -89,27 +89,22 @@
-
- 日本語
- English
- Deutsch
- Français
- Italiano
- Español
- Português
- 한국어
- Norsk
- русский
- 简体中文
- 繁體中文
- svenska
-
+
-
+
diff --git a/src/XIVLauncher/Windows/SettingsControl.xaml.cs b/src/XIVLauncher/Windows/SettingsControl.xaml.cs
index d9250a969..001111d29 100644
--- a/src/XIVLauncher/Windows/SettingsControl.xaml.cs
+++ b/src/XIVLauncher/Windows/SettingsControl.xaml.cs
@@ -55,8 +55,8 @@ public void ReloadSettings()
ViewModel.PatchPath = App.Settings.PatchPath.FullName;
LanguageComboBox.SelectedIndex = (int) App.Settings.Language.GetValueOrDefault(ClientLanguage.English);
- LauncherLanguageComboBox.SelectedIndex = (int) App.Settings.LauncherLanguage.GetValueOrDefault(LauncherLanguage.English);
- LauncherLanguageNoticeTextBlock.Visibility = Visibility.Hidden;
+ ViewModel.LauncherLanguage = App.Settings.LauncherLanguage.GetValueOrDefault(LauncherLanguage.English);
+ ViewModel.LauncherLanguageNoticeVisiable = Visibility.Hidden;
AddonListView.ItemsSource = App.Settings.AddonList ??= new List();
AskBeforePatchingCheckBox.IsChecked = App.Settings.AskBeforePatchInstall;
KeepPatchesCheckBox.IsChecked = App.Settings.KeepPatches;
@@ -104,9 +104,7 @@ private void AcceptButton_Click(object sender, RoutedEventArgs e)
App.Settings.Language = (ClientLanguage)LanguageComboBox.SelectedIndex;
// Keep the notice visible if LauncherLanguage has changed
- if (App.Settings.LauncherLanguage == (LauncherLanguage)LauncherLanguageComboBox.SelectedIndex)
- LauncherLanguageNoticeTextBlock.Visibility = Visibility.Hidden;
- App.Settings.LauncherLanguage = (LauncherLanguage)LauncherLanguageComboBox.SelectedIndex;
+ App.Settings.LauncherLanguage = ViewModel.LauncherLanguage;
App.Settings.AddonList = (List)AddonListView.ItemsSource;
App.Settings.AskBeforePatchInstall = AskBeforePatchingCheckBox.IsChecked == true;
@@ -289,14 +287,6 @@ private void RunIntegrityCheck_OnClick(object s, RoutedEventArgs e)
window.ShowDialog();
}
- private void LauncherLanguageCombo_SelectionChanged(object sender, RoutedEventArgs e)
- {
- if (LauncherLanguageNoticeTextBlock != null)
- {
- LauncherLanguageNoticeTextBlock.Visibility = Visibility.Visible;
- }
- }
-
private void EnableHooksCheckBox_OnChecked(object sender, RoutedEventArgs e)
{
try
diff --git a/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs b/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs
index b89f33983..a6563a095 100644
--- a/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs
+++ b/src/XIVLauncher/Windows/ViewModel/SettingsControlViewModel.cs
@@ -55,6 +55,53 @@ public string PatchPath
}
}
+ private static List LauncherLanguageStrings { get; } =
+ [
+ "日本語",
+ "English",
+ "Deutsch",
+ "Français",
+ "Italiano",
+ "Español",
+ "Português",
+ "한국어",
+ "Norsk",
+ "русский",
+ "简体中文",
+ "繁體中文",
+ "svenska"
+ ];
+
+ public List> LauncherLanguageList { get; } = LauncherLanguageStrings
+ .Zip(Enum.GetValues(typeof(LauncherLanguage)).Cast())
+ .Select(pair => new GenericCombinedData() { Display = pair.First, Value = pair.Second })
+ .ToList();
+
+ private LauncherLanguage _launcherLanguage = LauncherLanguage.Japanese;
+
+ public LauncherLanguage LauncherLanguage
+ {
+ get => _launcherLanguage;
+ set
+ {
+ LauncherLanguageNoticeVisiable = App.Settings.LauncherLanguage == value ? Visibility.Hidden : Visibility.Visible;
+ _launcherLanguage = value;
+ OnPropertyChanged(nameof(LauncherLanguage));
+ }
+ }
+
+ public Visibility _launcherLanguageNoticeVisiable = Visibility.Hidden;
+
+ public Visibility LauncherLanguageNoticeVisiable
+ {
+ get => _launcherLanguageNoticeVisiable;
+ set
+ {
+ _launcherLanguageNoticeVisiable = value;
+ OnPropertyChanged(nameof(LauncherLanguageNoticeVisiable));
+ }
+ }
+
private void SetupLoc()
{
OpenPluginsFolderLoc = Loc.Localize("OpenPluginsFolder", "Open Plugins Folder");
@@ -248,4 +295,21 @@ private void SetupLoc()
public string PluginDisabledTagLoc { get; private set; }
}
+
+ ///
+ /// Generic combined data class.
+ ///
+ /// The type of value.
+ public class GenericCombinedData
+ {
+ ///
+ /// Gets or sets the name displayed.
+ ///
+ public string Display { get; set; }
+
+ ///
+ /// Gets or sets the value.
+ ///
+ public TValueType Value { get; set; }
+ }
}