asp.net Получить все ресурсы из .resx без указания культуры (ResourceManager.GetResourceSet) - PullRequest
6 голосов
/ 26 апреля 2011

Я впервые столкнулся с вопросом, похожим на мой, здесь при переполнении стека: Перебрать все ресурсы в ResourceManager - C # . Это решило только часть того, что мне нужно сделать. Когда вы запрашиваете запись в файле ресурсов для определенной культуры, если ее нет, она по умолчанию возвращается к файлу ресурса нейтральной культуры.

Мне нужно перебрать каждую запись для данного файла ресурсов, а GetResourceSet требует культуры. Например, у меня есть файл нейтральных ресурсов с 3 записями и файл ресурсов для конкретной культуры, сопровождающий нейтральный файл с 1 записью.

Мой файл примера нейтрального ресурса - MyResource.resx, а файл примера ресурса, относящегося к конкретной культуре, - MyResource.en-gb.resx. В следующем коде показано, как в данный момент я пытаюсь перебрать и получить доступ ко всем записям ресурсов.

Dim cultInfo as New CultureInfo(culture)
For Each entry As System.Collections.DictionaryEntry In myResourceManager.GetResourceSet(cultInfo, True, True)

Next

Нейтральные записи файла ресурсов

  • ФИО / ФИО
  • Номер телефона / Номер телефона
  • Штат / Штат

Запись файла ресурса для конкретной культуры

  • Штат / округ

Когда я вызываю GetResourceSet для конкретной культуры, я получаю только 1 запись. Я ожидал (и хочу) вернуть все 3 записи с одной переопределенной культурной записью. Вот что я хочу вернуть:

  • ФИО / ФИО
  • Номер телефона / Номер телефона
  • Штат / Округ

В любом случае, я могу это сделать? Благодарю.

1 Ответ

9 голосов
/ 27 апреля 2011

Метод GetString объекта ResourceManager правильно обрабатывает файлы ресурсов, чтобы найти правильное значение для данного ключа на основе культуры.Базовый / нейтральный / файл ресурсов по умолчанию можно получить с помощью CultureInfo.InvariantCulture , который дает вам все возможные ключи для файла ресурсов (при условии, что вы настроили файлы ресурсов таким образом).

Зацикливаясь на объектах DictionaryEntry, найденных в методе GetResourceSet ResourceManager на основе инвариантной культуры, и затем вызывая GetString для каждого ключа с использованием конкретной переданной культуры, вы получите правильное значение для данного ключа на основе этой культуры.

For Each entry As DictionaryEntry In myResourceManager.GetResourceSet(CultureInfo.InvariantCulture, True, True)
     Dim strKey as String = entry.Key.ToString()
     Dim strValue as String = myResourceManager.GetString(entry.Key.ToString(), cultInfo)
Next

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...