Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
997 aurelien 1
package org.tela_botanica.client.i18n;
992 aurelien 2
 
2613 mathias 3
import org.tela_botanica.client.modeles.objets.Configuration;
4
import com.google.gwt.i18n.client.Dictionary;
2617 mathias 5
import java.lang.Exception;
2613 mathias 6
 
992 aurelien 7
/**
2613 mathias 8
 * Gère l'internationalisation
992 aurelien 9
 */
2615 aurelien 10
public class Msg {
2613 mathias 11
 
2643 aurelien 12
	public static final String MESSAGE_INEXISTANT = "N/A";
2617 mathias 13
 
2613 mathias 14
	/** langue en cours */
2615 aurelien 15
	protected static String langue;
2613 mathias 16
	/** langue par défaut */
2615 aurelien 17
	protected static String langueDefaut;
2613 mathias 18
	/** langues disponibles */
2615 aurelien 19
	protected static String languesDisponibles;
2613 mathias 20
 
2617 mathias 21
	/**
22
	 * Initialisation - à appeler une fois avant tout utilisation
23
	 * @return true si tout s'est bien passé, false sinon
24
	 */
25
	public static boolean init() {
2613 mathias 26
		// lire la config pour obtenir les langues
2614 aurelien 27
		languesDisponibles = Configuration.getLanguesDisponibles();
2613 mathias 28
		// lire la config et charger la langue par défaut
2614 aurelien 29
		langueDefaut = Configuration.getLangueDefaut();
2617 mathias 30
		// si la langue par défaut n'existe pas, on arrête tout
31
		return setLangue(langueDefaut);
2613 mathias 32
	}
33
 
2617 mathias 34
	/**
35
	 * Initialisation - raccourci pour initialiser avec une langue
36
	 * @param langue la langue à définir jusqu'à nouvel ordre
37
	 * @return true si tout s'est bien passé, false sinon
38
	 */
39
	public static boolean init(String langue) {
40
		boolean ok = false;
41
		if (init()) {
42
			ok = setLangue(langue);
43
		}
44
		return ok;
2613 mathias 45
	}
46
 
47
	/**
2617 mathias 48
	 * [Re]définit la langue en cours
49
	 * @param langue
50
	 * @return true si la langue a été correctement définie, false
51
	 * 			sinon (si la langue n'est pas disponible)
52
	 */
53
	public static boolean setLangue(String langue) {
54
		boolean ok = false;
55
		// contrôle cracra
56
		if (languesDisponibles.indexOf(langue) != -1) { // on peut désactiver une langue même si le dictionnaire existe
57
			String nomDictionnaire = "messages_" + langue;
58
			try {
59
				Dictionary.getDictionary(nomDictionnaire);
60
				Msg.langue = langue;
61
				ok = true;
62
			} catch (Exception e) {}
63
		}
64
		return ok;
65
	}
66
 
67
	/**
68
	 * Retourne la langue actuellement définie; si on a essayé de définir
69
	 * une langue qui n'est pas disponible, retournera la langue par défaut
70
	 *
71
	 * @return la langue actuellement définie
72
	 */
73
	public static String getLangue() {
74
		return langue;
75
	}
76
 
77
	/**
78
	 * @return la langue par défaut, définie dans la configuration
79
	 */
80
	public static String getLangueDefaut() {
81
		return langueDefaut;
82
	}
83
 
84
	/**
85
	 * @return les langues disponibles, définies dans la configuration
86
	 */
87
	public static String getLanguesDisponibles() {
88
		return languesDisponibles;
89
	}
90
 
91
	/**
2613 mathias 92
	 * Retourne un message dans la langue en cours
93
	 * @param cle
94
	 * @return
95
	 */
2615 aurelien 96
	public static String get(String cle) {
2614 aurelien 97
		return get(cle, langue);
2613 mathias 98
	}
2620 mathias 99
 
2614 aurelien 100
	/**
2620 mathias 101
	 * Retourne un message dans la langue en cours,
102
	 * avec la première lettre en majuscule
103
	 * @param cle
104
	 * @return
105
	 */
106
	public static String Get(String cle) {
107
		return Get(cle, langue);
108
	}
109
 
110
	/**
2614 aurelien 111
	 * Retourne un message paramétré dans la langue en cours
112
	 * @param cle
113
	 * @param[] params
114
	 * @return
115
	 */
2615 aurelien 116
	public static String get(String cle, String[] params) {
2614 aurelien 117
		return get(cle, langue, params);
118
	}
2613 mathias 119
 
120
	/**
2620 mathias 121
	 * Retourne un message paramétré dans la langue en cours,
122
	 * avec la première lettre en majuscule
123
	 * @param cle
124
	 * @param[] params
125
	 * @return
126
	 */
127
	public static String Get(String cle, String[] params) {
128
		return Get(cle, langue, params);
129
	}
130
 
131
	/**
2613 mathias 132
	 * Retourne un message dans la langue demandée; s'il n'est pas trouvé, le cherche
133
	 * dans la langue par défaut; en cas d'échec, retourne un terme générique d'avertissement
2617 mathias 134
	 * @param cle l'identifiant du message demandé
135
	 * @param langue la langue dans laquelle on souhaite l'obtenir
136
	 * @return le message dans la langue en cours s'il existe, sinon le
137
	 * 			message dans la langue par défaut s'il existe, sinon la
138
	 * 			chaîne définie dans Msg.MESSAGE_INEXISTANT
2613 mathias 139
	 */
2615 aurelien 140
	public static String get(String cle, String langue) {
2613 mathias 141
		String nomDictionnaire = "messages_" + langue;
142
		String message;
143
		try {
144
			message = Dictionary.getDictionary(nomDictionnaire).get(cle);
145
		} catch (Exception e) {
146
			try {
147
				message = Dictionary.getDictionary("messages_" + langueDefaut).get(cle);
148
			} catch (Exception me) {
2617 mathias 149
				message = Msg.MESSAGE_INEXISTANT;
2613 mathias 150
			}
151
		}
152
		return message;
153
	}
2620 mathias 154
 
2614 aurelien 155
	/**
2620 mathias 156
	 * Comme get(String cle, String langue), mais retourne le message
157
	 * avec la première lettre en majuscule
158
	 * @param cle
159
	 * @param langue
160
	 * @return
161
	 */
162
	public static String Get(String cle, String langue) {
163
		String message = get(cle, langue);
164
		return message.substring(0,1).toUpperCase() + message.substring(1);
165
	}
166
 
167
	/**
2614 aurelien 168
	 * Retourne un message paramétré dans la langue demandée
169
	 * @param cle
170
	 * @param langue
171
	 * @param[] params
172
	 * @return
173
	 */
2615 aurelien 174
	public static String get(String cle, String langue, String[] params) {
2614 aurelien 175
		String message = get(cle, langue);
176
		for (int i = 0; i < params.length; i++) {
177
			message = message.replace("{"+i+"}", params[i]);
178
		}
179
 
180
		return message;
181
	}
2620 mathias 182
 
183
	/**
184
	 * Comme get(String cle, String langue, String[] params), mais retourne le
185
	 * message avec la première lettre en majuscule
186
	 * @param cle
187
	 * @param langue
188
	 * @param params
189
	 * @return
190
	 */
191
	public static String Get(String cle, String langue, String[] params) {
192
		String message = get(cle, langue, params);
193
		return message.substring(0,1).toUpperCase() + message.substring(1);
194
	}
992 aurelien 195
}