2017-09-05 10 views
0

内部にいくつかのWinFormsを含むクラスライブラリプロジェクトを作成しました。 フォームをVSデザイナーでビルドして翻訳しました(Localizable = trueに設定)。サードパーティアプリケーションから使用するWinFormsをローカライズ

VSは、サテライトリソースファイルを含む各言語のアセンブリと異なるフォルダを作成します。

このアセンブリは、3者アプリケーションによって読み込まれます。

ここでは、3者アプリケーションからフォームを開始すると、フォームがローカライズされないという問題があります。 私たちのアセンブリは言語のサブディレクトリからリソースファイルを読み込むことができないようです。

このリソースファイルをコードで読み込むことは可能ですか?そのため、WinFormsのデフォルトのローカライズメカニズムが機能しますか?

編集

私はメイン3パーティのアプリフォルダに言語フォルダ(デ、EN、...)をコピーした場合、すべてが魅力のように動作します。

答えて

0

ご存知のように、ローカライズはスレッドカルチャによって異なります。あなたは、サードパーティのアプリケーションが起動時に適切な文化を設定することは確かですか?

MSDNから
// set culture on program startup 
CultureInfo ci = CultureInfo.GetCultureInfo("de-DE"); 
Thread.CurrentThread.CurrentCulture  = ci; 
Thread.CurrentThread.CurrentUICulture  = ci; 

// .NET 4.5 and above 
CultureInfo.DefaultThreadCurrentUICulture = ci; 
CultureInfo.DefaultThreadCurrentCulture = ci; 

「の.NET Framework 4および以前のバージョンでは、デフォルトでは、すべてのスレッドのUIカルチャは、Windowsシステムの文化に設定されている

その現在のUIカルチャが異なる用途のために。 .NET Framework 4.5では、DefaultThreadCurrentUICultureプロパティを使用すると、アプリケーションドメイン内のすべてのスレッドの既定のUIカルチャを定義できます。

.NET 3.5を使用している場合、スレッドプールとワーカースレッドのカルチャは、希望のアプリケーションカルチャとOSカルチャと異なる場合があります。必要であれば、各スレッドコールのカルチャをチェック/設定する必要があります。

+0

私はこれを試しましたが、問題はないようです。 私は、リソースファイルの作成をテストし、 'ResourceManager.GetString()'で自動生成されたResourceManagerを使用し、異なるCultureInfosを提供しましたが、成功しませんでした。 私のアセンブリは衛星リソースファイルを自動的に見つけてロードすることができません。 – Markus

+0

@ Markus:WinFormsのローカライゼーション機能は、.NET 1.0以降、このような問題はなく使用しています。あなたのアプリケーションのターゲットディレクトリにサテライトアセンブリがありますか?例えば。 MyForms.dllをMyApp.exeおよび "de"サブディレクトリのドイツ語MyForms.resources.dllと並行して実行しますか? – KBO

+0

はい。 私の問題は、3党のアプリケーションがアセンブリを読み込み、今実行中のアセンブリが衛星リソースを見つけることができないと思います。 私は、3つのパーティーのアプリケーションのメインフォルダに含まれているリソースファイル(de、en、...)をコピーする場合、それは魅力的なように動作します。 私はコードを介してリソースを手動でロードする必要がありますが、私は方法を知らない。 – Markus

関連する問題