アダプターのローカライズに関する問題点
ここでは、カスタム アダプターを作成するときに発生する可能性のあるローカライズに関する問題を取り上げます。
XSD の問題点
アダプターの開発者は、アダプター フレームワークを使用して、アダプターのプロパティ ページを XML スキーマ定義 (XSD) スキーマで実装できます。
アダプターにグローバリゼーションまたはローカライズの要件がない場合は、 IDynamicAdapterConfig:GetConfigSchema 関数内で XSD スキーマ文字列をハード コーディングできます。
アダプターにグローバリゼーションまたはローカライズの要件がある場合は、2 つの方法のうちのいずれかを使用して XSD スキーマを実装できます。
デザイン時バイナリの外で個別の XSD ファイルを使用します。 スキーマのテキスト全体をマニフェスト リソースにします。
プロパティ名と説明をリソースから動的に置き換えます。
_locID をローカライズする各要素に追加します。
xpath を使用して、_locID 属性を持つスキーマ内のすべてのノードを返します。
リソースで、_locID の値によりインデックス化された文字列を検索します。
ノードのテキストを結果に置き換えます。
2 つ目のオプションのサンプル コードを以下に示します。
string mySchema = GetSchemaFromResource(“mySchema”);
string myLocalizedSchema = LocalizeSchemaDOM (mySchema, resourceManager);
// where…
protected string GetSchemaFromResource (string name)
{
Assembly assem = this.GetType().Assembly;
Stream stream = assem.GetManifestResourceStream(name);
StreamReader reader = new StreamReader(stream);
string schema = reader.ReadToEnd();
return schema;
}
protected XmlDocument LocalizeSchemaDOM (string schema, ResourceManager resourceManager)
{
XmlDocument document = new XmlDocument();
document.LoadXml(schema);
XmlNodeList nodes = document.SelectNodes
("/descendant::*[@_locID]");
foreach (XmlNode node in nodes)
{
string locID = node.Attributes["_locID"].Value;
node.InnerText = resourceManager.GetString(locID);
}
return document;
}