2011-02-01 20 views
0

多言語アプリケーションを作成しようとしています。言語ファイルのための別のフォルダ

app.nl-NL.resx 
app.en-GB.resx 

など

をしかし、私は、コンパイル時に、それがコンパイルされたリソースファイルを使用して、各リソースファイル用のサブディレクトリを作成します。私のような言語ごとに個別のリソースファイルを使用しています。

例:

app\bin\Debug\nl-NL\app.resources.dll 
app\bin\Debug\en-GB\app.resources.dll 

など

どのように私は、\ NL-NL_デバッグ\ラング\ _appの\ビンのように別々のディレクトリにそれをすべて置くのですか?

答えて

3

すべてを別のフォルダに置くことができます。 こちらは類似していますquestion with solutionです。 私はこの問題を抱えていましたが、これは私が解決した方法です: まず、プログラムがローカライズされたリソースを検索するフォルダのリストに "Lang"フォルダを追加する必要があります。 そのために、あなたのプロジェクトのファイルをを.configするためにこのような行を追加する必要があります

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

info about probing element on msdn

より、後にあなたがあなたの生成された「XX-YYの\のapp.resources.dll」フォルダを移動することができます再構築Langフォルダを手動で作成するか、ポストビルドのイベントコマンドラインに小さなスクリプトを追加して自動的に移動させることができます。 は、私がこのようなコマンドを使用:

robocopy $(TargetDir) $(TargetDir)\Lang "$(TargetName).resources.dll" /CREATE /S /XD Lang /IS /IT 
robocopy $(TargetDir) $(TargetDir)\Lang "$(TargetName).resources.dll" /MOVE /S /XD Lang /XL /IS /IT 

しかし、robocopyをのリターンコード1は、通常の動作であり、Visual Studioが、それは誤りであると仮定されることに注意してください。したがって、ポストビルドで使用される他のコマンドがあれば、それらの前にrobocopyを置くだけです。 hereのように%errorlevel%を確認してください。

もっと良い解決策があるかもしれませんが、それは私にとってはうまくいきます。

2

ローカライゼーションを有効にする場合は、サテライトアセンブリをそのまま残す必要があります。

これは、ディレクトリ名に従ってリソースを検索する方法です。

this MSDNページ(衛星アセンブリの作成)の「グローバルアセンブリキャッシュにインストールされていないサテライトアセンブリのディレクトリの場所」を参照してください。

+0

ok that sucks :(やあ、ありがとう! –

関連する問題