Subversion Repositories eFlore/Applications.cel

Rev

Rev 2614 | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.i18n;

import org.tela_botanica.client.cel2;
import org.tela_botanica.client.modeles.objets.Configuration;
import com.google.gwt.i18n.client.Dictionary;
import com.google.gwt.user.client.Window.Location;

/**
 * Gère l'internationalisation 
 */
public class Msg {

        /** contient un dictionnaire de messages par langue */
        //protected Map<String, Dictionary> langues;
        /** langue en cours */
        protected static String langue;
        /** langue par défaut */
        protected static String langueDefaut;
        /** langues disponibles */
        protected static String languesDisponibles;

        // A appeller par la classe mère du cel pour l'initialiser
        public static void init() {
                // lire la config pour obtenir les langues
                languesDisponibles = Configuration.getLanguesDisponibles();
                // lire la config et charger la langue par défaut
                langueDefaut = Configuration.getLangueDefaut();
                // Si la langue est précisée dans l'url on la prend, sinon on prend celle par défaut
                // @TODO: avertissement si la langue indiquée dans l'url n'est pas la bonne
                String langueActive = getLangueActiveParUrlOuDefaut();
                cel2.LogVersFirebug(langueActive);
                setLangue(langueActive);
        }

        public static void setLangue(String langue) {
                // @TODO vérifier que la langue est une clé de la Map
                Msg.langue = langue;
        }

        /**
         * Retourne un message dans la langue en cours
         * @param cle
         * @return
         */
        public static String get(String cle) {
                return get(cle, langue);
        }
        
        /**
         * Retourne un message paramétré dans la langue en cours
         * @param cle
         * @param[] params
         * @return
         */
        public static String get(String cle, String[] params) {
                return get(cle, langue, params);
        }

        /**
         * Retourne un message dans la langue demandée; s'il n'est pas trouvé, le cherche
         * dans la langue par défaut; en cas d'échec, retourne un terme générique d'avertissement
         * @param cle
         * @param langue
         * @return
         */
        public static String get(String cle, String langue) {
                String nomDictionnaire = "messages_" + langue;
                String message;
                try {
                        message = Dictionary.getDictionary(nomDictionnaire).get(cle);
                } catch (Exception e) {
                        try {
                                message = Dictionary.getDictionary("messages_" + langueDefaut).get(cle);
                        } catch (Exception me) {
                                message = "hoho c'est la merde";
                        }
                }
                return message;
        }
        
        /**
         * Retourne un message paramétré dans la langue demandée
         * @param cle
         * @param langue
         * @param[] params
         * @return
         */
        public static String get(String cle, String langue, String[] params) {
                String message = get(cle, langue);
                for (int i = 0; i < params.length; i++) {
                        message = message.replace("{"+i+"}", params[i]);
                }
                
                return message;
        }
        
        protected static String getLangueActiveParUrlOuDefaut() {
                //TODO: déplacer ceci si on est une chouette !
                return Location.getParameter("lang") == null ? langueDefaut : Location.getParameter("lang");
        }
}