Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes |
fr:howtos:misc:internationalization_and_localization_of_shell_scripts [2015/10/01 20:04 (UTC)] – [Recommandations pratiques aux développeurs et aux mainteneurs] pierreaverseng | fr:howtos:misc:internationalization_and_localization_of_shell_scripts [2015/12/01 19:04 (UTC)] – [Sources] pierreaverseng |
---|
<note warning>En cours de traduction (pierreaverseng)</note> | |
=====Internationalisation et localisation des shell-scripts===== | =====Internationalisation et localisation des shell-scripts===== |
| |
Le document de référence est le manuel intitulé [[http://www.gnu.org/software/gettext/manual/gettext.html|GNU 'gettext' utilities]]. | Le document de référence est le manuel intitulé [[http://www.gnu.org/software/gettext/manual/gettext.html|GNU 'gettext' utilities]]. |
| |
Le manuel envisage tous les langages de programmation qui peuvent être employés avec gettext, en faisant principalement référence au langage C. | Le manuel envisage tous les langages de programmation qui peuvent être employés avec gettext, et fait principalement référence au langage C. |
| |
Voir [[http://pubs.opengroup.org/onlinepubs/009695399/nframe.html|POSIX specification]] qu'il est recommandé de lire, en particulier les volumes [[http://pubs.opengroup.org/onlinepubs/009695399/basedefs/contents.html|Base Definitions]] et [[http://pubs.opengroup.org/onlinepubs/009695399/utilities/contents.html|Shell and Utilities]]. | Voir [[http://pubs.opengroup.org/onlinepubs/009695399/nframe.html|POSIX specification]] qu'il est recommandé de lire, en particulier les volumes [[http://pubs.opengroup.org/onlinepubs/009695399/basedefs/contents.html|Base Definitions]] et [[http://pubs.opengroup.org/onlinepubs/009695399/utilities/contents.html|Shell and Utilities]]. |
* Que la chaîne msgstr commence et finisse par 'newline' ou non, à l'dentique de msgid. | * Que la chaîne msgstr commence et finisse par 'newline' ou non, à l'dentique de msgid. |
* Que dans le cas où la chaîne de texte contient un paramètre d'expansion, eval_gettext soit employé à la place de gettext. | * Que dans le cas où la chaîne de texte contient un paramètre d'expansion, eval_gettext soit employé à la place de gettext. |
* "The variable names must consist solely of alphanumeric or underscore ASCII characters, not start with a digit and be nonempty; otherwise such a variable reference is ignored." (nous rappelle le manuel de gettext): Les noms de variables ne doivent comporter uniquement que des caractères alphanumériques ou le tiret bas, ne peuvent pas commencer par un chiffre ni être une chaîne vide; sinon la référence à la variable (son nom) est ignorée. | * "The variable names must consist solely of alphanumeric or underscore ASCII characters, not start with a digit and be nonempty; otherwise such a variable reference is ignored." (nous __rappelle le manuel__ de gettext): Les noms de variables ne doivent comporter uniquement que des caractères alphanumériques ou le tiret bas, ne peuvent pas commencer par un chiffre ni être une chaîne vide; sinon la référence à la variable (son nom) est ignorée. |
* Que l'évitement des paramètres d'expansion soit obtenu par une seule barre oblique inversée, comme ceci:\\ \$parameter or \${parameter}\\ sauf si la commande eval_gettext se trouve dans une commande de substitution comme celle-ci:\\ "`eval_gettext "..."`" ou "$(eval_gettext "...")"\\ Dans ce cas, il faut mettre trois barres obliques inversées, comme ceci:\\ \\\$parameter or \\\${parameter}. | * Que l'évitement des paramètres d'expansion soit obtenu par une seule barre oblique inversée, comme ceci:\\ \$parameter or \${parameter}\\ sauf si la commande eval_gettext se trouve dans une commande de substitution comme celle-ci:\\ "`eval_gettext "..."`" ou "$(eval_gettext "...")"\\ Dans ce cas, il faut mettre trois barres obliques inversées, comme ceci:\\ \\\$parameter or \\\${parameter}. |
* Que seules les formes $parameter and ${parameter} du paramètre d'expansion soient employées dans un argument d'eval_gettext (toute autre forme est interdite). | * Que seules les formes $parameter and ${parameter} du paramètre d'expansion soient employées dans un argument d'eval_gettext (toute autre forme est interdite). |
dialog --no-collapse <common-options> --msgbox "`cat <file>`" <height> <width> | dialog --no-collapse <common-options> --msgbox "`cat <file>`" <height> <width> |
| |
==== Practical recommendations for translators ==== | ==== Conseils pratiques aux traducteurs ==== |
| |
Depending on amount of work needed and available resources, there can be one translator or a team of translators per target language. In all cases, I recommend that at least one person be responsible for organizing the team's work, checking the translations and transmitting the checked PO file to the maintainer(s). Let's call this person the team coordinator. | |
| |
Don't feel obliged to translate verbatim. Not only is this rarely the best way to convey the meaning, but in addition this often leads to sentences too long to fit in allowed space. | |
| |
Use a specialized PO editor, 'not' a general text editor. This will not only prevent inadvertently editing 'msgid' strings but also facilitate their work and automatize additional checks, as the presence of a variable in the translation with the same spelling as in the original. | Suivant le volume de travail nécessaire et les ressources disponibles, il peut y avoir un traducteur ou bien une équipe de traducteurs par langue de destination. Dans tous les cas je recommande qu'au moins une personne ait la responsabilité d'organiser le travail de l'équipe, de vérifier les traductions et de transmettre le fichier PO au(x) mainteneur(s). Appelons cette personne: «coordinateur». |
| |
While translating, choose a serif fixed width (or "monospaced") font, like Courier. That allow to visually distinguish characters that otherwise would look the same, and check line's length when that matters. | Il ne faut pas obligatoirement traduire mot à mot. Non seulement c'est rarement la meilleure façon de communiquer le sens, mais encore cela produit souvent des phrases trop longues pour entrer dans l'espace prévu. |
| |
If possible, check the layout of the messages. You could do that looking at the context in the relevant source file. Even better, simply run the translated script. | Utilisez un éditeur de PO spécifique, '__pas__' un éditeur de texte standard. D'une part vous éviterez ainsi d'éditer des chaînes 'msgid' par inadvertance et d'autre part leur action en sera facilitée et les vérifications complémentaires seront automatisées, comme la présence d'une variable ayant la même orthographe dans la traduction et dans l'original. |
| |
This is especially important if you are translating dialog boxes. In particular, take care not to write too long sentences on one single line if it appears that the text can't flow on next one. | Pendant la traduction, choisissez une police sérif de largeur fixe (ou "monospace"), comme Courier. Cela évite de confondre des caractères qui autrement se ressemblent, on peut aussi vérifier la longueur de ligne quand cela importe. |
| |
Bear in mind that in VGA mode (used in text installers, in particular), line's width is limited theoretically to 80 characters, but practically often to 74. | Si possible, vérifiez l'affichage des messages. Vous pourriez le faire en regardant le contexte dans le fichier source correspondant. Mieux encore, activez tout simplement le script traduit. |
| |
Do not add question marks that are not present in the original message. | Ceci est très important si vous traduisez des boîtes de dialogue. En particulier, évitez d'écrire des phrases trop longues sur une seule ligne s'il s'avère que le texte ne peut pas continuer sur la ligne suivante. |
| |
If the message refers to tags (text on the buttons) of dialog boxes, like "OK", "Yes", "NO", "Continue", "Cancel", check how theses tags are translated in your language in dialog's interface and use the same words. | N'oubliez pas qu'en mode VGA (utilisé dans les installeurs à interface en texte, par exemple), la dimension des lignes est limitée en théorie à 80 caractères, mais souvent à 74 en fait. |
| |
Avoid colloquialisms and technical slang. | N'ajoutez pas de points d'interrogation qui ne figurent pas dans le message d'origine. |
| |
To "cut" (or end) a line inside a "dialog" box you should type \n: pressing [Enter] will 'not' insert a "new line" character in the text viewed by user. | Si le message concerne des invites (un texte bref sur les boutons) de boîtes de dialogue, comme "OK", "Yes", "NO", "Continue", "Cancel", assurez vous de la traduction dans votre langue de ces invites employées dans l'interface globale de dialogue et reprenez les mêmes mots. |
| |
In addition, you will have to comply to gettext's requirements for it to work: | Évitez les expressions familières et l'argot technique. |
* If a word beginning with a dollar sign is included in the original text it should be present in the translation with exactly the same spelling (case matters). | |
* The translation text should include a "new line" character (or line feed, represented by "\n") at the beginning or at the end, exactly as the original text does. Conversely, if the original text doesn’t have the character, then the translation shouldn’t have it. | |
* A single backslash character "\" is not allowed in the translation. | |
| |
To "cut" (or end) a line inside a "dialog" box you should type \n: pressing [Enter] will 'not' insert a "new line" character in the text viewed by user. | Pour "couper" (ou terminer) une ligne dans une boîte de dialogue vous entrerez \n: et quand il enfoncera [Enter], l'utilisateur '__ne verra pas__' de caractère "new line" s'afficher dans le texte sous ses yeux. |
| |
To check your translation against gettext's requirements you could run following command: | En outre, vous devrez vous conformer aux exigences suivantes de gettext pour qu'il fonctionne: |
msgfmt -c <name of the PO file> | * S'il y a un mot commençant par le signe dollar dans le texte d'origine, il devra apparaître dans la traduction avec exactement la même écriture (la casse compte). |
| * Le texte traduit doit comporter un caractère de passage à la ligne (ou "saut de ligne" représenté par '\n') au début ou à la fin, exactement comme dans le texte d'origine. S'il n'y a pas le caractère '\n' dans le texte d'origine, alors il ne doit pas être dans la traduction, non plus. |
| * Le caractère barre oblique inverse “\” n'est pas autorisé dans la traduction. |
| |
==== Warning about translation of man pages ==== | Pour vérifier que votre traduction satisfait aux exigences de gettext vous pourrez appeler cette commande : |
| msgfmt -c <nom du fichier PO> |
| ==== Points importants pour traduire les pages de manuel ==== |
| |
Preserve carefully syntax of man pages found in English markup. For instance don't replace: | Conservez attentivement la syntaxe des pages de manuel telles qu'elles sont notées en anglais. Il ne faut pas changer: |
| |
* 'B<' with 'B <' (don't insert a space) | * 'B<' en 'B <' (n'insérez pas l'espace) |
* 'B<' with 'b<' (keep the B as a capital letter - and don't replace it by the Greek capital letter BETA that looks the same on the screen) | * 'B<' en 'b<' (laissez le B en majuscule - et ne le remplacez pas par la lettre majuscule grecque BETA qui a le même aspect à l'écran) |
* "I" with '|' (don't replace the capital letter I with a pipe symbol) | * "I" en '|' (ne remplacez pas la lettre majuscule I par le symbole 'pipe' -- alt gr + 6 --) |
| |
When translating shell commands, preserve English names of paths when needed. But you may and should translate arguments to be replaced by a value like 'packagename' | En traduisant des commandes du shell, laissez en anglais les noms de chemins d'accès à utiliser. Mais vous pouvez et __devez__ traduire les arguments destinés à prendre une valeur comme 'packagename', dans ce cas --> 'nomdupaquet'. |
| |
Didier Spaier | Didier Spaier |
====== Sources ====== | ====== Sources ====== |
* Originally written by [[wiki:user:didierspaier | Didier Spaier]] | * Originally written by [[wiki:user:didierspaier | Didier Spaier]] |
{{tag>howtos gettext shell scripts internationalization localization i18n l10n}} | * Translation October 2015 by [[wiki:user:pierreaverseng | P-M Averseng]] |
| {{tag>howtos gettext shell scripts internationalization localization i18n l10n translator_pierreaverseng}} |
| |