2017-07-16 2 views
0

Je développe une application Qt qui fonctionne sous Linux et Windows. Je suis dans un lieu allemand. Lors de la construction sur Linux, j'obtiens les traductions correctes pour les boutons standard affichés par e. g. un QMessageBox::question avec QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel boutons mis ("Ja", "Nein" et "Abbrechen" dans mon cas). Cependant, si je compile le code sous Windows, je ne reçois que les textes en C régionaux (anglais) pour ces boutons ("Oui", "Non" et "Annuler").Pourquoi ai-je besoin d'un QTranslator pour les textes de boutons localisés dans un QMessageBox sous Windows?

Après quelques recherches, je trouve une solution de travail à l'échelle mondiale en ajoutant

#include <QTranslator> 
#include <QLibraryInfo> 

et

QTranslator qtTranslator; 
if (qtTranslator.load(QLocale::system(), QString::fromUtf8("qt"), QString::fromUtf8("_"), 
         QLibraryInfo::location(QLibraryInfo::TranslationsPath))) { 
    app.installTranslator(&qtTranslator); 
} 

à mon main.cpp. En utilisant ceci, j'obtiens aussi les chaînes traduites sous Windows. Sous Linux cependant, l'appel qtTranslator.load échoue et, par conséquent, rien ne se passe à l'état que j'avais avant, donc j'ai fini par mettre ce code dans un bloc #ifdef Q_OS_WIN.

Cela fonctionne, mais semble un peu hacky pour moi. De plus, je ne comprends pas pourquoi j'obtiens les chaînes traduites sur Linux par défaut et pas sur Windows.

Est-ce que la façon dont je le fais est la bonne solution? Et si oui, pourquoi ai-je besoin de ce code supplémentaire sur Windows?

Répondre

0

Essayez de remplacer votre code à ce sujet et testé.

static QTranslator qtTr; 
qtTr.load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)); 
installTranslator(&qtTr); 
+0

Je ne pense pas que cela changera quoi que ce soit. Sur ma machine linux, 'QLibraryInfo :: location (QLibraryInfo :: TranslationsPath)' me donne '/ usr/share/qt5/translations', qui n'existe même pas. Donc, il va à nouveau échouer sur Linux. Eh bien, et sur Windows, cela fonctionne comme je l'ai posté ci-dessus ... Je me demande toujours pourquoi j'ai besoin de ce code sur Windows et pas sur Linux! –

+0

@TobiasLeupold quelle version de qt utilisez-vous? – iMashine

+0

D'abord 5.6.2, puis 5.7.1. Même comportement pour les deux versions. –