Asp.net mvc 3 MVC4中的ASP.NET资源处理程序机制

Asp.net mvc 3 MVC4中的ASP.NET资源处理程序机制,asp.net-mvc-3,asp.net-mvc-4,localization,cultureinfo,currentuiculture,Asp.net Mvc 3,Asp.net Mvc 4,Localization,Cultureinfo,Currentuiculture,简单。我想本地化我的应用程序。 我在谷歌上搜索了好几天,尝试了一百万种不同的方法来获取我的资源。 我成功的唯一方法是使用标准的asp.net文件夹“App_LocalResource”,将资源文件公开,并给它们一个自定义工具名。在视图中,我可以使用@导入自定义工具名称 我的问题是,当我更改区域性时,语言/资源项没有更改 以下是我如何在global.asax中更改它: protected void Application_AcquireRequestState(object sender,

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

我的问题是,当我更改区域性时,语言/资源项没有更改

以下是我如何在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);
        }
    }
因此,文化要么是
da
要么是
en
。但我注意到,资源文件的名称必须具有特定的语法。必须有一个没有国家/地区代码的默认值(在本例中为英语),其他默认值的名称为reFile.da-DK.resx。它必须有语言和文化代码

我很惊讶资源处理程序能够识别我的文件,因为区域性设置为“da”,而不是“dadk”。如果我将
da
resource文件命名为resFile.da.resx,则无法导入
自定义工具名称
,这是我的resource文件


如何解决此问题?

使用完整的区域性信息字符串,例如:

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

此外,为了获得最佳实践,请将代码移出到应用程序\u BeginRequest方法中,这是您将看到此类代码的标准位置。

为什么在每种情况下都不提供完整的区域性名称?@AdamTuliper MSFT CurrentUICulture只接受两个字母字符串。CurrentUICulture接受作为完整名称(而不是两个字符)的CultureInfo例如new CultureInfo(“en-US”),我也在BeginRequest中设置了它,它出现在页面生命周期的早期,通常是代码找到自己的地方。@AdamTuliper MSFT Yes。正如你所说,我使用了全名CultureInfo,并在只需要第一位时将字符串一分为二。