Voici un moyen très simple et efficace pour gérer le l’internationalisation (de l’anglais “internationalization” à ne pas confondre avec “localization” qui correspond à la traduction et l’adaptation des règles de gestion à un pays) de vos applications ColdFusion.

L’internationalisation est en fait tout simplement la capacité qu’a votre application à supporter les étapes de “localization” (cf explication dans le chapitre 43 du vol 2 – Ben Forta).

Tout d’abord pensez bien à l’encodage (utf-8 par exemple) de votre application. Vous devez vérifier les trois niveau d’encodage suivant :

  • Au niveau de la JVM (-Dfile.encoding=UTF-8)
  • Au niveau de l’application (<cfprocessingdirective pageEncoding=”utf-8″ suppressWhiteSpace=”yes”>)
  • Au niveau de votre code source (les fichiers doivent impérativement être enregistrés au même format – clic droit sur le projet->Propriété)

Une fois cette vérification terminée, installez le plugin Eclipse ResourceBundle Editor sur votre IDE Eclipse il est téléchargeable sur le lien suivant : Plugin Eclipse

Copier le plugin com.essiembre.eclipse.i18n.resourcebundle_0.8.0 dans le répertoire <rép eclipse>\plugin. Il vous permettra de créer et d’éditer facilement votre dictionnaire. Pensez a redémarrer Eclipse pour prendre en compte le plugin.

Téléchargez l’exemple fournit sur le site d’Adobe et placez le composant javaRB.cfc dans votre projet.

Je préconise ensuite la création d’un répertoire à la racine du projet où seront ensuite stockés les fichiers de ressources (contenant les textes de l’application traduits dans les différentes langues)

On poursuit par une implémentation au niveau du fichier application.cfc. :

<cfset session.repLanguage = '#session.repBase#\internationalisation\'>
<!--- On récupère la langue de navigation par défaut fr_FR ou en, ...--->
                    <cfset session.userLanguageDefault = GetPageContext().getRequest().getLocale().getDefault()>
                    <!--- On récupère le choix de l'utilisateur --->
                    <cfif isDefined('url.lang')>
                        <cfset session.userLanguage = url.lang>
                    <cfelse>
                        <cfset session.userLanguage = session.userLanguageDefault>
                    </cfif>
                    <cfif isDefined('url.lang') or not isDefined('session.LANG')>
                        <!--- On récupère le set de language de l'utilisateur en fonction de la sa localisation--->
                        <!--- On créé une instance du ResourceBundle--->
                        <cfset rb=createObject("component","#session.prefixCfc#.javaRB")>
                        <!--- On récupère le jeu de messages correspondant à la langue et au module exécuté--->
                        <cfset moduleLanguage = 'revision.properties'>
                        <cfset session.LANG=rb.getResourceBundle(session.repLanguage&moduleLanguage,session.userLanguage)>
                    </cfif>                    
                    <!--- Pour faciliter la saisie --->
                    <cfset LANG = session.LANG>

 

Il vous faut ensuite créer un ressource contenant les textes de votre application. Sous Eclipse :

  • clic droit sur le dossier ‘Internationalisation’
  • new->Other->ResourceBundle, puis cliquez sur ‘Next’
  • Dans le champ BaseName, saisir le nom de la ressource, puis choisir les langues qui seront disponibles dans votre application (il sera toujours possible d’en rajouter ou d’en supprimer par la suite).

C’est le plugin installé (plus haut) qui permet l’édition des fichiers de ressources *.properties. Il vous permet d’ajouter des clés d’entrée (identifiant les textes de l’application)  et les traductions correspondantes.

 

Enfin, créer une page test.cfm comprenant le code suivant :

<cfoutput>#Session.LANG.Action.Supprimer#</cfoutput>

En fonction du passage de paramètre url.Lang et de sa valeur, le dictionnaire sera rechargé en session et offrira une nouvelle version des textes de votre application.

Pour le développeur, il dispose d’un outil d’édition intégrer à son environnement de développement Eclipse ce qui lui permet de gagner du temps lors des phases de développement.

bruno.raffet@sourceamax.com

 

 Last News