Skip to content

Commit 00b1eac

Browse files
Justin Lunaotoj
authored andcommitted
8306031: Update IANA Language Subtag Registry to Version 2023-04-13
Reviewed-by: naoto
1 parent 88d9ebf commit 00b1eac

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

make/jdk/src/classes/build/tools/generatelsrequivmaps/EquivMapsGenerator.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -39,7 +39,7 @@
3939
import java.util.Map;
4040
import java.util.TimeZone;
4141
import java.util.TreeMap;
42-
import java.util.stream.Collectors;
42+
import java.util.regex.Pattern;
4343

4444
/**
4545
* This tool reads the IANA Language Subtag Registry data file downloaded from
@@ -136,10 +136,29 @@ private static void processDeprecatedData(String type,
136136
}
137137
} else { // language, extlang, legacy, and redundant
138138
if (!initialLanguageMap.containsKey(preferred)) {
139-
sb = new StringBuilder(preferred);
140-
sb.append(',');
141-
sb.append(tag);
142-
initialLanguageMap.put(preferred, sb);
139+
// IANA update 4/13 introduced case where a preferred value
140+
// can have a preferred value itself.
141+
// eg: ar-ajp has pref ajp which has pref apc
142+
boolean foundInOther = false;
143+
Pattern pattern = Pattern.compile(","+preferred+"(,|$)");
144+
// Check if current pref exists inside a value for another pref
145+
List<StringBuilder> doublePrefs = initialLanguageMap
146+
.values()
147+
.stream()
148+
.filter(e -> pattern.matcher(e.toString()).find())
149+
.toList();
150+
for (StringBuilder otherPrefVal : doublePrefs) {
151+
otherPrefVal.append(",");
152+
otherPrefVal.append(tag);
153+
foundInOther = true;
154+
}
155+
if (!foundInOther) {
156+
// does not exist in any other pref's values, so add as new entry
157+
sb = new StringBuilder(preferred);
158+
sb.append(',');
159+
sb.append(tag);
160+
initialLanguageMap.put(preferred, sb);
161+
}
143162
} else {
144163
sb = initialLanguageMap.get(preferred);
145164
sb.append(',');
@@ -156,7 +175,7 @@ private static void generateEquivalentMap() {
156175
// "yue" is defined both as extlang and redundant. Remove the dup.
157176
subtags = Arrays.stream(initialLanguageMap.get(preferred).toString().split(","))
158177
.distinct()
159-
.collect(Collectors.toList())
178+
.toList()
160179
.toArray(new String[0]);
161180

162181
if (subtags.length == 2) {
@@ -241,7 +260,7 @@ private static String generateValuesString(String[] values) {
241260
+ " static final Map<String, String[]> multiEquivsMap;\n"
242261
+ " static final Map<String, String> regionVariantEquivMap;\n\n"
243262
+ " static {\n"
244-
+ " singleEquivMap = new HashMap<>(";
263+
+ " singleEquivMap = HashMap.newHashMap(";
245264

246265
private static final String footerText =
247266
" }\n\n"
@@ -263,11 +282,11 @@ private static void generateSourceCode(String fileName) {
263282
Paths.get(fileName))) {
264283
writer.write(getOpenJDKCopyright());
265284
writer.write(headerText
266-
+ (int)(sortedLanguageMap1.size() / 0.75f + 1) + ");\n"
267-
+ " multiEquivsMap = new HashMap<>("
268-
+ (int)(sortedLanguageMap2.size() / 0.75f + 1) + ");\n"
269-
+ " regionVariantEquivMap = new HashMap<>("
270-
+ (int)(sortedRegionVariantMap.size() / 0.75f + 1) + ");\n\n"
285+
+ sortedLanguageMap1.size() + ");\n"
286+
+ " multiEquivsMap = HashMap.newHashMap("
287+
+ sortedLanguageMap2.size() + ");\n"
288+
+ " regionVariantEquivMap = HashMap.newHashMap("
289+
+ sortedRegionVariantMap.size() + ");\n\n"
271290
+ " // This is an auto-generated file and should not be manually edited.\n"
272291
+ " // LSR Revision: " + LSRrevisionDate);
273292
writer.newLine();

src/java.base/share/data/lsrdata/language-subtag-registry.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
File-Date: 2023-03-22
1+
File-Date: 2023-04-13
22
%%
33
Type: language
44
Subtag: aa
@@ -42986,7 +42986,7 @@ Subtag: ajp
4298642986
Description: South Levantine Arabic
4298742987
Added: 2009-07-29
4298842988
Deprecated: 2023-03-17
42989-
Preferred-Value: apc
42989+
Preferred-Value: ajp
4299042990
Prefix: ar
4299142991
Macrolanguage: ar
4299242992
%%

test/jdk/java/util/Locale/LanguageSubtagRegistryTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
/*
2525
* @test
2626
* @bug 8040211 8191404 8203872 8222980 8225435 8241082 8242010 8247432
27-
* 8258795 8267038 8287180 8302512 8304761
27+
* 8258795 8267038 8287180 8302512 8304761 8306031
2828
* @summary Checks the IANA language subtag registry data update
29-
* (LSR Revision: 2023-03-22) with Locale and Locale.LanguageRange
29+
* (LSR Revision: 2023-04-13) with Locale and Locale.LanguageRange
3030
* class methods.
3131
* @run main LanguageSubtagRegistryTest
3232
*/
@@ -44,7 +44,7 @@ public class LanguageSubtagRegistryTest {
4444
static boolean err = false;
4545

4646
private static final String ACCEPT_LANGUAGE =
47-
"Accept-Language: aam, adp, aeb, ajs, aog, apc, aue, bcg, bic, bpp, cey, cbr, cnp, cqu, crr, csp, csx, dif, dmw, dsz, ehs, ema,"
47+
"Accept-Language: aam, adp, aeb, ajs, aog, apc, ajp, aue, bcg, bic, bpp, cey, cbr, cnp, cqu, crr, csp, csx, dif, dmw, dsz, ehs, ema,"
4848
+ " en-gb-oed, gti, iba, jks, kdz, kjh, kmb, koj, kru, ksp, kwq, kxe, kzk, lgs, lii, lmm, lsb, lsc, lsn, lsv, lsw, lvi, mtm,"
4949
+ " ngv, nns, ola, oyb, pat, phr, plu, pnd, pub, rib, rnb, rsn, scv, snz, sqx, suj, szy, taj, tdg, tjj, tjp, tpn, tvx,"
5050
+ " umi, uss, uth, ysm, zko, wkr;q=0.9, ar-hyw;q=0.8, yug;q=0.5, gfx;q=0.4";

0 commit comments

Comments
 (0)