Получить все поддерживаемые культуры из спутниковой сборки - PullRequest
5 голосов
/ 20 октября 2008

Я использую спутниковую сборку для хранения всех ресурсов локализации в приложении C #.

Что мне нужно сделать, это создать меню в GUI со всеми доступными языками, которые существуют для приложения. Есть ли способ получить информацию динамически?

Ответы [ 2 ]

2 голосов
/ 05 июля 2009

Эта функция возвращает массив всех установленных культур в папке App_GlobalResources - измените путь поиска в соответствии с вашими потребностями. Для инвариантной культуры возвращается «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();
}

Вы также можете использовать это для большей функциональности, получая полные экземпляры 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();
}
1 голос
/ 20 октября 2008

Каждая спутниковая сборка для определенного языка названа одинаково, но находится в подпапке, названной в честь конкретной культуры, например, франц. или франц. CA.
Возможно, вы можете использовать этот факт и сканировать иерархию папок для динамического создания этого меню.

...