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