App_LocalResources如何与MVC一起使用?

Cha*_*ell 24 .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中放入您想要的任何内容.

现在我可以使用类似的东西来引用本地资源

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

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

这是我对这种方法的参考.

Ren*_*ené 16

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

这篇文章提供了有关它的更多细节.

相反,你应该在你的问题中使用你自己提到的方法.根据需要放置资源,并将其设置为"嵌入式资源",自定义工具应为"PublicResXFileCodeGenerator".