如何从 CultureInfo 获取没有国家/地区的语言
Posted
技术标签:
【中文标题】如何从 CultureInfo 获取没有国家/地区的语言【英文标题】:How to get language without country from CultureInfo 【发布时间】:2010-12-02 23:32:02 【问题描述】:有谁知道在 ASP.Net 中如何在没有国名的情况下获取当前文化的语言? 我知道这种不变的文化没有这个问题,但我不知道如何在不指定明确语言的情况下创建它们。我想显示活动语言,在 nl-nl 中,这是荷兰语(荷兰)。
这就是我设置 currentCulture 的方式:
private void Application_BeginRequest(Object source, EventArgs e)
string[] languages = HttpContext.Current.Request.UserLanguages;
string language = languages[0].ToLowerInvariant().Trim();
if (!string.IsNullOrEmpty(language))
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
就我而言,文化是“nl-nl”。问题是使用 CurrentCulture.EnglishName 时网站上显示的内容是“Dutch (Netherlands)”。 我只想看荷兰语!
谢谢!
【问题讨论】:
【参考方案1】:CultureInfo 对象包含名为 Parent 的属性 - 如果已设置,则存在具有所需 EnglishName = Dutch 的 CultureInfo
【讨论】:
【参考方案2】:简单:
CultureInfo ci = CultureInfo.GetCultureInfo ("nl-nl");
if( ci.IsNeutralCulture )
Console.WriteLine (ci.EnglishName);
Console.WriteLine (ci.NativeName);
else
Console.WriteLine (ci.Parent.EnglishName);
Console.WriteLine (ci.Parent.NativeName);
【讨论】:
不幸的是,对于英国 (gb),它的结果是Unknown Language (gb)
:(
有没有办法通过绑定来做到这一点?
“IsNeutralCulture”的意思是“……与语言相关的语言和区域参数,但与国家或地区无关。它不同于特定的语言和区域参数,它们都与语言和国家或地区。例如,fr 是中性法语的名称,fr-FR 是法语的名称和法国的地区设置。"【参考方案3】:
您可以使用 HTTP_ACCEPT_LANGUAGE 对象。
【讨论】:
以上是关于如何从 CultureInfo 获取没有国家/地区的语言的主要内容,如果未能解决你的问题,请参考以下文章
如何从 .NET 中的 CultureInfo 获取 ISO 3166 国家代码
为啥不是所有国家都出现在 CultureInfo.GetCultures() 中?