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


Answers:


42

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

考虑一下这是有道理的,因为本地资源对于apx页面是本地的,并且在控制器中,您甚至还没有选择视图。


是的,这对于控制器确实有意义。但是视图模型呢?它们(通常)特定于视图,因此在视图模型代码中引用视图特定的资源将是有意义的。我想知道是否有一种机制可以使资源文件位于视图及其视图模型的本地...
Andy McCluggage 2010年

@Haacked,您好,我们在asp mvc中有一个购物网站,因此当用户选择阿拉伯语时,我们要使整个网站都变为阿拉伯语,我们可以使用microsoft bing转换器还是Microsoft转换器API还是应该购买localize.js来实现此目的?快?
Shaiju T 2015年

22

我发现此资源非常有帮助

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

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


3

是的,资源仍然是.NET环境中支持多种语言的最佳方法。因为它们易于参考,甚至更容易添加新语言。

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

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


2

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

我打算看一下如何在后台实现它,并在将来的项目中潜在地使用它。短名称使代码更整洁,因为它将被大量使用

我喜欢这种方法的原因是原始字符串(在这种情况下为英文)在代码中仍然很容易看到,并且不需要在资源工具或其他位置进行查找就可以解码出实际的字符串。

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


在某些情况下,完全相同的源字符串“要转换的字符串”必须根据周围的上下文进行不同的转换。特别是单字字符串。
springy76'2

1

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.