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

Langage Delphi Discussion :

Comment internationalisez-vous vos projets ?


Sujet :

Langage Delphi

  1. #1
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut Comment internationalisez-vous vos projets ?
    Bonjour,

    Je viens de réaliser mon premier programme en Delphi. Je m'intéresse maintenant à la traduction de celui-ci. Quel méthode utilisez vous? Utilisez vous des outils pour cela ou faites vous tout à la main, avec par exemple les chaînes traduites dans un fichier INI ?

    Le problème sur lequel je bute, c'est comment adapter correctement la taille des buttons/labels si la chaine traduite est plus grande que l'originale.

    Merci d'avance,
    Kal

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu peux t'inspirer de ce post de Pascal Jankowski

  3. #3
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Merci pour ta réponse

    Par ailleurs, ceci répond à une partie de ma question. En effet, je ne sais toujours pas comment traduire les boutons/menus/labels en conservant une taille appropriée. Une idée?

    Merci d'avance,
    Kal

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    En effet, je ne sais toujours pas comment traduire les boutons/menus/labels en conservant une taille appropriée. Une idée?
    ... ben, puisque tu crées tes resourcestrings manuellement, par exemple :
    RSTCancel = 'Cancel'; en anglais
    RSTCancel = 'Annuler'; en français
    RSTCancel = 'Annullieren'; en allemand
    tu connais dès la conception la taille maxi à donner à ton bouton.

    A+

  5. #5
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Bonjour,


    ... ben, puisque tu crées tes resourcestrings manuellement
    RSTCancel = 'Cancel'; en anglais
    RSTCancel = 'Annuler'; en français
    RSTCancel = 'Annuler'; en français


    cancel
    annullieren
    Oui mais imagine que la traduction en FR est bien plus grande que l'originale. J'aurai une chaine dont la taille excède la propriété Width de mon boutton, et il n'existe pas de propriété AutoSize sur les TButton... Je sèche!

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bounjour,

    Désolé, un mauvais click m'a fait poster le message inachevé.

    Il suffit de donner dès la conception par exemple d'un bouton la taille maxi parmi 'Cancel', 'Annuler' et 'Annullieren' c'est à dire la taille suffisante pour rentrer 'Annullieren' en allemand.

    A+

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    L'outil intégré à Delphi te permet de définir la taille de tes boutons en fonction de la langue utilisée (entre autre).

  8. #8
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Re-bounjour,
    Il suffit de donner dès la conception par exemple d'un bouton la taille maxi parmi 'Cancel', 'Annuler' et 'Annullieren' c'est à dire la taille suffisante pour rentrer 'Annullieren' en allemand.
    En effet, cela permet de contourner le problème

    Citation Envoyé par sovitec Voir le message
    L'outil intégré à Delphi te permet de définir la taille de tes boutons en fonction de la langue utilisée (entre autre).
    Et elle est ou cette option?

  9. #9
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Bonjour _kal_

    Personnellement j'ai créé une base de données où j'enregistre, dans toutes les langues (que je connais), le texte qui doit apparaître. Chaque ligne de ma table contient
    Le nom de l'unité
    Le type d'objet (TLABEL, TBITBTN, TDBGRID)
    Un identifiant (par exemple Label1 si le texte concerne le label1)
    Le texte dans la langue
    Le code de la langue (FRA = Français, ESP = Espagnol, etc)
    La taille du bouton et ses coordonnées 'Left, Height, Top, Width) si besoin
    La taille de la police pour les textes qui risquent d'être longs

    j'ai prévu à ce jour 9 langues. Seules 6 sont partiellement remplies.

    Chaque fois que l'appli crée une unité, celle-ci appelle un programme traducteur qui fait la conversion en fonction de paramètres propres à l'unité.

    Ce que j'y ai trouvé comme avantage : l'utilisateur final peut par un programme faisant partie de l'appli donner lui-même une traduction (un Italien parle tout de même mieux italien qu'un francais, et pareil pour un polonais, notament pour les termes techniques)

    Si ça t'intéresse ..... les exemples sont disponibles. Comme c'est un peu gros je ne les ai pas mis ici.

  10. #10
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut


    Yep c'est pas mal du tout comme idée! Par ailleurs, mon appli est très légère et je ne peux inclure une BDD avec : l'environnement cible de disposera pas de SGBD.

    J'ai trouvé ceci en googlant : http://delphi.about.com/library/weekly/aa011805a.htm

    C'est pas mal non plus comme solution, mais je pense opté pour la solution proposée par Pascal Jankowski.

    Kal

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    mon appli est très légère
    ... ben dans ce cas pourquoi ne pas utiliser simplement un array de string pour chaque langue (*) ?
    ... en veillant à respecter les correspondances au niveau des indices de sorte que MonTableauAnglais[indice] corresponde à la traduction de MonTableauAllemand[indice] etc.
    ... et tu peux en plus créer des constantes globales du style chaineYes=3 si le 3 est l'indice des chaines 'Oui', 'yes', 'ya'.

    A+

    (*) : PS : ou un seul array avec autant de colonnes que de langues.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par _kal_ Voir le message
    Et elle est ou cette option?
    Euh ? Ce n'est pas une option, c'est par défaut.

    A moins que tu ne parles de la fonction d'internationalisation de Delphi. Dans ce cas il suffit d'aller dans Projet -> Langues -> Ajouter et de créer les ressources pour chaque langue désirée.

  13. #13
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    Re-bonjour,


    ... ben dans ce cas pourquoi ne pas utiliser simplement un array de string pour chaque langue (*) ?
    ... en veillant à respecter les correspondances au niveau des indices de sorte que MonTableauAnglais[indice] corresponde à la traduction de MonTableauAllemand[indice] etc.
    ... et tu peux en plus créer des constantes globales du style chaineYes=3 si le 3 est l'indice des chaines 'Oui', 'yes', 'ya'.

    A+

    (*) : PS : ou un seul array avec autant de colonnes que de langues.
    En effet, puisque mon appli est très légère, je pourrai procédé ainsi. Mais, il y a deux raisons qui me pousse à instaurer un système plus maléable :
    - Je veux pouvoir fournir un fichier txt en anglais aux personnes souhaitant réaliser la traduc, plutot que du code avec des array...
    - Mon appli sera probablement étendu avec le temps, et ce ne sera donc plus un truc tout léger

    Un question HS : pour quoi un {$DEFINE} dans une unité n'est pas répercuté dans une autre?
    Par exemple : {$DEFINE francais} dans le fichier du program ou est appellé le CreateForm n'est pas visible depuis la fiche de ma forme (Unit1.pas par défaut) : francais n'est pas défini.

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    - Je veux pouvoir fournir un fichier txt en anglais aux personnes souhaitant réaliser la traduc, plutot que du code avec des array...
    ... rien n'empêche de créer le fichier txt en anglais à partir du contenu des array
    ... de même que rien n'empêche d'alimenter les array à partir de fichiers txt.

    De toutes façons quelle que soit la démarche adoptée faudra bien stocker les chaines-ressources qq part.

    A+

  15. #15
    Membre habitué Avatar de _kal_
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Points : 156
    Points
    156
    Par défaut
    Bonjour,
    Citation Envoyé par Gilbert Geyer Voir le message
    ... de même que rien n'empêche d'alimenter les array à partir de fichiers txt.
    Hmmm c'est pas bête ça! Donc l'idée serai la suivante :
    Déclarer une énumération pour l'indice des chaines dans l'array
    Déclaray un array de taille [1erEnum..DernierEnum]
    Et dans FormCreate, je rempli mon array en fonction de la langue système...


  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    Juste une remarque supplémentaire : certains utilisateurs on la manie de farfouiller directement dans les fichiers *.txt, une précaution minimale serait de donner aux fichiers concernés une autre extension par exemple *.dat ou *.dll pour les dissuader. Pour ma part j'irai même jusqu'à planquer les données initiales dans une unité de l'appli de façon à permettre à l'utilisateur de restaurer les valeurs initiales définies par le concepteur de l'appli car il peut se tromper lors d'une traduction et la pire des erreurs serait d'affecter une très bonne traduction à un bouton qui déclenche autre chose que la traduction par exemple.

    A+

Discussions similaires

  1. Comment organisez-vous vos projets?
    Par zeavan dans le forum Méthodes
    Réponses: 1
    Dernier message: 01/06/2009, 14h59
  2. Comment gérez vous vos projets JAVA ?
    Par proner dans le forum EDI et Outils pour Java
    Réponses: 2
    Dernier message: 21/03/2007, 16h55
  3. Comment creez vous vos interfaces ?
    Par Regis.C dans le forum EDI et Outils pour Java
    Réponses: 28
    Dernier message: 21/10/2005, 17h47
  4. [MySQL] Comment ecrivez-vous vos traitements batch
    Par ouioui2000 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/10/2005, 16h36
  5. [tomcat][jsp] Comment gerez vous vos connexions bdd?
    Par olive.m dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 21/06/2004, 18h35

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