リサイズ:デフォルトでは、ローカライズを有効にする(プロジェクト/ソリューション・ポリシーを適用)
-
21-09-2019 - |
質問
、新しく作成したユーザーコントロール/フォームに対してtrueにLocalizable
プロパティを設定する簡単な方法はありますか?設定の範囲は、理想的ソリューションまたはプロジェクトでなければなりません。
言い換えれば、私はこのプロジェクト/ソリューションをローカライズする必要があります、と私は新しいフォームを追加したり、VSをコントロールしている場合、自動的にプロパティをtrueに設定する必要があることを言いたい。
の編集の
カスタムテンプレートが可能であるが、、大きなチームで、彼らが常に使用されない場合があります。だから、チームのメンバーは、それがテキストリソースを含むすべてのフォーム/コントロールは、ローカライズする必要があります要件であるプロジェクト/ソリューションのプロパティを設定するOMMITないことを保証し、ポリシーを適用に関する詳細です。
注:のTeam Foundation Serverは、オプションではありません。
。解決
わかりません。しかし、あなたはあなた自身の項目テンプレートを作成することができます。
は、たとえば:プロジェクト+ユーザーコントロールを追加します。 Trueにローカライズ可能プロパティを設定します。ファイル+エクスポートテンプレート、選択項目テンプレート。次。追加したコントロールをチェックしてください。次。すべての参照を確認し、必要なことは決してないだろうものだけを省略します。次。 (発言:「ローカライズユーザーコントロール」)、それは良いテンプレート名で付けます。
これで、プロパティが設定されている将来のプロジェクトで使用可能な項目テンプレートを持っています。フォームのように、他の項目テンプレートのため必要に応じて繰り返します。
他のヒント
これは、フォーム/ユーザーコントロールがローカライズとしてマークされているかどうかを決定するためにリフレクションを使用して単体テストを書くことが可能です。タイプがローカライズ可能としてマークされている場合は具体的に、そこタイプに関連付けられている埋め込まれたリソースファイルになりますと、そのファイルは「>> $ 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;
}
このことができます場合は私に知らせてくださいます。