2009-06-03 71 views
1

我正在本地化应用程序,并且需要为所有视图的JS应用程序的JS部分提供本地和全局资源的JSON表示。我目前的想法是我会实现HtmlHelper扩展方法,如GetLocalResourcesJSON/GetGlobalResourcesJSON应该对所有资源键+值进行编码,并返回JSON编码为字符串(我也会实现缓存)。asp.net MVC - 如何获取完整的本地和全球资源

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

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

回答

0

此刻 “ASP.NET从RESX文件中获取价值” 我解决了它使用反射像这样:var ResourceManager的= ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath).CreateResourceManager();并使用resourceManager.GetResourceSet()遍历所有资源项目。我不喜欢虽然这肮脏的解决方案;(

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 -

+0

此刻我解决它使用反射像这样: VAR的ResourceManager = ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath) .CreateResourceManager(); 比使用resourceManager.GetResourceSet( )遍历所有的资源项目 虽然我不喜欢这个肮脏的解决方案;( – Buthrakaur 2009-06-04 10:31:05

相关问题