Pager should inherits from LocalizableComponent
This commit is contained in:
		| @ -105,9 +105,9 @@ | ||||
|             _iconSpan = $"<span class=\"{IconName}\"></span> "; | ||||
|         } | ||||
|  | ||||
|         Text = Localize(nameof(Text), Text); | ||||
|         Header = Localize(nameof(Header), Header); | ||||
|         Message = Localize(nameof(Message), Message); | ||||
|         Text = LocalizeResource(nameof(Text), Text); | ||||
|         Header = LocalizeResource(nameof(Header), Header); | ||||
|         Message = LocalizeResource(nameof(Message), Message); | ||||
|  | ||||
| 		_permissions = (string.IsNullOrEmpty(Permissions)) ? ModuleState.Permissions : Permissions; | ||||
|         _authorized = IsAuthorized(); | ||||
|  | ||||
| @ -116,7 +116,7 @@ | ||||
| 		} | ||||
|  | ||||
| 		_permissions = (string.IsNullOrEmpty(Permissions)) ? ModuleState.Permissions : Permissions; | ||||
| 		_text = Localize(nameof(Text), _text);		 | ||||
| 		_text = LocalizeResource(nameof(Text), _text);		 | ||||
|         _url = (ModuleId == -1) ? EditUrl(Action, _parameters) : EditUrl(ModuleId, Action, _parameters); | ||||
|         _authorized = IsAuthorized(); | ||||
|     } | ||||
|  | ||||
| @ -35,7 +35,7 @@ else | ||||
|  | ||||
|         if (!string.IsNullOrEmpty(HelpText)) | ||||
|         { | ||||
|             _helptext = Localize(nameof(HelpText), HelpText); | ||||
|             _helptext = LocalizeResource(nameof(HelpText), HelpText); | ||||
|             _labelclass = "form-label"; | ||||
|  | ||||
|             var spanclass = (!string.IsNullOrEmpty(Class)) ? " " + Class : ""; | ||||
| @ -47,7 +47,7 @@ else | ||||
|             _labelclass = "form-label" + labelclass; | ||||
|         } | ||||
|  | ||||
|         var text = Localize("Text", String.Empty); | ||||
|         var text = LocalizeResource("Text", String.Empty); | ||||
|         if (!string.IsNullOrEmpty(text)) | ||||
|         { | ||||
|             ChildContent =@<text>@text</text>; | ||||
|  | ||||
| @ -9,6 +9,7 @@ namespace Oqtane.Modules.Controls | ||||
|     public class LocalizableComponent : ModuleControlBase | ||||
|     { | ||||
|         private IStringLocalizer _localizer; | ||||
|         private IStringLocalizer _resourceLocalizer; | ||||
|  | ||||
|         [Parameter] | ||||
|         public string ResourceKey { get; set; } | ||||
| @ -18,9 +19,27 @@ namespace Oqtane.Modules.Controls | ||||
|  | ||||
|         protected bool IsLocalizable { get; private set; } | ||||
|  | ||||
|         protected string Localize(string name) => _localizer?[name] ?? name; | ||||
|         protected string Localize(string name) | ||||
|         { | ||||
|             if (_localizer == null) | ||||
|             { | ||||
|                 _localizer = CreateLocalizer(); | ||||
|             } | ||||
|  | ||||
|         protected string Localize(string propertyName, string propertyValue) | ||||
|             return _localizer[name]; | ||||
|         } | ||||
|  | ||||
|         protected string Localize(string name, params object[] arguments) | ||||
|         { | ||||
|             if (_localizer == null) | ||||
|             { | ||||
|                 _localizer = CreateLocalizer(); | ||||
|             } | ||||
|  | ||||
|             return _localizer[name, arguments]; | ||||
|         } | ||||
|  | ||||
|         protected string LocalizeResource(string propertyName, string propertyValue) | ||||
|         { | ||||
|             if (!IsLocalizable) | ||||
|             { | ||||
| @ -28,7 +47,7 @@ namespace Oqtane.Modules.Controls | ||||
|             } | ||||
|  | ||||
|             var key = $"{ResourceKey}.{propertyName}"; | ||||
|             var value = Localize(key); | ||||
|             var value = _resourceLocalizer?[key] ?? key; | ||||
|  | ||||
|             if (value == key) | ||||
|             { | ||||
| @ -53,12 +72,12 @@ namespace Oqtane.Modules.Controls | ||||
|         { | ||||
|             IsLocalizable = false; | ||||
|  | ||||
|             if (string.IsNullOrEmpty(ResourceType)) | ||||
|             if (String.IsNullOrEmpty(ResourceType)) | ||||
|             { | ||||
|                 ResourceType = ModuleState?.ModuleType; | ||||
|             } | ||||
|  | ||||
|             if (!String.IsNullOrEmpty(ResourceKey) && !string.IsNullOrEmpty(ResourceType)) | ||||
|             if (!String.IsNullOrEmpty(ResourceKey) && !String.IsNullOrEmpty(ResourceType)) | ||||
|             { | ||||
|                 var moduleType = Type.GetType(ResourceType); | ||||
|                 if (moduleType != null) | ||||
| @ -66,12 +85,34 @@ namespace Oqtane.Modules.Controls | ||||
|                     using (var scope = ServiceActivator.GetScope()) | ||||
|                     { | ||||
|                         var localizerFactory = scope.ServiceProvider.GetService<IStringLocalizerFactory>(); | ||||
|                         _localizer = localizerFactory.Create(moduleType); | ||||
|                         _resourceLocalizer = localizerFactory.Create(moduleType); | ||||
|  | ||||
|                         IsLocalizable = true; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private IStringLocalizer CreateLocalizer() | ||||
|         { | ||||
|             using (var scope = ServiceActivator.GetScope()) | ||||
|             { | ||||
|                 var controlType = GetType(); | ||||
|                 var controlTypeName = controlType.Name; | ||||
|  | ||||
|                 // Remove `1 if the control is generic type | ||||
|                 if (controlTypeName.EndsWith("`1")) | ||||
|                 { | ||||
|                     controlTypeName = controlTypeName.TrimEnd('`', '1'); | ||||
|                 } | ||||
|  | ||||
|                 var baseName = controlType.FullName[0..controlType.FullName.IndexOf(controlTypeName)].Substring("Oqtane.".Length); | ||||
|                 var localizerFactory = scope.ServiceProvider.GetService<IStringLocalizerFactory>(); | ||||
|  | ||||
|                 _localizer = localizerFactory.Create(baseName + controlTypeName, controlType.Assembly.GetName().Name); | ||||
|             } | ||||
|  | ||||
|             return _localizer; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -1,6 +1,6 @@ | ||||
| @namespace Oqtane.Modules.Controls | ||||
| @inherits ModuleControlBase | ||||
| @inject IStringLocalizer<SharedResources> Localizer | ||||
| @inherits LocalizableComponent | ||||
|  | ||||
| @typeparam TableItem | ||||
|  | ||||
| @if (ItemList != null) | ||||
| @ -49,7 +49,7 @@ | ||||
|                 <a class="page-link" @onclick=@(async () => UpdateList(_pages))><span class="oi oi-media-step-forward" title="end" aria-hidden="true"></span></a> | ||||
|             </li> | ||||
|             <li class="page-item disabled"> | ||||
|                 <a class="page-link" style="white-space: nowrap;">@Localizer["PageOfPages", @_page, @_pages]</a> | ||||
|                 <a class="page-link" style="white-space: nowrap;">@Localize("PageOfPages", _page, _pages)</a> | ||||
|             </li> | ||||
|         </ul> | ||||
|     } | ||||
| @ -157,7 +157,7 @@ | ||||
|                 <a class="page-link" @onclick=@(async () => UpdateList(_pages))><span class="oi oi-media-step-forward" title="end" aria-hidden="true"></span></a> | ||||
|             </li> | ||||
|             <li class="page-item disabled"> | ||||
|                <a class="page-link" style="white-space: nowrap;">@Localizer["PageOfPages", @_page, @_pages]</a> | ||||
|                <a class="page-link" style="white-space: nowrap;">@Localize("PageOfPages", _page, _pages)</a> | ||||
|             </li> | ||||
|         </ul> | ||||
|     } | ||||
| @ -208,7 +208,7 @@ | ||||
|     [Parameter] | ||||
|     public string RowClass { get; set; } // class for row element - ie. <tr> for Table or <div> for Grid | ||||
|  | ||||
| 	[Parameter] | ||||
|     [Parameter] | ||||
|     public string ColumnClass { get; set; } // class for column element - only applicable to Grid format | ||||
|  | ||||
|     [Parameter] | ||||
|  | ||||
| @ -49,7 +49,7 @@ | ||||
|         base.OnParametersSet(); | ||||
|  | ||||
|         _heading = !string.IsNullOrEmpty(Heading) | ||||
|             ? Localize(nameof(Heading), Heading) | ||||
|             : Localize(nameof(Name), Name); | ||||
|             ? LocalizeResource(nameof(Heading), Heading) | ||||
|             : LocalizeResource(nameof(Name), Name); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -38,11 +38,11 @@ else | ||||
|  | ||||
|         if (string.IsNullOrEmpty(Heading)) | ||||
|         { | ||||
|             Heading = Localize(nameof(Name), Name); | ||||
|             Heading = LocalizeResource(nameof(Name), Name); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             Heading = Localize(nameof(Heading), Heading); | ||||
|             Heading = LocalizeResource(nameof(Heading), Heading); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Hisham Bin Ateya
					Hisham Bin Ateya