Как получить CultureInfo.DisplayName на основе культуры, отличной от моей? [Дубликат]

У меня есть другая перспектива ответить на это.

При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.

public class MyController
{
    private ServiceA serviceA;
    private ServiceB serviceB;

    public MyController(ServiceA serviceA, ServiceB serviceB)
    {
        this.serviceA = serviceA;
        this.serviceB = serviceB;
    }

    public void MyMethod()
    {
        // We don't need to check null because the dependency injection container 
        // injects it, provided you took care of bootstrapping it.
        var someObject = serviceA.DoThis();
    }
}
21
задан Yodah 12 March 2010 в 13:58
поделиться

3 ответа

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

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

15
ответ дан Dead account 1 September 2018 в 04:14
поделиться
  • 1
    Это то, чего я боялся. Единственный бесплатный перевод, который вы получаете, это английский, язык установки .NET (если он отличается) и перевод на родном языке CultureInfo. Я должен взвесить преимущества использования google translate api для усилий. – Yodah 12 March 2010 в 15:08

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

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, которую вы используете. На большинстве компьютеров есть только один установленный язык, что делает это бессмысленным упражнением в большинстве случаев.
1
ответ дан CodesInChaos 1 September 2018 в 04:14
поделиться

Пример для 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;
    }
4
ответ дан Mr.Angel 1 September 2018 в 04:14
поделиться
  • 1
    Спасибо, я искал способ получить информацию о культуре на основе имени языка, вот что мне нужно – Naomi 2 July 2015 в 20:01
Другие вопросы по тегам:

Похожие вопросы: