Qt übersetzt Strings aus Nicht-Quelldateien

8

Ich habe ein Qt-Projekt, das XML-Dateien verwendet. Diese XML-Dateien enthalten lesbaren Text und dieser Text sollte mithilfe der Qt-Tools (lupdate, lrelease, QtLinguist) übersetzt werden.

Die Frage ist, ob es möglich ist, Einträge in .ts-Datei über lupdate zu erzeugen, ohne die Zeichenfolgen aus den XML-Dateien in einer Quellcodedatei mit dem Makro QT_TR_NOOP () und Freunden zu duplizieren. Oder im Allgemeinen, wie übersetzt man Zeichenfolgen in Nicht-Quelldateien für Qt-Projekte?

    
Sascha 03.02.2011, 22:39
quelle

2 Antworten

6

Wir hatten das gleiche Problem: XML-Dateien mit lesbaren Zeichenfolgen.

Unsere Lösung bestand darin, sicherzustellen, dass lesbare Strings in den XML-Dateien einfach zu extrahieren waren (wir haben sie in ein LABEL -Attribut gesetzt) ​​und ein kleines Tool entwickelt, das die XML-Dateien analysiert, die Strings extrahiert und generiert einen Kontext (durch Extrahieren von Daten aus der XML-Datei) und dann Generieren einer CPP-Headerdatei mit einer Liste von QT_TR_NOOP() .

Diese Datei wurde zu unserer Projektdatei (.pro) hinzugefügt, die von lupdate verwendet wurde.

Diese Lösung war für uns in Ordnung, aber wir mussten bei zwei Dingen sehr vorsichtig sein:

  • Führen Sie dieses Tool jedes Mal aus, wenn der Inhalt einer XML-Datei geändert wird.
  • stellen Sie sicher, dass die XML-Dateien UTF-8-codiert sind.
Jérôme 04.02.2011, 06:30
quelle
3

Sie können alles, was Sie zur Laufzeit benötigen, mit tr () übersetzen, solange die .qm-Datei eine passende Übersetzung / Kontext hat. Es sollte keinen Unterschied machen, ob lupdate es extrahiert oder nicht.

Ich weiß nicht, wie man Lupdate dazu bringt, Strings aus beliebigem XML zu extrahieren, aber das bedeutet nicht, dass man Linguisten nicht verwenden kann.

  1. .ts Dateien sind auch XML; Es sollte einfach sein, eine XSLT zu erstellen, die Ihre XML in eine .ts-Datei umwandelt. Wenn Sie etwas Standard statt nur Qt anvisieren möchten, kann lupdate (und Linguist) auch XLIFF Dateien verarbeiten.
  2. Sie können mehrere .ts Dateien haben (rufen Sie einfach QTranslator :: beim Setup mehr als einmal auf)

Wenn Sie wirklich alles in einer Datei für den Übersetzer haben möchten, lassen Sie Ihre XSLT die lupdate-generierte Datei in ihre Ausgabe kopieren.

Solange Sie einen Kontextnamen verwenden, der nichts im Quellcode dupliziert, sollte dies (aus der Sicht von Qt) nicht anders sein als die Art und Weise, wie viele Apps eine .qm für jede DLL laden hat GUI.

    
puetzk 03.02.2011 23:31
quelle

Tags und Links