Reviewers: pdr,
Description:
Fix handling of search order where particular regions have different
default scripts than the base language, such as pa_PK and zh_TW.
Patch by: jat
Review by: pdr
Please review this at http://gwt-code-reviews.appspot.com/1022801/show
Affected files:
M user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
M user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
Index: user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java
===================================================================
--- user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java (revision 9111)
+++ user/src/com/google/gwt/i18n/server/GwtLocaleImpl.java (working copy)
@@ -423,7 +423,15 @@
initialScript = DefaultLanguageScripts.getDefaultScript(language,
region);
}
- List<GwtLocale> thisGroup = new
ArrayList<GwtLocale>(this.getAliases());
+ List<GwtLocale> thisGroup = new ArrayList<GwtLocale>();
+ if (initialScript != null) {
+ // Make sure the default script is listed first in the search
list,
+ // which ensures that zh_Hant appears before zh in the search
list for
+ // zh_TW.
+ thisGroup.add(factory.fromComponents(language, initialScript,
region,
+ variant));
+ }
+ thisGroup.add(this);
seen.addAll(thisGroup);
GwtLocale defLocale = factory.getDefault();
seen.add(defLocale);
Index: user/test/com/google/gwt/i18n/server/GwtLocaleTest.java
===================================================================
--- user/test/com/google/gwt/i18n/server/GwtLocaleTest.java (revision 9111)
+++ user/test/com/google/gwt/i18n/server/GwtLocaleTest.java (working copy)
@@ -260,9 +260,13 @@
assertContainsAndGetPosition(searchList, factory.fromString("no"));
GwtLocale zhTW = factory.fromString("zh_TW");
searchList = zhTW.getCompleteSearchList();
- assertContainsAndGetPosition(searchList,
factory.fromString("zh_Hant"));
+ int hantPos = assertContainsAndGetPosition(searchList,
+ factory.fromString("zh_Hant"));
+ int zhPos = assertContainsAndGetPosition(searchList,
+ factory.fromString("zh"));
assertNotContains(searchList, factory.fromString("zh_Hans"));
- // TODO: explicitly verify search list for zh_TW
+ assertTrue("zh_Hant should appear before zh in zh_TW searchlist"
+ + searchList, hantPos < zhPos);
idx_default = assertContainsAndGetPosition(searchList,
factory.getDefault());
assertEquals(searchList.size() - 1, idx_default);
@@ -274,10 +278,8 @@
int arabPos = assertContainsAndGetPosition(searchList, paArab);
int paPos = assertContainsAndGetPosition(searchList, pa);
assertNotContains(searchList, paGuru);
- // See TODO in {...@link GwtLocaleImpl#getCompleteSearchList()} for what
is
- // needed for this test to pass (and likewise for zh_Hant appearing
before
- // zh in the search list for zh_TW).
- // assertTrue(arabPos < paPos);
+ assertTrue("pa_Arab should appear before pa in pa_PK searchlist"
+ + searchList, arabPos < paPos);
}
private <T> int assertContainsAndGetPosition(List<T> list, T value) {
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors