1. #1
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut Afficher le DBNavigator dans un fichier po

    Bonsoir à tous,

    Le fichier MonProjet.fr.po affiche tous les captions et composants sauf les DBNavigators.
    afin de Franciser les Hints de DBNavigator je les ai modifiés ainsi:

    Premier
    Précédent
    Suivant
    Dernier
    Insérer
    Supprimer
    #Éditer
    Poster
    #Abandonner
    #Rafraîchir

    #text pour un bouton invisible.

    Cependant pour d'autre langues j'ai préféré configurer plutôt le fichier po.

    Des idées?

  2. #2
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 087
    Points : 13 384
    Points
    13 384
    Billets dans le blog
    34

    Par défaut

    Bonjour,

    Pour le DBNavigator, il n'y a pas besoin de traduire les hints qui le sont déjà dans le fichier lazarus.XX.po correspondant à la langue en cours (XX pour la langue, par exemple "fr" pour le français).

    Parmi les tutoriels sur Lazarus, il y en a un sur l'internationalisation des logiciels. Tu pourrais t'en inspirer largement.
    Un conseil : tenir compte du post d'alcatîz (je n'ai pas encore eu le temps de mettre à jour le tutoriel ).

    Cordialement,

    Gilles

    PS : je devrais préciser : pas de traduction nécessaire si le fichier po est à jour...
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonjour à tous,

    @GV

    Je n'ai pas su comment réglé ce problème sauf superposé deux dbnavigators
    le premier conserve les Hints en Français.
    le deuxième ses Hints sont changés en Arabe.

    et que leurs visibilités sont exclusives

  4. #4
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonsoir à tous,

    Les fichiers Projet.xx.po sont reconnus et lus par l'application tandis que les fichiers lclstrconsts.xx.po sont ignorés
    bien que j'ai ajouté une Unit 'Translations' à uses pour localiser ces fichiers.

    En fait ses derniers ne sont lus qu'une seule fois lors de démarrage de l'EDI.

    Donc la bascule d'une langue à l'autre ne serait que partielle ou m'échappe t-il quelques choses?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TAcceuil.Button1Click(Sender: TObject);
    var langpath:ansistring;
    begin
      langpath:=ExtractFilePath(Application.ExeName)+'Languages\' ;
      Translations.TranslateUnitResourceStrings('LCLStrConsts',
    langpath + 'lclstrconsts.ar.po','ar', '');
      lcltranslator.SetDefaultLang('ar');
    end;
    J'ai téléchargé cette démo: http://forum.lazarus.freepascal.org/...0;attach=12001
    mais pour le moment ça n'a pas réglé le problème.

  5. #5
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 087
    Points : 13 384
    Points
    13 384
    Billets dans le blog
    34

    Par défaut

    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TAcceuil.Button1Click(Sender: TObject);
    var langpath:ansistring;
    begin
       //Tout ce qui suit est inutile... car demande un redémarrage de l'application
      // langpath:=ExtractFilePath(Application.ExeName)+'Languages\' ;
      //Translations.TranslateUnitResourceStrings('LCLStrConsts',
      //  langpath + 'lclstrconsts.ar.po','ar', '');
     
      // seule ligne utile !!!
      lcltranslator.SetDefaultLang('ar');
    end;
    Seule la dernière ligne est utile si les fichiers de traduction sont dans le sous-répertoire "languages" de l'application . Il n'y a plus besoin d'une unité spécifique.
    Voici ce qu'a écrit alcatîz à juste titre dans la discussion qui accompagne le tutoriel sur l'internationalisation auquel je renvoie encore :

    Je me permets de rajouter ma petite pierre à l'édifice. Depuis la version 1.2 de Lazarus, il est possible de basculer entre plusieurs langues sans devoir redémarrer l'application, grâce à la procédure SetDefaultLang de l'unité LCLTranslator.

    J'ai testé la chose avec succès et, à condition que les fichiers .po soient présents au bon endroit, l'exécution de SetDefaultLang('xx'); ('xx' pour 'fr', 'de', 'en'...) rafraîchit tous les contrôles et menus dans la langue désirée.
    Le "bon endroit" automatiquement trouvé par Lazarus est le sous-répertoire "languages" de l'application (en fait, il y a plusieurs "bons endroits", mais peu importe ici).

    NB : je ne coderais pas en dur les chemins afin de laisser l'application fonctionner sous Linux par exemple. Pour cela, il faut remplacer les '\' par PathDelim.

    NB2 : as-tu traduit les fichiers lclstrconsts.po et lazaruside.po en arabe ? Je crois qu'ils ne sont pas disponibles dans cette langue et ils seraient sans doute appréciés (en fait, lazarus.ar.po existe, mais il manque 4752 phrases non traduites ).
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  6. #6
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonsoir à tous,

    @GV


    Les fichiers Projet.xx.po sont reconnus et lus par l'application tandis que les fichiers lclstrconsts.xx.po sont ignorés même lclstrconsts.fr.po
    tous mes fichiers po se trouvent dans le dossier :Application/Languages.


    Seule la dernière ligne est utile si les fichiers de traduction sont dans le sous-répertoire "languages" de l'application .
    Il n'y a plus besoin d'une unité spécifique.
    je suis d'accord

    Le "bon endroit" automatiquement trouvé par Lazarus est le sous-répertoire "languages" de l'application
    (en fait, il y a plusieurs "bons endroits", mais peu importe ici).
    ça je le sais.

    NB : je ne coderais pas en dur les chemins afin de laisser l'application fonctionner sous Linux par exemple. Pour cela, il faut remplacer les '\' par PathDelim.
    Bonne remarque.

    NB2 : as-tu traduit les fichiers lclstrconsts.po et lazaruside.po en arabe ? Je crois qu'ils ne sont pas disponibles dans cette langue et ils seraient sans doute appréciés (en fait, lazarus.ar.po existe, mais il manque 4752 phrases non traduites ).
    J'ai pensé déjà d'entamer cette traduction après la résolution de cette question.
    pour le moment J'ai traduit uniquement les 10 Hints du navigator, mais je ne pense pas que c'est la cause car même le fichier lclstrconsts.fr.po est ignoré.

    En fait si on dépose un Navigator sur une fiche et on exécute les Hints sont affichés en Anglais mais si on ouvre ce Hints et
    on déplace un mot parmi les 10 par la barre d'espacement les Hints seront affichés en Francais

    Je reformule ma question: est ce que quelqu'un peut me fournir le code qui transforme les Hints du français vers l'Anglais et inversement
    pendant l'exécution?

    merci

  7. #7
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 420
    Points : 1 836
    Points
    1 836

    Par défaut

    Bonjour.

    Modifier les Hints pendant l'exécution ?

    Le plus simple est d'utiliser un TStringList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SL:= TStringList.Create;
    // français
    SL.AddStrings(['Premier', 'Précédent', 'Suivant', 'Dernier', 'Insérer', 'Supprimer',
                       'Éditer', 'Poster', 'Abandonner', 'Rafraîchir']);
    DBNavigator1.Hints:= SL;
    SL.free;
    Cordialement
    Thierry

  8. #8
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonsoir Thierry

    Voilà une solution votre code a fonctionné convenablement !

    merci

    J'ai généralisé le code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure translat(Nav:TDBNavigator;lg:string) ;
    var SL:TStringList;
    begin
      SL:= TStringList.Create;
    if lg='Fr' then
    SL.AddStrings(['Premier', 'Précédent', 'Suivant', 'Dernier', 'Insérer', 'Supprimer',
                       'Éditer', 'Poster', 'Abandonner', 'Rafraîchir'])
     else if lg='Ar' then
    SL.AddStrings(['اول', 'سابق', 'قادم', 'اخير', 'ضف', 'احدف',
                       'اكتب', 'سجل', 'الغ', 'جدد']);
    Nav.Hints:= SL;
    SL.free;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.TraduireClick(Sender: TObject);
    begin
     Translat(Form1.DBNavigator1,Form1.Edit1.text);
    end;

  9. #9
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonsoir,


    On va traduire maintenant le caption d'un bouton et les Hints de DBNavigator en Français.

    1-On dépose les 2 fichiers po (project1 et lclstrconsts) dans Languages/fr
    et on ajoute DefaultTranslation à use.
    Résultat: Traduction complète (même les Hints sont traduits)

    2-On garde la même configuration et on remplace DefaultTranslation par LCLTranslation
    et on exécute: SetDefaultLang('fr');
    Résultat: Traduction partielle (les Hints sont ignorés)

    3-On dépose les 2 fichiers dans Languages. (uses LCLTranslation)
    Résultat: Aucune traduction.
    renommage de fichier project1 en project1.fr
    Résultat: Traduction partielle (les Hints sont ignorés).

    Any Explanation?

  10. #10
    Responsable Pascal, Delphi et Assembleur


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

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

    Informations forums :
    Inscription : mars 2003
    Messages : 7 354
    Points : 51 496
    Points
    51 496
    Billets dans le blog
    2

    Par défaut

    Bonjour,

    Il ne faut pas remplacer DefaultTranslation par LCLTranslation, les deux unités peuvent être déclarées simultanément.

    Je viens de tester l'internationalisation d'une application avec des hints, tout est correctement traduit lorsque l'on bascule d'une langue à l'autre. Je ne puis malheureusement tester en arabe ni en aucune langue dont le sens d'écriture est inverse, et ne puis donc affirmer que l'inversion automatique du BidiMode des contrôles et des hints est effective.
    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]

  11. #11
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonjour à tous

    @Alcatîz

    je ne sais pas ou ça cloche vraiment mais le seul traducteur fonctionnel est defaulttranslator et le seul fichier lclstrconsts lu

    est celui qui se trouve dans dossier fr donc pas de bascule entre deux langues ( ici fr et es).

    Peut-être seule une petite démo peut éclaircir ça.

  12. #12
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 282
    Points : 570
    Points
    570

    Par défaut

    Bonjour,

    AMHA le BiDiMode lors de passage d'une langue écrite de gauche à droite vers une écrite de droite à gauche est incomplet

    je vous propose un code qui repositionne les controles selon le choix de la langue

    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
    procedure TForm1.BiDiModBClick(Sender: TObject);
    var i:integer;
    begin
      if BiDiModB.Caption='BDR' then       //BiDiRight
      begin
      LoadKeyboardLayout('00000401', KLF_ACTIVATE); // clavier en Arabe 
      Form1.BiDiMode:=bdRightToLeft;
      BiDiModB.Caption:='BDL';           //BiDiLeft
      end
      else
      begin
      LoadKeyboardLayout('0000040c', KLF_ACTIVATE);  //clavier en Français   
      Form1.BiDiMode:=bdLeftToRight;
      BiDiModB.Caption:='BDR';
      end;
      for i:=0 to componentcount-1 do
      begin
      TLabel(Components[i]).Left:=Form1.Width-TLabel(Components[i]).Left-TLabel(Components[i]).Width;
     // TEdit(Components[i]).Left:=Form1.Width-TEdit(Components[i]).Left-TEdit(Components[i]).Width;
     // TButton(Components[i]).Left:=Form1.Width-TButton(Components[i]).Left-TButton(Components[i]).Width;
      end;
    end;

Discussions similaires

  1. Imprimer ce qui a été affiché à l'écran dans un fichier
    Par Yorel2006 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 01/04/2009, 12h20
  2. Réponses: 7
    Dernier message: 24/09/2008, 22h35
  3. Réponses: 3
    Dernier message: 30/07/2007, 15h19
  4. [Bash]:Afficher une boucle dans un fichier ?
    Par byloute dans le forum Linux
    Réponses: 2
    Dernier message: 03/04/2007, 11h12
  5. Réponses: 7
    Dernier message: 23/04/2006, 23h07

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