asp.net MVC - 如何获得完整的本地和全球资源

时间:2009-06-03 08:38:54

标签: asp.net-mvc resources

我正在本地化应用程序,需要为所有视图的JS部分应用程序提供本地和全局资源的JSON表示。我目前的想法是我实现HtmlHelper扩展方法,如GetLocalResourcesJSON / GetGlobalResourcesJSON,它应编码所有资源键+值,并返回JSON编码为字符串(我也实现缓存)。

目前我能够从属于当前视图的全局或本地资源中检索单个特定密钥(使用httpContext.GetGlobalResourceObject / GetLocalResourceObject),但我无法找到如何检索整个资源对象并迭代它的所有键+值。有没有什么方法可以实现这个目标?

看起来ResourceProviderFactory可能是这个问题的关键,但它无法在任何地方公开访问。我可以实例化ResourceExpressionBuilder并使用反射来使用GetLocal / GlobalResourceProvider()方法检索提供程序,但我不喜欢在这里使用反射......

2 个答案:

答案 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 &copy; 2009</dd>
</dl>

[1]:http://blog.mattweber.name/?p=39“ASP.NET - 从Resx文件中获取值”

答案 1 :(得分:0)

目前我使用这样的反射解决了它:var resourceManager = ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath).CreateResourceManager();然后使用resourceManager.GetResourceSet()迭代所有资源项。我不喜欢这个肮脏的解决方案;(