Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions WheelWizard.Test/Features/Settings/SettingsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using Testably.Abstractions;
using Testably.Abstractions.Testing;
using WheelWizard.DolphinInstaller;
using WheelWizard.Resources.Languages;
using WheelWizard.Settings;
using WheelWizard.Settings.Types;

Expand Down Expand Up @@ -178,11 +179,47 @@ public void Subscribe_Throws_WhenHandlerIsNull()
[Collection("SettingsFeature")]
public class SettingsLocalizationServiceTests
{
[Fact]
public void LanguageDisplayNames_UseAppliedResourceCulture()
{
var originalSettingsCulture = WheelWizard.Resources.Languages.Settings.Culture;
var dutchCulture = new CultureInfo("nl");
var germanCulture = new CultureInfo("de");

try
{
WheelWizard.Resources.Languages.Settings.Culture = dutchCulture;
var englishInDutch = SettingValues.WhWzLanguages["en"]();

WheelWizard.Resources.Languages.Settings.Culture = germanCulture;
var englishInGerman = SettingValues.WhWzLanguages["en"]();

Assert.Contains(
WheelWizard.Resources.Languages.Settings.ResourceManager.GetString("Value_Language_English", dutchCulture)!,
englishInDutch
);
Assert.Contains(
WheelWizard.Resources.Languages.Settings.ResourceManager.GetString("Value_Language_English", germanCulture)!,
englishInGerman
);
Assert.NotEqual(englishInDutch, englishInGerman);
}
finally
{
WheelWizard.Resources.Languages.Settings.Culture = originalSettingsCulture;
}
}

[Fact]
public void Initialize_SetsCurrentCulture_FromLanguageSetting()
{
var originalCulture = CultureInfo.CurrentCulture;
var originalUiCulture = CultureInfo.CurrentUICulture;
var originalDefaultCulture = CultureInfo.DefaultThreadCurrentCulture;
var originalDefaultUiCulture = CultureInfo.DefaultThreadCurrentUICulture;
var originalCommonCulture = Common.Culture;
var originalPhrasesCulture = Phrases.Culture;
var originalSettingsCulture = WheelWizard.Resources.Languages.Settings.Culture;
var signalBus = SettingsTestUtils.CreateSettingsSignalBus();
var settingsManager = Substitute.For<ISettingsManager>();
var languageSetting = new WhWzSetting(typeof(string), "WW_Language", "fr");
Expand All @@ -196,11 +233,21 @@ public void Initialize_SetsCurrentCulture_FromLanguageSetting()

Assert.Equal("fr", CultureInfo.CurrentCulture.TwoLetterISOLanguageName);
Assert.Equal("fr", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
Assert.Equal("fr", CultureInfo.DefaultThreadCurrentCulture?.TwoLetterISOLanguageName);
Assert.Equal("fr", CultureInfo.DefaultThreadCurrentUICulture?.TwoLetterISOLanguageName);
Assert.Equal("fr", Common.Culture.TwoLetterISOLanguageName);
Assert.Equal("fr", Phrases.Culture.TwoLetterISOLanguageName);
Assert.Equal("fr", WheelWizard.Resources.Languages.Settings.Culture.TwoLetterISOLanguageName);
}
finally
{
CultureInfo.CurrentCulture = originalCulture;
CultureInfo.CurrentUICulture = originalUiCulture;
CultureInfo.DefaultThreadCurrentCulture = originalDefaultCulture;
CultureInfo.DefaultThreadCurrentUICulture = originalDefaultUiCulture;
Common.Culture = originalCommonCulture;
Phrases.Culture = originalPhrasesCulture;
WheelWizard.Resources.Languages.Settings.Culture = originalSettingsCulture;
}
}

Expand All @@ -209,6 +256,11 @@ public void PublishLanguageSignal_UpdatesCulture_WhenLanguageChanges()
{
var originalCulture = CultureInfo.CurrentCulture;
var originalUiCulture = CultureInfo.CurrentUICulture;
var originalDefaultCulture = CultureInfo.DefaultThreadCurrentCulture;
var originalDefaultUiCulture = CultureInfo.DefaultThreadCurrentUICulture;
var originalCommonCulture = Common.Culture;
var originalPhrasesCulture = Phrases.Culture;
var originalSettingsCulture = WheelWizard.Resources.Languages.Settings.Culture;
var signalBus = SettingsTestUtils.CreateSettingsSignalBus();
var settingsManager = Substitute.For<ISettingsManager>();
var languageSetting = new WhWzSetting(typeof(string), "WW_Language", "en");
Expand All @@ -224,11 +276,21 @@ public void PublishLanguageSignal_UpdatesCulture_WhenLanguageChanges()

Assert.Equal("de", CultureInfo.CurrentCulture.TwoLetterISOLanguageName);
Assert.Equal("de", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
Assert.Equal("de", CultureInfo.DefaultThreadCurrentCulture?.TwoLetterISOLanguageName);
Assert.Equal("de", CultureInfo.DefaultThreadCurrentUICulture?.TwoLetterISOLanguageName);
Assert.Equal("de", Common.Culture.TwoLetterISOLanguageName);
Assert.Equal("de", Phrases.Culture.TwoLetterISOLanguageName);
Assert.Equal("de", WheelWizard.Resources.Languages.Settings.Culture.TwoLetterISOLanguageName);
}
finally
{
CultureInfo.CurrentCulture = originalCulture;
CultureInfo.CurrentUICulture = originalUiCulture;
CultureInfo.DefaultThreadCurrentCulture = originalDefaultCulture;
CultureInfo.DefaultThreadCurrentUICulture = originalDefaultUiCulture;
Common.Culture = originalCommonCulture;
Phrases.Culture = originalPhrasesCulture;
WheelWizard.Resources.Languages.Settings.Culture = originalSettingsCulture;
}
}
}
Expand Down
1 change: 1 addition & 0 deletions WheelWizard/Features/Settings/ISettingsServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,5 @@ public interface ISettingsStartupInitializer
public interface ISettingsLocalizationService
{
void Initialize();
void ApplyCurrentLanguage();
}
15 changes: 12 additions & 3 deletions WheelWizard/Features/Settings/SettingsLocalizationService.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using System.Globalization;
using CommonResource = WheelWizard.Resources.Languages.Common;
using PhrasesResource = WheelWizard.Resources.Languages.Phrases;
using SettingsResource = WheelWizard.Resources.Languages.Settings;

