Pregunta

Estoy usando un conjunto satélite para mantener todos los recursos de localización en una aplicación C #.

Lo que necesito hacer es crear un menú en la GUI con todos los idiomas disponibles que existen para la aplicación. ¿Hay alguna forma de obtener información de forma dinámica?

¿Fue útil?

Solución

Esta función devuelve una matriz de todas las culturas instaladas en la carpeta App_GlobalResources: cambie la ruta de búsqueda según sus necesidades. Para la cultura invariante, devuelve "auto".

public static string[] GetInstalledCultures()
{
    List<string> cultures = new List<string>();
    foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), \\Change folder to search in if needed.
        "*.resx", SearchOption.TopDirectoryOnly))
    {
        string name = file.Split('\\').Last();
        name = name.Split('.')[1];

        cultures.Add(name != "resx" ? name : "auto"); \\Change "auto" to something else like "en-US" if needed.
    }
    return cultures.ToArray();
}

También podría usar este para obtener más funciones obteniendo las instancias completas de CultureInfo:

public static CultureInfo[] GetInstalledCultures()
{
    List<CultureInfo> cultures = new List<CultureInfo>();
    foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), "*.resx", SearchOption.TopDirectoryOnly))
    {
        string name = file.Split('\\').Last();
        name = name.Split('.')[1];

     string culture = name != "resx" ? name : "en-US";
     cultures.Add(new CultureInfo(culture));
    }
    return cultures.ToArray();
}

Otros consejos

Cada ensamblaje de satélite para un idioma específico tiene el mismo nombre, pero se encuentra en una subcarpeta con el nombre de la cultura específica, por ejemplo. fr o fr-CA.
Tal vez pueda usar este hecho y escanear la jerarquía de carpetas para crear ese menú dinámicamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top