2016-11-12 60 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应用程序中一样。
这对我有帮助,希望这会对你有所帮助。

相关问题