5

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

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

ответ

2

Эта функция возвращает массив всех установленных культур в папке App_GlobalResources - измените путь поиска в соответствии с вашими потребностями. Для инвариантной культуры он возвращает «авто».

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

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

Смежные вопросы