2011-12-05 7 views
3

私はC#3.5とWindows Forms(そして重要なのはTelerik components)を使用しています。 3つの異なる言語(つまり、N ..)で3つの異なる画像(アイドル状態、マウスホバー状態、クリック状態)を使用するにはどうすればよいですか?Windowsフォームでのイメージリソースのローカライゼーション

リソースイメージ(JPEGファイルなど)を追加するときに、リソースマネージャを使用して取得できます。すべてが素晴らしいです。また別の画像()を追加して、別の名前のを使用して、ファイルの言語を変更して画像を変更することもできます。

質問: 同じ名前を付けることができない場合は、各言語のボタンイメージを正しいイメージに変更するにはどうすればよいですか(resource.resxのegajp、resources-foo.resxのa.jpg 、など)。

現在の文化をコードにチェックインし、OnMouseEnter/Leaves/Downの画像リソース名を使用して3つの画像の間の切り替えを実装するのは現実的ではないと思います。

平均的なアプリケーションは、100個の+のボタンを持っていたよう...私は(...または見つける。)を考えることができないということ、それを行うには、シンプルで簡単な方法がなければならない

答えて

3

.NETのResourceManagerは文字列のローカライズだけでなく、イメージを含むあらゆる種類のローカライズされたバイナリコンテンツを提供することができます。つまり、イメージの関連するローカライズ版を選択するロジックを書く必要はなく、イメージファイルパスを操作する必要もありません。あなたはResourceManagerにあなたが望むイメージを与えるように頼むだけで、あなたにこのイメージの適切な言語バージョンを与えるでしょう(現在のUICultureによる)。

Visual Studioでは、リソースファイルに画像を簡単に追加できます。リソースエディタには、resxファイルに含まれているさまざまな種類のリソースを表示するためのボタンがあります(これは、ほとんどの人がよく知っている最も一般的な選択肢です)。もっと。

enter image description here

このMSDN linkは、全体のことを説明します。リソースからローカライズされたイメージを取得する方法の1つの例を示します。

rm = new ResourceManager("Images", this.GetType().Assembly); 
pictureBox1.Image = (System.Drawing.Image)rm.GetObject("flag"); 
+0

問題は、最初の画像を追加するときに、Resource.resxに "flag.png"と言うことができます。すべてが素晴らしいです。私は別のresxファイル(Resource.foo-BAR.resxなど)に行き、 "flag.png"ファイルを追加しようとしましたが、エラーメッセージが表示されます: "名前を持つファイル '...... \ flag .png "が存在します。既存のファイルとして追加した場合、または新しいイメージを作成した場合、同じメッセージ... –

+0

Visual Studioソリューションを見ると、ファイルを追加しない限り表示されますリソースが既にソリューションに存在する場合は、そのコピーを作成するので、各言語バージョンに「flag.en-US.png」や「flag.fr」などの固有の名前を付けるか、 FR-FR \ flag.png "などの独自の言語サブフォルダ内のソリューションに最初に追加することで、これらをVisual Studioに追加することができますそれ以外の場合はVisual Studioがそれらをコピーしようとし、あなたが言及したエラーを与える) – Clafou

0

私はリソースを使用しますファイル。彼らは次のように動作します: "もしこの言語を使用していれば、 'Button1A.jpg'をロードし、他の言語を使用している場合は 'Button1B.jpg' 'などをロードします。構文や実装方法はわかりません。あなたはどこかで言語/ロケールを指定できると確信しています(あるいは、Windowsの設定に基づいてあなたのために指定されているかもしれません)。そして、あなたはいつどの画像を使うのかを指定するだけで、あなたのために残ります。

リソースファイルを確実に検索します。

私はリソースファイルのデフォルトの使用が文字列のためだと思います。したがって、異なるイメージを読み込むのではなく、異なる翻訳された(ローカライズされた)文字列を読み込むために使用されるはずです。しかし、これよりむしろ、文字列の代わりに別のファイルパス(異なるイメージへのファイルパス)を提供するだけです。

うまくいけば、わかりました。申し訳ありませんが、例を挙げないと申し訳ありません。

+0

リソースを使用していますが、各言語のボタンごとに3つのイメージがあります。私が言ったように、各langaugeのための1つのイメージは、実際の問題ではありません。問題は3 * N(= lanuguages)の画像であり、if(culture = ...){image = ...;画像を作成せずにtogtherを動作させる方法です。 } else if ...'ボタンごとに... –

+0

「button_1_path = resource_button_1_path」のような言い方はできますか? –

+0

もしリソースファイルが(ロケール1)、それ以外の場合は(もしあなたが)リソース文字列名を与え、これがロケールであれば、これはリソース文字列名です私はファイルパス。ロケールとリソース文字列の間のマップとして機能します。 –

関連する問題