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

Delphi Discussion :

[D6] Comment traduire les DFM en plusieurs langues ?


Sujet :

Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut [D6] Comment traduire les DFM en plusieurs langues ?
    On m'a demandé de traduire une de mes applications en anglais.
    J'ai extrait tous les messages de mon code que j'ai placé dans une ressourcestring. Pour ça, pas de problème.

    J'ai duppliqué le projet en deux projets, pour traduire les DFM.
    C'est trop lourd, car si le code est identique, les interfaces sont différentes. A chaque fois, je dois prendre chaque fenêtres pour les traduire.

    Comment faire pour gérer ça de manière SIMPLE ?

    Dans mes recherches, j'ai vu que beaucoup avaient le même problème, mais je n'ai pas vu de solution intéressante. Quand au tutoriel sur l'internationnalisation, a part donner le mode d'emploi d'un outil tiers, il n'explique pas ce qu'il faut faire concrètement.

    Je précise que l'exe doit rester autonome. Il ne faut pas de fichiers annexes (DLL ou autre) contenant des traductions. Tout doit être dans l'exe.

    Quelqu'un saurait-il comment faire ça ?

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 190
    Points : 218
    Points
    218
    Par défaut
    bonjour

    désolé mais je n'ai pas de solution simple

    il y a l'outil de traduction de delphi

    tu garde un seul .pas et les dfm peuvent être traduits en plusieurs langue

    mais ton exe sera tres fortement lié une "dll de traduction" .eng -> la moindre modif dans ton exe -> reconstruction+maj dll ressources sous peine de crash adresse aléatoire + traductions idiotes

    une autre solution

    consiste à tout faire soi même
    faire une fonction de type GetTexteTraduit(cstidentifiantTxt,noLangue):string
    maintenir en // un fichier csv de traduction
    et a revoir toutes les fenêtres ...
    @+

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Citation Envoyé par WolffN
    il y a l'outil de traduction de delphi
    Je n'ai jamais compris comment ca fonctionnait. Ca m'a l'air d'être une usine à gaz.


    Citation Envoyé par WolffN
    tu garde un seul .pas et les dfm peuvent être traduits en plusieurs langue
    mais ton exe sera tres fortement lié une "dll de traduction" .eng -> la moindre modif dans ton exe -> reconstruction+maj dll ressources sous peine de crash adresse aléatoire + traductions idiotes
    Pas assez fiable, donc.


    Citation Envoyé par WolffN
    une autre solution
    consiste à tout faire soi même
    faire une fonction de type GetTexteTraduit(cstidentifiantTxt,noLangue):string
    maintenir en // un fichier csv de traduction
    et a revoir toutes les fenêtres ...
    Cette solution me plait beaucoup plus.


    Je cherchais déjà dans cette direction, sans rien trouver de concret.
    Comment fonctionnerait cette fonction ?
    Je ne vois pas comment m'y prendre.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  4. #4
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Je n'ai pas de solution simple non plus.
    Pour ma part, j'ai établi un système, qui permet de ventiler toute mes fenêtres, d'identifier les différents composants dedans, et de laisser l'utilisateur pouvoir modifier les libellés etc des compos visuels.

    Les traductions sont stockées en DB.

    -> au create de chaque fenêtre, tous les compos sont ventilés, et s'il y a une traduction à mettre, il change le caption (ou autre) des compos.

    -> contrainte, mes ressources de chaine utilisé en interne par prog, sont stockées sous forme d'un compo visuel invisible, afin que ces chaines soient accessibles au module.

    Gros avantage, tout est fait au vol, pas besoin de recompiler ni même de redemarrer l'appli, également, dans le dev. on ne se préoccupe plus du tout des traductions.
    Inconvénient, attention aux changement de Nom des compos -> le module de traduction ne retrouve plus ses petits...
    Autre inconvénients, s'il y a enormément de compos, le temps de ventilation peut ralentir l'ouverture d'une fenêtre (mais avant d'en arriver a un ralentissement significatif, faut remplir ! )
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    J'ai fait un peu pareil que TicTacToe mais avec des fichiers Ini.

    Je scan ma form de tout ses composants et si je trouve une correspondant dans le fichier ini (charger en memoire dans un TStringList), je mets à jour le caption du composant.

    Ca oblige a nommer tous les composants de l'application différemment pour chaque form/frame.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut


    Citation Envoyé par Malatar
    J'ai fait un peu pareil que TicTacToe mais avec des fichiers Ini.
    Je scan ma form de tout ses composants et si je trouve une correspondant dans le fichier ini (charger en memoire dans un TStringList), je mets à jour le caption du composant.
    J'y ai pensé, d'autant que cela permet également de modifier directement le fichier INI pour le dev.
    -> c'est effectivement plus simple si il n'y a pas 15000 fenetres et compos.
    Mais vu le nombre de fenêtre et de compos, pour une question de rapidité, j'ai préféré la DB afin d'obtenir les traduction rapidement (index sur tables)

    Citation Envoyé par Malatar
    Ca oblige a nommer tous les composants de l'application différemment pour chaque form/frame.
    En réalité, j'identifis les compos avec (Form.Name + Compo.Name), pour éviter ce "petit" probleme.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Bon, bin s'il n'y a pas d'autre solution que le fichiers INI, je vais faire comme ça.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Pour ma part, j'ai:
    - un fichier pseudo-XML (sauvegarde d'un clientdataset)
    qui correspond à une table avec un identifiant et une colonne par langue,
    - un paramètre "global" qui me donne la langue
    - dans chaque fenêtre j'ai une fonction Traduire appelé à la création, qui traduit tous les libellés dont j'ai besoin, en fonction de la langue définie.

    Et un outil de pour créer le fichier de traduction (basé sur un clientdataset, donc tout simple).

    ça permet de rajouter des langues sans avoir à recompiler mon application
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Problème "pire"
    Bonjour.
    Je vais devoir traduire une appli aussi en 2 autres langues que le français.
    Pour les DFM vous avez apporté plusieurs solutions.
    En ce qui concerne les showmessage, les inputbox etc... Le seul moyen de faire ça efficacement serait d'utiliser des constantes, n'est il pas?
    Pas d'autre moyen?

  10. #10
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    si tu as résolu ton problème pour les DFM, une solution pourrait consister a mettre tes chaines (les constantes) dans des composants cachés (pas beau mais tu peux intégrer un compos particulier dédié à cela) qui feront partis du DFM ...

    C'est une roue de secours, mais cela permet d'avoir un seul et même moteur de traduction.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/07/2007, 13h05
  2. Réponses: 1
    Dernier message: 14/05/2007, 15h46
  3. Réponses: 2
    Dernier message: 26/04/2007, 19h43
  4. Réponses: 2
    Dernier message: 29/11/2006, 11h52
  5. [VB200]Comment changer les images de plusieurs picturebox
    Par stargates dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/07/2006, 17h05

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