8

概要

別の質問で、一部のランタイム コンパイル済みUserControlローカリゼーションの展開について尋ねました。ただし、ローカライズを展開する前に、コントロールをローカライズする方法が必要です。

バックグラウンド

コントロールは、独自の WinForms スタイルのデザイナーによって (.NET のデザイン サーフェイスのサポートなどを使用して) 作成され、. CodeCompileUnit、リソース resx、およびユーザー ソースを 1 つのファイルに結合するバイナリ形式として保存されます。これらのファイルは、実行時に別のツールによって適切にアセンブリにコンパイルされます。

これらをローカライズするには、ローカライズ可能なプロパティ値がリソースに格納されることをデザイナーとシリアル化に伝える必要があります。VisualStudio WinForms デザイナーは、呼び出された拡張プロパティとLocalizable、既定のカルチャを指定するための関連プロパティを使用してこれを行います。可能であれば、カスタム デザイナーでこのプロパティが必要です。

制約

開発者以外のタイプでも使いやすく、特定のアクションを制限するスタンドアロン デザイナー ツールが必要なので、Visual Studio の無料版 (つまり C# Express) を使用することはできません (私は既にそれを提案して失敗しました)。 ; したがって、これらの UserControl のニーズをローカライズする方法に対するソリューションは、これを補う必要があります。

質問

カスタム WinForms デザイナにローカライズ可能なサポートを追加できますか?

  • はいの場合、どのように?
  • いいえの場合、私たちの をローカライズする代わりにどのような方法がありUserControlますか? たとえば、なんらかの後処理、異なるファイル形式など。
4

2 に答える 2

3

あなたの質問を正しく理解したかどうかはわかりません。

コントロールがローカライズ可能かどうかを(逆)シリアル化するには、すべてのプロパティでSystem.ComponentModel.LocalizableAttributeを確認するだけです。

// Gets the attributes for the property.
AttributeCollection attributes = 
TypeDescriptor.GetProperties(this)["MyProperty"].Attributes;

// Checks to see if the property needs to be localized.
LocalizableAttribute myAttribute = 
(LocalizableAttribute)attributes[typeof(LocalizableAttribute)];
if(myAttribute.IsLocalizable) {
// Insert code for handling resource files here.
}

あなたはあなた自身のデザイナーを書くことに決めたので、あなたはこれをあなた自身でしなければなりません。

于 2009-08-03T09:32:52.113 に答える
1

System.ComponentModel.Design.LocalizationExtenderProviderをデザイン サーフェイスに追加する必要があります。

于 2009-08-09T00:21:52.650 に答える