.net core 多语言本地化
电脑版发表于:2019/8/29 16:57
1.Demo主体结构
主要用到以下四个类进行:
HomeController.cs
Startup.cs
Views.Home.Index.zh.resx
Index.cshtml
如下图所示:
2.实战演练
Startup.cs:
... //在 ConfigureServices 方法里面添加下列两句代码 //配置本地化服务 将本地化服务添加到服务容器。 上面的代码还可将资源路径设置为“资源”。 services.AddLocalization(x => x.ResourcesPath = "Resources"); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2) //下面也是配置本地化服务 添加对本地化视图文件的支持。 在此示例视图中,本地化基于视图文件后缀。 例 如,Index.fr.cshtml 文件中的“fr”。 .AddViewLocalization(Microsoft.AspNetCore.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix); ... //在 Configure 方法里面添加下列几句代码 //语言 开始 var supportedCultures = new[] { new CultureInfo("en-GB"), new CultureInfo("zh-CN") }; app.UseRequestLocalization(new RequestLocalizationOptions() { DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en-GB"), //格式化数字,dates,etc. SupportedCultures = supportedCultures, //UI 字符串,我们需要本地化 SupportedUICultures = supportedCultures }); app.UseAuthentication();
可以看到 AddLocalization() 的 ResourcesPath 可以设置资源路径
supportedCultures 可以设置语言有哪几种类型
资源命名规范: 视图文件夹.控制器名称.方法名称.语言名称(当不区分-后缀可只写前缀).resx
Views.Home.Index.zh.resx:
HomeController.cs:
public class HomeController : Controller { private readonly IHtmlLocalizer _localizer; public HomeController(IHtmlLocalizer<HomeController> localizer) { _localizer = localizer; } public IActionResult Index() { return View(); } public IActionResult Setting(string type) { Response.Cookies.Append( CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(type)), new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1), IsEssential = true, Path = "/" } ); return RedirectToAction("Index"); } }
Index.cshtml:
@using Microsoft.AspNetCore.Mvc.Localization; @* inject:提供本地化字符串 *@ @inject IViewLocalizer localizer @{ ViewData["Title"] = localizer["Home"]; } <h2>@localizer["Home"]</h2> <p>@localizer["hi"]</p> <a asp-action="Setting" asp-controller="Home" asp-route-type="en-GB">@localizer["set language"]</a>
Result:
than: