2009-06-03 1 views
1

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

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

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

ответ

0

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

1

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

App_ GlobalResources будет скомпилирован в пространство имен «Ресурсы», и вы можете получить доступ к ResourceManager там (например, Resource.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

в данный момент я решил его с помощью отражения как это: вар ResourceManager = ResourceExpressionBuilder.GetLocalResourceProvider (виртуальный_путь) .CreateResourceManager(); и чем использовать resourceManager.GetResourceSet (), чтобы перебирать все элементы ресурсов. Хотя мне не нравится это грязное решение; – Buthrakaur