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 :

Ajouter le multilinguisme à un logiciel existant


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut Ajouter le multilinguisme à un logiciel existant
    Bonjour,

    Mon problème c'est que je dois transformer un logiciel existant (en francais) en une version multilingue. Je ne sais pas vraiment quel méthode utilisé pour en faire un outils multilingue.

    Quel sont généralement les méthodes les plus simples utilisés pour faire ceci ? (stocké tout les mots/phrases dans des fichiers XML ? Dans un tableau en mémoire ? Dans une base de données ?).

    Merci d'avance pour votre aide.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Etape 1 :
    - Chercher toutes les chaînes de caractères existant dans le fichier source, et les déplacer vers une unité unique (j'appelle toujours cette unité ResStrings.pas), comme chaîne de ressource.
    C'est simple à faire : tu affectes un identifiant (="nom de variable") à ta chaîne, comme une constante, mais tu écris "ResourceString" en lieu et place de "Const".
    Exemple :
    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
    32
    33
    34
    unit ResStrings;
     
    interface
     
    Uses Windows ;
     
    Const
         // Eléments indépendants de la langue.
         CRLF = #13#10 ;
     
         // Constantes de langue. Assigné au champ Tag des boutons de sélection de langue.
         lgFrench  = (SUBLANG_FRENCH Shl 10) Or LANG_FRENCH ;
         lgEnglish = (SUBLANG_ENGLISH_UK Shl 10) Or LANG_ENGLISH ;
     
    ResourceString
     
      // Chaînes d'avertissement
      warWarning     = 'Avertissement' ;
      warInfo        = 'Informations' ;
     
      // Erreurs renvoyées par la DLL
      dllAck           = 'Acquittement.' ;
     
      // Chaînes pour l'impression (chaînes de format)
      pmiscVersion     = '%s (daté du %s)' ;
     
      // Exceptions (chaînes de format)
      exfSyntaxError    = 'Erreur de syntaxe, fichier %s, ligne %d : caractère %s manquant à la colonne %d.' ;
     
    implementation
     
    // Aucune implémentation.
     
    end.
    Ceci va donc transformer le projet français en projet toujours français, mais localisable. Vérifie quand même la compilation et le fonctionnement général du programme, on ne sait jamais.

    Etape 2 :
    Utiliser l'unité ReInit.pas de Borland (elle est dispo dans les exemples), et la mettre en place. Ca permet de changer de langue à la demande, et non pas uniquement en fonction de la langue du système d'exploitation.
    Sans cette unité, tu ne pourrais voir l'Espagnol, par exemple, que si tu as un Windows en Espagnol... Ce qui n'est pas forcément le but ! ;-)
    L'exemple donné par Borland est suffisamment parlant.

    Etape 3 :
    Prévoir le système (=les contrôles) pour le changement de langue.
    Conseil : dans le cas d'un menu, par exemple, ou d'un TRadioGroup, laisser uniquement la langue par défaut (le français), et rajouter les autres dynamiquement, à l'exécution, suivant les DLL de ressources trouvées (étape 4). Ceci permet de ne pas avoir à retoucher toutes les DLL de ressources lorsque l'on rajoute une langue, ce qui n'est pas négligeable du tout !!

    Etape 4 :
    Fichier -> Nouveau -> Expert DLL de ressources, choisir la langue cible (anglais, par exemple). Une version particulière du projet va être créée, contenant les DFM (fiches) et les chaînes de ressource (que tu viens de créer).
    Il faut et il suffit de traduire les ressources chaînes, et les champs localisables des DFM (utilise les filtres du concepteur pour "isoler" ces éléments localisables).
    Compiler la DLL de ressources.

    Etape 5 :
    Faire autant de DLL de ressources que de langues.

    Etape 6 :
    Scanner, à l'exécution, les DLL de ressources présentes. C'est simple, elles portent toujours le nom de l'exécutable principal, mais avec une extension différente.
    Dans mon cas, je cherches tous les "Application.*", et j'élimine le .EXE (c'est mon programme), le .INI (paramètres courants) et le .DLL (DLL de communication). Les autres sont forcément des DLL de ressource.

    Est-ce clair ? Je te conseille d'essayer sur une petite appli (truc débile, 3 TEdit sur une form + une form About avec des chaînes en ressources, et des chaînes en Const, bref rien de compliqué), et de la faire en multilingue (au moins 2 langues supplémentaires) de manière à voir les problèmes qui se posent : ainsi, tu ne seras pas pris au dépourvu lorsque tu le feras sur ton application principale.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Et ben ! Merci d'avoir été aussi rapide et précis ! Comme tu me le conseilles je vais essayer sur une petite application exemple. En tout les cas vraiment merci !

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Oui ou plus simple pour commencer :
    1- Gerer l'unitee de ressource comme precise dans le poste precedant.
    2- Creer une dll avec une seulle fonction exportee : "GetString(Code)";
    3- Creer une unitee avec une constante definissant le code de chaques Chaines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Const 
      MAINMENU_FICHIER = 0;
      LABEL1_CAPTION = 1;
    ...
    4- Pour chaques affichage de texte ecrire : "GetString(MAINMENU_FICHIER);" par exemple.

    5- PRecisions sur la fonction mainmenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Begin
    Case Code Of
      MAINMENU_FICHIER = resMainMenu_Fichier;
      LABEL1_CAPTION = resLabel1_Caption;
    ...
    End;
    Voila .....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Clorish
    Oui ou plus simple pour commencer :
    T'appelles ça "plus simple" ?!?
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Ajouter un Node à un XML existant
    Par eagleleader dans le forum VBScript
    Réponses: 3
    Dernier message: 27/05/2008, 17h19
  2. Ajouter un fichier à un projet existant
    Par laurent933 dans le forum Visual C++
    Réponses: 1
    Dernier message: 30/12/2007, 10h16
  3. ajouter élément XML dans fichier existant DOM
    Par Hyst76 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 15/10/2007, 19h27
  4. Réponses: 6
    Dernier message: 05/02/2007, 23h11
  5. Ajout de fonctionnalités à des logiciels existants
    Par ictium dans le forum Windows
    Réponses: 1
    Dernier message: 09/10/2006, 03h57

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