我正在本地化应用程序,需要为所有视图的JS部分应用程序提供本地和全局资源的JSON表示。我目前的想法是我实现HtmlHelper扩展方法,如GetLocalResourcesJSON / GetGlobalResourcesJSON,它应编码所有资源键+值,并返回JSON编码为字符串(我也实现缓存)。
目前我能够从属于当前视图的全局或本地资源中检索单个特定密钥(使用httpContext.GetGlobalResourceObject / GetLocalResourceObject),但我无法找到如何检索整个资源对象并迭代它的所有键+值。有没有什么方法可以实现这个目标?
看起来ResourceProviderFactory可能是这个问题的关键,但它无法在任何地方公开访问。我可以实例化ResourceExpressionBuilder并使用反射来使用GetLocal / GlobalResourceProvider()方法检索提供程序,但我不喜欢在这里使用反射......
答案 0 :(得分:1)
如果你可以获得一个ResourceManager,你可以使用GetResourceSet()方法返回给定文化的所有本地化字符串。
App_ GlobalResources将被编译到“Resources”命名空间中,你可以在那里访问ResourceManager(即Resources.General.ResourceManager)对于App_ LocalResources来说,它有点棘手,这是我倾向于不使用App_的原因之一LocalResources。有关一种可能的解决方案,请参见[post] [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 © 2009</dd>
</dl>
[1]:http://blog.mattweber.name/?p=39“ASP.NET - 从Resx文件中获取值”
答案 1 :(得分:0)
目前我使用这样的反射解决了它:var resourceManager = ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath).CreateResourceManager();然后使用resourceManager.GetResourceSet()迭代所有资源项。我不喜欢这个肮脏的解决方案;(