Skip to content

Commit fb1eb16

Browse files
authored
fix(i18n): Fix resource type case sensitive issue (masastack#386)
* fix(i18n): Fix resource type case sensitive issue * chore: modify method name
1 parent e53b83e commit fb1eb16

6 files changed

Lines changed: 57 additions & 11 deletions

File tree

src/Contrib/Globalization/Masa.Contrib.Globalization.I18n/EmbeddedResourceUtils.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,22 @@ public EmbeddedResourceUtils(params Assembly[] assemblies) : this(assemblies.ToL
1414
public EmbeddedResourceUtils(IEnumerable<Assembly> assemblies)
1515
{
1616
_list = assemblies
17-
.Select(assembly => new KeyValuePair<Assembly, string[]>(assembly, assembly.GetManifestResourceNames()))
17+
.Select(assembly => new KeyValuePair<Assembly, string[]>(assembly, GetManifestResourceNames(assembly)))
1818
.ToList();
1919
}
2020

21+
private static string[] GetManifestResourceNames(Assembly assembly)
22+
{
23+
try
24+
{
25+
return assembly.GetManifestResourceNames();
26+
}
27+
catch (Exception)
28+
{
29+
return Array.Empty<string>();
30+
}
31+
}
32+
2133
public List<KeyValuePair<Assembly, string[]>> GetResources(string resourcesDirectory)
2234
{
2335
var list = new List<KeyValuePair<Assembly, string[]>>();

src/Contrib/Globalization/Masa.Contrib.Globalization.I18n/Json/JsonConfigurationProviderByEmbedded.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private string FormatKey(string cultureName)
5757

5858
private Dictionary<string, string> FormatData()
5959
{
60-
var data = new Dictionary<string, string>();
60+
var data = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
6161
foreach (var resource in _dictionary)
6262
{
6363
data[$"{_prefix}{ConfigurationPath.KeyDelimiter}{resource.Key}"] = resource.Value;

src/Contrib/Globalization/Tests/Masa.Contrib.Globalization.I18n.Tests/I18nTest.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public void TestAddMultiResources2(string culture, string key, string expectedRe
108108
services.Configure<MasaI18nOptions>(options =>
109109
options.Resources
110110
.Add<CustomResource>()
111-
.AddJson(Path.Combine("Resources", "I18n2"),new List<CultureModel>()
111+
.AddJson(Path.Combine("Resources", "I18n2"), new List<CultureModel>()
112112
{
113113
new("zh-CN")
114114
}));
@@ -120,4 +120,26 @@ public void TestAddMultiResources2(string culture, string key, string expectedRe
120120
services.BuildServiceProvider().GetRequiredService<II18n<CustomResource>>().T(key);
121121
Assert.AreEqual(expectedResult, actualResult);
122122
}
123+
124+
[DataTestMethod]
125+
[DataRow("zh-CN", "Name3", "吉姆3")]
126+
[DataRow("zh-CN", "name3", "吉姆3")]
127+
[DataRow("en-US", "Name3", "Jim3")]
128+
[DataRow("en-US", "name3", "Jim3")]
129+
public void TestAddI18nByEmbedded(string culture, string key, string expectedResult)
130+
{
131+
var services = new ServiceCollection();
132+
services.AddI18nByEmbedded(AppDomain.CurrentDomain.GetAssemblies(), settings =>
133+
{
134+
settings.SupportedCultures = new List<CultureModel>
135+
{
136+
new("en-US"),
137+
new("zh-CN"),
138+
};
139+
settings.ResourcesDirectory = Path.Combine("Resources", "I18n3");
140+
});
141+
BuildingBlocks.Globalization.I18n.I18n.SetUiCulture(culture);
142+
var actualResult = BuildingBlocks.Globalization.I18n.I18n.T(key);
143+
Assert.AreEqual(expectedResult, actualResult);
144+
}
123145
}

src/Contrib/Globalization/Tests/Masa.Contrib.Globalization.I18n.Tests/Masa.Contrib.Globalization.I18n.Tests.csproj

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<FrameworkReference Include="Microsoft.AspNetCore.App" />
12+
<FrameworkReference Include="Microsoft.AspNetCore.App"/>
1313
<PackageReference Include="coverlet.collector" Version="$(CoverletPackageVersion)">
1414
<PrivateAssets>all</PrivateAssets>
1515
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@@ -18,20 +18,26 @@
1818
<PrivateAssets>all</PrivateAssets>
1919
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2020
</PackageReference>
21-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftTeskSdkPackageVersion)" />
22-
<PackageReference Include="MSTest.TestAdapter" Version="$(MSTestPackageVersion)" />
23-
<PackageReference Include="MSTest.TestFramework" Version="$(MSTestPackageVersion)" />
24-
<PackageReference Include="Moq" Version="$(MoqPackageVersion)" />
21+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftTeskSdkPackageVersion)"/>
22+
<PackageReference Include="MSTest.TestAdapter" Version="$(MSTestPackageVersion)"/>
23+
<PackageReference Include="MSTest.TestFramework" Version="$(MSTestPackageVersion)"/>
24+
<PackageReference Include="Moq" Version="$(MoqPackageVersion)"/>
2525
</ItemGroup>
2626

2727
<ItemGroup>
28-
<ProjectReference Include="..\..\..\..\BuildingBlocks\Configuration\Masa.BuildingBlocks.Configuration\Masa.BuildingBlocks.Configuration.csproj" />
29-
<ProjectReference Include="..\..\Masa.Contrib.Globalization.I18n\Masa.Contrib.Globalization.I18n.csproj" />
28+
<ProjectReference Include="..\..\..\..\BuildingBlocks\Configuration\Masa.BuildingBlocks.Configuration\Masa.BuildingBlocks.Configuration.csproj"/>
29+
<ProjectReference Include="..\..\Masa.Contrib.Globalization.I18n\Masa.Contrib.Globalization.I18n.csproj"/>
3030
</ItemGroup>
3131

3232
<ItemGroup>
33-
<Content Include="Resources\I18n*\*.json">
33+
<Content Include="Resources\I18n\*.json">
3434
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
3535
</Content>
36+
<Content Include="Resources\I18n2\*.json">
37+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
38+
</Content>
39+
<EmbeddedResource Include="Resources\I18n3\*.json">
40+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
41+
</EmbeddedResource>
3642
</ItemGroup>
3743
</Project>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"Name3": "Jim3"
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"Name3": "吉姆3"
3+
}

0 commit comments

Comments
 (0)