1

Localizable新しく作成されたユーザーコントロール/フォームのプロパティをtrueに設定する簡単な方法はありますか?設定の範囲は、理想的にはソリューションまたはプロジェクトである必要があります。

言い換えると、このプロジェクト/ソリューションはローカライズ可能である必要があり、新しいフォームまたはコントロールを追加すると、VSはプロパティを自動的にtrueに設定する必要があります。

編集:

カスタムテンプレートは可能ですが、大規模なチームでは常に使用されるとは限りません。つまり、ポリシーを適用し、テキストリソースを含むすべてのフォーム/コントロールをローカライズ可能にする必要がある場合に、チームメンバーがプロジェクト/ソリューションのプロパティの設定を省略しないようにすることが重要です。

注: TeamFoundationServerはオプションではありません。

4

2 に答える 2

2

リフレクションを使用して、フォーム/ユーザー コントロールがローカライズ可能としてマークされているかどうかを判断する単体テストを作成することができます。具体的には、型がローカライズ可能としてマークされている場合、その型に関連付けられた埋め込みリソース ファイルがあり、そのファイルには ">>$this.Name" 値が含まれます。サンプルコードは次のとおりです。

    private void CheckLocalizability()
    {
        try
        {
            Assembly activeAssembly = Assembly.GetAssembly(this.GetType());
            Type[] types = activeAssembly.GetTypes();
            foreach (Type type in types)
            {
                if (TypeIsInheritedFrom(type, "UserControl") || TypeIsInheritedFrom(type, "Form"))
                {
                    bool localizable = false;
                    System.IO.Stream resourceStream = activeAssembly.GetManifestResourceStream(string.Format("{0}.resources", type.FullName));
                    if (resourceStream != null)
                    {
                        System.Resources.ResourceReader resourceReader = new System.Resources.ResourceReader(resourceStream);
                        foreach (DictionaryEntry dictionaryEntry in resourceReader)
                        {
                            if (dictionaryEntry.Key.ToString().Equals(">>$this.Name", StringComparison.InvariantCultureIgnoreCase))
                            {
                                localizable = true;
                                break;
                            }
                        }
                    }
                    if (!localizable)
                    {
                        Debug.Assert(false, string.Format("{0} is not marked localizable.", type.FullName));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Debug.Assert(false, string.Format("Exception occurred: Unable to check localization settings.  {0}", ex.Message));
        }
    }

    private bool TypeIsInheritedFrom(Type type, string baseType)
    {
        while (type != null)
        {
            if (type.Name.Equals(baseType, StringComparison.InvariantCultureIgnoreCase))
                return true;
            type = type.BaseType;
        }

        return false;
    }

これが役立つかどうか教えてください。

于 2010-03-22T15:59:57.533 に答える
2

非常に簡単に変更でき、間違った値を持っていることを簡単に確認できるプロパティに努力する価値があるかどうかはわかりません。ただし、独自の項目テンプレートを作成できます。

例: プロジェクト + ユーザー コントロールの追加。Localizable プロパティを True に設定します。[ファイル + エクスポート テンプレート] で、[アイテム テンプレート] を選択します。次。追加したコントロールを確認します。次。すべての参照を確認し、必要のないものだけを省略します。次。適切なテンプレート名を付けます (「ローカライズ可能なユーザー コントロール」など)。

これで、プロパティ セットを持つ今後のプロジェクトでアイテム テンプレートを使用できるようになります。フォームなど、他の項目テンプレートについても必要に応じて繰り返します。

于 2010-03-19T10:47:12.100 に答える