IViewLocalizer返回错误的语言

Chr*_*eld 9 c# localization asp.net-core-mvc asp.net-core

我正在尝试构建一个应该以英语和德语提供的ASP.NET核心应用程序.我的问题IViewLocalizer总是返回德语文本,即使文化设置为英语.如何获得当前文化的正确文本?

Startup.cs

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

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var cultures = new[] { new CultureInfo("en"), new CultureInfo("de") };
    app.UseRequestLocalization(new RequestLocalizationOptions 
    {
        DefaultRequestCulture = new RequestCulture("en"),
        SupportedCultures = cultures,
        SupportedUICultures = cultures                
    });

    app.UseMvc(routes =>
    {
          routes.MapRoute(
               name: "default",
               template: "{controller=Home}/{action=Index}/{id?}");
    });
}
Run Code Online (Sandbox Code Playgroud)

HomeController.cs

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

Index.cshtml

<!DOCTYPE html>
@using Microsoft.AspNetCore.Mvc.Localization;
@inject IViewLocalizer Localizer
<html>
    <body>
        <h1>@Localizer["Hello, World!"]</h1>
        <ul>
            <li>CurrentCulture: @System.Globalization.CultureInfo.CurrentCulture</li>
            <li>CurrentUICulture: @System.Globalization.CultureInfo.CurrentUICulture</li>
        </ul>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

资源文件位于 Resources\Views.Home.Index.de.resx

预期产量:

Hello, World!

CurrentCulture: en
CurrentUICulture: en

页面输出:

Hallo Welt!

CurrentCulture: en
CurrentUICulture: en

请求标题:

GET / HTTP/1.1
Host: localhost:61904
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6,de;q=0.4
Run Code Online (Sandbox Code Playgroud)

mor*_*tzg 1

如果有人在 ASP.NET core 1.1 或更高版本中遇到此问题,请尝试添加<NeutralLanguage>YOUR_DEFAULT_LANGUAGE</NeutralLanguage>如下.csproj内容:

<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
<ApplicationIcon />
<Win32Resource />
<NeutralLanguage>en</NeutralLanguage>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

它解决了我的问题,现在可以正常工作了。