Skip to content

Commit cc7435c

Browse files
authored
feat(JsonStringLocalizer): remove missing localizer item cache (#7812)
* feat: 增加缺失资源文件键值缓存清空逻辑 * chore: bump version 10.5.0-beta03 * doc: 增加注释 * refactor: 修复拼写错误 * refactor: 移除 Reset 方法 * refactor: 移除缺失资源键值缓存 * test: 更新单元测试
1 parent 548634f commit cc7435c

File tree

2 files changed

+26
-24
lines changed

2 files changed

+26
-24
lines changed

src/BootstrapBlazor/Localization/Json/JsonStringLocalizer.cs

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
using Microsoft.Extensions.Localization;
77
using Microsoft.Extensions.Logging;
8-
using System.Collections.Concurrent;
98
using System.Globalization;
109
using System.Reflection;
1110
using System.Resources;
@@ -105,33 +104,28 @@ public override LocalizedString this[string name]
105104
return ret;
106105
}
107106

108-
private readonly ConcurrentDictionary<string, object?> _missingManifestCache = [];
109107
private string? GetStringFromJson(string name)
110108
{
111-
// <para lang="zh">从 json 本地化文件中获取字符串</para>
112-
// <para lang="en">get string from json localization file</para>
113109
var localizerStrings = MergeResolveLocalizers(CacheManager.GetAllStringsByTypeName(Assembly, typeName));
114110
var cacheKey = $"name={name}&culture={CultureInfo.CurrentUICulture.Name}";
115111
string? ret = null;
116-
if (!_missingManifestCache.ContainsKey(cacheKey))
112+
113+
var l = localizerStrings.Find(i => i.Name == name);
114+
if (l is { ResourceNotFound: false })
117115
{
118-
var l = localizerStrings.Find(i => i.Name == name);
119-
if (l is { ResourceNotFound: false })
120-
{
121-
ret = l.Value;
122-
}
123-
else
124-
{
125-
// <para lang="zh">如果没有找到资源信息则尝试从父类中查找</para>
126-
// <para lang="en">If resource info not found, try to find from base class</para>
127-
ret ??= GetStringFromBaseType(name);
116+
ret = l.Value;
117+
}
118+
else
119+
{
120+
// <para lang="zh">如果没有找到资源信息则尝试从父类中查找</para>
121+
// <para lang="en">If resource info not found, try to find from base class</para>
122+
ret ??= GetStringFromBaseType(name);
128123

129-
if (ret is null)
130-
{
131-
// <para lang="zh">加入缺失资源信息缓存中</para>
132-
// <para lang="en">Add to missing resource info cache</para>
133-
HandleMissingResourceItem(name);
134-
}
124+
if (ret is null)
125+
{
126+
// <para lang="zh">加入缺失资源信息缓存中</para>
127+
// <para lang="en">Add to missing resource info cache</para>
128+
HandleMissingResourceItem(name);
135129
}
136130
}
137131
return ret;
@@ -172,11 +166,15 @@ private List<LocalizedString> MergeResolveLocalizers(IEnumerable<LocalizedString
172166
private void HandleMissingResourceItem(string name)
173167
{
174168
localizationMissingItemHandler.HandleMissingItem(name, typeName, CultureInfo.CurrentUICulture.Name);
175-
if (jsonLocalizationOptions.IgnoreLocalizerMissing == false)
169+
if (jsonLocalizationOptions.IgnoreLocalizerMissing)
170+
{
171+
return;
172+
}
173+
174+
if (Logger.IsEnabled(LogLevel.Information))
176175
{
177176
Logger.LogInformation("{JsonStringLocalizerName} searched for '{Name}' in '{TypeName}' with culture '{CultureName}' not found.", nameof(JsonStringLocalizer), name, typeName, CultureInfo.CurrentUICulture.Name);
178177
}
179-
_missingManifestCache.TryAdd($"name={name}&culture={CultureInfo.CurrentUICulture.Name}", null);
180178
}
181179

182180
private List<LocalizedString>? _allLocalizedStrings;

test/UnitTest/Localization/JsonStringLocalizerTest.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ public void GetAllStrings_FromResource()
215215
Assert.NotEmpty(items);
216216
Assert.Equal("test-name", items.First(i => i.Name == "Name").Value);
217217

218-
var name = Utility.GetDisplayName(typeof(Dummy), "DummyName");
218+
var type = typeof(Dummy);
219+
var name = Utility.GetDisplayName(type, "DummyName");
219220
Assert.Equal("test-name", name);
220221
}
221222

@@ -498,5 +499,8 @@ public void GetAllStrings_FromInject()
498499
var localizer = provider.GetRequiredService<IStringLocalizer<Foo>>();
499500
var item = localizer["Foo.Name"];
500501
Assert.NotEqual("Foo.Name", item);
502+
503+
item = localizer["missing-item"];
504+
Assert.True(item.ResourceNotFound);
501505
}
502506
}

0 commit comments

Comments
 (0)