Domanda

Sto usando un assembly satellite per contenere tutte le risorse di localizzazione in un'applicazione C #.

Quello che devo fare è creare un menu nella GUI con tutte le lingue disponibili che esistono per l'applicazione. C'è un modo per ottenere informazioni in modo dinamico?

È stato utile?

Soluzione

Questa funzione restituisce un array di tutte le culture installate nella cartella App_GlobalResources - cambia il percorso di ricerca in base alle tue esigenze. Per la cultura invariante restituisce " 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();
}

Puoi anche usare questo per una maggiore funzionalità ottenendo le istanze di CultureInfo complete:

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

Altri suggerimenti

Ogni assembly satellite per una lingua specifica ha lo stesso nome ma si trova in una sottocartella che prende il nome dalla cultura specifica, ad es. fr o fr-CA.
Forse puoi usare questo fatto ed eseguire la scansione della gerarchia di cartelle per creare quel menu in modo dinamico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top