Cómo traducir los nombres del lenguaje CultureInfo

Conozco tres formas de obtener un nombre de idioma completo de un objeto CultureInfo.

CultureInfo.DisplayName CultureInfo.NativeName CultureInfo.EnglishName 

DisplayName le da el nombre en el idioma .net instalado.
NativeName le da el nombre en el idioma ‘CultureInfos’.
EnglishName le da el nombre en inglés (sorprendentemente …)

Entonces, para CultureInfo de-DE esto da (en una instalación de .net en inglés)
alemán
Deutsch
alemán

Ahora mi pregunta: ¿hay alguna manera de pedir el nombre del idioma de de-DE en otro idioma? Por ejemplo, quiero el nombre de idioma de DE en holandés (que sería ‘Duits’).

Esta funcionalidad no está integrada en .NET Framework

Tal vez mirar API de Google Translate

Ejemplo para 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; } 

En principio, el siguiente código funciona:

 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); } 

Sin embargo, hay limitaciones importantes:

  • Se basa en el comportamiento no documentado, por lo que puede romperse con las actualizaciones de Windows o .NET
  • El idioma de la pantalla debe instalarse en la computadora donde lo ejecuta. Puede instalar idiomas adicionales, dependiendo de la edición de Windows que esté utilizando.

    En la mayoría de las computadoras, solo hay un idioma instalado, lo que lo convierte en un ejercicio inútil en la mayoría de los casos.