【发布时间】:2015-07-30 10:32:31
【问题描述】:
我正在尝试将现有的 ASP.NET MVC 5 项目迁移到 MVC 6 vNext 项目,虽然我已经能够解决并解决大部分问题,但我似乎找不到任何有关如何使用 RESX 的文档MVC 6 中用于本地化的资源文件
我的 ViewModel 正在使用类似
的语句 [Required(ErrorMessageResourceType = typeof(Resources.MyProj.Messages), ErrorMessageResourceName = "FieldRequired")]
只要正确包含 RESX 并且正确设置访问修饰符,这在 MVC 5 中运行良好,但在 vNext 项目中似乎不起作用 有谁知道如何在 MVC 6 vNext 项目中使用 RESX?
我在这里和 GIT 中心网站上看到了一些帖子,其中说 ASP.NET 5 / MVC 6 的本地化故事已经完成,但我找不到任何使用资源字符串的合适示例。
使用上面的代码给我一个错误
错误 CS0246 找不到类型或命名空间名称“资源” (您是否缺少 using 指令或程序集引用?)
编辑:更改文本以澄清我正在寻找在 vNext (MVC 6) 项目中实现本地化,我能够使其在 MVC 5 中工作。
编辑 2:在实施 Mohammed 的答案后,本地化位开始工作,但我现在遇到了一个新错误。
一旦我包含
"Microsoft.AspNet.Localization": "1.0.0-beta7-10364",
"Microsoft.Framework.Localization": "1.0.0-beta7-10364",
打包并在 Startup.cs 的 ConfigureServices 中添加以下行
services.AddMvcLocalization();
执行以下代码时出现新错误。
public class HomeController : Controller
{
private readonly IHtmlLocalizer _localizer;
public HomeController(IHtmlLocalizer<HomeController> localizer)
{
_localizer = localizer;
}
....
错误:
处理请求时发生未处理的异常。
InvalidOperationException:无法解析服务类型 'Microsoft.Framework.Runtime.IApplicationEnvironment' 尝试 激活 'Microsoft.Framework.Localization.ResourceManagerStringLocalizerFactory'。 Microsoft.Framework.DependencyInjection.ServiceLookup.Service.CreateCallSite(ServiceProvider 提供者,ISet`1 callSiteChain)
无法确定它是我缺少的依赖还是代码中存在问题
编辑 3:
致任何仍在寻找解决方案的人。此时,您可以使用 Muhammad Rehan Saee 的答案中的代码在您的 CSHTML 中获得本地化支持。然而,在验证属性中启用本地化的故事尚未完成(在本次编辑时:2015 年 9 月 8 日) 在 GITHUB 网站上查看以下 mvc 的问题:
https://github.com/aspnet/Mvc/issues/2766#issuecomment-137192942
PS : 为了修复 InvalidOperationException 我做了以下操作
以所有依赖为beta7-*并清除所有内容 我的 C:\Users\.dnx\packages 摆脱了错误。
关于我提出的问题的详细信息:
https://github.com/aspnet/Mvc/issues/2893#issuecomment-127164729
编辑:2015 年 12 月 25 日
现在终于可以在 MVC 6 中使用了。
在这里写了一篇快速的博文:http://pratikvasani.github.io/archive/2015/12/25/MVC-6-localization-how-to/
【问题讨论】:
-
@Coulton:我可以在我现有的 MVC 5 项目中使用 RESX,就像你在上面的链接中提到的那样,我的问题是在新的 vNext 项目的 MVC 6 中不起作用。我正在寻找一种在 MVC 6 中使用现有 Resx 文件的方法
标签: asp.net-mvc asp.net-core asp.net-core-mvc