**Internationalisierung** Zur **Internationalisierung** gehört die Übersetzung von Texten der grafischen Benutzeroberfläche. Da diese auf QML basiert, werden die Qt linguist tools benutzt, die zum Qt SDK gehören. Die erzeugten *.ts-Dateien liegen in einem XML-Format vor, sodass sie auch unabhängig von Qt gelesen und bearbeitet werden können. Der Prozess erfolgt in drei Schritten: * lupdate zum Erzeugen/Erneuern der *.ts-Dateien * linguist zum Einfügen neuer Übersetzungen * lrelease zum Erzeugen von *.qm-Dateien, die von der App direkt geladen werden können ---- __**Dateinamen**__ Die Benennung der Übersetzungsdateien erfolgt nach einen Muster: mpv__.* Wobei sprache ein ISO 638 Code ist und LAND ein ISO 3166 Code, z.B.: * mpv_de_DE.ts * mpv_en_US.ts * mpv_fr_FR.ts ---- __**lupdate**__ Dieses Programm kann aus Quelldateien (z.B. *.qml, *.cpp) Zeichenketten zur Übersetzung extrahieren und als *.tsDatei speichern. Wenn die *.ts-Datei bereits existiert wird sie erweitert. Die Dateien für die Übersetzung befinden sich im resources/translations Verzeichnis. Um die Datei für die deutsche Übersetzung zu erstellen/erneuern, führt man in diesem Verzeichnis folgendes Kommando aus: lupdate ../main.qml -ts mpv_de_DE.ts Zeichenketten, die im QML-Code mit qsTr() umschlossen sind (qsTr("Beispiel")) werden extrahiert. / / : markiert ein Kommentar, um weiteren Kontext für die Übersetzung zu liefern. Für eine dynamische Anpassung der Übersetzungen während der Laufzeit gibt es einen Workaround: An jeden übersetzbaren String muss + aRenderField.emptyString angehängt werden: ApplicationWindow { //: applicationtitle title: qsTr(”Multivariate Projection Viewer” ) + aRenderField.emptyString Label{ text: qsTr(”Beispiel”) + aRenderField.emptyString } } Listing: QML-Code mit übersetzbaren Strings und Übersetzungskommentaren ---- __**linguist**__ Qt Linguist ist eine grafische Anwendung, die das Editieren von *.ts-Dateien erlaubt. Hiermit kann die eigentliche Übersetzung von Zeichenketten in eine andere Sprache statt finden. ---- __**lrelease**__ Zur Umwandlung von *.ts in bin¨ are *.qm-Dateien wird lrelease verwendet: lrelease mpv_de_DE.ts *.qm-Dateien können von der Applikation direkt verwendet werden. Standardmäßig wird der Locale en_US benutzt. Über die GUI kann dies geändert werden. Weitere Informationen findet man hier: [[https://doc.qt.io/qt-5/qtquick-internationalization.html|https://doc.qt.io/qt-5/qtquick-internationalization.html]] [[https://doc.qt.io/qt-5/linguist-manager.html|https://doc.qt.io/qt-5/linguist-manager.html]] ---- __**Übersetzungsprozess für die Internationalisierung/Mehrsprachigkeit**__ - Info: die Strings in der main.qml sind angenommen in einer bestimmten Sprache zu sein, hier in "englisch" (natürlich). Übersetzungen dieser Strings müssen vorhanden sein, um eine Internationalisierung zu ermöglichen. - pro Sprache muss eine separate Übersetzungsdatei vorhanden sein. Dafür benutzen wir die Tools "lupdate" und "lrelease" aus QT. - pro QML Datei muss für einen relvanten String jeweils eine Übersetzung vorhanden sein (oder angelegt werden).... das bedeutet das, wenn z.B. ein QML Datei aufgesplitet wird, das für beie neuen QML Dateien, auch jeweils neue übersetzungen einzupflegen sind. Zum Anlegen einer Übersetzungsdatei: - 0) wechsele in den Ordner: "cd ..\multivariateprojectionviewer\MultivariateProjectionViewer\resources\translations" - 1) lege Übersetzungsdatei an (hier am Besipiel französisch): "lupdate ../main.qml -ts mpv_fr_FR.ts" ...hier wird die main.qml nach relevanten Strings durchsucht, und diese zur Übersetzung in der "mpv_fr_FR.ts" vorbehalten. PS: Wenn die Datei bereits existiert, wird sie "nur" geupdatet, aber nicht neu angelegt/überschrieben. Ein solcher Update ist auch notwendig für neue oder aufgesplite QML dateien. Für Linux gibt es dafür die Bash "update.sh", für Windows die *.cmd "update_win.cmd" (bei der win variante muss jede neue qml Datei dort im cmd-script auch vermerkt werden...schaut dort einfach mal rein, ihr seht das dann schon) - 2) Öffne die "mpv_fr_FR.ts" mit "Linguist" und übersetze dort die Strings (uns speichern nicht vergessen ;) ) - 3) Ein Update übersetzt die Strings in sozusagen machinenlesbare Form durch "lrelease mpv_fr_FR.ts" ...dadurch werden die binärdateien für die Stringübersetzung erstellt und dem QT-Internationalisierungssystem zur verfügung gestellt. Nun muss nach einem clean nur noch neu kompiliert werden. - Scripte für 1-3 liegen in resources/translations ...wenn neue Strings in die qml hinzugefügt werden, wiederhole 1-3 um für jede Sprache die die Internationalisierung beinhalten soll. Passe die "Lokale" in der UI im Menu an, um neue Sprachen verfügbar zu machen. Info: Je nach gewählter "Lokale" werden entweder die orginalen Strings aus der qml verwendet, oder durch die String ersetzt welche in den entsprechenden Übersetzungsdateien sind.