namespace WheelWizard.Settings;

Expand All @@ -14,20 +17,26 @@ public void Initialize()
return;

_subscription = settingsSignalBus.Subscribe(OnSignal);
ApplyCulture();
ApplyCurrentLanguage();
_initialized = true;
}

private void OnSignal(SettingChangedSignal signal)
{
if (signal.Setting == settingsManager.WW_LANGUAGE)
ApplyCulture();
ApplyCurrentLanguage();
}

private void ApplyCulture()
public void ApplyCurrentLanguage()
{
var newCulture = new CultureInfo(settingsManager.Get<string>(settingsManager.WW_LANGUAGE));
CultureInfo.DefaultThreadCurrentCulture = newCulture;
CultureInfo.DefaultThreadCurrentUICulture = newCulture;
CultureInfo.CurrentCulture = newCulture;
CultureInfo.CurrentUICulture = newCulture;

CommonResource.Culture = newCulture;
PhrasesResource.Culture = newCulture;
SettingsResource.Culture = newCulture;
}
}
10 changes: 8 additions & 2 deletions WheelWizard/Features/Settings/Types/SettingConstants.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
namespace WheelWizard.Settings.Types;

using SettingsResource = WheelWizard.Resources.Languages.Settings;

public enum DolphinShaderCompilationMode
{
Default = 0,
Expand Down Expand Up @@ -43,18 +45,22 @@ public static bool IsValidWindowScale(object? value)
{ "nl", () => CreateLanguageString("Dutch") },
{ "fr", () => CreateLanguageString("France") },
{ "de", () => CreateLanguageString("German") },
{ "fi", () => CreateLanguageString("Finnish") },
{ "cs", () => CreateLanguageString("Czech") },
{ "ja", () => CreateLanguageString("Japanese") },
{ "es", () => CreateLanguageString("Spanish") },
{ "it", () => CreateLanguageString("Italian") },
{ "pt", () => CreateLanguageString("Portuguese") },
{ "ru", () => CreateLanguageString("Russian") },
{ "ko", () => CreateLanguageString("Korean") },
{ "tr", () => CreateLanguageString("Turkish") },
};

