You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LocaleID.java 34KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. /* ====================================================================
  2. Licensed to the Apache Software Foundation (ASF) under one or more
  3. contributor license agreements. See the NOTICE file distributed with
  4. this work for additional information regarding copyright ownership.
  5. The ASF licenses this file to You under the Apache License, Version 2.0
  6. (the "License"); you may not use this file except in compliance with
  7. the License. You may obtain a copy of the License at
  8. http://www.apache.org/licenses/LICENSE-2.0
  9. Unless required by applicable law or agreed to in writing, software
  10. distributed under the License is distributed on an "AS IS" BASIS,
  11. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. See the License for the specific language governing permissions and
  13. limitations under the License.
  14. ==================================================================== */
  15. package org.apache.poi.util;
  16. import static java.util.Calendar.SATURDAY;
  17. import static java.util.Calendar.SUNDAY;
  18. import java.util.Calendar;
  19. import java.util.Map;
  20. import java.util.function.Function;
  21. import java.util.stream.Collectors;
  22. import java.util.stream.Stream;
  23. /**
  24. * Locale Collection
  25. * <p>
  26. * This enum can be used to map between Windows LCID and Java {@link java.util.Locale Locales}
  27. *
  28. * @see <a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f">[MS-LCID]: Windows Language Code Identifier (LCID) Reference</a>
  29. */
  30. @SuppressWarnings("unused")
  31. public enum LocaleID {
  32. AR(0x0001, "ar", "ar", "Arabic", 1256, SUNDAY),
  33. BG(0x0002, "bg", "bg", "Bulgarian", 1251, -1),
  34. CA(0x0003, "ca", "ca", "Catalan", 1252, -1),
  35. ZH_HANS(0x0004, "zh_hans", "zh-Hans", "Chinese (Simplified)", 936, -1),
  36. CS(0x0005, "cs", "cs", "Czech", 1250, -1),
  37. DA(0x0006, "da", "da", "Danish", 1252, -1),
  38. DE(0x0007, "de", "de", "German", 1252, -1),
  39. EL(0x0008, "el", "el", "Greek", 1253, -1),
  40. EN(0x0009, "en", "en", "English", 1252, -1),
  41. ES(0x000A, "es", "es", "Spanish", 1252, -1),
  42. FI(0x000B, "fi", "fi", "Finnish", 1252, -1),
  43. FR(0x000C, "fr", "fr", "French", 1252, -1),
  44. HE(0x000D, "he", "he", "Hebrew", 1255, SUNDAY),
  45. HU(0x000E, "hu", "hu", "Hungarian", 1250, -1),
  46. IS(0x000F, "is", "is", "Icelandic", 1252, -1),
  47. IT(0x0010, "it", "it", "Italian", 1252, -1),
  48. JA(0x0011, "ja", "ja", "Japanese", 932, SUNDAY),
  49. KO(0x0012, "ko", "ko", "Korean", 949, SUNDAY),
  50. NL(0x0013, "nl", "nl", "Dutch", 1252, -1),
  51. NO(0x0014, "no", "no", "Norwegian", 1252, -1),
  52. PL(0x0015, "pl", "pl", "Polish", 1250, -1),
  53. PT(0x0016, "pt", "pt", "Portuguese", 1252, SUNDAY),
  54. RM(0x0017, "rm", "rm", "Romansh", 1252, -1),
  55. RO(0x0018, "ro", "ro", "Romanian", 1250, -1),
  56. RU(0x0019, "ru", "ru", "Russian", 1251, -1),
  57. HR(0x001A, "hr", "hr", "Croatian", 1250, -1),
  58. SK(0x001B, "sk", "sk", "Slovak", 1250, -1),
  59. SQ(0x001C, "sq", "sq", "Albanian", 1250, -1),
  60. SV(0x001D, "sv", "sv", "Swedish", 1252, -1),
  61. TH(0x001E, "th", "th", "Thai", 874, -1),
  62. TR(0x001F, "tr", "tr", "Turkish", 1254, -1),
  63. UR(0x0020, "ur", "ur", "Urdu", 1256, -1),
  64. ID(0x0021, "id", "id", "Indonesian", 1252, SUNDAY),
  65. UK(0x0022, "uk", "uk", "Ukrainian", 1251, -1),
  66. BE(0x0023, "be", "be", "Belarusian", 1251, -1),
  67. SL(0x0024, "sl", "sl", "Slovenian", 1250, -1),
  68. ET(0x0025, "et", "et", "Estonian", 1257, -1),
  69. LV(0x0026, "lv", "lv", "Latvian", 1257, -1),
  70. LT(0x0027, "lt", "lt", "Lithuanian", 1257, -1),
  71. TG(0x0028, "tg", "tg", "Tajik", 1251, -1),
  72. FA(0x0029, "fa", "fa", "Persian", 1256, SATURDAY),
  73. VI(0x002A, "vi", "vi", "Vietnamese", 1258, -1),
  74. HY(0x002B, "hy", "hy", "Armenian", 0, -1),
  75. AZ(0x002C, "az", "az", "Azerbaijani", 1254, -1),
  76. EU(0x002D, "eu", "eu", "Basque", 1252, -1),
  77. HSB(0x002E, "hsb", "hsb", "Upper Sorbian", 1252, -1),
  78. MK(0x002F, "mk", "mk", "Macedonian (FYROM)", 1251, -1),
  79. ST(0x0030, "st", "st", "Southern Sotho", 0, -1),
  80. TS(0x0031, "ts", "ts", "Tsonga", 0, SUNDAY),
  81. TN(0x0032, "tn", "tn", "Setswana", 1252, SUNDAY),
  82. VE(0x0033, "ve", "ve", "Venda", 32759, SUNDAY),
  83. XH(0x0034, "xh", "xh", "isiXhosa", 1252, SUNDAY),
  84. ZU(0x0035, "zu", "zu", "isiZulu", 1252, SUNDAY),
  85. AF(0x0036, "af", "af", "Afrikaans", 1252, SUNDAY),
  86. KA(0x0037, "ka", "ka", "Georgian", 0, -1),
  87. FO(0x0038, "fo", "fo", "Faroese", 1252, -1),
  88. HI(0x0039, "hi", "hi", "Hindi", 0, -1),
  89. MT(0x003A, "mt", "mt", "Maltese", 0, SUNDAY),
  90. SE(0x003B, "se", "se", "Sami (Northern)", 1252, -1),
  91. GA(0x003C, "ga", "ga", "Irish", 1252, SUNDAY),
  92. YI(0x003D, "yi", "yi", "Yiddish", 32759, -1),
  93. MS(0x003E, "ms", "ms", "Malay", 1252, -1),
  94. KK(0x003F, "kk", "kk", "Kazakh", 0, -1),
  95. KY(0x0040, "ky", "ky", "Kyrgyz", 1251, -1),
  96. SW(0x0041, "sw", "sw", "Kiswahili", 1252, SUNDAY),
  97. TK(0x0042, "tk", "tk", "Turkmen", 1250, -1),
  98. UZ(0x0043, "uz", "uz", "Uzbek", 1254, -1),
  99. TT(0x0044, "tt", "tt", "Tatar", 1251, -1),
  100. BN(0x0045, "bn", "bn", "Bangla", 0, SUNDAY),
  101. PA(0x0046, "pa", "pa", "Punjabi", 0, -1),
  102. GU(0x0047, "gu", "gu", "Gujarati", 0, -1),
  103. OR(0x0048, "or", "or", "Odia", 0, -1),
  104. TA(0x0049, "ta", "ta", "Tamil", 0, -1),
  105. TE(0x004A, "te", "te", "Telugu", 0, -1),
  106. KN(0x004B, "kn", "kn", "Kannada", 0, -1),
  107. ML(0x004C, "ml", "ml", "Malayalam", 0, SUNDAY),
  108. AS(0x004D, "as", "as", "Assamese", 0, -1),
  109. MR(0x004E, "mr", "mr", "Marathi", 0, -1),
  110. SA(0x004F, "sa", "sa", "Sanskrit", 0, SUNDAY),
  111. MN(0x0050, "mn", "mn", "Mongolian", 1251, -1),
  112. BO(0x0051, "bo", "bo", "Tibetan", 0, -1),
  113. CY(0x0052, "cy", "cy", "Welsh", 1252, -1),
  114. KM(0x0053, "km", "km", "Khmer", 0, SUNDAY),
  115. LO(0x0054, "lo", "lo", "Lao", 0, SUNDAY),
  116. MY(0x0055, "my", "my", "Burmese", 0, SUNDAY),
  117. GL(0x0056, "gl", "gl", "Galician", 1252, -1),
  118. KOK(0x0057, "kok", "kok", "Konkani", 0, -1),
  119. MNI(0x0058, "mni", "mni", "Manipuri", 32759, -1),
  120. SD(0x0059, "sd", "sd", "Sindhi", 1256, -1),
  121. SYR(0x005A, "syr", "syr", "Syriac", 0, SUNDAY),
  122. SI(0x005B, "si", "si", "Sinhala", 0, -1),
  123. CHR(0x005C, "chr", "chr", "Cherokee", 0, SUNDAY),
  124. IU(0x005D, "iu", "iu", "Inuktitut", 1252, SUNDAY),
  125. AM(0x005E, "am", "am", "Amharic", 0, SUNDAY),
  126. TZM(0x005F, "tzm", "tzm", "Tamazight", 1252, -1),
  127. KS(0x0060, "ks", "ks", "Kashmiri", 32759, -1),
  128. NE(0x0061, "ne", "ne", "Nepali", 0, SUNDAY),
  129. FY(0x0062, "fy", "fy", "Frisian", 1252, -1),
  130. PS(0x0063, "ps", "ps", "Pashto", 0, SATURDAY),
  131. FIL(0x0064, "fil", "fil", "Filipino", 1252, SUNDAY),
  132. DV(0x0065, "dv", "dv", "Divehi", 0, SUNDAY),
  133. BIN(0x0066, "bin", "bin", "Edo", 32759, SUNDAY),
  134. FF(0x0067, "ff", "ff", "Fulah", 1252, -1),
  135. HA(0x0068, "ha", "ha", "Hausa", 1252, -1),
  136. IBB(0x0069, "ibb", "ibb", "Ibibio", 32759, SUNDAY),
  137. YO(0x006A, "yo", "yo", "Yoruba", 1252, -1),
  138. QUZ(0x006B, "quz", "quz", "Quechua", 1252, SUNDAY),
  139. NSO(0x006C, "nso", "nso", "Sesotho sa Leboa", 1252, SUNDAY),
  140. BA(0x006D, "ba", "ba", "Bashkir", 1251, -1),
  141. LB(0x006E, "lb", "lb", "Luxembourgish", 1252, -1),
  142. KL(0x006F, "kl", "kl", "Greenlandic", 1252, -1),
  143. IG(0x0070, "ig", "ig", "Igbo", 1252, -1),
  144. KR(0x0071, "kr", "kr", "Kanuri", 32759, SUNDAY),
  145. OM(0x0072, "om", "om", "Oromo", 0, SUNDAY),
  146. TI(0x0073, "ti", "ti", "Tigrinya", 0, -1),
  147. GN(0x0074, "gn", "gn", "Guarani", 1252, SUNDAY),
  148. HAW(0x0075, "haw", "haw", "Hawaiian", 1252, SUNDAY),
  149. LA(0x0076, "la", "la", "Latin", 32759, SUNDAY),
  150. SO(0x0077, "so", "so", "Somali", 0, -1),
  151. II(0x0078, "ii", "ii", "Yi", 0, -1),
  152. PAP(0x0079, "pap", "pap", "Papiamento", 32759, -1),
  153. ARN(0x007A, "arn", "arn", "Mapudungun", 1252, SUNDAY),
  154. INVALID_A(0x007B, "invalid_a", "", "", 32759, -1),
  155. MOH(0x007C, "moh", "moh", "Mohawk", 1252, SUNDAY),
  156. INVALID_B(0x007D, "invalid_b", "", "", 32759, -1),
  157. BR(0x007E, "br", "br", "Breton", 1252, -1),
  158. INVALID_C(0x007F, "invalid_c", "", "", 1252, -1),
  159. UG(0x0080, "ug", "ug", "Uyghur", 1256, -1),
  160. MI(0x0081, "mi", "mi", "Maori", 0, -1),
  161. OC(0x0082, "oc", "oc", "Occitan", 1252, -1),
  162. CO(0x0083, "co", "co", "Corsican", 1252, -1),
  163. GSW(0x0084, "gsw", "gsw", "Alsatian", 1252, -1),
  164. SAH(0x0085, "sah", "sah", "Sakha", 1251, -1),
  165. QUT(0x0086, "qut", "qut", "Guatemala", 1252, -1),
  166. RW(0x0087, "rw", "rw", "Kinyarwanda", 1252, -1),
  167. WO(0x0088, "wo", "wo", "Wolof", 1252, -1),
  168. INVALID_D(0x0089, "invalid_d", "", "", 32759, -1),
  169. INVALID_E(0x008A, "invalid_e", "", "", 32759, -1),
  170. INVALID_F(0x008B, "invalid_f", "", "", 32759, -1),
  171. PRS(0x008C, "prs", "prs", "Dari", 1256, SATURDAY),
  172. INVALID_G(0x008D, "invalid_g", "", "", 32759, -1),
  173. INVALID_H(0x008E, "invalid_h", "", "", 32759, -1),
  174. INVALID_I(0x008F, "invalid_i", "", "", 32759, -1),
  175. INVALID_J(0x0090, "invalid_j", "", "", 32759, -1),
  176. GD(0x0091, "gd", "gd", "Scottish Gaelic", 1252, -1),
  177. KU(0x0092, "ku", "ku", "Central Kurdish", 1256, SUNDAY),
  178. QUC(0x0093, "quc", "quc", "K'iche'", 32759, -1),
  179. AR_SA(0x0401, "ar_sa", "ar-SA", "Arabic (Saudi Arabia)", 1256, SUNDAY),
  180. BG_BG(0x0402, "bg_bg", "bg-BG", "Bulgarian (Bulgaria)", 1251, -1),
  181. CA_ES(0x0403, "ca_es", "ca-ES", "Catalan (Catalan)", 1252, -1),
  182. ZH_TW(0x0404, "zh_tw", "zh-TW", "Chinese (Traditional, Taiwan)", 950, SUNDAY),
  183. CS_CZ(0x0405, "cs_cz", "cs-CZ", "Czech (Czech Republic)", 1250, -1),
  184. DA_DK(0x0406, "da_dk", "da-DK", "Danish (Denmark)", 1252, -1),
  185. DE_DE(0x0407, "de_de", "de-DE", "German (Germany)", 1252, -1),
  186. EL_GR(0x0408, "el_gr", "el-GR", "Greek (Greece)", 1253, -1),
  187. EN_US(0x0409, "en_us", "en-US", "English (United States)", 1252, SUNDAY),
  188. ES_ES_TRADNL(0x040A, "es_es_tradnl", "es-ES-tradnl", "Spanish (Spain,tradnl)", 1252, -1),
  189. FI_FI(0x040B, "fi_fi", "fi-FI", "Finnish (Finland)", 1252, -1),
  190. FR_FR(0x040C, "fr_fr", "fr-FR", "French (France)", 1252, -1),
  191. HE_IL(0x040D, "he_il", "he-IL", "Hebrew (Israel)", 1255, SUNDAY),
  192. HU_HU(0x040E, "hu_hu", "hu-HU", "Hungarian (Hungary)", 1250, -1),
  193. IS_IS(0x040F, "is_is", "is-IS", "Icelandic (Iceland)", 1252, -1),
  194. IT_IT(0x0410, "it_it", "it-IT", "Italian (Italy)", 1252, -1),
  195. JA_JP(0x0411, "ja_jp", "ja-JP", "Japanese (Japan)", 932, SUNDAY),
  196. KO_KR(0x0412, "ko_kr", "ko-KR", "Korean (Korea)", 949, SUNDAY),
  197. NL_NL(0x0413, "nl_nl", "nl-NL", "Dutch (Netherlands)", 1252, -1),
  198. NB_NO(0x0414, "nb_no", "nb-NO", "Norwegian, Bokm\u00E5l (Norway)", 1252, -1),
  199. PL_PL(0x0415, "pl_pl", "pl-PL", "Polish (Poland)", 1250, -1),
  200. PT_BR(0x0416, "pt_br", "pt-BR", "Portuguese (Brazil)", 1252, SUNDAY),
  201. RM_CH(0x0417, "rm_ch", "rm-CH", "Romansh (Switzerland)", 1252, -1),
  202. RO_RO(0x0418, "ro_ro", "ro-RO", "Romanian (Romania)", 1250, -1),
  203. RU_RU(0x0419, "ru_ru", "ru-RU", "Russian (Russia)", 1251, -1),
  204. HR_HR(0x041A, "hr_hr", "hr-HR", "Croatian (Croatia)", 1250, -1),
  205. SK_SK(0x041B, "sk_sk", "sk-SK", "Slovak (Slovakia)", 1250, -1),
  206. SQ_AL(0x041C, "sq_al", "sq-AL", "Albanian (Albania)", 1250, -1),
  207. SV_SE(0x041D, "sv_se", "sv-SE", "Swedish (Sweden)", 1252, -1),
  208. TH_TH(0x041E, "th_th", "th-TH", "Thai (Thailand)", 874, -1),
  209. TR_TR(0x041F, "tr_tr", "tr-TR", "Turkish (Turkey)", 1254, -1),
  210. UR_PK(0x0420, "ur_pk", "ur-PK", "Urdu (Islamic Republic of Pakistan)", 1256, -1),
  211. ID_ID(0x0421, "id_id", "id-ID", "Indonesian (Indonesia)", 1252, SUNDAY),
  212. UK_UA(0x0422, "uk_ua", "uk-UA", "Ukrainian (Ukraine)", 1251, -1),
  213. BE_BY(0x0423, "be_by", "be-BY", "Belarusian (Belarus)", 1251, -1),
  214. SL_SI(0x0424, "sl_si", "sl-SI", "Slovenian (Slovenia)", 1250, -1),
  215. ET_EE(0x0425, "et_ee", "et-EE", "Estonian (Estonia)", 1257, -1),
  216. LV_LV(0x0426, "lv_lv", "lv-LV", "Latvian (Latvia)", 1257, -1),
  217. LT_LT(0x0427, "lt_lt", "lt-LT", "Lithuanian (Lithuania)", 1257, -1),
  218. TG_CYRL_TJ(0x0428, "tg_cyrl_tj", "tg-Cyrl-TJ", "Tajik (Cyrillic, Tajikistan)", 1251, -1),
  219. FA_IR(0x0429, "fa_ir", "fa-IR", "Persian (Iran)", 1256, SATURDAY),
  220. VI_VN(0x042A, "vi_vn", "vi-VN", "Vietnamese (Vietnam)", 1258, -1),
  221. HY_AM(0x042B, "hy_am", "hy-AM", "Armenian (Armenia)", 0, -1),
  222. AZ_LATN_AZ(0x042C, "az_latn_az", "az-Latn-AZ", "Azerbaijani (Latin, Azerbaijan)", 1254, -1),
  223. EU_ES(0x042D, "eu_es", "eu-ES", "Basque (Basque)", 1252, -1),
  224. HSB_DE(0x042E, "hsb_de", "hsb-DE", "Upper Sorbian (Germany)", 1252, -1),
  225. MK_MK(0x042F, "mk_mk", "mk-MK", "Macedonian (Former Yugoslav Republic of Macedonia)", 1251, -1),
  226. ST_ZA(0x0430, "st_za", "st-ZA", "Southern Sotho (South Africa)", 0, -1),
  227. TS_ZA(0x0431, "ts_za", "ts-ZA", "Tsonga (South Africa)", 0, -1),
  228. TN_ZA(0x0432, "tn_za", "tn-ZA", "Setswana (South Africa)", 1252, SUNDAY),
  229. VE_ZA(0x0433, "ve_za", "ve-ZA", "Venda (South Africa)", 32759, SUNDAY),
  230. XH_ZA(0x0434, "xh_za", "xh-ZA", "isiXhosa (South Africa)", 1252, SUNDAY),
  231. ZU_ZA(0x0435, "zu_za", "zu-ZA", "isiZulu (South Africa)", 1252, SUNDAY),
  232. AF_ZA(0x0436, "af_za", "af-ZA", "Afrikaans (South Africa)", 1252, SUNDAY),
  233. KA_GE(0x0437, "ka_ge", "ka-GE", "Georgian (Georgia)", 0, -1),
  234. FO_FO(0x0438, "fo_fo", "fo-FO", "Faroese (Faroe Islands)", 1252, -1),
  235. HI_IN(0x0439, "hi_in", "hi-IN", "Hindi (India)", 0, -1),
  236. MT_MT(0x043A, "mt_mt", "mt-MT", "Maltese (Malta)", 0, SUNDAY),
  237. SE_NO(0x043B, "se_no", "se-NO", "Sami, Northern (Norway)", 1252, -1),
  238. YI_HEBR(0x043D, "yi_hebr", "yi-Hebr", "Yiddish (Hebrew)", 32759, -1),
  239. MS_MY(0x043E, "ms_my", "ms-MY", "Malay (Malaysia)", 1252, -1),
  240. KK_KZ(0x043F, "kk_kz", "kk-KZ", "Kazakh (Kazakhstan)", 0, -1),
  241. KY_KG(0x0440, "ky_kg", "ky-KG", "Kyrgyz (Kyrgyzstan)", 1251, -1),
  242. SW_KE(0x0441, "sw_ke", "sw-KE", "Kiswahili (Kenya)", 1252, SUNDAY),
  243. TK_TM(0x0442, "tk_tm", "tk-TM", "Turkmen (Turkmenistan)", 1250, -1),
  244. UZ_LATN_UZ(0x0443, "uz_latn_uz", "uz-Latn-UZ", "Uzbek (Latin, Uzbekistan)", 1254, -1),
  245. TT_RU(0x0444, "tt_ru", "tt-RU", "Tatar (Russia)", 1251, -1),
  246. BN_IN(0x0445, "bn_in", "bn-IN", "Bangla (India)", 0, -1),
  247. PA_IN(0x0446, "pa_in", "pa-IN", "Punjabi (India)", 0, -1),
  248. GU_IN(0x0447, "gu_in", "gu-IN", "Gujarati (India)", 0, -1),
  249. OR_IN(0x0448, "or_in", "or-IN", "Odia (India)", 0, -1),
  250. TA_IN(0x0449, "ta_in", "ta-IN", "Tamil (India)", 0, -1),
  251. TE_IN(0x044A, "te_in", "te-IN", "Telugu (India)", 0, -1),
  252. KN_IN(0x044B, "kn_in", "kn-IN", "Kannada (India)", 0, -1),
  253. ML_IN(0x044C, "ml_in", "ml-IN", "Malayalam (India)", 0, SUNDAY),
  254. AS_IN(0x044D, "as_in", "as-IN", "Assamese (India)", 0, -1),
  255. MR_IN(0x044E, "mr_in", "mr-IN", "Marathi (India)", 0, -1),
  256. SA_IN(0x044F, "sa_in", "sa-IN", "Sanskrit (India)", 0, SUNDAY),
  257. MN_MN(0x0450, "mn_mn", "mn-MN", "Mongolian (Cyrillic, Mongolia)", 1251, -1),
  258. BO_CN(0x0451, "bo_cn", "bo-CN", "Tibetan (PRC)", 0, -1),
  259. CY_GB(0x0452, "cy_gb", "cy-GB", "Welsh (United Kingdom)", 1252, -1),
  260. KM_KH(0x0453, "km_kh", "km-KH", "Khmer (Cambodia)", 0, SUNDAY),
  261. LO_LA(0x0454, "lo_la", "lo-LA", "Lao (Lao P.D.R.)", 0, SUNDAY),
  262. MY_MM(0x0455, "my_mm", "my-MM", "Burmese (Myanmar)", 0, SUNDAY),
  263. GL_ES(0x0456, "gl_es", "gl-ES", "Galician (Galician)", 1252, -1),
  264. KOK_IN(0x0457, "kok_in", "kok-IN", "Konkani (India)", 0, -1),
  265. MNI_IN(0x0458, "mni_in", "mni-IN", "Manipuri (India)", 32759, -1),
  266. SD_DEVA_IN(0x0459, "sd_deva_in", "sd-Deva-IN", "Sindhi (Devanagari, India)", 32759, SUNDAY),
  267. SYR_SY(0x045A, "syr_sy", "syr-SY", "Syriac (Syria)", 0, SUNDAY),
  268. SI_LK(0x045B, "si_lk", "si-LK", "Sinhala (Sri Lanka)", 0, -1),
  269. CHR_CHER_US(0x045C, "chr_cher_us", "chr-Cher-US", "Cherokee (Cherokee)", 0, SUNDAY),
  270. IU_CANS_CA(0x045D, "iu_cans_ca", "iu-Cans-CA", "Inuktitut (Syllabics, Canada)", 0, SUNDAY),
  271. AM_ET(0x045E, "am_et", "am-ET", "Amharic (Ethiopia)", 0, SUNDAY),
  272. TZM_ARAB_MA(0x045F, "tzm_arab_ma", "tzm-Arab-MA", "Central Atlas Tamazight (Arabic, Morocco)", 32759, SATURDAY),
  273. KS_ARAB(0x0460, "ks_arab", "ks-Arab", "Kashmiri (Perso-Arabic)", 32759, SUNDAY),
  274. NE_NP(0x0461, "ne_np", "ne-NP", "Nepali (Nepal)", 0, SUNDAY),
  275. FY_NL(0x0462, "fy_nl", "fy-NL", "Frisian (Netherlands)", 1252, -1),
  276. PS_AF(0x0463, "ps_af", "ps-AF", "Pashto (Afghanistan)", 0, SATURDAY),
  277. FIL_PH(0x0464, "fil_ph", "fil-PH", "Filipino (Philippines)", 1252, SUNDAY),
  278. DV_MV(0x0465, "dv_mv", "dv-MV", "Divehi (Maldives)", 0, SUNDAY),
  279. BIN_NG(0x0466, "bin_ng", "bin-NG", "Edo (Nigeria)", 32759, SUNDAY),
  280. FUV_NG(0x0467, "fuv_ng", "fuv-NG", "fuv (Nigeria)", 32759, -1),
  281. HA_LATN_NG(0x0468, "ha_latn_ng", "ha-Latn-NG", "Hausa (Latin, Nigeria)", 1252, -1),
  282. IBB_NG(0x0469, "ibb_ng", "ibb-NG", "Ibibio (Nigeria)", 32759, SUNDAY),
  283. YO_NG(0x046A, "yo_ng", "yo-NG", "Yoruba (Nigeria)", 1252, -1),
  284. QUZ_BO(0x046B, "quz_bo", "quz-BO", "Quechua (Bolivia)", 1252, SUNDAY),
  285. NSO_ZA(0x046C, "nso_za", "nso-ZA", "Sesotho sa Leboa (South Africa)", 1252, SUNDAY),
  286. BA_RU(0x046D, "ba_ru", "ba-RU", "Bashkir (Russia)", 1251, -1),
  287. LB_LU(0x046E, "lb_lu", "lb-LU", "Luxembourgish (Luxembourg)", 1252, -1),
  288. KL_GL(0x046F, "kl_gl", "kl-GL", "Greenlandic (Greenland)", 1252, -1),
  289. IG_NG(0x0470, "ig_ng", "ig-NG", "Igbo (Nigeria)", 1252, -1),
  290. KR_NG(0x0471, "kr_ng", "kr-NG", "Kanuri (Nigeria)", 32759, SUNDAY),
  291. OM_ET(0x0472, "om_et", "om-ET", "Oromo (Ethiopia)", 0, SUNDAY),
  292. TI_ET(0x0473, "ti_et", "ti-ET", "Tigrinya (Ethiopia)", 0, SUNDAY),
  293. GN_PY(0x0474, "gn_py", "gn-PY", "Guarani (Paraguay)", 1252, SUNDAY),
  294. HAW_US(0x0475, "haw_us", "haw-US", "Hawaiian (United States)", 1252, SUNDAY),
  295. LA_LATN(0x0476, "la_latn", "la-Latn", "Latin (Latin)", 32759, -1),
  296. SO_SO(0x0477, "so_so", "so-SO", "Somali (Somalia)", 0, -1),
  297. II_CN(0x0478, "ii_cn", "ii-CN", "Yi (PRC)", 0, -1),
  298. PAP_029(0x0479, "pap_029", "pap-029", "Papiamento (Caribbean)", 32759, -1),
  299. ARN_CL(0x047A, "arn_cl", "arn-CL", "Mapudungun (Chile)", 1252, SUNDAY),
  300. MOH_CA(0x047C, "moh_ca", "moh-CA", "Mohawk (Mohawk)", 1252, SUNDAY),
  301. BR_FR(0x047E, "br_fr", "br-FR", "Breton (France)", 1252, -1),
  302. UG_CN(0x0480, "ug_cn", "ug-CN", "Uyghur (PRC)", 1256, -1),
  303. MI_NZ(0x0481, "mi_nz", "mi-NZ", "Maori (New Zealand)", 0, -1),
  304. OC_FR(0x0482, "oc_fr", "oc-FR", "Occitan (France)", 1252, -1),
  305. CO_FR(0x0483, "co_fr", "co-FR", "Corsican (France)", 1252, -1),
  306. GSW_FR(0x0484, "gsw_fr", "gsw-FR", "Alsatian (France)", 1252, -1),
  307. SAH_RU(0x0485, "sah_ru", "sah-RU", "Sakha (Russia)", 1251, -1),
  308. QUT_GT(0x0486, "qut_gt", "qut-GT", "qut (Guatemala)", 1252, -1),
  309. RW_RW(0x0487, "rw_rw", "rw-RW", "Kinyarwanda (Rwanda)", 1252, -1),
  310. WO_SN(0x0488, "wo_sn", "wo-SN", "Wolof (Senegal)", 1252, -1),
  311. PRS_AF(0x048C, "prs_af", "prs-AF", "Dari (Afghanistan)", 1256, SATURDAY),
  312. PLT_MG(0x048D, "plt_mg", "plt-MG", "plt (Madagascar)", 32759, -1),
  313. ZH_YUE_HK(0x048E, "zh_yue_hk", "yue-HK", "yue (Hong Kong)", 32759, -1),
  314. TDD_TALE_CN(0x048F, "tdd_tale_cn", "tdd-Tale-CN", "tdd (Tai Le,China)", 32759, -1),
  315. KHB_TALU_CN(0x0490, "khb_talu_cn", "khb-Talu-CN", "khb (New Tai Lue,China)", 32759, -1),
  316. GD_GB(0x0491, "gd_gb", "gd-GB", "Scottish Gaelic (United Kingdom)", 1252, -1),
  317. KU_ARAB_IQ(0x0492, "ku_arab_iq", "ku-Arab-IQ", "Central Kurdish (Iraq)", 1256, SUNDAY),
  318. QUC_CO(0x0493, "quc_co", "quc-CO", "quc (Colombia)", 32759, -1),
  319. QPS_PLOC(0x0501, "qps_ploc", "qps-Ploc", "qps (Ploc)", 1250, -1),
  320. QPS_PLOCA(0x05FE, "qps_ploca", "qps-ploca", "qps (ploca)", 932, -1),
  321. AR_IQ(0x0801, "ar_iq", "ar-IQ", "Arabic (Iraq)", 1256, SATURDAY),
  322. CA_ES_VALENCIA(0x0803, "ca_es_valencia", "ca-ES-valencia", "Valencian (Spain)", 1252, -1),
  323. ZH_CN(0x0804, "zh_cn", "zh-CN", "Chinese (Simplified, PRC)", 936, -1),
  324. DE_CH(0x0807, "de_ch", "de-CH", "German (Switzerland)", 1252, -1),
  325. EN_GB(0x0809, "en_gb", "en-GB", "English (United Kingdom)", 1252, -1),
  326. ES_MX(0x080A, "es_mx", "es-MX", "Spanish (Mexico)", 1252, SUNDAY),
  327. FR_BE(0x080C, "fr_be", "fr-BE", "French (Belgium)", 1252, -1),
  328. IT_CH(0x0810, "it_ch", "it-CH", "Italian (Switzerland)", 1252, -1),
  329. JA_PLOC_JP(0x0811, "ja_ploc_jp", "ja-Ploc-JP", "Japanese (Ploc,Japan)", 32759, -1),
  330. NL_BE(0x0813, "nl_be", "nl-BE", "Dutch (Belgium)", 1252, -1),
  331. NN_NO(0x0814, "nn_no", "nn-NO", "Norwegian, Nynorsk (Norway)", 1252, -1),
  332. PT_PT(0x0816, "pt_pt", "pt-PT", "Portuguese (Portugal)", 1252, SUNDAY),
  333. RO_MD(0x0818, "ro_md", "ro-MD", "Romanian (Moldova)", 0, -1),
  334. RU_MD(0x0819, "ru_md", "ru-MD", "Russian (Moldova)", 32759, -1),
  335. SR_LATN_CS(0x081A, "sr_latn_cs", "sr-Latn-CS", "Serbian (Latin,Serbia and Montenegro)", 1250, -1),
  336. SV_FI(0x081D, "sv_fi", "sv-FI", "Swedish (Finland)", 1252, -1),
  337. UR_IN(0x0820, "ur_in", "ur-IN", "Urdu (India)", 0, -1),
  338. INVALID_K(0x0827, "invalid_k", "", "", 32759, -1),
  339. AZ_CYRL_AZ(0x082C, "az_cyrl_az", "az-Cyrl-AZ", "Azerbaijani (Cyrillic, Azerbaijan)", 1251, -1),
  340. DSB_DE(0x082E, "dsb_de", "dsb-DE", "Lower Sorbian (Germany)", 1252, -1),
  341. TN_BW(0x0832, "tn_bw", "tn-BW", "Setswana (Botswana)", 1252, SUNDAY),
  342. SE_SE(0x083B, "se_se", "se-SE", "Sami, Northern (Sweden)", 1252, -1),
  343. GA_IE(0x083C, "ga_ie", "ga-IE", "Irish (Ireland)", 1252, SUNDAY),
  344. MS_BN(0x083E, "ms_bn", "ms-BN", "Malay (Brunei Darussalam)", 1252, -1),
  345. UZ_CYRL_UZ(0x0843, "uz_cyrl_uz", "uz-Cyrl-UZ", "Uzbek (Cyrillic, Uzbekistan)", 1251, -1),
  346. BN_BD(0x0845, "bn_bd", "bn-BD", "Bangla (Bangladesh)", 0, SUNDAY),
  347. PA_ARAB_PK(0x0846, "pa_arab_pk", "pa-Arab-PK", "Punjabi (Islamic Republic of Pakistan)", 1256, -1),
  348. TA_LK(0x0849, "ta_lk", "ta-LK", "Tamil (Sri Lanka)", 0, -1),
  349. MN_MONG_CN(0x0850, "mn_mong_cn", "mn-Mong-CN", "Mongolian (Traditional Mongolian, PRC)", 0, -1),
  350. BO_BT(0x0851, "bo_bt", "bo-BT", "Tibetan (Bhutan)", 32759, -1),
  351. SD_ARAB_PK(0x0859, "sd_arab_pk", "sd-Arab-PK", "Sindhi (Islamic Republic of Pakistan)", 1256, -1),
  352. IU_LATN_CA(0x085D, "iu_latn_ca", "iu-Latn-CA", "Inuktitut (Latin, Canada)", 1252, SUNDAY),
  353. TZM_LATN_DZ(0x085F, "tzm_latn_dz", "tzm-Latn-DZ", "Tamazight (Latin, Algeria)", 1252, -1),
  354. KS_DEVA(0x0860, "ks_deva", "ks-Deva", "Kashmiri (Devanagari)", 32759, -1),
  355. NE_IN(0x0861, "ne_in", "ne-IN", "Nepali (India)", 0, SUNDAY),
  356. FF_LATN_SN(0x0867, "ff_latn_sn", "ff-Latn-SN", "Fulah (Latin, Senegal)", 1252, -1),
  357. QUZ_EC(0x086B, "quz_ec", "quz-EC", "Quechua (Ecuador)", 1252, SUNDAY),
  358. TI_ER(0x0873, "ti_er", "ti-ER", "Tigrinya (Eritrea)", 0, -1),
  359. QPS_PLOCM(0x09FF, "qps_plocm", "qps-plocm", "qps (plocm)", 1256, -1),
  360. AR_EG(0x0C01, "ar_eg", "ar-EG", "Arabic (Egypt)", 1256, SATURDAY),
  361. ZH_HK(0x0C04, "zh_hk", "zh-HK", "Chinese (Traditional, Hong Kong S.A.R.)", 950, SUNDAY),
  362. DE_AT(0x0C07, "de_at", "de-AT", "German (Austria)", 1252, -1),
  363. EN_AU(0x0C09, "en_au", "en-AU", "English (Australia)", 1252, -1),
  364. ES_ES(0x0C0A, "es_es", "es-ES", "Spanish (Spain)", 1252, -1),
  365. FR_CA(0x0C0C, "fr_ca", "fr-CA", "French (Canada)", 1252, SUNDAY),
  366. SR_CYRL_CS(0x0C1A, "sr_cyrl_cs", "sr-Cyrl-CS", "Serbian (Cyrillic,Serbia and Montenegro)", 1251, -1),
  367. SE_FI(0x0C3B, "se_fi", "se-FI", "Sami, Northern (Finland)", 1252, -1),
  368. MN_MONG_MN(0x0C50, "mn_mong_mn", "mn-Mong-MN", "Mongolian (Traditional Mongolian, Mongolia)", 0, -1),
  369. DZ_BT(0x0C51, "dz_bt", "dz-BT", "Dzongkha (Bhutan)", 0, SUNDAY),
  370. TMZ_MA(0x0C5F, "tmz_ma", "tmz-MA", "tmz (Morocco)", 32759, -1),
  371. QUZ_PE(0x0C6b, "quz_pe", "quz-PE", "Quechua (Peru)", 1252, -1),
  372. AR_LY(0x1001, "ar_ly", "ar-LY", "Arabic (Libya)", 1256, SATURDAY),
  373. ZH_SG(0x1004, "zh_sg", "zh-SG", "Chinese (Simplified, Singapore)", 936, SUNDAY),
  374. DE_LU(0x1007, "de_lu", "de-LU", "German (Luxembourg)", 1252, -1),
  375. EN_CA(0x1009, "en_ca", "en-CA", "English (Canada)", 1252, SUNDAY),
  376. ES_GT(0x100A, "es_gt", "es-GT", "Spanish (Guatemala)", 1252, SUNDAY),
  377. FR_CH(0x100C, "fr_ch", "fr-CH", "French (Switzerland)", 1252, -1),
  378. HR_BA(0x101A, "hr_ba", "hr-BA", "Croatian (Latin, Bosnia and Herzegovina)", 1250, -1),
  379. SMJ_NO(0x103B, "smj_no", "smj-NO", "Sami, Lule (Norway)", 1252, -1),
  380. TZM_TFNG_MA(0x105F, "tzm_tfng_ma", "tzm-Tfng-MA", "Central Atlas Tamazight (Tifinagh, Morocco)", 0, SATURDAY),
  381. AR_DZ(0x1401, "ar_dz", "ar-DZ", "Arabic (Algeria)", 1256, SATURDAY),
  382. ZH_MO(0x1404, "zh_mo", "zh-MO", "Chinese (Traditional, Macao S.A.R.)", 950, SUNDAY),
  383. DE_LI(0x1407, "de_li", "de-LI", "German (Liechtenstein)", 1252, -1),
  384. EN_NZ(0x1409, "en_nz", "en-NZ", "English (New Zealand)", 1252, SUNDAY),
  385. ES_CR(0x140A, "es_cr", "es-CR", "Spanish (Costa Rica)", 1252, -1),
  386. FR_LU(0x140C, "fr_lu", "fr-LU", "French (Luxembourg)", 1252, -1),
  387. BS_LATN_BA(0x141A, "bs_latn_ba", "bs-Latn-BA", "Bosnian (Latin, Bosnia and Herzegovina)", 1250, -1),
  388. SMJ_SE(0x143B, "smj_se", "smj-SE", "Sami, Lule (Sweden)", 1252, -1),
  389. AR_MA(0x1801, "ar_ma", "ar-MA", "Arabic (Morocco)", 1256, -1),
  390. EN_IE(0x1809, "en_ie", "en-IE", "English (Ireland)", 1252, SUNDAY),
  391. ES_PA(0x180A, "es_pa", "es-PA", "Spanish (Panama)", 1252, SUNDAY),
  392. FR_MC(0x180C, "fr_mc", "fr-MC", "French (Monaco)", 1252, -1),
  393. SR_LATN_BA(0x181A, "sr_latn_ba", "sr-Latn-BA", "Serbian (Latin, Bosnia and Herzegovina)", 1250, -1),
  394. SMA_NO(0x183B, "sma_no", "sma-NO", "Sami, Southern (Norway)", 1252, -1),
  395. AR_TN(0x1C01, "ar_tn", "ar-TN", "Arabic (Tunisia)", 1256, -1),
  396. EN_ZA(0x1C09, "en_za", "en-ZA", "English (South Africa)", 1252, SUNDAY),
  397. ES_DO(0x1C0A, "es_do", "es-DO", "Spanish (Dominican Republic)", 1252, SUNDAY),
  398. INVALID_L(0x1C0C, "invalid_l", "", "", 32759, -1),
  399. SR_CYRL_BA(0x1C1A, "sr_cyrl_ba", "sr-Cyrl-BA", "Serbian (Cyrillic, Bosnia and Herzegovina)", 1251, -1),
  400. SMA_SE(0x1C3B, "sma_se", "sma-SE", "Sami, Southern (Sweden)", 1252, -1),
  401. AR_OM(0x2001, "ar_om", "ar-OM", "Arabic (Oman)", 1256, SUNDAY),
  402. INVALID_M(0x2008, "invalid_m", "", "", 32759, -1),
  403. EN_JM(0x2009, "en_jm", "en-JM", "English (Jamaica)", 1252, SUNDAY),
  404. ES_VE(0x200A, "es_ve", "es-VE", "Spanish (Venezuela)", 1252, -1),
  405. FR_RE(0x200C, "fr_re", "fr-RE", "French (Reunion)", 0, -1),
  406. BS_CYRL_BA(0x201A, "bs_cyrl_ba", "bs-Cyrl-BA", "Bosnian (Cyrillic, Bosnia and Herzegovina)", 1251, -1),
  407. SMS_FI(0x203B, "sms_fi", "sms-FI", "Sami, Skolt (Finland)", 1252, -1),
  408. AR_YE(0x2401, "ar_ye", "ar-YE", "Arabic (Yemen)", 1256, SATURDAY),
  409. EN_029(0x2409, "en_029", "en-029", "English (Caribbean)", 1252, -1),
  410. ES_CO(0x240A, "es_co", "es-CO", "Spanish (Colombia)", 1252, SUNDAY),
  411. FR_CD(0x240C, "fr_cd", "fr-CD", "French (Congo DRC)", 0, -1),
  412. SR_LATN_RS(0x241A, "sr_latn_rs", "sr-Latn-RS", "Serbian (Latin, Serbia)", 1250, -1),
  413. SMN_FI(0x243B, "smn_fi", "smn-FI", "Sami, Inari (Finland)", 1252, -1),
  414. AR_SY(0x2801, "ar_sy", "ar-SY", "Arabic (Syria)", 1256, SATURDAY),
  415. EN_BZ(0x2809, "en_bz", "en-BZ", "English (Belize)", 1252, SUNDAY),
  416. ES_PE(0x280A, "es_pe", "es-PE", "Spanish (Peru)", 1252, SUNDAY),
  417. FR_SN(0x280C, "fr_sn", "fr-SN", "French (Senegal)", 0, -1),
  418. SR_CYRL_RS(0x281A, "sr_cyrl_rs", "sr-Cyrl-RS", "Serbian (Cyrillic, Serbia)", 1251, -1),
  419. AR_JO(0x2C01, "ar_jo", "ar-JO", "Arabic (Jordan)", 1256, SATURDAY),
  420. EN_TT(0x2C09, "en_tt", "en-TT", "English (Trinidad and Tobago)", 1252, SUNDAY),
  421. ES_AR(0x2C0A, "es_ar", "es-AR", "Spanish (Argentina)", 1252, SUNDAY),
  422. FR_CM(0x2C0C, "fr_cm", "fr-CM", "French (Cameroon)", 0, -1),
  423. SR_LATN_ME(0x2C1A, "sr_latn_me", "sr-Latn-ME", "Serbian (Latin, Montenegro)", 1250, -1),
  424. AR_LB(0x3001, "ar_lb", "ar-LB", "Arabic (Lebanon)", 1256, -1),
  425. EN_ZW(0x3009, "en_zw", "en-ZW", "English (Zimbabwe)", 1252, SUNDAY),
  426. ES_EC(0x300A, "es_ec", "es-EC", "Spanish (Ecuador)", 1252, -1),
  427. FR_CI(0x300C, "fr_ci", "fr-CI", "French (C\u00F4te d\u2019Ivoire)", 0, -1),
  428. SR_CYRL_ME(0x301A, "sr_cyrl_me", "sr-Cyrl-ME", "Serbian (Cyrillic, Montenegro)", 1251, -1),
  429. AR_KW(0x3401, "ar_kw", "ar-KW", "Arabic (Kuwait)", 1256, SATURDAY),
  430. EN_PH(0x3409, "en_ph", "en-PH", "English (Philippines)", 1252, SUNDAY),
  431. ES_CL(0x340A, "es_cl", "es-CL", "Spanish (Chile)", 1252, -1),
  432. FR_ML(0x340C, "fr_ml", "fr-ML", "French (Mali)", 0, -1),
  433. AR_AE(0x3801, "ar_ae", "ar-AE", "Arabic (U.A.E.)", 1256, SATURDAY),
  434. EN_ID(0x3809, "en_id", "en-ID", "English (Indonesia)", 32759, SUNDAY),
  435. ES_UY(0x380A, "es_uy", "es-UY", "Spanish (Uruguay)", 1252, -1),
  436. FR_MA(0x380C, "fr_ma", "fr-MA", "French (Morocco)", 0, SATURDAY),
  437. AR_BH(0x3c01, "ar_bh", "ar-BH", "Arabic (Bahrain)", 1256, SATURDAY),
  438. EN_HK(0x3c09, "en_hk", "en-HK", "English (Hong Kong SAR)", 0, SUNDAY),
  439. ES_PY(0x3c0A, "es_py", "es-PY", "Spanish (Paraguay)", 1252, SUNDAY),
  440. FR_HT(0x3c0C, "fr_ht", "fr-HT", "French (Haiti)", 0, -1),
  441. AR_QA(0x4001, "ar_qa", "ar-QA", "Arabic (Qatar)", 1256, SATURDAY),
  442. EN_IN(0x4009, "en_in", "en-IN", "English (India)", 1252, -1),
  443. ES_BO(0x400A, "es_bo", "es-BO", "Spanish (Bolivia)", 1252, -1),
  444. AR_PLOC_SA(0x4401, "ar_ploc_sa", "ar-Ploc-SA", "Arabic (Ploc,Saudi Arabia)", 32759, -1),
  445. EN_MY(0x4409, "en_my", "en-MY", "English (Malaysia)", 1252, SUNDAY),
  446. ES_SV(0x440A, "es_sv", "es-SV", "Spanish (El Salvador)", 1252, SUNDAY),
  447. AR_145(0x4801, "ar_145", "ar-145", "Arabic (Western Asia)", 32759, -1),
  448. EN_SG(0x4809, "en_sg", "en-SG", "English (Singapore)", 1252, SUNDAY),
  449. ES_HN(0x480A, "es_hn", "es-HN", "Spanish (Honduras)", 1252, SUNDAY),
  450. EN_AE(0x4C09, "en_ae", "en-AE", "English (United Arab Emirates)", 32759, -1),
  451. ES_NI(0x4C0A, "es_ni", "es-NI", "Spanish (Nicaragua)", 1252, SUNDAY),
  452. EN_BH(0x5009, "en_bh", "en-BH", "English (Bahrain)", 32759, -1),
  453. ES_PR(0x500A, "es_pr", "es-PR", "Spanish (Puerto Rico)", 1252, SUNDAY),
  454. EN_EG(0x5409, "en_eg", "en-EG", "English (Egypt)", 32759, -1),
  455. ES_US(0x540A, "es_us", "es-US", "Spanish (United States)", 1252, SUNDAY),
  456. EN_JO(0x5809, "en_jo", "en-JO", "English (Jordan)", 32759, -1),
  457. ES_419(0x580A, "es_419", "es-419", "Spanish (Latin America)", 0, -1),
  458. EN_KW(0x5C09, "en_kw", "en-KW", "English (Kuwait)", 32759, -1),
  459. ES_CU(0x5C0A, "es_cu", "es-CU", "Spanish (Cuba)", 0, -1),
  460. EN_TR(0x6009, "en_tr", "en-TR", "English (Turkey)", 32759, -1),
  461. EN_YE(0x6409, "en_ye", "en-YE", "English (Yemen)", 32759, -1),
  462. BS_CYRL(0x641A, "bs_cyrl", "bs-Cyrl", "Bosnian (Cyrillic)", 1251, -1),
  463. BS_LATN(0x681A, "bs_latn", "bs-Latn", "Bosnian (Latin)", 1250, -1),
  464. SR_CYRL(0x6C1A, "sr_cyrl", "sr-Cyrl", "Serbian (Cyrillic)", 1251, -1),
  465. SR_LATN(0x701A, "sr_latn", "sr-Latn", "Serbian (Latin)", 1250, -1),
  466. SMN(0x703B, "smn", "smn", "Sami (Inari)", 1252, -1),
  467. AZ_CYRL(0x742C, "az_cyrl", "az-Cyrl", "Azerbaijani (Cyrillic)", 1251, -1),
  468. SMS(0x743B, "sms", "sms", "Sami (Skolt)", 1252, -1),
  469. ZH(0x7804, "zh", "zh", "Chinese", 936, -1),
  470. NN(0x7814, "nn", "nn", "Norwegian (Nynorsk)", 1252, -1),
  471. BS(0x781A, "bs", "bs", "Bosnian", 1250, -1),
  472. AZ_LATN(0x782C, "az_latn", "az-Latn", "Azerbaijani (Latin)", 1254, -1),
  473. SMA(0x783B, "sma", "sma", "Sami (Southern)", 1252, -1),
  474. UZ_CYRL(0x7843, "uz_cyrl", "uz-Cyrl", "Uzbek (Cyrillic)", 1251, -1),
  475. MN_CYRL(0x7850, "mn_cyrl", "mn-Cyrl", "Mongolian (Cyrillic)", 1251, -1),
  476. IU_CANS(0x785D, "iu_cans", "iu-Cans", "Inuktitut (Syllabics)", 0, SUNDAY),
  477. TZM_TFNG(0x785F, "tzm_tfng", "tzm-Tfng", "Tamazight (Tifinagh)", 0, -1),
  478. ZH_HANT(0x7C04, "zh_hant", "zh-Hant", "Chinese (Traditional)", 950, SUNDAY),
  479. NB(0x7C14, "nb", "nb", "Norwegian (Bokm\u00E5l)", 1252, -1),
  480. SR(0x7C1A, "sr", "sr", "Serbian", 1250, -1),
  481. TG_CYRL(0x7C28, "tg_cyrl", "tg-Cyrl", "Tajik (Cyrillic)", 1251, -1),
  482. DSB(0x7C2E, "dsb", "dsb", "Lower Sorbian", 1252, -1),
  483. SMJ(0x7C3B, "smj", "smj", "Sami (Lule)", 1252, -1),
  484. UZ_LATN(0x7C43, "uz_latn", "uz-Latn", "Uzbek (Latin)", 1254, -1),
  485. PA_ARAB(0x7C46, "pa_arab", "pa-Arab", "Punjabi (Arabic)", 1256, -1),
  486. MN_MONG(0x7C50, "mn_mong", "mn-Mong", "Mongolian (Traditional Mongolian)", 0, -1),
  487. SD_ARAB(0x7C59, "sd_arab", "sd-Arab", "Sindhi (Arabic)", 1256, -1),
  488. CHR_CHER(0x7C5C, "chr_cher", "chr-Cher", "Cherokee (Cherokee)", 0, SUNDAY),
  489. IU_LATN(0x7C5D, "iu_latn", "iu-Latn", "Inuktitut (Latin)", 1252, SUNDAY),
  490. TZM_LATN(0x7C5F, "tzm_latn", "tzm-Latn", "Tamazight (Latin)", 1252, -1),
  491. FF_LATN(0x7C67, "ff_latn", "ff-Latn", "Fulah (Latin)", 1252, -1),
  492. HA_LATN(0x7C68, "ha_latn", "ha-Latn", "Hausa (Latin)", 1252, -1),
  493. KU_ARAB(0x7C92, "ku_arab", "ku-Arab", "Central Kurdish (Arabic)", 1256, -1),
  494. INVALID_N(0xF2EE, "invalid_n", "", "", 0, -1),
  495. INVALID_O(0xEEEE, "invalid_o", "", "", 0, -1),
  496. ;
  497. private final int lcid;
  498. private final String windowsId;
  499. private final String languageTag;
  500. private final String description;
  501. private final int defaultCodepage;
  502. private final int firstWeekday;
  503. private static final Map<String, LocaleID> languageTagLookup =
  504. Stream.of(values()).filter(LocaleID::isValid).collect(Collectors.toMap(LocaleID::getLanguageTag, Function.identity()));
  505. private static final Map<Integer, LocaleID> lcidLookup =
  506. Stream.of(values()).collect(Collectors.toMap(LocaleID::getLcid, Function.identity()));
  507. LocaleID(int lcid, String windowsId, String languageTag, String description, int defaultCodepage, int firstWeekday) {
  508. this.lcid = lcid;
  509. this.windowsId = windowsId;
  510. this.languageTag = languageTag;
  511. this.description = description;
  512. this.defaultCodepage = defaultCodepage;
  513. this.firstWeekday = (firstWeekday == -1) ? Calendar.MONDAY : firstWeekday;
  514. }
  515. public int getLcid() {
  516. return lcid;
  517. }
  518. public String getWindowsId() {
  519. return windowsId;
  520. }
  521. public String getLanguageTag() {
  522. return languageTag;
  523. }
  524. public String getDescription() {
  525. return description;
  526. }
  527. public int getDefaultCodepage() {
  528. return defaultCodepage;
  529. }
  530. public int getFirstWeekday() {
  531. return firstWeekday;
  532. }
  533. private boolean isValid() {
  534. return !languageTag.isEmpty();
  535. }
  536. /**
  537. * Lookup via the Java language tag / locale display name
  538. *
  539. * @param languageTag the locale display name
  540. * @return if found the LocaleId, otherwise {@code null}
  541. */
  542. public static LocaleID lookupByLanguageTag(String languageTag) {
  543. return languageTagLookup.get(languageTag);
  544. }
  545. /**
  546. * Lookup via the Windows LCID
  547. *
  548. * @param lcid the language code id (LCID)
  549. * @return if found the LocaleId, otherwise {@code null}
  550. */
  551. public static LocaleID lookupByLcid(int lcid) {
  552. return lcidLookup.get(lcid);
  553. }
  554. }