ASP.NET MVC应用程序中的多种语言?
在ASP.NET MVC应用程序中为接口支持多种语言的最佳方式是什么? 我见过有人使用其他应用程序的资源文件。 这仍然是最好的方法吗?
如果您使用默认视图引擎,则本地资源在视图中工作。 但是,如果您需要在控制器操作中获取资源string,则无法获取本地资源,必须使用全局资源。
当你思考这个问题时,这是有道理的,因为本地资源是一个aspx页面的本地资源,在控制器中,你甚至没有select你的视图。
我发现这个资源是非常有帮助的
它是一个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")
我发现唯一的问题是控制器不能访问本地资源string。
是的资源仍然是在.NET环境中支持多种语言的最佳方式。 因为它们很容易引用,甚至更容易添加新的语言。
Site.resx Site.en.resx Site.en-US.resx Site.fr.resx etc...
所以你是正确的仍然使用资源文件。
Orchard项目使用一种名为“T”的快捷方法来执行所有页内string翻译。 所以你会看到带有@T(“A String to Translate”)的标签。
我打算看看这是如何在幕后实施,并有可能在未来的项目中使用它。 短名称保持代码更清洁,因为它将被用于很多 。
我喜欢这种方法的原始string(在这种情况下是英文字母)在代码中仍然很容易看到,并且不需要在资源工具或某个其他位置查找以解码实际string应该在的位置。
一些其他解决scheme提到的答案不适用于MVC的发布版本(他们与以前版本的alpha / beta一起工作)。
下面是一篇很好的文章,描述了一种实现本地化的方法,这种方法将是强types的,不会打破控制器和视图的unit testing: MVC v1的本地化指南
这是另一种select,您可以访问控制器中的CurrentUICulture:
检查MVC3-多语言