J'ai lu le dernier chapitre du cours sur Qt et je sais donc maintenant traduire une application Qt.
Tout cela fonctionne bien ; mais j'ai un problème :
Comment donner la possibilité à l'utilisateur de modifier la langue dynamiquement (sans quitter le programme donc) ?
Pour chaque widget, tu rajoute dans la partie changeEvent:
if (e->type() == QEvent::LanguageChange) {
titleLabel->setText(tr("LE TEXTE DE TON WIDGET"));
...
okPushButton->setText(tr("&OK"));
} else
//tes autres evenements
}
Et je te conseille, de remplacer l'initialisation du texte ton widget par tonwidget::changeEvent(QEvent::LanguageChange) pour éviter d'avoir des chaines dupliquées un peu partout dans ton code.
On appelle le slot choixLangue(), qui entre dans changeEvent(), qui entre dans retranslateInterface().
Ce code marche, seulement, comme vous voyez, la traduction est faite en "dure".
N'y aurait il pas un moyen plus simple de cette manière de façon à utiliser un QTranslator ?
Car faire un
if(langue == 'fr') tout le texte fr
else if(langue == 'en') tout le texte en anglais
ça fait extrèmement lourd à mon humble avis.
Plop merci, ça marche... enfin presque...
Il y a juste un petit bug : il ne me met pas la langue à jour de suite mais la 2nde fois que je clique sur changer de langue.
Exemple :
je lance le soft, la langue affichée est en français.
Je fais options => changer langue => anglais, le soft reste en français.
Je refais options => changer langue => (n'importe quelle langue), le soft passe en anglais.
Bref, j'ai toujours un décalage, la question est pourquoi ?
void FenPad::retranslateInterface(QString *language) {
QString lang = language->remove(2, language->length());
lang = lang.toLower();
lang = "UnitedPad_" + lang + ".qm";
QFileInfo fi( lang );
if ( !fi.exists() )
QMessageBox::warning( 0, "File error", QString("Cannot find translation for language: "+lang) );
if ( translator )
qApp->removeTranslator( translator );
translator->load( lang, "." );
qApp->installTranslator( translator );
}
translator est membre de la classe, instancié dans le constructeur.
Quelqu'un aurait une idée du pourquoi du comment ?
EDIT : je n'ai rien dit, ça marche maintenant. Juste inverser un morceau... :/
Changer dynamiquement la langue d'une application Qt
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
* Un wrapper C++ pour sqlite * Une alternative a boost units
If you'd like to join us, read "How do we work at OpenClassrooms"! :)
* Un wrapper C++ pour sqlite * Une alternative a boost units