Java : gestion des messages

java.jpgVoici un exemple de code permettant la gestion de message en Java. Cette petite classe mono-instance charge en fonction de la langue le fichier propriété contenant les messages. Elle permet aussi de gérer le remplacement des champs dynamique dans les messages.

Vous trouverez le fichier java à la fin de ce post.

Comme vous pouvez le voir, cette classe est très simple. Le code suivant permet de charger les messages selon la langue :

msg = ResourceBundle.getBundle("message",new Locale(ApplicationPreference.getLanguage(),"") );

Cette instruction chargera le fichier message.properties qui se trouve dans mon classpath. Si la langue est “fr” alors le fichier chargeras le fichier message_fr.properties si il n’existe pas il tenteras de charger le fichier correspondant à la langue et sinon il chargera en dernier recours message.properties (et si il ne le trouve pas alors une exception est levé).

Ensuite deux fonctions permettent de récupérer les messages selon la clef de ceux-ci. Pour pouvoir gérer les message avec des chaine de caractère dynamique on utilise la classe MessageFormat. Voici le code correspondant :

return MessageFormat.format(getInstance().msg.getString(key),arguments);

La variable “arguments” est une liste d’objet.

Comment cela fonctionne ? Très simplement si le message dans le fichier properties est :

msg1=My name is {1} and not {2}

Alors avec une liste de string contenant Sebastien et Eric, on obtient le message suivant :

My name is Sebastien and not Eric

Voila Voila bonne continuation…

package com.cba.socialBridge.util.application;
 
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
 
public class ApplicationMessage
{
static protected ApplicationMessage instance=null;
static public String[] languageList     = { "Français", "English" };
static public String[] languageListCode = { "fr", "en" };
protected ResourceBundle msg;
 
private ApplicationMessage()
{
super();
msg = ResourceBundle.getBundle("message", new Locale(ApplicationPreference.getLanguage(),"") );
}
 
public static int getIndexLanguageInLanguageList()
{
int index=-1;
for (int i=0 ; index==-1 && i
                {
                        if ( languageListCode[i].equals(ApplicationPreference.getLanguage()) )
                        {
                                index = i;
                        }
                }
 
                return index;
        }
 
        protected static ApplicationMessage getInstance()
        {
                if ( instance==null )
                {
                        instance = new ApplicationMessage();
                }
 
                return instance;
        }
 
        public static String getMessage(String key)
        {
                String  result = "?" + key + "?";
 
                try
                {
                        result = getInstance().msg.getString(key);
                }
                catch(Exception e)
                {
                        ApplicationLogger.getLogger().error("There is a problem with messages management : " + e.getMessage() );
                }
 
                if ( result == null )
                 result = "?" + key + "?";
 
                return result;
        }
 
        public static String getMessage(String key,Object[] arguments)
        {
                String  result = "?" + key + "?";
 
                try
                {
                        result = MessageFormat.format(getInstance().msg.getString(key),
                                        arguments);
                }
                catch(Exception e)
                {
                        ApplicationLogger.getLogger().error("There is a problem with messages management : " + e.getMessage() );
                }
 
                if ( result == null )
                 result = "?" + key + "?";
 
                return result;
        }
}
  • Digg
  • del.icio.us
  • Technorati
  • Facebook
  • Google
  • YahooMyWeb

Tags: , , ,   Catégorie : Développement