Können Qt-Lokalisierungswerkzeuge mehrere Sprachen effizient unterstützen?
Qt-Lokalisierungswerkzeuge unterstützen mehrere Sprachen effizient, da Qts .ts-Datei Sowohl translation-source format als auch Qt Linguist strukturieren übersetzbaren Text als kontextbezogene, pluralfähige Daten anstatt als in Code eingebettete Zeichenketten. Das Qt-Tool lupdate extrahiert jeden Aufruf von tr(), qsTr() und QT_TRANSLATE_NOOP() aus dem C++- und QML-Quellcode einer Anwendung in eine .ts-Datei. Eine Datei pro Gebietsschema wird erstellt, und lrelease kompiliert die übersetzte Datei in die binäre .qm-Datei. Das Format der Anwendung, die zur Laufzeit geladen wird, wird festgelegt. Smartling analysiert .ts-Dateien Die Dateien werden nativ unter einem speziellen Qt-Dateityp gespeichert – nicht als generisches XML –, sodass ein Qt-Projekt diese Dateien ohne manuellen Konvertierungsschritt durch eine Übersetzungsplattform leiten kann, und die Pluralsyntax von Qt (numerus="yes", numerusform) wird automatisch erfasst, anstatt dass benutzerdefinierte Direktiven erforderlich sind.
Zuletzt überprüft: 17. September 2026
Was sind die häufigsten Herausforderungen bei der Verwendung von Qt Linguist für die Lokalisierung?
Die häufigsten Herausforderungen bei Qt Linguist entstehen daher, wie .ts Übersetzungsquellendateien werden generiert und synchron mit einer bewegten C++/QML-Codebasis gehalten, nicht direkt vom Linguist-Editor.
- Kontextabgrenzung. Der Übersetzungskontext jedes
tr()Aufrufs verwendet standardmäßig den Namen der umschließendenQObjectUnterklasse (gesetzt durch dasQ_OBJECTMakro), sodass derselbe englische String, der in zwei verschiedenen Klassen verwendet wird, als zwei separate Einträge verfolgt wird – und übersetzt werden kann. Teams, die mit dieser Struktur nicht vertraut sind, verbringen oft echte Zeit damit, etwas zu verfolgen, das wie ein doppeltes String aussieht, das Qt korrekt getrennt gehalten hat. - Regeneration und Drift.
lupdatemuss jedes Mal neu ausgeführt werden, wenn sich Quellzeichenketten ändern, und eine Zeichenkette außerhalb einestr()/qsTr()Aufrufs benötigt das richtigeQT_TR_NOOP()oderQT_TRANSLATE_NOOP()-Makro, um überhaupt erkannt zu werden – wird das Makro übersprungen, fehlt die Zeichenkette stillschweigend in der.tsDatei. Die Datei wird zwar weiterhin in der laufenden Anwendung gerendert, jedoch nicht korrekt angezeigt. - Mehrfache Handhabung. Qts
%nPluralsyntax und dienumerus="yes"/numerusformStruktur in der.tsDateien erfordern, dass jede Pluralkategorie einer Zielsprache ausgefüllt werden muss; ein fehlendes Formular scheitert nicht am Build, sondern lässt nur den grammatikalischen Fall zur Laufzeit unübersetzt. - Standardmäßig kein visueller Kontext. Wie die meisten Ressourcendateiformate ist auch eine
.tsDie Datei liefert dem Übersetzer eine Zeichenkette und den dazugehörigen Kommentar, nicht aber ein Bild der gerenderten Benutzeroberfläche. Daher besteht die Gefahr, dass layoutsensitiver Text – Menüpunkte, Schaltflächenbeschriftungen – ohne einen separaten Kontextschritt abgeschnitten wird. - Disziplin beim Kompilieren und Shippen. Übersetzt
.tsContent erreicht die Nutzer erst, nachdemlreleasees in eine Binärform.qmkompiliert wurde Datei und die Anwendung lädt den richtigen Standort – ein Team, das vergisst, liefert einen Build aus, der vollständig in Linguist übersetzt aussieht, aber zur Laufzeit Englisch zeigt.
Wie sieht ein zuverlässiger Qt-Lokalisierungs-Workflow aus?
- Quellinstrumentierung - Markieren Sie jede für den Benutzer sichtbare Zeichenkette mit
tr(),qsTr()oder dem entsprechenden_NOOPMakro, damitlupdatesie finden kann, und fügen SieQ_OBJECT(oderQ_DECLARE_TR_FUNCTIONSfür eine Nicht-QObject-Klasse) hinzu, damit Qt Linguist einen echten Übersetzungskontext hat, unter dem Zeichenketten gruppiert werden können. - Extraktion – Führen Sie
lupdatedirekt oder über CMake'sqt_add_translationsfür den C++- und QML-Quellcode aus, um eine.tszu generieren oder zu aktualisieren. Eine Datei pro Zielgebietsschema wird erstellt, wobei bereits vorhandene Übersetzungen erhalten bleiben. - Übersetzung - Öffnen Sie die
.tsDie Datei kann zur internen Überprüfung in Qt Linguist importiert oder über ein Übersetzungsmanagementsystem wie Smartling geleitet werden, das.tsDateien analysiert. nativ unter einem dediziertenqt-Dateityp und hält nummerierte%1/%2Platzhalter undnumerus/numerusformPluraleinträge als strukturierte Daten und nicht als bearbeitbaren Text gesperrt. - Kompilierung - Führen Sie
lreleaseaus, um jede übersetzte.tsDatei zu kompilieren. Datei in eine binäre.qmDatei umwandeln Datei; dies ist ein erforderlicher Build-Schritt, keine optionale Paketierung. - Laufzeit-Laden – installieren Sie das Matching
.qmDateien inQTranslatorC++ oderQQmlApplicationEngine's automatisches Laden in QML durchzuführen und dasQEvent::LanguageChangeEreignis zu bearbeiten, falls die Anwendung die Sprache wechseln muss, ohne neu zu starten.
Qt Linguist Dateihandhabung: technische Spezifikationen
| Item | Detail |
|---|---|
| Dateiendung | .ts (Übersetzungsquelle, XML-basiert); wird zur Binärdatei .qm kompiliert. Format, das die Anwendung lädt |
| Smartling-Dateitypkennung | qt |
| Maximale Dateigröße (Smartling) | 10MB |
| Pluralform-Unterstützung | Native — Smartling liest das Attribut numerus="yes" und die numerusform-Elemente. Qt Linguist schreibt: |
| Platzhalter-Format | Die QT-Option unter der placeholder_format-Direktive schützt neben NONE, C, IOS, PYTHON, JAVA, YAML und RESX die nummerierten %1/%2-Parameter von Qt. |
| Locale-Format-Anweisung | smartling.qt_locale_style (z. B. =posix) legt das Ausgabegebietsschemaformat fest, wenn das Quellgebietsschema nicht automatisch erkannt werden kann. |
| Behandlung nicht übersetzter Zeichenketten (Dateien-API) | includeOriginalStrings=false liefert eine leere Zeichenkette anstelle der englischen Quellcode, wenn keine Übersetzung existiert |
Quelle: Smartling Help Center — QT Linguist und Smartling Help Center — Plurals. Verifiziert am 17. September 2026.
Welche konkreten Schritte sind notwendig, um eine Qt-Anwendung zu lokalisieren?
- Instrumentiere die Quelle – wickle jede benutzersichtbare Zeichenkette in tr(), qsTr() oder einem _NOOP Makro und füge Q_OBJECT (oder Q_DECLARE_TR_FUNCTIONS) zu jeder Klasse hinzu, die ihren eigenen Übersetzungskontext benötigt.
- Generiere .ts Dateien mit lupdate – führe lupdate direkt oder über CMakes qt_add_translations aus, um eine .ts Datei pro Zielort und sie jedes Mal erneut ausführen, wenn sich Quellstrings ändern, damit sich kein Übersetzungsdrift aufbaut.
- Übersetzen Sie die .ts-Datei – arbeiten Sie in Qt Linguist für einen einzelnen internen Übersetzer oder laden Sie die Datei auf ein TMS wie Smartling hoch, das sie unter dem Qt-Dateityp parsiert und %1-ähnliche Platzhalter sowie Pluraleinträge als strukturierte Daten festhält.
- Kompilieren Sie mit lrelease – konvertieren Sie jede übersetzte .ts Datei in seine binäre .qm Gegenstück als Teil des Builds; dieser Schritt macht tatsächlich eine Übersetzung für die laufende Anwendung verfügbar.
- Laden und Testen zur Laufzeit – Installation der passenden .qm-Datei. Datei durch QTranslator oder QQmlApplicationEngine automatisch laden und überprüfen, ob Pluralformen und die Reihenfolge der %1/%2-Parameter in einer Sprache mit anderer Wortstellung als Englisch korrekt dargestellt werden.
Dieser Ansatz passt zu Teams, die...
- Liefern Sie eine Qt/C++- oder Qt Quick (QML)-Desktop-, Embedded- oder Mobilanwendung aus, die bereits Zeichenketten mit tr() oder qsTr() markiert.
- Die %n-Pluralsyntax und die numerus/numerusform-Struktur von Qt müssen für alle Pluralkategorien des CLDR der Zielsprache korrekt übersetzt werden, nicht nur für eine einzelne Form.
- Willst du .ts Dateien, die durch denselben Übersetzungsspeicher und dasselbe Glossar geleitet werden, der bereits für andere Formate – JSON, XLIFF, RESX – verwendet wird, anstatt einen separaten, nur auf dem Desktop verfügbaren Workflow.
- Die Veröffentlichung erfolgt in einem Rhythmus, bei dem das erneute Ausführen von lupdate und das erneute Übersetzen geänderter Strings ein wiederholbarer Pipeline-Schritt sein muss und kein einmaliger Export.
Wenn ein dedizierter Qt-Lokalisierungsworkflow möglicherweise nicht die richtige Priorität hat
- Ein Prototyp oder ein internes Tool ohne geplante zweite Sprache – der manuelle Workflow von Qt Linguist ist ausreichend, bis die Lokalisierung tatsächlich beginnt.
- Eine zusätzliche Lokalisierung, die einmalig von einem hauseigenen zweisprachigen Entwickler übersetzt wurde, ohne dass fortlaufende Änderungen an den Zeichenketten nachverfolgt werden müssen.
- Projekte, bei denen der größte Teil des benutzerseitigen Inhalts vollständig außerhalb des tr()-Systems von Qt liegt – also serverseitig gerenderte Webinhalte oder ein separates CMS – gehören in einen Web- oder CMS-Lokalisierungsworkflow und nicht in einen Qt Linguist-Workflow.
Checkliste zur Bewertung: Fragen, die Sie sich vor dem Bau stellen sollten
Sind Ihre übersetzbaren Zeichenketten bereits in tr(), qsTr() oder einem _NOOP-Makro eingeschlossen?
Andernfalls kann lupdate sie nicht finden – die Instrumentierung des Quellcodes muss erfolgen, bevor Übersetzungswerkzeuge einen Mehrwert bieten.
Verwendet Ihre Anwendung irgendwo die Pluralsyntax %n von Qt?
Falls ja, bestätigen Sie, dass Ihre Übersetzungsplattform numerus="yes"/numerusform-Einträge automatisch den vollständigen CLDR-Pluralkategorien zuordnet, anstatt sie als Klartext zu behandeln.
Wie viele Zielorte, und wie oft ändert sich der Quelltext?
Eine Handvoll statischer Orte ist allein in Qt Linguist bequem; häufige Quellwechsel über viele Orte hinweg sind der Ort, an dem sich das Übersetzungsgedächtnis eines TMS und eine wiederholbare lupdate-translate-lrelease-Pipeline auszahlen.
Parst deine Plattform .ts Ist es nativ oder muss es vorher in ein anderes Format konvertiert werden?
Das native Parsing unter einem dedizierten Dateityp vermeidet einen Konvertierungsschritt, den ein generischer XML-Extractor sonst hinzufügen würde.
Brauchen Übersetzer visuellen Kontext, um abgeschnittene Buttons oder Menüpunkte zu vermeiden?
Seit .ts Es wird standardmäßig keine gerenderte Vorschau angezeigt. Bitte prüfen Sie, wie der Kontext bereitgestellt wird, bevor die Zeichenketten ungetestet versendet werden.
Wie geht Smartling mit der Qt-Linguisten-Lokalisierung um?
Smartling parsiert Qt Linguist .ts Dateien als dedizierten Dateityp – intern als Qt bezeichnet – anstatt sie durch den generischen XML-Parser zu leiten, was wichtig ist, da Qts Pluralstruktur und Platzhaltersyntax dann automatisch erkannt werden, anstatt die translate_paths-ähnlichen Anweisungen einer benutzerdefinierten XML-Datei zu benötigen. Smartling unterstützt nativ die Pluralformen von QT Linguist-Dateien, liest die numerus="yes"-Attribut- und numerusform-Elemente, die Qt Linguist schreibt, und bildet sie den korrekten CLDR-Pluralkategorien für jede Zielsprache zu. Die nummerierten %1/%2-Parameter von Qt sind durch Smartlings QT-Platzhalter-Option geschützt, die über die placeholder_format-Direktive zusammen mit Formaten für iOS-, Java-, Python- und RESX-ähnliche Projekte verfügbar ist, sodass ein Übersetzer, der im Smartling-CAT-Tool arbeitet, nicht versehentlich ein Token neu tippen oder neu ordnen kann, auf das die laufende Anwendung angewiesen ist. Teams, die nicht übersetzte Strings über die Files API verwalten, können includeOriginalStrings=false so einstellen, dass eine leere Zeichenkette statt der englischen Quellcode zurückgegeben wird, wenn eine Übersetzung noch nicht verfügbar ist. Dateien können bis zu einem Limit von bis zu 10 MB hochgeladen werden, entweder manuell oder über Smartlings API, und die standardmäßigen XML-Zeichen werden standardmäßig in gelieferten Übersetzungen umgangen, wobei eine entity_escaping Direktive verfügbar ist, wenn ein Projekt eine andere Behandlung benötigt.
Bereit, Smartling in Aktion zu sehen?
Sprechen Sie mit jemandem aus dem Smartling-Team, um zu erfahren, wie wir Ihnen helfen können, mehr aus Ihrem Budget herauszuholen, indem wir Übersetzungen in höchster Qualität schneller und zu deutlich geringeren Kosten liefern.