ASP.NET MVC应用程序中有多种语言?

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

0
额外 作者 Marijn,
多语言网站与传出参数,请检查此多语言网站在MVC 4 C#
额外 作者 Sender,

6 答案

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

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

所以你仍然使用资源文件。

0
额外
这些工作应该如何进行?
额外 作者 Mathias Lykkegaard Lorenzen,

提到的其他解决方案中的一些解决方案对于MVC的发布版本无效(它们与以前版本的alpha / beta一起使用)。

这里有一篇很好的文章描述了一种实现本地化的方式,这种方式将是强类型的,并且不会打破控制器和视图的单元测试: MVC v1本地化指南

0
额外

Orchard项目使用名为“T”的快捷方式来执行所有页内字符串翻译。所以你会看到带有@T的标签(“A String to Translate”)。

我打算看看这是如何在幕后实施的,并有可能在未来的项目中使用它。短名称保持代码更清洁,因为它会被很多使用。

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

有关更多信息,请参阅 http://orchardproject.net

0
额外
在某些情况下,完全相同的源字符串“A String to Translate”必须根据周围环境进行不同的翻译。这在单字符串中尤其如此。
额外 作者 springy76,

我发现此资源为很有帮助

它是 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")

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

0
额外

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

当你思考这个问题时,这是有道理的,因为本地资源是aspx页面的本地资源,在控制器中,你甚至没有选择你的视图。

0
额外
@Haacked,您好,我们在asp mvc有一个购物网站,所以当用户选择阿拉伯语言时,我们想让整个网站变成阿拉伯语,我们可以使用微软bing 翻译器或microsoft 翻译器API ,还是应该购买 localize.js 以实现这一速度?
额外 作者 stom,
这也可以在剃刀视图引擎中工作吗?
额外 作者 Anwar Chandra,
是的,这对控制器是有意义的。但是查看模型呢?它们(通常)是特定于视图的,并且在视图模型代码中引用视图特定资源是有意义的。我想知道是否有一种机制来为视图及其视图模型创建一个资源文件本地...
额外 作者 Andy McCluggage,

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

Check MVC3-multi-language

0
额外