L'internalisation consiste à adapter les libellés et textes de l'application en fonction de la langue utilisée par le contributeur.
Dans le CMS, un texte que l'on souhaite traduire sera utilisé de la manière suivante dans les fichiers XSL ou XML:
<p><i18n:text i18n:key="WELCOME_MESSAGE" i18n:catalogue="plugin.cms"/></p>
WELCOME_MESSAGE est la clé de traduction. La traduction de cette clé se trouve alors dans des fichiers que l'on appelle "catalogues i18n". Ces fichiers sont suffixés par le code de la langue :
messages_fr.xml
<message key="WELCOME_MESSAGE">Bienvenue sur le CMS Ametys</message>
messages_en.xml
<message key="WELCOME_MESSAGE">Welcome to Ametys CMS</message>
Dans Ametys il existe plusieurs catalogues i18n:
les catalogues des workspaces : workspace/[nom_workspace]/i18n: textes et libellés spécifiques au workspace
Chaque catalogue est un fichier XML respectant le format suivant :
<?xml version="1.0" encoding="UTF-8"?> <catalogue xml:lang="fr"> <message key="MSG_1">Traduction de MSG1</message> <message key="MSG_2">Traduction de MSG2</message> <message key="MSG_3">Traduction de MSG3</message> </catalogue>
Le nom du fichier d’internationalisation est de la forme messages_[lang].xml où lang est le code de langue (fr, en, es, de, ...)
Le fichier si il existe est le catalogue par défaut. C'est celui-ci qui est utilisé pour la traduction des textes dès lors que la langue utilisée ne possède pas son propre fichier de traduction.
Une exception cependant pour le catalogue de l'application : le nom des fichiers de traduction sont ici de la forme application.xml, application_en.xml, application_es.xml, ...
Pour utiliser une clé i18n dans un fichier XSL, il faut tout d'abord déclarer le namespace i18n :
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.1"> </xsl:stylesheet>
Il faut ensuite définir la clé (i18n:key) et préciser le catalogue (i18n:catalogue) à utiliser pour la traduction :
<i18n:text i18n:key="MY_KEY" i18n:catalogue="skin.{$skin}"/>
Pour le catalogue i18n:catalogue, le format dépend du catalogue :
La traduction d'une clé i18n peut contenir des paramètres. Chaque paramètre est remplacé par {x} où x est le numéro du paramètre, comme dans l'exemple ci-dessous:
<message key="MY_KEY">{0} - Copyright © {1}. Tous droits réservés.</message>
Dans un fichier XSL, les paramètres sont passés de la manière suivante:
<i18n:translate> <i18n:text i18n:key="MY_KEY" i18n:catalogue="skin.{$skin}"/> <i18n:param>Ametys CMS</i18n:param> <i18n:param><xsl:value-of select="$year"/></i18n:param> </i18n:translate>
Ce qui donnera : "Ametys CMS - Copyright 2013. Tous droits réservés."
Enfin, il est également possible d'utiliser une clé i18n au niveau des attributs d'élément HTML. Pour cela, il suffit de remplacer l'attribut par la clé i18n précédée du nom du catalogue et d'indiquer le ou les attributs à traduire via l'attribue i18n:value :
<img src="{ametys:skinURL('img/previous.png')}" i18n:attr="alt title" alt="skin.{$skin}:BUTTON_PREVIOUS" title="skin.{$skin}:GO_TO_PREVIOUS"/>