Skip to content

Commit 83da57d

Browse files
authored
🐛 fix(I18n): Overwritting built-int locale resources doesn't work (#621)
1 parent 9d16a95 commit 83da57d

2 files changed

Lines changed: 13 additions & 8 deletions

File tree

src/Component/BlazorComponent/I18n/I18n.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private void SetCultureInternal(CultureInfo culture, CultureInfo uiCulture)
4444
CultureInfo.DefaultThreadCurrentUICulture = uiCulture;
4545
}
4646

47-
public void AddLocale(CultureInfo culture, IReadOnlyDictionary<string, string>? locale) => I18nCache.AddLocale(culture, locale);
47+
public void AddLocale(CultureInfo culture, IReadOnlyDictionary<string, string>? locale) => I18nCache.AddLocale(culture, locale, true);
4848

4949
public IEnumerable<CultureInfo> SupportedCultures => I18nCache.GetCultures();
5050

src/Component/BlazorComponent/I18n/I18nCache.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)