无法使用asp.net mvc中的资源文件进行本地化

我正在开发一个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的英文和法文,我们必须创建两个资源文件。 所以我测试了如何使用下面的资源文件。 但它不起作用。

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

  • 我将这两个文件的修饰符设置为public。

  • 然后我将这些值添加到资源文件中

  • 在这里输入图像描述

    在这里输入图像描述

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

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


    您需要通过添加此功能在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");
            }
        }
    
    链接地址: http://www.djcxy.com/p/66647.html

    上一篇: Cannot localize using resource file in asp.net mvc

    下一篇: Inaccessible, Internal, Resource Files?