Difference between revisions of "Translations / i18n / localizations for programs/fr"

From Lazarus wiki
(Overview)
m (Text replace - "pascal>" to "syntaxhighlight>")
Line 42: Line 42:
 
Pour chaque fichier .po, vous devez appeler TranslateUnitResourceStrings de l'unité translations de la LCL. Par exemple:
 
Pour chaque fichier .po, vous devez appeler TranslateUnitResourceStrings de l'unité translations de la LCL. Par exemple:
  
<pascal>
+
<syntaxhighlight>
 
     {En premier lieu: ajoutez les unités "gettext" et "translations" à la clause uses}
 
     {En premier lieu: ajoutez les unités "gettext" et "translations" à la clause uses}
 
     procedure TForm1.FormCreate(Sender: TObject);
 
     procedure TForm1.FormCreate(Sender: TObject);
Line 53: Line 53:
 
       MessageDlg('Title', 'Text', mtInformation, [mbOk, mbCancel, mbYes], 0);
 
       MessageDlg('Title', 'Text', mtInformation, [mbOk, mbCancel, mbYes], 0);
 
     end;
 
     end;
</pascal>
+
</syntaxhighlight>
  
  
 
[[Category:Tutorials/fr]]
 
[[Category:Tutorials/fr]]
 
[[Category:Localization/fr]]
 
[[Category:Localization/fr]]

Revision as of 00:51, 25 March 2012

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

Vue d'ensemble

Ceci concerne la façon dont un programme peut utiliser différentes chaînes pour différentes langues comme l'anglais, le chinois, l'allemand, le finois, l'italien, ... . Basiquement cela fonctionne comme ceci : Ajoutez une resourcestring pour chaque caption, compilez pour obtenir le(s) fichier(s) .rst et/ou .po (l'IDE peut le faire automatiquement), créez un fichier traduit .po pour chaque langue (il existe des outils graphiques libres) et utilisez les fonctions de l'unité translations de la LCL pour charger la bonnee au lancement du programme.

Resourcestrings

Par exemple

 resourcestring
   Caption1 = 'Some text';
   HelloWorld1 = 'Hello World';

Elles sont comme des constantes de chaîne normales, ce qui veut dire que vous pouvez leur assigner n'importe quelle chaîne. Par exemple:

 Label1.Caption := HelloWorld1;

Quand FPC la compile, il crée pour chaque unité un fichier unitname.rst contenant les données resourcestring (nom + contenu).

Fichiers .po

Il existe de nombreux outils graphiques libres pour éditer les fichiers .po, qui sont de simples fichiers texte comme les fichiers .rst, mais avec quelques options supplémentaires, comme un header contenant des champs indiquant le nom de l'auteur, le type d'encodage, la langue et la date. Chaque installation de FPC met à dispositionl'outil rstconv (Windows: rstconv.exe). Cet outil peut être utilisé pour convertir un fichier .rst en un fichier .po. L'IDE peut le faire automatiquement. Exemples d'outils libres: kbabel, poedit.

Exemple utilisant directement rstconv:

 rstconv -i unit1.rst -o unit1.po

Traduction

Pour chaque langue, le fichier .po doit être copié et traduit. L'unité translation de la LCL utilise les codes courants des langues(en=anglais, de=allemand, it=italien, ...) pour ses recherches. Par exemple la traduction allemande de unit1.po serait unit1.de.po. Cela signifie copier le fichier unit1.po en unit1.de.po, unit1.it.po, et toute autre langue que vous souhaitez supporter puis les traducteurs pourront éditer leurs fichier .po spécifique.

Note pour les brésiliens/portugais: L'IDE de Lazarus et la LCL possèdent uniquement les traductions du portugais brésilien et ces fichiers ont pour extension 'pb.po' et non 'pt.po'.

Options de l'IDE pour la mise à jour des fichiers .po

  • L'unité contenant les ressources de chaînes doit être ajoutée au package ou au projet.
  • Vous devez définir un chemin pour les .po, ce qui signifie un dossier séparé. Par exemple: créez un sous-dossier language dans le dossier du package/projet. Pour les projets, allez dans Projet > Options du Projet. Pour les packages, allez dans Options > Intégration à l'IDE.

Traduction au début du programme

Pour chaque fichier .po, vous devez appeler TranslateUnitResourceStrings de l'unité translations de la LCL. Par exemple:

    {En premier lieu: ajoutez les unités "gettext" et "translations" à la clause uses}
    procedure TForm1.FormCreate(Sender: TObject);
    var
      PODirectory, Lang, FallbackLang: String;
    begin
      PODirectory := '/path/to/lazarus/lcl/languages/';
      GetLanguageIDs(Lang, FallbackLang); // dans l'unité gettext
      TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang);
      MessageDlg('Title', 'Text', mtInformation, [mbOk, mbCancel, mbYes], 0);
    end;