Stop ACTA

  • utilisateur(s) en ligne dont 0 enregistré(s).

  • Galerie récemment modifiée : Panoramas par BOSSoNe picture
  • Toutes les Galeries

La boîte à outils de l'internationalisation

Posté le par BOSSoNe user pic
download
Ou comment créer un site multilingue grâce à PHP et GNU Gettext.

Ce dont vous avez besoin :


Arborescence et code PHP


En tout premier lieu vous devez créer à la racine de votre site un arborescence du type locale/code_langue/LC_MESSAGES (ex: locale/fr/LC_MESSAGES). C'est là que sera placé la traduction pour la langue donnée.
Pensez que votre site doit être en anglais.
En début de chacune de vos pages contenants du texte à traduire vous aurez plusieurs paramètres à définir :
Code :

<?php
$language = le code langue qui peut être récupéré à partir du User Agent du navigateur;
//correspondance entre le code langue sur 2 lettres et le code long
$locale['en'] = 'en_US';
$locale['fr'] = 'fr_FR';
$locale['de'] = 'de_DE';
$locale['es'] = 'es_ES';
//
putenv("LANG=$language");
setlocale(LC_ALL, $locale[$language]);
$domain = Utilisez ici le nom que vous avez donné à votre projet;
bindtextdomain("$domain", "./locale");
textdomain($domain);
?>

Ensuite il faut que vos chaînes de texte à traduire soit entourées par la fonction PHP gettext():
Code :

<?php echo gettext('my text to be translated.'); ?>

Création des catalogues et traduction


Une fois que toutes vos chaînes sont comprises dans des gettext() vous devez
lancer l'utilitaire xgettext qui récupère les chaînes et les stocke dans un
fichier pot :
Shell :

xgettext -D racine_du_site/ --keyword=gettext -L PHP --from-code=fr -p locale
-d domaine -o racine_du_site/locale/domaine.pot

après il vous suffit de copier le pot dans locale/fr/LC_MESSAGES/ pour une traduction en français, de changer l'extension en .po, l'ouvrir avec kbabel, faire la traduction et
générer le fichier .mo avec :
Shell :

msgfmt domaine.po -o domaine.mo


Si le texte original est mis à jours, il vous faudra relancer xgettext. Puis au
lieu de copier le fichier vous utiliserez msgmerge qui mettra votre .po à jours :
Shell :

msgmerge --backup=numbered -U racine_du_site/LC_MESSAGES/domaine.po domaine.pot

Le couteau suisse de l'i18n pour Quanta+


Pour vous aider dans cette tâche, j'ai mis au point une série de scripts et une barre d'outils pour Quanta+.

Installation


Téléchargez les scripts et décompressez l'archive dans ~/.kde/share/apps/quanta/scripts/
Téléchargez la barre d'outils et placez l'archive dans ~/.kde/share/apps/quanta/toolbars/html/
Voici un petit paquetage RPM pour Mandriva 2006 (il peut être utilisé sur n'importe quelle distribution utilisant RPM)

Pour que la barre d'outils soit chargé automatiquement à l'ouverture d'un fichier php, il vous faut créer le dossier ~/.kde/share/apps/quanta/dtep/php puis créer des liens vers les fichiers .tag contenus dans /usr/share/apps/quanta/dtep/php et copier le fichier description.rc:
Shell :

# mkdir ~/.kde/share/apps/quanta/dtep/php
# ln -s /usr/share/apps/quanta/dtep/php/*.tag ~/.kde/share/apps/quanta/dtep/php/
# cp /usr/share/apps/quanta/dtep/php/description.rc ~/.kde/share/apps/quanta/dtep/php/

Éditez ensuite ce fichier et rajoutez :
Code :

[Toolbars]
Location = html
Names = i18n

Utilisation



Le premier bouton insère <?php print(gettext( ... )); ?> autour du texte sélectionné dans votre document courant.
Ensuite pour chaque langue, vous avez une série de deux boutons :
Celui avec le drapeau lance le script destiné à la création et la mise à jours du catalogue PO. À la première exécution un fichier blacklist.i18n sera créé et le script vous demandera si vous voulez l'éditer. Placez dans ce fichier la liste des dossiers de votre projet qui ne doivent pas être scannés à la recherche de fichier à traduire. La base de votre projet est ./ doncvotre listing doit avoir cette syntaxe:
Code :

./mon_dossier1_de_premier_niveau_à_blacklister
./mon_dossier2_de_premier_niveau/mon_dossier_de_second_niveau_à_blacklister

Dans cet exemple le dossier2 sera scanné mais pas le sous-dossier.
Une fois votre liste noire éditée, vous pouvez relancer le script.
Cette fois le script scanne votre projet et crée votre catalogue PO pour la langue sélectionnée ainsi qu'un fichier i18n.php contenant la déclaration de votre domaine (son nom est déduit du fichier webprj de Quanta+) ce qui réduit le code à mettre en début de vos pages à ceci :
Code :

<?php
$language = le code langue qui peut être récupéré à partir du User Agent du navigateur;
//correspondance entre le code langue sur 2 lettres et le code long
$locale['en'] = 'en_US';
$locale['fr'] = 'fr_FR';
$locale['de'] = 'de_DE';
$locale['es'] = 'es_ES';
//
putenv("LANG=$language");
setlocale(LC_ALL, $locale[$language]);
include_once('i18n.php');
?>

Le bouton suivant vous permet d'éditer votre catalogue au moyen de KBabel, la longue phase de traduction commence.
Une fois toutes vos traductions finies, il ne vous reste plus qu'à cliquer sur le bouton rouge complètement à droite pour générer les fichiers .mo pour chaque langue.
Et voila votre site est internationalisé :)



Commentaires

Pingback

Top ➜