meta données pour cette page
  •  

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
envrac:bash-international [2012/03/03 09:16]
ztrulphcs [Traduire plus sérieusement]
envrac:bash-international [2022/10/30 06:55] (Version actuelle)
ztrulphcs [Il ne peut y en avoir qu'un]
Ligne 44: 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 ''[[http://linuxmanpages.com/man1/strace.1.php|strace]]'' ce qu'il essaie de faire, on peut voir ceci :+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 ''[[http://man7.org/linux/man-pages/man1/strace.1.html|strace]]'' ce qu'il essaie de faire, on peut voir ceci :
 <code txt> <code txt>
 open(".../locale/fr_FR.UTF-8/LC_MESSAGES/multilingue.mo", O_RDONLY) = -1 ENOENT (No such file or directory) open(".../locale/fr_FR.UTF-8/LC_MESSAGES/multilingue.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
Ligne 195: Ligne 195:
 Ben oui, mais normal quoi. Si on prend pas à pas ce qui se passe lors de l'affichage, voilà ce qu'on obtient : Ben oui, mais normal quoi. Si on prend pas à pas ce qui se passe lors de l'affichage, voilà ce qu'on obtient :
  
-  * bash voit une chaine ''%%"${status[$result]}"%%'', +  * bash voit une chaine ''%%"${status[$result]}"%%'' qui n'est pas une chaine à traduire
-  * procède à l'expansion des variables, effectue le remplacement par la valeur qui est une traduction **déjà** réalisée +  * procède à l'expansion normale des variables et remplace ''%%"${status[$result]}"%%'' par la valeur idoine du tableau ''status''; cette valeur est une traduction **déjà** réalisée, 
-  * et s'arrête là, content de lui.+  * et il s'arrête là, content de lui.
  
 ''$name'' dans l'histoire ? il n'en est pas question **au moment où on le souhaiterai**. En fait, ''%%$name%%'' a été évalué bien avant, lors de la **définition** du tableau:  ''$name'' dans l'histoire ? il n'en est pas question **au moment où on le souhaiterai**. En fait, ''%%$name%%'' a été évalué bien avant, lors de la **définition** du tableau: 
Ligne 205: Ligne 205:
   * recherche un équivalent dans le catalogue,   * recherche un équivalent dans le catalogue,
   * il trouve des chaines du genre ''%%"parfait $name", "presque bien $name", "$name : tu peux faire mieux", "tout faux $name"%%'',   * il trouve des chaines du genre ''%%"parfait $name", "presque bien $name", "$name : tu peux faire mieux", "tout faux $name"%%'',
-  * fait le remplacement de variable ''%%$name%%'' => ''%%''%%'' car **à ce moment** ''%%$name%%'' n'est pas encore définie... +  * remplace les chaines d'origine par leur traduction, 
-  * range ce résultat dans la tableau et passe à la suite+  * puis, au moment où il exécute la commande, c'est à dire l'affectation au tableau,\\ fait le remplacement de variable ''%%$name%%'' => ''%%''%%'' car **à ce moment** ''%%$name%%'' n'est pas encore définie... 
 +  * 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 230: Ligne 232:
 C'est pas mieux. Voir l'explication ci dessus, mais en plus, les chaines du tableau sont même pas traduites... C'est pas mieux. Voir l'explication ci dessus, mais en plus, les chaines du tableau sont même pas traduites...
  
-Il n'y a pas de solution alors ? ben si. Y'a [[http://linuxmanpages.com/man1/printf.1.php|printf]]. Au passageil se trouve, que ''printf'' est une commande [[http://linuxmanpages.com/man1/bash.1.php#lbCZ|interne de bash]] (et aussi de dash et ash) et donc peu coûteuse -- même si le lien donné pointe vers la page de manuel de la commande externe du même nom. Un exemple correct pour ce script est :+Il n'y a pas de solution alors ? ben si. Y'a [[https://www.gnu.org/software/bash/manual/bash.html#index-printf|printf]], une commande interne de bash. Cette fonction interne reprend et étend la **commande externe** [[http://linuxmanpages.com/man1/printf.1.php|printf]]. Cette commande étant un interne de bast (et aussi de dash et ash) est donc peu coûteuse. Un exemple correct pour ce script est :
  
 <code bash essai-006> <code bash essai-006>
Ligne 280: Ligne 282:
 et voilà aussi les commandes à passer : et voilà aussi les commandes à passer :
 <code bash> <code bash>
-lang=fr_FR+langue=fr_FR
 mkdir -p locale/$langue/LC_MESSAGES/ mkdir -p locale/$langue/LC_MESSAGES/
 msgfmt -o locale/$langue/LC_MESSAGES/essai-006.mo essai-006.po msgfmt -o locale/$langue/LC_MESSAGES/essai-006.mo essai-006.po
 bash essai-006 bash essai-006
 </code> </code>
 +
 ===== Téléchargement bonus ===== ===== Téléchargement bonus =====