2011-08-11 8 views
1

私はこのフォームアプリケーションで作業していますが、C#プロジェクトでローカライゼーションを使用しています。ここで、さまざまなテキストエントリがリソースファイル(GlobalLanguages.resxおよびGlobalLanguages.fr.resx) 。これらは埋め込みに設定されています。C#application:インストーラをビルドした後にローカライゼーションDLLが見つかりません

VS 2008のデバッグ/リリースでアプリケーションを実行するとすばらしいことになりますが、VS 2008以外の出力フォルダからexeを起動すると動作します。しかし、ビジュアルスタジオインストーラプロジェクトをビルドすると、それを私のマシンにインストールすると、ローカライゼーションは機能しません。インストールフォルダに.fr.resx値を含む.dllファイルがあります。

インストーラプロジェクトは、メインプロジェクトのローカライズ出力を含むように設定されています。また、インストールされているアプリの現在のロケールをログファイルに出力すると正しい値が得られますが、テキストはデフォルトの言語で表示されます。

私たちは、exeファイル内のいくつかの.dllファイルをマージするのに、リソースの.dllが見つかる可能性があるので、問題ではないと思います。私は本当にすべてを試しましたが、私は今考えています...

あなたが助けてくれることを願っています。

おかげ

+0

GlobalLanguages.fr.dllファイルは、thフォルダと同じフォルダにありますかe exeまたはexe dirの下の "fr"ディレクトリにありますか?これを変更すると、動作が変わりますか? –

+0

あなたが言ったように、それはサブフォルダ "fr"にあります。私はしようとし、メインのフォルダに移動し、私は私のPCに戻ってすぐに何かをしないかどうかを確認します。ありがとう – Andy

+0

ちょうどVSの下のbin/debugのときと同じフォルダ構造を持っていることは正しいはずです。また、ilmergeを使わないで試してみてください。 –

答えて

0

はちょうど診断のためにこれを試してみてください。(あなたは明らかにクラス名/名前空間を変更する必要があります)。

Type t = typeof(SomeClassInLanguageAssembly); 
Assembly languageAssembly = t.Assembly; 
Console.WriteLine("Current UI culture: "+Thread.CurrentThread.CurrentUICulture); 
Console.WriteLine("Resources in assembly:"); 
languageAssembly.GetManifestResourceNames().ForEach(Console.WriteLine); 
ResourceManager r = new ResourceManager("Language.Assembly.Namespace.ResourceName", languageAssembly); 
Console.WriteLine("'YES' -> " + r.GetString("YES")); 

私はそれが例えば出力することを実行する場合:

現在のUIカルチャ:FRアセンブリ内

資源:

Company.Application.Language.Resources.resources

'YES' - > Oui

+0

スニペットありがとう、私はそれを後で試してみます。今のところ、私はちょうど2つの別々のリソースファイルで言語を分割し、正しい値を取得するために自分のコントローラを書きました。解決策を見つけるのに時間を浪費しすぎて、約2時間でアプリケーションのコンセプトデッドラインの証明を得ました。ご協力いただきありがとうございます。 – Andy

関連する問題