I. Introduction▲
eZ Publish travaille avec deux types de traduction, statique et dynamique. Les traductions statiques c'est les textes que vous pouvez voir sur des boutons ou des messages d'erreurs qui ne sont pas régulièrement changés d'où le nom « statique ». Tandis que les traductions dynamiques, c'est les textes de contenu, donc les pages proprement dites qui sont modifiées par l'éditeur du site. Les textes dynamiques sont à la charge de l'éditeur et il peut les modifier comme bon lui semble ! Cependant il en va autrement avec les textes statiques, ils sont stockés dans des fichiers de traduction portant l'extension .ts, ces fichiers peuvent être édités avec l'outil Qt Linguist. Les textes statiques ne peuvent donc pas être modifiés depuis l'interface d'administration.
II. Description▲
Le but de cet atelier est d'expliquer deux manières permettant d'ajouter des traductions statiques à vos projets sous eZ Publish. La première méthode est très simple, il s'agit d'éditer le fichier de traduction existant et d'ajouter les traductions manquantes. La deuxième méthode consiste à développer une extension de traduction qui va s'occuper de traduire nos textes statiques, cette méthode permet d'éviter de créer un mélange avec les textes statiques existants.
II-A. Ajout direct dans le fichier de traduction▲
Les fichiers de traduction de base se trouvent dans le dossier share/translations/ma-locale/translations.ts. Une méthode simple et rapide consiste donc à éditer le fichier dans la langue souhaitée et ajouter quelques traductions dont nous avons besoin. Imaginons que nous voulons ajouter le texte « Send form » en deux langues, français et allemand. Pour réaliser ceci, éditez le fichier de traduction française se trouvant ici : share/translations/fre-CH/translations.ts. Un fichier de traduction .ts est un bête fichier XML, vous pouvez donc l'ouvrir avec votre éditeur de texte et ajouter les lignes suivantes (tout en respectant la structure XML existante) :
<context>
<name>
exemple/formulaire</name>
<message>
<source>
Send form</source>
<translation
type
=
"unfinished"
>
Envoyer le formulaire</translation>
</message>
</context>
Analysons ce petit bout d'XML, la balise context permet de définir un groupe de traduction, on pourra charger un certain context grâce au mot clé contenu dans la balise name. Ensuite c'est très facile, on peut ajouter autant de balises message que l'on veut, il faut juste spécifier la clé de traduction dans les balises source puis écrire la traduction dans les balises translation. Vous aurez peut-être remarqué l'attribut type="unfinished" dans la balise translation il s'agit uniquement d'une balise utilisée par Qt Linguist. Il est d'ailleurs utile de préciser qu'il est conseillé de créer un fichier de traduction vide, c'est-à-dire en laissant les balises translation vide. Ensuite vous pourrez traduire tous vos fichiers à l'aide de Qt Linguist dans différentes langues, mais ceci ne fait l'objet de cet atelier je ne vais donc pas entrer plus en détail.
Maintenant il faut encore ajouter la même traduction dans le fichier de traduction allemande, pour cela il suffit de l'éditer et ajouter le même code XML que dans le fichier de traduction française puis remplacer le texte situé dans les balises translation par le même texte, mais en allemand.
Une fois la nouvelle traduction ajoutée dans les deux fichiers il suffit d'ajouter le code ci-dessous dans le template voulu pour afficher le texte statique dans la bonne langue.
{"Send form"|i18n("exemple/formulaire")}
Pour les personnes qui ne sont pas familiarisées avec le langage de template d'eZ Publish, la clé « Send form » est pipée dans la fonction i18n (internationalisation) qui va automatiquement voir dans le bon fichier de langue (grâce à la locale du site) à quel texte correspond cette clé dans le « context » exemple/formulaire.
L'avantage de cette méthode c'est que l'on peut rapidement et facilement ajouter un nouveau texte statique. Mais le principal désavantage c'est que si vous faites un « upgrade » vos traductions vont disparaître ce qui n'est pas très pratique, ou alors vous devez à chaque fois recopier toutes vos traductions personnelles dans les nouveaux fichiers. De plus vos traductions personnelles sont mélangées avec celles du système.
II-B. Création d'une extension de traduction▲
Cette méthode permet d'avoir des fichiers de traduction séparés qui ne contiennent que nos traductions personnelles. C'est très facile de développer cette extension. Tout d'abord créer l'arborescence suivante :
mon-extension-de-traduction
|--- settings
| |--- site.ini.append.php
|--- translation
| |--- fre-FR
|--- translation.ts
|--- ger-DE
|--- translation.ts
|--- eng-GB
|--- translation.ts
|--- untranslated
|--- translation.ts
Placez ensuite cette extension dans le dossier extension situé à la racine de eZ Publish. Authentifiez-vous dans l'administration de votre site puis cliquez sur l'onglet « setup » ou « configuration » puis cliquez sur extension ensuite cochez votre nouvelle extension de traduction et cliquez sur OK. Voilà votre extension a été ajoutée, cependant il faut encore éditer le fichier site.ini.append.php, ajouter ceci :
<?php
/*
[RegionalSettings]
TranslationExtensions[]=mon-extension-de-traduction
*/
?>
Maintenant il s'agit d'éditer le fichier translation.ts qui se trouve dans le dossier untranslated de votre extension, ajoutez uniquement les clés de traduction, mais pas les traductions mêmes, ce fichier sera utilisé comme base pour les traductions dans d'autres langues. Ci-dessous un exemple de fichier vide :
<!DOCTYPE TS><TS>
<context>
<name>extension/mon-texte</name>
<message>
<source>Exemple 1</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Exemple 2</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
Ensuite vous pouvez copier ce fichier dans tous les dossiers de langue (fr-FR, eng-GB, etc.) et les traduire. Pour afficher un texte statique dans un template, vous pouvez utiliser le même code qu'au-dessus en spécifiant le bon context (balises name) et le bon texte source (balises source).
Cette méthode a l'avantage de bien séparer VOS traductions et celles du système, de plus lors d'upgrade vos fichiers de traduction ne seront pas écrasés.