Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Cocoon i18n
Utiliser les traductions
[modifier | modifier le wikicode]On utilise la balise <i18n:text> pour insérer une chaîne à traduire. Une chaîne traduite est constituée de :
- une chaîne, qui sera affichée ;
- une clé (key), qui identifie de façon unique la chaîne que l'on souhaite affichée ;
- un catalogue (catalogue), qui indique où l'on va chercher la clé. Si cet attribut n'est pas présent, on cherchera la clé dans le catalogue défini par défaut (cf. <app>/catalogues-i18n.xmap).
Définition d'une traduction
[modifier | modifier le wikicode]Dans notre catalogue, on ajouter un élément <message> pour chaque chaîne :
<message key="edit.menu.monModule.intro">chaine affiché si tout marche correctement.</message>
En indiquant à chaque fois :
- la clé : key ;
- le contenu de la chaîne à afficher.
Utilisation d'une traduction
[modifier | modifier le wikicode]L'espace de nom i18n
[modifier | modifier le wikicode]Dans la feuille XSL générant notre fichier de sortie, on ajoutera au moins le espace de nom (xmlns) pour l'i18n :
<xsl:stylesheet version="2.0"
xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
exclude-result-prefixes="i18n">
Affichage : <i18n:text>
[modifier | modifier le wikicode]Puis on insérera notre chaîne de la façon suivante :
<i18n:text catalogue="module-monModule" key="edit.menu.monModule.intro">
chaîne affichée si le catalogue ou la clé pose problème.
</i18n:text>
En précisant bien :
- la clé : key ;
- le catalogue : catalogue, si ce n'est pas celui par défault ;
- un contenu de secours si la traduction souhaitée manque.
Contenu dynamique avec <i18n:translate>
[modifier | modifier le wikicode]Cocoon permet l'utilisation de placeholder pouvant être dynamiquement substituer par des variables. Ceci est possible avec l'élément <i18n:translate>.
Il faudra appeler la chaîne dynamique de la façon suivante
<i18n:translate>
<i18n:text catalogue="monCatalogue" key="maCleI18n" >monFallback</i18n:text>
<i18n:param><xsl:value-of select="$monParametre"/></i18n:param>
</i18n:translate>
Et définir son contenu avec indiquant le numéro du paramètre en crochets {#} comme suit :
<message key="maCleI18n">blabla bla <span class="maClass"> ({0})</span></message>
<message key="maCleI18n">blabla bla <href="{0}/wrong.html" > ({0})</span></message>
Ajouter un catalogue
[modifier | modifier le wikicode]Catalogue des traductions
[modifier | modifier le wikicode]On commence par créer un nouveau fichier aussi appelé catalogue, dans lequel on définira les clés et les chaînes associées. On place généralement les fichiers de traduction dans <app>/theme/i18n/local/. Par exemple on créera le fichier <app>/theme/i18n/local/module-monModule.xml avec le contenu minimum suivant :
<?xml version="1.0" encoding="UTF-8"?>
<catalogue xmlns:xhtml="http://www.w3.org/1999/xhtml">
<message key="monModule.maCle">La chaine à afficher</message>
<!-- ... -->
</catalogue>
Déclarer le catalogue à l'application
[modifier | modifier le wikicode]Ensuite, il faut déclarer à l'application la présence de notre nouveau catalogue, de façon à pouvoir trouver les traductions de nos clés. On surchargera le fichier <app>/catalogues-i18n.xmap de façon à indiquer à l'application le chemin vers les nouveaux fichiers de traductions.
Catalogues et transformeur
[modifier | modifier le wikicode]Le catalogue que vous rajouter doit être placer dans le <map:transformer> dont l'attribut name correspond à celui que vous appeler dans votre pipeline. Ci-dessous un pipeline faisant appel au transformateur prefixI18n-normal :
<map:act type="locale">
<map:transform type="prefixI18n-normal">
<map:parameter name="locale" value="{locale}"/>
</map:transform>
</map:act>
On déclarera donc notre catalogue dans le transformateur prefixI18n-normal du fichier <app>/catalogues-i18n.xmap :
<map:transformer name="prefixI18n-normal" logger="sitemap.transformer.prefixI18n" src="org.pleade.transformation.PrefixI18nTransformer">
...
</map:transformer>
Ajout du catalogue
[modifier | modifier le wikicode]Une fois le bon tranformateur trouvé, on rajouter notre catalogue de la façon suivante :
<!-- Catalogue spécifique au module monModule -->
<catalogue id="module-monModule" name="module-monModule">
<location>${pleade.theme-dir}/i18n/local</location>
<location>${pleade.theme-dir}/i18n</location>
</catalogue>
Voir aussi
[modifier | modifier le wikicode]- I18n Transformer (doc officiel)
- Class I18nTransformer (spécification Java)
Références
[modifier | modifier le wikicode]<references/>