mirror of
https://github.com/knah/VRCMelonAssistant.git
synced 2024-05-18 03:12:18 +12:00
Merge pull request #175 from megalon/feature/language-select
Language select
This commit is contained in:
commit
d1203ac255
|
@ -53,6 +53,9 @@
|
|||
<setting name="CloseWindowOnFinish" serializeAs="String">
|
||||
<value>False</value>
|
||||
</setting>
|
||||
<setting name="LanguageCode" serializeAs="String">
|
||||
<value />
|
||||
</setting>
|
||||
</ModAssistant.Properties.Settings>
|
||||
<ModAssistant.Settings1>
|
||||
<setting name="InstallFolder" serializeAs="String">
|
||||
|
|
|
@ -35,12 +35,6 @@ namespace ModAssistant
|
|||
// Set SecurityProtocol to prevent crash with TLS
|
||||
System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
|
||||
|
||||
// Load localisation languages
|
||||
LoadLanguage(CultureInfo.CurrentCulture.Name);
|
||||
|
||||
// Uncomment the next line to debug localisation
|
||||
// LoadLanguage("en-DEBUG");
|
||||
|
||||
if (ModAssistant.Properties.Settings.Default.UpgradeRequired)
|
||||
{
|
||||
ModAssistant.Properties.Settings.Default.Upgrade();
|
||||
|
@ -142,7 +136,7 @@ namespace ModAssistant
|
|||
}
|
||||
else
|
||||
{
|
||||
LoadLanguage(args[1]);
|
||||
Languages.LoadLanguage(args[1]);
|
||||
}
|
||||
|
||||
args = Shift(args, 2);
|
||||
|
@ -213,29 +207,5 @@ namespace ModAssistant
|
|||
e.Handled = true;
|
||||
Application.Current.Shutdown();
|
||||
}
|
||||
|
||||
private ResourceDictionary LanguagesDict
|
||||
{
|
||||
get
|
||||
{
|
||||
return Resources.MergedDictionaries[1];
|
||||
}
|
||||
}
|
||||
|
||||
private void LoadLanguage(string culture)
|
||||
{
|
||||
try
|
||||
{
|
||||
LanguagesDict.Source = new Uri($"Localisation/{culture}.xaml", UriKind.Relative);
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
if (culture.Contains("-"))
|
||||
{
|
||||
LoadLanguage(culture.Split('-').First());
|
||||
}
|
||||
// Can't load language file
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
76
ModAssistant/Classes/Languages.cs
Normal file
76
ModAssistant/Classes/Languages.cs
Normal file
|
@ -0,0 +1,76 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using ModAssistant.Pages;
|
||||
|
||||
namespace ModAssistant
|
||||
{
|
||||
class Languages
|
||||
{
|
||||
public static string LoadedLanguage { get; private set; }
|
||||
public static List<CultureInfo> LoadedLanguages { get => availableCultures.ToList(); }
|
||||
|
||||
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);
|
||||
|
||||
// Get CultureInfo for any of the available translations
|
||||
availableCultures = allCultures.Where(cultureInfo => availableLanguageCodes.Any(code => code.Equals(cultureInfo.Name)));
|
||||
|
||||
string savedLanguageCode = Properties.Settings.Default.LanguageCode;
|
||||
|
||||
if (savedLanguageCode.Length == 0)
|
||||
{
|
||||
// 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 (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)); ;
|
||||
}
|
||||
|
||||
LoadLanguage(savedLanguageCode);
|
||||
}
|
||||
|
||||
private static ResourceDictionary LanguagesDict
|
||||
{
|
||||
get
|
||||
{
|
||||
return Application.Current.Resources.MergedDictionaries[1];
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadLanguage(string languageCode)
|
||||
{
|
||||
try
|
||||
{
|
||||
LanguagesDict.Source = new Uri($"Localisation/{languageCode}.xaml", UriKind.Relative);
|
||||
Properties.Settings.Default.LanguageCode = languageCode;
|
||||
Properties.Settings.Default.Save();
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
if (languageCode.Contains("-"))
|
||||
{
|
||||
LoadLanguage(languageCode.Split('-').First());
|
||||
}
|
||||
// Can't load language file
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -65,6 +65,8 @@ 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))
|
||||
|
|
|
@ -72,6 +72,7 @@
|
|||
<Compile Include="Classes\External Interfaces\Utils.cs" />
|
||||
<Compile Include="Classes\Http.cs" />
|
||||
<Compile Include="Classes\HyperlinkExtensions.cs" />
|
||||
<Compile Include="Classes\Languages.cs" />
|
||||
<Compile Include="Classes\Promotions.cs" />
|
||||
<Compile Include="Classes\Diagnostics.cs" />
|
||||
<Compile Include="Classes\Themes.cs" />
|
||||
|
|
|
@ -48,6 +48,23 @@
|
|||
FontWeight="Bold"
|
||||
Text="{DynamicResource Options:PageTitle}" />
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="0"
|
||||
Grid.Column="2"
|
||||
Margin="5"
|
||||
HorizontalAlignment="Right"
|
||||
FontSize="22"
|
||||
FontWeight="Bold"
|
||||
Text="A 文" />
|
||||
<ComboBox
|
||||
Name="LanguageSelectComboBox"
|
||||
Grid.Row="0"
|
||||
Grid.Column="3"
|
||||
Height="30"
|
||||
HorizontalAlignment="Stretch"
|
||||
VerticalContentAlignment="Center"
|
||||
SelectionChanged="LanguageSelectComboBox_SelectionChanged" />
|
||||
|
||||
<TextBlock
|
||||
Grid.Row="1"
|
||||
Margin="5"
|
||||
|
|
|
@ -331,6 +331,23 @@ namespace ModAssistant.Pages
|
|||
}
|
||||
}
|
||||
|
||||
public void LanguageSelectComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if ((sender as ComboBox).SelectedItem == null)
|
||||
{
|
||||
// Apply default language
|
||||
Console.WriteLine("Applying default language");
|
||||
Languages.LoadLanguage("en");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
private void ApplicationThemeExportTemplate_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
Themes.WriteThemeToDisk("Ugly Kulu-Ya-Ku");
|
||||
|
|
12
ModAssistant/Properties/Settings.Designer.cs
generated
12
ModAssistant/Properties/Settings.Designer.cs
generated
|
@ -190,5 +190,17 @@ namespace ModAssistant.Properties {
|
|||
this["CloseWindowOnFinish"] = value;
|
||||
}
|
||||
}
|
||||
|
||||
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||
public string LanguageCode {
|
||||
get {
|
||||
return ((string)(this["LanguageCode"]));
|
||||
}
|
||||
set {
|
||||
this["LanguageCode"] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,5 +44,8 @@
|
|||
<Setting Name="CloseWindowOnFinish" Type="System.Boolean" Scope="User">
|
||||
<Value Profile="(Default)">False</Value>
|
||||
</Setting>
|
||||
<Setting Name="LanguageCode" Type="System.String" Scope="User">
|
||||
<Value Profile="(Default)" />
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
Loading…
Reference in a new issue