繁体   English   中英

MVC 5中的本地化-如何使用资源文件在视图中呈现多语言文本?

[英]Localization in MVC 5 - How can I render multi-lingual text in my view using a resource file?

我正在尝试在MVC 5应用程序中创建多语言导航。

我所做的:

  1. 根据Cookie值将System.Threading.Thread.CurrentThread.CurrentUICulture设置为“ en-US”或“ es-ES”(默认为英语,除非用户选择西班牙语)
  2. 创建了三个资源文件(这是我第一次使用它们,所以我不确定我是否完全理解这个概念...)Index.resx,Resouce.en-US.resx,Resouce.es-ES.resx。 每个资源文件都位于名为App_GlobalResources的文件夹中

  3. 为每个.resx文件添加了名称/值组合,为Index.resx和en-US.resx添加了Home / Home,为es-ES.resx添加了Home / Casa。

  4. 在布局文件中使用@Resources.Index.Home进行了尝试,认为当CurrentUICulture的值从en-US更改为es-ES,反之亦然时,该语言将根据我的资源文件中的值而更改。

有人可以让我知道当CurrentUICulture值为“ es-ES”时如何获得西班牙语文本,而当值为“ en-US”时如何获得英语文本吗?

_Layout.cshtml

Resource.resx

编辑

我应该说过- @Resources.Index.Home确实在导航中呈现了文本“ Home”。 但是,当我将CurrentUICulture切换为“ es-ES”时,它仍然呈现“主页”,而不是“ 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");
                }
            }
        }

只需尝试将@Resources.Index.Home替换为@Resources.Home
这是您对本地化的了解。
每个具有本地化的应用程序(例如N个文化)必须具有N个.resx文件,这些.resx具有相同的名称但后缀不同。 +默认文化可以不带后缀。 因此,您有2种文化-您必须使用2个.resx文件,不能更多。 因此,根本不需要Index.resx
这应该工作。 如果没有,请进行以下修复:
-不要使用App_GlobalResources文件夹。 就像在桌面.NET应用程序中一样,只需在公共项目文件夹或项目根文件夹中创建.resx
这对我有所帮助,希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM