Author: bpoussin Date: 2011-01-19 16:18:57 +0100 (Wed, 19 Jan 2011) New Revision: 1841 Url: http://nuiton.org/repositories/revision/i18n/1841 Log: Anomalie #1208: Be able to force locale for translation - _(Locale locale, ...) method added - old _(String message, ...) method call new _(Locale locale, ...) method - I18nStore add translation in cache when get is call (before this is done when set is done) - lazy loading of initializer in get method Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18n.java trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18n.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18n.java 2011-01-12 17:17:54 UTC (rev 1840) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18n.java 2011-01-19 15:18:57 UTC (rev 1841) @@ -118,10 +118,6 @@ * @param locale language to use */ public static void init(Locale locale) { - if (initializer == null) { - initializer = new ClassPathI18nInitializer(); - } - if (locale == null) { // use default locale locale = I18nUtil.newLocale(null, null); @@ -134,18 +130,19 @@ /** * Retourne la chaine traduite si possible. * + * @param locale la locale dans lequel on souhaite la traduction * @param message la chaine a traduire * @return la traduction si possible ou la chaine passee en parametre * sinon. */ - public static String _(String message) { + public static String _(Locale locale, String message) { // if the key to translate is null, just return null if (message == null) { return null; } - I18nLanguage language = getCurrentLanguage(); + I18nLanguage language = getStore().getLanguage(locale); String result = message; if (language != null) { result = language.translate(message); @@ -153,7 +150,7 @@ return applyFilter(result); } - /** + /** * Retourne la chaine traduite si possible. * * @param message message formate avec la meme syntaxe que {@link @@ -162,14 +159,14 @@ * @return la traduction si possible ou la chaine passee en parametre * sinon. */ - public static String _(String message, Object... args) { + public static String _(Locale locale, String message, Object... args) { // if the key to translate is null, just return null if (message == null) { return null; } - I18nLanguage language = getCurrentLanguage(); + I18nLanguage language = getStore().getLanguage(locale); String result = message; if (language != null) { result = language.translate(message); @@ -191,6 +188,34 @@ } /** + * Retourne la chaine traduite si possible. + * + * @param message la chaine a traduire + * @return la traduction si possible ou la chaine passee en parametre + * sinon. + */ + public static String _(String message) { + Locale locale = getCurrentLanguage().getLocale(); + String result = _(locale, message); + return result; + } + + /** + * Retourne la chaine traduite si possible. + * + * @param message message formate avec la meme syntaxe que {@link + * String#format} + * @param args les parametres pour le message. + * @return la traduction si possible ou la chaine passee en parametre + * sinon. + */ + public static String _(String message, Object... args) { + Locale locale = getCurrentLanguage().getLocale(); + String result = _(locale, message, args); + return result; + } + + /** * Retourne la chaine passée en argument. * <p/> * Utile surtout pour collecter les chaines et ne pas les traduires à leur @@ -261,6 +286,10 @@ } public static I18nInitializer getInitializer() { + if (initializer == null) { + initializer = new ClassPathI18nInitializer(); + } + return initializer; } @@ -274,7 +303,7 @@ public static I18nStore getStore() { if (store == null) { - store = new I18nStore(DEFAULT_LOCALE, initializer); + store = new I18nStore(DEFAULT_LOCALE, getInitializer()); } return store; } Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java 2011-01-12 17:17:54 UTC (rev 1840) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java 2011-01-19 15:18:57 UTC (rev 1841) @@ -157,13 +157,6 @@ log.debug("locale: " + locale); } I18nLanguage result = getLanguage(locale); - if (result == null) { - result = addLanguage(locale); - } else { - if (log.isDebugEnabled()) { - log.debug("using cached language : " + result); - } - } language = result; //TC-20090702 the selected langue is the default locale, usefull for // objects dealing with the default locale (swing widgets,...) @@ -197,15 +190,26 @@ * @return le language trouve dans le cache, ou null. */ protected I18nLanguage getLanguage(Locale locale) { - + I18nLanguage result = null; if (!(languages == null || languages.isEmpty())) { for (I18nLanguage l : languages) { if (locale.equals(l.getLocale())) { - return l; + result = l; + break; } } } - return null; + + if (result == null) { + result = addLanguage(locale); + } else { + if (log.isDebugEnabled()) { + log.debug("using cached language : " + result); + } + } + + + return result; } protected I18nLanguage addLanguage(Locale locale) {