Lade...
 

Literale

Text-Konstanten im ClassiX®-System

In einer ClassiX®-Anwendung gibt es konstante Texte auf zwei Ebenen:

  1. im Basis-System:
    - durch den Programmcode der DLLs ausgegebene Fehlermeldungen und Informations-Texte
    - Namen von Wochentagen, Monaten
    - Begriffe wie "Kalenderwoche", "Quartal", ...
    - Namen der Maßeinheiten und Währungen
     
  2. im InstantView®-Code der Anwendung
     

Unterschiedliche Sprachen werden über einen Index ausgewählt. Die Indizes 0 (Deutsch) und 1 (Englisch UK) sind fest vorgegeben.
Weiter beliebige Sprachen - ab Index 2 - werden in den Locales nach den Bedürfnissen der Anwender bestimmt.

Wichtig: bei der Vergabe der Indizes für die Sprachen verschiedener Länder die Reihenfolge (0=Deutsch, 1=Englisch (UK), 2=erste weiter Sprache, 3=zweite weitere Sprache einhalten.
Die Locales bestimmen beim Start alle im ClassiX®-System bekannten Sprachen, welche und wie viele. Mit Methode SetMaxLanguages des SystemObjects kann man die Anzahl einschränken.


System-Textkonstanten

Die mehrsprachigen Text-Konstanten des Basis-Systems gehören nicht zum C++-Programmcode.
Sie sind im externen File systemStrings.stg (früher: cxstring.001) gespeichert. systemStrings.stg gehört zum Lieferumfang des ClassiX-Systems. Es stellt Texte in den Sprachen Deutsch und Englisch (BE) zur Verfügung.

Die Texte können editiert werden, dabei kann man weitere Sprachen hinzufügen, siehe literalSystem.mod.

Die systemStrings.stg bleibt dabei unverändert. Änderungen und Erweiterungen werden in der Datei customStrings.stg (früher: cxstring.003) gespeichert. Diese Datei wird beim ersten Editiervorgang erzeugt. Sobald customStrings.stg existiert, benutzt das Basis-System die dort vorhandene Texte.  
 

Textkonstanten aus dem InstantView®-Code

Für die Textkonstanten im InstantView®-Code - existiert eine ähnliche Lösung. Die Auslagerung der multilingualen Texte in ein externes File appsWHLiterals.stg (früher: cxstring-uc.002) ist optional. Ohne die Datei appsWHLiterals.stg werden die Textkonstanten so benutzt, wie sie im InstantView®-Code stehen. Falls eine appsWHLiterals.stg existiert, sind die Textkonstanten im InstantView®-Programmcode nur Schlüssel, die auf die "wirkliche" Textkonstante verweisen.
 

cxstring002.bmp (1001574 Byte)

Neben einer größeren Flexibilität - Auswahl und Reihenfolge der Sprachen kann für verschiedene Anwender individuell gestaltet werden - liegt ein weiterer Vorteil darin, dass der InstantView®-Programmcode nicht durch umfangreiche Textkonstanten belastet wird.

Die appsWHLiterals.stg muss nicht unbedingt vollständig sein: wird für eine Konstante aus dem Programmtext nichts gefunden, bleibt die Originalkonstante erhalten.

Die Reihenfolge der Sprachen für Text-Konstanten aus InstantView® muss mit der für die Texte Basis-System des Basis-Systems übereinstimmen.
Die ersten 2 Sprachen, Deutsch und Englisch (UK) sind in genau dieser Reihenfolge ist festgelegt (Index 0 und 1).
Ab Index 2 können weitere Sprachen in den Locales beschrieben werden (siehe CX_COUNTRY_LOCALE).
Die einmal getroffene Reihenfolge kann nicht mehr verändert werden!

 

Die wichtigste Funktion zur Steuerung des Sprachverhaltens ist die InstantView-Funktion Language.

Literal-Browser

Hier werden die programmtechnischen Mittel gezeigt (siehe auch Text Literal Browser für Systemmeldungen und das Text Literal für das AppsWarehouse®), mit deren Hilfe man

  • alle Textkonstanten in den InstantView®-Modulen des AppsWarehauses findet
  • die Datei appsWHLiterals.stg aufbauen und editieren kann.

Die Module des AppsWarehauses werden mit Funktion ParseLib des System-Objekts eingelesen und anschließend mit LoadExternalModule vollständig geladen. Die Module sind inaktiv, d.h. sie reagieren nicht auf Messages. Aber alle Funktionen der Klassen CX_MODULE bzw. CX_WIDGET können aufgerufen werden - damit ist das AppsWarehouse® der Introspektion mit Mitteln von InstantView® zugänglich  (Beispiel-Code).

Die Funktion FindMLStrings der Klasse CX_MODULE durchsucht den Modul nach Textliteralen. Textliterale sind

  • Titel von Windowobjekten (d.h. von allen Windowobjekten, die einen Titel haben können - Window, Button, Menu-Items, ... - egal, ob dieser ein- oder mehrsprachig angegeben wurde)
  • Tooltip eines Windowobjekts
  • Multiple-String-Konstanten der Form T(text0, text1, ..., textn) in Aktionslisten und Statement-Definitionen

Einfache Stringkonstanten sind keine Textliterale.

Die Textliterale werden durch Objekte der Klasse CXI_TEXT_LITERAL repräsentiert  (Beispiel-Code).

Systemliteraleditor De

Jedes Objekt der Klasse CXI_TEXT_LITERAL (Abbildung: obere Liste) besitzt eine Collection von Objekten der Klasse CXI_LITERAL_USAGE (Abbildung: untere Liste); damit kann der Kontext, in dem ein bestimmter Text vorkommt, verfolgt werden (Beispiel-Code).

Zu den Windowobjekten kann man das dazugehörende Fenster aufrufen (Beispiel-Code).

Das CXI_TEXT_LITERAL-Objekt unterstützt ebenso das Editieren der neuen Texte (Beispiel-Code). Die Texte werden in der Datei appsWHLiterals.stg im aktuellen Arbeitsverzeichnis (meist CX_ROOTDIR) gespeichert.

Achtung: Die geänderten Texte haben keinen Einfluss auf bereits geladene/geparste Module. Damit die Änderungen im ClassiX-System sichtbar werden, müssen entweder die betroffenen Module neu geladen, oder das ClassiX-System neu gestartet werden.