2009-06-25 12 views
1

これは、今日の私の初期のポストに関連している:link text配布ローカライズリサイズアプリ

は、だから今私は2つの異なるローカリゼーション、英、スペイン語のいずれかでデモのWinFormsアプリを持っています。さて、私は大きなアプリを持っているとしましょう。これは15言語のローカリゼーションをサポートしています。以前の記事では、ローカライゼーションを設定するためにフォームが初期化されたときに、いくつかの行を追加することを提案しました。現在、私はアプリケーションをデプロイするために一度クリックを使用しています。私はアプリの15種類の味がなくても展開する方法を見つけようとしています。現在のユーザーのローカリゼーションを調べる方法はありますか?使用している画面を書いた言語のいずれかと一致する場合はそれを使用しますか?そうでない場合はデフォルトを使用しますか?

答えて

2

.NETフレームワークのビルトインローカライゼーションシステムは、このフォールバック状況を既に処理しています。フォームとコントロールをローカライズするサテライトDLLをインストールするだけで、適切なものがユーザーのロケールに一致する場合は.NETが使用します。そうでない場合は、関連する親ロケールにフォールバックします。たとえば、アプリケーションのデフォルトの言語がENが-USですが、エンGBの翻訳を提供してきたし、翻訳途中、その後、フォールバックがある場合:

エンGB->エン> EN-US

つまり、en-GBを使用できない場合はenを探し、存在しない場合はen-USを使用します。

したがって、配布するときは、メインのen-USアプリケーションだけを配布し、特定の言語用の追加のサテライトDLL、たとえば言語パックを提供することができます。アトリビュートSatelliteContractVersionAttributeがあります。これにより、主なアプリケーションアセンブリで必要な衛星バージョンを示すことができます。これにより、ローカライゼーションがアセンブリバージョン間で機能するようになります(アセンブリバージョンがビルドで増加する場合など) )。

MSDNには、グローバル化とローカリゼーションに関する情報と、ClickOnceの展開のコンテキスト内でのこの動作の仕組みがあります。 Globalizing Windows Forms sectionを確認してください。

もちろん、グローバル化された製品をサポートするために.NETシステムに頼らないことを選択した場合は、選択した方向に適したものを考え出す必要があります。

+0

ジェフ、私は、現在のロケールを拾うために私のアプリを取得するために、次を追加する必要がありました。これは大丈夫ですか?私は一度私の標準と形式を切り替えると、私のアプリケーションが正しく読み込まれました。私はあなたのポストからすべて設定されているように聞こえる。 String cultureName = System.Globalization.CultureInfo.CurrentCulture.Name; System.Globalization.CultureInfo myCI = new System.Globalization.CultureInfo(cultureName、false); System.Threading.Thread.CurrentThread.CurrentUICulture = myCI; System.Threading.Thread.CurrentThread.CurrentCulture = myCI; –

+0

CurrentUICultureを変更するときは注意してください。これはリソースに関連しておらず、ユーザーが数値書式設定などのために設定したカスタム設定を破ることができるので、通常はそれだけで十分です。 –