@@ -18,11 +18,11 @@ namespace BootstrapBlazor.Components;
1818/// <param name="assembly"></param>
1919/// <param name="typeName"></param>
2020/// <param name="baseName"></param>
21- /// <param name="ignoreLocalizerMissing "></param>
21+ /// <param name="jsonLocalizationOptions "></param>
2222/// <param name="logger"></param>
2323/// <param name="resourceNamesCache"></param>
2424/// <param name="localizationMissingItemHandler"></param>
25- internal class JsonStringLocalizer ( Assembly assembly , string typeName , string baseName , bool ignoreLocalizerMissing , ILogger logger , IResourceNamesCache resourceNamesCache , ILocalizationMissingItemHandler localizationMissingItemHandler ) : ResourceManagerStringLocalizer ( new ResourceManager ( baseName , assembly ) , assembly , baseName , resourceNamesCache , logger )
25+ internal class JsonStringLocalizer ( Assembly assembly , string typeName , string baseName , JsonLocalizationOptions jsonLocalizationOptions , ILogger logger , IResourceNamesCache resourceNamesCache , ILocalizationMissingItemHandler localizationMissingItemHandler ) : ResourceManagerStringLocalizer ( new ResourceManager ( baseName , assembly ) , assembly , baseName , resourceNamesCache , logger )
2626{
2727 private Assembly Assembly { get ; } = assembly ;
2828
@@ -72,26 +72,39 @@ public override LocalizedString this[string name]
7272 }
7373 }
7474
75- private string ? GetStringSafely ( string name ) => GetStringFromService ( name ) ?? GetStringSafely ( name , null ) ?? GetStringSafelyFromJson ( name ) ;
75+ private string ? GetStringSafely ( string name ) => GetStringFromService ( name ) ?? GetStringFromResourceManager ( name ) ?? GetStringFromJson ( name ) ;
7676
7777 private string ? GetStringFromService ( string name )
7878 {
7979 // get string from inject service
8080 string ? ret = null ;
81- var localizer = Utility . GetStringLocalizerFromService ( Assembly , typeName ) ;
82- if ( localizer != null && localizer is not JsonStringLocalizer )
81+ if ( jsonLocalizationOptions . DisableGetLocalizerFromService == false )
8382 {
84- var l = localizer [ name ] ;
85- if ( ! l . ResourceNotFound )
83+ var localizer = Utility . GetStringLocalizerFromService ( Assembly , typeName ) ;
84+ if ( localizer != null && localizer is not JsonStringLocalizer )
8685 {
87- ret = l . Value ;
86+ var l = localizer [ name ] ;
87+ if ( ! l . ResourceNotFound )
88+ {
89+ ret = l . Value ;
90+ }
8891 }
8992 }
9093 return ret ;
9194 }
9295
96+ private string ? GetStringFromResourceManager ( string name )
97+ {
98+ string ? ret = null ;
99+ if ( jsonLocalizationOptions . DisableGetLocalizerFromResourceManager == false )
100+ {
101+ ret = GetStringSafely ( name , CultureInfo . CurrentUICulture ) ;
102+ }
103+ return ret ;
104+ }
105+
93106 private readonly ConcurrentDictionary < string , object ? > _missingManifestCache = [ ] ;
94- private string ? GetStringSafelyFromJson ( string name )
107+ private string ? GetStringFromJson ( string name )
95108 {
96109 // get string from json localization file
97110 var localizerStrings = MegerResolveLocalizers ( CacheManager . GetAllStringsByTypeName ( Assembly , typeName ) ) ;
@@ -114,22 +127,18 @@ public override LocalizedString this[string name]
114127
115128 private List < LocalizedString > MegerResolveLocalizers ( IEnumerable < LocalizedString > ? localizerStrings )
116129 {
117- var localizers = new List < LocalizedString > ( ) ;
118- var resolveLocalizers = CacheManager . GetTypeStringsFromResolve ( typeName ) ;
119- localizers . AddRange ( resolveLocalizers ) ;
120-
130+ var localizers = new List < LocalizedString > ( CacheManager . GetTypeStringsFromResolve ( typeName ) ) ;
121131 if ( localizerStrings != null )
122132 {
123133 localizers . AddRange ( localizerStrings ) ;
124134 }
125135 return localizers ;
126136 }
127137
128-
129138 private void HandleMissingResourceItem ( string name )
130139 {
131140 localizationMissingItemHandler . HandleMissingItem ( name , typeName , CultureInfo . CurrentUICulture . Name ) ;
132- if ( ! ignoreLocalizerMissing )
141+ if ( jsonLocalizationOptions . IgnoreLocalizerMissing == false )
133142 {
134143 Logger . LogInformation ( "{JsonStringLocalizerName} searched for '{Name}' in '{TypeName}' with culture '{CultureName}' not found." , nameof ( JsonStringLocalizer ) , name , typeName , CultureInfo . CurrentUICulture . Name ) ;
135144 }
@@ -160,10 +169,13 @@ public override IEnumerable<LocalizedString> GetAllStrings(bool includeParentCul
160169 IEnumerable < LocalizedString > ? GetAllStringsFromService ( )
161170 {
162171 IEnumerable < LocalizedString > ? ret = null ;
163- var localizer = Utility . GetStringLocalizerFromService ( Assembly , typeName ) ;
164- if ( localizer != null && localizer is not JsonStringLocalizer )
172+ if ( jsonLocalizationOptions . DisableGetLocalizerFromService == false )
165173 {
166- ret = localizer . GetAllStrings ( includeParentCultures ) ;
174+ var localizer = Utility . GetStringLocalizerFromService ( Assembly , typeName ) ;
175+ if ( localizer != null && localizer is not JsonStringLocalizer )
176+ {
177+ ret = localizer . GetAllStrings ( includeParentCultures ) ;
178+ }
167179 }
168180 return ret ;
169181 }
@@ -172,14 +184,18 @@ public override IEnumerable<LocalizedString> GetAllStrings(bool includeParentCul
172184 // get all strings from base json localization factory
173185 IEnumerable < LocalizedString > ? GetAllStringsFromBase ( )
174186 {
175- IEnumerable < LocalizedString > ? ret = base . GetAllStrings ( includeParentCultures ) ;
176- try
177- {
178- CheckMissing ( ) ;
179- }
180- catch ( MissingManifestResourceException )
187+ IEnumerable < LocalizedString > ? ret = null ;
188+ if ( jsonLocalizationOptions . DisableGetLocalizerFromResourceManager == false )
181189 {
182- ret = null ;
190+ ret = base . GetAllStrings ( includeParentCultures ) ;
191+ try
192+ {
193+ CheckMissing ( ) ;
194+ }
195+ catch ( MissingManifestResourceException )
196+ {
197+ ret = null ;
198+ }
183199 }
184200 return ret ;
185201
0 commit comments