Asp.net mvc ASP.NET MVC应用程序中的多种语言?

Asp.net mvc ASP.NET MVC应用程序中的多种语言?,asp.net-mvc,internationalization,multilingual,Asp.net Mvc,Internationalization,Multilingual,在ASP.NET MVC应用程序中,为接口支持多种语言的最佳方式是什么?我见过有人将资源文件用于其他应用程序。这仍然是最好的方式吗?是的,资源仍然是在.NET环境中支持多种语言的最好方式。因为它们很容易被引用,甚至更容易添加新的语言 Site.resx Site.en.resx Site.en-US.resx Site.fr.resx etc... 因此,您仍然可以使用资源文件。如果您使用的是默认视图引擎,那么本地资源将在视图中工作。但是,如果需要在控制器操作中获取资源字符串,则无法获取本地资

在ASP.NET MVC应用程序中,为接口支持多种语言的最佳方式是什么?我见过有人将资源文件用于其他应用程序。这仍然是最好的方式吗?

是的,资源仍然是在.NET环境中支持多种语言的最好方式。因为它们很容易被引用,甚至更容易添加新的语言

Site.resx
Site.en.resx
Site.en-US.resx
Site.fr.resx
etc...

因此,您仍然可以使用资源文件。

如果您使用的是默认视图引擎,那么本地资源将在视图中工作。但是,如果需要在控制器操作中获取资源字符串,则无法获取本地资源,而必须使用全局资源

考虑到本地资源是aspx页面的本地资源,而在控制器中,您甚至还没有选择视图,因此这一点很有意义。

我发现这非常有用

它是围绕HttpContext.Current.GetGlobalResourceStringHttpContext.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")

我发现的唯一问题是,控制器无法访问本地资源字符串。

答案中提到的其他一些解决方案不适用于MVC的发布版本(它们适用于以前版本的alpha/beta)


下面是一篇很好的文章,介绍了一种实现本地化的方法,这种方法将是强类型的,并且不会破坏控制器和视图的单元测试:

Orchard项目使用一种称为“T”的快捷方式来完成所有页内字符串的翻译。因此,您将看到带有@T(“要翻译的字符串”)的标记

我打算看看这是如何在幕后实现的,并可能在未来的项目中使用它。短名称保持代码的整洁,因为它将被大量使用

我喜欢这种方法的地方是原始字符串(本例中为英语)在代码中仍然很容易看到,并且不需要在资源工具或其他位置查找来解码实际字符串


有关更多信息,请参阅

这是另一个选项,您可以访问控制器中的CurrentUICulture:


选中

是这对控制器来说是有意义的。但是视图模型呢?它们(通常)特定于视图,在视图模型代码中引用特定于视图的资源是有意义的。我想知道是否有一种机制可以使资源文件成为视图及其视图模型的本地文件…@Haacked,您好,我们有一个asp mvc的购物网站,所以当用户选择阿拉伯语时,我们希望整个网站都是阿拉伯语,我们是否可以使用microsoft bing或microsoft,或者我是否应该购买来实现此快速功能?如果没有传递参数,可能会复制多语言网站,请检查此项。在某些情况下,完全相同的源字符串“要翻译的字符串”必须根据周围的上下文进行不同的翻译。这尤其发生在单字字符串中。