@@ -12,11 +12,12 @@ static I18nCache()
1212 Cache = new ConcurrentDictionary < CultureInfo , IReadOnlyDictionary < string , string > > ( ) ;
1313 }
1414
15- public static void AddLocale ( CultureInfo culture , IReadOnlyDictionary < string , string > ? locale )
15+ public static void AddLocale ( CultureInfo culture , IReadOnlyDictionary < string , string > ? locale ,
16+ bool isBuiltInLocale = false )
1617 {
1718 if ( locale is null ) return ;
1819
19- Cache . AddOrUpdate ( culture , locale , ( _ , dictionary ) => Merge ( dictionary , locale ) ) ;
20+ Cache . AddOrUpdate ( culture , locale , ( _ , exists ) => Merge ( exists , locale , isBuiltInLocale ) ) ;
2021 }
2122
2223 public static IReadOnlyDictionary < string , string > ? GetLocale ( CultureInfo culture )
@@ -30,15 +31,19 @@ public static void AddLocale(CultureInfo culture, IReadOnlyDictionary<string, st
3031
3132 public static IEnumerable < CultureInfo > GetCultures ( ) => Cache . Keys ;
3233
33- private static IReadOnlyDictionary < TK , TV > Merge < TK , TV > ( params IReadOnlyDictionary < TK , TV > [ ] dictionaries )
34+ private static IReadOnlyDictionary < string , string > Merge ( IReadOnlyDictionary < string , string > exists ,
35+ IReadOnlyDictionary < string , string > locale , bool isBuiltInLocale )
3436 {
35- var result = new Dictionary < TK , TV > ( ) ;
37+ var dict1 = isBuiltInLocale ? locale : exists ;
38+ var dict2 = isBuiltInLocale ? exists : locale ;
3639
37- foreach ( var dict in dictionaries )
40+ var result = dict1 . ToDictionary ( x => x . Key , x => x . Value ) ;
41+
42+ foreach ( var pair in dict2 )
3843 {
39- dict . ToList ( ) . ForEach ( pair => result [ pair . Key ] = pair . Value ) ;
44+ result [ pair . Key ] = pair . Value ;
4045 }
4146
4247 return result ;
4348 }
44- }
49+ }
0 commit comments