2010-06-04 57 views
24

我一直在通過我的第一個MVC應用程序,我想本地化它。我知道如何使用App_GlobalResources,但我更願意使用App_LocalResources。App_LocalResources如何與MVC協同工作?

在一個典型的WebForms應用程序中,您將App_LocalResources文件夾放在與ASPX文件相同的目錄中......這與MVC中的相同(IE:我是否將它們放在「views」目錄中的相應子文件夾中) ?

此外,在訪問視圖中的App_GlobalResources時,您可以像<%=Html.Encode(Resources.Index.Title)%>那樣執行此操作,但是我無法通過App_LocalResources執行此操作。我不希望有讓我<label runat="server"爲了拿meta:resourcekey


編輯的優勢:

,我發現了一個方法來做到這一點,但我不知道這是最好的方法。這裏的想法

  1. 你把App_LocalResources文件夾的子文件夾中的各個文件夾查看
  2. 內您創建一個符合您的意見RESX文件... IE:Index.resxAbout.resx
  3. 您設定的RESX文件屬性爲「公共」(PublicResXFileCodeGenerator),「嵌入式資源」,「視圖。[視圖名]」命名空間
  4. 創建一個名爲「標題」的新資源名稱,並將任何你想要的值。

現在,我可以參考使用一些本地資源這樣

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

我這個看到的是資源嵌入的事實。唯一的問題,沒有再我不能添加新的語言環境編譯該項目。

Here is my reference on this method.

回答

16

你不應該使用App_GlobalResources文件或App_LocalResources文件與MVC。這是因爲這些資源的工作方式。這些資源沒有嵌入到您的項目中,而是由ASP.NET運行時編譯。這意味着當您的資源不在ASP.NET運行時內運行時,您的資源將不可用,這意味着如果您使用資源,則無法單元測試您的視圖和控制器。

This post給出了關於它的更多細節。

相反,您應該使用您在問題中提到的方法。把你的資源放在任何你想要的地方,並將其設置爲'嵌入式資源',自定義工具應該是'PublicResXFileCodeGenerator'。

1

我知道這並不直接回答這個問題,但我覺得你真正需要的是什麼「我怎樣做本地化的ASP.NET MVC」。

您可以檢查出來的答案,這個問題stackoverflow.com看看他們是否幫助回答你要解決的問題:how-to-localize-asp-net-mvc-application