2009-05-27 3 views
0

Я выполнял локализацию для своего приложения WPF, сохраняя строки в файлах .resx. Мой исходный (английский) ресурс строки - strings.resx. Для других языков называются strings.fr-FR.resx для французского языка, strings.es-ES.resx для испанского и так далее.Перечисление ресурсов .resx во время выполнения в приложении WPF

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

Возможно ли во время выполнения перечислить, какие языки находятся на моей Ассамблее?

Я мог бы обойти этот и жесткий код, в который включены языки, но это может измениться из сборки для сборки, поскольку сервер сборки объединяет язык resx и динамически строится.

ответ

2

Я вижу два варианта, ни один из которых является идеальным ...

  • Перечислите все известные культуры (CultureInfo.GetCultures), и попытаться получить данную Ressource для этой культуры => простой, но медленный
  • Посмотрите спутниковые сборки в каталоге приложения: для каждого подкаталога, проверьте, если это имя соответствует имени культуры (CultureInfo.GetCultureInfo), и если он содержит .resources.dll файл
+0

что касается варианты (2) и как задавался вопрос, не будет ли по умолчанию resx просто быть частью основной сборки и не иметь каталог «en_US» для поиска? Я знаю, что это олицетворение, но у меня есть открытый вопрос, связанный с этим. Cheers – Berryl

+0

@Berryl, да, ресурсы для культуры по умолчанию всегда находятся в главной сборке (но это не обязательно en-US ...) –

+0

Итак, если вы решили просто иметь main.resx и не en-US, а хотел перечислить доступные культуры ресурсов - вы найдете все подкаталоги, а потом что? Есть ли что-нибудь о главной сборке resx, которая окончательно говорит, что строки были «en-US»? Cheers – Berryl