ID basierte übersetzungen / qtTrId() im UI Designer

Alles rund um die Programmierung mit Qt
Antworten
geke
Beiträge: 1
Registriert: 22. März 2021 11:40

ID basierte übersetzungen / qtTrId() im UI Designer

Beitrag von geke »

Hallo,

Ich möchte ein C++ GUI Projekt auf ID basierte übersetzungen umstellen.
Also von tr() auf qtTrId().
Das ganze soll mit möglichst wenig Aufwand umgestellt werden. Im idealfall sollewn die bestehenden tr() übersetzungen übernommen werden.

Hat damit jemand Erfahrungen?

Insbesonders die übersetzungen in den Designer .ui forms machen mir Probleme.

im .pro file habe ich folgendes hinzugefügt:

Code: Alles auswählen

CODECFORTR = UTF-8

load (uic)
uic.commands += --idbased
Damit in den generierten ui_... Dateien qtTrId() anstatt tr() aufrufe stehen.
Das scheint auch zu funktionieren. In der ui_... Datei steht so etwas.

Code: Alles auswählen

    
    void retranslateUi(QWidget *icDockableWinTemplatePanel)
    {
        label_2->setText(qtTrId("A_ID"));
    } // retranslateUi
In der .tr Datei sieht das ungefähr so aus:

Code: Alles auswählen

<context>
    // <unnamed context> wo die anderen qtTrId() übersetzungen aus den nicht designer klassen enthalten sind
    // zum Beispiel:
    <message id="ANOTHER_ID">
        <location filename="../x.h" line="101"/>
        <source>test</source>
        <extracomment>comment</extracomment>
        <translation type="unfinished"></translation>
    </message>
</context>
<context>
    <name>icDockableWinTemplatePanel</name>
    <message>
        <location filename="../icDockableWinTemplatePanel.ui" line="20"/>
        <source>A_ID</source>
        <translation type="unfinished">vorherige übersetzung</translation>
    </message> 
</context>
Zwei Punkte fallen direkt auf:
- für icDockableWinTemplatePanel gibt es weiterhin eine Context Gruppe. So wie ich es verstanden habe kann man mit qtTrId() keine Kontext gruppen mehr defionieren. Die icDockableWinTemplatePanel übersetzungen sollten auch im <unnamed context> stehen.
- das message "id" attribut fehlt.

Prizipiel (In den nicht UI Klassen) geht die übersetzung mit qtTrId(). Wenn ich für die ui strings im Linguist eine übersetzung eintrage und die .qm Dateien erzeuge erscheint für die ui Designer Klassen keine übersetzung.

Die Informationen im Web zur Id basierten übersetzung sind leider sehr spärlich.

Weiß vielleicht jemand wie man Id basierten übersetzungen im UI Designer anwendet bzw. verwendet?

Gruß Gerd
Antworten