xref: /aosp_15_r20/external/cldr/tools/cldr-code/src/main/java/org/unicode/cldr/tool/CheckEnglishCurrencyNames.java (revision 912701f9769bb47905792267661f0baf2b85bed5)
1 package org.unicode.cldr.tool;
2 
3 import com.ibm.icu.impl.Relation;
4 import java.util.Date;
5 import java.util.Map;
6 import java.util.Map.Entry;
7 import java.util.Set;
8 import java.util.TreeMap;
9 import java.util.TreeSet;
10 import org.unicode.cldr.util.CLDRFile;
11 import org.unicode.cldr.util.CLDRPaths;
12 import org.unicode.cldr.util.Factory;
13 import org.unicode.cldr.util.StandardCodes;
14 import org.unicode.cldr.util.SupplementalDataInfo;
15 import org.unicode.cldr.util.SupplementalDataInfo.CurrencyDateInfo;
16 import org.unicode.cldr.util.SupplementalDataInfo.OfficialStatus;
17 import org.unicode.cldr.util.SupplementalDataInfo.PopulationData;
18 
19 public class CheckEnglishCurrencyNames {
20     static SupplementalDataInfo supplementalDataInfo =
21             SupplementalDataInfo.getInstance(CLDRPaths.SUPPLEMENTAL_DIRECTORY);
22     static StandardCodes sc = StandardCodes.make();
23     static Factory cldrFactory = Factory.make(CLDRPaths.MAIN_DIRECTORY, ".*");
24     static CLDRFile english = cldrFactory.make("en", true);
25 
main(String[] args)26     public static void main(String[] args) {
27         Date now = new Date();
28         Set<String> currencyCodes = sc.getGoodAvailableCodes("currency");
29         Relation<String, String> currencyCodesWithDates =
30                 Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
31         Relation<String, String> modernCurrencyCodes2territory =
32                 Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
33         Set<String> territoriesWithoutModernCurrencies =
34                 new TreeSet<>(sc.getGoodAvailableCodes("territory"));
35 
36         for (String territory : sc.getGoodAvailableCodes("territory")) {
37             if (supplementalDataInfo.getContained(territory) != null) {
38                 territoriesWithoutModernCurrencies.remove(territory);
39                 continue;
40             }
41             System.out.println(territory);
42             Set<CurrencyDateInfo> currencyInfo =
43                     supplementalDataInfo.getCurrencyDateInfo(territory);
44             if (currencyInfo == null) {
45                 System.out.println("\tNONE");
46                 continue;
47             }
48             for (CurrencyDateInfo dateInfo : currencyInfo) {
49                 if (!dateInfo.isLegalTender()) {
50                     continue;
51                 }
52                 final String currency = dateInfo.getCurrency();
53                 final Date start = dateInfo.getStart();
54                 final Date end = dateInfo.getEnd();
55                 if (end.compareTo(now) >= 0) {
56                     modernCurrencyCodes2territory.put(currency, territory);
57                     territoriesWithoutModernCurrencies.remove(territory);
58                 } else {
59                     currencyCodesWithDates.put(currency, territory);
60                 }
61                 System.out.println("\t" + currency + "\t" + start + "\t" + end);
62             }
63         }
64         System.out.println("Modern Codes: " + modernCurrencyCodes2territory);
65         for (String currency : modernCurrencyCodes2territory.keySet()) {
66             final String name = english.getName(CLDRFile.CURRENCY_NAME, currency).toLowerCase();
67             if (name.contains("new") || name.contains("old")) {
68                 System.out.println(currency + "\t" + name);
69             }
70         }
71         System.out.println("Non-Modern Codes (with dates): " + currencyCodesWithDates);
72         for (String currency : currencyCodesWithDates.keySet()) {
73             final String name = english.getName(CLDRFile.CURRENCY_NAME, currency).toLowerCase();
74             if (name.contains("new") || name.contains("old")) {
75                 System.out.println(currency + "\t" + name);
76             }
77         }
78         Set<String> remainder = new TreeSet<>();
79         remainder.addAll(currencyCodes);
80         remainder.removeAll(currencyCodesWithDates.keySet());
81         System.out.println("Currencies without Territories: " + remainder);
82         System.out.println(
83                 "Territories without Modern Currencies: " + territoriesWithoutModernCurrencies);
84 
85         Relation<String, String> territory2official =
86                 Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
87 
88         // finding official languages
89         for (String language : supplementalDataInfo.getLanguagesForTerritoriesPopulationData()) {
90             for (String territory :
91                     supplementalDataInfo.getTerritoriesForPopulationData(language)) {
92                 PopulationData populationData =
93                         supplementalDataInfo.getLanguageAndTerritoryPopulationData(
94                                 language, territory);
95                 OfficialStatus status = populationData.getOfficialStatus();
96                 switch (status) {
97                     case official:
98                     case de_facto_official:
99                     case recognized:
100                         territory2official.put(territory, language);
101                 }
102             }
103         }
104         Relation<String, String> currency2symbols =
105                 Relation.of(new TreeMap<String, Set<String>>(), TreeSet.class);
106         Map<String, Relation<String, String>> currency2symbol2locales = new TreeMap<>(); //
107         System.out.format("Raw usage data\n");
108         Set<String> noOfficialLanguages = new TreeSet<>();
109 
110         for (Entry<String, Set<String>> currencyAndTerritories :
111                 modernCurrencyCodes2territory.keyValuesSet()) {
112             String currency = currencyAndTerritories.getKey();
113             Set<String> territories = currencyAndTerritories.getValue();
114             for (String territory : territories) {
115                 final Set<String> languages = territory2official.get(territory);
116                 if (languages == null) {
117                     noOfficialLanguages.add(territory);
118                     continue;
119                 }
120                 for (String language : languages) {
121                     CLDRFile nativeLanguage = null;
122                     String locale = language + "_" + territory;
123                     try {
124                         nativeLanguage = cldrFactory.make(locale, true);
125                     } catch (Exception e) {
126                         try {
127                             nativeLanguage = cldrFactory.make(language, true);
128                         } catch (Exception e1) {
129                         }
130                     }
131                     String symbol =
132                             nativeLanguage == null
133                                     ? "N/A"
134                                     : nativeLanguage.getName(CLDRFile.CURRENCY_SYMBOL, currency);
135                     System.out.println(
136                             currency
137                                     + "\t"
138                                     + english.getName(CLDRFile.CURRENCY_NAME, currency)
139                                     + "\t"
140                                     + territory
141                                     + "\t"
142                                     + english.getName(CLDRFile.TERRITORY_NAME, territory)
143                                     + "\t"
144                                     + language
145                                     + "\t"
146                                     + english.getName(language)
147                                     + "\t"
148                                     + symbol);
149                     // TODO add script
150                     if (nativeLanguage != null) {
151                         currency2symbols.put(currency, symbol);
152                         Relation<String, String> rel = currency2symbol2locales.get(currency);
153                         if (rel == null) {
154                             currency2symbol2locales.put(
155                                     currency,
156                                     rel =
157                                             Relation.of(
158                                                     new TreeMap<String, Set<String>>(),
159                                                     TreeSet.class));
160                         }
161                         rel.put(symbol, locale);
162                     }
163                 }
164             }
165         }
166         System.out.format("No official languages\n");
167         for (String territory : noOfficialLanguages) {
168             System.out.println(
169                     territory + "\t" + english.getName(CLDRFile.TERRITORY_NAME, territory));
170         }
171         System.out.format("Collected usage data\n");
172         for (Entry<String, Set<String>> currencyAndSymbols : currency2symbols.keyValuesSet()) {
173             String currency = currencyAndSymbols.getKey();
174             Set<String> symbols = currencyAndSymbols.getValue();
175             System.out.println(
176                     currency
177                             + "\t"
178                             + english.getName(CLDRFile.CURRENCY_NAME, currency)
179                             + "\t"
180                             + symbols.size()
181                             + "\t"
182                             + symbols
183                             + "\t"
184                             + currency2symbol2locales.get(currency));
185         }
186     }
187 }
188