ASP.NET 5(MVC 6) - 资源本地化

che*_*xis 8 asp.net-core

我花了大约一个星期试图理解本地化如何在ASP.NET Core 1.0中运行.我已经测试了很多选项,但我无法使其正常工作.

我已经阅读了Visual Studio中的错误,我已经阅读了所有关于它现在如何工作的文章(Article1,Article2,Article3),并且我已经检查并测试了官方GitHub存储库中的所有示例.

我的目标:

我只想让它像我在ASP.NET MVC 5中那样工作.

我已经像我这样配置了我的Startup.cs:

配置部分:

var requestLocalizationOptions = new RequestLocalizationOptions
            {
                // Set options here to change middleware behavior
                SupportedCultures = new List<CultureInfo>
                {
                    new CultureInfo("en-US"),
                    new CultureInfo("es-ES")
                },
                SupportedUICultures = new List<CultureInfo>
                {
                    new CultureInfo("en-US"),
                   new CultureInfo("es-ES")

                }
            };

            app.UseRequestLocalization(requestLocalizationOptions, defaultRequestCulture: new RequestCulture("en-US"));
Run Code Online (Sandbox Code Playgroud)

配置服务部分:

// Add MVC services to the services container.
            services
                .AddMvc()
                .AddViewLocalization(options => options.ResourcesPath = "Resources")
                .AddDataAnnotationsLocalization();
Run Code Online (Sandbox Code Playgroud)

在我的文件夹资源中,我有我的.resx文件.我从官方的例子中复制了它,但没有办法......没有错误,只是没有工作.

如果我测试官方回购的本地化示例,它可以工作.但我无法修改以适应MVC 6.

我在GitHub上为我的代码创建了一个存储库并对其进行测试.(https://github.com/chemitaxis/Localization.StackOverflow)

有人可以帮帮我吗?我想很多人都有这些问题.

谢谢!!

che*_*xis 5

好的,我解决了......明天我将在GitHub上更新我的例子.

我创建了一个_ViewImports,并添加它:

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
@using System.Threading.Tasks
@using AspNet5Localization
@using AspNet5Localization.Resources
@using Microsoft.AspNet.Mvc.Localization
@using Microsoft.Extensions.Localization
@inject IStringLocalizer<AmazingResource> SR
Run Code Online (Sandbox Code Playgroud)

之后,我创建了一个HomeControllerViews/Home/Index.cshtml文件.

就像我在_ViewImports中注入了我的视图中的IStringLocalizer SR我可以在我的Razor Views中使用它只使用:

@SR["Name"]
Run Code Online (Sandbox Code Playgroud)

我不知道这是否是最佳方式,但它确实有效.如果有人能够解释最佳方法,请回答这个问题.

完整的解决方案:https://github.com/chemitaxis/Localization.StackOverflow

谢谢.

  • 令人遗憾的是,经过这么多年以及大量的CORE重塑之后,我们仍然坚持使用这种丑陋的本地化解决方案,涉及.resx文件,但现在还有一个涉及接口和依赖注入的间接层.伤心,非常伤心.我认为微软已经把这个留给了开源社区,并且没有人为此付出代价,因为如果有的话,他们不值得他们的工资...... (3认同)