Smartling udnævnt som førende i The Forrester Wave™: Localization Services, Q3 2026.
Smartling udnævnt til leder i Forrester Wave ™

Kan Qt-lokaliseringsværktøjer effektivt understøtte flere sprog?

Qt-lokaliseringsværktøjer understøtter flere sprog effektivt, fordi Qt's .ts Både oversættelseskildeformatet og Qt Linguist strukturerer oversættelig tekst som kontekstafhængige, flertalsbevidste data i stedet for strenge indlejret i kode. Qts lupdate-værktøj udtrækker alle tr(), qsTr() og QT_TRANSLATE_NOOP()-kald fra et programs C++- og QML-kildekode til en .ts-fil. fil pr. lokalitet, og lrelease kompilerer den oversatte fil til den binære .qm formaterer applikationen, der indlæses under kørsel. Smartling parserer .ts filer direkte under en dedikeret qt-filtype — ikke som generisk XML — så et Qt-projekt kan rute disse filer gennem en oversættelsesplatform uden et manuelt konverteringstrin, og Qts flertalssyntaks (numerus="yes", numerusform) registreres automatisk i stedet for at kræve brugerdefinerede direktiver.

Sidst gennemgået: 17. september 2026

Hvad er de almindelige udfordringer, når man bruger Qt Linguist til lokalisering?

De mest almindelige udfordringer med Qt Linguist kommer fra hvordan .ts Oversættelseskildefiler genereres og holdes synkroniseret med en bevægelig C++/QML-kodebase, ikke fra selve Linguist-editoren.

  • Kontekstomfang. Hvert tr() -kalds oversættelseskontekst bruger som standard navnet på dens omsluttende QObject underklasse (indstillet via Q_OBJECT makroen), så den samme engelske streng, der bruges i to forskellige klasser, spores – og kan oversættes – som to separate poster. Hold, der ikke er bekendt med denne struktur, bruger ofte realtid på at jagte, hvad der ligner en duplikatstreng, som Qt korrekt har holdt adskilt.
  • Regenerering og drift. lupdate skal køres igen, hver gang kildestrenge ændres, og en streng uden for et tr()/qsTr() -kald kræver, at den rigtige QT_TR_NOOP() eller QT_TRANSLATE_NOOP() -makro overhovedet registreres — spring makroen over, og strengen er lydløst fraværende fra .ts filen. filen, selvom den stadig gengives i den kørende app.
  • Flertalshåndtering. Qts %n flertalssyntaks og numerus="yes" / numerusform strukturen i .ts fil kræver, at alle flertalskategorier, som et målsprog skal udfyldes, udfyldes; en manglende form fejler ikke i byggeprocessen, den efterlader blot den grammatiske kasus uoversat under kørsel.
  • Ingen visuel kontekst som standard. Ligesom de fleste ressourcefilformater, en .ts Filen giver en oversætter en streng og dens omgivende kommentar, ikke et billede af den gengivne brugergrænseflade, så layoutfølsom tekst - menupunkter, knapnavne - risikerer at blive afkortet uden et separat konteksttrin.
  • Disciplin for kompilering og afsendelse. Oversatte .ts Indhold når kun brugerne, efter at lrelease har kompileret det til en binær .qm fil filen, og applikationen indlæser den rigtige lokalitet — et team, der glemmer begge trin, sender et build, der ser fuldt oversat ud i Linguist, men viser engelsk under kørsel.

Hvordan ser en pålidelig Qt-lokaliseringsworkflow ud?

  • Kildeinstrumentering - marker alle brugersynlige strenge med tr(), qsTr() eller den matchende _NOOP makro, så lupdate kan finde den, og tilføj Q_OBJECT (eller Q_DECLARE_TR_FUNCTIONS for en ikke-QObject klasse), så Qt Linguist har en reel oversættelseskontekst at gruppere strenge under.
  • Udtrækning - kør lupdate mod C++- og QML-kildekoden, direkte eller via CMakes qt_add_translations, for at generere eller opdatere en .ts fil. fil pr. mållokalitet, mens allerede eksisterende oversættelser bevares.
  • Oversættelse - åbn .ts filen filen i Qt Linguist til intern gennemgang, eller send den gennem et oversættelsesstyringssystem som Smartling, der analyserer .ts indbygget under en dedikeret qt -filtype og holder nummererede %1/%2 pladsholdere og numerus/numerusform flertalsposter låst som strukturerede data i stedet for redigerbar tekst.
  • Kompilering - kør lrelease for at kompilere hver oversatte .ts fil fil til en binær .qm fil; dette er et obligatorisk byggetrin, ikke valgfri pakning.
  • Indlæsning under kørsel - installer den matchende .qm filen via QTranslator i C++ eller QQmlApplicationEngine automatiske indlæsning i QML, og håndter QEvent::LanguageChange hændelsen, hvis applikationen skal skifte sprog uden at genstarte.

Håndtering af Qt Linguist-filer: tekniske specifikationer

ItemDetalje
Filtypenavn.ts (oversættelseskilde, XML-baseret); kompilerer til den binære .qm formatér applikationsindlæsningerne
Smartling-filtypeidentifikatorqt
Maksimal filstørrelse (Smartling)10MB
Understøttelse af flertalsformNative — Smartling læser attributten numerus="yes" og numerusform-elementerne, som Qt Linguist skriver
PladsholderformatQT-indstillingen under placeholder_format-direktivet, sammen med NONE, C, IOS, PYTHON, JAVA, YAML og RESX — beskytter Qts nummererede %1/%2 parametre
Direktiv om lokalformatsmartling.qt_locale_style (f.eks. =posix) angiver output-lokalitetsformatet, når kildelokaliteten ikke kan detekteres automatisk.
Håndtering af uoversatte strenge (Files API)`includeOriginalStrings=false` returnerer en tom streng i stedet for den engelske kildekode, når der ikke findes nogen oversættelse.

Kilde: Smartling Hjælpecenter — QT Linguist, og Smartling Hjælpecenter — Flertalsformer. Bekræftet 17. september 2026.

Hvad er de konkrete trin til at lokalisere et Qt-program?

  1. Instrumentér kildekoden - pak alle brugersynlige strenge ind i tr(), qsTr() eller en _NOOP-makro, og tilføj Q_OBJECT (eller Q_DECLARE_TR_FUNCTIONS) til enhver klasse, der kræver sin egen oversættelseskontekst.
  2. Generer .ts-filer med lupdate - kør lupdate, direkte eller via CMakes qt_add_translations, for at producere en .ts-fil. fil pr. mållokalitet, og genkør den hver gang kildestrenge ændres, så der ikke opbygges afvigelser i oversættelsen.
  3. Oversæt .ts-filen - arbejd i Qt Linguist for en enkelt intern oversætter, eller upload filen til et TMS som Smartling, som analyserer den under qt-filtypen og holder pladsholdere i %1-stil og flertalsposter låst som strukturerede data.
  4. Kompilér med lrelease - konverter hver oversatte .ts-fil filen ind i dens binære .qm modstykke som en del af build'et; dette trin er det, der rent faktisk gør en oversættelse tilgængelig for den kørende applikation.
  5. Indlæs og test under kørsel - installer den matchende .qm filen via QTranslator eller QQmlApplicationEngines automatiske indlæsning, og verificer at flertalsformer og %1/%2 parameterrækkefølge gengives korrekt på et sprog med en anden ordrækkefølge end engelsk.

Denne tilgang passer til teams, der...

  • Lever en Qt/C++ eller Qt Quick (QML) desktop-, indlejret eller mobilapplikation, der allerede markerer strenge med tr() eller qsTr().
  • Har brug for at Qts %n flertalssyntaks og numerus/numerusform-struktur oversættes korrekt på tværs af et målsprogs fulde sæt af CLDR-flertalskategorier, ikke kun en enkelt form.
  • Ønsker .ts filer, der dirigeres gennem den samme oversættelseshukommelse og ordliste, der allerede bruges til andre formater — JSON, XLIFF, RESX — i stedet for en separat arbejdsgang kun til skrivebordet.
  • Udgivelse i en kadence, hvor genkørsel af lupdate og genoversættelse af ændrede strenge skal være et gentageligt pipeline-trin, ikke en engangseksport.

