Difference between revisions of "Getting translation strings right/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(55 intermediate revisions by 7 users not shown)
Line 1: Line 1:
 
{{Getting translation strings right}}
 
{{Getting translation strings right}}
  
This page contains some basic notes on getting translation strings right from the start, from the original writers (e.g. most often programmers) angle.
+
Cette page contient quelques notes sur la manière d'avoir dès le début les chaînes à traduire correctes, à l'usage de leurs auteurs originaux (le plus souvent des programmeurs).
  
"To get it right" in this context means that the translation strings have been prepared properly for easier further translation, and the original version adapted to the basic requirements for using them.
+
Dans ce contexte, cela signifie que les chaînes à traduire ont été prévues pour une traduction facile. et que la version originale est adaptée aux exigences de base pour leur usage.
  
Although it is tried to be as language neutral as possible, there is in fact a slight bias towards English in particular. Feel free to extend or discard the ones which do not apply to your situation (and maybe add them to this page?).
+
Bien que cette page essaie d'être neutre par rapport au langage initial, elle est en fait légèrement orientée vers l'anglais. Vous êtes libre de compléter, ou d'ignorer ce qui ne s'applique pas à votre situation, et éventuellement de mettre à jour la page.
  
=== General ===
+
=== Généralités ===
  
To avoid problems, simply make sure that the '''original strings are okay''' in the first place - there are several reasons to do so:
+
Pour éviter des problèmes, assurez-vous en premier lieu que '''les chaînes originales sont correctes'''. Il y a plusieurs raisons de les vérifier :
* the original strings are usually used as default translation, making a bad impression to the end user who happens to use the default strings.
+
* Les chaînes originales sont habituellement employées comme traduction par défaut, et cela peut donner une mauvaise impression à l'utilisateur final s'il lui arrive de tomber sur des chaînes fautives.
* even worse making the translator's work unnecessarily harder, who is responsible for conveying the original information to another language. Just remember the "Garbage In, Garbage Out" principle which applies perfectly here.
+
* Au pire, cela rendra inutilement difficile le travail du traducteur. Se rappeler le principe "Garbage in, garbage out", qui s'applique parfaitement ici.
So try to make sure that your '''spelling is correct''' - use a dictionary if you are unsure.
+
Essayez donc de vous assurer que votre '''orthographe est correcte'''. Consultez un dictionnaire si vous n'êtes pas sûr de vos compétences en la matière.
  
