Traduction(s) : aucune


Quelques trucs et astuces utiles pour les traducteurs

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