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

Lazarus Pascal Discussion :

Comment gérer plusieurs langues dans une application ? [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment gérer plusieurs langues dans une application ?
    Bonjour,

    Quels conseils pouvez-vous me donner pour créer une application qui gère plusieurs langues ?

    Existe-t-il des composants qui permettent de simplifier cette tâche ?

    Merci,
    ZiP

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Juste pour alimenter la discussion et faire valoir les solutions qui seront proposées par la suite, voici ma proposition.

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    unit chessmessages;
     
    interface
     
    uses
      chess;
     
    type
      tChessMessages = record
        msg_check: shortstring;
        msg_wtm: shortstring;
        msg_btm: shortstring;
        msg_state: array[tGameState]of shortstring;
        msg_illegal: shortstring;
        msg_end: shortstring;
        msg_loading: shortstring;
      end;
     
    const
      lang_en = 0;
      lang_de = 1;
      lang_fr = 2;
     
    var
      messages: array[lang_en..lang_fr]of tChessMessages;
     
    implementation
     
    begin
      with messages[lang_en] do
      begin
        msg_check := 'Check!';
        msg_wtm := 'White to move.';
        msg_btm := 'Black to move.';
        msg_state[progress] := 'Game in progress';
        msg_state[checkmate] := 'Checkmate';
        msg_state[stalemate] := 'Stalemate';
        msg_state[draw] := 'Draw';
        msg_illegal := 'Illegal move!';
        msg_end := 'Game over. See you soon!';
        msg_loading := 'Loading ...';
      end;
      with messages[lang_de] do
      begin
        msg_check := 'Schach!';
        msg_wtm := 'Wei'#223' am Zug.';
        msg_btm := 'Schwarz am Zug.';
        msg_state[progress] := 'Spiel l'#228'uft';
        msg_state[checkmate] := 'Matt';
        msg_state[stalemate] := 'Patt';
        msg_state[draw] := 'Remis';
        msg_illegal := 'Ung'#252'ltiger Zug!';
        msg_end := 'Ende des Spiels. Auf Wiedersehen!';
        msg_loading := 'Lade ...';
      end;
      with messages[lang_fr] do
      begin
        msg_check := #201'chec !';
        msg_wtm := 'Les blancs ont le trait.';
        msg_btm := 'Les noirs ont le trait.';
        msg_state[progress] := 'Partie en cours';
        msg_state[checkmate] := 'Mat';
        msg_state[stalemate] := 'Pat';
        msg_state[draw] := 'Partie remise';
        msg_illegal := 'Coup ill'#233'gal !';
        msg_end := 'La partie est termin'#233'e. A bient'#244't !';
        msg_loading := 'Chargement...';
      end;
    end.
    Dans le programme principal j'ai une variable globale que je passe dans mon tableau pour obtenir le message dont j'ai besoin, dans telle langue.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(messages[lang].msg_illegal);
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 245
    Points : 534
    Points
    534
    Par défaut
    Bonsoir,

    Voyez l'unité Translations et la procédure TranslateUnitResourceStrings pour traduire les ResourceStrings d'une unité avec les fichier .po. Il doit aussi exister un article dans le wiki de Lazarus.

    André

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 938
    Points : 59 416
    Points
    59 416
    Billets dans le blog
    2
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    Merci pour vos réponses !

    ZiP

  6. #6
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    La méthode canonique est effectivement exposée dans la FAQ comme l'indique Alcatiz, à base de resourcestrings.

    Elle présente, tout comme celle de Roland Chastain, l'inconvénient d'être statique et de nécessiter des outils et des connaissances techniques pour faire ou corriger une traduction, et la diffuser.

    C'est pourquoi j'ai mis au point une autre technique qui lit les traductions dans des fichiers .ini et qui n'a pas ces inconvénients.

    Elle est utilisée notamment par Gestinux, qui comporte des composants qui se traduisent automatiquement. On peut basculer avec une seule touche d'une langue dans une autre et traduire avec un module du logiciel.
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  7. #7
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 384
    Points : 9 751
    Points
    9 751
    Par défaut
    Bonjour,

    Dans la même idée, est-ce que les messages associés aux exceptions de Lazarus existent dans plusieurs langues, si oui comment faire pour qu'elles s'affichent en français, par exemple.

    Sinon, existe-t-il un moyen des traduire (donc avoir une liste) et de les faire s'afficher dans la langue voulue ?

    Merci

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 072
    Points : 15 462
    Points
    15 462
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par tintinux Voir le message
    C'est pourquoi j'ai mis au point une autre technique qui lit les traductions dans des fichiers .ini et qui n'a pas ces inconvénients.

    Elle est utilisée notamment par Gestinux, qui comporte des composants qui se traduisent automatiquement. On peut basculer avec une seule touche d'une langue dans une autre et traduire avec un module du logiciel.
    Je viens de faire un petit essai de cette méthode : ça a bien fonctionné, sauf au départ pour les accents. La solution que j'ai trouvée est de corriger manuellement le fichier INI dans Notepad++, après avoir sélectionné l'option "encodage ANSI". Là le résultat final est bon. Mais lorsque le fichier est créé par l'application, les accents se perdent en cours de route. Il faudra que je regarde dans Gestinux comment tu as traité le problème.

    P.-S. Je joins mon exemple.
    Fichiers attachés Fichiers attachés
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2014, 10h16
  2. Réponses: 3
    Dernier message: 29/05/2007, 16h50
  3. Gérer la langue dans une application
    Par cortex024 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 23/05/2007, 11h34
  4. Comment gérer plusieurs langues ?
    Par InterSQL dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/02/2004, 16h12
  5. Comment gérer plusieurs icones dans son exécutable ?
    Par declencher dans le forum Langage
    Réponses: 5
    Dernier message: 15/10/2003, 10h49

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