diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperLocalizer.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperLocalizer.cs new file mode 100644 index 0000000000..35ad5a894d --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperLocalizer.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using Volo.Abp.AspNetCore.Mvc.Localization; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers +{ + public class AbpTagHelperLocalizer : IAbpTagHelperLocalizer + { + private readonly IStringLocalizerFactory _stringLocalizerFactory; + private readonly AbpMvcDataAnnotationsLocalizationOptions _options; + + public AbpTagHelperLocalizer(IOptions options, IStringLocalizerFactory stringLocalizerFactory) + { + _stringLocalizerFactory = stringLocalizerFactory; + _options = options.Value; + } + + public string GetLocalizedText(string text, ModelExplorer explorer) + { + var localizer = GetLocalizer(explorer); + + return localizer == null ? text : localizer[text].Value; + } + + public IStringLocalizer GetLocalizer(ModelExplorer explorer) + { + return GetLocalizer(explorer); + } + + private IStringLocalizer GetStringLocalizer(ModelExplorer explorer) + { + IStringLocalizer localizer = null; + var resourceType = _options.AssemblyResources.GetOrDefault(explorer.Container.ModelType.Assembly); + + if (resourceType != null) + { + localizer = _stringLocalizerFactory.Create(resourceType); + } + + return localizer; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index e96346a6e5..043ba623fe 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -17,15 +17,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { private readonly IHtmlGenerator _generator; private readonly HtmlEncoder _encoder; - private readonly IStringLocalizerFactory _stringLocalizerFactory; - private readonly AbpMvcDataAnnotationsLocalizationOptions _options; + private readonly IAbpTagHelperLocalizer _tagHelperLocalizer; - public AbpInputTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder, IOptions options, IStringLocalizerFactory stringLocalizerFactory) + public AbpInputTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder, IAbpTagHelperLocalizer tagHelperLocalizer) { _generator = generator; _encoder = encoder; - _stringLocalizerFactory = stringLocalizerFactory; - _options = options.Value; + _tagHelperLocalizer = tagHelperLocalizer; } public override void Process(TagHelperContext context, TagHelperOutput output) @@ -189,7 +187,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form if (attribute != null) { - inputTagHelperOutput.Attributes.Add("placeholder", LocalizeText(attribute.Value)); + var placeholderLocalized = _tagHelperLocalizer.GetLocalizedText(attribute.Value, TagHelper.AspFor.ModelExplorer); + + inputTagHelperOutput.Attributes.Add("placeholder", placeholderLocalized); } } @@ -207,20 +207,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return; } - inputTagHelperOutput.Attributes.Add("aria-describedby", LocalizeText(idAttr.Value + "InfoText")); - } - - protected virtual string LocalizeText(string text) - { - IStringLocalizer localizer = null; - var resourceType = _options.AssemblyResources.GetOrDefault(TagHelper.AspFor.ModelExplorer.Container.ModelType.Assembly); - - if (resourceType != null) - { - localizer = _stringLocalizerFactory.Create(resourceType); - } + var infoText = _tagHelperLocalizer.GetLocalizedText(idAttr.Value + "InfoText", TagHelper.AspFor.ModelExplorer); - return localizer == null? text: localizer[text].Value; + inputTagHelperOutput.Attributes.Add("aria-describedby", infoText); } protected virtual bool IsInputCheckbox(TagHelperContext context, TagHelperOutput output, TagHelperAttributeList attributes) @@ -289,9 +278,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form } var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); + var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); return "" + - LocalizeText(text) + + localizedText + ""; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs index 3644f322eb..f67eafe791 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs @@ -14,13 +14,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { public class AbpRadioInputTagHelperService : AbpTagHelperService { - private readonly AbpMvcDataAnnotationsLocalizationOptions _options; - private readonly IStringLocalizerFactory _stringLocalizerFactory; + private readonly IAbpTagHelperLocalizer _tagHelperLocalizer; - public AbpRadioInputTagHelperService(IOptions options, IStringLocalizerFactory stringLocalizerFactory) + public AbpRadioInputTagHelperService(IAbpTagHelperLocalizer tagHelperLocalizer) { - _options = options.Value; - _stringLocalizerFactory = stringLocalizerFactory; + _tagHelperLocalizer = tagHelperLocalizer; } public override void Process(TagHelperContext context, TagHelperOutput output) @@ -93,13 +91,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { - IStringLocalizer localizer = null; - var resourceType = _options.AssemblyResources.GetOrDefault(explorer.Container.ModelType.Assembly); - - if (resourceType != null) - { - localizer = _stringLocalizerFactory.Create(resourceType); - } + var localizer = _tagHelperLocalizer.GetLocalizer(explorer); var selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = GetLocalizedPropertyName(localizer, explorer.ModelType, t.Name) }).ToList() : null; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 1b81374274..6176472406 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -20,15 +20,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { private readonly IHtmlGenerator _generator; private readonly HtmlEncoder _encoder; - private readonly IStringLocalizerFactory _stringLocalizerFactory; - private readonly AbpMvcDataAnnotationsLocalizationOptions _options; + private readonly IAbpTagHelperLocalizer _tagHelperLocalizer; - public AbpSelectTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder, IOptions options, IStringLocalizerFactory stringLocalizerFactory) + public AbpSelectTagHelperService(IHtmlGenerator generator, HtmlEncoder encoder, IAbpTagHelperLocalizer tagHelperLocalizer) { _generator = generator; _encoder = encoder; - _stringLocalizerFactory = stringLocalizerFactory; - _options = options.Value; + _tagHelperLocalizer = tagHelperLocalizer; } public override void Process(TagHelperContext context, TagHelperOutput output) @@ -154,12 +152,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return; } - inputTagHelperOutput.Attributes.Add("aria-describedby", LocalizeText(idAttr.Value + "InfoText")); + var infoText = _tagHelperLocalizer.GetLocalizedText(idAttr.Value + "InfoText", TagHelper.AspFor.ModelExplorer); + + inputTagHelperOutput.Attributes.Add("aria-describedby", infoText); } protected virtual string GetInfoAsHtml(TagHelperContext context, TagHelperOutput output, TagHelperOutput inputTag) { - string text = ""; + var text = ""; if (!string.IsNullOrEmpty(TagHelper.InfoText)) { @@ -179,35 +179,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form } var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); + var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); return "" + - LocalizeText(text) + + localizedText + ""; } - protected virtual string LocalizeText(string text) - { - var localizer = GetLocalizer(); - - return localizer == null ? text : localizer[text].Value; - } - - protected virtual IStringLocalizer GetLocalizer() - { - IStringLocalizer localizer = null; - var resourceType = _options.AssemblyResources.GetOrDefault(TagHelper.AspFor.ModelExplorer.Container.ModelType.Assembly); - - if (resourceType != null) - { - localizer = _stringLocalizerFactory.Create(resourceType); - } - - return localizer; - } - protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) { - var localizer = GetLocalizer(); + var localizer = _tagHelperLocalizer.GetLocalizer(explorer); var selectItems = explorer.Metadata.IsEnum ? explorer.ModelType.GetTypeInfo().GetMembers(BindingFlags.Public | BindingFlags.Static) .Select((t, i) => new SelectListItem { Value = i.ToString(), Text = GetLocalizedPropertyName(localizer, explorer.ModelType, t.Name) }).ToList() : null; diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/IAbpTagHelperLocalizer.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/IAbpTagHelperLocalizer.cs new file mode 100644 index 0000000000..8107f58d23 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/IAbpTagHelperLocalizer.cs @@ -0,0 +1,13 @@ +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.Extensions.Localization; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers +{ + public interface IAbpTagHelperLocalizer : ITransientDependency + { + string GetLocalizedText(string text, ModelExplorer explorer); + + IStringLocalizer GetLocalizer(ModelExplorer explorer); + } +}