2016-11-12 98 views
0

我正在嘗試在MVC 5應用程序中創建多語言導航。MVC中的本地化5 - 如何使用資源文件在我的視圖中呈現多語言文本?

我所做的:

  1. 設置System.Threading.Thread.CurrentThread.CurrentUICulture要麼 「EN-US」 或 「ES-ES」 基於cookie的值(默認爲英語 除非用戶選擇西班牙)
  2. 創建三個資源文件(這是我第一次使用它們,所以我不確定我完全理解這個概念......)Index.resx,Resouce.en-US.resx,Resouce.es-ES.resx。每個資源文件是在一個文件夾,名爲App_GlobalResources文件夾

  3. 增加了一個名稱/值對每個.resx文件,家庭/家庭的Index.resx和EN-US.resx和家庭/卡薩爲ES-ES。 RESX

  4. 在我的佈局文件中使用@Resources.Index.Home,認爲當CurrentUICulture值從EN-US改爲ES-ES,反之亦然,語言會改變根據我在資源文件中的值嘗試。

有人請讓我知道當價值CurrentUICulture是「es-ES」時我怎麼能得到西班牙文本,而英文文本是「en-US」時?

_Layout.cshtml

Resource.resx

編輯

我應該說明 - @Resources.Index.Home確實呈現在導航文本 「家」。然而,當我切換到CurrentUICulture 「ES-ES」,它仍然呈現 「家」,而不是 「卡薩」

EDIT 2

這是我如何設置CurrentUICulture是Global.asax的

public void Application_AuthenticateRequest(Object sender, EventArgs e) 
     { 
      if (Request.Cookies["lang"] == null) 
      { 
       HttpCookie lang = new HttpCookie("lang"); 
       lang.Value = "english"; 
       lang.Expires = DateTime.Now.AddDays(30d); 
       Response.Cookies.Add(lang); 
      } 
      else if (Request.Cookies["lang"] != null) 
      { 
       if (Request.Cookies["lang"].Value != null && Request.Cookies["lang"].Value == "english") 
       { 
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-us"); 
       } 
       else if (Request.Cookies["lang"].Value != null && Request.Cookies["lang"].Value == "spanish") 
       { 
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-es"); 
       } 
      } 
     } 
+0

它應該工作,你有任何錯誤信息?你可以發佈你的控制器如何初始化你的CurrentUICulture?你有什麼在@ Resources.Index.Home?它顯示任何東西嗎? – Yanga

+0

感謝 - 好點 - 沒有錯誤。請參閱我的更新。 '@ Resources.Index。Home「會顯示文字」Home「,但是當CurrentUICulture設置爲」es-ES「時,它不會變爲」Casa「 – tradez

+0

您可以發佈初始化您剛剛發佈的CurrentUICulture – Yanga

回答

0

只需嘗試用@Resources.Home替換@Resources.Index.Home即可。
這是你對本地化的理解。
每個本地化的應用程序(例如N個文化)必須有N .resx文件,相同的名稱,但後綴不同。 +默認文化可以使用沒有後綴。 所以你有2種文化 - 你必須使用2個.resx文件,而不是更多。所以Index.resx根本不需要。
這應該工作。如果沒有,更多修正:
- 不要使用App_GlobalResources文件夾。只需在常見項目文件夾或項目根文件夾中創建.resx,就像在桌面.NET應用程序中一樣。
這對我有幫助,希望這會對你有所幫助。

相關問題