Vous n'êtes pas identifié(e).
Qt 4: 4.8.4 - Qt 5: 5.0.2 - Qt Creator: 2.7.1 - Qt Installer: 1.3.0 - VS Qt 4: 1.1.11 - VS Qt 5: 1.2.1 - Monkey Studio: 1.9.0.4
Pages : 1
Bonjour à tous.
Après pas mal de recherches sur le net, je me résoud à poster ici...
Je suis face à un problème de traduction dans mon soft en cours de développement. Pour tester le chargement des langues j'ai voulu générer des fichiers TS et les traduire en partie.
Mes chaines sources sont :
- dans des fichiers UI d'interface
- dans un fichier header regroupant les chaînes à traduire.
C'est ce fichier header qui me pose un problème : Lupdate ne semble pas voir les chaines qui y sont inscrites, aucune n'apparait dans le fichier TS.
Note : Les chaines inclues dans les fichiers UI sont bien traduites après passage de lrelease et chargement du fichier par QTranslator. Les fichiers TS sont définis dans le .PRO
Voici la forme de mon fichier header :
Fait plus bizarre : hier j'arrivais à faire extraire les chaines de ce fichier par lupdate, uniquement en passant en ligne de commande (pas par Qt Creator). Aujourd'hui aucune manip ne marche...
D'avance merci pour votre aide !
Hors ligne
Bonjour !
Ce fichier commonstrings.h est-il inscrit dans le projet ?
Hors ligne
Oui il est bien dans le .pro
Le plus étrange c'est que si je prend la sortie de compilation (lors du lupdate), on y trouve
Lancement de l'outil externe
lupdate warning: no TS files specified. Only diagnostics will be produced for 'D:/.../projet.pro'.
Et si je colle " "C:/QtSDK/Desktop/Qt/4.8.0/msvc2010/bin/lupdate.exe" D:/.../projet.pro " dans une console, les strings du header sont bien trouvées et ajoutées au TS
Dernière modification par Kouillo (31-07-2012 13:17:38)
Hors ligne
J'ai eu un problème comme ça, certaine de mes fenêtres n'étaient pas traduites. J'ai vu après qu'il fallait qu'il y est la macro Q_OBJECT pour que cela marche.
Hors ligne
J'ai vu après qu'il fallait qu'il y est la macro Q_OBJECT pour que cela marche.
Non, Q_OBJECT n'intervient pas dans les traductions.
Et si je colle " "C:/QtSDK/Desktop/Qt/4.8.0/msvc2010/bin/lupdate.exe" D:/.../projet.pro " dans une console, les strings du header sont bien trouvées et ajoutées au TS
Fais voir ton .pro
Hors ligne
Bonjour.
Merci de vous pencher sur mon problème.
J'ai demandé les traductions dans mon projet de sous-projets :
Pour essayer de résoudre mon problème j'ai isolé les éléments dans un petit projet séparé. J'ai lu quelque part qu'il fallait avoir un contexte de type Q_OBJECT pour que lupdate prenne en compte les strings. J'ai donc essayé de placer les chaines dans une classe :
fichier pro
fichier header
fichier CPP
Main :
Ce que j'obtiens en sortie lors du lupdate :
D:/KLF/SEAN_SAFIRP/Essais/QtLinguist/TranslateHeader/guistrings.cpp:4: tr() cannot be called without context
D:/KLF/SEAN_SAFIRP/Essais/QtLinguist/TranslateHeader/guistrings.cpp:5: tr() cannot be called without context
D:/KLF/SEAN_SAFIRP/Essais/QtLinguist/TranslateHeader/guistrings.cpp:6: tr() cannot be called without context
D:/KLF/SEAN_SAFIRP/Essais/QtLinguist/TranslateHeader/guistrings.cpp:7: tr() cannot be called without context
D:/KLF/SEAN_SAFIRP/Essais/QtLinguist/TranslateHeader/main.cpp:15: tr() cannot be called without context
Message d'erreur qui n'apparaissait d'ailleur pas lorsque j'utilisais un namespace...
Dernière modification par Kouillo (01-08-2012 09:25:56)
Hors ligne
J'ai lu quelque part qu'il fallait avoir un contexte de type Q_OBJECT pour que lupdate prenne en compte les strings
Juste deux messages au-dessus du tien. 
Mais ce n'est pas exact.
Hors ligne
Bon j'ai pas mal avancé :
En fait il fallait définir les chaines dans une classe héritant de QObject. De plus les chaines "static" ne récupère apparemment pas le contexte de la classe.
Maintenant j'ai un autre soucis : en utilisant QT_TR_NOOP( ) d'un coté et tr() ensuite, la chaine n'est pas traduite.
(avec un QString ca marche mais ca me ferait beaucoup de refactoring de code, donc je voudrais comprendre pourquoi ça marche pas)
Saurais tu pourquoi ?
Header
CPP
Apres le QTranslator :
D'avance merci.
Hors ligne
Je reviens une 3è fois là-dessus :
En fait il fallait définir les chaines dans une classe héritant de QObject.
Faux. Fais le test : dans la fonction main (), qui ne dérive pas de QObject, insère des QObject::tr (). Tu retrouveras tes chaînes dans le .ts.
Par conséquent ce n'est pas cela qui coince.
Hors ligne
Cela ne pourrait-il pas venir des char* au lieu des QString ?
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
@ myrddin772
avec un QString ca marche mais ca me ferait beaucoup de refactoring de code, donc je voudrais comprendre pourquoi ça marche pas
Hors ligne
la doc :
QT_TR_NOOP( sourceText )
Marks the string literal sourceText for dynamic translation in the current context (class)
essaie plutôt :
QT_TRANSLATE_NOOP( context, sourceText )
Hors ligne
@ Nicolas
Oups... lu trop vite la discussion 
Au temps pour moi !
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows et Ian Parberry
Si tu ne sais pas : demande, si tu sais : partage !
Hors ligne
J'suis d'humeur pinailleuse ces temps-ci !
Hors ligne
Bon, finalement j'ai crée une classe dans laquelle je place toutes les chaines à traduire.
J'ai tout repassé en QString au lieu de char * + QT_TR_NOOP car sinon la chaine était bien détectée mais les strings n'étaient pas traduites.
Cela m'a fait tout re-casser mon refactoring de code mais cela fonctionne maintenant pour les GUI + les chaines perso.
Du coup j'ai résolu le problème mais sans savoir pourquoi ça ne marchait pas...
Hors ligne
Pages : 1
| Liens interne à QtFR | Les partenaires de QtFR | Liens pour les sites officiels Qt | Liens sur les ressources Qt |
|---|---|---|---|
| Communauté QtFR sur Google+ | Monkey Studio | Télécharger Qt | Notre tutoriel |
| QtFR sur Twitter | ZeGrapher | Site officiel Qt | Documentation Qt |
| IRC box | Qt Blog | Qt Centre | |
| Galeries | Qt Wiki | Qt Apps | |
| Contactez-nous | Qt Quarterly |