Skip to content

Commit

Permalink
Localization updates
Browse files Browse the repository at this point in the history
Localization updates
  • Loading branch information
craftersmine committed Mar 25, 2024
2 parents c505c59 + da77dec commit 337b8e8
Show file tree
Hide file tree
Showing 17 changed files with 2,099 additions and 76 deletions.
15 changes: 15 additions & 0 deletions craftersmine.LeagueBalancer/App.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="craftersmine.LeagueBalancer.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<craftersmine.LeagueBalancer.Settings>
<setting name="Language" serializeAs="String">
<value />
</setting>
</craftersmine.LeagueBalancer.Settings>
</userSettings>
</configuration>
105 changes: 104 additions & 1 deletion craftersmine.LeagueBalancer/App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,16 @@
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Resources;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Windows;
using craftersmine.League.CommunityDragon;
using craftersmine.LeagueBalancer.Localization;
using craftersmine.Riot.Api.Account;
using craftersmine.Riot.Api.Common;
using craftersmine.Riot.Api.League.Mastery;
Expand All @@ -32,9 +37,22 @@ public partial class App : Application

protected override void OnStartup(StartupEventArgs e)
{
if (string.IsNullOrWhiteSpace(Settings.Default.Language))
{
if (CultureInfo.DefaultThreadCurrentUICulture is not null && CultureInfo.DefaultThreadCurrentUICulture.IsNeutralCulture == false)
Settings.Default.Language = CultureInfo.DefaultThreadCurrentUICulture.Name;
else
Settings.Default.Language = "en-US";

Settings.Default.Save();
}

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
DispatcherUnhandledException += App_DispatcherUnhandledException;

System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(Settings.Default.Language);
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(Settings.Default.Language);

ClientSettings = RiotApiClientSettingsBuilder
.CreateSettingsBuilder(KeyManager.RetrieveKey())
.UseDefaultDataRegion(RiotRegion.Europe).UseExperimentalLeaguesApi().Build();
Expand All @@ -44,11 +62,96 @@ protected override void OnStartup(StartupEventArgs e)
MasteryApiClient = new LeagueMasteryApiClient(ClientSettings);
RiotAccountApiClient = new RiotAccountApiClient(ClientSettings);

CommunityDragonClient = new CommunityDragon(VersionAlias.Latest, LeagueLocales.English);
CommunityDragonClient = new CommunityDragon(VersionAlias.Latest, GetValidLeagueCultureInfo(CultureInfo.DefaultThreadCurrentUICulture));

base.OnStartup(e);
}

public static IEnumerable<CultureInfo> GetAvailableCultures()
{
List<CultureInfo> result = new List<CultureInfo>();

ResourceManager rm = new ResourceManager(typeof(Locale));

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (CultureInfo culture in cultures)
{
try
{
if (!string.IsNullOrWhiteSpace(culture.Name))
{
ResourceSet rs = rm.GetResourceSet(culture, true, false);
if (rs != null)
result.Add(culture);
}
else continue;
}
catch (CultureNotFoundException)
{
//NOP
}
}
return result;
}

