Freigeben über


Lokalisierungsprobleme bei Adaptern

In den folgenden Themen finden Sie Informationen zu Lokalisierungsproblemen bei der Entwicklung benutzerdefinierter Adapter.

XSD-Probleme

Mithilfe des Adapterframeworks können Adapterentwickler Adaptereigenschaftenseiten mit XSD-Schemas (XML-Schemadefinition) implementieren.

Wenn ihr Adapter keine Globalisierungs- oder Lokalisierungsanforderungen hat, können Sie die XSD-Schemazeichenfolge in der Funktion IDynamicAdapterConfig:GetConfigSchema hartcodieren.

Wenn für Ihren Adapter eine Globalisierung oder Lokalisierung erforderlich ist, können Sie das XSD-Schema auf zwei Arten implementieren.

  • Verwenden Sie separate XSD-Dateien außerhalb des Binärcodes zur Entwurfszeit. Legen Sie den gesamten Text des Schemas als Manifestressource fest.

  • Ersetzen Sie dynamisch die Eigenschaftsnamen und -beschreibung der Ressource:

    • Fügen Sie jedem Element, das Sie lokalisieren möchten, eine _locID hinzu.

    • Verwenden Sie einen xpath, um alle Knoten des Schemas mit dem Attribut _locID zurückzuziehen.

    • Suchen Sie in den Ressourcen nach einer Zeichenfolge, die mit dem Wert der _locID indiziert ist.

    • Ersetzen Sie den Knotentext durch das Ergebnis.

    Der folgende Code ist ein Beispiel für die zweite Option:

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;  
}