JSON steht für JavaScript Object Notation und ist ein Datenformat in lesbarer Textform, welches zum Abspeichern und einlesen von Eigenschaften bzw. Einstellungen sehr gut geeignet ist. Ich habe dieses Format erst vor kurzem kennengelernt und hab mir gedacht, dass man dieses als Sprachdatei mit dem Qt-Framework kombinieren kann. So hab ich mich mal ran gemacht und ein kleines Beispiel-Projekt erstellt. Um den Overhead der Webkit Bibliothek aus dem Weg zu gehen habe ich ein Standalone – Implementierung eines JSON Interpreters für Qt verwendet. Zu finden ist diese hier.
Das Programm selbst ist ein kleiner Rechner mit den Standardfunktionen wie Addition, Subtraktion, Multiplikation und Division; zusätzlich mit einer Einstellbaren Sprache. Verzeiht mir an dieser Stelle, wenn in den Sprachen irgendwelche Fehler zu finden sind, diese habe ich einfach von google Übersetzen lassen.
Wenn man sich das JSON Format mal näher anschaut sieht man relativ schnell wie das ganz Aufbaut ist.
Die Struktur besteht aus zwei Teilen, links auf der Seite steht die Eigenschaft und rechts der Wert, jeweils mit zwei Anführungszeichen umhüllt. Des Weiteren kann der Wert selbst auch eine Struktur sein womit man eine Verschachtelung erreicht. In der Sprachdatei wird nun für jede Klasse welche irgendwelche Sprachelemente enthält so eine verschaltete Struktur erstellt.
Das Projekt enthält eine Klasse QJsonTranslator
welche sich um das Laden von Sprachdateien
und um das Übersetzen von Texten zuständig ist. Mit einem einfachen Aufruf von
QJsonTranslator::loadLanguage()
wird die Standardsprache geladen/verwendet.
Der Aufruf diser sollte geschehen bevor irgendwelche Steuerelemente initialisiert werden.
Optional kann man der Funktion einen Sprach Parameter vom Typ QLocale mitgeben. Der Pfad zu
den Sprachdateien ist in der konstanten LANGUAGE_STD_PATH gespeichert und ist Standardmäßig auf
‚./lang‘ gesetzt. Die Dateiendung ist in der konstanten LANGUAGE_STD_SUFFIX
hinterlegt
und hat den Wert, wer hätte’s gedacht, .json
.
Am Anfang des Programms wird mit der Funktion QJsonTranslatorExample::getAvailableLanguages()
alle Verfügbaren Sprachdateien im Sprachordner gesucht und daraus ein Auswahlmenü generiert.
Wird nun einer dieser Spracheinträge per Menü vom Benutzer ausgewählt dann wird die entsprechende Datei geladen:
Wenn die Sprache sich ändert wird an jedes Fenster ein changeEvent
mit dem Parameter QEvent::LanguageChange
gesendet. In diesem sollte man alle Steuerelemente mit dem neuen Text laden. Dies geschieht üblicherweise
mit einem erneut zuweisen eines Textes. Zu Vereinfachung wird von QObject die Funktion
QObject::tr(const char * sourceText)
zur Verfügung gestellt, welche den sourceText an den Übersetzer,
in meinem Fall die Klasse QJsonTranslator
, übergibt und den Übersetzen Text zurückgibt.
Es gibt sicherlich noch ein paar Fehlerfälle, die es Abzufangen gilt, jedoch denke ich, dass das Prinzip klar sein sollte. Ansonsten schaut euch das Projekt bzw. den Source, bei Interesse, einfach hier an: QJsonTranslatorExample.