Neue Text-Funktionen
In Framework Studio 4.2 wurden im Zuge der Umstellung auf die MLKeys auch die Text-Zugriffe auf Text-Collections und DevMLStrings überarbeitet.
Note
Auch wenn keine MLKey-Migration ausgeführt wird, muss die Convert Messages Routine trotzdem ausgeführt werden, damit die Verarbeitung der Fremdsprachen-Texte korrekt funktioniert.
Siehe Abschnitt Migration auf Version 4.2
Bei der Verwendung von this.Global.SelectedLanguage
erfolgt kein Fallback auf andere Sprachen. Aus diesem Grund sollte dies nicht mehr verwendet werden. Für das ermitteln des Textes wurden deshalb einfachere Varianten geschaffen, die ohne explizite Angabe der Sprache arbeiten. Andere Stellen erhalten jetzt stattdessen das komplette this.Global
um daraus die Sprach-Hierarchie inkl. Fallbacks zu ermitteln.
Die Text-Ermittlungen benötigen auch immer einen Zugriff auf das GlobalObject, damit die zentralen Einsprungpunkte immer angelaufen werden.
Text-Collection
Soll für einen bestimmten Text-Collection-Eintrag der Text ermittelt werden, dann erfolgt dies idealerweise über die Factory-Klasse. Dort wird eine Methode GetText(global, id)
angeboten. Diese Methode Liefert den Text in der aktuellen Sprache / Sprach-Hierarchie, welche über das GlobalObject festgelegt ist.
string sText = ctTextCollFactory.GetText(this.Global,7);
Wird der Text in einer bestimmten Sprache benötigt, dann muss über die Methode Get(global, id)
der Text-Collection-Eintrag ermittelt und an diesem mit der Methode GetText(iso)
der gewünschte Text ermittelt werden.
string sText = ctTextCollFactory.Get(this.Global,7).GetText(sIsoCode);
Text-Collection-Eintrag
Manchmal wird auch mit bestimmten Einträgen der Text-Collection gearbeitet. Dieser bietet die folgenden Möglichkeiten, den Text zu ermitteln.
Das Property Text
liefert den Text in der aktuellen Sprache / Sprach-Hierarchie, welche über das GlobalObject festgelegt ist.
string sText = oTextCollEntry.Text;
Die Methode GetText(iso)
liefert den Text in einer gewünschten Sprache. Dabei erfolgt kein Fallback auf eine andere Sprache. Ist in der angegebenen Sprache kein Text formuliert, wird String.Empty
zurückgegeben.
string sText = oTextCollEntry.GetText(sIsoCode);
Über das Property Value
wird ein Objekt mit dem Typ DevMLString
zurückgegeben. Dieses hat aber selber keinen Bezug zum GlobalObject, weshalb ihm zur Ermittlung der Texte ein GlobalObject übergeben werden muss. Es sollten wenn möglich die o.g. Wege zur Ermittlung der Texte benutzt werden. Das Property Value
ist nur in Ausnahme-Fällen zu verwenden.
DevMLString
Zur Ermittlung eines Textes muss ein GlobalObject übergeben werden. Es gibt dazu die folgenden Möglichkeiten:
// Text in aktueller Sprache / Sprach-Hierarchie
string sText1 = oDevMLString.GetString(this.Global);
string sText2 = oDevMLString[this.Global];
// Text in bestimmter Sprache
string sText3 = oDevMLString.GetString(this.Global, sIsoCode);
Obsolete Schnittstellen
Am DevMLString wurden einige Properties/Methoden auf Obsolete gesetzt, weil sie kein GlobalObject verwenden. Beim Compile werden betroffene Stellen als Warning ausgegeben.
// Diese Aufrufe sind Obsolete!!!
string sText1 = oDevMLString.GetString(sIsoCode);
string sText2 = oDevMLString[sIsoCode];
string sText2 = oDevMLString.German;
Die Methode GetDefinedLanguagesAsIso()
macht keinen Sinn mehr, weil die Texte nicht mehr dieser Stelle definiert sind. Nach der Umstellung auf den MLKey wird als Iso-Code nur noch der Wert "_key"
zurückgegeben.
Migration auf Version 4.2
Um eine saubere Funktion der Fremdsprachen-Texte zu gewährleisten, müssen diese Aufrufe mit dem Update auf die Version 4.2 umgestellt werden. Ein sehr großer Teil der Aufrufe wird mit der Convert-Messages Routine in der MLKey-Migration automatisch umgesetzt. Es bleiben aber einige wenige Stellen übrig, die manuell nachgearbeitet werden müssen. Sie werden beim Compile durch die Obsolete-Warning erkannt.
Im folgenden werden ein paar Code-Beispiele aufgeführt, die verdeutlichen, wie die Umstellung zu erfolgen hat.
Alter Code | neuer Code |
---|---|
ctAbcFactory.Get(this.Global,7).Value[this.Global.SelectedLanguage] |
ctAbcFactory.GetText(this.Global,7) |
ctAbcFactory.Get(this.Global,7).Value[sIsoCode] |
ctAbcFactory.Get(this.Global,7).GetText(sIsoCode) |
oTextCollEntry.Value[Global.SelectedLanguage] |
oTextCollEntry.Text |
oTextCollEntry.Value.GetString(sIsoCode) oTextCollEntry.Value[sIsoCode] |
oTextCollEntry.GetText(sIsoCode) |
oTextCollEntry.Value.German |
oTextCollEntry.GetText("de") |
oDevMLString.GetString(sIsoCode) oDevMLString[sIsoCode] |
oDevMLString.GetString(this.Global, sIsoCode) |
oDevMLString.German |
oDevMLString.GetString(this.Global, "de") |