IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

[Migration vers PyQt 5] Traduction


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut [Migration vers PyQt 5] Traduction


    J'ai commencé à convertir mes programmes de PyQt4 à PyQt5, et l'ampleur de la tâche commence à m'inquiéter... J'ai découvert, en particulier que la partie traduction des widgets de dialogue était très incomplète, au point que c'est le fichier de Qt4 qui a été bricolé (qt_fr.qm) au lieu de passer au nouveau processus de traduction de Qt5 (qtbase_fr.qm). Suis-je le seul à programmer en français pour des français?

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Je sais que tu as beaucoup travailler sur cette partie et je vais moi aussi commencer à m'y intéresser. J'ai regarder rapidement la doc officielle et en C++ ça fonctionne très bien.

    Je n'ai par contre pas encore tester une version "dynamique" mais en théorie ça doit être assez simple.

    Le processus est-il si différent avec PyQt ?
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  3. #3
    Membre confirmé
    Homme Profil pro
    débutant
    Inscrit en
    Février 2012
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : débutant
    Secteur : Alimentation

    Informations forums :
    Inscription : Février 2012
    Messages : 88
    Par défaut
    Bonjour,
    Vous parlez des boutons des boites de dialogue, effectivement depuis que je suis passé avec PyQt5 ils sont tous en anglais
    j'attendais d'avancer un peu dans ma conversion pour en parler, si je ne suis pas le seul ca me rassure un peu.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Effectivement, je n'ai pas encore essayé la traduction d'un code perso avec PyQt5. Pour l'instant, j'essaie de résoudre la traduction des widgets de dialogue qui continuent à me demander "Yes" ou "No" alors que j'ai demandé la traduction en français comme je le faisais en PyQt4, c'est à dire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        locale = QtCore.QLocale.system().name()[:2]
        translator = QtCore.QTranslator ()
        reptrad = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.TranslationsPath)
        translator.load("qt_" + locale, reptrad)
        app.installTranslator(translator)
    Ce petit code installe le fichier de traduction prédéfini "qt_fr.qm" qui se trouve dans le répertoire "translations".

    A noter que cela suppose la présence d'un fichier qt.conf qui renseigne Qt sur l'emplacement de ce répertoire, car à défaut, Qt prend le chemin de l'installation de Qt en C++ qui est codé en dur!.
    Sous Windows, ce fichier qt.conf doit se trouver dans le même répertoire que python.exe, et contenir (mettre le bon PyQt: 4 ou 5):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [Paths]
    Prefix = Lib/site-packages/PyQt5
    Binaries = .
    Plugins = plugins
    Translations = translations
    Mais ce fichier de traduction qt_fr.qm est incomplet, et c'est un problème Qt5 et non spécifique à PyQt5! J'ai donc posé la question dans un forum Qt et j'ai eu des réponses très intéressantes: effectivement, le travail de traduction en français n'a pas été fait complètement comme il aurait dû, probablement par manque de ressource bénévole. Au minimum, le fichier Qt4 (qt_fr.qm) a été repris alors que le processus de traduction de Qt5 a été modifié (=> le nouveau fichier qtbase_fr.qm n'existe pas).

    Mais le travail pour créer un fichier de traduction correct nécessite de repartir des sources de Qt5 (1.47Go quand même!) et d'utiliser les scripts prévus à cet effet, en plus de résoudre les centaines de phrases à traduire.

    J'ai commencé le travail, mais désolé, ça m'entraine trop loin. Alors, dans un premier temps, j'ai préféré recoder les quelques fenêtres de dialogue que j'utilise.

    Voilà un exemple pour le QMessageBox.Question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    from PyQt5.QtWidgets import QApplication, QMessageBox
     
    #############################################################################
    def msgbox_question(parent=None, titre="", texte=""):
        """un QMessageBox.Question personnalisé et traduit en français
        """
        messagebox = QMessageBox(parent)
        messagebox.setWindowTitle(titre)
        messagebox.setIcon(QMessageBox.Question)
        messagebox.setText(texte)
        bouton_oui = messagebox.addButton("Oui", QMessageBox.YesRole)
        bouton_non = messagebox.addButton("Non", QMessageBox.NoRole)  
        bouton_annule = messagebox.addButton('Annuler', QMessageBox.RejectRole)
        messagebox.setDefaultButton(bouton_oui)
        messagebox.exec_()
        if messagebox.clickedButton() == bouton_annule:
            return None
        return messagebox.clickedButton() == bouton_oui
     
    #############################################################################
    if __name__ == "__main__":
        import sys
        app = QApplication(sys.argv)
     
        ok = msgbox_question(None, "titre", "texte")
        if ok:
            print("Oui!")
        elif ok==None:
            print("Annuler!")
        else:
            print("Non!")
    Ça parait compliqué comme ça, mais en fait, le code est facile à comprendre, et une fois que les fenêtres de dialogue ont été codées et placées dans un module, on l'importe, et l'appel dans n'importe quel programme est aussi facile voire plus facile que pour les QMessagesBox standards.

    J'espère tout de même que des bonnes âmes finiront par terminer le boulot des traductions officielles...

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    La question va sûrement paraître bête, mais pourquoi pas générer ton propre fichier de traduction ? Si c'est pour remplacer les quelques mots anglais sur quelques widgets ça ira assez vite.

    J'ai testé cette solution et c'est plutôt pratique comme truc.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Salut,

    je suis toujours en pyqt4 pour le moment, mais je sais que je passerai en pyqt5 une fois mon logiciel en cours de dev plus ou moins terminé.

    De ce fait le problème se posera pour moi également.

    Y aurait-il des personnes motivées pour qu'on participe à la traduction ?

    Le fichier est il dispo quelque part ? Y a t il un système collaboratif de traduction en route ?

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Jiyuu Voir le message
    La question va sûrement paraître bête, mais pourquoi pas générer ton propre fichier de traduction ? Si c'est pour remplacer les quelques mots anglais sur quelques widgets ça ira assez vite.

    J'ai testé cette solution et c'est plutôt pratique comme truc.
    Si tu sais faire ça, ça m'intéresse!

    Ce que j'ai fait:

    - j'ai exclu de repartir des sources en utilisant la méthode officielle: je connais trop peu de choses sur le sujet.

    - on ne travaille pas sur les fichiers .qm mais sur leur prédécesseurs: les fichiers .ts qui sont des fichiers texte structurés XML. Pour Qt 5.4, on les trouve dans les sources de Qt5, mais aussi ici: http://l10n-files.qt.io/l10n-files/.

    - avec ces fichiers ts, j'ai déjà essayé de modifier le fichier qt_fr.ts, puis de convertir en fichier qm avec QtLinguist, mais je n'ai pas réussi.

    - j'ai repris ensuite un fichier standard qtbase_untranslated.ts, et grâce à beautifulsoup, j'ai extrait les traductions de qt_fr.ts et replacé dans qtbase_untranslated.ts renommé en qtbase_fr.ts. Mais ça n'a pas marché non plus.

    - le dernier essai que je voulais faire était de prendre plutôt le fichier .ts allemand qtbase_de.ts, mais je me suis arrêté là pour l'instant.

    En fait, le plus pénible, c'est qu'il n'y a pas de doc (il faut donc beaucoup deviner) et que la moindre erreur du fichier XML provoque à l'importation dans QtLinguist un message d'erreur tellement général que ça n'apporte rien.

Discussions similaires

  1. Migration vers Interbase
    Par mona dans le forum InterBase
    Réponses: 6
    Dernier message: 26/09/2005, 10h43
  2. Probleme de migration vers serveur dédié
    Par sylvain_neus dans le forum Hibernate
    Réponses: 13
    Dernier message: 23/04/2004, 08h51
  3. [Kylix] migration vers kylix
    Par zheng dans le forum EDI
    Réponses: 1
    Dernier message: 11/04/2004, 08h31
  4. [Tomcat] migration vers une version plus récente
    Par butcher dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 31/10/2003, 21h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo