我正在尝试在MVC 5应用程序中创建多语言导航。
我做了什么:
System.Threading.Thread.CurrentThread.CurrentUICulture
设置为" en-US"或者" es-ES"基于cookie值(默认为英语
除非用户选择西班牙语)创建了三个资源文件(这是我第一次使用它们,所以我不确定我完全理解这个概念......)Index.resx,Resouce.en-US.resx,Resouce。 ES-ES.resx。每个资源文件都位于名为App_GlobalResources文件夹
为每个.resx文件添加名称/值组合,为Index.resx和en-US.resx添加Home / Home,为es-ES.resx添加Home / Casa
@Resources.Index.Home
进行了尝试,认为当CurrentUICulture
的值从en-US更改为es-ES且反之亦然时,语言会根据我的值更改资源文件。有人可以告诉我如何在价值CurrentUICulture
为" es-ES"时提供西班牙语文本,以及英文文本为" en-US& #34;
修改
我应该说 - @Resources.Index.Home
确实呈现了文字" Home"在导航中。但是,当我将CurrentUICulture
切换为" es-ES"时,它仍会呈现" Home",而不是" Casa"
编辑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 :(得分:0)
尝试将@Resources.Index.Home
替换为@Resources.Home
这是对本地化的理解
每个具有本地化的应用(比如N种文化)必须有N .resx
个 - 具有相同名称但后缀不同的文件。 +默认文化可以在没有后缀的情况下使用。
所以你有2种文化 - 你必须使用2个.resx文件,而不是更多。因此根本不需要Index.resx
这应该工作。如果没有,更多修正:
- 不要使用App_GlobalResources文件夹。只需在公共项目文件夹或项目根文件夹中创建.resx
,就像在桌面.NET应用程序中一样
这对我有所帮助,希望这对你有所帮助。