Traduction de script Shell
Il est aisé d'internationaliser un script shell, le pré-requis étant de disposer d'un système d'exploitation sur lequel est installée la bibliothèque GNU d'internationalisation (i18n) gettext
I. Modification du script shell original
Nous prendrons ici exemple du script keyboardsetup faisant parti des outils d'administration de Salix, les SalixTools.
Ajout des lignes suivantes après l'introduction habituelle (nom, license, ...) mais avant le début du code :
# Gettext internationalization export TEXTDOMAIN="nom_du_programme" export TEXTDOMAINDIR="/chemin/vers/la/traduction/compilée" . gettext.sh
Exemple avant modification :
# Version 4.3 - 28/07/2009 # * replaced xorg.conf by fdi policy rule # Take a look at "Xdialog" and use it instead of "dialog" in case X is running if [[ "$DISPLAY"\\&\\&"$(which Xdialog 2\\>\\&1 | grep -v "which: no")" ]]; then
Après modification :
# Version 4.3 - 28/07/2009 # * replaced xorg.conf by fdi policy rule # Gettext internationalization export TEXTDOMAIN="keyboardconfig" export TEXTDOMAINDIR="/usr/share/locale" . gettext.sh # Take a look at "Xdialog" and use it instead of "dialog" in case X is running if [[ "$DISPLAY"\\&\\&"$(which Xdialog 2\\>\\&1 | grep -v "which: no")" ]]; then
Mettez les tags suivants autour de la chaîne de caractères qui nécessite d'être traduite :
`eval_gettext 'chaîne_de_caractères_à_traduire'`
Exemple avant modification :
if [ "$xflag" = "yes" ] ; then answer="$(eval $dialog \\ --stdout \\ --title \\"Keyboard configuration\\" \\ --default-item \\"$currentpathkeymap\\" \\ --cancel-label \\"Exit\\" \\ --icon \\"keyboardconfig\\" \\ --check \\"numlock\\" \\"on\\" \\ --menu \\ \\"\\\\n Please select your prefered keyboard map:\\" 20 75 11 "$list" )" else
Après Modification :
if [ "$xflag" = "yes" ] ; then answer="$(eval $dialog \\ --stdout \\ --title \\"`eval_gettext 'Keyboard configuration'`\\" \\ --default-item \\"$currentpathkeymap\\" \\ --cancel-label \\"`eval_gettext 'Exit'`\\" \\ --icon \\"keyboardconfig\\" \\ --check \\"numlock\\" \\"on\\" \\ --menu \\ \\"\\\\n `eval_gettext 'Please select your prefered keyboard map:'`\\" 20 75 11 "$list" )" else
II. Processus de traduction
Il est tout d'abors nécessaire d'extraire les différents mots/phrases du script shell qui devront être traduits et de les mettre dans un fichier type qui sera distribué aux traducteurs. Pour réaliser ceci, lancez la commande suivante à partir du répertoire où se situe votre script :
xgettext --from-code=utf-8 -L shell -o nom_du_script_shell.pot nom_du_script_shell
Exemple :
xgettext --from-code=utf-8 -L shell -o keyboardsetup.pot keyboardsetup
Chaque traducteur utilisera le fichier "modèle" pour générer son propre fichier de travail de traduction en lançant la commande suivante à partir du dossier dans lequel se trouve le fichier .pot (notre fichier "modèle").
Nous assumerons que la locale de l'environnement de travail est identique à la locale à laquelle vous souhaitez aboutir (sinon il peut être nécessaire de lire la page man de msginit ;) ) :
msginit -i nom_du_script_shell.pot -o nom_du_script_shell-nom_de_la_locale.po
Exemple :
msginit -i keyboardsetup.pot -o keyboardsetup-fr.po
III. Traduction en utilisant PoEdit
La façon la plus simple de traduire un logiciel "gettext" est d'utiliser le logiciel PoEdit . S'il y a déjà un fichier .po pour votre langage et que vous ne souhaitez que le mettre à jour, vous pouvez ouvrir le fichier .po directement avec poedit. Si le fichier .po pour votre langue n'existe pas encore, vous pouvez en créer un facilement avec poedit. Sélectionnez simplement Nouveau catalogue depuis un fichier .pot depuis le menu fichier, ajoutez vos détails et commencez à traduire.
Rappelez vous de sauvegarder le fichier .po selon ce schéma :
nom_du_script_shell-nom_de_la_locale.po
Exemple :
keyboardsetup-de.po (pour l'allemand)
IV. Traduction sans PoEdit
S'il n'y a pas de fichier .po pour votre langue, vous pouvez en créer un à partir du fichier .pot avec cette commande :
msginit -i nom_du_script_shell.pot -o nom_du_script_shell-nom_de_la_locale.po
Exemple :
msginit -i keyboardsetup.pot -o keyboardsetup-fr.po
Lorsque vous créez un fichier .po , ou s'il y en a déjà un, vous pouvez commencer l'édition directement. Le fichier est très bien documenté et chaque traducteur pourra traduire les différentes chaînes de caractères se trouvant dans le fichier .po adéquat en utilisant uniquement son éditeur de texte favori.
Exemple avant :
#: keyboardsetup:93 keyboardsetup:103 #, sh-format msgid "Keyboard configuration" msgstr '''
Après :
#: keyboardsetup:93 keyboardsetup:103 #, sh-format msgid "Keyboard configuration" msgstr "Configuration du clavier"
V. Testez vos traductions
Si vous souhaitez tester votre traduction, vous devez créer un fichier .mo à partir du fichier .po, comme ceci :
msgfmt nom_du_script_shell-nom_de_la_locale.po -o nom_du_script_shell.mo
Exemple :
msgfmt keyboardsetup-fr.po -o keyboardsetup.mo
Le fichier .mo doit être identique à celui que vous traduisez. Vous pouvez ensuite placer le fichier .mo que vous avez construit dans le répertoire du système dédié aux locales à savoir /usr/share/locale/nom_de_la_locale/LC_MESSAGES/
Exemple : /usr/share/locale/fr/LC_MESSAGES/
VI. Envoyer vos traductions
Vous pouvez envoyer vos traductions sur la liste de diffusion du projet en question (salix-main chez SourceForge pour Salix OS) ou, directement au dévelopeur dont le nom et l'adresse email figurent sur le fichier source. Elles pourront ainsi être incluses dans la version future du logiciel/script.
VII. Extension de la traduction du script shell
Lorsque le mainteneur du script shell reçoit un fichier .po complet de la part d'un traducteur, il doit d'abord le compiler en utilisant la commande qui suit à l'intérieur du dossier dans lequel le fichier traduit .po se trouve :
msgfmt nom_du_script_shell-nom_de_la_locale.po -o nom_du_script_shell.mo
Exemple :
msgfmt keyboardsetup-fr.po -o keyboardsetup.mo
Ensuite il place le fichier .mo créé dans le dossier approprié des locales /usr/share/locale/nom_de_la_locale/LC_MESSAGES/
Exemple : /usr/share/locale/fr/LC_MESSAGES/
Et voilà, c'est tout !
VIII. Maintenance
Maintenance du script shell et traductions futures. Si par la suite, le script est modifié, son développeur créera un nouveau fichier .pot qu'il pourra renvoyer aux traducteurs. Chaque traducteur devra lancer les commandes suivantes dans le but de créer un nouveau fichier .po pour leur langage qui incluera leurs traductions précédentes ainsi que les nouvelles chaînes de caractères à traduire. Les deux fichiers .pot et .po doivent se trouver dans le même dossier lorsque cette commande sera lancée :
msgmerge -U nom_du_script_shell-nom_de_la_locale.po nom_du_script_shell.pot
Exemple :
msgmerge -U keyboardsetup-fr.po keyboardsetup.pot
Et ensuite complétez les traductions manquantes. Voilà, ce genre de contributions, bien que semblant un peu anodines, sont en fait très importantes pour les équipes de développement.
(Source : Internationalize_shell_scripts)