1 /* 2 ******************************************************************************* 3 * Copyright (C) 2009-2013, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 */ 7 package com.ibm.icu.impl; 8 9 import java.util.MissingResourceException; 10 11 12 /** 13 * Utilities for mapping between old and new language, country, and other 14 * locale ID related names. 15 */ 16 public class LocaleIDs { 17 18 /** 19 * Returns a list of all 2-letter country codes defined in ISO 3166. 20 * Can be used to create Locales. 21 * @stable ICU 3.0 22 */ getISOCountries()23 public static String[] getISOCountries() { 24 return _countries.clone(); 25 } 26 27 /** 28 * Returns a list of all 2-letter language codes defined in ISO 639 29 * plus additional 3-letter codes determined to be useful for locale generation as 30 * defined by Unicode CLDR. 31 * Can be used to create Locales. 32 * [NOTE: ISO 639 is not a stable standard-- some languages' codes have changed. 33 * The list this function returns includes both the new and the old codes for the 34 * languages whose codes have changed.] 35 * @stable ICU 3.0 36 */ getISOLanguages()37 public static String[] getISOLanguages() { 38 return _languages.clone(); 39 } 40 41 /** 42 * Returns a three-letter abbreviation for the provided country. If the provided 43 * country is empty, returns the empty string. Otherwise, returns 44 * an uppercase ISO 3166 3-letter country code. 45 * @exception MissingResourceException Throws MissingResourceException if the 46 * three-letter country abbreviation is not available for this locale. 47 * @stable ICU 3.0 48 */ getISO3Country(String country)49 public static String getISO3Country(String country){ 50 51 int offset = findIndex(_countries, country); 52 if(offset>=0){ 53 return _countries3[offset]; 54 }else{ 55 offset = findIndex(_obsoleteCountries, country); 56 if(offset>=0){ 57 return _obsoleteCountries3[offset]; 58 } 59 } 60 return ""; 61 } 62 /** 63 * Returns a three-letter abbreviation for the language. If language is 64 * empty, returns the empty string. Otherwise, returns 65 * a lowercase ISO 639-2/T language code. 66 * The ISO 639-2 language codes can be found on-line at 67 * <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a> 68 * @exception MissingResourceException Throws MissingResourceException if the 69 * three-letter language abbreviation is not available for this locale. 70 * @stable ICU 3.0 71 */ getISO3Language(String language)72 public static String getISO3Language(String language) { 73 74 int offset = findIndex(_languages, language); 75 if(offset>=0){ 76 return _languages3[offset]; 77 } else { 78 offset = findIndex(_obsoleteLanguages, language); 79 if (offset >= 0) { 80 return _obsoleteLanguages3[offset]; 81 } 82 } 83 return ""; 84 } 85 threeToTwoLetterLanguage(String lang)86 public static String threeToTwoLetterLanguage(String lang) { 87 88 /* convert 3 character code to 2 character code if possible *CWB*/ 89 int offset = findIndex(_languages3, lang); 90 if (offset >= 0) { 91 return _languages[offset]; 92 } 93 94 offset = findIndex(_obsoleteLanguages3, lang); 95 if (offset >= 0) { 96 return _obsoleteLanguages[offset]; 97 } 98 99 return null; 100 } 101 threeToTwoLetterRegion(String region)102 public static String threeToTwoLetterRegion(String region) { 103 104 /* convert 3 character code to 2 character code if possible *CWB*/ 105 int offset = findIndex(_countries3, region); 106 if (offset >= 0) { 107 return _countries[offset]; 108 } 109 110 offset = findIndex(_obsoleteCountries3, region); 111 if (offset >= 0) { 112 return _obsoleteCountries[offset]; 113 } 114 115 return null; 116 } 117 118 /** 119 * linear search of the string array. the arrays are unfortunately ordered by the 120 * two-letter target code, not the three-letter search code, which seems backwards. 121 */ findIndex(String[] array, String target)122 private static int findIndex(String[] array, String target){ 123 for (int i = 0; i < array.length; i++) { 124 if (target.equals(array[i])) { 125 return i; 126 } 127 } 128 return -1; 129 } 130 131 132 /** 133 * Tables used in normalizing portions of the id. 134 */ 135 /* tables updated per http://lcweb.loc.gov/standards/iso639-2/ 136 to include the revisions up to 2001/7/27 *CWB*/ 137 /* The 3 character codes are the terminology codes like RFC 3066. 138 This is compatible with prior ICU codes */ 139 /* "in" "iw" "ji" "jw" & "sh" have been withdrawn but are still in 140 the table but now at the end of the table because 141 3 character codes are duplicates. This avoids bad searches 142 going from 3 to 2 character codes.*/ 143 /* The range qaa-qtz is reserved for local use. */ 144 145 /* This list MUST be in sorted order, and MUST contain the two-letter codes 146 if one exists otherwise use the three letter code */ 147 private static final String[] _languages = { 148 "aa", "ab", "ace", "ach", "ada", "ady", "ae", "af", 149 "afa", "afh", "agq", "ain", "ak", "akk", "ale", "alg", 150 "alt", "am", "an", "ang", "anp", "apa", "ar", "arc", 151 "arn", "arp", "art", "arw", "as", "asa", "ast", "ath", 152 "aus", "av", "awa", "ay", "az", 153 "ba", "bad", "bai", "bal", "ban", "bas", "bat", "bax", 154 "bbj", "be", "bej", "bem", "ber", "bez", "bfd", "bg", 155 "bh", "bho", "bi", "bik", "bin", "bkm", "bla", "bm", 156 "bn", "bnt", "bo", "br", "bra", "brx", "bs", "bss", 157 "btk", "bua", "bug", "bum", "byn", "byv", 158 "ca", "cad", "cai", "car", "cau", "cay", "cch", "ce", 159 "ceb", "cel", "cgg", "ch", "chb", "chg", "chk", "chm", 160 "chn", "cho", "chp", "chr", "chy", "ckb", "cmc", "co", 161 "cop", "cpe", "cpf", "cpp", "cr", "crh", "crp", "cs", 162 "csb", "cu", "cus", "cv", "cy", 163 "da", "dak", "dar", "dav", "day", "de", "del", "den", 164 "dgr", "din", "dje", "doi", "dra", "dsb", "dua", "dum", 165 "dv", "dyo", "dyu", "dz", "dzg", 166 "ebu", "ee", "efi", "egy", "eka", "el", "elx", "en", 167 "enm", "eo", "es", "et", "eu", "ewo", 168 "fa", "fan", "fat", "ff", "fi", "fil", "fiu", "fj", 169 "fo", "fon", "fr", "frm", "fro", "frr", "frs", "fur", 170 "fy", 171 "ga", "gaa", "gay", "gba", "gd", "gem", "gez", "gil", 172 "gl", "gmh", "gn", "goh", "gon", "gor", "got", "grb", 173 "grc", "gsw", "gu", "guz", "gv", "gwi", 174 "ha", "hai", "haw", "he", "hi", "hil", "him", "hit", 175 "hmn", "ho", "hr", "hsb", "ht", "hu", "hup", "hy", 176 "hz", 177 "ia", "iba", "ibb", "id", "ie", "ig", "ii", "ijo", 178 "ik", "ilo", "inc", "ine", "inh", "io", "ira", "iro", 179 "is", "it", "iu", 180 "ja", "jbo", "jgo", "jmc", "jpr", "jrb", "jv", 181 "ka", "kaa", "kab", "kac", "kaj", "kam", "kar", "kaw", 182 "kbd", "kbl", "kcg", "kde", "kea", "kfo", "kg", "kha", 183 "khi", "kho", "khq", "ki", "kj", "kk", "kkj", "kl", 184 "kln", "km", "kmb", "kn", "ko", "kok", "kos", "kpe", 185 "kr", "krc", "krl", "kro", "kru", "ks", "ksb", "ksf", 186 "ksh", "ku", "kum", "kut", "kv", "kw", "ky", 187 "la", "lad", "lag", "lah", "lam", "lb", "lez", "lg", 188 "li", "lkt", "ln", "lo", "lol", "loz", "lt", "lu", 189 "lua", "lui", "lun", "luo", "lus", "luy", "lv", 190 "mad", "maf", "mag", "mai", "mak", "man", "map", "mas", 191 "mde", "mdf", "mdr", "men", "mer", "mfe", "mg", "mga", 192 "mgh", "mgo", "mh", "mi", "mic", "min", "mis", "mk", 193 "mkh", "ml", "mn", "mnc", "mni", "mno", "mo", "moh", 194 "mos", "mr", "ms", "mt", "mua", "mul", "mun", "mus", 195 "mwl", "mwr", "my", "mye", "myn", "myv", 196 "na", "nah", "nai", "nap", "naq", "nb", "nd", "nds", 197 "ne", "new", "ng", "nia", "nic", "niu", "nl", "nmg", 198 "nn", "nnh", "no", "nog", "non", "nqo", "nr", "nso", 199 "nub", "nus", "nv", "nwc", "ny", "nym", "nyn", "nyo", 200 "nzi", 201 "oc", "oj", "om", "or", "os", "osa", "ota", "oto", 202 "pa", "paa", "pag", "pal", "pam", "pap", "pau", "peo", 203 "phi", "phn", "pi", "pl", "pon", "pra", "pro", "ps", 204 "pt", 205 "qu", 206 "raj", "rap", "rar", "rm", "rn", "ro", "roa", "rof", 207 "rom", "ru", "rup", "rw", "rwk", 208 "sa", "sad", "sah", "sai", "sal", "sam", "saq", "sas", 209 "sat", "sba", "sbp", "sc", "scn", "sco", "sd", "se", 210 "see", "seh", "sel", "sem", "ses", "sg", "sga", "sgn", 211 "shi", "shn", "shu", "si", "sid", "sio", "sit", 212 "sk", "sl", "sla", "sm", "sma", "smi", "smj", "smn", 213 "sms", "sn", "snk", "so", "sog", "son", "sq", "sr", 214 "srn", "srr", "ss", "ssa", "ssy", "st", "su", "suk", 215 "sus", "sux", "sv", "sw", "swb", "swc", "syc", "syr", 216 "ta", "tai", "te", "tem", "teo", "ter", "tet", "tg", 217 "th", "ti", "tig", "tiv", "tk", "tkl", "tl", "tlh", 218 "tli", "tmh", "tn", "to", "tog", "tpi", "tr", "trv", 219 "ts", "tsi", "tt", "tum", "tup", "tut", "tvl", "tw", 220 "twq", "ty", "tyv", "tzm", 221 "udm", "ug", "uga", "uk", "umb", "und", "ur", "uz", 222 "vai", "ve", "vi", "vo", "vot", "vun", 223 "wa", "wae", "wak", "wal", "war", "was", "wen", "wo", 224 "xal", "xh", "xog", 225 "yao", "yap", "yav", "ybb", "yi", "yo", "ypk", "yue", 226 "za", "zap", "zbl", "zen", "zh", "znd", "zu", "zun", 227 "zxx", "zza" }; 228 229 private static final String[] _replacementLanguages = { 230 "id", "he", "yi", "jv", "sr", "nb",/* replacement language codes */ 231 }; 232 233 private static final String[] _obsoleteLanguages = { 234 "in", "iw", "ji", "jw", "sh", "no", /* obsolete language codes */ 235 }; 236 237 /* This list MUST contain a three-letter code for every two-letter code in the 238 list above, and they MUST ne in the same order (i.e., the same language must 239 be in the same place in both lists)! */ 240 private static final String[] _languages3 = { 241 "aar", "abk", "ace", "ach", "ada", "ady", "ave", "afr", 242 "afa", "afh", "agq", "ain", "aka", "akk", "ale", "alg", 243 "alt", "amh", "arg", "ang", "anp", "apa", "ara", "arc", 244 "arn", "arp", "art", "arw", "asm", "asa", "ast", "ath", 245 "aus", "ava", "awa", "aym", "aze", 246 "bak", "bad", "bai", "bal", "ban", "bas", "bat", "bax", 247 "bbj", "bel", "bej", "bem", "ber", "bez", "bfd", "bul", 248 "bih", "bho", "bis", "bik", "bin", "bkm", "bla", "bam", 249 "ben", "bnt", "bod", "bre", "bra", "brx", "bos", "bss", 250 "btk", "bua", "bug", "bum", "byn", "byv", 251 "cat", "cad", "cai", "car", "cau", "cay", "cch", "che", 252 "ceb", "cel", "cgg", "cha", "chb", "chg", "chk", "chm", 253 "chn", "cho", "chp", "chr", "chy", "ckb", "cmc", "cos", 254 "cop", "cpe", "cpf", "cpp", "cre", "crh", "crp", "ces", 255 "csb", "chu", "cus", "chv", "cym", 256 "dan", "dak", "dar", "dav", "day", "deu", "del", "den", 257 "dgr", "din", "dje", "doi", "dra", "dsb", "dua", "dum", 258 "div", "dyo", "dyu", "dzo", "dzg", 259 "ebu", "ewe", "efi", "egy", "eka", "ell", "elx", "eng", 260 "enm", "epo", "spa", "est", "eus", "ewo", 261 "fas", "fan", "fat", "ful", "fin", "fil", "fiu", "fij", 262 "fao", "fon", "fra", "frm", "fro", "frr", "frs", "fur", 263 "fry", 264 "gle", "gaa", "gay", "gba", "gla", "gem", "gez", "gil", 265 "glg", "gmh", "grn", "goh", "gon", "gor", "got", "grb", 266 "grc", "gsw", "guj", "guz", "glv", "gwi", 267 "hau", "hai", "haw", "heb", "hin", "hil", "him", "hit", 268 "hmn", "hmo", "hrv", "hsb", "hat", "hun", "hup", "hye", 269 "her", 270 "ina", "iba", "ibb", "ind", "ile", "ibo", "iii", "ijo", 271 "ipk", "ilo", "inc", "ine", "inh", "ido", "ira", "iro", 272 "isl", "ita", "iku", 273 "jpn", "jbo", "jgo", "jmc", "jpr", "jrb", "jav", 274 "kat", "kaa", "kab", "kac", "kaj", "kam", "kar", "kaw", 275 "kbd", "kbl", "kcg", "kde", "kea", "kfo", "kon", "kha", 276 "khi", "kho", "khq", "kik", "kua", "kaz", "kkj", "kal", 277 "kln", "khm", "kmb", "kan", "kor", "kok", "kos", "kpe", 278 "kau", "krc", "krl", "kro", "kru", "kas", "ksb", "ksf", 279 "ksh", "kur", "kum", "kut", "kom", "cor", "kir", 280 "lat", "lad", "lag", "lah", "lam", "ltz", "lez", "lug", 281 "lim", "lkt", "lin", "lao", "lol", "loz", "lit", "lub", 282 "lua", "lui", "lun", "luo", "lus", "luy", "lav", 283 "mad", "maf", "mag", "mai", "mak", "man", "map", "mas", 284 "mde", "mdf", "mdr", "men", "mer", "mfe", "mlg", "mga", 285 "mgh", "mgo", "mah", "mri", "mic", "min", "mis", "mkd", 286 "mkh", "mal", "mon", "mnc", "mni", "mno", "mol", "moh", 287 "mos", "mar", "msa", "mlt", "mua", "mul", "mun", "mus", 288 "mwl", "mwr", "mya", "mye", "myn", "myv", 289 "nau", "nah", "nai", "nap", "naq", "nob", "nde", "nds", 290 "nep", "new", "ndo", "nia", "nic", "niu", "nld", "nmg", 291 "nno", "nnh", "nor", "nog", "non", "nqo", "nbl", "nso", 292 "nub", "nus", "nav", "nwc", "nya", "nym", "nyn", "nyo", 293 "nzi", 294 "oci", "oji", "orm", "ori", "oss", "osa", "ota", "oto", 295 "pan", "paa", "pag", "pal", "pam", "pap", "pau", "peo", 296 "phi", "phn", "pli", "pol", "pon", "pra", "pro", "pus", 297 "por", 298 "que", 299 "raj", "rap", "rar", "roh", "run", "ron", "roa", "rof", 300 "rom", "rus", "rup", "kin", "rwk", 301 "san", "sad", "sah", "sai", "sal", "sam", "saq", "sas", 302 "sat", "sba", "sbp", "srd", "scn", "sco", "snd", "sme", 303 "see", "seh", "sel", "sem", "ses", "sag", "sga", "sgn", 304 "shi", "shn", "shu", "sin", "sid", "sio", "sit", 305 "slk", "slv", "sla", "smo", "sma", "smi", "smj", "smn", 306 "sms", "sna", "snk", "som", "sog", "son", "sqi", "srp", 307 "srn", "srr", "ssw", "ssa", "ssy", "sot", "sun", "suk", 308 "sus", "sux", "swe", "swa", "swb", "swc", "syc", "syr", 309 "tam", "tai", "tel", "tem", "teo", "ter", "tet", "tgk", 310 "tha", "tir", "tig", "tiv", "tuk", "tkl", "tgl", "tlh", 311 "tli", "tmh", "tsn", "ton", "tog", "tpi", "tur", "trv", 312 "tso", "tsi", "tat", "tum", "tup", "tut", "tvl", "twi", 313 "twq", "tah", "tyv", "tzm", 314 "udm", "uig", "uga", "ukr", "umb", "und", "urd", "uzb", 315 "vai", "ven", "vie", "vol", "vot", "vun", 316 "wln", "wae", "wak", "wal", "war", "was", "wen", "wol", 317 "xal", "xho", "xog", 318 "yao", "yap", "yav", "ybb", "yid", "yor", "ypk", "yue", 319 "zha", "zap", "zbl", "zen", "zho", "znd", "zul", "zun", 320 "zxx", "zza" }; 321 322 private static final String[] _obsoleteLanguages3 = { 323 /* "in", "iw", "ji", "jw", "sh", */ 324 "ind", "heb", "yid", "jaw", "srp", 325 }; 326 327 /* ZR(ZAR) is now CD(COD) and FX(FXX) is PS(PSE) as per 328 http://www.evertype.com/standards/iso3166/iso3166-1-en.html 329 added new codes keeping the old ones for compatibility 330 updated to include 1999/12/03 revisions *CWB*/ 331 332 /* RO(ROM) is now RO(ROU) according to 333 http://www.iso.org/iso/en/prods-services/iso3166ma/03updates-on-iso-3166/nlv3e-rou.html 334 */ 335 /* This list MUST be in sorted order, and MUST contain only two-letter codes! */ 336 private static final String[] _countries = { 337 "AD", "AE", "AF", "AG", "AI", "AL", "AM", 338 "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", 339 "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", 340 "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV", 341 "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", 342 "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", 343 "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", 344 "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", 345 "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", 346 "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", 347 "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", 348 "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", 349 "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS", 350 "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", 351 "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", 352 "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", 353 "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", 354 "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", 355 "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", 356 "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", 357 "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", 358 "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", 359 "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", 360 "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", 361 "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", 362 "SX", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", 363 "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", 364 "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", 365 "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", 366 "WS", "YE", "YT", "ZA", "ZM", "ZW" }; 367 368 private static final String[] _deprecatedCountries = { 369 "AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR" /* deprecated country list */ 370 }; 371 372 private static final String[] _replacementCountries = { 373 /* "AN", "BU", "CS", "DD", "DY", "FX", "HV", "NH", "RH", "SU", "TP", "UK", "VD", "YD", "YU", "ZR" */ 374 "CW", "MM", "RS", "DE", "BJ", "FR", "BF", "VU", "ZW", "RU", "TL", "GB", "VN", "YE", "RS", "CD" /* replacement country codes */ 375 }; 376 377 /* this table is used for three letter codes */ 378 private static final String[] _obsoleteCountries = { 379 "AN", "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR", /* obsolete country codes */ 380 }; 381 382 /* This list MUST contain a three-letter code for every two-letter code in 383 the above list, and they MUST be listed in the same order! */ 384 private static final String[] _countries3 = { 385 /* "AD", "AE", "AF", "AG", "AI", "AL", "AM", */ 386 "AND", "ARE", "AFG", "ATG", "AIA", "ALB", "ARM", 387 /* "AO", "AQ", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", */ 388 "AGO", "ATA", "ARG", "ASM", "AUT", "AUS", "ABW", "ALA", "AZE", 389 /* "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", */ 390 "BIH", "BRB", "BGD", "BEL", "BFA", "BGR", "BHR", "BDI", 391 /* "BJ", "BL", "BM", "BN", "BO", "BQ", "BR", "BS", "BT", "BV", */ 392 "BEN", "BLM", "BMU", "BRN", "BOL", "BES", "BRA", "BHS", "BTN", "BVT", 393 /* "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", */ 394 "BWA", "BLR", "BLZ", "CAN", "CCK", "COD", "CAF", "COG", 395 /* "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", */ 396 "CHE", "CIV", "COK", "CHL", "CMR", "CHN", "COL", "CRI", 397 /* "CU", "CV", "CW", "CX", "CY", "CZ", "DE", "DJ", "DK", */ 398 "CUB", "CPV", "CUW", "CXR", "CYP", "CZE", "DEU", "DJI", "DNK", 399 /* "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", */ 400 "DMA", "DOM", "DZA", "ECU", "EST", "EGY", "ESH", "ERI", 401 /* "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", */ 402 "ESP", "ETH", "FIN", "FJI", "FLK", "FSM", "FRO", "FRA", 403 /* "GA", "GB", "GD", "GE", "GF", "GG", "GH", "GI", "GL", */ 404 "GAB", "GBR", "GRD", "GEO", "GUF", "GGY", "GHA", "GIB", "GRL", 405 /* "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", */ 406 "GMB", "GIN", "GLP", "GNQ", "GRC", "SGS", "GTM", "GUM", 407 /* "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", */ 408 "GNB", "GUY", "HKG", "HMD", "HND", "HRV", "HTI", "HUN", 409 /* "ID", "IE", "IL", "IM", "IN", "IO", "IQ", "IR", "IS" */ 410 "IDN", "IRL", "ISR", "IMN", "IND", "IOT", "IRQ", "IRN", "ISL", 411 /* "IT", "JE", "JM", "JO", "JP", "KE", "KG", "KH", "KI", */ 412 "ITA", "JEY", "JAM", "JOR", "JPN", "KEN", "KGZ", "KHM", "KIR", 413 /* "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", */ 414 "COM", "KNA", "PRK", "KOR", "KWT", "CYM", "KAZ", "LAO", 415 /* "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", */ 416 "LBN", "LCA", "LIE", "LKA", "LBR", "LSO", "LTU", "LUX", 417 /* "LV", "LY", "MA", "MC", "MD", "ME", "MF", "MG", "MH", "MK", */ 418 "LVA", "LBY", "MAR", "MCO", "MDA", "MNE", "MAF", "MDG", "MHL", "MKD", 419 /* "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", */ 420 "MLI", "MMR", "MNG", "MAC", "MNP", "MTQ", "MRT", "MSR", 421 /* "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", */ 422 "MLT", "MUS", "MDV", "MWI", "MEX", "MYS", "MOZ", "NAM", 423 /* "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", */ 424 "NCL", "NER", "NFK", "NGA", "NIC", "NLD", "NOR", "NPL", 425 /* "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", */ 426 "NRU", "NIU", "NZL", "OMN", "PAN", "PER", "PYF", "PNG", 427 /* "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", */ 428 "PHL", "PAK", "POL", "SPM", "PCN", "PRI", "PSE", "PRT", 429 /* "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", */ 430 "PLW", "PRY", "QAT", "REU", "ROU", "SRB", "RUS", "RWA", "SAU", 431 /* "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", */ 432 "SLB", "SYC", "SDN", "SWE", "SGP", "SHN", "SVN", "SJM", 433 /* "SK", "SL", "SM", "SN", "SO", "SR", "SS", "ST", "SV", */ 434 "SVK", "SLE", "SMR", "SEN", "SOM", "SUR", "SSD", "STP", "SLV", 435 /* "SX", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", */ 436 "SXM", "SYR", "SWZ", "TCA", "TCD", "ATF", "TGO", "THA", "TJK", 437 /* "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", */ 438 "TKL", "TLS", "TKM", "TUN", "TON", "TUR", "TTO", "TUV", 439 /* "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", */ 440 "TWN", "TZA", "UKR", "UGA", "UMI", "USA", "URY", "UZB", 441 /* "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", */ 442 "VAT", "VCT", "VEN", "VGB", "VIR", "VNM", "VUT", "WLF", 443 /* "WS", "YE", "YT", "ZA", "ZM", "ZW", */ 444 "WSM", "YEM", "MYT", "ZAF", "ZMB", "ZWE" }; 445 446 private static final String[] _obsoleteCountries3 = { 447 /* "AN", "BU", "CS", "FX", "RO", "SU", "TP", "YD", "YU", "ZR" */ 448 "ANT", "BUR", "SCG", "FXX", "ROM", "SUN", "TMP", "YMD", "YUG", "ZAR", 449 }; 450 451 getCurrentCountryID(String oldID)452 public static String getCurrentCountryID(String oldID){ 453 int offset = findIndex(_deprecatedCountries, oldID); 454 if (offset >= 0) { 455 return _replacementCountries[offset]; 456 } 457 return oldID; 458 } 459 getCurrentLanguageID(String oldID)460 public static String getCurrentLanguageID(String oldID){ 461 int offset = findIndex(_obsoleteLanguages, oldID); 462 if (offset >= 0) { 463 return _replacementLanguages[offset]; 464 } 465 return oldID; 466 } 467 468 469 } 470