зеркало из https://github.com/aspnet/Localization.git
Make resource lookup behavior overridable (#266)
This commit is contained in:
Родитель
6d5999c0df
Коммит
d84b069116
|
@ -30,4 +30,5 @@ nuget.exe
|
|||
*.*sdf
|
||||
*.ipch
|
||||
*.sln.ide
|
||||
*launchSettings.json
|
||||
*launchSettings.json
|
||||
**/Resources/*.Designer.cs
|
|
@ -1,6 +1,6 @@
|
|||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.23107.0
|
||||
VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{FB313677-BAB3-4E49-8CDB-4FA4A9564767}"
|
||||
EndProject
|
||||
|
|
|
@ -37,7 +37,8 @@ namespace LocalizationSample
|
|||
#if !NETCOREAPP1_0
|
||||
supportedCultures.Add(new CultureInfo("zh-CHT"));
|
||||
#endif
|
||||
var options = new RequestLocalizationOptions {
|
||||
var options = new RequestLocalizationOptions
|
||||
{
|
||||
DefaultRequestCulture = new RequestCulture("en-US"),
|
||||
SupportedCultures = supportedCultures,
|
||||
SupportedUICultures = supportedCultures
|
||||
|
|
|
@ -50,6 +50,70 @@ namespace Microsoft.Extensions.Localization
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the resource prefix used to look up the resource.
|
||||
/// </summary>
|
||||
/// <param name="typeInfo">The type of the resource to be looked up.</param>
|
||||
/// <returns>The prefix for resource lookup.</returns>
|
||||
protected virtual string GetResourcePrefix(TypeInfo typeInfo)
|
||||
{
|
||||
if (typeInfo == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(typeInfo));
|
||||
}
|
||||
|
||||
return GetResourcePrefix(typeInfo, _hostingEnvironment.ApplicationName, _resourcesRelativePath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the resource prefix used to look up the resource.
|
||||
/// </summary>
|
||||
/// <param name="typeInfo">The type of the resource to be looked up.</param>
|
||||
/// <param name="baseNamespace">The base namespace of the application.</param>
|
||||
/// <param name="resourcesRelativePath">The folder containing all resources.</param>
|
||||
/// <returns>The prefix for resource lookup.</returns>
|
||||
/// <remarks>
|
||||
/// For the type "Sample.Controllers.Home" if there's a resourceRelativePath return
|
||||
/// "Sample.Resourcepath.Controllers.Home" if there isn't one then it would return "Sample.Controllers.Home".
|
||||
/// </remarks>
|
||||
protected virtual string GetResourcePrefix(TypeInfo typeInfo, string baseNamespace, string resourcesRelativePath)
|
||||
{
|
||||
if (typeInfo == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(typeInfo));
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(baseNamespace))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(baseNamespace));
|
||||
}
|
||||
|
||||
return string.IsNullOrEmpty(resourcesRelativePath)
|
||||
? typeInfo.FullName
|
||||
: baseNamespace + "." + resourcesRelativePath + TrimPrefix(typeInfo.FullName, baseNamespace + ".");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the resource prefix used to look up the resource.
|
||||
/// </summary>
|
||||
/// <param name="baseResourceName">The name of the resource to be looked up</param>
|
||||
/// <param name="baseNamespace">The base namespace of the application.</param>
|
||||
/// <returns>The prefix for resource lookup.</returns>
|
||||
protected virtual string GetResourcePrefix(string baseResourceName, string baseNamespace)
|
||||
{
|
||||
if (string.IsNullOrEmpty(baseResourceName))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(baseResourceName));
|
||||
}
|
||||
|
||||
var locationPath = baseNamespace == _hostingEnvironment.ApplicationName ?
|
||||
baseNamespace + "." + _resourcesRelativePath :
|
||||
baseNamespace + ".";
|
||||
baseResourceName = locationPath + TrimPrefix(baseResourceName, baseNamespace + ".");
|
||||
|
||||
return baseResourceName;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a <see cref="ResourceManagerStringLocalizer"/> using the <see cref="Assembly"/> and
|
||||
/// <see cref="Type.FullName"/> of the specified <see cref="Type"/>.
|
||||
|
@ -67,10 +131,7 @@ namespace Microsoft.Extensions.Localization
|
|||
var assembly = typeInfo.Assembly;
|
||||
|
||||
// Re-root the base name if a resources path is set
|
||||
var baseName = string.IsNullOrEmpty(_resourcesRelativePath)
|
||||
? typeInfo.FullName
|
||||
: _hostingEnvironment.ApplicationName + "." + _resourcesRelativePath
|
||||
+ TrimPrefix(typeInfo.FullName, _hostingEnvironment.ApplicationName + ".");
|
||||
var baseName = GetResourcePrefix(typeInfo);
|
||||
|
||||
return _localizerCache.GetOrAdd(baseName, _ =>
|
||||
new ResourceManagerStringLocalizer(
|
||||
|
@ -96,7 +157,7 @@ namespace Microsoft.Extensions.Localization
|
|||
|
||||
location = location ?? _hostingEnvironment.ApplicationName;
|
||||
|
||||
baseName = location + "." + _resourcesRelativePath + TrimPrefix(baseName, location + ".");
|
||||
baseName = GetResourcePrefix(baseName, location);
|
||||
|
||||
return _localizerCache.GetOrAdd($"B={baseName},L={location}", _ =>
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче