Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions src/main/java/org/codehaus/plexus/i18n/DefaultI18N.java
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,10 @@ private synchronized ResourceBundle cacheBundle(String bundleName, Locale locale
if (rb == null) {
bundlesByLocale = (bundlesByLocale == null ? new HashMap<>(3) : new HashMap<>(bundlesByLocale));
try {
rb = ResourceBundle.getBundle(bundleName, locale);
rb = ResourceBundle.getBundle(
bundleName,
locale,
ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_DEFAULT));
} catch (MissingResourceException e) {
rb = findBundleByLocale(bundleName, locale, bundlesByLocale);
if (rb == null) {
Expand Down Expand Up @@ -371,7 +374,10 @@ private ResourceBundle findBundleByLocale(
*/
private ResourceBundle getBundleIgnoreException(String bundleName, Locale locale) {
try {
return ResourceBundle.getBundle(bundleName, locale);
return ResourceBundle.getBundle(
bundleName,
locale,
ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_DEFAULT));
} catch (MissingResourceException ignored) {
return null;
}
Expand Down
23 changes: 22 additions & 1 deletion src/test/java/org/codehaus/plexus/i18n/DefaultI18NTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void testLocalization() {
Locale.setDefault(Locale.FRENCH);
try {
String s7 = i18n.getString("org.codehaus.plexus.i18n.i18n", Locale.ENGLISH, "key1");
assertEquals("[fr] value1", s7, "Not picking up new default locale: fr");
assertEquals("[] value1", s7, "Should not fall back to default locale, use root bundle instead");

String s8 = i18n.getString("org.codehaus.plexus.i18n.i18n", Locale.ITALIAN, "key1");
assertEquals("[it] value1", s8, "Unable to retrieve localized properties for locale: it");
Expand Down Expand Up @@ -141,4 +141,25 @@ public void testLocalizedMessagesWithNonStandardLocale() {
String s0 = i18n.getString("name", new Locale("xx"));
assertEquals("plexus", s0);
}

@Test
public void testNoFallbackToDefaultLocale() {
// Save the current default locale
Locale oldDefault = Locale.getDefault();

try {
// Set default locale to German
Locale.setDefault(Locale.GERMAN);

// Request a locale that doesn't have a bundle (Hebrew - Israel)
// Expected: should get the root bundle with "[] value1"
// Bug: currently gets the German bundle with "[de] value1"
String result = i18n.getString("org.codehaus.plexus.i18n.i18n", new Locale("iw", "IL"), "key1");

assertEquals("[] value1", result, "Should get root bundle, not default locale bundle");
} finally {
// Restore the original default locale
Locale.setDefault(oldDefault);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
key1 = [de] value1
thanks.message = Danke {0}!
thanks.message1 = Danke {0} {1}!
thanks.message2 = Danke {0} {1}!