|
5 | 5 |
|
6 | 6 | using Microsoft.Extensions.Localization; |
7 | 7 | using Microsoft.Extensions.Logging; |
8 | | -using System.Collections.Concurrent; |
9 | 8 | using System.Globalization; |
10 | 9 | using System.Reflection; |
11 | 10 | using System.Resources; |
@@ -105,33 +104,28 @@ public override LocalizedString this[string name] |
105 | 104 | return ret; |
106 | 105 | } |
107 | 106 |
|
108 | | - private readonly ConcurrentDictionary<string, object?> _missingManifestCache = []; |
109 | 107 | private string? GetStringFromJson(string name) |
110 | 108 | { |
111 | | - // <para lang="zh">从 json 本地化文件中获取字符串</para> |
112 | | - // <para lang="en">get string from json localization file</para> |
113 | 109 | var localizerStrings = MergeResolveLocalizers(CacheManager.GetAllStringsByTypeName(Assembly, typeName)); |
114 | 110 | var cacheKey = $"name={name}&culture={CultureInfo.CurrentUICulture.Name}"; |
115 | 111 | string? ret = null; |
116 | | - if (!_missingManifestCache.ContainsKey(cacheKey)) |
| 112 | + |
| 113 | + var l = localizerStrings.Find(i => i.Name == name); |
| 114 | + if (l is { ResourceNotFound: false }) |
117 | 115 | { |
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); |
128 | 123 |
|
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); |
135 | 129 | } |
136 | 130 | } |
137 | 131 | return ret; |
@@ -172,11 +166,15 @@ private List<LocalizedString> MergeResolveLocalizers(IEnumerable<LocalizedString |
172 | 166 | private void HandleMissingResourceItem(string name) |
173 | 167 | { |
174 | 168 | 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)) |
176 | 175 | { |
177 | 176 | Logger.LogInformation("{JsonStringLocalizerName} searched for '{Name}' in '{TypeName}' with culture '{CultureName}' not found.", nameof(JsonStringLocalizer), name, typeName, CultureInfo.CurrentUICulture.Name); |
178 | 177 | } |
179 | | - _missingManifestCache.TryAdd($"name={name}&culture={CultureInfo.CurrentUICulture.Name}", null); |
180 | 178 | } |
181 | 179 |
|
182 | 180 | private List<LocalizedString>? _allLocalizedStrings; |
|
0 commit comments