Internationalisation (i18n)


L'internalisation consiste à adapter les libellés et textes de l'application en fonction de la langue utilisée par le contributeur.

Comment ça marche ?

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>

Fichiers de catalogues i18n

Dans Ametys il existe plusieurs catalogues i18n:

  • les catalogues des plugins : plugins/[nom_plugin]/i18n: textes et libellés spécifiques au plugin
  • les catalogues des workspaces : workspace/[nom_workspace]/i18n: textes et libellés spécifiques au workspace

  • les catalogues des chartes graphiques : skins/[nom_skin]/i18n: textes et libellés spécifiques à la charte graphique
  • le catalogue de l'application: WEB-INF/i18n

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, ...

Utilisation d'une clé i18n

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 :

  • pour un catalogue de plugin : plugin.[nom_plugin]
  • pour un catalogue de workspace: workspace.[nom_workspace]
  • pour un catalogue de charte graphique : skin.[nom_skin]
  • pour le catalogue de l'application : application

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"/>
Retour en haut