This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
internationalization [2017/12/02 18:18] 178.91.253.70 |
internationalization [2018/01/21 06:05] (current) 178.0.146.219 |
||
|---|---|---|---|
| Line 43: | Line 43: | ||
| Zeichenketten, die im QML-Code mit qsTr() umschlossen sind (qsTr("Beispiel")) werden extrahiert. | 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 | + | / / : 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: | Übersetzungen während der Laufzeit gibt es einen Workaround: | ||
| - | An jeden übersetzbaren String muss + aRenderField . emptyString angehängt werden: | + | An jeden übersetzbaren String muss + aRenderField.emptyString angehängt werden: |
| - | <code> | + | <code c> |
| - | ApplicationWindow | + | ApplicationWindow { |
| //: applicationtitle | //: applicationtitle | ||
| title: qsTr(”Multivariate Projection Viewer” ) + aRenderField.emptyString | title: qsTr(”Multivariate Projection Viewer” ) + aRenderField.emptyString | ||
| - | Label | + | Label{ |
| text: qsTr(”Beispiel”) + aRenderField.emptyString | text: qsTr(”Beispiel”) + aRenderField.emptyString | ||
| - | | + | } |
| + | } | ||
| + | </code> | ||
| + | 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: | ||
| + | |||
| + | <code> | ||
| + | lrelease mpv_de_DE.ts | ||
| </code> | </code> | ||
| + | *.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. | ||