Blame
Date:
Sun Jun 28 20:43:02 2020 UTC
Message:
logo adjust
001
2020-06-28
dev
Title: Traduction de script Shell
002
2020-06-28
dev
Date: 2010-10-13
003
2020-06-28
dev
Category: Tech
004
2020-06-28
dev
005
2020-06-28
dev
006
2020-06-28
dev
Il est aisé d'internationaliser un script shell, le pré-requis étant de
007
2020-06-28
dev
disposer d'un système d'exploitation sur lequel est installée la bibliothèque
008
2020-06-28
dev
GNU d'internationalisation (i18n) gettext
009
2020-06-28
dev
010
2020-06-28
dev
## Modification du script shell original
011
2020-06-28
dev
012
2020-06-28
dev
Nous prendrons ici exemple du script _keyboardsetup_ faisant parti des outils
013
2020-06-28
dev
d'administration de Salix, les SalixTools.
014
2020-06-28
dev
015
2020-06-28
dev
Ajout des lignes suivantes après l'introduction habituelle (nom, license,...)
016
2020-06-28
dev
mais avant le début du code :
017
2020-06-28
dev
```
018
2020-06-28
dev
# Gettext internationalization
019
2020-06-28
dev
export TEXTDOMAIN="nom_du_programme"
020
2020-06-28
dev
export TEXTDOMAINDIR="/chemin/vers/la/traduction/compilée"
021
2020-06-28
dev
. gettext.sh
022
2020-06-28
dev
023
2020-06-28
dev
# Version 4.3 - 28/07/2009
024
2020-06-28
dev
#* replaced xorg.conf by fdi policy rule
025
2020-06-28
dev
# 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
026
2020-06-28
dev
```
027
2020-06-28
dev
Après modification :
028
2020-06-28
dev
```
029
2020-06-28
dev
# Version 4.3 - 28/07/2009
030
2020-06-28
dev
#* replaced xorg.conf by fdi policy rule
031
2020-06-28
dev
# Gettext internationalization
032
2020-06-28
dev
export TEXTDOMAIN="keyboardconfig"
033
2020-06-28
dev
export TEXTDOMAINDIR="/usr/share/locale"
034
2020-06-28
dev
. gettext.sh
035
2020-06-28
dev
# Take a look at "Xdialog" and use it instead of "dialog" in case X is runningif [[ "$DISPLAY"\&\&"$(which Xdialog 2\>\&1 | grep -v "which: no")" ]]; then
036
2020-06-28
dev
```
037
2020-06-28
dev
Mettez les **tags** suivants autour de la chaîne de caractères qui nécessite d'être
038
2020-06-28
dev
traduite :
039
2020-06-28
dev
```
040
2020-06-28
dev
`eval_gettext 'chaîne_de_caractères_à_traduire'`
041
2020-06-28
dev
```
042
2020-06-28
dev
Exemple avant modification :
043
2020-06-28
dev
```
044
2020-06-28
dev
if [ "$xflag" = "yes" ] ; then
045
2020-06-28
dev
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
046
2020-06-28
dev
```
047
2020-06-28
dev
Après Modification :
048
2020-06-28
dev
```
049
2020-06-28
dev
if [ "$xflag" = "yes" ] ; then
050
2020-06-28
dev
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
051
2020-06-28
dev
```
052
2020-06-28
dev
## Processus de traduction
053
2020-06-28
dev
054
2020-06-28
dev
Il est tout d'abors nécessaire d'extraire les différents mots/phrases du script
055
2020-06-28
dev
shell qui devront être traduits et de les mettre dans un fichier type qui sera
056
2020-06-28
dev
distribué aux traducteurs. Pour réaliser ceci, lancez la commande suivante à
057
2020-06-28
dev
partir du répertoire où se situe votre script :
058
2020-06-28
dev
```
059
2020-06-28
dev
xgettext --from-code=utf-8 -L shell -o nom_du_script_shell.pot nom_du_script_shell
060
2020-06-28
dev
```
061
2020-06-28
dev
Exemple :
062
2020-06-28
dev
```
063
2020-06-28
dev
xgettext --from-code=utf-8 -L shell -o keyboardsetup.pot keyboardsetup
064
2020-06-28
dev
```
065
2020-06-28
dev
Chaque traducteur utilisera le fichier "modèle" pour générer son propre fichier
066
2020-06-28
dev
de travail de traduction en lançant la commande suivante à partir du dossier
067
2020-06-28
dev
dans lequel se trouve le fichier .pot (notre fichier "modèle").
068
2020-06-28
dev
069
2020-06-28
dev
Nous assumerons que la locale de l'environnement de travail est identique à la
070
2020-06-28
dev
locale à laquelle vous souhaitez aboutir (sinon il peut être nécessaire de lire
071
2020-06-28
dev
la page man de _msginit_ ;) ) :
072
2020-06-28
dev
```
073
2020-06-28
dev
msginit -i nom_du_script_shell.pot -o nom_du_script_shell-nom_de_la_locale.po
074
2020-06-28
dev
```
075
2020-06-28
dev
Exemple :
076
2020-06-28
dev
```
077
2020-06-28
dev
msginit -i keyboardsetup.pot -o keyboardsetup-fr.po
078
2020-06-28
dev
```
079
2020-06-28
dev
## Traduction en utilisant PoEdit
080
2020-06-28
dev
081
2020-06-28
dev
La façon la plus simple de traduire un logiciel "gettext" est d'utiliser le
082
2020-06-28
dev
logiciel [PoEdit](http://www.poedit.net/). S'il y a déjà un fichier .po pour
083
2020-06-28
dev
votre langage et que vous ne
084
2020-06-28
dev
souhaitez que le mettre à jour, vous pouvez ouvrir le fichier .po directement
085
2020-06-28
dev
avec poedit. Si le fichier .po pour votre langue n'existe pas encore, vous
086
2020-06-28
dev
pouvez en créer un facilement avec poedit. Sélectionnez simplement Nouveau
087
2020-06-28
dev
catalogue depuis un fichier .pot depuis le menu fichier, ajoutez vos détails et
088
2020-06-28
dev
commencez à traduire.
089
2020-06-28
dev
090
2020-06-28
dev
Rappelez vous de sauvegarder le fichier **.po** selon ce schéma :
091
2020-06-28
dev
```
092
2020-06-28
dev
nom_du_script_shell-nom_de_la_locale.po
093
2020-06-28
dev
```
094
2020-06-28
dev
Exemple :
095
2020-06-28
dev
```
096
2020-06-28
dev
keyboardsetup-de.po (pour l'allemand)
097
2020-06-28
dev
```
098
2020-06-28
dev
099
2020-06-28
dev
## Traduction sans PoEdit
100
2020-06-28
dev
101
2020-06-28
dev
S'il n'y a pas de fichier **.po** pour votre langue, vous pouvez en créer un à
102
2020-06-28
dev
partir du fichier **.pot** avec cette commande :
103
2020-06-28
dev
```
104
2020-06-28
dev
msginit -i nom_du_script_shell.pot -o nom_du_script_shell-nom_de_la_locale.po
105
2020-06-28
dev
```
106
2020-06-28
dev
Exemple :
107
2020-06-28
dev
```
108
2020-06-28
dev
msginit -i keyboardsetup.pot -o keyboardsetup-fr.po
109
2020-06-28
dev
```
110
2020-06-28
dev
Lorsque vous créez un fichier .po, ou s'il y en a déjà un, vous pouvez
111
2020-06-28
dev
commencer l'édition directement. Le fichier est très bien documenté et chaque
112
2020-06-28
dev
traducteur pourra traduire les différentes chaînes de caractères se trouvant
113
2020-06-28
dev
dans le fichier .po adéquat en utilisant uniquement son éditeur de texte
114
2020-06-28
dev
favori.
115
2020-06-28
dev
116
2020-06-28
dev
Exemple avant :
117
2020-06-28
dev
```
118
2020-06-28
dev
#keyboardsetup:93 keyboardsetup:103#, sh-format
119
2020-06-28
dev
msgid "Keyboard configuration"
120
2020-06-28
dev
msgstr ""
121
2020-06-28
dev
```
122
2020-06-28
dev
Après :
123
2020-06-28
dev
```
124
2020-06-28
dev
#: keyboardsetup:93 keyboardsetup:103#, sh-format
125
2020-06-28
dev
msgid "Keyboard configuration"
126
2020-06-28
dev
msgstr "Configuration du clavier"
127
2020-06-28
dev
```
128
2020-06-28
dev
## Testez vos traductions
129
2020-06-28
dev
130
2020-06-28
dev
Si vous souhaitez tester votre traduction, vous devez créer un fichier **.mo** à
131
2020-06-28
dev
partir du fichier **.po**, comme ceci :
132
2020-06-28
dev
```
133
2020-06-28
dev
msgfmt nom_du_script_shell-nom_de_la_locale.po -o nom_du_script_shell.mo
134
2020-06-28
dev
```
135
2020-06-28
dev
Exemple :
136
2020-06-28
dev
```
137
2020-06-28
dev
msgfmt keyboardsetup-fr.po -o keyboardsetup.mo
138
2020-06-28
dev
```
139
2020-06-28
dev
Le fichier **.mo** doit être identique à celui que vous traduisez. Vous pouvez
140
2020-06-28
dev
ensuite placer le fichier **.mo** que vous avez construit dans le répertoire du
141
2020-06-28
dev
système dédié aux locales à savoir _/usr/share/locale/nom\_de\_la\_locale/LC\
142
2020-06-28
dev
_MESSAGES/_
143
2020-06-28
dev
144
2020-06-28
dev
Exemple : _/usr/share/locale/fr/LC\_MESSAGES/_
145
2020-06-28
dev
146
2020-06-28
dev
## Envoyer vos traductions
147
2020-06-28
dev
148
2020-06-28
dev
Vous pouvez envoyer vos traductions sur la liste de diffusion du projet en
149
2020-06-28
dev
question (
150
2020-06-28
dev
[salix-main chez SourceForge pour Salix OS](https://lists.sourceforge.net/lists/listinfo/salix-main))
151
2020-06-28
dev
ou, directement au
152
2020-06-28
dev
dévelopeur dont le nom et l'adresse email figurent sur le fichier source. Elles
153
2020-06-28
dev
pourront ainsi être incluses dans la version future du logiciel/script.
154
2020-06-28
dev
155
2020-06-28
dev
## Extension de la traduction du script shell
156
2020-06-28
dev
157
2020-06-28
dev
Lorsque le mainteneur du script shell reçoit un fichier .po complet de la part
158
2020-06-28
dev
d'un traducteur, il doit d'abord le compiler en utilisant la commande qui suit
159
2020-06-28
dev
à l'intérieur du dossier dans lequel le fichier traduit.po se trouve :
160
2020-06-28
dev
```
161
2020-06-28
dev
msgfmt nom_du_script_shell-nom_de_la_locale.po -o nom_du_script_shell.mo
162
2020-06-28
dev
```
163
2020-06-28
dev
Exemple :
164
2020-06-28
dev
```
165
2020-06-28
dev
msgfmt keyboardsetup-fr.po -o keyboardsetup.mo
166
2020-06-28
dev
```
167
2020-06-28
dev
Ensuite il place le fichier **.mo** créé dans le dossier approprié des locales _/usr
168
2020-06-28
dev
/share/locale/nom\_de\_la\_locale/LC\_MESSAGES/_
169
2020-06-28
dev
170
2020-06-28
dev
Exemple : _/usr/share/locale/fr/LC\_MESSAGES/_
171
2020-06-28
dev
172
2020-06-28
dev
Et voilà, c'est tout !
173
2020-06-28
dev
174
2020-06-28
dev
## Maintenance
175
2020-06-28
dev
176
2020-06-28
dev
Maintenance du script shell et traductions futures. Si par la suite, le script
177
2020-06-28
dev
est modifié, son développeur créera un nouveau fichier **.pot** qu'il pourra
178
2020-06-28
dev
renvoyer aux traducteurs. Chaque traducteur devra lancer les commandes
179
2020-06-28
dev
suivantes dans le but de créer un nouveau fichier **.po** pour leur langage qui
180
2020-06-28
dev
incluera leurs traductions précédentes ainsi que les nouvelles chaînes de
181
2020-06-28
dev
caractères à traduire. Les deux fichiers **.pot** et **.po** doivent se trouver
182
2020-06-28
dev
dans le même dossier lorsque cette commande sera lancée :
183
2020-06-28
dev
```
184
2020-06-28
dev
msgmerge -U nom_du_script_shell-nom_de_la_locale.po nom_du_script_shell.pot
185
2020-06-28
dev
```
186
2020-06-28
dev
Exemple :
187
2020-06-28
dev
```
188
2020-06-28
dev
msgmerge -U keyboardsetup-fr.po keyboardsetup.pot
189
2020-06-28
dev
```
190
2020-06-28
dev
Et ensuite complétez les traductions manquantes. Voilà, ce genre de
191
2020-06-28
dev
contributions, bien que semblant un peu anodines, sont en fait très importantes
192
2020-06-28
dev
pour les équipes de développement.
193
2020-06-28
dev
194
2020-06-28
dev
(Source :
195
2020-06-28
dev
[Internationalize shell scripts](http://www.salixos.org/wiki/index.php/Internationalize_shell_scripts))
196
2020-06-28
dev
Frédéric Galusik