2015-08-05 3 views
2

У меня есть сайт MVC, который использует .resx files for localization. Однако текущее поведение для определения , которое поддерживает, требует итерации по физическим .resx файлам, и они не существуют, как только сайт был скомпилирован для публикации.Динамическое создание доступных локализаций из файла ресурсов

Структура папок в настоящее время:

  • лингвистические ресурсы
    • Resource.en-US.resx
    • Resource.fr-CA.resx
    • Resource.hi.resx
    • Ресурс.resx

Попытка получить список всех файлов ресурсы с помощью GetManifestResourceNames(), согласно this answer, производит только единственный LanguageResources.Resource.resources файл, который представляет мастер, нелокаль- ный список. Он может иметь или не иметь локализаций, встроенных в него, но я не нашел этого.

Как я могу сказать во время выполнения, что я поддерживаю три языка?

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

ответ

0

Следуя ссылкам на боковой панели для моего вопроса, я в итоге нашел this question и excellent answer Ханса Хольцбарта, который я воспроизвожу ниже. Сам вопрос приближается к нему с другого направления, но ответ в равной степени применим и к моей ситуации.

// Pass the class name of your resources as a parameter e.g. MyResources for MyResources.resx 
ResourceManager rm = new ResourceManager(typeof(MyResources)); 

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures); 
foreach (CultureInfo culture in cultures) 
{ 
    try 
    { 
     ResourceSet rs = rm.GetResourceSet(culture, true, false); 
     // or ResourceSet rs = rm.GetResourceSet(new CultureInfo(culture.TwoLetterISOLanguageName), true, false); 
     string isSupported = (rs == null) ? " is not supported" : " is supported"; 
     Console.WriteLine(culture + isSupported); 
    } 
    catch (CultureNotFoundException exc) 
    { 
     Console.WriteLine(culture + " is not available on the machine or is an invalid culture identifier."); 
    } 
} 

Для моих целей, я должен был отфильтровать Инвариантную культуру .Where(x => x.Name != ""), но кроме этого, это прекрасно работало.

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