private static string CreateLanguageString(string language)
{
var lang = Resources.Languages.Settings.ResourceManager.GetString($"Value_Language_{language}")!;
var langOg = Resources.Languages.Settings.ResourceManager.GetString($"Value_Language_{language}Og");
var culture = SettingsResource.Culture ?? System.Globalization.CultureInfo.CurrentUICulture;
var lang = SettingsResource.ResourceManager.GetString($"Value_Language_{language}", culture) ?? language;
var langOg = SettingsResource.ResourceManager.GetString($"Value_Language_{language}Og", culture);
if (lang == langOg || langOg == null || langOg == "-")
return lang;

Expand Down
78 changes: 78 additions & 0 deletions WheelWizard/Resources/Languages/Common.cs.resx
Original file line number Diff line number Diff line change
Expand Up @@ -401,4 +401,82 @@
<data name="PageTitle_MyMiis" xml:space="preserve">
<value>Moje Miiy</value>
</data>
<data name="Action_Apply" xml:space="preserve">
<value>Použít</value>
</data>
<data name="Action_CopyFriendCode" xml:space="preserve">
<value>Kopírovat Kód Kamaráda</value>
</data>
<data name="Action_DisableAll" xml:space="preserve">
<value>Vypnout Vše</value>
</data>
<data name="Action_DoManually" xml:space="preserve">
<value>Udělat ručně</value>
</data>
<data name="Action_EnableAll" xml:space="preserve">
<value>Zapnout Vše</value>
</data>
<data name="Action_SaveExternalMii" xml:space="preserve">
<value>Přidat Mii do "Moje Miiy“</value>
</data>
<data name="Action_ViewCustomChars" xml:space="preserve">
<value>Zobrazit Vlastní Postavy</value>
</data>
<data name="Action_ViewRoom" xml:space="preserve">
<value>Zobrazit Místnost</value>
</data>
<data name="Attribute_AverageRoomVr" xml:space="preserve">
<value>Průměrný ZH</value>
</data>
<data name="Attribute_Enabled" xml:space="preserve">
<value>Zapnuto</value>
</data>
<data name="Attribute_FriendCode" xml:space="preserve">
<value>Kód Kamaráda</value>
</data>
<data name="Attribute_Mii_HorizontalPosition" xml:space="preserve">
<value>Horizontální Poloha (Vlevo/Vpravo)</value>
</data>
<data name="Attribute_Mii_MustacheVerticalPosition" xml:space="preserve">
<value>Vertikální Poloha Kníru (Nahoru/Dolů)</value>
</data>
<data name="Attribute_Mii_Rotation" xml:space="preserve">
<value>Rotace (Vleva/Vprava)</value>
</data>
<data name="Attribute_Mii_SpaceBetween" xml:space="preserve">
<value>Rozteč Mezi Nimi</value>
</data>
<data name="Attribute_Mii_VerticalPosition" xml:space="preserve">
<value>Vertikální Poloha (Nahoru/Dolů)</value>
</data>
<data name="Attribute_RacesPlayed" xml:space="preserve">
<value>Zahrané závody</value>
</data>
<data name="Attribute_TotalGamesPlayed" xml:space="preserve">
<value>Celkem zahraných her</value>
</data>
<data name="Attribute_TotalGamesWon" xml:space="preserve">
<value>Celkem vyhraných her</value>
</data>
<data name="PageTitle_RoomDetails" xml:space="preserve">
<value>Podrobnosti o Místnosti</value>
</data>
<data name="State_ConfigNotFinished" xml:space="preserve">
<value>Konfigurace Nedokončena</value>
</data>
<data name="State_Custom" xml:space="preserve">
<value>Vlastní</value>
</data>
<data name="State_Extracting" xml:space="preserve">
<value>Extrahování souborů...</value>
</data>
<data name="State_Installed" xml:space="preserve">
<value>Instalováno</value>
</data>
<data name="State_Success" xml:space="preserve">
<value>Úspěch</value>
</data>
<data name="State_Unknown" xml:space="preserve">
<value>Stav: Neznámý</value>
</data>
</root>
4 changes: 2 additions & 2 deletions WheelWizard/Resources/Languages/Common.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -315,10 +315,10 @@
<value>Geschlecht</value>
</data>
<data name="Attribute_Gender_Female" xml:space="preserve">
<value>Männlich</value>
<value>Weiblich</value>
</data>
<data name="Attribute_Gender_Male" xml:space="preserve">
<value>Weiblich</value>
<value>Männlich</value>
</data>
<data name="Action_DoManually" xml:space="preserve">
<value>Manuell durchführen</value>
Expand Down
Loading
Loading