tnblog
首页
登录

.net core 多语言本地化

154人阅读 2019/8/29 16:57 评论:0 手机 收藏 关注
分类: .net后台框架


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:




评价
有钱人的开发有着你们不懂的快乐!O(* ̄︶ ̄*)O
文章
6
粉丝
16
评论
8
分类
16
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}