ASP.Net MVC中的全球化3

Viv*_*vek 27 globalization asp.net-mvc-3

我试图在我的MVC 3应用程序中实现全球化/本地化.我不希望每种语言都有不同的视图.请建议我如何继续.任何受支持的链接/ URL都会有很大帮助.

Mar*_*oth 43

您可以像以下任何其他应用程序一样对其进行本地化:

  1. 创建一个文件夹,称之为例如Resources
  2. 右键单击该文件夹并添加类...选择资源文件.称之为你喜欢的任何东西,例如Strings.resx
  3. 在文件属性下,将自定义工具更改为 PublicResXFileCodeGenerator
  4. 使用翻译键和值对填充资源文件(这将是默认翻译)
  5. 使用以下格式创建其他文化名称的资源:{name} .de.resx,例如Strings.de.resx
  6. (这是针对Razor)破解打开Views文件夹中的web.config并将其添加到/configuration/system.web.webPages.razor/pages/namespaces:<add namespace ="Resources"/>(假设资源是名称您创建资源的文件夹,并且您没有更改资源文件本身的默认命名空间).此步骤意味着您不必在每次要引用转换时完全限定视图中的资源类.
  7. 在视图中使用翻译代替文本,例如使用以下代码:

    @Strings.MyString
    
    Run Code Online (Sandbox Code Playgroud)

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

您需要更改CurrentCulture(可能在Application_BeginRequest).如何执行此操作取决于您,它可能是设置它的路由值,或者您可以读取用户的浏览器语言

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

  • 您应该添加<add namespace ="**ProjectName**.Resources"/> (5认同)
  • 在第7步中我也在网上做同样的事情.配置为highligted但收到错误"找不到类型或命名空间名称''资源'(你是否缺少using指令或程序集引用?)"*****"请详细说明或提供任何样本申请. (2认同)

小智 5

这是一篇关于MVC 3全球化/国际化的详细文章http://afana.me/post/aspnet-mvc-internationalization-part-2.aspx


Uwe*_*eim 5

为了向Martin Booth的回答添加一些细节(如果他的MediaFire链接可能会消失),我就是这样做的:

我使用了两个文件,因为我现在只需要英语和德语("de"):

在此输入图像描述

对于每个文件的属性,我必须为每个文件手动输入自定义工具以及自定义工具命名空间值:

在此输入图像描述

在此输入图像描述

最后,我在根Web.Config文件中输入以下<system.web>内容:

<globalization uiCulture="auto" culture="auto" />
Run Code Online (Sandbox Code Playgroud)

当然,我还在Views文件夹下面的Web.Config文件中添加了namespace指令(即不是根文件夹),正如Martin所描述的那样:

<add namespace="ViewResources" />
Run Code Online (Sandbox Code Playgroud)

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

<h2>@ViewResources.Test1</h2>
Run Code Online (Sandbox Code Playgroud)

BTW:这也适用于MVC 4,而不仅仅是MVC 3.