Browse Source

Add useCurrentCultureIfCultureNameIsNull option.

pull/3792/head
Halil İbrahim Kalkan 7 years ago
parent
commit
c71550b98c
  1. 6
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/ITemplateContentProvider.cs
  2. 83
      framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateContentProvider.cs

6
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/ITemplateContentProvider.cs

@ -8,13 +8,15 @@ namespace Volo.Abp.TextTemplating
Task<string> GetContentOrNullAsync( Task<string> GetContentOrNullAsync(
[NotNull] string templateName, [NotNull] string templateName,
[CanBeNull] string cultureName = null, [CanBeNull] string cultureName = null,
bool tryDefaults = true bool tryDefaults = true,
bool useCurrentCultureIfCultureNameIsNull = true
); );
Task<string> GetContentOrNullAsync( Task<string> GetContentOrNullAsync(
[NotNull] TemplateDefinition templateDefinition, [NotNull] TemplateDefinition templateDefinition,
[CanBeNull] string cultureName = null, [CanBeNull] string cultureName = null,
bool tryDefaults = true bool tryDefaults = true,
bool useCurrentCultureIfCultureNameIsNull = true
); );
} }
} }

83
framework/src/Volo.Abp.TextTemplating/Volo/Abp/TextTemplating/TemplateContentProvider.cs

@ -1,4 +1,5 @@
using System.Globalization; using System;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
@ -26,9 +27,10 @@ namespace Volo.Abp.TextTemplating
} }
public virtual Task<string> GetContentOrNullAsync( public virtual Task<string> GetContentOrNullAsync(
[NotNull] string templateName, [NotNull] string templateName,
[CanBeNull] string cultureName = null, [CanBeNull] string cultureName = null,
bool tryDefaults = true) bool tryDefaults = true,
bool useCurrentCultureIfCultureNameIsNull = true)
{ {
var template = _templateDefinitionManager.Get(templateName); var template = _templateDefinitionManager.Get(templateName);
return GetContentOrNullAsync(template, cultureName); return GetContentOrNullAsync(template, cultureName);
@ -37,7 +39,8 @@ namespace Volo.Abp.TextTemplating
public virtual async Task<string> GetContentOrNullAsync( public virtual async Task<string> GetContentOrNullAsync(
[NotNull] TemplateDefinition templateDefinition, [NotNull] TemplateDefinition templateDefinition,
[CanBeNull] string cultureName = null, [CanBeNull] string cultureName = null,
bool tryDefaults = true) bool tryDefaults = true,
bool useCurrentCultureIfCultureNameIsNull = true)
{ {
Check.NotNull(templateDefinition, nameof(templateDefinition)); Check.NotNull(templateDefinition, nameof(templateDefinition));
@ -47,64 +50,50 @@ namespace Volo.Abp.TextTemplating
$"No template content contributor was registered. Use {nameof(AbpTextTemplatingOptions)} to register contributors!" $"No template content contributor was registered. Use {nameof(AbpTextTemplatingOptions)} to register contributors!"
); );
} }
using (var scope = ServiceScopeFactory.CreateScope()) using (var scope = ServiceScopeFactory.CreateScope())
{ {
var searchCultureName = cultureName ?? string templateString = null;
CultureInfo.CurrentUICulture.Name;
var contributors = Options.ContentContributors
.Select(type => (ITemplateContentContributor) scope.ServiceProvider.GetRequiredService(type))
.Reverse()
.ToArray();
//Try to get from the requested culture
var templateString = await GetContentOrNullAsync(
contributors,
new TemplateContentContributorContext(
templateDefinition,
scope.ServiceProvider,
searchCultureName
)
);
if (templateString != null) if (cultureName == null && useCurrentCultureIfCultureNameIsNull)
{ {
return templateString; cultureName = CultureInfo.CurrentUICulture.Name;
} }
if (!tryDefaults) var contributors = CreateTemplateContentContributors(scope.ServiceProvider);
//Try to get from the requested culture
if (cultureName != null)
{ {
if (templateDefinition.IsInlineLocalized && cultureName == null) templateString = await GetContentOrNullAsync(
{ contributors,
//Try to get culture independent content new TemplateContentContributorContext(
templateString = await GetContentOrNullAsync( templateDefinition,
contributors, scope.ServiceProvider,
new TemplateContentContributorContext( cultureName
templateDefinition, )
scope.ServiceProvider, );
null
)
);
if (templateString != null) if (templateString != null)
{ {
return templateString; return templateString;
}
} }
}
if (!tryDefaults)
{
return null; return null;
} }
//Try to get from same culture without country code //Try to get from same culture without country code
if (searchCultureName.Contains("-")) //Example: "tr-TR" if (cultureName != null && cultureName.Contains("-")) //Example: "tr-TR"
{ {
templateString = await GetContentOrNullAsync( templateString = await GetContentOrNullAsync(
contributors, contributors,
new TemplateContentContributorContext( new TemplateContentContributorContext(
templateDefinition, templateDefinition,
scope.ServiceProvider, scope.ServiceProvider,
CultureHelper.GetBaseCultureName(searchCultureName) CultureHelper.GetBaseCultureName(cultureName)
) )
); );
@ -113,7 +102,7 @@ namespace Volo.Abp.TextTemplating
return templateString; return templateString;
} }
} }
if (templateDefinition.IsInlineLocalized) if (templateDefinition.IsInlineLocalized)
{ {
//Try to get culture independent content //Try to get culture independent content
@ -157,6 +146,14 @@ namespace Volo.Abp.TextTemplating
return null; return null;
} }
protected virtual ITemplateContentContributor[] CreateTemplateContentContributors(IServiceProvider serviceProvider)
{
return Options.ContentContributors
.Select(type => (ITemplateContentContributor)serviceProvider.GetRequiredService(type))
.Reverse()
.ToArray();
}
protected virtual async Task<string> GetContentOrNullAsync( protected virtual async Task<string> GetContentOrNullAsync(
ITemplateContentContributor[] contributors, ITemplateContentContributor[] contributors,
TemplateContentContributorContext context) TemplateContentContributorContext context)

Loading…
Cancel
Save