ASP.NET Core 2本地化(ViewLocalizer不工作)

时间:2018-02-11 00:21:41

标签: c# asp.net-mvc asp.net-core localization .net-core

我有以下内容:

public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddLocalization(o => { o.ResourcesPath = "Resources"; });
   services.AddMvc(options =>{})
   .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
   .AddDataAnnotationsLocalization();
 }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    IList<CultureInfo> supportedCultures = new List<CultureInfo>
    {
       new CultureInfo("en"),
       new CultureInfo("ko"),
     };
     app.UseRequestLocalization(new RequestLocalizationOptions
     {
        DefaultRequestCulture = new RequestCulture("en"),
        SupportedCultures = supportedCultures,
        SupportedUICultures = supportedCultures
      });
      ......
}

我有一个Index.cshtml,其中包含以下内容(位于/Views/Home/内)。

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
......
<h2>@Localizer["QuickLinksTitle"].Value</h2>

我在.resx

内有2 Index.en.resx个文件,Index.ko.resx/Resources/Views/Home

但视图始终会显示QuickLinksTitle而不是.resx文件中的值。

两个.resx都有密钥QuickLinksTitle和相应的文本值,但它似乎从来没有从任何资源文件中读取任何内容。

我已经确认我的浏览器确实发送了正确的语言Accept-Language: ko,en-US;q=0.9,en;q=0.8

我的假设是,如果我给@Localizer['Key']它应该是读取该键的值而不是实际的键。

我知道MS希望我们执行@Localizer["Some text in default lang"]然后它具有非默认语言的密钥,但我更喜欢默认语言(英语).resx和其他语言。但是现在我甚至还没有读到.resx文件。

1 个答案:

答案 0 :(得分:1)

  

我知道MS希望我们执行@Localizer["Some text in default lang"]然后它具有非默认语言的密钥,但我更喜欢默认语言(英语).resx和其他语言

那是可行的。但是,您需要遵循约定在.resx文件中使用默认语言。

您已将 默认 语言设置为en

app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("en"),
    SupportedCultures = supportedCultures,
    SupportedUICultures = supportedCultures
});

但您已为.resx设置 本地化 en文件:

/Resources/Views/Home/Index.en.resx
/Resources/Views/Home/Index.ko.resx

对于默认语言.resx,它应该是 默认 en文件:

/Resources/Views/Home/Index.resx
/Resources/Views/Home/Index.ko.resx