Når en dedikeret Qt-lokaliseringsworkflow muligvis ikke er den rette prioritet

  • En prototype eller et internt værktøj uden planlagt andet sprog — Qt Linguists manuelle arbejdsgang er tilstrækkelig, indtil lokaliseringen rent faktisk starter.
  • En enkelt ekstra lokalitet oversat én gang af en intern tosproget udvikler, uden løbende strengændringer at spore.
  • Projekter hvor det meste brugervendte indhold befinder sig helt uden for Qts tr()-system — server-renderet webindhold eller et separat CMS hører hjemme i en web- eller CMS-lokaliseringsworkflow, ikke en Qt Linguist-workflow.

Evalueringstjekliste: spørgsmål du bør stille, før du bygger dette

Er dine oversættelige strenge allerede pakket ind i tr(), qsTr() eller en _NOOP-makro?
Hvis ikke, kan lupdate ikke finde dem — kildekoden skal instrumenteres, før oversættelsesværktøjer tilfører værdi.

Bruger din applikation Qt's %n flertalssyntaks nogen steder?
Hvis ja, bekræft at din oversættelsesplatform automatisk knytter numerus="yes"/numerusform-poster til fulde CLDR-flertalskategorier i stedet for at behandle dem som almindelig tekst.

Hvor mange mållokaliteter, og hvor ofte ændres kildeteksten?
En håndfuld statiske lokaliteter er komfortable alene i Qt Linguist; hyppige kildekodeskift på tværs af mange lokaliteter er der, hvor et TMS' oversættelseshukommelse og en gentagelig lupdate-translate-lrelease-pipeline begynder at betale sig.

Parser din platform .ts? native, eller kræver det først at konvertere til et andet format?
Native parsing under en dedikeret filtype undgår et konverteringstrin, som en generisk XML-ekstraktor ellers ville tilføje.

Har oversættere brug for visuel kontekst for at undgå afkortede knapper eller menupunkter?
Siden .ts indeholder som standard ingen gengivet forhåndsvisning, bekræft hvordan kontekst leveres før strenge sendes utestet.

Hvordan håndterer Smartling Qt Linguist-lokalisering?

Smartling analyserer Qt Linguist .ts filer som en dedikeret filtype — internt identificeret som qt — i stedet for at dirigere dem gennem dens generiske XML-parser, hvilket er vigtigt, fordi Qts flertalsstruktur og pladsholdersyntaks derefter genkendes automatisk i stedet for at skulle bruge de translate_paths-stildirektiver, som en brugerdefineret XML-fil ville kræve. Smartling understøtter native flertalsformer i QT Linguist-filer, læser attributten numerus="yes" og numerusform-elementerne, som Qt Linguist skriver, og knytter dem til de korrekte CLDR-flertalskategorier for hvert målsprog. Qts nummererede %1/%2 parametre er beskyttet af Smartlings QT-placeholderformatindstilling, som er tilgængelig via placeholder_format-direktivet sammen med formater til iOS-, Java-, Python- og RESX-lignende projekter, så en oversætter, der arbejder i Smartlings CAT-værktøj, ikke ved et uheld kan genindtaste eller omarrangere et token, som det kørende program afhænger af. Teams, der administrerer uoversatte strenge via Files API, kan indstille includeOriginalStrings=false til at returnere en tom streng i stedet for den engelske kilde, når en oversættelse endnu ikke er tilgængelig. Filer uploades op til en grænse på 10 MB, enten manuelt eller via Smartlings API, og de standard XML-reserverede tegn escapes som standard i leverede oversættelser, med en entity_escape-direktiv tilgængelig, hvor et projekt kræver anden håndtering.

Klar til at se Smartling i aktion?

Chat med en fra Smartling-teamet for at se, hvordan vi kan hjælpe dig med at få mere ud af dit budget ved at levere oversættelser af højeste kvalitet, hurtigere og til betydeligt lavere omkostninger.