Skip to content

Commit dde2420

Browse files
authored
Merge pull request #64 from steventamm/icu75
update to ICU 75
2 parents 16f8744 + c5a3e3a commit dde2420

19 files changed

+254
-240
lines changed

pom.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@
4343
<properties>
4444
<maven.compiler.release>11</maven.compiler.release>
4545
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
46-
<icu4j.version>69.1</icu4j.version>
47-
<icu4j-localespi.version>69.1</icu4j-localespi.version>
46+
<icu4j.version>75.1</icu4j.version>
47+
<icu4j-localespi.version>75.1</icu4j-localespi.version>
4848
<picocli.version>4.1.4</picocli.version>
4949
<caffeine.version>2.8.0</caffeine.version>
5050
</properties>
@@ -78,7 +78,7 @@
7878
<version>3.0.0-M8</version>
7979
<configuration>
8080
<!-- suppress all loggings for unit test -->
81-
<argLine>@{argLine} -Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
81+
<argLine>@{argLine} -Djava.util.logging.config.file=src/test/resources/logging.properties -Dpolyglot.engine.WarnInterpreterOnly=false</argLine>
8282
</configuration>
8383
</plugin>
8484
<plugin>
@@ -270,7 +270,7 @@
270270
<dependency>
271271
<groupId>com.google.guava</groupId>
272272
<artifactId>guava</artifactId>
273-
<version>32.0.0-jre</version>
273+
<version>33.4.0-jre</version>
274274
</dependency>
275275

276276
<dependency>
@@ -320,13 +320,13 @@
320320
<dependency>
321321
<groupId>org.graalvm.js</groupId>
322322
<artifactId>js</artifactId>
323-
<version>20.3.0</version>
323+
<version>21.3.13</version>
324324
<scope>test</scope>
325325
</dependency>
326326
<dependency>
327327
<groupId>org.graalvm.js</groupId>
328328
<artifactId>js-scriptengine</artifactId>
329-
<version>20.3.0</version>
329+
<version>21.3.13</version>
330330
<scope>test</scope>
331331
</dependency>
332332

src/main/java/com/force/i18n/BaseLocalizer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ private static boolean shouldFixJdkDateBug(Locale locale) {
344344
// GregorianCalendar. These changes were applied to the JDK as well.
345345
Locale overrideDateLocale(Locale aLocale) {
346346
if (isSaudiArabia(aLocale)) {
347-
return new Locale("ar");
347+
return new Locale.Builder().setLanguage("ar").build();
348348
}
349349
return aLocale;
350350
}

src/main/java/com/force/i18n/DefaultHumanLanguageImpl.java

Lines changed: 109 additions & 109 deletions
Large diffs are not rendered by default.

src/main/java/com/force/i18n/HumanLanguage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ public static Locale getTranslationFallbackLanguageLocale(Locale locale) {
375375
return Locale.UK;
376376
}
377377
default:
378-
return new Locale(locale.getLanguage());
378+
return new Locale.Builder().setLanguage(locale.getLanguage()).build();
379379
}
380380
}
381381

