无法使用asp.net mvc

时间:2016-05-26 10:34:50

标签: asp.net-mvc localization resources

我正在开发一个ASP.NET MVC应用程序。在我的应用程序中,我想添加一个下拉选项,供用户选择语言。我使用ASP.NET MVC找到了本地化文章。

http://www.c-sharpcorner.com/UploadFile/b8e86c/localization-of-a-site-in-mvc5-using-resource-file/

http://www.mikesdotnetting.com/article/183/globalization-and-localization-with-razor-web-pages

全部使用资源文件进行本地化,并根据Culture属性检索资源。例如,如果我们使用名为LangRes.resx和LangRes.fr-FR.resx的英语和法语,我们必须创建两个资源文件。所以我测试了如何使用如下的资源文件。但它没有用。

  
      
  1. 我创建了两个资源文件,名为LangRes.resx和LangRes.fr-FR.resx

  2.   
  3. 我为两个文件设置了修饰符。

  4.   
  5. 然后我将值添加到资源文件

  6.   

enter image description here

enter image description here

  
      
  1. 然后我在Web.config
  2. 中添加了这个   
<globalization enableClientBasedCulture="true" culture="auto" uiCulture="auto"></globalization>
  
      
  1. 然后在视图文件中我打印了喜欢此消息的消息
  2.   
@{
    Culture = UICulture = "fr-FR";
}
<h2>@LangRes.Title</h2>

实际上,它应该显示法国。对?因为我将文化设置为“fr-FR”并且它被映射到具有后缀LangRes.fr-FR.resx的资源文件。但它总是显示“英语”。那么,为什么?为什么不起作用?我该如何解决?此外,在ASP.NET MVC中本地化的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您需要通过添加此函数在Global.asax中设置默认语言:

protected void Application_BeginRequest(object sender, EventArgs e)
    {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
    }

如果要为用户使用更改语言选项并创建更改语言按钮(例如EN和FR按钮)。您必须在控制器中设置文化值。例如:

查看:

@Html.ActionLink("English", "SelectLanguage", "Home", new { SelectedLanguage = "en-US" }, null)
@Html.ActionLink("Français", "SelectLanguage", "Home", new { SelectedLanguage = "fr-FR" }, null)

控制器:

public ActionResult SelectLanguage(string SelectedLanguage) 
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(SelectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(SelectedLanguage.ToLower());

        HttpCookie LangCookie = new HttpCookie("LangCookie");
        LangCookie.Value = SelectedLanguage;
        Response.Cookies.Add(LangCookie);

        return RedirectToAction("Index", "Home");
    }

如果你想检查语言cookie,你可以在Global.asax中控制它,如下所示:

protected void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpCookie LangCookie = Request.Cookies["LangCookie"];
        if (LangCookie != null && LangCookie.Value != null)
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(LangCookie.Value);
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(LangCookie.Value);
        }
        else
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("fr-FR");
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr-FR");
        }
    }