public CultureInfo GetValidLeagueCultureInfo(CultureInfo cultureInfo)
{
if (LeagueLocales.English.Name == cultureInfo.Name)
return LeagueLocales.English;
if (LeagueLocales.Chinese.Name == cultureInfo.Name)
return LeagueLocales.Chinese;
if (LeagueLocales.ChineseMY.Name == cultureInfo.Name)
return LeagueLocales.ChineseMY;
if (LeagueLocales.ChineseTW.Name == cultureInfo.Name)
return LeagueLocales.ChineseTW;
if (LeagueLocales.Czech.Name == cultureInfo.Name)
return LeagueLocales.Czech;
if (LeagueLocales.EnglishAU.Name == cultureInfo.Name)
return LeagueLocales.EnglishAU;
if (LeagueLocales.EnglishGB.Name == cultureInfo.Name)
return LeagueLocales.EnglishGB;
if (LeagueLocales.EnglishPH.Name == cultureInfo.Name)
return LeagueLocales.EnglishPH;
if (LeagueLocales.EnglishSG.Name == cultureInfo.Name)
return LeagueLocales.EnglishSG;
if (LeagueLocales.French.Name == cultureInfo.Name)
return LeagueLocales.French;
if (LeagueLocales.German.Name == cultureInfo.Name)
return LeagueLocales.German;
if (LeagueLocales.Greek.Name == cultureInfo.Name)
return LeagueLocales.Greek;
if (LeagueLocales.Hungarian.Name == cultureInfo.Name)
return LeagueLocales.Hungarian;
if (LeagueLocales.Italian.Name == cultureInfo.Name)
return LeagueLocales.Italian;
if (LeagueLocales.Japanese.Name == cultureInfo.Name)
return LeagueLocales.Japanese;
if (LeagueLocales.Korean.Name == cultureInfo.Name)
return LeagueLocales.Korean;
if (LeagueLocales.Polish.Name == cultureInfo.Name)
return LeagueLocales.Polish;
if (LeagueLocales.Portuguese.Name == cultureInfo.Name)
return LeagueLocales.Portuguese;
if (LeagueLocales.Romanian.Name == cultureInfo.Name)
return LeagueLocales.Romanian;
if (LeagueLocales.Russian.Name == cultureInfo.Name)
return LeagueLocales.Russian;
if (LeagueLocales.SpahishAR.Name == cultureInfo.Name)
return LeagueLocales.SpahishAR;
if (LeagueLocales.SpanishMX.Name == cultureInfo.Name)
return LeagueLocales.SpanishMX;
if (LeagueLocales.Spanish.Name == cultureInfo.Name)
return LeagueLocales.Spanish;
if (LeagueLocales.Thai.Name == cultureInfo.Name)
return LeagueLocales.Thai;
if (LeagueLocales.Turkish.Name == cultureInfo.Name)
return LeagueLocales.Turkish;
if (LeagueLocales.Vietnamese.Name == cultureInfo.Name)
return LeagueLocales.Vietnamese;

return LeagueLocales.English;
}

private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
HandleException(e.Exception);
Expand Down
50 changes: 50 additions & 0 deletions craftersmine.LeagueBalancer/ApplicationSettingsWindow.xaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<controls:LeagueWindow x:Class="craftersmine.LeagueBalancer.ApplicationSettingsWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:craftersmine.LeagueBalancer"
xmlns:controls="clr-namespace:craftersmine.Ui.League.Controls;assembly=craftersmine.Ui.League"
xmlns:globalization="clr-namespace:System.Globalization;assembly=System.Runtime"
xmlns:localization="clr-namespace:craftersmine.LeagueBalancer.Localization"
mc:Ignorable="d"
Title="{x:Static localization:Locale.SettingsWindow_Title}" Height="250" Width="400" ResizeMode="NoResize" WindowStartupLocation="CenterScreen"
Style="{StaticResource LeagueMainWindowStyle}">
<controls:LeagueWindow.Header>
<TextBlock Style="{StaticResource LeagueHeaderText}" Text="{x:Static localization:Locale.SettingsWindow_Title}" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="24 0 0 0"/>
</controls:LeagueWindow.Header>

<Grid Margin="16">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{x:Static localization:Locale.SettingsWindow_Label_Language}"/>
<ComboBox Grid.Row="1" Margin="0 8 0 0" ItemsSource="{Binding Source={x:Static local:ApplicationSettingsWindow.Cultures}}" x:Name="SelectedLangComboBox">
<ComboBox.ItemTemplate>
<DataTemplate DataType="{x:Type globalization:CultureInfo}">
<TextBlock>
<Run Text="{Binding Path=DisplayName, Mode=OneWay}"/> - <Run Text="{Binding Path=EnglishName, Mode=OneWay}"/>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
</StackPanel>

<Grid Grid.Row="1" Margin="8">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="1" Content="{x:Static localization:Locale.SettingsWindow_Buttons_Ok}" Style="{StaticResource LeagueButtonThickBorder}" Height="32" Click="OnOkClick"/>
</Grid>
</Grid>
</controls:LeagueWindow>
49 changes: 49 additions & 0 deletions craftersmine.LeagueBalancer/ApplicationSettingsWindow.xaml.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using craftersmine.League.CommunityDragon;
using craftersmine.Ui.League.Controls;