src/main/java/com/force/i18n/LocaleUtils.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ public Locale getLocaleByIsoCode(String isoCode) {
3838
if (oldValue != null) return oldValue;
3939
Locale newValue=null;
4040
if (isoCode.length() == 2) {
41-
newValue = new Locale(isoCode);
41+
newValue = new Locale.Builder().setLanguage(isoCode).build();
4242
} else if (isoCode.length() == 5) {
4343
String countryIsoCode = isoCode.substring(3, 5);
4444
String langIsoCode = isoCode.substring(0, 2);
45-
newValue = new Locale(langIsoCode, countryIsoCode);
45+
newValue = new Locale.Builder().setLanguage(langIsoCode).setRegion(countryIsoCode).build();
4646
} else {
4747
List<String> split = Lists.newArrayList(Splitter.on('_').split(isoCode));
4848
String language = split.get(0);
4949
String country = split.size() > 1 ? split.get(1) : "";
5050
String variant = split.size() > 2 ? split.get(2) : "";
51-
newValue = new Locale(language, country, variant);
51+
newValue = new Locale.Builder().setLanguage(language).setRegion(country).setVariant(variant).build();
5252
}
5353
if (newValue != null) uniqueLocaleMap.put(isoCode, newValue);
5454
return newValue;
@@ -77,10 +77,10 @@ public Locale getLocaleFromHttpInput(String str) {
7777
}
7878
// OK, we should have "de" or "de-de";
7979
if (locale.length() == 2) {
80-
return new Locale(locale.toLowerCase());
80+
return new Locale.Builder().setLanguage(locale.toLowerCase()).build();
8181
} else if (locale.length() == 5) {
8282
if (locale.charAt(2) != '-') return null;
83-
return new Locale(locale.substring(0,2).toLowerCase(), locale.substring(3,5).toUpperCase());
83+
return new Locale.Builder().setLanguage(locale.substring(0,2).toLowerCase()).setRegion(locale.substring(3,5).toUpperCase()).build();
8484
} else {
8585
return null;
8686
}

src/main/java/com/force/i18n/TextDirection.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ public static TextDirection getDirection(String lang) {
123123
case "lrc":
124124
case "mzn":
125125
case "pnb":
126+
case "nqo":
127+
case "syr":
126128
return invertIfNotNormalDirection(RTL);
127129
default:
128130
}

src/main/java/com/force/i18n/commons/util/collection/LruCache.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
package com.force.i18n.commons.util.collection;
99

1010
import java.util.LinkedHashMap;
11-
import java.util.Map.Entry;
11+
import java.util.Map;
1212

1313
import com.google.common.annotations.Beta;
1414

@@ -50,7 +50,7 @@ public LruCache(int capacity, int initialCapacity, boolean accessOrder) {
5050
}
5151

5252
@Override
53-
protected boolean removeEldestEntry(Entry<K, V> eldest) {
53+
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
5454
return size() > capacity;
5555
}
5656

src/main/java/com/force/i18n/grammar/offline/PluralRulesJsImpl.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*
1616
* Based on an implementation from an Intl polyfill, but with some updates to handle negative numbers
1717
* @see <a href="https://github.com/eemeli/make-plural.js">make-plural.js</a>
18+
* @see <a href="https://www.unicode.org/cldr/charts/46/supplemental/language_plural_rules.html">plural rules from CLDR</a>
1819
* @author stamm
1920
* @since 1.1
2021
*/
@@ -23,6 +24,7 @@ public class PluralRulesJsImpl {
2324
private final static String ONE = "function (n) {return n == 1 || n == -1 ? 'one' : 'other';}";
2425
private final static String ONE_OR_ZERO = "function (n) {return n == 0 || n == 1 || n == -1 ? 'one' : 'other';}";
2526
private final static String EXACT_ONE = "function (n) {return n == 1 && !String(n).split('.')[1] ? 'one' : 'other';}";
27+
private final static String EXACT_ONE_OR_NEG_ONE = "function (n) {return (n == 1 || n == -1) && !String(n).split('.')[1] ? 'one' : 'other';}";
2628

2729
public static String getSelectFunction(Locale locale) {
2830
String override = getSelectFunctionOverride(locale);
@@ -75,7 +77,7 @@ public static String getSelectFunctionOverride(Locale locale) {
7577
//case "dz":return noDiff;
7678
//case "ee":return ONE;
7779
case GREEK:return ONE;
78-
case ENGLISH:return EXACT_ONE;
80+
case ENGLISH:return EXACT_ONE_OR_NEG_ONE;
7981
case ESPERANTO:return ONE;
8082
case SPANISH:return ONE;
8183
case ESTONIAN:return EXACT_ONE;
@@ -93,7 +95,8 @@ public static String getSelectFunctionOverride(Locale locale) {
9395
case HEBREW_ISO:
9496
case HEBREW:return "function he(n) {\n"+
9597
"var s = String(n).split('.'), i = s[0], v0 = !s[1], t0 = Number(s[0]) == n, n10 = t0 && s[0].slice(-1);\n"+
96-
"return n == 1 && v0 ? 'one' : i == 2 && v0 ? 'two' : v0 && (n < 0 || n > 10) && t0 && n10 == 0 ? 'many' : 'other';}";
98+
// "return n == 1 && v0 ? 'one' : i == 2 && v0 ? 'two' : v0 && (n < 0 || n > 10) && t0 && n10 == 0 ? 'many' : 'other';}";
99+
"return (i == 1 && v0) || (i == 0 && !v0) ? 'one' : i == 2 && v0 ? 'two' : 'other';}"; // ICU > 70
97100

98101
case HUNGARIAN:return ONE;
99102
case ARMENIAN:return "function hy(n) {return n >= 0 && n < 2 ? 'one' : 'other';}";
@@ -102,8 +105,9 @@ public static String getSelectFunctionOverride(Locale locale) {
102105
//case "id":return noDiff;
103106
//case "ig":return noDiff;
104107
case ICELANDIC:return "function is(n) {"+
105-
"var s = String(n).split('.'),i = s[0],t0 = Number(s[0]) == n, i10 = i.slice(-1), i100 = i.slice(-2);"+
106-
"return t0 && i10 == 1 && i100 != 11 || !t0 ? 'one' : 'other';}";
108+
"var s = String(n).split('.'),i = s[0],t = Number(s[1]),t0 = Number(s[0]) == n, i10 = i.slice(-1), i100 = i.slice(-2), t10 = t % 10, t100 = t % 100;"+
109+
// "return t0 && i10 == 1 && i100 != 11 || !t0 ? 'one' : 'other';}"; // ICU < 70
110+
"return t0 && i10 == 1 && (i100 != 11 || (!t10 != 1 && t100 != 11)) ? 'one' : 'other';}";
107111
//case "ja":return noDiff;
108112
//case "ji":return EXACT_ONE;
109113
//case "jv":return noDiff;
@@ -133,8 +137,8 @@ public static String getSelectFunctionOverride(Locale locale) {
133137
//case "ms":return noDiff;
134138
case MALTESE:return "function mt(n) {\n"+
135139
"var s = String(n).split('.'),t0 = Number(s[0]) == n,n100 = t0 && s[0].slice(-2);\n"+
136-
"return n == 1 ? 'one' : (n == 0 || (n100 >= 2 && n100 <= 10)) ? 'few' : n100 >= 11 && n100 <= 19 ? 'many' : 'other';}";
137-
140+
// "return n == 1 ? 'one' : (n == 0 || (n100 >= 2 && n100 <= 10)) ? 'few' : n100 >= 11 && n100 <= 19 ? 'many' : 'other';}"; // ICU < 70
141+
"return n == 1 ? 'one' : n == 2 ? 'two' : (n == 0 || (n100 > 2 && n100 <= 10)) ? 'few' : n100 >= 11 && n100 <= 19 ? 'many' : 'other';}";
138142
//case "nb":return ONE;
139143
//case "nd":return ONE;
140144
//case "ne":return ONE;
@@ -151,10 +155,11 @@ public static String getSelectFunctionOverride(Locale locale) {
151155
}
152156
return "function pt(n) {return n >= 0 && n <= 2 && n != 2 ? 'one' : 'other';}";
153157
case ROMANSH:return ONE;
158+
case "mo":
154159
case ROMANIAN:return "function ro(n) {"+
155160
"var s = String(n).split('.'),v0 = !s[1],t0 = Number(s[0]) == n, n100 = t0 && s[0].slice(-2);"+
156-
// "return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few' : 'other';}"; // <ICU 64
157-
"return n == 1 && v0 ? 'one' : !v0 || n == 0 || (n100 >= 2 && n100 <= 19) ? 'few' : 'other';}";
161+
"return n == 1 && v0 ? 'one' : !v0 || n == 0 || n != 1 && (n100 >= 1 && n100 <= 19) ? 'few' : 'other';}";
162+
// "return n == 1 && v0 ? 'one' : !v0 || n == 0 || (n100 >= 2 && n100 <= 19) ? 'few' : 'other';}"; // ICU 64-70
158163
case RUSSIAN:
159164
case UKRAINIAN:
160165
return "function ru(n) {"+

0 commit comments

Comments
 (0)