Skip to content

Commit f7fda07

Browse files
committed
dynamic load language resources
1 parent a62c4ce commit f7fda07

2 files changed

Lines changed: 16 additions & 10 deletions

File tree

‎osu.Game.Rulesets.Space/Localisation/SpaceStrings.cs‎

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,24 @@
22

33
using System;
44
using System.Globalization;
5+
using System.Linq;
56
using System.Resources;
67
using osu.Framework.Localisation;
78

89
namespace osu.Game.Rulesets.Space.Localisation
910
{
1011
public static class SpaceStrings
1112
{
12-
private static readonly ResourceManager vietnamese = new ResourceManager("osu.Game.Rulesets.Space.Localisation.SpaceStrings.vi", typeof(SpaceStrings).Assembly);
13-
private static readonly ResourceManager japanese = new ResourceManager("osu.Game.Rulesets.Space.Localisation.SpaceStrings.ja", typeof(SpaceStrings).Assembly);
13+
private static readonly System.Collections.Generic.Dictionary<string, ResourceManager> resources =
14+
typeof(SpaceStrings).Assembly.GetManifestResourceNames()
15+
.Where(name => name.StartsWith(typeof(SpaceStrings).FullName + ".", StringComparison.Ordinal)
16+
&& name.EndsWith(".resources", StringComparison.Ordinal)
17+
&& name.Length > typeof(SpaceStrings).FullName!.Length + ".resources".Length + 1)
18+
.ToDictionary(
19+
name => name.Substring(typeof(SpaceStrings).FullName!.Length + 1, name.Length - typeof(SpaceStrings).FullName!.Length - ".resources".Length - 1),
20+
name => new ResourceManager(name.Substring(0, name.Length - ".resources".Length), typeof(SpaceStrings).Assembly),
21+
StringComparer.OrdinalIgnoreCase
22+
);
1423

1524
public static LocalisableString Get(string english) =>
1625
new LocalisableString(new SpaceString(english));
@@ -46,12 +55,10 @@ private sealed class SpaceString : ILocalisableStringData
4655
public SpaceString(string english) => this.english = english;
4756

4857
public string GetLocalised(LocalisationParameters parameters) =>
49-
(parameters.Store?.EffectiveCulture.TwoLetterISOLanguageName switch
50-
{
51-
"vi" => vietnamese.GetString(english, CultureInfo.InvariantCulture),
52-
"ja" => japanese.GetString(english, CultureInfo.InvariantCulture),
53-
_ => null,
54-
}) ?? english;
58+
parameters.Store != null
59+
&& resources.TryGetValue(parameters.Store.EffectiveCulture.TwoLetterISOLanguageName, out var resource)
60+
? resource.GetString(english, CultureInfo.InvariantCulture) ?? english
61+
: english;
5562

5663
public bool Equals(ILocalisableStringData? other) =>
5764
other is SpaceString value && english == value.english;

‎osu.Game.Rulesets.Space/osu.Game.Rulesets.Space.csproj‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
</PropertyGroup>
99
<ItemGroup>
1010
<EmbeddedResource Include="Resources\**" />
11-
<EmbeddedResource Update="Localisation\SpaceStrings.vi.resx" WithCulture="false" LogicalName="osu.Game.Rulesets.Space.Localisation.SpaceStrings.vi.resources" />
12-
<EmbeddedResource Update="Localisation\SpaceStrings.ja.resx" WithCulture="false" LogicalName="osu.Game.Rulesets.Space.Localisation.SpaceStrings.ja.resources" />
11+
<EmbeddedResource Update="Localisation\SpaceStrings.*.resx" WithCulture="false" LogicalName="osu.Game.Rulesets.Space.Localisation.%(Filename).resources" />
1312
</ItemGroup>
1413
<ItemGroup>
1514
<PackageReference Include="ppy.osu.Game" Version="2026.916.0" />

0 commit comments

Comments
 (0)