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

8
我花了一周时间试图理解ASP.NET Core 1.0中的本地化如何工作。我尝试了很多选项,但是无法使其正常工作。
我已经阅读了Visual Studio中的错误,阅读了所有关于它如何工作的文章(Article1Article2Article3),并且检查和测试了官方GitHub存储库中的example我的目标: 我只想让它像在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"));

配置服务部分:

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

在我的Resources文件夹中,我有我的.resx文件。我已经从官方示例中复制了它,但是无论如何...没有错误,只是不起作用。
如果我测试官方Repo的Localization示例,它可以工作。但我不能修改以适应MVC 6。
我已经在GitHub上为我的代码创建了一个存储库并进行了测试。(https://github.com/chemitaxis/Localization.StackOverflow)
有人能帮帮我吗?我认为很多人都有这些问题。
谢谢!
1个回答

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

我已经创建了一个HomeControllerViews/Home/Index.cshtml文件。

就像我在_ViewImports中注入了IStringLocalizer SR一样,我可以在我的Razor视图中使用它,只需使用以下代码:

@SR["Name"]

我不确定这是否是最好的方法,但它确实有效。如果有人能解释如何更好地做到这一点,请回答这个问题。

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

谢谢。


这正是我一直在寻找的。我尝试运行RC2示例 https://github.com/damienbod/AspNet5Localization/tree/rc2,但我无法成功。我遇到了与dnx rc2版本相关的问题。你能够成功运行这个版本吗? - feradz
还没有... 我稍后会做。我将在新分支升级。 - chemitaxis
你能否添加带有数据注释的本地化示例?我尝试过 [Required(ErrorMessageResourceName = "Name_is_required", ErrorMessageResourceType = typeof(PersonalInfo))] [MaxLength(Constants.MaxNameLength)] public string Name { get; set; } 但它不起作用。 - feradz
3
看到这样的场景令人感到悲哀,经过多年和大规模的CORE品牌改进后,我们仍然被困在这种丑陋的本地化解决方案中,其中涉及.resx文件,并且现在还涉及接口和依赖注入的更多层次的间接性。悲哀,非常悲哀。我想微软已经把这个问题留给开源社区来解决了,而且没有人会因此获得报酬,因为如果有人拿薪水的话,他们就不配得到这些薪水…… - Vi100
我同意@Vi100的观点,本地化仍然很丑陋... 我会等待https://github.com/turquoiseowl/i18n/issues/293。 - Sebastián Guerrero
我们的团队已经回到了4.5版本,现在正在迁移到使用Node.js和Express... 我们是一家拥有超过200K用户并每天增长1.5K用户的初创公司... 微软今天还没有准备好这种类型的项目... 我曾认为Core会是解决方案,但也许需要几年时间... 我最糟糕的决定是选择Core RC1... - chemitaxis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接