2008-08-06 54 views
64

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

+0

可能重复:// stackoverflow.com/questions/192465/how-to-localize-asp-net-mvc-application) – Marijn 2012-02-08 11:09:33

+0

多语言网站与传出参数,请检查此[多语言网站在MVC 4 C#](http://lesson8.blogspot .in/2013/03/multi-language-website-in-mvc-4-c.html) – Sender 2013-03-27 06:07:01

回答

40

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

当你考虑它时,这是有意义的,因为本地资源是aspx页面的本地资源,在控制器中,你甚至没有选择你的视图。

+0

这也可以在剃刀视图引擎中工作吗? – 2010-11-28 11:21:10

3

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

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

所以你是正确的仍然使用资源文件。

+0

这应该如何工作? – 2012-01-09 20:39:00

21

我发现this resource是非常有益

它的包装轮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") 

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

1

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

这里描述的方式来实现定位将被强类型,并不会打破控制器和视图的单元测试的好文章:localization guide for MVC v1

2

果园项目采用所谓的“T”的快捷方式方法做所有页内字符串翻译。所以你会看到带有@T的标签(“A String to Translate”)。

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

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

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

0

这是另一种选择,你将有机会获得的CurrentUICulture控制器:

检查MVC3-multi-language

[如何本地化ASP.NET MVC应用程序?(HTTP的