diff --git a/Oqtane.Client/Modules/Controls/Label.razor b/Oqtane.Client/Modules/Controls/Label.razor index 8bde0ce7..c54ccc41 100644 --- a/Oqtane.Client/Modules/Controls/Label.razor +++ b/Oqtane.Client/Modules/Controls/Label.razor @@ -43,10 +43,7 @@ else _openLabel += ">"; - if (!string.IsNullOrEmpty(ResourceKey)) - { - ChildContent =@@Localizer[$"{ResourceKey}.Text"]; - HelpText = Localizer[$"{ResourceKey}.{nameof(HelpText)}"]; - } + ChildContent =@@Localize("Text"); + HelpText = Localize(nameof(HelpText)); } } diff --git a/Oqtane.Client/Modules/Controls/LocalizableComponent.cs b/Oqtane.Client/Modules/Controls/LocalizableComponent.cs index e442c152..328ba8d5 100644 --- a/Oqtane.Client/Modules/Controls/LocalizableComponent.cs +++ b/Oqtane.Client/Modules/Controls/LocalizableComponent.cs @@ -7,10 +7,17 @@ namespace Oqtane.Modules.Controls { public class LocalizableComponent : ModuleControlBase { + private IStringLocalizer _localizer; + [Parameter] public string ResourceKey { get; set; } - protected IStringLocalizer Localizer { get; private set; } + protected string Localize(string name) + { + var key = $"{ResourceKey}.{name}"; + + return _localizer?[key] ?? key; + } protected override void OnParametersSet() { @@ -25,7 +32,7 @@ namespace Oqtane.Modules.Controls // HACK: Use ServiceActivator instead of injecting IHttpContextAccessor, because HttpContext throws NRE in WebAssembly runtime using (var scope = ServiceActivator.GetScope()) { - Localizer = (IStringLocalizer)scope.ServiceProvider.GetService(localizerType); + _localizer = (IStringLocalizer)scope.ServiceProvider.GetService(localizerType); } } }