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