Kan Qt lokaliseringsverktyg stödja flera språk effektivt?
Qt lokaliseringsverktyg stöder flera språk effektivt eftersom Qts .ts translation-source-format och Qt Linguist strukturerar båda översättbar text som kontextomfattande, pluralmedveten data snarare än strängar inbäddade i kod. Qts lupdate-verktyg extraherar varje tr (), qStr () och QT_TRANSLATE_NOOP () -anrop från ett programs C++- och QML-källa till en.ts fil per språk, och lrelease kompilerar den översatta filen till binären.qm formatera programladdningarna vid körning. Smartling tolkar .ts filer som är infödda under en dedikerad qt-filtyp - inte som generisk XML - så ett Qt-projekt kan dirigera dessa filer genom en översättningsplattform utan ett manuellt konverteringssteg, och Qts pluralsyntax (numerus= " ja ", numerusform) fångas automatiskt snarare än att kräva anpassade direktiv.
Senast granskad: 17 september 2026
Vilka är de vanligaste utmaningarna när du använder Qt Linguist för lokalisering?
De vanligaste utmaningarna med Qt Linguist kommer från hur .ts Översättningskällfiler genereras och hålls synkroniserade med en rörlig C++/QML-kodbas, inte från själva Linguist-redigeraren.
- Sammanhangsomfång. Varje
tr ()-anrops översättningskontext har som standard namnet på dess omslutandeQObjectunderklass (inställd genom makrotQ_OBJECT), så samma engelska sträng som används i två olika klasser spåras — och kan översättas — som två separata poster. Lag som inte känner till denna struktur spenderar ofta realtid på att jaga vad som ser ut som en dubblettsträng som Qt korrekt har hållit separat. - Regenerering och drift.
lupdatemåste köras om varje gång källsträngar ändras, och en sträng utanför etttr ()/qStr()-anrop behöver rättQT_TR_NOOP ()ellerQT_TRANSLATE_NOOP ()makro för att plockas upp alls - hoppa över makrot och strängen är tyst frånvarande från.tsfilen, även om den fortfarande återges i den körande appen. - Flertalshantering. Qts
%npluralsyntax ochnumerus= " ja "/numerusform-strukturen i.tsfilen kräver varje pluralkategori som ett målspråk behöver fyllas i; en saknad form misslyckas inte med byggandet, det lämnar bara det grammatiska fallet oöversatt vid körning. - Inget visuellt sammanhang som standard.
Liksom de flesta resursfilformat, en.tsfilen ger en översättare en sträng och dess omgivande kommentar, inte en bild av det renderade användargränssnittet, så layout-känslig text - menyalternativ, knappetiketter - riskerar avkortning utan ett separat sammanhangssteg. - Sammanställnings-och-skeppsdisciplin. Översatt
.tsinnehåll når bara användare efter attlreleasehar kompilerat det till en binär.qmfilen och applikationen laddar rätt språk - ett team som glömmer båda stegen skickar en build som ser helt översatt ut i Linguist men visar engelska vid körning.
Hur ser ett pålitligt Qt-lokaliseringsarbetsflöde ut?
- Källinstrumentering - markera varje användarsynlig sträng med
tr (),qStr ()eller det matchande_NOOP-makrot så attlupdatekan hitta det, och lägg tillQ_ OBJECT(ellerQ_DECLARE_TR_FUNCTIONSför en icke-QObjectklass) så att Q t Linguist har ett verkligt översättningskontext att gruppera strängar under. - Extraktion - kör
lupdatemot C ++- och QML-källan, direkt eller genom CMakesqt_add_translation, för att generera eller uppdatera en.tsfil per målspråk samtidigt som översättningar som redan finns bevaras. - Översättning - öppna
.tsarkivera i Qt Linguist för intern granskning, eller dirigera den genom ett översättningshanteringssystem som Smartling, som analyserar.tsinbyggt under en dedikerad qt-filtyp och håller numrerade%1/% 2platshållare ochnumerus/numerusformplural poster låsta som strukturerad data snarare än redigerbar text. - Kompilering - kör
lreleaseför att kompilera varje översatt.tsfil till en binär.qmfil; detta är ett obligatoriskt byggsteg, inte valfri förpackning. - Runtime loading - installera matchande
.qmfila viaQTranslatori C++ ellerQQMLApplicationEngines automatiska laddningi QML, och hantera händelsen qEvent: :LanguageChange om programmet behöver byta språk utan att starta om.
Qt Linguist filhantering: tekniska specifikationer
| Item | Detalj |
|---|---|
| Filtillägg | .ts (översättningskälla, XML-baserad); kompilerar till binären.qm formatera applikationsladdningarna |
| Smartling-filtypsidentifierare | qt |
| Maximal filstorlek (Smartling) | 10MB |
| Stöd för pluralform | Native — Smartling läser attributet numerus= " ja " och numerusformelementen Qt Linguist skriver |
| Platshållarformat | QT-alternativet under direktivet placeholder_format, tillsammans med NONE, C, IOS, PYTHON, JAVA, YAML och RESX - skyddar Qts numrerade %1/%2 parametrar |
| Direktiv för språkformat | smartling.qt_lokalisering_stil (t.ex. =posix) ställer in formatet för utdata när källspråket inte kan identifieras automatiskt |
| Hantering av oöversatta strängar (Fil-API) | includeOriginalStrings=False returnerar en tom sträng istället för den engelska källan när ingen översättning finns |
Källa: Smartling Help Center - QT Linguist, och Smartling Help Center - Plurals. Verifierad 17 september 2026.
Vilka är de konkreta stegen för att lokalisera en Qt-applikation?
- Instrumentera källan - linda in varje användarsynlig sträng i tr (), qStr () eller ett _NOOP-makro, och lägg till Q_OBJECT (eller Q_DECLARE_TR_FUNCTIONS) till en klass som behöver sitt eget översättningskontext.
- Generera.ts filer med lupdate - kör lupdate, direkt eller via CMakes qt_add_translation, för att producera en.ts fil per målspråk och kör den igen varje gång källsträngar ändras så att översättningsdriften inte byggs upp.
- Översätt .ts-filen - arbeta i Qt Linguist för en enda intern översättare, eller ladda upp filen till en TMS som Smartling, som analyserar den under qt-filtypen och håller platshållare och pluralposter i %1-stil låsta som strukturerade data.
- Kompilera med lrelease - konvertera varje översatt .ts fil till dess binär.qm motsvarighet som en del av byggandet; det här steget är vad som faktiskt gör en översättning tillgänglig för det program som körs.
- Ladda och testa vid kör ning - installera matchande .qm arkivera genom QTranslator eller QQMLApplicationEngines automatiska laddning och verifiera pluralformer och %1/%2 parameterordning som återges korrekt på ett språk med annan ordordning än engelska.
Detta tillvägagångssätt passar team som...
- Skicka en Qt/C++ eller Qt Quick (QML) stationär, inbäddad eller mobilapplikation som redan markerar strängar med tr () eller qStr ().
- Behöver Qts %n pluralsyntax och numerus/numerusform-struktur översatt korrekt över ett målspråks fullständiga uppsättning CLDR-pluralkategorier, inte bara en enda form.
- Vill ha .ts filer som dirigeras genom samma översättningsminne och ordlista som redan används för andra format - JSON, XLIFF, RESX - istället för ett separat arbetsflöde som bara är skrivbordet.
- Släpp på en kadens där omkörning av lupdate och omöversättning av ändrade strängar måste vara ett repeterbart rörledningssteg, inte en engångsexport.
När ett dedikerat Qt-lokaliseringsarbetsflöde kanske inte är rätt prioritet
- En prototyp eller internt verktyg utan planerat andraspråk — Qt Linguists manuella arbetsflöde räcker tills lokaliseringen faktiskt startar.
- En enda ytterligare språk översatt en gång av en intern tvåspråkig utvecklare, utan pågående strängändringar att spåra.
- Projekt där det mesta användarvänt innehåll lever utanför Qts tr () -system helt och hållet - serverrenderat webbinnehåll eller ett separat CMS hör hemma i ett webb- eller CMS-lokaliseringsarbetsflöde, inte ett Qt Linguist.
Utvärderingschecklista: frågor att ställa innan du bygger detta
Är dina översättningsbara strängar redan inslagna i tr (), qStr () eller ett _NOOP-makro?
Om inte, lupdate kan inte hitta dem - instrumentering av källan måste ske innan något översättningsverktyg tillför värde.
Använder din applikation Qts %n pluralsyntax någonstans?
Om ja, bekräfta att din översättningsplattform automatiskt mappar numerus= " ja " /numerusform-poster till fullständiga CLDR-pluralkategorier i stället för att behandla dem som vanlig text.
Hur många målspråk och hur ofta ändras källtexten?
En handfull statiska språk är bekväma bara i Qt Linguist; frekventa källändringar över många språk är där ett TMS översättningsminne och en repeterbar lupdate-translate-lrelease pipeline börjar löna sig.
Analyserar din plattform .ts inbyggt, eller kräver det konvertering till ett annat format först?
Inbyggd parsning under en dedikerad filtyp undviker ett konverteringssteg som en generisk XML-extraherare annars skulle lägga till.
Behöver översättare visuellt sammanhang för att undvika trunkerade knappar eller menyalternativ?
Sedan .ts har ingen renderad förhandsgranskning som standard, bekräfta hur kontext tillhandahålls innan strängar skickas otestade.
Hur hanterar Smartling Qt Linguist lokalisering?
Smartling tolkar Qt Linguist .ts filer som en dedikerad filtyp - identifierad internt som qt - snarare än att dirigera dem genom sin generiska XML-parser, vilket är viktigt eftersom Qts pluralstruktur och platshållarsyntax sedan identifieras automatiskt istället för att behöva translate_paths-style-direktiven som en anpassad XML-fil skulle kräva. Smartling stöder naturligt pluralformerna av QT Linguist-filer, läser attributet numerus= " yes " och numerusformelementen Qt Linguist skriver och mappar dem till rätt CLDR-pluralkategorier för varje målspråk. Qts numrerade %1/%2-parametrar är skyddade under Smartlings QT-platshållarformatalternativ, tillgängligt via platshållar_formatdirektivet tillsammans med format för iOS-, Java-, Python- och RESX-stilprojekt, så en översättare som arbetar i Smartlings CAT-verktyg kan inte av misstag skriva om eller ordna om en token som programmet körs beror på. Team som hanterar oöversatta strängar via Files-API:et kan ställa in includeOriginalStrings=False för att returnera en tom sträng istället för den engelska källan när en översättning ännu inte är tillgänglig. Filer laddas upp till en gräns på 10 MB, antingen manuellt eller via Smartlings API, och de vanliga XML-reserverade tecknen undviks som standard i levererade översättningar, med ett entity_escaping-direktiv tillgängligt där ett projekt behöver annan hantering.
Är du redo att se Smartling i aktion?
Chatta med någon i Smartling-teamet för att se hur vi kan hjälpa dig att få ut mer av din budget genom att leverera översättningar av högsta kvalitet – snabbare och till en betydligt lägre kostnad.