Dot-Net

App_LocalResources 如何與 MVC 一起工作?

  • June 4, 2010

我一直在研究我的第一個 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]”命名空間
  4. 創建一個名為“Title”的新資源名稱,並將所需的任何內容放入 Value 中。

現在我可以使用類似這樣的方式引用本地資源

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

我看到的唯一問題是資源是嵌入的,如果不重新編譯項目,我就無法添加新的語言環境。

這是我對這種方法的參考。

您不應將 App_GlobalResources 或 App_LocalResources 與 MVC 一起使用。這是因為這些資源的工作方式。這些資源沒有嵌入到您的項目中,而是由 ASP.NET 執行時編譯。這意味著當不在 ASP.NET 執行時內執行時,您的資源將不可用,這意味著如果您在其中使用資源,您將失去對視圖和控制器進行單元測試的能力。

這篇文章提供了更多關於它的細節。

相反,您應該使用您在問題中提到的方法。將您的資源放在您想要的任何位置,並將其設置為“嵌入式資源”,自定義工具應為“PublicResXFileCodeGenerator”。

引用自:https://stackoverflow.com/questions/2970935