2009-06-03 10 views
1

私はアプリケーションをローカライズしており、すべてのビューのアプリケーションのJS部分にローカルおよびグローバルリソースのJSON表現を提供する必要があります。現在のアイデアは、GetLocalResourcesJSON/GetGlobalResourcesJSONのようなHtmlHelper拡張メソッドを実装して、すべてのリソースキー+値をエンコードし、JSONを文字列としてエンコードする必要があることです(キャッシングも実装します)。asp.net MVC - 完全なローカルおよびグローバルリソースを得る方法

現時点では(httpContext.GetGlobalResourceObject/GetLocalResourceObjectを使用して)現在のビューに属するグローバルまたはローカルリソースから単一の特定のキーを取得できますが、リソースオブジェクト全体を取得する方法を見つけることができません。すべてのキー+値を繰り返します。これを達成する方法はありますか?

ResourceProviderFactoryはこの問題の鍵になる可能性がありますが、どこにでも公開することはできません。 ResourceExpressionBuilderをインスタンス化し、リフレクションを使用してGetLocal/GlobalResourceProvider()メソッドを使用してプロバイダを取得することはできますが、ここでリフレクションを使用するのは好きではありません...

答えて

0

私はこのような反射を使用して、それを解決し、現時点でます。varするresourceManager = ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath).CreateResourceManager(); resourceManager.GetResourceSet()を使用してすべてのリソース項目を反復処理します。 ( とresourceManager.GetResourceSetを使用するよりも、 VARするresourceManager = ResourceExpressionBuilder.GetLocalResourceProvider(virtualPath) .CreateResourceManager():(

1

ResourceManagerを保持できる場合は、 GetResourceSet()メソッドを使用して、指定されたカルチャのすべてのローカライズされた文字列を返します。

App_GlobalResourcesは "Resources"名前空間にコンパイルされ、そこでResourceManagerにアクセスできます(つまりResources.General.ResourceManager)App_ LocalResourcesの場合、これは少し難解ですが、これは私が使いたくない理由の1つですApp_ LocalResources。 1つの解決策については、この[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ファイルから値を取得"

+0

私はこのような反射を使用して、それを解決した瞬間に、私はしかし、この汚れたソリューションを好きではありません)すべてのリソースアイテムを反復処理します。 私はこの汚れたソリューションが好きではありません; – Buthrakaur

関連する問題