ASP.Net MVC 3中的全球化

27

我正在尝试在我的MVC 3应用程序中实现全球化/本地化。 我不想为每种语言使用不同的视图。 请建议我如何进行。 任何支持的链接/网址将非常有帮助。

我试图在我的MVC 3应用程序中实现全球化/本地化,但不想针对每种语言创建不同的视图。 请提供建议,并分享相关链接/网址。

请参阅 ASP.NET MVC 5 中的路由和 URL 文化 - NightOwl888
4个回答

43
你可以像任何其他应用程序一样将其本地化:
  1. 创建一个文件夹,例如命名为 Resources
  2. 右击该文件夹并添加类... 选择资源文件。任意命名,例如 Strings.resx
  3. 在文件的属性中,将 Custom Tool 更改为 PublicResXFileCodeGenerator
  4. 为资源文件填充翻译键和值对(这将是默认翻译)
  5. 使用该格式创建其他以所属文化命名的资源:{name}.de.resx,例如 Strings.de.resx
  6. (这适用于 Razor) 打开 Views 文件夹中的 web.config,并将以下内容添加到 /configuration/system.web.webPages.razor/pages/namespaces 中: <add namespace="Resources" />(假设 resources 是您创建资源的文件夹名称,并且您没有更改资源文件本身的默认命名空间)此步骤意味着您不必每次想引用翻译时都要完全限定资源类。
  7. 在视图中使用翻译替换文本,如下面的代码:

    @Strings.MyString
    

视图中的字符串将根据 CultureInfo.CurrentCulture 进行自动翻译,但这不会自动为您设置。

您需要更改 CurrentCulture (可能在 Application_BeginRequest 中)。如何更改由您决定,它可以是一个路由值来设置它,或者您可以读取用户的浏览器语言。

您可以在 HttpContext.Current.Request.UserLanguages 中找到用户首选语言的列表(按顺序)。


2
在第七步中,我在web.config中进行了与高亮部分相同的操作,但出现了错误:“找不到类型或命名空间名为*****'Resource'(您是否缺少使用指令或程序集引用?)” 请详细说明或提供任何示例应用程序。 - sandeep
1
这是使其工作所需的最小内容 http://www.mediafire.com/file/5843d7tyqalv451/Globalization.zip - Martin Booth
5
请添加 <add namespace="**ProjectName**.Resources" />。这条指令的作用是引入一个名为 "ProjectName.Resources" 的命名空间。 - Simon Epskamp
你如何在 JavaScript 中访问资源字符串? - aggaton
如果您想通过JavaScript访问它们,您需要进行一些Ajax调用来调用返回字符串的服务。 - Captain Kenpachi
@aggaton,你可以在Javascript中创建字面量,使用Razor从后端获取值。 - ekkis

5
为了完善Martin Booth的出色答案(以防他的MediaFire链接消失),以下是我是如何解决的:
我使用了两个文件,因为现在我只需要英文和德语("de"): enter image description here 对于每个文件的属性,我必须手动输入Custom Tool以及Custom Tool Namespace值: enter image description here enter image description here 最后,在根Web.Config文件中,我在<system.web>部分下输入以下内容:
<globalization uiCulture="auto" culture="auto" />

当然,我也按照Martin的描述在Views文件夹下方(而不是根目录)的Web.Config文件中添加了命名空间指令。
<add namespace="ViewResources" />

然后我终于可以在我的(部分)Razor视图中强类型访问资源:

<h2>@ViewResources.Test1</h2>

顺便说一句:这也适用于MVC 4,不仅适用于MVC 3。


5

这篇文章非常好地涵盖了语言、文化和地区之间的差异,但它在Web.config中调用不完整的命名空间时犯了与上面那篇文章相同的错误。 - Chris Moschini
它提到您需要将命名空间添加到视图的web.config中。 - user342552

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接