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);
}
}
}