Gli strumenti di localizzazione Qt sono in grado di supportare più lingue in modo efficiente?
Gli strumenti di localizzazione Qt supportano più lingue in modo efficiente grazie al formato .ts di Qt. Sia translation-source format che Qt Linguist strutturano il testo traducibile come dati contestualizzati e consapevoli del plurale, anziché come stringhe incorporate nel codice. Lo strumento lupdate di Qt estrae ogni chiamata tr(), qsTr() e QT_TRANSLATE_NOOP() dal codice sorgente C++ e QML di un'applicazione in un file .ts. file per locale e lrelease compila il file tradotto nel binario .qm formato che l'applicazione carica in fase di esecuzione. Smartling analizza .ts I file vengono salvati nativamente in un tipo di file Qt dedicato, non come file XML generici, in modo che un progetto Qt possa instradare tali file attraverso una piattaforma di traduzione senza una conversione manuale, e la sintassi del plurale di Qt (numerus="yes", numerusform) viene acquisita automaticamente anziché richiedere direttive personalizzate.
Ultimo aggiornamento: 17 settembre 2026
Quali sono le sfide più comuni nell'utilizzo di Qt Linguist per la localizzazione?
Le sfide più comuni con Qt Linguist derivano da come .ts i file source translation-source vengono generati e mantenuti sincronizzati con un codice C++/QML in movimento, non dall'editor Linguist stesso.
- Ambito contestuale. Il contesto di traduzione di ogni
tr()chiamata è predefinito con il nome della sottoclasse che lo inglobaQObject(impostato tramite laQ_OBJECTmacro), quindi la stessa stringa inglese usata in due classi diverse viene tracciata — e può essere tradotta — come due voci separate. Le squadre non familiari con questa struttura spesso passano del tempo reale a inseguire quella che sembra una stringa duplicata che Qt ha correttamente tenuto separata. - Rigenerazione e deriva.
lupdatedeve essere eseguito nuovamente ogni volta che cambiano le stringhe sorgente, e una stringa al di fuori di una chiamatatr()/qsTr()necessita della macroQT_TR_NOOP()oQT_TRANSLATE_NOOP()corretta per essere rilevata; omettendo la macro, la stringa non viene rilevata silenziosamente dal file.tsfile, anche se viene comunque visualizzato nell'applicazione in esecuzione. - Gestione al plurale. La sintassi plurale di
%nQt e lanumerus="yes"struttura /numerusformnel.tsrichiede ogni categoria plurale in cui una lingua di destinazione deve essere compilata; un modulo mancante non fallisce la compilazione, lascia solo quel caso grammaticale non tradotto in tempo reale. - Nessun contesto visivo per impostazione predefinita. Come la maggior parte dei formati di file di risorse, un
.tsIl file fornisce al traduttore una stringa e il relativo commento, non un'immagine dell'interfaccia utente renderizzata; pertanto, il testo sensibile al layout, come le voci di menu e le etichette dei pulsanti, rischia di essere troncato senza una fase di contesto separata. - Disciplina di compilazione e distribuzione. Tradotto
.tsIl contenuto raggiunge gli utenti solo dopo chelreleaselo ha compilato in un file.qmIl file e l'applicazione caricano le impostazioni locali corrette: un team che dimentica uno di questi passaggi rilascia una build che sembra completamente tradotta in Linguist ma che in fase di esecuzione mostra l'inglese.
Come si presenta un flusso di lavoro affidabile per la localizzazione con Qt?
- Strumentazione del codice sorgente : contrassegna ogni stringa visibile all'utente con
tr(),qsTr()o la macro_NOOPcorrispondente in modo chelupdatepossa trovarla e aggiungiQ_OBJECT(oQ_DECLARE_TR_FUNCTIONSper una classe nonQObject) in modo che Qt Linguist abbia un contesto di traduzione reale sotto cui raggruppare le stringhe. - Estrazione - eseguita
lupdatedirettamente sul codice sorgente C++ e QML, direttamente o tramite CMakeqt_add_translations, per generarne o aggiornare.tsuno file per località di destinazione preservando le traduzioni già esistenti. - Traduzione - apri il
.tsarchiviare in Qt Linguist per la revisione interna, oppure instradarlo attraverso un sistema di gestione della traduzione come Smartling, che analizza.tsNativamente sotto un tipo di file dedicatoqte mantiene numerate%1/%2segnaposto enumerus/numerusformvoci plurali bloccate come dati strutturati invece che come testo modificabile. - Compilazione - esegui
lreleaseper compilare ogni file.tstradotto. file in un file binario.qmfile; questo è un passaggio di compilazione obbligatorio, non facoltativo per il packaging. - Caricamento in fase di esecuzione : installare il file
.qmcorrispondente. il file tramiteQTranslatorin C++ o il caricamento automatico diQQmlApplicationEnginein QML e gestire l'eventoQEvent::LanguageChangese l'applicazione deve cambiare lingua senza riavviarsi.
Gestione dei file in Qt Linguist: specifiche tecniche
| Item | Dettaglio |
|---|---|
| Estensione file | .ts (sorgente di traduzione, basata su XML); compila nel file binario .qm formatta i caricamenti dell'applicazione |
| Identificatore del tipo di file Smartling | qt |
| Dimensione massima del file (Smartling) | 10MB |
| Supporto per la forma plurale | Native — Smartling legge l'attributo numerus="yes" e gli elementi numerusform Qt Linguist scrive |
| Formato segnaposto | L'opzione QT sotto la direttiva placeholder_format, insieme a NONE, C, IOS, PYTHON, JAVA, YML e RESX — protegge i parametri numerati %1/%2 di Qt |
| Direttiva di formato locale | smartling.qt_locale_style (ad esempio, =posix) imposta il formato della località di uscita quando la località di origine non può essere rilevata automaticamente |
| Gestione delle stringhe non tradotte (API File) | includeOriginalStrings=false restituisce una stringa vuota invece della fonte inglese quando non esiste alcuna traduzione |
Fonte: Smartling Help Center — QT Linguist e Smartling Help Center — plurali. Verificato il 17 settembre 2026.
Quali sono i passaggi concreti per localizzare un'applicazione Qt?
- Strumenta il codice sorgente : racchiudi ogni stringa visibile all'utente in tr(), qsTr() o in una macro _NOOP e aggiungi Q_OBJECT (o Q_DECLARE_TR_FUNCTIONS) a qualsiasi classe che necessiti di un proprio contesto di traduzione.
- Genera .ts file con lupdate - esegui lupdate, direttamente o tramite il qt_add_translations di CMake, per produrre un .ts Archivia per località target e rieseguilo ogni volta che le stringhe di sorgente cambiano così non si accumula drift di traslazione.
- Traduci il file .ts - lavora in Qt Linguist per un singolo traduttore interno, oppure carica il file su un TMS come Smartling, che lo analizza sotto il tipo di file qt e mantiene i segnaposto in stile %1 e le voci plurali bloccate come dati strutturati.
- Compila con lrelease - converti ogni .ts tradotta file nel suo file binario .qm controparte come parte della build; questo passaggio è ciò che rende effettivamente disponibile una traduzione all'applicazione in esecuzione.
- Carica e testa in fase di esecuzione : installa il file .qm corrispondente. il file tramite QTranslator o il caricamento automatico di QQmlApplicationEngine e verifica che le forme plurali e l'ordine dei parametri %1/%2 vengano visualizzati correttamente in una lingua con un ordine delle parole diverso dall'inglese.
Questo approccio si adatta a squadre che...
- Distribuisci un'applicazione desktop, embedded o mobile in Qt/C++ o Qt Quick (QML) che contrassegni già le stringhe con tr() o qsTr().
- Serve che la sintassi plurale %n di Qt e la struttura numerus/numerusform vengano tradotte correttamente attraverso l'intero insieme di categorie plurali CLDR della lingua di destinazione, non solo una singola forma.
- Vuoi .ts file instradati attraverso la stessa memoria di traduzione e glossario già usati per altri formati — JSON, XLIFF, RESX — invece di un flusso di lavoro separato solo per desktop.
- Il rilascio deve avvenire con una cadenza tale che la riesecuzione di lupdate e la ritraduzione delle stringhe modificate debbano essere una fase ripetibile del processo, non un'esportazione una tantum.
Quando un flusso di lavoro dedicato alla localizzazione di Qt potrebbe non essere la priorità giusta
- Un prototipo o uno strumento interno senza una seconda lingua pianificata — il flusso di lavoro manuale di Qt Linguist è sufficiente fino all'inizio effettivo della localizzazione.
- Un'unica lingua aggiuntiva tradotta una sola volta da uno sviluppatore bilingue interno, senza modifiche continue alle stringhe da tenere sotto controllo.
- I progetti in cui la maggior parte dei contenuti rivolti all'utente si trova completamente al di fuori del sistema tr() di Qt (ad esempio, contenuti web renderizzati lato server o un CMS separato) devono essere inseriti in un flusso di lavoro di localizzazione web o CMS, non in uno di Qt Linguist.
Checklist per la valutazione: domande da porsi prima di costruire questo
Le tue stringhe traducibili sono già avvolte in tr(), qsTr() o in una macro _NOOP?
Altrimenti, lupdate non riesce a trovarli: la strumentazione del codice sorgente deve avvenire prima che qualsiasi strumento di traduzione apporti valore.
La tua applicazione utilizza da qualche parte la sintassi del plurale %n di Qt?
In caso affermativo, conferma che la tua piattaforma di traduzione mappa automaticamente le voci numerus="yes"/numerusform alle categorie plurali complete di CLDR anziché trattarle come testo semplice.
Quante località target e quanto spesso cambia il testo sorgente?
Una manciata di località statiche è comoda solo in Qt Linguist; sono frequenti cambi di sorgente in molte località che la memoria di traduzione di un TMS e una pipeline ripetibile di lupdate-translate-lrelease iniziano a dare i loro frutti.
La tua piattaforma analizza i file .ts? È possibile eseguirlo nativamente o è necessario prima convertirlo in un altro formato?
L'analisi nativa sotto un tipo di file dedicato evita un passaggio di conversione che un estrattore XML generico aggiungerebbe altrimenti.
I traduttori hanno bisogno di un contesto visivo per evitare pulsanti o elementi di menu troncati?
Poiché .ts Di default non viene visualizzata alcuna anteprima renderizzata; verificare come viene fornito il contesto prima di inviare stringhe non testate.
Come gestisce Smartling la localizzazione di Qt Linguist?
Smartling analizza Qt Linguist .ts file come tipo di file dedicato — identificati internamente come Qt — invece di instradarli attraverso il suo parser XML generico, il che è importante perché la struttura plurale di Qt e la sintassi dei segnaposto vengono riconosciute automaticamente invece di richiedere le direttive in stile translate_paths che richiederebbe un file XML personalizzato. Smartling supporta nativamente le forme plurali dei file QT Linguist, leggendo l'attributo numerus="yes" e gli elementi numerusform che Qt Linguist scrive e li mappa alle corrette categorie plurali CLDR per ciascuna lingua di destinazione. I parametri numerati %1/%2 di Qt sono protetti dall'opzione di formato segnaposto QT di Smartling, disponibile tramite la direttiva placeholder_format insieme ai formati per progetti in stile iOS, Java, Python e RESX, quindi un traduttore che lavora nello strumento CAT di Smartling non può riscrivere o riordinare accidentalmente un token da cui dipende l'applicazione in esecuzione. I team che gestiscono stringhe non tradotte tramite l'API Files possono impostare includeOriginalStrings=false per restituire una stringa vuota invece della sorgente inglese quando una traduzione non è ancora disponibile. I file caricano fino a un limite di 10MB, manualmente o tramite l'API di Smartling, e i caratteri riservati XML standard vengono sfuggiti di default nelle traduzioni consegnate, con una direttiva entity_escaping disponibile quando un progetto necessita di una gestione diversa.
Pronto a vedere Smartling in azione?
Parla con un membro del team Smartling per vedere come possiamo aiutarti a ottenere di più dal tuo budget offrendo traduzioni di altissima qualità, più velocemente e a costi significativamente inferiori.