Traduction(s) : aucune
Quelques trucs et astuces utiles pour les traducteurs
Contents
Les espaces insécables et vous
Vim
Différencier les espaces insécables des espaces normales
Les commandes suivantes permettent d'afficher un '·' (U+00b7) pour visualiser les espaces insécables (U+00a0). Le '·' peut être remplacé par le caractère de son choix.
:set listchars=nbsp:· :set list
Exemple d'intégration dans le ~/.vimrc limitant la portée du réglage au buffer courant si le fichier est un *.po
autocmd Filetype po setlocal listchars=nbsp:· list
Insérer une espace insécable dans vim
En mode insertion, il est possible d'insérer un caractère unicode par son code hexadécimal avec CTRL-v u <code_hexadécimal>. Pour l'espace insécable la séquence est donc : CTRL-v u 00a0
Script bash/sed : remplacer les espaces normales par des insécables
#!/bin/bash # Remplace les espaces normales (U+0020) par des espaces insécables # (U+00a0) dans les lignes traduites d'un fichier fr.po passé en # argument. # avant pour # ' »' # ' :' # ' ;' # ' !' # ' ?' # et après pour # '« ' # Le résultat est livré sur la sortie standard. Les paquets « gettext » # et « file » doivent être installés. Le script ne fonctionne que pour # des fichiers encodés en ISO-8859-* ou UTF-8. # # Prière de passer en revue les espaces insécables insérées par ce # script afin d'éliminer d'éventuelles « intruses » qui se seraient # invitées sur des lignes destinées à être reproduites litéralement # (des lignes de commande, par exemple). if file -bi $1 | grep -si --regexp='charset=ISO-8859-' > /dev/null ; then nbsp="\xa0" ; # espace insécable go="\xab" ; # guillemet gauche gf="\xbb" ; # guillemet droit elif file -bi $1 | grep -si --regexp='charset=UTF-8' > /dev/null ; then nbsp="\xc2\xa0"; # espace insécable go="\xc2\xab" ; # guillemet gauche gf="\xc2\xbb" ; # guillemet droit else echo "Erreur : le script ne parvient pas à déterminer l'encodage du fichier."; exit 0; fi msgcat --no-wrap "$1" | sed -r -l0 ' /^msgstr\x20/ { s/\x20(\?|\!|\:|\;|'${gf}')/'${nbsp}'\1/g s/('${go}')\x20/\1'${nbsp}'/g } ' | msgcat -
Dans une interface graphique
Pour effectuer l'espace insécable dans certaines interfaces graphiques, notamment avec un clavier français (obsolète variante), vous pouvez utiliser altgr-espace.
Dans les descriptions de paquets
Dans le DDTS, on remplace les espaces insécables par le signe « · »).
Les guillemets
Dans une interface graphique
Avec un clavier français (obsolète variante), vous pouvez utiliser altgr-w et x pour les faire.
Homogénéité des traductions
Il est important d'assurer l'homogénéité des traductions, c'est-à-dire qu'une chaîne soit traduite, autant que possible, partout de la même manière. C'est une des raisons pour laquelle lorsqu'on a une inspiration soudaine, mieux vaut la partager avec le reste de l'équipe avant de se lancer et ne l'appliquer à sa traduction qu'une fois validée en commun. C'est aussi ce qui doit amener à être prudent quand on corrige des traductions, afin de modifier en douceur les conventions.
Pages de manuel
Les pages de manuel sont un dépôt Git, où l'on travaille essentiellement dans po/fr. Lorsqu'on voit une chaîne difficile, voici comment voir si elle n'a pas déjà été traitée ailleurs :
Depuis po/fr/, taper :
grep -ri "la chaîne en anglais"
Le -r fait que grep parcourt les fichiers de façon récursive, le -i permet que la recherche ne tient pas compte de la casse de la chaîne.
Le résultat est une sortie affichant le répertoire/le_nom_du_fichier.5.po:la ligne contenant la chaîne (pas le numéro de ligne mais la ligne complète). Il faut ensuite ouvrir le fichier (ou un des fichiers) trouvé(s) et rechercher la chaîne en question. Il y a autant de ligne que d'occurrences de la chaîne dans les fichiers ça peut être plusieurs dizaines... On peut privilégier les fichiers des man1 ou man2, car on sait que là les chaînes ont plus de chance d'avoir été traduites et que la traduction a été validée par l'équipe de traduction.
Edit conflict - other version:
Quel outil utiliser pour traduire les fichiers .po
Les fichiers .po sont le mode de traduction le plus classique des paquets sous GNU/Linux. L'avantage est qu'une fois mis en place, dès qu'une modification se fait dans le code source, elle se répercute dan les fichiers de traduction. Cela signifie que le traducteur sait les chaînes à traduire, car nouvelles, ou celles à revoir (fuzzy) car leur traduction a pu bouger du fait de changement dans les environs de la chaîne d'origine.
Un éditeur de traduction permet donc facilement e retrouver les chaînes fuzzy et nouvelles. Voici quelques idées pour traiter facilement ces fichiers.
Emacs et le module gettext-el
Les bases
Si vous utilisez Emacs, vous pouvez installer le paquet gettext-el qui, à l'ouverture d'un fichier .po, changera de comportement. cf la documentation d'Emacs pour plus d'informations. Voici quelques bases :
* f survole les chaînes fuzzy * u survole les chaînes non traduites * tab supprime le label « fuzzy » d'une chaîne * entrée édite une chaîne, ctrl-c c en sort
Les caractères d'échappement
Noter que Emacs insère automatiquement, devant certains caractères, des caractères d'échappement (\). Lorsque vous copiez-collez, attention donc : si la chaîne contient déjà un antislash, vous en aurez deux dans la chaîne traduite. Soyez vigilant car cela peut avoir de vraies conséquences.
po-wrap
Enfin, l'édition d'une chaîne la rend étalée sur toute la largeur de l'écran, et même au-delà. Or, pour les relecteurs, il est de coutume de leur présenter un affichage sur 80 caractères. On parle de wrapping.
Dans Emacs, la commande alt-m puir po-wrap fait le travail et tient compte des labels no-wrap qui empêche de faire cela dans les chaînes dont on veut conserver la présentation, typiquement du code.
Pour que cela marche, votre fichier .emacs doit contenir le script suivant :
(defun po-wrap () "Filter current po-mode buffer through `msgcat' tool to wrap all lines." (interactive) (if (eq major-mode 'po-mode) (let ((tmp-file (make-temp-file "po-wrap.")) (tmp-buf (generate-new-buffer "*temp*"))) (unwind-protect (progn (write-region (point-min) (point-max) tmp-file nil 1) (if (zerop (call-process "msgcat" nil tmp-buf t (shell-quote-argument tmp-file))) (let ((saved (point)) (inhibit-read-only t)) (delete-region (point-min) (point-max)) (insert-buffer tmp-buf) (goto-char (min saved (point-max)))) (with-current-buffer tmp-buf (error (buffer-string))))) (kill-buffer tmp-buf) (delete-file tmp-file)))))
Edit conflict - your version:
End of edit conflict