App_LocalResources 如何與 MVC 一起工作?
我一直在研究我的第一個 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編輯:
我發現了一種方法來做到這一點,但我不確定這是否是最好的方法。這是想法
- 您將
App_LocalResources文件夾作為子文件夾放在各自的 View 文件夾中- 您創建與您的視圖相對應的 resx 文件… IE:
Index.resx或About.resx- 您將 Resx 文件屬性設置為“Public”(PublicResXFileCodeGenerator)、“Embeded Resource”、“Views.[viewname]”命名空間
- 創建一個名為“Title”的新資源名稱,並將所需的任何內容放入 Value 中。
現在我可以使用類似這樣的方式引用本地資源
<%= MyProj.Views.Home.Index.Title%>我看到的唯一問題是資源是嵌入的,如果不重新編譯項目,我就無法添加新的語言環境。
您不應將 App_GlobalResources 或 App_LocalResources 與 MVC 一起使用。這是因為這些資源的工作方式。這些資源沒有嵌入到您的項目中,而是由 ASP.NET 執行時編譯。這意味著當不在 ASP.NET 執行時內執行時,您的資源將不可用,這意味著如果您在其中使用資源,您將失去對視圖和控制器進行單元測試的能力。
這篇文章提供了更多關於它的細節。
相反,您應該使用您在問題中提到的方法。將您的資源放在您想要的任何位置,並將其設置為“嵌入式資源”,自定義工具應為“PublicResXFileCodeGenerator”。