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 CXSTRING.001 gespeichert. CXSTRING.001 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 CXSTRING.001 bleibt unverändert. Änderungen und Erweiterungen werden in CXSTRING.003 gespeichert. Diese Datei wird beim ersten Editiervorgang erzeugt. Sobald CXSTRING.003 existiert, benutzt das Basis-System die dort vorhandene Texte.  

 
Eine ausführliche Darstellung des Zusammenhangs zwischen Programmcode, ausgelagerten Texten und der Behandlung interner Fehler findet sich im Dokumentationsteil Model-Programming.

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 CXSTRING.002 ist optional. Ohne die Datei CXSTRING.002 werden die Textkonstanten so benutzt, wie sie im InstantView®-Code stehen. Mit File CXSTRING.002 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.

CXSTRING.002 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 CXSTRING.002 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 CXI_MODULE bzw. CXI_WINDOW_OBJECT können aufgerufen werden - damit ist das AppsWarehouse® der Introspektion mit Mitteln von InstantView® zugänglich  (Beispiel-Code).

Die Funktion FindMLStrings der Klasse CXI_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).

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 CXSTRING.002 im aktuellen Arbeitsverzeichnis (meist CX_ROOTDIR) gespeichert.

Achtung!
Die geänderten Texte werden nicht in der aktuell geladenen CXSTRING.002 (im Bin- oder System-Verzeichnis) gespeichert. Damit die geänderten Texte auch aktiv werden, muss ClassiX beendet werden und die neu erstellte CXSTRING.002 Datei in das Bin- oder System-Verzeichnis kopiert werden. Nach einem Neustart von ClassiX sind dann die neuen Texte geladen.

InstantView Scriptsprache