2010-11-26 15 views
1

リソースファイルを使用して複数の言語をサポートしたいサーバーアプリケーションがあります。それはサーバーなので、サテライトアセンブリを使用することはできません(異なるスレッドは異なる言語を使用するため)。複数言語のリソースファイル

私は次のように複数のリソースファイルを追加しようとしました:

  • MyResourceName.resx
  • MyResourceName.sv.resx

彼らは1つのテキストを1つの文字列のテーブルが含まれていますそれら。

言語を切り替えるのにThread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(1053);を使用しました。しかし、var string = MyResourceName.MyTextを使用するとき、私はまだデフォルト言語を持っています。

IveはCurrentUICultureも変更しようとしました。

複数言語のサポートを追加するにはどうすればよいですか?

更新

それが重要かどうかを知るしないでください。しかし私はユニットテストプロジェクト(mstest)の中から試しています。リソースファイルもテストプロジェクトの一部です。

答えて

0

まず、これを制御するのはCurrentUICultureです(これも試したことに気付きましたが、明確化したかっただけです)。

2番目:アプリケーションはマルチスレッドですか?あなたはCurrentUICultureを1つのスレッドに設定することができますが、MyResourceName.Textを別のスレッド(同じカルチャを持たない)で読み込むことができますか?

+0

いいえ、同じスレッド。 – jgauffin

0

あなたはResourceManager

このよう
var manager = new ResourceManager("you.resource.strings.file", Assembly.GetExecutingAssembly()); 

を持っている場合は、常にパラメータとしてCultureInfoオブジェクトを取るオーバーロードさGetStringメソッドを呼び出すことにより、希望する言語ででそれから文字列を取得することができます。そのようにして、あなたのスレッドに文化を設定する必要はありません。

var string = manager.GetString("myText", CultureInfo.GetCulture(1053)); 
+0

どちらもうまくいきませんでした。それは私の第2の(swedish)リソースファイルが見つからないようなものです。 – jgauffin

+0

dllファイルがコンパイルされると、実際には/ binの下にsvサブフォルダがありますか? –

+0

私は 'sv'という名前のサブフォルダを取得しました。私はリフレクタを使って内容を検査しました。フレーズがそこにあります。しかし、私は既定の言語のアセンブリを取得しないでください? – jgauffin

0

.RESXが「埋め込まれたリソース」(「ResXFileCodeGenerator」にカスタムツールセット付き)のVisual Studioでビルドアクションで定義されている場合は、スウェーデン用にコンパイル.resources.dllを展開する必要があります。 bin \ svフォルダにあるはずです。

ASP.NET Webアプリケーションの場合、App_GlobalResourcesという名前のフォルダに.RESXファイルを定義すると、bin \ svフォルダは作成されません(この場合、ビルドアクションはカスタムツールセットの「コンテンツ」になります) "GlobalResourceProxyGenerator"へ)、あなたが言うように、追加のdllをデプロイする必要はありません。

両方の場合、コードは正常です(CurrentUICulture、CurrentCultureではありません)。

関連する問題