Python >> Tutoriel Python >  >> Python

Traduction d'applications Python avec Qt Linguist

La traduction d'une candidature est généralement un processus fastidieux et pénible.

Espérons que Qt offre un excellent support pour la traduction vers des applications en langage local développées en C++ ou Python.

Qt vous permet de charger des fichiers de traduction de langue dans une application au moment de l'exécution. Cela signifie que les textes de l'application (c'est-à-dire les menus, les titres d'écran, les étiquettes de champ, les fichiers d'aide, etc.) sont affichés dans la langue locale.

Qt utilise sa classe QString exclusivement pour gérer les chaînes. Cette classe complète gère nativement Unicode, la norme mondiale pour le texte et les emoji.

Dans cet article, je vais vous expliquer le processus de traduction étape par étape. Cependant, je ne vais pas entrer dans les détails de l'outil car Qt fournit une excellente documentation et de nombreux tutoriels sont disponibles sur le Web.

Configuration logicielle requise

Outre l'interpréteur Python et votre IDE Python préféré, vous devrez installer le paquet qt . Qt inclut un ensemble complet d'outils comme pylupdate5 , lrelease et pyrcc5 pour traduire les applications dans les langues locales. Je reviendrai sur ces outils ci-dessous.

Remarque :Bien que ce ne soit pas le sujet de cet article, je vous recommande vivement d'utiliser des environnements virtuels (virtualenv ou anaconda) pour le développement de projets. C'est l'un des outils essentiels que la plupart des développeurs Python utilisent.

Processus de traduction

Vous trouverez ci-dessous un schéma montrant le processus de traduction :

Selon le type et la taille d'un projet, le développeur et le traducteur peuvent être une seule et même personne.

Pour la création de la partie IHM de l'application, deux options s'offrent au développeur :

  1. Utiliser Qt Designer , un outil de conception et de construction d'interfaces utilisateur graphiques avec Qt Widgets. Les widgets et les formulaires créés avec Qt Designer peuvent être intégrés de manière transparente avec du code programmé. De plus, toutes les propriétés définies dans Qt Designer peuvent être modifiées dynamiquement dans le code de l'application.
  1. Utilisez les modules Python fournis par Qt pour implémenter et configurer manuellement les widgets dans le code de l'application.

Vous trouverez ci-dessous un aperçu rapide des étapes du processus :

  • Étape 1 (facultative) :concevoir et créer la partie de l'interface graphique avec Qt Designer.
  • Étape 2 (facultative) :convertissez les fichiers de Qt Designer en fichiers Python.
  • Étape 3 :implémentez le code nécessaire au processus de traduction
  • Étape 4 :Création ou mise à jour des fichiers de traduction.
  • Étape 5 :  Traduction des textes.
  • Étape 6 :Convertir les fichiers de traduction en fichiers binaires
  • Étape 7 (facultative) :Convertissez les fichiers binaires de traduction en un module de ressources Python.

Préparation du code de l'application Python

Code GUI généré par Qt Designer

Si le développeur utilise l'outil Qt Designer pour construire l'interface graphique, il doit d'abord convertir le fichier source Qt (.ui) en un fichier source Python (.py). Cette conversion est effectuée en exécutant le pyuic5 outil (étape 2). Je recommande d'utiliser un fichier batch pour cela. Voici un exemple :

Pyuic5 tool ajoute automatiquement à la fin du fichier python une fonction dédiée à la traduction. Cette fonction traduit toutes les chaînes trouvées dans le fichier source Qt en utilisant Qt translate fonction. Ainsi, le développeur n'a pas besoin d'effectuer d'action supplémentaire concernant les textes :

Code GUI généré manuellement

  • Si le développeur construit l'interface graphique manuellement, il doit préparer le code en appelant le Qt translate fonction pour chaque chaîne qui nécessite une traduction (étape 3). Pour rendre le code plus lisible, je vous recommande d'implémenter le tr() suivant fonction :

Ensuite, le développeur n'a plus qu'à appeler le tr() fonction pour chaque texte à traduire :

Fichiers de traduction (.ts)

Les fichiers de traduction (.ts) doivent être soit créés s'ils n'existent pas, soit mis à jour si un texte a été ajouté, modifié ou supprimé. Le développeur doit utiliser un fichier spécifique (.pro) pour configurer la manière dont les fichiers de traduction seront générés :

  • SOURCES :fichiers source Python contenant les textes à traduire
  • TRADUCTIONS :fichiers de langue. Le nom du fichier est composé du nom de l'application suivi de la langue et enfin de l'extension .ts. Voir le chapitre suivant pour plus d'informations sur la langue.

Le développeur doit utiliser le pylupdate5 Outil Qt pour générer les fichiers de traduction :

L'exécution de ce fichier batch générera automatiquement les deux fichiers de traduction spécifiés dans le fichier de configuration .pro, à savoir pptslidegenerator.fr.ts et pptslidegenerator.en.ts .

Code de langue locale

La langue utilisée dans le nom du fichier de traduction doit suivre des règles strictes. Il est composé du groupe de premières lettres de la chaîne de langue conforme à la RFC 1766. Dans le tableau suivant, vous trouverez un extrait des chaînes de langue couramment prises en charge fournies par Microsoft (Microsoft Language Strings) :

Chaînes de langue Description
fr-fr Anglais (Royaume-Uni)
fr-fr Anglais (États-Unis)
fr Allemand (Allemagne)
es Espagnol
il Italien (Italie)
fr Français (France)

Merci aux paramètres régionaux de Python module et son getdefaultlocale fonction, il est possible de récupérer la langue locale du système informatique. Cela nous permet de charger automatiquement le bon fichier de langue au démarrage de l'application. Le getdefaultlocale La fonction essaie de déterminer les paramètres régionaux par défaut. Si l'appel réussit, il les renvoie sous la forme d'un tuple de la forme (code de langue , encodage). Le code de langue est composé de deux parties, la langue et le pays :

Comme nous ne nous intéressons qu'au langage, le développeur doit utiliser le code suivant :

Traduction avec Qt Linguist 

Qt Linguist est un outil pratique utilisé pour rendre la traduction de texte très facile.

Le traducteur doit d'abord ouvrir un fichier de traduction .ts (étape 5). Il est également possible d'ouvrir tous les fichiers de traduction simultanément pour traduire les textes dans différentes langues en parallèle. Le traducteur peut maintenant procéder à la traduction des différents textes :

Voyons rapidement les différentes sections de cette fenêtre :

  • Contexte :La vue Contexte répertorie les contextes dans lesquels les chaînes à traduire apparaissent. Dans cet exemple, @default correspond au pptslidegenerator.py fichier de projet car MainWindow correspond à mainwin.py file (MainWindow est le nom d'objet défini dans Qt Designer pour la fenêtre principale). Le nombre de chaînes traduites est mentionné sur le côté droit.
  • Chaînes :La vue Chaînes liste les chaînes trouvées dans un contexte. Ces chaînes ont été extraites grâce à la présence de la fonction tr() ou translate() dans le code source. Le tableau suivant indique l'état actuel de la traduction pour chaque chaîne :
État Icône Description
Accepté/
Correct
Le traducteur a accepté la traduction, et la traduction a réussi tous les tests de validation. Si le champ de traduction est vide, le traducteur a décidé de le laisser vide.
Accepté/
Avertissements
Le traducteur a accepté la traduction, mais la traduction n'a pas réussi tous les tests de validation. Les échecs des tests de validation sont affichés dans la vue Avertissements.
Non accepté La chaîne a une traduction qui a réussi tous les tests de validation, mais le traducteur n'a pas encore accepté la traduction.
Pas de traduction Il n'y a pas de traduction pour la chaîne.
Échecs de validation La chaîne a une traduction, mais la traduction n'a pas réussi tous les tests de validation. Les échecs des tests de validation sont affichés dans la vue Avertissements.
Obsolète La chaîne est obsolète car elle n'est plus utilisée dans le contexte.
  • Zone de traduction (au milieu à droite) :Zone dédiée à la traduction de la chaîne en cours dans la Traduction champ. En fonction du nom du fichier de traduction, Qt Linguist détecte automatiquement la langue utilisée pour la traduction.
    Si la chaîne peut être traduite au pluriel, Qt Linguist demandera deux traductions :une au singulier ("Il y a %n fichier ") et un au pluriel ("Il y a %n fichiers ").
  • Avertissements :La vue Avertissements répertorie tous les textes qui échouent aux tests de validation.

Une fois que le traducteur a terminé la traduction et la validation de tous les textes, il doit enregistrer le(s) fichier(s) de traduction.

Compilation de fichiers de traduction

Le traducteur doit compiler le(s) fichier(s) de traduction dans un fichier .qm format binaire (étape 6). Le moyen le plus simple pour le traducteur consiste à utiliser la fonction de release intégrée de Qt Linguist ("Release " si un seul fichier est ouvert ou " Libérer tout ” pour plusieurs fichiers) :

Pour garder la cohérence de votre application, je vous recommande fortement de stocker vos fichiers binaires de traduction avec d'autres ressources (logo, images, etc.) dans un dossier de ressources spécifique :

Dossier ressources :

Chargement du ou des fichiers de traduction dans l'application Python

La dernière étape du processus consiste à charger les fichiers de traduction dans l'application. Lorsque le développeur décide de distribuer l'application, deux options sont disponibles pour les fichiers de ressources :

  1. Distribuez l'application avec le dossier des fichiers de ressources, qui sera séparé de l'exécutable de l'application.
  1. Compilez les fichiers de ressources dans un fichier Python, qui fera partie de l'exécutable de l'application (étape 7, solution recommandée).

Pour l'option B , le développeur doit d'abord mettre à jour le fichier de ressources Resources.qrc généré par Qt Designer en ajoutant les fichiers binaires de traduction :

La section relative à la langue est définie dans la qresource balise.

Ensuite, le développeur doit utiliser le pyrcc5 Outil Qt pour générer le fichier de ressources Python qui contiendra toutes les ressources compilées (logo et fichiers de traduction dans notre exemple) :

Vous trouverez ci-dessous le code à implémenter avec les spécificités liées à chaque option (A ou B ):

  • Importation de modules

A :

B :

  • Initialisation de la classe de traducteur

Un / B :

A :

On reconnait dans ce code la langue déterminée avec le getdefaultlocale fonction. De plus, nous devons ajouter un resource_path spécifique fonction pour obtenir le chemin du dossier des ressources. Ceci est particulièrement important lorsque le développeur décide de regrouper l'application et toutes ses dépendances dans un seul exécutable. C'est en effet dû au fait qu'au démarrage, l'exécutable crée un dossier temporaire nommé _MEIxxxxxx (xxxxxx est un nombre aléatoire) à l'emplacement du dossier temporaire approprié pour ce système d'exploitation.

B :

  • Changement de langue

Grâce au code suivant, il est possible de changer la langue à l'exécution :

A :

B :

Conclusion

Comme vous l'avez peut-être remarqué, la traduction d'applications Qt est un processus très bien pensé et tout est planifié.

Vous avez maintenant tous les outils en main pour diffuser votre programme partout dans le monde, il ne vous reste plus qu'à trouver le bon traducteur !