3

文字列を保持するためのリソースファイルをいくつか作成しました。次のようにリソース文字列を参照するだけで、という名前のリソースファイルと名前付きのリソース文字列をMessageBox直接ポイントして表示しています。TestLocalResourceThisIsMyTest

TestLocalResource.ThisIsMyTest

今、これは機能しているように見えます。しかし、このようにリソース文字列を参照することで、ドイツ語バージョン(たとえば)ではなく、常にデフォルトのリソースファイル(たとえば)にアクセスするのだろうかと疑問に思います。TestLocalResource.resxTestLocalResource.de-DE.resx

代わりに、使用する必要がありますResourceManagerか?もしそうなら、どのようにしResourceManagerて現在の言語(文化)を知るのですか?明示的に設定する必要がありますか?

これは私が使用する必要があると私が思う方法ですResourceManager

ResourceManager resmgr =
    new ResourceManager("MyApplication.MyResource", Assembly.GetExecutingAssembly()); 

しかし、より便利な方法でローカライズされたリソース文字列にアクセスする方法があることを望んでいます。

4

2 に答える 2

11

ResourceManager を明示的に使用する必要はありません。
ここを見てください: http://geekswithblogs.net/mapfel/archive/2008/11/01/126465.aspx
実行時に使用するカルチャを変更する方法については、リンクの2 番目のコメントを参照してください。

switch (comboBox1.Text)
{
    case "neutral":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("");
        break;
    case "en-GB":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
        break;
    case "de-DE":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
        break;
}

string messageText = Messages.MsgSampleText;
MessageBox.Show(messageText); 
于 2011-03-09T13:47:50.527 に答える
1

@Daniel Hilgarth がanswerで参照した記事で、著者は、とという名前のリソース ファイルをそれぞれフォルダーに作成する必要があることを示しています。(フォルダーは、Visual Studio が という名前の汎用リソース ファイルを配置する場所でもあります。)Messages.resxImages.resxPropertiesPropertiesResources.resx

Visual Studio 2013では、ソリューション エクスプローラーでノードを右クリックしてMessages.resxも、フォルダーを作成して配置できないことがわかりました。代わりに、これが私がしたことです:PropertiesProperties

  1. ソリューション エクスプローラーで、プロジェクト ノードを右クリックします。
  2. Add => New Item... => Resources File => を選択しMessages.resxます。結果: Visual Studio は Project フォルダーに配置Messages.resxされます
  3. ソリューション エクスプローラーで、ノードにドラッグMessages.resxPropertiesます。

@Daniel が示すように、という名前の新しいクラスはMessages、リソース文字列へのアクセスを便利に提供します。名前空間Messagesを介してアクセスできることに注意してください(はソリューション エクスプローラーに表示されるプロジェクトの名前です)。YourProject.PropertiesYourProject

たとえば、 という名前のリソース文字列があるとしますOperationSucceeded。次の方法でそのリソース文字列にアクセスできるようになります。

MessageBox.Show(YourProject.Properties.Messages.OperationSucceeded);

...または、より便利に:

using YourProject.Properties;

MessageBox.Show(Messages.OperationSucceeded);
于 2017-01-06T15:37:25.497 に答える