namespace craftersmine.LeagueBalancer
{
public partial class ApplicationSettingsWindow : LeagueWindow
{
public static ObservableCollection<CultureInfo> Cultures { get; private set; }

public ApplicationSettingsWindow()
{
Cultures = new ObservableCollection<CultureInfo>();
Cultures.Add(new CultureInfo("en-US"));
foreach (CultureInfo info in App.GetAvailableCultures())
Cultures.Add(info);

InitializeComponent();

SelectedLangComboBox.SelectedItem = SelectedLangComboBox.Items.Cast<CultureInfo>().FirstOrDefault(c => c.Name == Settings.Default.Language);
}

private void OnOkClick(object sender, RoutedEventArgs e)
{
string lang = ((CultureInfo)SelectedLangComboBox.SelectedValue).Name;
if (Settings.Default.Language == lang)
MessageBox.Show("It is required to restart application in order to apply language!",
"Restart required!", MessageBoxButton.OK, MessageBoxImage.Information);
Settings.Default.Language = lang;
Settings.Default.Save();

this.Close();
}
}
}
19 changes: 10 additions & 9 deletions craftersmine.LeagueBalancer/CrashHandlerWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:craftersmine.LeagueBalancer"
xmlns:controls="clr-namespace:craftersmine.Ui.League.Controls;assembly=craftersmine.Ui.League"
xmlns:localization="clr-namespace:craftersmine.LeagueBalancer.Localization"
mc:Ignorable="d"
Title="An application has crashed!" Height="425" Width="525" x:Name="Wnd" ResizeMode="NoResize"
Title="{x:Static localization:Locale.CrashHandlerWindow_Title}" Height="425" Width="525" x:Name="Wnd" ResizeMode="NoResize"
WindowStartupLocation="CenterScreen"
Style="{StaticResource LeagueMainWindowStyle}">
<controls:LeagueWindow.Header>
<StackPanel Grid.Row="0">
<TextBlock Margin="24 4 4 4" Text="Unfortunatelly, the application has crashed!" Style="{StaticResource LeagueHeaderText}" TextWrapping="Wrap"/>
<TextBlock Margin="24 4 4 4" Text="In order to debug and fix the problem, please open an issue at project GitHub page. Please include following information in text format." LineHeight="14" Style="{StaticResource LeagueDefaultText}" TextWrapping="Wrap"/>
<TextBlock Margin="24 4 4 4" Text="{x:Static localization:Locale.CrashHandlerWindow_Title}" Style="{StaticResource LeagueHeaderText}" TextWrapping="Wrap"/>
<TextBlock Margin="24 4 4 4" Text="{x:Static localization:Locale.CrashHandlerWindow_Description}" LineHeight="14" Style="{StaticResource LeagueDefaultText}" TextWrapping="Wrap"/>
</StackPanel>
</controls:LeagueWindow.Header>
<Grid>
Expand All @@ -23,11 +24,11 @@
</Grid.RowDefinitions>

<StackPanel Grid.Row="1" Margin="8">
<TextBlock Text="Exception type:"/>
<TextBlock Text="{x:Static localization:Locale.CrashHandlerWindow_Label_ExceptionType}"/>
<TextBox Margin="0 4 0 0" IsReadOnly="True" Text="{Binding ElementName=Wnd, Path=Type, Mode=OneWay}"/>
<TextBlock Text="Exception message:" Margin="0 4 0 0"/>
<TextBlock Text="{x:Static localization:Locale.CrashHandlerWindow_Label_ExceptionMessage}" Margin="0 4 0 0"/>
<TextBox Margin="0 4 0 0" IsReadOnly="True" Text="{Binding ElementName=Wnd, Path=Message, Mode=OneWay}"/>
<TextBlock Text="Exception stacktrace:" Margin="0 4 0 0"/>
<TextBlock Text="{x:Static localization:Locale.CrashHandlerWindow_Label_ExceptionStacktrace}" Margin="0 4 0 0"/>
<TextBox Margin="0 4 0 0" IsReadOnly="True" TextWrapping="NoWrap" AcceptsReturn="True" Text="{Binding ElementName=Wnd, Path=StackTrace, Mode=OneWay}" Height="150" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"/>
</StackPanel>

