Как перевести названия языков CultureInfo - PullRequest
21 голосов
/ 12 марта 2010

Мне известны три способа получить полное имя языка объекта CultureInfo.

CultureInfo.DisplayName   
CultureInfo.NativeName  
CultureInfo.EnglishName

DisplayName дает имя на установленном языке .net.
NativeName дает имя на языке CultureInfos.
EnglishName дает название на английском языке (удивительно ...)

Так что для CultureInfo de-DE это дает (при установке на английском языке .net)
Немецкий
Deutsch
Немецкий

Теперь мой вопрос: есть ли способ спросить название языка de-DE на другом языке? Например. Я хочу название языка de-DE на нидерландском языке (это будет «Duits»).

Ответы [ 3 ]

15 голосов
/ 12 марта 2010

Эта функциональность не встроена в .NET Framework

Возможно, посмотрите на Google Translate API

5 голосов
/ 19 октября 2012

Пример для CultureInfo.EnglishName:

    public CultureInfo GetCultureInfo(string EnglishName)
    {
        foreach (CultureInfo info in CultureInfo.GetCultures(CultureTypes.AllCultures))
        {
            if (info.EnglishName == EnglishName)
                return new CultureInfo(info.Name);
        }

        return null;
    }
1 голос
/ 15 мая 2018

В принципе работает следующий код:

private static ResourceManager resourceManager = new ResourceManager("mscorlib", typeof(int).Assembly);

public static string CultureName(CultureInfo culture, CultureInfo displayCulture)
{
    return resourceManager.GetString("Globalization.ci_" + culture.Name, displayCulture);
}

Однако существуют важные ограничения:

  • Он основан на недокументированном поведении, поэтому может порваться с обновлениями Windows или .NET
  • Язык дисплея должен быть установлен на компьютере, на котором он запущен. Вы можете установить дополнительные языки в зависимости от используемой версии Windows.

    На большинстве компьютеров установлен только один установленный язык, что в большинстве случаев делает это бессмысленным упражнением.

...