About Inline localization in template engines
Is there an existing issue for this?
- [X] I have searched the existing issues
Is your feature request related to a problem? Please describe the problem.
I noticed that the template engine rendering is already asynchronous, but when I use an asynchronous inline localization resource, it will cause rendering failure because it usesStringLocalizerFactory.CreateByResourceName
Affected Code: https://github.com/abpframework/abp/blob/b46dfa722a36b3bd9cd903def1793b114ca639b4/framework/src/Volo.Abp.TextTemplating.Core/Volo/Abp/TextTemplating/TemplateRenderingEngineBase.cs#L32-L40
Describe the solution you'd like
Replacing synchronous functions with asynchronous localized resources
example:
public abstract class TemplateRenderingEngineBase : ITemplateRenderingEngine
{
public abstract string Name { get; }
protected readonly ITemplateDefinitionManager TemplateDefinitionManager;
protected readonly ITemplateContentProvider TemplateContentProvider;
protected readonly IStringLocalizerFactory StringLocalizerFactory;
public TemplateRenderingEngineBase(
ITemplateDefinitionManager templateDefinitionManager,
ITemplateContentProvider templateContentProvider,
IStringLocalizerFactory stringLocalizerFactory)
{
TemplateDefinitionManager = templateDefinitionManager;
TemplateContentProvider = templateContentProvider;
StringLocalizerFactory = stringLocalizerFactory;
}
public abstract Task<string> RenderAsync(string templateName, object? model = null, string? cultureName = null, Dictionary<string, object>? globalContext = null);
protected virtual async Task<string?> GetContentOrNullAsync(TemplateDefinition templateDefinition)
{
return await TemplateContentProvider.GetContentOrNullAsync(templateDefinition);
}
protected async virtual Task<IStringLocalizer?> GetLocalizerOrNullAsync(TemplateDefinition templateDefinition)
{
if (templateDefinition.LocalizationResourceName != null)
{
return await StringLocalizerFactory.CreateByResourceNameOrNullAsync(templateDefinition.LocalizationResourceName);
}
return StringLocalizerFactory.CreateDefaultOrNull();
}
}
Additional context
No response
but when I use an asynchronous inline localization resource,
Can you share your code?
but when I use an asynchronous inline localization resource,
Can you share your code?
After several tests, I believe it is due to the unreasonable design of my IExternalLocalizationStore interface implementation. The problem is that the template engine runs before the initialization of IExternalLocalizationStore