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