Condividi tramite


Problemi di localizzazione degli adapter

Negli argomenti seguenti vengono illustrati i problemi di localizzazione che possono verificarsi durante lo sviluppo di adapter personalizzati.

Problemi XSD

Utilizzando Adapter Framework, gli sviluppatori di adapter possono implementare pagine di proprietà degli adapter con schemi XSD (XML Schema Definition).

Se l'adattatore non ha requisiti di globalizzazione o localizzazione, è possibile impostare come hardcoded la stringa dello schema XSD all'interno della funzione IDynamicAdapterConfig:GetConfigSchema .

Se l'adapter ha requisiti di globalizzazione o localizzazione, è possibile implementare lo schema XSD in due modi.

  • Utilizzare file XSD separati all'esterno del file binario della fase di progettazione. Rendere l'intero testo dello schema una risorsa di manifesto.

  • Sostituire dinamicamente Property Names e Description dalla risorsa:

    • Aggiungere _locID a ogni elemento che si desidera localizzare.

    • Utilizzare un xpath per il pull back di tutti i nodi dello schema con attributo _locID.

    • Cercare nelle risorse una stringa indicizzata con il valore dell'attributo _locID.

    • Sostituire il testo del nodo con il risultato.

    Di seguito è riportato il codice di esempio per la seconda opzione.

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