App_LocalResources如何与MVC一起使用?

时间:2010-06-04 01:22:22

标签: .net asp.net-mvc localization internationalization

我一直在研究我的第一个MVC应用程序,我想将其本地化。我知道如何使用App_GlobalResources,但我更喜欢使用App_LocalResources。

在典型的WebForms应用程序中,您将App_LocalResources文件夹放在与ASPX文件相同的目录中......这在MVC中是相同的(IE:我将它们放在“views”目录中的相应子文件夹中)吗?

此外,在视图中访问App_GlobalResources时,您可以这样做<%=Html.Encode(Resources.Index.Title)%>但是我无法使用App_LocalResources执行此操作。我不想让我<label runat="server"来利用meta:resourcekey


修改

我发现了一种方法可以做到这一点,但我不确定这是否是最好的方法。这是想法

  1. 您将App_LocalResources文件夹作为子文件夹放在各自的View文件夹中
  2. 您创建与您的观看次数相对应的resx文件... IE:Index.resxAbout.resx
  3. 您将Resx文件属性设置为“Public”(PublicResXFileCodeGenerator),“Embeded Resource”,“Views。[viewname]”namespace
  4. 创建一个名为“Title”的新资源名称,并在Value中添加您想要的任何内容。
  5. 现在我可以使用类似的东西来引用本地资源

    <%= MyProj.Views.Home.Index.Title%>

    我看到的唯一问题是资源是嵌入的,我无法在不重新编译项目的情况下添加新的语言环境。

    Here is my reference on this method.

2 个答案:

答案 0 :(得分:16)

您不应将App_GlobalResources或App_LocalResources与MVC一起使用。这是因为这些资源的运作方式。这些资源未嵌入到您的项目中,而是由ASP.NET运行时编译。这意味着当您不在ASP.NET运行时内运行时,您的资源将无法使用,这意味着如果您在其中使用资源,您将无法对视图和控制器进行单元测试。

This post提供了有关它的更多详细信息。

相反,您应该使用自己在问题中提到的方法。随意放置您的资源,并将其设置为“嵌入式资源”,自定义工具应为“PublicResXFileCodeGenerator”。

答案 1 :(得分:1)

我知道这并没有直接回答这个问题,但我认为你真正想要的是“如何使用ASP.NET MVC进行本地化”。

您可以查看此stackoverflow.com问题的答案,看看它们是否有助于解答您要解决的问题:how-to-localize-asp-net-mvc-application