diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 3612fbb968c4e0dbbd889e70888d3b5809ead14a..6db1c3d67cc21bb05fdd5737056b3f9611e013d5 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@ - 5.6.3 + 5.6.4 diff --git a/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs b/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs index 6adec1c166a748f84afc8d8f36a856855d47735f..19bea5414e651b3db3a34b9a3bdca2c114304381 100644 --- a/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs +++ b/src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs @@ -28,7 +28,7 @@ namespace BootstrapBlazor.Localization.Json private readonly string _typeName; private readonly ILogger _logger; private readonly JsonLocalizationOptions _options; - private IServiceProvider _provider; + private readonly IServiceProvider _provider; private string _searchedLocation = ""; @@ -132,9 +132,10 @@ namespace BootstrapBlazor.Localization.Json /// protected virtual IEnumerable GetAllJsonStrings(bool includeParentCultures, CultureInfo culture) { + var cultureInfoName = GetCultureInfoName(culture); var resourceNames = includeParentCultures ? GetAllStringsFromCultureHierarchy(culture) - : GetAllResourceStrings(culture); + : GetAllResourceStrings(cultureInfoName); foreach (var name in resourceNames) { @@ -143,6 +144,16 @@ namespace BootstrapBlazor.Localization.Json } } + private string GetCultureInfoName(CultureInfo culture) + { + var cultureInfoName = culture.Name; + if (string.IsNullOrEmpty(cultureInfoName) && _options.FallBackToParentUICultures) + { + cultureInfoName = _options.FallbackCulture; + } + return cultureInfoName; + } + /// /// /// @@ -153,9 +164,10 @@ namespace BootstrapBlazor.Localization.Json private string? GetStringByCulture(CultureInfo culture, string name) { string? value = null; - BuildResourcesCache(culture); + var cultureName = GetCultureInfoName(culture); + BuildResourcesCache(cultureName); - if (_resourcesCache.TryGetValue(culture.Name, out var resources)) + if (_resourcesCache.TryGetValue(cultureName, out var resources)) { var resource = resources?.FirstOrDefault(s => s.Key == name); value = resource?.Value ?? null; @@ -171,7 +183,7 @@ namespace BootstrapBlazor.Localization.Json while (currentCulture != currentCulture.Parent) { - var cultureResourceNames = GetAllResourceStrings(currentCulture); + var cultureResourceNames = GetAllResourceStrings(GetCultureInfoName(currentCulture)); foreach (var resourceName in cultureResourceNames) { @@ -184,12 +196,12 @@ namespace BootstrapBlazor.Localization.Json return resourceNames; } - private IEnumerable GetAllResourceStrings(CultureInfo culture) + private IEnumerable GetAllResourceStrings(string cultureInfoName) { - BuildResourcesCache(culture); + BuildResourcesCache(cultureInfoName); var ret = Enumerable.Empty(); - if (_resourcesCache.TryGetValue(culture.Name, out var resources)) + if (_resourcesCache.TryGetValue(cultureInfoName, out var resources)) { ret = resources.Select(r => r.Key); } @@ -251,9 +263,9 @@ namespace BootstrapBlazor.Localization.Json return ret; } - private void BuildResourcesCache(CultureInfo culture) + private void BuildResourcesCache(string cultureInfoName) { - _resourcesCache.GetOrAdd(culture.Name, key => + _resourcesCache.GetOrAdd(cultureInfoName, key => { // 获得程序集中的资源文件 stream var langHandler = GetLangHandlers(key);