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

Python Discussion :

Meilleure façon pour gérer les langues [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut Meilleure façon pour gérer les langues
    Bonjour,

    Je ne cherche pas ici la meilleure méthode technique pour gérer les langues mais plutôt celle qui est recommandée.
    J'ai un programme (CLI et GUI) qui pose des questions et affiche de résultats. J'ai pris l'habitude d'écrire les textes en anglais (commentaires compris) mais je voudrais que l'interface corresponde à la langue de l'ordinateur ou à celle des préférences de l'utilisateur.
    Je sais donc récupérer la langue du système
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import locale
    locale.getdefaultlocale()
    mais une fois la langue récupérée, je peux utiliser:
    • un fichier Json qui serait indéxé par la langue et des clés

    • des listes de littéraux dans un fichier .ini accédé par la fonction Contener[, chaque littéral étant adressé par son n° d'ordre

    • un codage en dur avec if à chaque fois que je veux afficher

    • autre ...

    Je ne pense pas que la traduction automatique soit applicable ici.

    PS: ce programme sera publié sous Github; faciliter la traduction est aussi un objectif, même si je doute que des utilisateurs exotiques s'intéressent à ma pauvre production. J'ai déjà le français, l'anglais et l'espagnol, l’essentiel semble être là.

    Vos conseils ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    On apprend à utiliser la méthode documentée avant d'essayer autre chose si nécessaire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    On apprend à utiliser la méthode documentée avant d'essayer autre chose si nécessaire.

    - W
    Houlala que c'est compliqué. En deux mots (en fait bien plus), ce que j'ai compris (mais j'ai dû faire des erreurs).

    • dans mon programme source importer le module gettext et référencer la variable '_' comme signe de traduction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import gettext
    ...
    _ = language_translations.gettext
    • dans mon programme source modifier tous les textes à traduire en les faisant associer à la variable '_'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print("Hello world")
    # devient 
    print(_("Hello world"))
    • générer un fichier de textes à traduire par la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xgettext -o ./locales/base.pot Traduction.py
    • générer les fichiers .po par langue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msginit --input=./locales/base.pot --local=fr --output=./locales/fr/LC_MESSAGES/base.po
    • générer les fichiers binaires .mo par langue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgfmt --output=./locales/fr/LC_MESSAGES/base.mo ./locales/fr/LC_MESSAGES/base.po
    Et là il se pourrait que ça marche.

    Le fruit de ces commandes est une succession d'essais et de tatonnements. J'essaye de repartir à zéro et de tout faire chronologiquement pour vérifier mais si vous avez de remarques je suis preneur.

    A+

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Vangeles Voir le message
    Houlala que c'est compliqué. En deux mots (en fait bien plus), ce que j'ai compris (mais j'ai dû faire des erreurs).
    Tout est compliqué en informatique car les anciens ont "standardisé" pas mal de choses qu'il faut prendre le temps d'assimiler pour comprendre le pourquoi du comment....
    Sinon oui: la séquence que vous mentionnez ressemble à ce qu'il est raisonnable de faire mais l'enfer est dans les détails...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Retraité de l'Informatique
    Inscrit en
    Août 2019
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité de l'Informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2019
    Messages : 36
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,
    J'ai donc appliqué point à point; chronologie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    rm -R locales/
    mkdir -p ./locales/fr/LC_MESSAGES
    mkdir -p ./locales/en/LC_MESSAGES
    xgettext -o ./locales/base.pot Traduction.py
    msginit --input=./locales/base.pot --local=fr --output=./locales/fr/LC_MESSAGES/base.po
    msginit --input=./locales/base.pot --local=en --output=./locales/en/LC_MESSAGES/base.po
    msgfmt --output=./locales/fr/LC_MESSAGES/base.mo ./locales/fr/LC_MESSAGES/base.po
    msgfmt --output=./locales/en/LC_MESSAGES/base.mo ./locales/en/LC_MESSAGES/base.po
    python3 Traduction.py
    Le programme est celui référencé dans ce lien.
    J'ai installé le programme poedit pour faciliter les mises à jour.

    Je mets en résolu; merci wiztricks

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/03/2017, 10h54
  2. Réponses: 0
    Dernier message: 04/05/2016, 15h23
  3. Meilleure façon de gèrer les évènements ?
    Par Mohoriss dans le forum Android
    Réponses: 1
    Dernier message: 28/03/2013, 07h10
  4. Réponses: 2
    Dernier message: 01/08/2012, 09h25
  5. Quel est le meilleur SGBD pour gérer les tableaux ?
    Par Gui13 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 18/07/2007, 14h40

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