Как получить язык без страны из CultureInfo - PullRequest
17 голосов
/ 01 октября 2009

Кто-нибудь знает в 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);
    }
}

В моем случае культура "нл-нл". Проблема в том, что при использовании CurrentCulture.EnglishName на сайте отображается «Голландский (Нидерланды)». Я хочу видеть только голландский!

Спасибо!

Ответы [ 3 ]

39 голосов
/ 01 октября 2009

Simple:

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);
}
6 голосов
/ 01 октября 2009

Объект CultureInfo содержит свойство Parent - если оно установлено, то есть CultureInfo с желаемым EnglishName = Dutch

0 голосов
/ 01 октября 2009

Вы можете использовать объект HTTP_ACCEPT_LANGUAGE.

...