@@ -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
0 commit comments