如何从 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 名称

为啥不是所有国家都出现在 CultureInfo.GetCultures() 中?

如何从Drupal Commerce中的国家/地区代码获取国家/地区名称

如何使用pygeoip从国家、地区代码获取纬度、经度

新 CultureInfo(string Name) 构造函数 - .NET (C#)