Utilitaire shell pour gettext (extraction et compilation)

ViPHP
ViPHP | 3607 Messages

27 juil. 2010, 15:17

Bonjour à tous,

Je suis en train de passer un de mes projets à gettext pour l'internationalisation...
Afin d'industrialiser un poil le processus, je me suis créer un fichier sh pour pouvoir faire ce genre d'appels:

Code : Tout sélectionner

gettext_utils extract path/to/file.php

Qui va me générer automatiquement les .po correspondant dans les bons dossiers...
(index.php donne index.po ou index.php.po afin de pouvoir avoir index.html.po sans conflits)
Ou encore

Code : Tout sélectionner

gettext_utils compile
qui va compiler tout les *.po en *.mo

Les options à configurer sont en haut de fichier:

Code : Tout sélectionner

# le répertoire vers les locales LANG_DIR="/path/to/locale" #initialisation du tableau des langues supportées #séparer par des espaces LANGS="fr_FR de_DE en_US" #encodage utilisé par le fichier cible pour l'extraction ENCODING="iso-8859-1" #fonctions à reconnaitre pour l'utilisation de xgettext #ajouter -k devant chaque nom de fonction et séparer par des espaces FUNC_NAME="-k_ -kt -kt1 -kt2 -kt3 -kgettext -kngettext"
Avertissement je ne suis pas du tout spécialiste shell, donc le script est surement codé avec les pieds :)
J'attends vos suggestion d'amélioration avec impatience!

Code : Tout sélectionner

#!/bin/sh #répertoire contenant les fichiers de traduction #arborescence: # $LANG_DIR/ # fr_FR/ # LC_MESSAGES/ # en_EN/ # LC_MESSAGES/ # etc LANG_DIR="/path/to/locale" #initialisation du tableau LANGS="fr_FR de_DE en_US" #encodage utilisé pour l'extraction ENCODING="iso-8859-1" #fonctions à reconnaitre #ajouter -k devant chaque nom de fonction et séparer par des espaces FUNC_NAME="-k_ -kt -kt1 -kt2 -kt3 -kgettext -kngettext" case $1 in extract) # Récupération du nom de fichier sans l'extension FULL_FILE_NAME=$(basename $2) FILE_NAME=${FULL_FILE_NAME%.*} # Utiliser ensuite $FULL_FILE_NAME ou $FILE_NAME # Celon le résultat voulu: # - file.po ou # - file.ext.po echo "\nExtraction...\n" for LANG in $LANGS; do # construction des chemins FILE_DEST="$LANG_DIR/$LANG/LC_MESSAGES/$FILE_NAME.po" # création du fichier si besoin touch $FILE_DEST; # extraction des données xgettext $FUNC_NAME --from-code=$ENCODING -j $2 -o $FILE_DEST echo "traductions extraites de $2 vers:\n$FILE_DEST"; done echo "\nTraductions extraites!\n" exit 1 ;; compile) echo "\nCompilation en cours...\n"; #parcours de chaque dossier de langue for LANG in $LANGS; do # liste des fichiers à traiter PO_FILTER="$LANG_DIR/$LANG/LC_MESSAGES/*.po" PO_LIST=$(ls $PO_FILTER) # parcours de la liste des fichiers for PO_FILE in $PO_LIST do # Récupération du chemin du fichier .po sans l'extension FILE_NAME=$(echo "$PO_FILE" | cut -f1 -d '.') # Chemin vers le .mo MO_FILE="$FILE_NAME.mo" # Compilation msgfmt -o $MO_FILE $PO_FILE echo "$PO_FILE => $MO_FILE"; done done echo "\nTout les fichiers compilés!\n"; exit 1 ;; *) echo "Usage: gettext_utils {compile|extract} {FILE_NAME}\n Extract translations from a file gettext_utils extract path/to/file.ext\n or compile all *.po files\n gettext_utils compile"; exit 1 ;; esac ;; exit 0
Voilà j'attend vos remarques!