From d4520449d15ac0b78056c6728372b7cd4da0d55f Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Thu, 16 Jun 2005 23:34:30 +0000 Subject: [PATCH] ICU-4582 getFunctionalEquivalent X-SVN-Rev: 17929 --- .../com/ibm/icu/dev/test/util/ICUResourceBundleTest.java | 8 ++++++++ icu4j/src/com/ibm/icu/impl/ICUResourceBundle.java | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/icu4j/src/com/ibm/icu/dev/test/util/ICUResourceBundleTest.java b/icu4j/src/com/ibm/icu/dev/test/util/ICUResourceBundleTest.java index 1b7c15bcf2b..54f890e3e5c 100644 --- a/icu4j/src/com/ibm/icu/dev/test/util/ICUResourceBundleTest.java +++ b/icu4j/src/com/ibm/icu/dev/test/util/ICUResourceBundleTest.java @@ -768,6 +768,14 @@ public final class ICUResourceBundleTest extends TestFmwk { "t", "hi@collation=direct", "hi@collation=direct", "f", "hi_AU@collation=direct;currency=CHF;calendar=buddhist", "hi@collation=direct", "f", "hi_AU@collation=standard;currency=CHF;calendar=buddhist", "hi", + "t", "de_DE@collation=pinyin", "de", /* bug 4582 tests */ + "f", "de_DE_BONN@collation=pinyin", "de", + "t", "nl", "root", + "t", "nl_NL", "root", + "f", "nl_NL_EEXT", "root", + "t", "nl@collation=stroke", "root", + "t", "nl_NL@collation=stroke", "root", + "f", "nl_NL_EEXT@collation=stroke", "root", }; String F_STR = "f"; diff --git a/icu4j/src/com/ibm/icu/impl/ICUResourceBundle.java b/icu4j/src/com/ibm/icu/impl/ICUResourceBundle.java index 4205240c155..7303f293bea 100644 --- a/icu4j/src/com/ibm/icu/impl/ICUResourceBundle.java +++ b/icu4j/src/com/ibm/icu/impl/ICUResourceBundle.java @@ -516,9 +516,16 @@ public abstract class ICUResourceBundle extends UResourceBundle { do { try { ICUResourceBundle irb = r.get(resName); - /* UResourceBundle urb = */irb.get(kwVal); + UResourceBundle urb = irb.get(kwVal); + // if we didn't fail before this.. fullBase = r.getULocale(); + + // If the fetched item (urb) is in a different locale than our outer locale (r/fullBase) + // then we are in a 'fallback' situation. treat as a missing resource situation. + if(!fullBase.toString().equals(urb.getLocale().toString())) { + fullBase = null; // fallback condition. Loop and try again. + } // If we fell back to an ancestor of the old 'default', // we need to re calculate the "default" keyword.