Internationalisation (i18n) pour script en bash
J’ai trouvé la documentation autour de l’internationalisation de scripts en bash assez peu fournie. Je vais donc par le biais d’un exemple vous montrer comment vous pouvez utiliser le bash pour faire des scripts dans plusieurs langues.
Voici un script court qui utilise kdialog. Mais si vous ne voulez pas l’utiliser, laissez-juste la ligne avec le echo.
#!/bin/bash
export TEXTDOMAIN=i18nscript
kdialog –title $ »The title » –yesno $ »This is an example
to illustrate i18n in a bash script. Do you wish to continue? »echo $ »This is an example to illustrate i18n in a bash script. »
exit 0
Vous remarquerez que les chaines de caractères (strings en anglais) sont précédées d’un $. C’est ce qui sera utilisé pour récupérer les chaines à traduire. A noter aussi la présence de la ligne export TEXTDOMAIN=i18nscript, qui marque où chercher la traduction. On mets généralement le nom de l’exécutable.
Ensuite nous créons un répertoire po afin de ranger tout ce qui concerne l’i18n pour notre projet.
mkdir po
bash –dump-po-strings i18nscript > po/i18nscript.po
Le fichier i18nscript.po contient ceci :
#: i18nscript:6
msgid « The title »
msgstr « »
#: i18nscript:6
msgid « This is an example to illustrate i18n in a bash script.\n Do you wish to continue? »
msgstr « »
#: i18nscript:9
msgid « This is an example to illustrate i18n in a bash script. »
msgstr « »
Ensuite, copions ce fichier de la manière suivante :
cp po/i18nscript.po po/fr.po
Ensuite, le traducteur (vous je pense ) va compléter les lignes commençant par msgstr. Si vous voulez traduire dans d’autres langues, vous devez appliquer la même procédure.
msgfmt -o i18nscript.mo fr.po
et on déplace ce fichier mo dans
mv i18nscript.mo /usr/share/locale/fr/LC_MESSAGES/
Si l’utilisateur utilise une langue non traduite, la langue figurant dans le script sera utilisée. C’est pour cela que l’on préférera utiliser l’anglais dans celui-ci.