Use understandable and well-known phrases for a given situation you want to describe, in a '''consistent''' manner. If you are unsure whether something is common, try to put other programs in the same situation and examine their responses. Literature and help files are also often a good resource for the exact special terms or phrases, or style issues.
+
Utilisez des expressions compréhensibles, d'utilisation courante et de manière '''cohérente'''. Si vous avez des doutes, essayez de mettre d'autres programmes dans la même situation et d'examiner leurs réponses. Les fichiers de documentation et d'aide sont souvent un bon modèle pour les expressions ou termes particuliers.
Try to be consistent in choosing phrases too. For example the questions  
+
Essayez d'être cohérent dans le choix des expressions. Par exemple, les questions :
  Delete the file?
+
  Supprimer le dossier ?
  Erase the file?
+
  Effacer le dossier ?
  Remove the file?
+
  Enlever le dossier ?
  Wipe the file?
+
  Retirer le dossier ?
Zap the file?
+
ont toutes une signification semblable, mais si elles sont échangées sans raison apparente, le lecteur peut en faire des interprétations étranges.
all have a somewhat similar meaning, but when used interchangably for no apparent reason the one or other reader may start interpreting weird things into it.
+
Les traducteurs sont particulièrement enclins à cette erreur, puisqu'ils ne connaissent souvent pas le contexte exact d'un message : ils peuvent interpréter de simples variations de vocabulaire comme l'indication de différences importantes, et par conséquent être tentés de choisir une mauvaise traduction.
Especially translators are very prone to this error, since they often do not know the exact context of a particular message (e.g. information about the origin of the message) and may interpret simple word variations as indication of important differences, and will likely be tempted to choose uncommon (bad) translations.
 
  
Especially for error messages to the user: try to '''describe the problem''' itself in appropriate words. This is never the state of the program which led to the error message. This is only useful for the person debugging the program, but not for the user. Users will either simply shrug their shoulders and ignore it in the best case, or choose another program in the worst case because without a proper problem description the user will not be able to fix the problem and continue his work - all that only because the program was not able to give a proper problem description.
+
Particulièrement pour des messages d'erreur destinés à l'utilisateur, essayez de '''décrire le problème''' avec les mots appropriés. Ce n'est jamais l'état du programme qui a mené au message d'erreur (ceci est seulement utile au programmeur, mais pas à l'utilisateur). Sinon, les utilisateurs vont soit hausser les épaules en ignorant les messages (dans le meilleur cas), soit choisir un autre programme (dans le pire des cas) : l'utilisateur ne pourra pas résoudre le problème et continuer son travail, et tout cela parce que le programme n'en aura pas donné une description appropriée.
  
Give (easily) '''understandable descriptions'''. Do not try to impress your audience with foreign or very technical words only for telling that the current work has not yet been saved if not really necessary.
+
Donnez une '''description compréhensible'''. N'essayez pas d'impressionner vos utilisateurs avec des mots étrangers ou très techniques, juste pour dire que le travail en cours n'a pas encore été enregistré.
  
Especially try to avoid multiple negations within a single sentence in your wordings, they are nearly always harder to read than their non-negated counterparts. An example could be
+
Essayez particulièrement d'éviter des négations multiples dans un message : elles sont presque toujours plus difficiles à lire que leurs équivalents positifs. Exemple :
  This component can not be dropped on non-TControls.
+
  Ce composant ne peut pas être déposé sur des contrôles non visuels.
which, in its non-negated form
+
Sous sa forme non-niée :
  This component can only be dropped on TControls.
+
  Ce composant peut seulement être déposé sur des contrôles visuels.
is certainly easier to read and understand.
+
La dernière formulation est sans doute plus facile à lire et à comprendre.
  
=== Technical issues ===
+
=== Questions techniques ===
  
In this section a short overview of technical issues, basically an overview of existing possibilites are given. These include the resourcestring construct, GNU gettext() and the format() function.
+
Dans cette section, nous donnons une vue d'ensemble des questions techniques, tout particulièrement des possibilités existantes. Celles-ci incluent la construction de ''resourcestring'', ''GNU gettext()'' et la fonction ''format()''.
  
==== Resourcestrings, and GNU gettext ====
+
==== Resourcestrings, et GNU gettext ====
  
Free Pascal has some built-in language constructs for providing a way of handling constant strings. There is a special section of a unit called "resourcestring" which was specifically introduced for this reason. See the appropriate section of the FPC manual (prog.pdf, pg. 89ff or [http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009 here]) for the details.
+
Free Pascal dispose de quelques fonctions de langue intégrées de manière à manipuler les chaînes. Il y a une section spéciale d'une unité appelée "resourcestring" qui a été spécifiquement étudiée pour cette raison. Voir la section appropriée du manuel de FPC (prog.pdf, pg. 89ff ou [http://www.freepascal.org/docs-html/prog/progch9.html#x184-1870009 ici ]) pour les détails.
  
GNU gettext is a special set of utilities to provide translations for your programs, see the FPC manual once more (prog.pdf, pg. 91ff or [http://www.freepascal.org/docs-html/prog/progse36.html#x188-1910009.4 here]).  
+
''GNU gettext'' est un ensemble spécial d'utilitaires pour fournir des traductions de vos programmes : voir le manuel de FPC une fois de plus (prog.pdf, pg. 91ff ou [http://www.freepascal.org/docs-html/prog/progse41.html#x210-2130009.4 ici]).  
  
<u>Note:</u> GNU gettext has a conceptual flaw which does not allow mapping of a single original string to multiple translated strings, be aware of that.
+
<u>Note:</u> ''GNU gettext'' a une faille conceptuelle qui ne permet pas de faire correspondre une chaîne originale simple à de multiples chaînes traduites.
  
==== ResourceStrings in the IDE ====
+
==== ResourceStrings dans l'IDE ====
  
* Lazarus has a tool to easily create resourcestrings from string constants. See [[IDE Window: Make ResourceString/fr|Make ResourceString]]
+
* Lazarus a un outil pour créer facilement des chaînes de ressources. Voir [[IDE Window: Make ResourceString/fr|Faire des ResourceStrings]]
  
* For each resourcestring section FPC creates a .rst file, but there are no editor for these files. Lazarus can automatically create .po files of the .rst files. There are a lot of tools to edit .po files (e.g. kbabel).  
+
* Pour chaque section ''resourcestring'', FPC crée un fichier ''.rst'', mais il n'y a aucun éditeur pour ces fichiers. Lazarus peut automatiquement créer un fichier ''.po'' du fichier ''.rst''. Il y a beaucoup d'outils d'édition de fichier ''.po'' (par exemples: kbabel et poEdit).  
To enable creating the .po files for a package do the following:
+
Pour créer les fichiers ''.po'' pour un paquet, opérez ainsi :
   * Create a sub directory 'languages' (or 'locale', or whatever)
+
   * Créez un sous-répertoire ''languages'' (ou ''locale'', ou autre chose) ;
   * Open the package. Then Options -> IDE Integration -> Directory of .po files set to ''languages''
+
   * Ouvrez le composant. Puis Options -> Intégration de l'EDI -> Répertoire des fichiers ''.po'' que vous fixerez à ''languages'' (ou tout répertoire adapté).
The next time you compile the package, the IDE will create the .po files. Note: The .rst files must belong to package units. Otherwise the IDE ignores foreign .rst files.
+
La prochaine fois que vous compilerez le paquet, l'EDI créera les fichiers ''.po''. Note: Les fichiers ''.rst'' doivent appartenir aux unités de paquet. Sinon, l'EDI ignore les autres fichiers .rst.  
  
The same works for projects. The directory is set in Project -> Project Options -> IDE Integration -> Directory of .po files.
+
Le même fonctionnement pour des projets. Le répertoire est placé dans projet -> Options du Projet -> i18n -> Répertoire des fichiers .po.
 +
* Pour créer une traduction allemande : copier le fichier unit1.po vers unit1.de.po. Employer alors un éditeur de texte ou un éditeur de fichier .po pour traduire toutes les chaînes.
  
* To create a german translation: copy the unit1.po file to unit1.de.po. Then use a text editor or a .po Editor to translate all strings.
+
* L'IDE chargera automatiquement des fichiers .po pour les composants installés, s'ils existe. Par exemple voir  lazarus/components/projecttemplates/languages/.
  
* The IDE will automatically load .po files for installed packages, if they exists. For example see lazarus/components/projecttemplates/languages/.
+
* ToDo: Implémenter et documenter la mise à jour du fichier .po traduit quand de nouvelle resourcestrings sont ajoutés .
  
* ToDo: Implement and document updating the translated .po files when new resourcestrings are added.
+
* ToDo: Implémenter et documenter rassemblement de tous les fichiers .po des paquets statiquement liés .
 +
==== ResourceStrings dans votre application ====
  
* ToDo: Implement and document collecting all .po files of statically linked packages.
+
Vous pouvez charger les fichiers .po à l'initialisation pour traduire les resourcestrings. Ajoutez ceci à votre fichier .lpr:
  
==== The format() function ====
+
<syntaxhighlight lang=pascal>
 +
...
 +
uses
 +
  ...
 +
  Translations, gettext;
  
To not only allow completely static strings in translations, you can use the [[doc:rtl/sysutils/format.html|format()]] method of the sysutils unit. It is able to replace placeholders within a given text by their actual value given as secondary parameter in a set. Example:
+
procedure TranslateLCL;
format('Tomorrow on %0:s there will be %1:s.', ['Sunday', 'sunshine']);
+
var
returns
+
  PODirectory, Lang, FallbackLang: String;
Tomorrow on Sunday there will be sunshine.
+
begin
In this case the %0:s is a placeholder for the first (index 0) argument in the set of actual values (Sunshine), and likewise %1:s.
+
  PODirectory:='/path/to/lazarus/lcl/languages/';
For an exact definition of the allowed placeholders and their syntax see the FPC reference manual.
+
  Lang:='';
 +
  FallbackLang:='';
 +
  GetLanguageIDs(Lang,FallbackLang); // in unit gettext
 +
  Translations.TranslateUnitResourceStrings('LCLStrConsts',
 +
                      PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
 +
  // ... add here a TranslateUnitResourceStrings call for every po file ...
 +
end;
  
Some guidelines for the usage of the format() function
+
begin
 +
  TranslateLCL;
 +
  Application.Initialize;
 +
  Application.CreateForm(TForm1, Form1);
 +
  Application.Run;
 +
end.
 +
</syntaxhighlight>
  
* Try to use indexed placeholders in the original strings, even if they are optional. When used, they allow the translator to move the arguments easily within the sentence allowing him more natural expressions (and actually sometimes moving sentence parts is required to create proper sentences in that language).
+
==== La fonction format() ====
  
* Never compose a sentence out of more than one string. Always use the format() method from the sysutils unit to construct the correct string using placeholders during runtime. Translators will usually not be able to reconstruct the whole sentence, therefore not able to give a good translation; only consider that there are often hundreds of such strings within a single translation database...
+
Pour ne pas utiliser des chaînes complètement statiques dans les traductions, vous pouvez employer la méthode [[doc:rtl/sysutils/format.html|format()]] dans l'unité sysutils. Il peut remplacer des paramètres donnés dans un texte par leur valeur réelle donnée comme paramètre secondaire dans un ensemble. Exemple:
  
* Do not format using whitespaces. Simply move your label to the appropriate position in the first place. There may be problems with font changes, and seemingly superfluous spaces will be in danger of being trimmed by the translator.
+
<syntaxhighlight lang=pascal>
 +
format('Demain %0:s il y aura du %1:s.', ['dimanche', 'soleil']);
 +
</syntaxhighlight>
  
<strike><u>Note:</u> Since format() does not interpret escaped control characters (e.g. like C's "\n", "\t", etc) and GNU gettext for any reason being the translation system of choice (and the tools based on it not being able to interpret non-escaped control characters), it is required to programmatically insert linebreaks.</strike>In the current lazarus version, "\n" and "\t" in translated strings are replaced by newline and tab.
+
restituant Demain dimanche il y aura du soleil.
 +
Dans ce cas-ci %0:s est un paramètre pour le premier (index 0) argument dans l'ensemble de valeurs réelles (Soleil), et de même %1:s.
 +
Pour une définition exacte des paramètres permis et leur syntaxe voir le manuel de référence de FPC.
  
==== Converting the translation into the right character set ====
+
Quelques directives pour l'utilisation de la fonction format()
  
For example: converting a file from ISO-8859-1 to UTF-8:
+
* Essayer d'employer des paramètres classés dans les chaînes originales, même si ils sont facultatifs. Une fois utilisé, ils permettent au traducteur de déplacer les paramètres facilement dans la phrase lui permettant des expressions plus normales(en déplaçant réellement les paramètres  dans la phrase vous pouvez créer des phrases appropriées dans cette langue).
  
  iconv --from-code=ISO-8859-1 --to-code=UTF-8 oldfile.po > newfile.po
+
* Ne jamais composer une phrase de plus d'une chaine. Employer toujours la méthode format() à partir de l'unité sysutils pour construire la chaine correcte en utilisant des paramètres pendant le temps d'exécution. Les traducteurs ne pourront habituellement pas reconstruire la phrase entière, donc incapable de donner une bonne traduction; considérer seulement qu'il y a souvent des centaines de chaînes dans une base de données de traduction...
  
Do not forget to change the line
+
* Ne pas composer en utilisant des espaces. Déplacer simplement votre Label à la position appropriée en premier lieu. Il peut y avoir des problèmes avec des changements de police, et les espaces apparemment superflus seront difficile à équilibré par le traducteur.
 +
 
 +
<strike><u>Note:</u> Puisque format() n'interprète pas les caractères d'échappements (par exemple C's "\n", "\t", etc) et GNU gettext pour toute ses raisons étant le système de traduction de choix (et ses outils ne pouvant pas interpréter non plus les caractères d'échappements), on exige aux programmeurs d'insérer les coupures de ligne.</strike>Dans la version courante de Lazarus, "\n" et "\t" dans les chaines traduites sont remplacés par le caractère nouvelle ligne et tabulation.
 +
 
 +
==== Convertir le jeu de caractères d'une traduction ====
 +
 
 +
Par exemple : convertir un fichier de ISO-8859-1 à UTF-8:
 +
 
 +
  iconv --from-code=ISO-8859-1 --to-code=UTF-8 ancienfichier.po > nouveaufichier.po
 +
 
 +
Ne pas oublier de changer la ligne
 
   "Content-Type: text/plain; charset=ISO-8859-1\n"
 
   "Content-Type: text/plain; charset=ISO-8859-1\n"
to
+
par
 
   "Content-Type: text/plain; charset=UTF8\n"
 
   "Content-Type: text/plain; charset=UTF8\n"
  
=== English related ===
+
=== Particularités liées à l'anglais ===
 +
 
 +
Cette section contient les notes qui s'appliquent en particulier quand l'anglais est la langue originale :
 +
 
 +
* Veillez à réserver assez d'espace pour les textes : en anglais les textes sont presque toujours plus courts (en caractères) que leurs traductions. Prévoyez donc assez d'espace. L'expérience prouve que les chaînes très courtes (quelques caractères) doublent souvent de taille; ce rapport diminue pour les chaînes plus longues.
  
This section contains notes which particularly apply when using English as the base language for translations.
+
* Évitez les abréviations en anglais; en plus du fait que ceci raccourcit encore des chaînes déjà courtes, il y a des problèmes graves avec, par exemple, les langues qui emploient les caractères idéographiques, où ces abréviations n'existent pas.
  
* Make sure to reserve enough space where the text is output: English is a language in which texts are almost always shorter (in characters) than their respective translations, so plan ahead by reserving enough space. Experience shows that very short strings of a few characters length often almost double in size; this difference decreases as the strings get longer.
+
* Puisque c'est souvent une question : Dans les signes de ponctuation anglaise (point, virgule, ...) font partie des mots précédents. Particulièrement après un point-virgule il devrait toujours y avoir un espace. La lecture est plus difficile quand la ponctuation est erronée.
  
* Avoid abbreviations in English; in addition to the fact that this shortens the already short strings even more, there are severe problems with e.g. languages that use ideographic characters where these abbreviations simply do not exist at all.
+
There was an error!Please check file settings,compiler settings,...to fix this issue.
 +
Considérez aussi que les algorithmes prévus pour couper les lignes trop longue provoqueront probablement une coupure arbitraire s'il n'y a pas d'espaces.
  
* Since this is often an issue: In English punctuation marks (full stop, comma, ...) are part of the previous words, or form some sort of words themselves if there is no previous word (in case of an enumeration). Especially after a semicolon there should always be a trailing space.
 
There was an error ! Please check file settings , compiler settings,... to fix this issue.
 
has horrible punctuation and therefore simply looks bad and is harder to read than usual. Consider that common line break algorithms break the line on whitespaces, possibly resulting in a single stop at the beginning of a line...
 
 
  There was an error! Please check file settings, compiler settings, ... to fix this issue.
 
  There was an error! Please check file settings, compiler settings, ... to fix this issue.
would probably be okay only considering punctuation.
+
Avec des espaces le résultat sera meilleur.

Latest revision as of 12:26, 16 February 2020

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) русский (ru)

Cette page contient quelques notes sur la manière d'avoir dès le début les chaînes à traduire correctes, à l'usage de leurs auteurs originaux (le plus souvent des programmeurs).

Dans ce contexte, cela signifie que les chaînes à traduire ont été prévues pour une traduction facile. et que la version originale est adaptée aux exigences de base pour leur usage.

Bien que cette page essaie d'être neutre par rapport au langage initial, elle est en fait légèrement orientée vers l'anglais. Vous êtes libre de compléter, ou d'ignorer ce qui ne s'applique pas à votre situation, et éventuellement de mettre à jour la page.

Généralités

Pour éviter des problèmes, assurez-vous en premier lieu que les chaînes originales sont correctes. Il y a plusieurs raisons de les vérifier :

  • Les chaînes originales sont habituellement employées comme traduction par défaut, et cela peut donner une mauvaise impression à l'utilisateur final s'il lui arrive de tomber sur des chaînes fautives.
  • Au pire, cela rendra inutilement difficile le travail du traducteur. Se rappeler le principe "Garbage in, garbage out", qui s'applique parfaitement ici.

Essayez donc de vous assurer que votre orthographe est correcte. Consultez un dictionnaire si vous n'êtes pas sûr de vos compétences en la matière.

Utilisez des expressions compréhensibles, d'utilisation courante et de manière cohérente. Si vous avez des doutes, essayez de mettre d'autres programmes dans la même situation et d'examiner leurs réponses. Les fichiers de documentation et d'aide sont souvent un bon modèle pour les expressions ou termes particuliers. Essayez d'être cohérent dans le choix des expressions. Par exemple, les questions :

Supprimer le dossier ?
Effacer le dossier ?
Enlever le dossier ?
Retirer le dossier ?

ont toutes une signification semblable, mais si elles sont échangées sans raison apparente, le lecteur peut en faire des interprétations étranges. Les traducteurs sont particulièrement enclins à cette erreur, puisqu'ils ne connaissent souvent pas le contexte exact d'un message : ils peuvent interpréter de simples variations de vocabulaire comme l'indication de différences importantes, et par conséquent être tentés de choisir une mauvaise traduction.

Particulièrement pour des messages d'erreur destinés à l'utilisateur, essayez de décrire le problème avec les mots appropriés. Ce n'est jamais l'état du programme qui a mené au message d'erreur (ceci est seulement utile au programmeur, mais pas à l'utilisateur). Sinon, les utilisateurs vont soit hausser les épaules en ignorant les messages (dans le meilleur cas), soit choisir un autre programme (dans le pire des cas) : l'utilisateur ne pourra pas résoudre le problème et continuer son travail, et tout cela parce que le programme n'en aura pas donné une description appropriée.

Donnez une description compréhensible. N'essayez pas d'impressionner vos utilisateurs avec des mots étrangers ou très techniques, juste pour dire que le travail en cours n'a pas encore été enregistré.

Essayez particulièrement d'éviter des négations multiples dans un message : elles sont presque toujours plus difficiles à lire que leurs équivalents positifs. Exemple :

Ce composant ne peut pas être déposé sur des contrôles non visuels.

Sous sa forme non-niée :

Ce composant peut seulement être déposé sur des contrôles visuels.

La dernière formulation est sans doute plus facile à lire et à comprendre.

Questions techniques

Dans cette section, nous donnons une vue d'ensemble des questions techniques, tout particulièrement des possibilités existantes. Celles-ci incluent la construction de resourcestring, GNU gettext() et la fonction format().

Resourcestrings, et GNU gettext

Free Pascal dispose de quelques fonctions de langue intégrées de manière à manipuler les chaînes. Il y a une section spéciale d'une unité appelée "resourcestring" qui a été spécifiquement étudiée pour cette raison. Voir la section appropriée du manuel de FPC (prog.pdf, pg. 89ff ou ici ) pour les détails.

GNU gettext est un ensemble spécial d'utilitaires pour fournir des traductions de vos programmes : voir le manuel de FPC une fois de plus (prog.pdf, pg. 91ff ou ici).

Note: GNU gettext a une faille conceptuelle qui ne permet pas de faire correspondre une chaîne originale simple à de multiples chaînes traduites.

ResourceStrings dans l'IDE

  • Pour chaque section resourcestring, FPC crée un fichier .rst, mais il n'y a aucun éditeur pour ces fichiers. Lazarus peut automatiquement créer un fichier .po du fichier .rst. Il y a beaucoup d'outils d'édition de fichier .po (par exemples: kbabel et poEdit).

Pour créer les fichiers .po pour un paquet, opérez ainsi :

 * Créez un sous-répertoire languages (ou locale, ou autre chose) ;
 * Ouvrez le composant. Puis Options -> Intégration de l'EDI -> Répertoire des fichiers .po que vous fixerez à languages (ou tout répertoire adapté).

La prochaine fois que vous compilerez le paquet, l'EDI créera les fichiers .po. Note: Les fichiers .rst doivent appartenir aux unités de paquet. Sinon, l'EDI ignore les autres fichiers .rst.

Le même fonctionnement pour des projets. Le répertoire est placé dans projet -> Options du Projet -> i18n -> Répertoire des fichiers .po.

  • Pour créer une traduction allemande : copier le fichier unit1.po vers unit1.de.po. Employer alors un éditeur de texte ou un éditeur de fichier .po pour traduire toutes les chaînes.
  • L'IDE chargera automatiquement des fichiers .po pour les composants installés, s'ils existe. Par exemple voir lazarus/components/projecttemplates/languages/.
  • ToDo: Implémenter et documenter la mise à jour du fichier .po traduit quand de nouvelle resourcestrings sont ajoutés .
  • ToDo: Implémenter et documenter rassemblement de tous les fichiers .po des paquets statiquement liés .

ResourceStrings dans votre application

Vous pouvez charger les fichiers .po à l'initialisation pour traduire les resourcestrings. Ajoutez ceci à votre fichier .lpr:

...
uses
  ...
  Translations, gettext;

procedure TranslateLCL;
var
  PODirectory, Lang, FallbackLang: String;
begin
  PODirectory:='/path/to/lazarus/lcl/languages/';
  Lang:='';
  FallbackLang:='';
  GetLanguageIDs(Lang,FallbackLang); // in unit gettext
  Translations.TranslateUnitResourceStrings('LCLStrConsts',
                      PODirectory+'lclstrconsts.%s.po',Lang,FallbackLang);
  // ... add here a TranslateUnitResourceStrings call for every po file ...
end;

begin
  TranslateLCL;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

La fonction format()

Pour ne pas utiliser des chaînes complètement statiques dans les traductions, vous pouvez employer la méthode format() dans l'unité sysutils. Il peut remplacer des paramètres donnés dans un texte par leur valeur réelle donnée comme paramètre secondaire dans un ensemble. Exemple:

 format('Demain %0:s il y aura du %1:s.', ['dimanche', 'soleil']);

restituant Demain dimanche il y aura du soleil. Dans ce cas-ci %0:s est un paramètre pour le premier (index 0) argument dans l'ensemble de valeurs réelles (Soleil), et de même %1:s. Pour une définition exacte des paramètres permis et leur syntaxe voir le manuel de référence de FPC.

Quelques directives pour l'utilisation de la fonction format()

  • Essayer d'employer des paramètres classés dans les chaînes originales, même si ils sont facultatifs. Une fois utilisé, ils permettent au traducteur de déplacer les paramètres facilement dans la phrase lui permettant des expressions plus normales(en déplaçant réellement les paramètres dans la phrase vous pouvez créer des phrases appropriées dans cette langue).
  • Ne jamais composer une phrase de plus d'une chaine. Employer toujours la méthode format() à partir de l'unité sysutils pour construire la chaine correcte en utilisant des paramètres pendant le temps d'exécution. Les traducteurs ne pourront habituellement pas reconstruire la phrase entière, donc incapable de donner une bonne traduction; considérer seulement qu'il y a souvent des centaines de chaînes dans une base de données de traduction...
  • Ne pas composer en utilisant des espaces. Déplacer simplement votre Label à la position appropriée en premier lieu. Il peut y avoir des problèmes avec des changements de police, et les espaces apparemment superflus seront difficile à équilibré par le traducteur.

Note: Puisque format() n'interprète pas les caractères d'échappements (par exemple C's "\n", "\t", etc) et GNU gettext pour toute ses raisons étant le système de traduction de choix (et ses outils ne pouvant pas interpréter non plus les caractères d'échappements), on exige aux programmeurs d'insérer les coupures de ligne.Dans la version courante de Lazarus, "\n" et "\t" dans les chaines traduites sont remplacés par le caractère nouvelle ligne et tabulation.

Convertir le jeu de caractères d'une traduction

Par exemple : convertir un fichier de ISO-8859-1 à UTF-8:

 iconv --from-code=ISO-8859-1 --to-code=UTF-8 ancienfichier.po > nouveaufichier.po

Ne pas oublier de changer la ligne

 "Content-Type: text/plain; charset=ISO-8859-1\n"

par

 "Content-Type: text/plain; charset=UTF8\n"

Particularités liées à l'anglais

Cette section contient les notes qui s'appliquent en particulier quand l'anglais est la langue originale :

  • Veillez à réserver assez d'espace pour les textes : en anglais les textes sont presque toujours plus courts (en caractères) que leurs traductions. Prévoyez donc assez d'espace. L'expérience prouve que les chaînes très courtes (quelques caractères) doublent souvent de taille; ce rapport diminue pour les chaînes plus longues.
  • Évitez les abréviations en anglais; en plus du fait que ceci raccourcit encore des chaînes déjà courtes, il y a des problèmes graves avec, par exemple, les langues qui emploient les caractères idéographiques, où ces abréviations n'existent pas.
  • Puisque c'est souvent une question : Dans les signes de ponctuation anglaise (point, virgule, ...) font partie des mots précédents. Particulièrement après un point-virgule il devrait toujours y avoir un espace. La lecture est plus difficile quand la ponctuation est erronée.
There was an error!Please check file settings,compiler settings,...to fix this issue.

Considérez aussi que les algorithmes prévus pour couper les lignes trop longue provoqueront probablement une coupure arbitraire s'il n'y a pas d'espaces.

There was an error! Please check file settings, compiler settings, ... to fix this issue.

Avec des espaces le résultat sera meilleur.