了解MVC6 RC1中的资源文件

Reo*_*oul 14 localization resx asp.net-core-mvc asp.net-core asp.net-core-localization

我一直在努力探讨如何最好地在MVC6中为多种语言实现资源文件,但由于每次发布的更改让我对如何正确实现它们感到困惑.需要什么,约束是什么?

我看过几篇文章:

https://damienbod.com/2015/10/21/asp-net-5-mvc-6-localization/

MVC 6:如何使用RESX文件?

http://pratikvasani.github.io/archive/2015/12/25/MVC-6-localization-how-to/

我正在尝试设置资源文件,以便我的用户可以使用英语和德语,这可以基于浏览器设置或帐户中的个人设置.

实现这一目标的最佳方式是什么?

提前致谢!

编辑:

因此,根据文章,我已将以下代码添加到Startup.cs:

        services.AddLocalization(options =>
                options.ResourcesPath = "Resources");
        services.AddMvc()
                .AddViewLocalization(Microsoft.AspNet.Mvc.Razor.LanguageViewLocationExpanderFormat.Suffix)
                .AddDataAnnotationsLocalization();

        var supportedCultures = new[]
        {
            new CultureInfo("de-DE"),
            new CultureInfo("en-US")
        };

        //Set Default Localization Culture
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        }, new RequestCulture(new CultureInfo("en-US")));
Run Code Online (Sandbox Code Playgroud)

然后在Resources文件夹中我创建了带有文件名的新resx文件:

  • "Views.Shared._LocalizationTest.en-US.resx"

  • "Views.Shared._LocalizationTest.de-DE.resx"

我的部分观点如下:

@using Microsoft.AspNet.Localization
@using Microsoft.AspNet.Mvc.Localization
@inject IViewLocalizer Localizer

<div>
     @Localizer["TestString"]
</div>
Run Code Online (Sandbox Code Playgroud)

我似乎仍然遗漏了一些东西,因为我正在显示"TestString"而不是"Test String"表示英语或"German:Test String"(根据我的资源文件).

有任何想法吗?

Ric*_*SFT 2

ASP.NET Core 默认方法是不在资源文件中包含默认语言字符串,而只是将它们包装在代码中。因此,您可以使用本地化程序中包含的英语字符串编写应用程序,并拥有一个德语资源文件。请参阅我的文章https://learn.microsoft.com/aspnet/core/fundamentals/localization

  • 这真的是个好主意吗?我的意思是,当你开始使用一个小应用程序时,它很方便,但对我来说听起来很容易出错。我的意思是,如果您更改默认语言中的标点符号,那么您必须去替换所有其他本地化文件中的“键”,否则您的本地化变量将不再在其他本地化文件中找到? (4认同)