meta données pour cette page
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
envrac:bash-international [2012/02/24 09:42] ztrulphcs |
envrac:bash-international [2022/10/30 06:55] (Version actuelle) ztrulphcs [Il ne peut y en avoir qu'un] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Script bash internationalisé ====== | ====== Script bash internationalisé ====== | ||
+ | |||
+ | Ou comment traduire un script bash. | ||
+ | ------------------ | ||
Bash possède un mécanisme interne d' | Bash possède un mécanisme interne d' | ||
Ligne 5: | Ligne 8: | ||
En fait, la base est simple; Les chaines entre '' | En fait, la base est simple; Les chaines entre '' | ||
- | <code bash> | + | <code bash essai-001> |
echo $" | echo $" | ||
</ | </ | ||
Ligne 41: | Ligne 44: | ||
- | Notez au passage que bash se donne vraiment beaucoup de mal pour trouver le catalogue de chaines traduites. Si on fait exprès de le taquiner un peu et qu'on regarde avec '' | + | Notez au passage que bash se donne vraiment beaucoup de mal pour trouver le catalogue de chaines traduites. Si on fait exprès de le taquiner un peu et qu'on regarde avec '' |
<code txt> | <code txt> | ||
open(" | open(" | ||
Ligne 85: | Ligne 88: | ||
- | traduire le fichier '' | + | traduire le fichier '' |
<code po multilingue.po> | <code po multilingue.po> | ||
Ligne 113: | Ligne 116: | ||
==== Traduire plus sérieusement ==== | ==== Traduire plus sérieusement ==== | ||
- | Ben pourquoi c' | + | Ben pourquoi, c' |
La meilleure méthode est donc | La meilleure méthode est donc | ||
Ligne 152: | Ligne 155: | ||
Ok, voilà un exemple. La chaine contient des variables mais ne cela n'a pas d' | Ok, voilà un exemple. La chaine contient des variables mais ne cela n'a pas d' | ||
- | <code bash> | + | <code bash essai-002> |
firstname=toto | firstname=toto | ||
secondname=' | secondname=' | ||
Ligne 160: | Ligne 163: | ||
Maintenant, un peu plus compliqué, on a plein de chaines de résultats dans un tableau, et on veut afficher le statut en fonction d'une autre valeur. | Maintenant, un peu plus compliqué, on a plein de chaines de résultats dans un tableau, et on veut afficher le statut en fonction d'une autre valeur. | ||
- | <code bash> | + | <code bash essai-003> |
status=( | status=( | ||
$" | $" | ||
Ligne 176: | Ligne 179: | ||
Imaginons maintenant qu'on veuille faire rentrer '' | Imaginons maintenant qu'on veuille faire rentrer '' | ||
- | <code bash> | + | <code bash essai-004> |
status=( | status=( | ||
$" | $" | ||
Ligne 192: | Ligne 195: | ||
Ben oui, mais normal quoi. Si on prend pas à pas ce qui se passe lors de l' | Ben oui, mais normal quoi. Si on prend pas à pas ce qui se passe lors de l' | ||
- | * bash voit une chaine '' | + | * bash voit une chaine '' |
- | * procède à l' | + | * procède à l' |
- | * et s' | + | * et il s' |
'' | '' | ||
Ligne 202: | Ligne 205: | ||
* recherche un équivalent dans le catalogue, | * recherche un équivalent dans le catalogue, | ||
* il trouve des chaines du genre '' | * il trouve des chaines du genre '' | ||
- | * fait le remplacement de variable '' | + | * remplace les chaines d' |
- | * range ce résultat dans la tableau et passe à la suite | + | * puis, au moment où il exécute la commande, c'est à dire l' |
+ | * range ce résultat dans la tableau et passe à la suite. | ||
Si on essaie frénétiquement ceci : | Si on essaie frénétiquement ceci : | ||
Ligne 213: | Ligne 218: | ||
Si on essaie alors ceci : | Si on essaie alors ceci : | ||
- | | + | <code bash essai-005> |
status=( | status=( | ||
"$name Perfect", | "$name Perfect", | ||
Ligne 227: | Ligne 232: | ||
C'est pas mieux. Voir l' | C'est pas mieux. Voir l' | ||
- | Il n'y a pas de solution alors ? ben si. Y'a [[http://linuxmanpages.com/man1/printf.1.php|printf]]. Au passage, il se trouve, que '' | + | Il n'y a pas de solution alors ? ben si. Y'a [[https://www.gnu.org/software/bash/ |
+ | |||
+ | <code bash essai-006> | ||
+ | #! /bin/bash | ||
+ | |||
+ | TEXTDOMAIN=${0## | ||
+ | TEXTDOMAINDIR=" | ||
- | <code bash> | ||
status=( | status=( | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
) | ) | ||
name=toto | name=toto | ||
- | result=3 | + | result=$(( $RANDOM % 4 )) |
printf " | printf " | ||
+ | read -p $" | ||
# ou alors, si on fait des boites de dialogue, on peut utiliser ceci : | # ou alors, si on fait des boites de dialogue, on peut utiliser ceci : | ||
+ | result=$(( $RANDOM % 4 )) | ||
dialog --msgbox "$( printf " | dialog --msgbox "$( printf " | ||
+ | result=$(( $RANDOM % 4 )) | ||
zenity --info --text=" | zenity --info --text=" | ||
</ | </ | ||
Ligne 246: | Ligne 259: | ||
Les traducteurs pourront mettre les noms aux endroits où ils le veulent. Sauf qu'ils peuvent éventuellement ne même pas vraiment savoir à quoi correspond le '' | Les traducteurs pourront mettre les noms aux endroits où ils le veulent. Sauf qu'ils peuvent éventuellement ne même pas vraiment savoir à quoi correspond le '' | ||
+ | Notez l' | ||
+ | |||
+ | Voilà le fichier .po pour ceux qui voudraient essayer : | ||
+ | <code po essai-006.po> | ||
+ | #: essai-007:7 | ||
+ | msgid "%s Perfect\\\\n" | ||
+ | msgstr "%s, C'est parfait !\\\\n" | ||
+ | #: essai-006:8 | ||
+ | msgid "%s almost correct\\\\n" | ||
+ | msgstr " | ||
+ | #: essai-006:9 | ||
+ | msgid "%s could be better\\\\n" | ||
+ | msgstr "%s : Peut mieux faire\\\\n" | ||
+ | #: essai-006: | ||
+ | msgid "%s all wrong\\\\n" | ||
+ | msgstr "%s a tout faux !\\\\n" | ||
+ | #: essai-006: | ||
+ | msgid "press the return key" | ||
+ | msgstr " | ||
+ | </ | ||
+ | |||
+ | et voilà aussi les commandes à passer : | ||
+ | <code bash> | ||
+ | langue=fr_FR | ||
+ | mkdir -p locale/ | ||
+ | msgfmt -o locale/ | ||
+ | bash essai-006 | ||
+ | </ | ||
===== Téléchargement bonus ===== | ===== Téléchargement bonus ===== |