为 ASP.NET MVC 应用程序中的界面支持多种语言的最佳方式是什么?我见过人们将资源文件用于其他应用程序。这仍然是最好的方法吗?
6 回答
如果您使用默认视图引擎,则本地资源在视图中工作。但是,如果您需要在控制器操作中获取资源字符串,则无法获取本地资源,而必须使用全局资源。
当您考虑它时,这是有道理的,因为本地资源是 aspx 页面的本地资源,并且在控制器中,您甚至还没有选择您的视图。
我发现这个资源很有帮助
它是HttpContext.Current.GetGlobalResourceString和HttpContext.Current.GetLocalResourceString的包装器,允许您像这样调用资源......
// default global resource
Html.Resource("GlobalResource, ResourceName")
// global resource with optional arguments for formatting
Html.Resource("GlobalResource, ResourceName", "foo", "bar")
// default local resource
Html.Resource("ResourceName")
// local resource with optional arguments for formatting
Html.Resource("ResourceName", "foo", "bar")
我发现的唯一问题是控制器无法访问本地资源字符串。
是的,资源仍然是在 .NET 环境中支持多种语言的最佳方式。因为它们易于参考,甚至更容易添加新语言。
Site.resx
Site.en.resx
Site.en-US.resx
Site.fr.resx
etc...
所以你是对的,仍然使用资源文件。
Orchard 项目使用一种称为“T”的快捷方式来完成所有页内字符串翻译。所以你会看到带有@T("A String to Translate") 的标签。
我打算看看这是如何在幕后实现的,并可能在未来的项目中使用它。短名称使代码更简洁,因为它会被大量使用。
我喜欢这种方法的是原始字符串(在这种情况下为英语)在代码中仍然很容易看到,并且不需要在资源工具或其他位置中查找来解码实际字符串应该是什么。
有关更多信息,请参见http://orchardproject.net。
作为答案提到的其他一些解决方案不适用于已发布的 MVC 版本(它们与以前版本的 alpha/beta 版本一起使用)。
这是一篇很好的文章,描述了一种实现强类型本地化的方法,并且不会破坏控制器和视图的单元测试:MVC v1 的本地化指南
这是另一种选择,您将可以访问控制器中的 CurrentUICulture:
检查MVC3-多语言