web-dev-qa-db-ja.com

文字列リソースから文字列を動的に取得する

ローカライズされたC#.NETアプリケーションに取り組んでおり、strings.resxファイルを使用して、アプリケーション内のハードコードされた文字列を翻訳しています。次のコードを使用してそれらを抽出します。

using MyNamespace.Resources

...

string someString = strings.someString;

しかし、今では、呼び出しで文字列の名前を定義できるようにしたい、このようなもの:

string someString = GetString("someString");

私はResourceManagerを少しいじっていましたが、それをstrings.resxファイルに転送する方法が見つかりません。

それ、どうやったら出来るの?

30

ちょっとした検索でうまくいきました。 ResourceManagerクラスで使用可能な権利stringsがあります。

ResourceManager rm = strings.ResourceManager;
string someString = rm.GetString("someString");
48

ResourceManager.GetString する必要があります。

MSDNから削除された例:

ResourceManager rm = new ResourceManager("RootResourceName",
                                         typeof(SomeClass).Assembly);
string someString = rm.GetString("someString");
22
Vlad

私はASP.NET Core MVCを使用して同じ問題を抱えていましたが、

ResourceManager rm = new ResourceManager(typeof(YourResourceClass));
string someString = rm.GetString("someString");

@Vladのソリューションに非常に似ていますが、それ以外はMissingManifestResourceExceptionがありました

11
skamlet

これを行うはるかに簡単な方法があります

 [NameOfyourResxfile].ResourceManager.GetString("String Name");

あなたの場合

strings.resx.ResourceManager.GetString("someString");
7
batmaci

次のような静的メソッドを作成できます。

public static string GetResourceTitle<T>(string key)
{
  ResourceManager rm = new ResourceManager(typeof(T));
  string someString = rm.GetString(key);
  return someString;
}

そしてどこにでも電話してください:

var title=  GetResourceTitle<*YouResourceClass*>(key);

任意のリソースファイルの文字列を取得するための汎用関数が必要な場合に便利です。

4
A.Dara