Erstellen von JAR-Dateien und Distribution von Anwendungen

Qt Jambi, die Zweite

Tam Hanna


Das Internationalisieren von Anwendungen neigt häufig dazu, in Arbeit auszuarten. Meist endet es damit, dass man sich irgendeine Art von Ressourcenklasse baut und sie mit String-Feldern vollstopft. Dazu noch etwas Glue Logic, und das Chaos ist perfekt. In Qt hingegen ist das Internationalisieren von Anwendungen ganz einfach. Denn das Framework bringt ja ein Lokalisierungsframework mit. Das System basiert auf der Funktion tr(), die einen String annimmt und seine übersetzte Form zurückliefert. Im Hintergrund befindet sich eine Datenbank, die mit Übersetzungen gefüttert wird. Zur Laufzeit wird die Sprache festgelegt und der Rest passiert fast wie von Zauberhand. In den UI-Dateien des Projekts zum vorigen Artikel finden wir eine Funktion namens retranslateUI, die eine Truppe von Aufrufen nach dem folgenden Schema enthält:

JMFormular1.setWindowTitle(com.trolltech.qt.core.QCoreApplication .translate("JMFormular1", "MainWindow", null));

Aus dem ersten Teil wissen wir, dass hier einem Steuerelement ein Titel zugewiesen wird. setXXX(String) haben wir ja schon zur Genüge verwendet. Das Novum in dieser Anwendung ist die statische Funktion trans­late(), die in QCoreApplication zu finden ist. Die Methode verlangt drei Parameter: Der erste gibt den Kontext des Strings an, zeigt also, zu welcher Klasse der String gehören soll. Parameter Nummer 2 ist der eigentlich anzuzeigende String. Als Parameter 3 kann man zusätzliche Korrelationsparameter übergeben (wenn dasselbe englische Wort in zwei verschiedenen Bedeutungen vorkommt). In unserem Beispiel aus dem vorigen Artikel befindet sich nur ein String, wie in Listing 1 zu sehen. An sich entspricht der hier verwendete Aufruf 1:1 dem vorigen Beispiel. Als Kontext wurde JMFormular1-code übergeben. Der Kontext ist ein String, der außer seiner Match-Fähigkeit keinen intrinsischen Wert übergibt. Theoretisch hätte man auch ouagadougou-bananarama übergeben können, zumindest solange man keine derart benannte Klasse im Programm hat. Damit sind alle Strings verbunden. Wenn das Programm nun ausgeführt wird, erscheinen nach wie vor die ursprünglichen Texte. Der Grund dafür ist, dass die Datenbank weder gefüllt noch eingebunden ist. Übrigens: Die in der Dokumentation oft gezeigte Funktion tr() ist eine Kurzform von translate(). Sie akzeptiert nur einen Korrelationsparameter. Der Kontext sollte automatisch ermittelt werden, da diese Methode nur in Qt-derivierten Klassen verwendet werden darf. Leider funktioniert das in der Praxis mehr sch...

Erstellen von JAR-Dateien und Distribution von Anwendungen

Qt Jambi, die Zweite

Tam Hanna


Das Internationalisieren von Anwendungen neigt häufig dazu, in Arbeit auszuarten. Meist endet es damit, dass man sich irgendeine Art von Ressourcenklasse baut und sie mit String-Feldern vollstopft. Dazu noch etwas Glue Logic, und das Chaos ist perfekt. In Qt hingegen ist das Internationalisieren von Anwendungen ganz einfach. Denn das Framework bringt ja ein Lokalisierungsframework mit. Das System basiert auf der Funktion tr(), die einen String annimmt und seine übersetzte Form zurückliefert. Im Hintergrund befindet sich eine Datenbank, die mit Übersetzungen gefüttert wird. Zur Laufzeit wird die Sprache festgelegt und der Rest passiert fast wie von Zauberhand. In den UI-Dateien des Projekts zum vorigen Artikel finden wir eine Funktion namens retranslateUI, die eine Truppe von Aufrufen nach dem folgenden Schema enthält:

JMFormular1.setWindowTitle(com.trolltech.qt.core.QCoreApplication .translate("JMFormular1", "MainWindow", null));

Aus dem ersten Teil wissen wir, dass hier einem Steuerelement ein Titel zugewiesen wird. setXXX(String) haben wir ja schon zur Genüge verwendet. Das Novum in dieser Anwendung ist die statische Funktion trans­late(), die in QCoreApplication zu finden ist. Die Methode verlangt drei Parameter: Der erste gibt den Kontext des Strings an, zeigt also, zu welcher Klasse der String gehören soll. Parameter Nummer 2 ist der eigentlich anzuzeigende String. Als Parameter 3 kann man zusätzliche Korrelationsparameter übergeben (wenn dasselbe englische Wort in zwei verschiedenen Bedeutungen vorkommt). In unserem Beispiel aus dem vorigen Artikel befindet sich nur ein String, wie in Listing 1 zu sehen. An sich entspricht der hier verwendete Aufruf 1:1 dem vorigen Beispiel. Als Kontext wurde JMFormular1-code übergeben. Der Kontext ist ein String, der außer seiner Match-Fähigkeit keinen intrinsischen Wert übergibt. Theoretisch hätte man auch ouagadougou-bananarama übergeben können, zumindest solange man keine derart benannte Klasse im Programm hat. Damit sind alle Strings verbunden. Wenn das Programm nun ausgeführt wird, erscheinen nach wie vor die ursprünglichen Texte. Der Grund dafür ist, dass die Datenbank weder gefüllt noch eingebunden ist. Übrigens: Die in der Dokumentation oft gezeigte Funktion tr() ist eine Kurzform von translate(). Sie akzeptiert nur einen Korrelationsparameter. Der Kontext sollte automatisch ermittelt werden, da diese Methode nur in Qt-derivierten Klassen verwendet werden darf. Leider funktioniert das in der Praxis mehr sch...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang