Pergunta

Eu estou usando um satélite conjunto para conter todos os recursos de localização em uma aplicação C #.

O que eu preciso fazer é criar um menu na GUI com todos os idiomas disponíveis que existe para a aplicação. Existe alguma maneira de obter informações de forma dinâmica?

Foi útil?

Solução

Esta função retorna uma matriz de todas as culturas instaladas nos App_GlobalResources pasta - mudança de caminho de pesquisa de acordo com suas necessidades. Para a cultura invariável ele retorna "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();
}

Você também pode usar esta para mais funcionalidade recebendo os casos completos 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();
}

Outras dicas

Cada satélite conjunto para um idioma específico é nomeado o mesmo, mas mentiras em uma sub-pasta com o nome da cultura específica, por exemplo, fr ou fr-CA.
Talvez você possa usar este fato e digitalizar a hierarquia de pastas para construir esse menu dinamicamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top