如何从CultureInfo获取不带国家的语言信息

19

有没有人知道在ASP.Net中如何获取当前文化的语言而不包括其国家名称?我知道不变文化不会有这个问题,但我不知道如何创建它们而不指定明确的语言。我想显示活动语言,在nl-nl中这是荷兰语(荷兰)。

这是我设置当前文化的方式:

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时,网站上显示的内容是“荷兰语(荷兰)”。

我只想看到荷兰语!

3个回答

41

简单:

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),它会显示“未知语言(gb)”:( - Yusril Maulidan Raji
有没有使用绑定的方法可以做到这一点? - Thomas Klammer
"IsNeutralCulture" 意味着“...与语言相关的语言和区域参数,但不涉及国家或地区。它与特定的语言和区域参数不同,后者既与语言又与国家或地区相关联。例如,fr 是中性法语语言的名称,而 fr-FR 是法国法语语言和区域设置的名称。” - Sergey_T

6

CultureInfo对象包含一个名为Parent的属性 - 如果设置了该属性,则有一个CultureInfo具有所需的EnglishName = Dutch


-3
您可以使用HTTP_ACCEPT_LANGUAGE对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接