2010-12-27 18 views
2

は、誰かが私がしたい:)ローカライズは、私は非常に長い時間のための私の問題の解決策を見つけることができません

私は、Visual Studio 2008(C#の)アプリケーションで開発してい

と助けることができるここを願ってのVisual Studioでパスをファイルそれは多言語である。

これは実行時にプラグインを読み込むメインのWinFormアプリケーション(Main.exeと呼ぶ)です。 "プラグイン"は.dllファイルにコンパイルされたUserControlで、プラグインのロジックと要素をすべて入れます。必要に応じて、Main.exeは.dllファイルからアセンブリを読み込みます。
アセンブリasm = Assembly.LoadFile(pluginFilePath);
とそれからパネルにUserControlを添付します。

ソリューションエクスプローラで ソリューションエクスプローラでプロジェクトを翻訳します。Messages.resxファイルを配置し、文字列とメッセージをデフォルト言語(例:Name = greetings、value = Good morning everyone)に追加します。 次に、resxファイルのコピーを作成し、Messages.es-ES.resxという名前でスペイン語で翻訳します。すべての値をスペイン語に変更します(Name = greetings、value = Hola a todos)。 他の言語でも同じです。
コード内で使用する場合は、
Messages.greetings
を使用してローカライズされたテキストを取得することができます(IntelliSenseはこのソリューションで動作していますので、このようにしたいと思います)。

私はプロジェクトをコンパイルするとき、私は構造を以下ました:

C:\ APP_DIR \
| ---------------- MAIN.EXE
| - --------------- es-ES \ Main.resources.dll < - 私のメインプログラムのローカリゼーションファイルがes-ESディレクトリにあります。
| ----------------プラグイン\ < - 私はプラグインで同じことをやって、今の別々のdirs

でプラグインを保つディレクトリ(myPlugin.dll )私に以下のファイルがあります:
C:\ Plugin_dir \
| --------------- myPlugin.dll
| ------------- - es-ES \ myPlugin.resources.dll < - 私のプラグインのローカリゼーションファイル

ここで問題は、それ一緒に働く: 私はローカライズファイルを使用してプラグインを展開し、次のようにそれらを入れたい:
C:\ APP_DIR \
| ---------------- MAIN.EXE
| ---------------- es-ES \ Main.resources.dll
| ---------------- Plugins \ MyPlugin \ myPlugin .dllが
| MAIN.EXEで----------------プラグイン\ MyPlugin \ ES-ES \ myPlugin.resources.dll

私は両方を設定します。
システム。現在のスレッドのスレッドを新しいCultureInfo( "es-ES")に、プログラムMain.exeをスペイン語で実行したいのですが、.dllからプラグインを読み込むとデフォルト(英語)の言語になります...

両方(メインおよびプラグイン)構造は、次のされたときにスペイン語のみ、である:
C:\ APP_DIR \
| ---------------- MAIN.EXE
| ---------------- es-ES \ Main.resources.dll
| ---------------- es- ES \ myPlugin.resources.dll
| ----------------プラグイン\ MyPlugin \ myPlugin.dll

が、これは、私はそれになりたい方法ではありません - Iプラグインのローカリゼーションファイルがプラグイン自体とは別のディレクトリに存在しないようにしてください。

私の質問です:誰もこの問題を解決する方法を知っていますか?特定のパスからローカライゼーションファイルのロードを強制的に行う方法や、アセンブリを探す場所を設定する方法はありますか?
敬具、
マルチン

+0

特にタグフィールドに同じタグを入力すると、件名に[tags]を入れないでください。 – abelenky

+0

アセンブリを読み込むさまざまな方法を試しましたか?特に、Assembly.Load(AssemblyName)?パスとコンテキストの解決には違うルールがあるようです。 – Jester

答えて

0

それを探すために「力」特定のパスからローカライズファイルの読み込みや設定アセンブリへのいくつかの設定をする方法はありますか?

いいえ、ありません。サテライトアセンブリは、GACまたはappディレクトリのサブディレクトリのいずれかになければなりません。詳細はthis pageを参照してください。

0

スペイン語のリソースDLLがプラグイン\ es-ESの下にある場合、問題を正しく理解すると、スペイン語のテキストを取得できません。しかし、リソースファイルを< \ es-ESに直接置くとうまくいきますか?

簡単に修正するには、アセンブリを検索するときにMyPluginsフォルダを含めるように.NETに指示するのが簡単です。

あなたはapp.configの次のコードでこれを行うことができます。

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="myPlugin"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

http://msdn.microsoft.com/en-us/library/823z9h8w(v=VS.100).aspx

2

私は、プラグインのシナリオで同じ問題を持っていました。 Assembly.LoadFileをAssembly.LoadFromに変更すると、すべてが期待通りに機能しました。

関連する問題