2008-08-27 19 views
13

私はローカリゼーションを実装しているアプリケーションを持っています。C#のリソースファイルへの動的参照

これで、リソースファイルで名前を動的に参照する必要があります。 FOO =「こんにちは」は、バー=「世界」正常に

=「残酷」とバズは、私はのように参照します:

は私がLogin.resxと呼ばれるリソースファイル、文字列の数を持っていると仮定し 文字列result = Login.foo; と結果== "hello";

私の問題は、コード時に、私がfoo、barまたはbazを参照したいのかどうかわかりません - 私は "foo"、 "bar"または "baz"のいずれかを含む文字列を持っています。

私のようなものが必要です:

ログイン[ "foo" を];

リソースファイル内の文字列を動的に参照する方法があるかどうか知りませんか?

答えて

19

あなたはインスタンスにLogin.resxためResourceManagerが必要になります:

var resman = new System.Resources.ResourceManager(
    "RootNamespace.Login", 
    System.Reflection.Assembly.GetExecutingAssembly() 
) 
var text = resman.GetString("resname"); 

それはIDEによって作成されたリソースファイルのコードビハインドファイルに生成されたコードを見て役立つかもしれません。これらのファイルには、基本的に、内部リソース・マネージャーに照会する各リソースの読み取り専用プロパティーが含まれています。

+10

さらに簡単に言うと、リソース自体の 'ResourceManager'にアクセスするだけです。例えばLogin.ResourceManager.GetString( "foo") –

2

私が行ったようにあなたがApp_GlobalResourcesフォルダにリソースファイルを置く場合、あなたは

グローバルを使用する必要があります:: System.Resources.ResourceManager 温度=新しい グローバル:: System.Resources.ResourceManager( "RootNamespace.Login"、 global :: System.Reflection.Assembly.Load( "App_GlobalResources"));

これを理解するにはしばらく時間がかかりました。これが誰かを助けることを願っています。 :)