forked from daviddrysdale/python-phonenumbers
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDumpLocale.java
More file actions
109 lines (103 loc) · 3.81 KB
/
DumpLocale.java
File metadata and controls
109 lines (103 loc) · 3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.util.Locale;
import java.util.HashMap;
/*
* This class dumps relevant information from the java.util.Locale metadata into
* a Python format.
*/
class DumpLocale {
private static final char SINGLE_QUOTE = 39;
private static final char BACKSLASH = 92;
private static final char[] hexChar = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
/* Print a Unicode name suitably escaped */
private static void printName(String name) {
// Need to escape Unicode data if we find it.
boolean seenUnicode = false;
StringBuilder sb = new StringBuilder();
for (int ii=0; ii<name.length(); ii++) {
char c = name.charAt(ii);
if ((c >= 32) && (c < 127)) {
if (c == SINGLE_QUOTE) {
sb.append("\\'");
} else if (c == BACKSLASH) {
sb.append("\\\\");
} else {
sb.append(c);
}
} else {
// Non-ASCII. Assume nothing outside of the BMP
seenUnicode = true;
sb.append("\\u");
sb.append(hexChar[(c >> 12) & 0xF]);
sb.append(hexChar[(c >> 8) & 0xF]);
sb.append(hexChar[(c >> 4) & 0xF]);
sb.append(hexChar[c & 0xF]);
}
}
if (seenUnicode) {
System.out.print("u('");
System.out.print(sb.toString());
System.out.print("')");
} else {
System.out.print("'");
System.out.print(sb.toString());
System.out.print("'");
}
}
private static void printProperty(String propName) {
String propVal = System.getProperty(propName, null);
if (propVal != null) {
System.out.println(" " + propName + "=" + propVal);
}
}
private static void printProlog() {
System.out.println("\"\"\"Locale information.");
System.out.println("Holds a map from ISO 3166-1 country code (e.g. GB) to a dict.");
System.out.println("Each dict maps from an ISO 639-1 language code (e.g. ja) to the country's name in that language.");
System.out.println("");
System.out.println("Generated from java.util.Locale, generation info:");
printProperty("java.version");
printProperty("java.vendor");
printProperty("os.name");
printProperty("os.arch");
printProperty("os.version");
System.out.println("");
System.out.println("Auto-generated file, do not edit by hand.");
System.out.println("\"\"\"");
System.out.println("from ..util import u");
}
public static void main(String[] args) {
// Check for mode
printProlog();
System.out.println("LOCALE_DATA = {");
String[] all_countries = Locale.getISOCountries();
String[] all_langs = Locale.getISOLanguages();
// Name => first language code that maps to that name
HashMap<String, String> name_to_lang = new HashMap<String, String>();
for (String country: all_countries) {
System.out.print(" '"+country+"': {");
Locale country_locale = new Locale("", country);
for (String lang: all_langs) {
Locale lang_locale = new Locale(lang);
String country_in_lang = country_locale.getDisplayCountry(lang_locale);
if ((country_in_lang != null) && (country_in_lang.length() != 0)) {
String previous_lang = name_to_lang.get(country_in_lang);
if (previous_lang != null) {
// Already seen this name before. Print the name as "*<otherlang>"
// on the assumption that this will save a lot of space (about 30%)
System.out.print("'"+lang+"':");
System.out.print("'*"+previous_lang+"'");
System.out.print(",");
} else {
// First time we've seen this name
name_to_lang.put(country_in_lang, lang);
System.out.print("'"+lang+"':");
printName(country_in_lang);
System.out.print(",");
}
}
}
System.out.println("},");
}
System.out.println("}");
}
}