2


2

HelloWorldプログラムを国際化する.NET

私は2つのリソースファイルを持つ小さなテストアプリを持っています( Resources.resx

私のフォームでは、Localizeプロパティをtureに設定しました。

私のアプリケーションでは、文字列を次のように取得しています。

this.Text = Properties.Resources.frmCaption;

私のリリースフォルダに、私は International_test.resources.dll`という名前のdllを持つ de-DE`フォルダを持っています。

私はこれをドイツ語に設定されている機械に配布しようとしていますが、引っ張られた弦はすべてまだ英語です。

International_test.resources.dll`を de-DE`フォルダに保存するか、単に `apps`ディレクトリに入れてみました。

ドイツ語のリソースファイルを使用するために何をしたらよいのでしょうか。

3 Answer


6


運がよければ、hello worldプロトタイププロジェクトを使用して、ビルドパイプラインのあらゆる部分をテストします。

リソースファイルを正しく設定したと仮定すると、役に立つかもしれないいくつかのサンプルコードがあります。 簡潔にするためにコード文書を削除しました。

パブリッククラスHelloWorld {public CultureInfo CultureInfo {get;}プライベートセット}

public HelloWorld(){CultureInfo = CultureInfo.CurrentCulture; }

public HelloWorld(文字列culture){CultureInfo = CultureInfo.GetCultureInfo(culture); }

パブリック文字列SayHelloWorld(){return Resources.ResourceManager.GetString( "HelloWorld"、CultureInfo); }}

[TestFixture]
パブリッククラスHelloWorldFixture {HelloWorld helloWorld;

[テスト] public void Ctor_SetsCultureInfo_ToCurrentCultureForParameterlessCtor(){helloWorld = new HelloWorld();} Assert.AreEqual(helloWorld.CultureInfo、CultureInfo.CurrentCulture、 "CultureInfoがCurrentCultureとして設定されることが予想されています"); }

[テスト] public void Ctor_SetsCultureInfo_ToAustralianCulture(){helloWorld = new HelloWorld( "en-AU"); Assert.AreEqual(helloWorld.CultureInfo.Name、 "en-AU"、 "CultureInfoをオーストラリアの文化に設定する必要があります"); }

[テスト] [ExpectedException(typeof(ArgumentException))] public void Ctor_ThrowsException_InvalidCultureName(){helloWorld = new HelloWorld( "Bogus");} }

[テスト] public void SayHelloWorld_ReturnsFallbackResource_OnUndefinedResource(){helloWorld = new HelloWorld( "en-JM"); string result = helloWorld.SayHelloWorld(); Assert.AreEqual( "Hello、World。"、結果、 "使用される予定の代替リソース文字列"); }

[テスト] public void SayHelloWorld_ReturnsAustralianResource_OnAustralianResource(){helloWorld = new HelloWorld( "en-AU"); string result = helloWorld.SayHelloWorld(); Assert.AreEqual( "G'Day、World。"、結果として "オーストラリアのリソース文字列が使用される予定です"); }}

このプロジェクトには、HelloWorld_文字列キー項目と "Hello、World" 値を含む_Resources.resx_ファイルと、それに対応する_HelloWorld_文字列キー項目と "G’Day、World" _値を含む_Resources.en-AU.resx_と、関連するhello worldウェブプロジェクトに表示されるので、英語以外の文字の表示をテストするためにzh-CH(我隻氣墊船裝裝晒鱔。:)のような他のもの。

最後に、使用されているカルチャを示すためにログを追加し(簡潔にするためにこの例では省略しました)、またリソース出力をリンクするためにAL.exeが呼び出されていることを確認します


0


私の問題は、私が自分の言語をドイツ語に設定した他の文化の設定で、XPの米国版を使用していることだと思います。 CurrentCultureとCurrentUICultureはまだ "en-US"のままです。

私がテストする最良の方法は、プログラムの開始時に次のように手動でカルチャを設定することです。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture( "de-DE"); Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture( "de-DE");


0


トンSiありがとう。

私はようやく私の問題を考え出しました。

私のリソースファイルはPropertiesフォルダにありますので、次のものを置く必要があります。

//using embedded resources
ResourceManager rm = new ResourceManager( "International_test.Properties.Resources"、Assembly.GetExecutingAssembly());