Author: athimel Date: 2011-08-02 18:20:29 +0200 (Tue, 02 Aug 2011) New Revision: 1935 Url: http://nuiton.org/repositories/revision/i18n/1935 Log: Fix #1652 - Let I18n return null when i18n's key is not found Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nLanguage.java trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/init/I18nInitializer.java trunk/nuiton-i18n/src/test/java/org/nuiton/i18n/I18nTest.java Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nLanguage.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nLanguage.java 2011-06-07 20:07:53 UTC (rev 1934) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nLanguage.java 2011-08-02 16:20:29 UTC (rev 1935) @@ -29,6 +29,7 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.i18n.bundle.I18nBundleEntry; +import java.awt.datatransfer.StringSelection; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -62,13 +63,29 @@ /** Indique le chemin du fichier dans lequel ecrire les entrees non trouvees */ protected String recordFilePath; + /** + * Used to know null should be returned when a key is not found. + * + * @since 2.4.1 + */ + protected boolean missingKeyReturnNull; + public I18nLanguage(Locale l) { this(l, null); } + public I18nLanguage(Locale l, boolean missingKeyReturnNull) { + this(l, null, missingKeyReturnNull); + } + public I18nLanguage(Locale locale, String recordFilePath) { + this(locale, recordFilePath, false); + } + + public I18nLanguage(Locale locale, String recordFilePath, boolean missingKeyReturnNull) { this.locale = locale; this.recordFilePath = recordFilePath; + this.missingKeyReturnNull = missingKeyReturnNull; } /** @@ -163,11 +180,15 @@ } try { String result = resource.getProperty(sentence); - if (null != result && !"".equals(result)) { - return result; + if (result == null || "".equals(result)) { + recordNotFound(sentence); + if (missingKeyReturnNull) { + result = null; + } else { + result = sentence; + } } - recordNotFound(sentence); - return sentence; + return result; } catch (MissingResourceException eee) { if (log.isWarnEnabled()) { log.warn("Resource " + sentence + " unavailable", eee); Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java 2011-06-07 20:07:53 UTC (rev 1934) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/I18nStore.java 2011-08-02 16:20:29 UTC (rev 1935) @@ -304,7 +304,7 @@ } I18nLanguage result; - result = new I18nLanguage(locale); + result = new I18nLanguage(locale, resolver.isMissingKeyReturnNull()); I18nBundleEntry[] entries = getBundleEntries(locale); result.load(entries, resolver.getEncoding()); Modified: trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/init/I18nInitializer.java =================================================================== --- trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/init/I18nInitializer.java 2011-06-07 20:07:53 UTC (rev 1934) +++ trunk/nuiton-i18n/src/main/java/org/nuiton/i18n/init/I18nInitializer.java 2011-08-02 16:20:29 UTC (rev 1935) @@ -67,6 +67,14 @@ */ protected I18nMessageFormatter messageFormatter; + /** + * Used to know if the I18nLanguage has to return null when a key is not + * found. + * + * @since 2.4.1 + */ + protected boolean missingKeyReturnNull; + protected I18nInitializer() { // use the default encoding @@ -74,6 +82,9 @@ // use the default message formatter messageFormatter = I18nUtil.DEFAULT_MESSAGE_FORMATTER; + + // by default, missing key returns the key itself + missingKeyReturnNull = false; } /** @@ -150,4 +161,25 @@ } this.messageFormatter = messageFormatter; } + + /** + * Get the {@code missingKeyReturnNull} to use on missing key + * + * @return the missingKeyReturnNull parameter + * @since 2.4.1 + */ + public boolean isMissingKeyReturnNull() { + return missingKeyReturnNull; + } + + /** + * Get the {@code missingKeyReturnNull} to use on missing key + * + * @param missingKeyReturnNull missingKeyReturnNull to use + * @since 2.4.1 + */ + public void setMissingKeyReturnNull(boolean missingKeyReturnNull) { + this.missingKeyReturnNull = missingKeyReturnNull; + } + } Modified: trunk/nuiton-i18n/src/test/java/org/nuiton/i18n/I18nTest.java =================================================================== --- trunk/nuiton-i18n/src/test/java/org/nuiton/i18n/I18nTest.java 2011-06-07 20:07:53 UTC (rev 1934) +++ trunk/nuiton-i18n/src/test/java/org/nuiton/i18n/I18nTest.java 2011-08-02 16:20:29 UTC (rev 1935) @@ -222,4 +222,29 @@ actual = I18n.l_(Locale.FRANCE, "key.with.date", date); Assert.assertEquals(expected, actual); } + + @Test + public void testMissingKeyReturnNotNull() { + + I18n.init(null, Locale.FRANCE); + + String key = "youhou"; + String text = I18n._(key); + Assert.assertNotNull(text); + Assert.assertEquals(key, text); + } + + @Test + public void testMissingKeyReturnNull() { + + DefaultI18nInitializer initializer = new DefaultI18nInitializer( + I18nStoreTest.class.getSimpleName()); + initializer.setMissingKeyReturnNull(true); + I18n.init(initializer, Locale.FRANCE); + + String key = "youhou"; + String text = I18n._(key); + Assert.assertNull(text); + } + }