pyQT4

Traduire une application avec pyQT4, scrongneugneu !! La solution !

Lors de la release de la version 6.0beta 1 de pymecavideo :  http://outilsphysiques.tuxfamily.org/pmwiki.php/Oppl/Pymecavideo il a été posé le problème de l’internationalisation.

Nous nous étions déjà posé la question avant mais peu de retour nous était faits et donc le fonctionnement nous paraissait normal.

Seulement, en investiguant de nouveau, j’ai changé le code. Par principe, une fois que QTranslator crée et mis en place :

<code>

appTranslator = QTranslator() #création
langdir=os.path.join(StartQT4._dir(« langues »), « pymecavideo_ »+locale)    ##_dir est la fonction qui donne les répertoires utilisés.

if appTranslator.load(langdir):

b = app.installTranslator(appTranslator) #installation

</code>

il suffit de mettre « self.tr( » devant les chaînes à traduire pour que pylupdate les prennent en compte :

chaine = « ma chaine »  devient

chaine = self.tr(« ma chaine »)

RAPPEL : principe de l’internationalisation sous Qt : self.tr()->pylupdate->qtlinguist->fichier de traductions adéquats

Rien de bien neuf me direz-vous ?

La difficulté vient de l’utilisation des accents !! Si l’on fait :

chaine = self.tr(« ma chaîne »)

pylupdate ne gémira pas, mais le texte affiché risque d’avoir des signes cabalistiques.

SOLUTION possibles :

1 ) utiliser self.trUTf8 en lieu et place de self.tr. Si ceci fonctionne en C++, en pyQt… moins. Il insultera au moindre accent présent lors du pylupdate.

2) utiliser self.tr( avec la précision que nous sommes en unicode :

self.tr(u »ma chaïne »)

Tout fonctionnera bien… sauf qu’il va falloir tout de même passer dans qt-linguist pour la locale courante et faire des copies de toutes les chaînes à l’identique pour ne pas avoir de signes incompréhensibles. (de l’UTF8 quoi 😉 )

3° : la solution ultime !!!! (et qui marche )

self.tr(QString(u »ma chaîne »)

Pratique au possible, non ? Non… bon d’accord… on surchage 2 fois la chaîne de caractère avec le « u », avec le QString pour le faire passer au self.tr… Bref… pas très joli. Mais cela fonctionne.

Les chaînes sont bien écrites, même si le fichier de traduction n’existe pas.

 

 

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s