MVC4中的ASP.NET资源处理程序机制

时间:2013-03-02 18:06:53

标签: asp.net-mvc-3 asp.net-mvc-4 localization cultureinfo currentuiculture

简单。我想本地化我的应用程序。 我用谷歌搜索了几天,并尝试了一百万种不同的方法来获取我的资源。 我成功的唯一方法是使用标准的asp.net文件夹“App_LocalResource”,使资源文件公开并给它们Custom Tool Name。在视图中,我可以使用Custom Tool Name导入@using

我的问题是,当我改变文化时,语言/资源项目没有变化。

以下是我在global.asax中的更改方式:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.Session != null)
        {
            CultureInfo ci = (CultureInfo)this.Session["Culture"];
            if (ci == null)
            {
                string langName = "en";
                string autoLang = "";
                if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
                {
                    autoLang = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);
                }
                if (autoLang == "da")
                    langName = autoLang;
                ci = new CultureInfo(langName);
                this.Session["Culture"] = ci;
            }

            Thread.CurrentThread.CurrentUICulture = ci;
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
        }
    }

所以文化是daen。但我注意到资源文件的名称必须具有特定的语法。必须有一个没有国家/文化代码的默认(在这种情况下是英语),而其他默认名称必须命名为reFile.da-DK.resx。它必须同时具有语言和文化代码。

我很害怕资源处理程序可以识别我的文件,因为文化被设置为“da”而不是“da-DK”。如果我将da资源文件命名为resFile.da.resx,则无法导入Custom Tool Name这是我的资源文件。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用完整的文化信息字符串,例如:

var info = new CultureInfo("en-US")

同样为了获得最佳实践,请将代码移到Application_BeginRequest方法中,这是您将看到此类代码的标准位置。