Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/01/2016, à 00:01

metalux

[Script/Bash]Faciliter l'internationalisation des scripts bash

Bonjour,
Si vous souhaitez traduire votre scripts bash dans une langue étrangère afin de le rendre disponible et compréhensible pour les étrangers, vous êtes sur la bonne discussion.
Ce script sert à automatiser les tâches nécessaires à la création des fichiers d'internationalisations. A l'origine j'ai fais ce script pour faciliter les traductions des scripts du projet Voyager   
Il dépend de yad(fork de zenity dans les dépôts à partir d'ubuntu 16.04 ou disponible via P.P.A. pour les autres versions) et de Poedit

Tout d'abord, il faut faire quelque modification dans votre script pour supporter l'internationalisation.
Ajouter ces 2 lignes en début de script, juste après #!/bin/bash

TEXTDOMAIN=${0##*/}
TEXTDOMAINDIR="$(dirname "$0")/locale"

Pour le reste du script vous pouvez suivre ce tutoriel.
Pour résumer, il s'agit essentiellement de mettre les chaînes à traduire entre double-quote et de les précéder d'un $ comme ceci:
$"Ceci est un exemple"

Voilà votre script est près pour les traductions, maintenant c'est là qu'intervient Bash Translator.

#!/bin/bash
#
#Script de metalux

#/*
# * #----------------------------------------------------------------------------
# * « LICENCE BEERWARE » (Révision 42):
# * metalux a créé ce fichier. Tant que vous conservez cet avertissement,
# * vous pouvez faire ce que vous voulez de ce truc. Si on se rencontre un jour et
# * que vous pensez que ce truc vaut le coup, vous pouvez me payer une bière en
# * retour.
# * ----------------------------------------------------------------------------
#*/

cd "$PWD"
mapfile -t fich < <(grep -l '#!/bin/..sh' *|egrep -v "Bash translator")
[[ -z $fich ]] && (yad --undecorated --center --no-buttons --timeout=5 --info --text='Aucun fichier bash de disponible';exit 1)
script=$(yad --entry --title="Bash translator" --text='Sélectionnez le script à traduire' "${fich[@]}") || exit 1
    tab_lang=( $(awk -F '[_ .]' '{print $1}' /usr/share/i18n/SUPPORTED | sort -u | grep -v '#') )
        langue=$(yad --button="extended language:1" --button="gtk-ok:0" --button="gtk-quit:252" --entry --title="Traductions" --text="Veuillez indiquer la langue" "${tab_lang[@]}")
    choix_bouton=$?
if [[ $choix_bouton -eq 1 ]];then
     tab_lang=( $(awk -F '[ .@]' '{print $1}' /usr/share/i18n/SUPPORTED | sort -u | grep -v '#') )
        langue=$(yad --button="gtk-ok:0" --button="gtk-quit:252" --entry --title="Traductions" --text="Veuillez indiquer la langue" "${tab_lang[@]}")
        choix_bouton=$?
fi
if [[ -e ./locale/$langue/LC_MESSAGES/"$script.po" ]];then
    if [[ $choix_bouton -eq 0 ]];then
        bash --dump-po-strings $script | xgettext -L PO -o $script.pot -
    msgmerge -U locale/$langue/LC_MESSAGES/$script.po $script.pot 2>/dev/null
    poedit locale/$langue/LC_MESSAGES/$script.po 2>/dev/null
    else
        exit 1
    fi
else
    if [[ $choix_bouton -eq 0 ]];then
        mkdir -p locale/"$langue"/LC_MESSAGES
    bash --dump-po-strings "$script" | xgettext -L PO -o "$script.pot" -
    msginit --no-translator -l  "$langue" -i "$script".pot -o locale/"$langue"/LC_MESSAGES/"$script.po"
    poedit locale/"$langue"/LC_MESSAGES/"$script.po"
    else
        exit 1
    fi
fi
exit 0

Il suffit de le copier dans le même répertoire que votre script et de le lancer. Vous sélectionnez votre script dans la liste (seuls les scripts bash apparaîtront) puis la langue. Poedit va s'ouvrir, commencez par renseigner votre projet à partir du menu Catalogue/configuration en sélectionnant le jeu de caractères utf-8 et en mettant bien un nom de projet.
En cas de mise à jour de votre script ou si vous faîtes la traduction en plusieurs fois, il suffit de relancer Bash translator et de sélectionner à nouveau son script et la langue.
ATTENTION, il faut bien nommer ce script Bash translator si vous ne voulez pas le voir apparaître dans la liste.
Si ensuite vous faîtes un .Deb de vore projet, mettez les dossiers dans /usr/share/locale et pensez à modifier le chemin indiqué dans TEXTDOMAINDIR.

Pour tester que tout fonctionne, lancez un terminal depuis le dossier où se trouve le script traduis puis lancez cette commande:

LANGUAGE=fr ./script

en remplaçant fr par la langue souhaitée et script par le nom de votre script.
Bonnes traductions smile

2 liens pour connaître les correspondance de langues
http://download1.parallels.com/SiteBuil … /30801.htm
https://gist.github.com/jacobbubu/18362 … ifiers-csv

Dernière modification par metalux (Le 23/01/2016, à 09:03)

Hors ligne