3

VS2012でWPFC#アプリを開発しています。このアプリでは、ソリューション内の別々のプロジェクトにさまざまなソースからのUserControlがあります。可能であれば、ソリューション全体のすべてのUI文字列を1か所にローカライズしたいと思います。

locbamlは、すべてのクラスライブラリに表示されるため、実際にはこの種の設定ではないようです。クラスライブラリDLLごとに個別のリソースDLLを作成する必要がありますか?

誰かがこれを行うためのベストプラクティスの方法についてのガイダンスを教えてもらえますか?複数のプロジェクトがあるソリューションにさまざまなローカリゼーション手法を適用する方法を理解するのに迷っています。

アドバイスありがとうございます。コーリー。

4

2 に答える 2

6

私の投稿を少し修正して、より包括的にします。

包括的なベストプラクティスについては、MSDNのこちらをご覧ください。

実際、3つの選択肢があります。

  1. 自分でローカライズします-独自のXML/テキストファイル/データベースソリューションを手作業でロールします。
  2. ローカライズするにはlocbamlを使用します。これは、アプリ内での動的言語切り替えを許可しません。
  3. resxファイルを使用してローカライズします。これにより、選択した実装に応じて、アプリ内で動的言語を切り替えることができます。

locbamlが最適であるシナリオはたくさんあり、ベストプラクティスのページで概説されていますが、resxファイルは適度に移植可能であり(形式は単純です)、動的言語スワッピングの要件を満たします。

(1)を選択する場合は、自分で行ってください。ゴッドスピード!:)

locbaml(2)を使用する場合は、最初に文字列をResourceDictionaryに抽象化して、すべての文字列を1つのファイルに入れてローカライズできるようにすることで問題に取り組むのが最善です。ここを参照してください:方法:ResourceDictionaryを使用してローカライズ可能な文字列リソースを管理する

リンクされた記事の詳細は引き続きlocbamlを使用していますが、単一のResourceDictionaryをローカライズするためにのみ使用する必要があります。この方法でリソースをきちんと分離しておくと、あなたの生活がずっと楽になるはずです。必要に応じて、ResourceDictionariesをカテゴリ別に分割できることに注意してください。プロジェクトには、1つのモノリシックファイルと複数の小さなファイルのどちらが適しているかが問題になります。

resxファイル(3)を使用することを選択し、痛みのない実行時の言語切り替えをサポートしたい場合は、この短いチュートリアル\サンプルコードが優れた出発点を提供します。 Prismを念頭に置いて書かれていますが、Prismの外部でも問題なく使用できます。resxファイルを使用する他のより単純なアプローチもありますが、最良のアプローチが必要な場合は、私見です。1つの(多分?)大きな注意点は、このアプローチはSilverlightでは機能しないということです。これはWPFの質問ですが、一部の人にとっては懸念事項になる可能性があることを認識しています。

于 2012-11-10T02:27:56.347 に答える
-2

WPFは、XAMLとRESXの2つのリソース形式を使用します。残念ながら、ほとんどすべてのベストプラクティスとここでのすべての回答は、XAMLのプレーンで単純な文字列を、複雑で保守が難しいRESX文字列への参照に置き換えることを推奨しています。

たとえば、

<TextBlock Text="Hello World"/>

次に、「ベストプラクティス」では、XAML文字列を削除し、RESXに追加して、最後にXAMLを参照に置き換えることをお勧めします。

<TextBlock Text="{Binding Path=Resource1.HelloText, Source={StaticResource LocalizedString }}"/>

+

<data name="LocalizedString" xml:space="preserve">
  <value>Hello World</value>
</data>

やめてください。RESXには、コードで使用されている文字列のみを配置してください。XAMLのすべての文字列はそのままにしておきます。RESXファイルとXAMLファイルの両方をローカライズしました。最後に、ローカライズされたRESXとXAMLを含む衛星アセンブリファイルをコンパイルします。

Visual Studioまたはlocbamlは、RESXのみをローカライズできます。テキストエディタを使用してXAMLを手動でローカライズできますが、これを行うことはお勧めしません。ローカライズされたXAMLは、元のXAMLと同一である必要があります。これは、構造が同じでなければならないことを意味します。元のXAMLとして、すべてのコンポーネント、プロパティ、およびイベントが含まれている必要があります。XAMLをローカライズする唯一の厄介な方法は、ローカリゼーションツールを使用することです。

ローカリゼーションツールを選択するときは注意が必要です。次の2つのことを実行する必要があります。

  1. XAMLとRESXをローカライズする
  2. ローカライズされたXAMLとRESXを衛星アセンブリファイルにコンパイルします。

このようなローカリゼーションツールを使用すると、ローカリゼーションがはるかに簡単になるだけでなく、ユーザーコントロールを独自のアセンブリに配置するか、それを使用するすべてのプロジェクトにリンクすることもできます。

于 2012-11-17T08:03:08.337 に答える