asp.net MVC - как получить полные локальные и глобальные ресурсы - PullRequest
1 голос
/ 03 июня 2009

Я локализую приложение и мне нужно предоставить JSON-представление локальных и глобальных ресурсов для JS-части приложения для всех представлений. Моя текущая идея состоит в том, чтобы реализовать методы расширения HtmlHelper, такие как GetLocalResourcesJSON / GetGlobalResourcesJSON, которые должны кодировать все ключи ресурсов + значения и возвращать их в формате JSON, закодированные в виде строки (я бы также реализовал кэширование).

В настоящее время я могу получить один конкретный ключ из глобального или локального ресурса, принадлежащего текущему представлению (используя httpContext.GetGlobalResourceObject / GetLocalResourceObject), но я не могу выяснить, как извлечь весь объект ресурса и выполнить итерацию все его ключи + значения. Есть ли способ как этого добиться?

похоже, что ResourceProviderFactory может быть ключом к этой проблеме, но она нигде не доступна публично. Я мог бы создать экземпляр ResourceExpressionBuilder и использовать отражение, чтобы получить провайдера, используя методы GetLocal / GlobalResourceProvider (), но мне вообще не нравится использовать отражение здесь ...

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Если вы можете получить ResourceManager, вы можете использовать метод GetResourceSet (), чтобы вернуть все локализованные строки для данной культуры.

App_ GlobalResources будет скомпилирован в пространство имен «Ресурсы», и вы можете получить доступ к ResourceManager там (т. Е. Resources.General.ResourceManager). Для App_ LocalResources это немного сложнее, и это одна из причин, почему я склонен не использовать App_ LocalResources. Смотрите это [сообщение] [1] для одного возможного решения.

<dl>
<% foreach (DictionaryEntry entry in Resources.Global.ResourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true)) { %>
  <dt><%= entry.Key %></dt>
  <dd><%= entry.Value %></dd>
<% } %>
</dl>

Возвращает:

<dl>
  <dt>SiteName</dt>
  <dd>The Site Name</dd>

  <dt>Copyright_Text</dt>
  <dd>Copyright 2009</dd>

  <dt>Copyright_Html</dt>
  <dd>Copyright &copy; 2009</dd>
</dl>

[1]: http://blog.mattweber.name/?p=39"ASP.NET - Получение значений из файла Resx "

0 голосов
/ 30 мая 2011

на данный момент я решил это, используя отражение следующим образом: var resourceManager = ResourceExpressionBuilder.GetLocalResourceProvider (virtualPath) .CreateResourceManager (); и затем используйте resourceManager.GetResourceSet () для перебора всех элементов ресурса. Мне не нравится это грязное решение; (

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