Nov 25, 2014 6:32:30 PM Pierre LEVY avatar   809    

Internationalisation (i18n)


Principes de localisation des ressources

Le mécanisme de localisation des libellés et des messages s'appuie sur les recommendations et les outils proposés par l'API Java. Les fichiers contenant les resources textes localisées sont des fichiers "properties" ayant un suffix précisant la langue et éventuellement le pays.

La lecture des fichiers est réalisée par la classe ResourceBundle qui choisira en fonction de la locale (variable représentant une localisation basée sur une langue et un pays) parmi les fichiers suivants par exemple :

  • myplugin_messages.properties - langage par défaut
  • myplugin_messages_fr.properties - français
  • myplugin_messages_fr_FR.properties - français (France)
  • myplugin_messages_fr_CA.properties - français (Canada)
  • myplugin_messages_en_US.properties - anglais (Etats-Unis)
  • ...

Règles concernant les fichiers

Afin que Lutece puisse déterminer dans quel fichier rechercher une clé, le nom et l'emplacement des fichiers de ressources sont soumis aux règles suivantes selon le type de composant (élément du noyau, plugin ou module d'un plugin):

Sous-système du noyau
Nom des fichiers<sous-systeme> _messages.properties
Emplacement des fichiersfr.paris.lutece.portal.resources
Construction de la cléportal.<sous-systeme> .<key>
Plugin
Nom des fichiers<plugin> _messages.properties
Emplacement des fichiersfr.paris.lutece.portal.<plugin> .resources
Construction de la clé<plugin> .<key>
Module d'un Plugin
Nom des fichiers<module> _messages.properties
Emplacement des fichiersfr.paris.lutece.portal.<plugin> .modules.<module> .resources
Construction de la clémodule.<plugin> .<module> .<key>

Localisation des templates

Les templates sont automatiquement localisés au moment de leur chargement par la methode AppTemplateService.getTemplate( ... , Locale locale , ... ) . Les clés à localiser sont indiquées par le préfix #i18n suivi de la clé entourée de parenthèses.

La structure des clés est la suivante :

Prefix de localisation du bundleNom du templateNom de libellé (label, titre, bouton)
portal.<sous-systeme> . <plugin> module.<plugin> .<module> .manage_myobjectscreate_myobject titleObjectListlabelNamebuttonCreate
<h2> #i18n {document.create_document.title} ${document_type}</h2>
     <div class="form-group">
     <p>
          <label for="document_title">#i18n {document.create_document.labelDocumentTitle} * : </label>
          <input type="text" name="document_title" size="80" maxlength="255"/> 
          <span class="help-block" > #i18n {document.create_document.helpDocumentTitle} </span>
     </p>
...

Libellés i18n avec paramètres Nouveau LUTECE v5.0

Il est possible à partir de Lutece v5 de passer des paramètres à une libellé i18n utilisant le motif (pattern) de la classe Java MessageFormat dans le fichier de ressources myplugin_messages.properties :

mykey.message=My message using 2 arguments : {0} and {1}

Attention ! Les signets dans les templates ont une syntaxe différente. le # i18n{ "key" } est remplacé par $ {i18n( "key" , arg1, ... )} comme suit

${i18n( "myplugin.mykey.message" , argument1 , argument2 )}

Localisation dans le code Java

Dans le code Java, il faut recourir au service I18nService pour localiser une clé en fonction de la locale courante. NB : Les valeurs des clés doivent être déclarées dans des constantes comme dans l'exemple ci-dessous.

private static final PROPERTY_MESSAGE_MYMESSAGE = "myplugin.myMessage";

     ...
     String strLocalizedMessage = I18nService.getLocalizedString ( PROPERTY_MESSAGE_MYMESSAGE , locale );
     ...

Surcharge de valeurs i18n Nouveau LUTECE v5.0

Les valeurs par défaut des clés i18n sont surchargeables dans des fichiers placés sous /WEB-INF/conf/override/ et respectant la même arborescence.