1

Silverlight に移植したい WPF アプリで MarkupExtension 継承を使用しています。

xamlでこのように使用できる「ロケール」マークアップ拡張を作成しました

<TextBlock Text="{ui:Locale aRandomId,'My default translation'}" />

実際、この MarkupExtension は、適用されるプロパティを文字列「My default translation」にバインドするか、見つかった場合は「aRandomId」という名前のデータベースに格納された文にバインドします。

この MarkupExtension を使用すると、UI のロケールを動的に変更できます (markupextension は、バインドされたすべてのプロパティの更新をトリガーする弱いイベント 'LocaleChanged' に登録されます)。

Silverlight では MarkupExtension を継承できないため、それを置き換えるメカニズムがあれば教えてください。

ありがとう。

PS : 必要に応じて、この MarkupExtension のソースを提供できます。

4

2 に答える 2

0

これには多くの伝統的な回答が得られることは承知していますが、バインドの代わりに添付プロパティを使用して、Silverlight のより効率的なローカリゼーションを実現するために自分たちで試みた (そして成功した) 完全に独創的なものを提案したいと思います。

リンク:完成後の Silverlight プロジェクトのローカリゼーション

リソースとバインディング ソリューションはすべてプロジェクトで翻訳を設定する必要があるため (したがって、変更された場合はアプリを再デプロイする必要があるため)、面倒で柔軟性がないことがわかりました。

また、選択された言語は決して変更されず、変更されるとすべての文字列が一度に変更されます。言語が変更された場合に現在のページを再生成するだけでよい場合、その目的のためにバインディングのオーバーヘッドを運ぶことは非常識に思えます。

従来、翻訳はバッチで送信され、言語ごとに管理されていました (一意のキー、翻訳者のメモなど)。

当社のソリューションは、中央のサーバー データベースでローカリゼーションを管理することを意味しますが、翻訳者がアプリケーションの使用中に使用できるように、アプリケーション自体の中にローカリゼーション エディターを提供することもできます。

  • 任意の数の言語の中央リポジトリ
  • 新しいデータをダウンロードして言語を変更する (大きなアプリでは言語ごとに最大 200 KB)
  • 必要な言語のみをダウンロードし、その場で変更
  • 翻訳者によるリソースのアプリ内編集をサポートします (追加の UI フォームが必要です)。
于 2011-09-12T12:19:42.220 に答える
0

その正確な目的のために、私は Converter と ConverterParam を使用しています。

MSDN Binding.Converter

実行するのは非常に簡単ですが、アプリにそれらをたくさん入れ始めると、非常にボイラープレートのように感じます。

更新: 多分私はあなたのニーズを過度に複雑にしています... 私のアプリでは、2 つの使用パターンがあります。最も単純なケースでは、ローカライズされた辞書の文字列を取得したいだけで、次のようになります。

Text="{Binding Localization[my_string_key], Source={StaticResource ViewModelLocator}}"
于 2011-09-12T12:05:31.347 に答える