Expand All @@ -39,9 +40,9 @@
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

<Button Grid.Column="1" Content="Copy Info to Clipboard" Height="32" Width="150" Margin="0 0 8 0" Click="CopyInfoClick"/>
<Button Grid.Column="2" Content="Open GitHub Issues" Height="32" Width="150" Margin="0 0 8 0" Click="OpenGithubIssuesClick"/>
<Button Grid.Column="3" Height="32" Content="Close application" Width="120" Click="CloseAppClick"/>
<Button Grid.Column="1" Content="{x:Static localization:Locale.CrashHandlerWindow_Buttons_CopyToClipboard}" Height="32" Width="150" Margin="0 0 8 0" Click="CopyInfoClick"/>
<Button Grid.Column="2" Content="{x:Static localization:Locale.CrashHandlerWindow_Buttons_OpenIssues}" Height="32" Width="150" Margin="0 0 8 0" Click="OpenGithubIssuesClick"/>
<Button Grid.Column="3" Height="32" Content="{x:Static localization:Locale.CrashHandlerWindow_Buuttons_CloseApp}" Width="120" Click="CloseAppClick"/>
</Grid>
</Grid>
</controls:LeagueWindow>
33 changes: 17 additions & 16 deletions craftersmine.LeagueBalancer/LeagueRegion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using craftersmine.LeagueBalancer.Localization;
using craftersmine.Riot.Api.Common;

namespace craftersmine.LeagueBalancer
Expand All @@ -18,52 +19,52 @@ public LeagueRegion(RiotPlatform region)
switch (Region)
{
case RiotPlatform.Russia:
RegionName = "Russia";
RegionName = Locale.Region_Russia;
break;
case RiotPlatform.EuropeWest:
RegionName = "Europe West";
RegionName = Locale.Region_EuropeWest;
break;
case RiotPlatform.EuropeNordicEast:
RegionName = "Europe Nordic East";
RegionName = Locale.Region_EuropeNordicEast;
break;
case RiotPlatform.NorthAmerica:
RegionName = "North America";
RegionName = Locale.Region_NorthAmerica;
break;
case RiotPlatform.Brazil:
RegionName = "Brazil";
RegionName = Locale.Region_Brazil;
break;
case RiotPlatform.Japan:
RegionName = "Japan";
RegionName = Locale.Region_Japan;
break;
case RiotPlatform.Korea:
RegionName = "Korea";
RegionName = Locale.Region_Korea;
break;
case RiotPlatform.LatinAmericaNorth:
RegionName = "Latin America North";
RegionName = Locale.Region_LatinAmericaNorth;
break;
case RiotPlatform.LatinAmericaSouth:
RegionName = "Latin America South";
RegionName = Locale.Region_LatinAmericaSouth;
break;
case RiotPlatform.Oceania:
RegionName = "Oceania";
RegionName = Locale.Region_Oceania;
break;
case RiotPlatform.Turkey:
RegionName = "Turkey";
RegionName = Locale.Region_Turkey;
break;
case RiotPlatform.Philippines:
RegionName = "Philippines";
RegionName = Locale.Region_Philippines;
break;
case RiotPlatform.Singapore:
RegionName = "Singapore";
RegionName = Locale.Region_Singapore;
break;
case RiotPlatform.Taiwan:
RegionName = "Taiwan";
RegionName = Locale.Region_Taiwan;
break;
case RiotPlatform.Thailand:
RegionName = "Thailand";
RegionName = Locale.Region_Thailand;
break;
case RiotPlatform.Vietnam:
RegionName = "Vietnam";
RegionName = Locale.Region_Vietnam;
break;
}
}
Expand Down

0 comments on commit 337b8e8

Please sign in to comment.