Sauf mention contraire dans les contenus, l'ensemble de ce site relève de la législation française et internationale sur le droit d'auteur et la propriété intellectuelle.
Foire Aux Questions - Internationalisation : Système de traduction Gettext dans Cartoweb
Auteur : Marie
L'internationalisation dans Cartoweb sert bien évidemment à traduire l'application dans différentes langues mais elle peut aussi être utilisée pour personnaliser l'application : par exemple, la traduction sert à développer un nom de champ peu explicite tel que "PARTPSAU" en un libellé clair et compréhensible, "Part des prairies dans la SAU (en %)" dans notre exemple.
Les chaînes à traduire et leur traduction sont regroupées dans des fichiers (une série de fichiers pour chaque langue et chaque projet). Pour changer une traduction, seuls les fichiers de traduction sont à modifier, il n'est pas necessaire de toucher les fichiers de modèles (template) ou de configuration. Ainsi, avec un minimum de fichiers à modifier, il est possible de créer une interface multilangue.
Auteur : Marie
Il existe deux scripts qui permettent de tester cela :
- /scripts/testgettetxt.sh/ : cela compilera et lancera un petit programme en C qui testera xgettext et msgfmt
- /scripts/testgettext.php/ : si gettext est correctement installé sur votre système, cela testera le fonctionnement correct de GetText avec PHP
Le script bash (.sh) doit être lancé en premier pour voir si GetText est correctement installé puis le script php pour voir si l'extension est chargée.
NB : Ces scripts nécessitent que les langues ait été correctement configurées. Ils ont été testés sous GNU/Linux avec une installation sous Debian.
On pourra également tester si le module GetText a été installé en chargeant une page php de cet type :
<?php phpinfo(); ?>
On devrait alors voir dans la page :
GetText Support enabled
Auteur : Marie
Les chaînes traduites sont à chercher dans :
- les fichiers de modèle (template, extension .tpl), les chaînes comprises entre les balises {t} {/t}
- les fichiers de configuration des plugins côté client (par exemple la taille des cartes),
- les fichiers de configuration des plugins côté serveur (par exemple l’étiquette des échelles),
- le fichier mapfile.map (nom des classes),
- le fichier layers.ini (étiquettes des couches et des groupes de couches),
- le code PHP côté serveur et client : les chaînes traduites sont en argument de la fonction I18n::gt() et de la fonction I18nNoop::gt()
Auteur : Marie
Les fichiers po regroupent l'ensemble des chaînes à traduire et leur traduction sous cette forme :
# Fichier d'origine de la chaîne msgid "chaine a traduire" msgstr "Chaîne traduite !"
Les scripts client2pot et server2pot servent à générer les fichiers po. A chaque fois que ces scripts sont lancés les nouvelles chaînes à traduire trouvées sont ajoutées aux fichiers po sans écraser les anciennes déjà présentes dans ces fichiers.
Certains caractères spéciaux nécessitent une syntaxe particulière pour être interprêtés :
- pour insérer un guillemet, il faut le faire précéder de \
- pour insérer des sauts de lignes dans une chaîne traduite il faut rajoute \n en fin de ligne, ce qui donnera :
# Fichier d'origine de la chaîne msgid "chaine a traduire" msgstr "" "Chaîne traduite \n" "avec un saut de ligne !"
Avec quoi éditer les fichiers po ?
- "à la main" avec un éditeur de texte quelconque,
Une fois les fichiers po complétés, ne pas oublier de lancer le script po2mo pour générer les fichiers mo interprétés par l'application. Si une même chaîne est présente deux fois dans les fichiers po et qu'elle est traduite de deux manières différentes, regardez dans le fichier po final généré par le script po2mo (au même endroit que les autres fichiers po mais non interprété par l'application), vous y verrez une ligne "#,fuzzy" suivie des chaînes dont la traduction est ambiguë. Il faut donc corriger cela dans les fichiers po sources.