Skip to content

Commit a82ca3f

Browse files
committed
Feedback
1 parent 8ee95fd commit a82ca3f

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

src/Components/WebAssembly/WebAssembly/src/Hosting/WebAssemblyCultureProvider.cs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -73,32 +73,45 @@ public virtual async ValueTask LoadCurrentCultureResourcesAsync()
7373
await WebAssemblyCultureProviderInterop.LoadSatelliteAssemblies(culturesToLoad);
7474
}
7575

76-
internal static string[] GetCultures(CultureInfo? cultureInfo, CultureInfo? uiCultureInfo = null)
76+
internal static string[] GetCultures(CultureInfo cultureInfo, CultureInfo? uiCultureInfo = null)
7777
{
78-
var culturesToLoad = new HashSet<string>();
79-
8078
// Once WASM is ready, we have to use .NET's assembly loading to load additional assemblies.
8179
// First calculate all possible cultures that the application might want to load. We do this by
8280
// starting from the current culture and walking up the graph of parents.
8381
// At the end of the the walk, we'll have a list of culture names that look like
8482
// [ "fr-FR", "fr" ]
85-
while (cultureInfo != null || uiCultureInfo != null)
83+
84+
var culturesToLoad = GetCultureHierarchy(cultureInfo);
85+
if (cultureInfo != uiCultureInfo)
8686
{
87-
if (cultureInfo != null && cultureInfo != CultureInfo.InvariantCulture)
87+
foreach (var culture in GetCultureHierarchy(uiCultureInfo))
8888
{
89-
culturesToLoad.Add(cultureInfo.Name);
89+
if (!culturesToLoad.Contains(culture))
90+
{
91+
culturesToLoad = culturesToLoad.Append(culture);
92+
}
93+
// If the culture is in the list, we can break because we found the common parent.
94+
else
95+
{
96+
break;
97+
}
9098
}
99+
}
100+
101+
return culturesToLoad.ToArray();
102+
}
91103

92-
if (uiCultureInfo != null && uiCultureInfo.Name != cultureInfo?.Name && uiCultureInfo != CultureInfo.InvariantCulture)
104+
private static IEnumerable<string> GetCultureHierarchy(CultureInfo? culture)
105+
{
106+
while (culture != CultureInfo.InvariantCulture && culture != null)
107+
{
108+
yield return culture.Name;
109+
if (culture == culture.Parent)
93110
{
94-
culturesToLoad.Add(uiCultureInfo.Name);
111+
break;
95112
}
96-
97-
cultureInfo = (cultureInfo?.Parent == cultureInfo || cultureInfo == CultureInfo.InvariantCulture) ? null : cultureInfo?.Parent;
98-
uiCultureInfo = (uiCultureInfo?.Parent == uiCultureInfo || uiCultureInfo == CultureInfo.InvariantCulture) ? null : uiCultureInfo?.Parent;
113+
culture = culture.Parent;
99114
}
100-
101-
return culturesToLoad.ToList().ToArray();
102115
}
103116

104117
private partial class WebAssemblyCultureProviderInterop

src/Components/WebAssembly/WebAssembly/test/Hosting/WebAssemblyCultureProviderTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ public void GetCultures_ReturnsCultureClosure(string cultureName, string[] expec
2525
}
2626

2727
[Theory]
28-
[InlineData("fr-FR", "tzm-Latn-DZ", new[] { "fr-FR", "tzm-Latn-DZ", "fr", "tzm-Latn", "tzm" })]
28+
[InlineData("fr-FR", "tzm-Latn-DZ", new[] { "fr-FR", "fr", "tzm-Latn-DZ", "tzm-Latn", "tzm" })]
29+
[InlineData("en-US", "en-GB", new[] { "en-US", "en", "en-GB" })]
2930
[InlineData("fr-FR", null, new[] { "fr-FR", "fr" })]
3031
[InlineData(null, null, new string[0])]
3132
public void GetCultures_ReturnCultureClosureWithUICulture(string cultureName, string uiCultureName, string[] expected)

0 commit comments

Comments
 (0)