Forum QtFR

La communauté francophone Qt

Vous n'êtes pas identifié(e).

Annonce

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

#1 31-07-2012 12:05:26

Kouillo
Membre(e) Qt
Inscription : 16-03-2011
Messages : 28

[Traduction] Lupdate ignore mon header

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

#2 31-07-2012 12:16:48

PapaJaac
Administrateur Qt
Lieu : Bordeaux
Inscription : 08-12-2008
Messages : 1 752

Re : [Traduction] Lupdate ignore mon header

Bonjour !

Ce fichier commonstrings.h est-il inscrit dans le projet ?

Hors ligne

#3 31-07-2012 13:14:10

Kouillo
Membre(e) Qt
Inscription : 16-03-2011
Messages : 28

Re : [Traduction] Lupdate ignore mon header

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

#4 31-07-2012 20:08:51

keke222
Professionnel(le) Qt
Inscription : 10-04-2012
Messages : 276
Site Web

Re : [Traduction] Lupdate ignore mon header

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

#5 31-07-2012 23:04:56

PapaJaac
Administrateur Qt
Lieu : Bordeaux
Inscription : 08-12-2008
Messages : 1 752

Re : [Traduction] Lupdate ignore mon header

keke222 a écrit :

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.

Kouillo a écrit :

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

#6 01-08-2012 09:25:28

Kouillo
Membre(e) Qt
Inscription : 16-03-2011
Messages : 28

Re : [Traduction] Lupdate ignore mon header

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

#7 01-08-2012 10:15:49

PapaJaac
Administrateur Qt
Lieu : Bordeaux
Inscription : 08-12-2008
Messages : 1 752

Re : [Traduction] Lupdate ignore mon header

Kouillo a écrit :

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. smile
Mais ce n'est pas exact.

Hors ligne

#8 01-08-2012 12:06:03

Kouillo
Membre(e) Qt
Inscription : 16-03-2011
Messages : 28

Re : [Traduction] Lupdate ignore mon header

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

#9 02-08-2012 10:07:52

PapaJaac
Administrateur Qt
Lieu : Bordeaux
Inscription : 08-12-2008
Messages : 1 752

Re : [Traduction] Lupdate ignore mon header

Je reviens une 3è fois là-dessus :

Kouillo a écrit :

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

#10 02-08-2012 13:21:58

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 685

Re : [Traduction] Lupdate ignore mon header

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

#11 02-08-2012 14:12:57

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Traduction] Lupdate ignore mon header

@ myrddin772

Kouillo a écrit :

avec un QString ca marche mais ca me ferait beaucoup de refactoring de code, donc je voudrais comprendre pourquoi ça marche pas

Hors ligne

#12 02-08-2012 14:18:57

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Traduction] Lupdate ignore mon header

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

#13 02-08-2012 22:28:56

myrddin772
Modérateur Qt
Inscription : 13-03-2010
Messages : 685

Re : [Traduction] Lupdate ignore mon header

@ Nicolas
Oups... lu trop vite la discussion roll

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

#14 02-08-2012 22:46:23

Nicolas SOUCHON
Administrateur Qt
Inscription : 28-07-2007
Messages : 3 154

Re : [Traduction] Lupdate ignore mon header

wink wink wink J'suis d'humeur pinailleuse ces temps-ci !

Hors ligne

#15 07-08-2012 13:13:13

Kouillo
Membre(e) Qt
Inscription : 16-03-2011
Messages : 28

Re : [Traduction] Lupdate ignore mon header

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

Pied de page des forums


Sitemap QtFR