Utilitaire shell pour gettext (extraction et compilation)
Posté : 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:
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 qui va compiler tout les *.po en *.mo
Les options à configurer sont en haut de fichier:
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!
Voilà j'attend vos remarques!
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.phpQui 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 compileLes 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"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