Asp.net mvc 3 MVC4中的ASP.NET资源处理程序机制
简单。我想本地化我的应用程序。 我在谷歌上搜索了好几天,尝试了一百万种不同的方法来获取我的资源。 我成功的唯一方法是使用标准的asp.net文件夹“App_LocalResource”,将资源文件公开,并给它们一个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,
自定义工具名
。在视图中,我可以使用@导入自定义工具名称
我的问题是,当我更改区域性时,语言/资源项没有更改
以下是我如何在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,并在只需要第一位时将字符串一分为二。