pylupdate5 et Section 7, Exécution de l'application).
Quant à l'utilisation de caractères ASCII, ce n'est pas une obligation stricte. Cependant,
quand on travaille en PyQt, il est prudent d'édicter en règle cette recommandation faite
dans la documentation de Qt. En effet, les chaînes de caractères destinées à l'affichage
qui se trouvent dans les fichiers sources deviennent par la traduction des clés vers leur
équivalent dans les langues cibles. Or, la gestion des caractères Unicode entre les
mondes C++, PyQt et Python est compliquée à maîtriser — sans même parler de la
portabilité entre les systèmes ! Il est donc vivement recommandé d'éviter l'emploi de
ces caractères dans le code source [11] . Ceci n'implique évidemment pas qu'on doive
sacrifier les accents à l'affichage : il suffit de mettre le français avec accent en langue
cible pour garantir un affichage sans défaut. Certes, cette pratique peu paraître
ennuyeuse mais, comme indiqué dans l'encadré Faut⁠ -⁠ il traduire toutes les chaînes ? ,
l'activité de traduction franco-française consistera simplement à copier et ajouter les
accents aux éléments textuels qui le nécessitent ; ceux qui s'écrivent sans accent ne
requièrent aucune action : ils seront repris tels quels à l'écran. Par ailleurs, il peut être
bénéfique d'avoir un contrôle centralisé et uniforme de TOUS les éléments textuels en
dehors du code (dans les fichiers .ts, en l'occurrence), quelle que soit leur langue.
Pour appliquer ces règles au fichier main_window_biblio.ui, il faut changer à la
main les quelques libellés accentués : "Détails" devient "Details", "Résumé" devient
"Resume", "€" devient "euro", etc. Ensuite, on recompile la feuille. C'est tout ! Le
générateur de code prend soin de faire le reste du travail : ainsi, si l'on ouvre le fichier
Ui_main_window_biblio.py généré, on y verra une méthode retranslateUi qui
assigne tous les libellés en appelant la fonction _translate (qui est un alias pour
QtCore.QCoreApplication.translate). En gros, cette fonction va jouer le même
rôle que self.tr() sans qu'on doive coder ces appels nous-même.
Traitement des éléments textuels avec arguments
Qu'en est-il des éléments textuels qui incluent des informations dynamiques, telle
que Il y a 1000 livres dans le fichier 'alexandrie.bib'., où 1000 et 'alexandrie.bib'
sont récupérés à partir de variables du programme ? La technique naïve de
concaténer les chaînes de caractères :
self.tr("Il y a ") + str(nbLivres) + self.tr(" livres dans le
fichier '") \
+ nomFichier + self.tr("'.")
fonctionne mais est lourde et très mal adaptée. Il en résulte trois éléments textuels
142
Précédent

- 143/494

Suivant