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

Qt Discussion :

Traduire éléments de l'interface et données, est-ce possible ?


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Traduire éléments de l'interface et données, est-ce possible ?
    Salut tout le monde, je désire introduire dans mon application un menu Langue qui change la langue courante utlisée par celle choisie. Pour tout ce qui élément de l'interface ou messages utilisateur, il n'y a pas de problème puisque je vais utliser QtLinguist. Mais y a t-il un moyen de trduire aussi les données ? Sachant que je dispose des mêmes sous les différentes langues dans ma base, est ce quelqu'un pourrait me donner la méthode pour traduire aussi les données avec les éléments de l'interface.
    Merci de votre aide.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    A mon avis tu devra le faire "à la main"

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Tes donnes sont dans une base de donnees? Il faut que tu te debrouilles pour generer toi meme un fichier xml pour Linguist relatifs a ces donnes la, et alors, tu pourras surement te baser sur la machinerie Qt.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par Aurelien.Regat-Barrel Voir le message
    Tes donnes sont dans une base de donnees? Il faut que tu te debrouilles pour generer toi meme un fichier xml pour Linguist relatifs a ces donnes la, et alors, tu pourras surement te baser sur la machinerie Qt.
    C'est bizzare de connaitre les mot qui seront utilisé par une base de donnée, non?
    Mais comme il as la traduction dans sa base, il serait peut être mieux qu'il l'utilise avec un rechargement peut être

  5. #5
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Merci bien de vos réponse,j'ai pensé dejà à une solution qui consiste à stocker les requêtes exécutées par l'utlisateur pendant toute son utilisation de l'application et lorsque il décide de changer la langue en cour d'exécution de l'application, je ré-exécute ces requêtes avec comme paramètre la langue choisie mais elle semble trés lente cette soltution.
    Donc pour vous eclaircir encore, mon pb c'est la possibilité de traduire les données en même temps que les messages et les libellés de l'interface et ce même lorsque l'application est en cours d'utilisation.
    Cordialement

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    En fait je n'ai toujours pas compris de quelles "donnees" tu parles. Peux-tu detailler un minimum stp?

  7. #7
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    Ce sont mes données stockées dans la base de données. Plus précisément :
    1-L'utilisateur ouvre l'application avec sa langue par défaut qu'il choisit
    2-Aprés utlisation de l'application c'est à dire exécution de requêtes SQL pour afficher les données qu'il veut voir, il décide de changer la langue.
    3-A ce stade, je pourrais traduire et les libellés contenus dans la fenêtres et les messages qui vont apparaitre.
    4-Mon problème c'est de savoir si je pourrait charger les données qui sont déjà affichées avec la langue initiale avec la nouvelle langue choisie.
    Est ce que en utitlisant QtLinguist je pourrait effectuer cette opération sachant que je dispose de toutes les mêmes données traduites dans les différentes langues.
    J'espère que c'est plus clair maintenant. Merci de votre collaboration.

  8. #8
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Non, ça ne dit pas d'où sortent les données qui sont dans la base. Et de toute façon, si c'est dans la base, faudra le traduire à la mano et gérer toi même le stockage de ces multiples traductions.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    On pourrait envisager de stocker dans la base la traduction des donnees au format xml linguist compile (.qm) et les charger depuis l'application dans un QTranslator?

  10. #10
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Nop, QTranslator s'occupera des chaînes qui sont dans tr("..."). Pas des chaînes qui sont dans des variables; forcément ça tique pour la DB

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Qu'est-ce qui empeche de passer une variable a tr()? Ou de passer par qApp->translate() ?
    http://qt.developpez.com/doc/latest/...TRANSLATE_NOOP

  12. #12
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Le fait que la chaîne ne soit pas connue à la compilation. Ou alors je n'ai pas compris quelque chose à l'internationalisation avec Qt...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut traductions.
    Moi je dis , tu est un gros veinard (ou tu as déja bien travaillé)
    Tu as un programme avec des messages déja traduit dans une base de donnée.
    Des designations écrans traduites.

    Tu désires juste pouvoir traduire dynamiquement tes écrans.
    Dis à l'utilisateur , change de langue, ferme le prog et redémarre.
    C'est déja du caviar pour lui.

    Personnellement , quand je programme , c'est en fancais.
    Qd un prog doit être internationalisé , j'en ai pas pour longtemps (y'a une methode qui marche toujours : environ 150 messages à l'heure) , ne reste plus qu'a faire traduire.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut j'ai mal lu
    Tu as trouvé la réponse.
    Remplace simplement "toto" par mess_traduit(num_fenetre+i,"toto")
    ou i est un numero que tu fixes.
    Fabrique la bonne fonction ..qui depend du numero de message,du programme.
    Par defaut, ta fonction doit renvoyer le message d'origine ("toto")
    Dans le cas ou tu as la traduction, qu'elle renvoie le message traduit.
    Dans le cas ou ce message est nouveau (n'existe pas dans la base), qu'elle stocke ce message avec la langue 0 (francais) et la langue usuelle (polonais).
    Fais la transaction qui confronte les 2 messages et permet de mettre a jour le message etranger qui est initialement en francais

    Pour info... sur les messages etrangers ..Ajoute le numero de message en fin..Le traducteur saura quel message lui est apparu. Si il connait le prog, il saura ce qu'il doit mettre la.
    Fais une option sans apparition du n° de message pour les designations variable ecran.

    Derniere chose, pour des raisons de simplicité , ajoute le n° de fenetre ds ton numero de message : i=num_fen+10 ou i vaut 1000,1100 ...
    Pour terminer, ajoute le nom du prog ds ta recherche...que 2 prog n'utilisent pas les meme messages.
    Cout total (25 seconde par message+1 ou 2 jours pour la transaction qui modifies les messages).

  15. #15
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par IrmatDen Voir le message
    Le fait que la chaîne ne soit pas connue à la compilation. Ou alors je n'ai pas compris quelque chose à l'internationalisation avec Qt...
    ben c'est independant de la compilation. C'est lupdate qui va parser le code et extraire les chaines a traduire. Puis une fois que c'est traduit hop tu compiles le .ts via lrelease, charge le resultat dans un QTranslator et l'active via QCoreApplication::installTranslator().
    A partir de la, la machinerie Qt va regarder dans ton translator s'il ne contient pas des chaines traduites. Pour cela il se base sur un contexte, que lui file tr(). Mais la macro QT_TR_NOOP() fait pareil, et tu peux aussi le creer a la main ce contexte via QT_TRANSLATE_NOOP().
    http://qt.developpez.com/doc/latest/...translate-noop

  16. #16
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Justement... Comment imagines-tu t'en servir avec une ressource externe et des chaînes inconnues à la compilation?
    Parce que je ne comprends pas du tout la même chose que toi de la doc:
    If you need to have translatable text completely outside a function, there are two macros to help: QT_TR_NOOP() and QT_TRANSLATE_NOOP(). These macros merely mark the text for extraction by lupdate.

  17. #17
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Il "suffit" qu'il genere lui meme comme il le peut un fichier .ts pour ses donnees, ce que fait lupdate pour toi sans effort. Si tu arrives a generer ce fichier .ts, ben tu peux le traduire, le compiler et l'ajouter a la liste des translator. Ca devrait te permettre d'ecrire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString s = getMsgFromDataBase();
    qApp->translate("DataBaseMsg", s);
    et meme, normalement simplement avoir une classe DataBaseMsg devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QString s = getMsgFromDataBase();
    DataBaseMsg::tr(s);

  18. #18
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Ok, approche intéressante

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2011, 18h06
  2. Réponses: 4
    Dernier message: 16/04/2005, 16h54
  3. Est-il possible d'exporter les données?
    Par frutix dans le forum Débuter
    Réponses: 8
    Dernier message: 21/06/2004, 10h27
  4. est il possible de faire un trie sur un paramètre donné
    Par chtiboss dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 17/03/2004, 11h51
  5. Réponses: 5
    Dernier message: 28/10/2003, 15h01

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