, .
, .
asp.net:
using System;
using Microsoft.Extensions.Localization;
namespace App.Utilities
{
public static class StringLocalizerFactoryExtensions
{
public static IStringLocalizer CreateConventional<T>(this IStringLocalizerFactory factory)
{
return factory.CreateConventional(typeof(T));
}
public static IStringLocalizer CreateConventional(this IStringLocalizerFactory factory, Type type)
{
if (type.Module.ScopeName != "CommonLanguageRuntimeLibrary")
{
string[] parts = type.FullName.Split(new[] { type.Assembly.FullName.Split(',')[0] }, StringSplitOptions.None);
string name = parts[parts.Length - 1].Trim('.');
return factory.CreateConventional(name);
}
else
{
return factory.Create(type);
}
}
public static IStringLocalizer CreateConventional(this IStringLocalizerFactory factory, string resourceName)
{
return factory.Create(resourceName, null);
}
public static IStringLocalizer CreateDataAnnotation(this IStringLocalizerFactory factory)
{
if (type.Module.ScopeName != "CommonLanguageRuntimeLibrary")
{
return factory.Create("DataAnnotation.Localization", "App_LocalResources");
}
else
{
return factory.Create(type);
}
}
}
}
... Startup.cs :
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
... :
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(options => options.DataAnnotationLocalizerProvider = (type, factory) => factory.CreateConventional(type));
, , , IStringLocalizerFactory.
, DataAnnotation.Localization.de-DE.resx App_LocalResources.
(Models.AccountViewModels.RegisterViewModel.en-US.resx Models/AccountViewModels/RegisterViewModel.sv-SE.resx Resources, services.AddLocalization(options => options.ResourcesPath = "Resources")), . TagHelpers HtmlHelpers .
, DisplayAttribute.Name . (v1.1.0-preview1-final +.net v4.6.2)
1:
project.json:
{
"userSecretsId": "...",
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0-preview1-*",
"Microsoft.AspNetCore.Authentication.Cookies": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics": "1.1.0-preview1-final",
"Microsoft.AspNetCore.DataProtection": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Mvc": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview3-final",
"Microsoft.ApplicationInsights.AspNetCore": "1.0.2",
"Microsoft.AspNetCore.Mvc.Localization": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Mvc.Razor": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Mvc.DataAnnotations": "1.1.0-preview1-final",
"Microsoft.Extensions.Configuration.CommandLine": "1.1.0-preview1-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.1.0-preview1-final",
"Microsoft.AspNet.WebApi.Client": "5.2.3",
"Microsoft.AspNetCore.Routing": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.1.0-preview1-final",
"Microsoft.AspNetCore.StaticFiles": "1.1.0-preview1-final",
"Microsoft.EntityFrameworkCore": "1.1.0-preview1-final",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.1.0-preview1-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.1.0-preview1-final",
"Microsoft.Extensions.Configuration.Json": "1.1.0-preview1-final",
"Microsoft.Extensions.Configuration.UserSecrets": "1.1.0-preview1-final",
"Microsoft.Extensions.Logging": "1.1.0-preview1-final",
"Microsoft.Extensions.Logging.Console": "1.1.0-preview1-final",
"Microsoft.Extensions.Logging.Debug": "1.1.0-preview1-final",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.1.0-preview1-final",
"Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": "1.0.0-preview3-final",
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": "1.0.0-preview3-final",
"Microsoft.AspNetCore.Hosting": "1.1.0-preview1-final",
"Microsoft.AspNetCore.Hosting.WindowsServices": "1.1.0-preview1-final",
"Loggr.Extensions.Logging": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0-preview1-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final",
"BundlerMinifier.Core": "2.2.296"
},
"tools": {
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview3-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview3-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final",
"Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview3-final",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview3-final",
"imports": [
"portable-net45+win8"
]
}
},
"frameworks": {
"net462": {}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"**/*.cshtml",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
2:. - , DataAnnotation.Localization App_LocalResourses, StringLocalizerFactoryExtensions. Startup.cs .
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(options => options.DataAnnotationLocalizerProvider = (type, factory) => factory.CreateDataAnnotation());