twitter_cldr 2.2.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (387) hide show
  1. data/Gemfile +2 -2
  2. data/History.txt +11 -0
  3. data/README.md +2 -2
  4. data/Rakefile +1 -1
  5. data/lib/twitter_cldr.rb +1 -0
  6. data/lib/twitter_cldr/core_ext.rb +1 -1
  7. data/lib/twitter_cldr/formatters/base.rb +3 -3
  8. data/lib/twitter_cldr/formatters/calendars/datetime_formatter.rb +32 -23
  9. data/lib/twitter_cldr/formatters/numbers/abbreviated/abbreviated_number_formatter.rb +3 -2
  10. data/lib/twitter_cldr/localized/localized_date.rb +32 -13
  11. data/lib/twitter_cldr/localized/localized_datetime.rb +24 -6
  12. data/lib/twitter_cldr/localized/localized_time.rb +12 -3
  13. data/lib/twitter_cldr/resources/download.rb +7 -1
  14. data/lib/twitter_cldr/resources/language_codes_importer.rb +8 -8
  15. data/lib/twitter_cldr/resources/loader.rb +1 -1
  16. data/lib/twitter_cldr/resources/tailoring_importer.rb +1 -3
  17. data/lib/twitter_cldr/shared/languages.rb +1 -1
  18. data/lib/twitter_cldr/tokenizers/calendars/datetime_tokenizer.rb +2 -1
  19. data/lib/twitter_cldr/version.rb +1 -1
  20. data/resources/collation/tailoring/af.yml +0 -1
  21. data/resources/collation/tailoring/ar.yml +3 -12
  22. data/resources/collation/tailoring/be.yml +4 -5
  23. data/resources/collation/tailoring/bg.yml +1 -2
  24. data/resources/collation/tailoring/bn.yml +3 -5
  25. data/resources/collation/tailoring/ca.yml +3 -6
  26. data/resources/collation/tailoring/cs.yml +3 -14
  27. data/resources/collation/tailoring/cy.yml +3 -26
  28. data/resources/collation/tailoring/da.yml +3 -31
  29. data/resources/collation/tailoring/de.yml +0 -1
  30. data/resources/collation/tailoring/el.yml +0 -1
  31. data/resources/collation/tailoring/en.yml +0 -1
  32. data/resources/collation/tailoring/es.yml +3 -4
  33. data/resources/collation/tailoring/eu.yml +0 -1
  34. data/resources/collation/tailoring/fa.yml +3 -38
  35. data/resources/collation/tailoring/fi.yml +3 -24
  36. data/resources/collation/tailoring/fil.yml +3 -7
  37. data/resources/collation/tailoring/fr.yml +0 -1
  38. data/resources/collation/tailoring/ga.yml +0 -1
  39. data/resources/collation/tailoring/gl.yml +0 -1
  40. data/resources/collation/tailoring/he.yml +3 -2
  41. data/resources/collation/tailoring/hi.yml +3 -5
  42. data/resources/collation/tailoring/hu.yml +3 -64
  43. data/resources/collation/tailoring/id.yml +0 -1
  44. data/resources/collation/tailoring/it.yml +0 -1
  45. data/resources/collation/tailoring/ja.yml +55 -7429
  46. data/resources/collation/tailoring/ko.yml +3 -7478
  47. data/resources/collation/tailoring/lv.yml +3 -18
  48. data/resources/collation/tailoring/ms.yml +0 -1
  49. data/resources/collation/tailoring/nb.yml +3 -31
  50. data/resources/collation/tailoring/nl.yml +0 -1
  51. data/resources/collation/tailoring/pl.yml +3 -20
  52. data/resources/collation/tailoring/pt.yml +0 -1
  53. data/resources/collation/tailoring/ro.yml +3 -16
  54. data/resources/collation/tailoring/ru.yml +1 -2
  55. data/resources/collation/tailoring/sk.yml +3 -18
  56. data/resources/collation/tailoring/sq.yml +3 -33
  57. data/resources/collation/tailoring/sr.yml +1 -2
  58. data/resources/collation/tailoring/sv.yml +3 -30
  59. data/resources/collation/tailoring/ta.yml +3 -29
  60. data/resources/collation/tailoring/th.yml +3 -11
  61. data/resources/collation/tailoring/tr.yml +3 -15
  62. data/resources/collation/tailoring/uk.yml +4 -5
  63. data/resources/collation/tailoring/ur.yml +3 -83
  64. data/resources/collation/tailoring/vi.yml +3 -20
  65. data/resources/collation/tailoring/zh-Hant.yml +14 -75240
  66. data/resources/collation/tailoring/zh.yml +44 -41897
  67. data/resources/collation/tries/af.dump +0 -0
  68. data/resources/collation/tries/ar.dump +0 -0
  69. data/resources/collation/tries/be.dump +0 -0
  70. data/resources/collation/tries/bg.dump +0 -0
  71. data/resources/collation/tries/bn.dump +0 -0
  72. data/resources/collation/tries/ca.dump +0 -0
  73. data/resources/collation/tries/cs.dump +0 -0
  74. data/resources/collation/tries/cy.dump +0 -0
  75. data/resources/collation/tries/da.dump +0 -0
  76. data/resources/collation/tries/de.dump +0 -0
  77. data/resources/collation/tries/default.dump +0 -0
  78. data/resources/collation/tries/el.dump +0 -0
  79. data/resources/collation/tries/en.dump +0 -0
  80. data/resources/collation/tries/es.dump +0 -0
  81. data/resources/collation/tries/eu.dump +0 -0
  82. data/resources/collation/tries/fa.dump +0 -0
  83. data/resources/collation/tries/fi.dump +0 -0
  84. data/resources/collation/tries/fil.dump +0 -0
  85. data/resources/collation/tries/fr.dump +0 -0
  86. data/resources/collation/tries/ga.dump +0 -0
  87. data/resources/collation/tries/gl.dump +0 -0
  88. data/resources/collation/tries/he.dump +0 -0
  89. data/resources/collation/tries/hi.dump +0 -0
  90. data/resources/collation/tries/hu.dump +0 -0
  91. data/resources/collation/tries/id.dump +0 -0
  92. data/resources/collation/tries/it.dump +0 -0
  93. data/resources/collation/tries/ja.dump +0 -0
  94. data/resources/collation/tries/ko.dump +0 -0
  95. data/resources/collation/tries/lv.dump +0 -0
  96. data/resources/collation/tries/ms.dump +0 -0
  97. data/resources/collation/tries/nb.dump +0 -0
  98. data/resources/collation/tries/nl.dump +0 -0
  99. data/resources/collation/tries/pl.dump +0 -0
  100. data/resources/collation/tries/pt.dump +0 -0
  101. data/resources/collation/tries/ro.dump +0 -0
  102. data/resources/collation/tries/ru.dump +0 -0
  103. data/resources/collation/tries/sk.dump +0 -0
  104. data/resources/collation/tries/sq.dump +0 -0
  105. data/resources/collation/tries/sr.dump +0 -0
  106. data/resources/collation/tries/sv.dump +0 -0
  107. data/resources/collation/tries/ta.dump +0 -0
  108. data/resources/collation/tries/th.dump +0 -0
  109. data/resources/collation/tries/tr.dump +0 -0
  110. data/resources/collation/tries/uk.dump +0 -0
  111. data/resources/collation/tries/ur.dump +0 -0
  112. data/resources/collation/tries/vi.dump +0 -0
  113. data/resources/collation/tries/zh-Hant.dump +0 -0
  114. data/resources/collation/tries/zh.dump +0 -0
  115. data/resources/locales/af/calendars.yml +5 -4
  116. data/resources/locales/af/currencies.yml +2 -0
  117. data/resources/locales/af/layout.yml +2 -1
  118. data/resources/locales/ar/calendars.yml +10 -10
  119. data/resources/locales/ar/currencies.yml +7 -0
  120. data/resources/locales/ar/layout.yml +1 -1
  121. data/resources/locales/be/calendars.yml +9 -9
  122. data/resources/locales/be/currencies.yml +1 -2
  123. data/resources/locales/be/layout.yml +2 -1
  124. data/resources/locales/bg/calendars.yml +8 -11
  125. data/resources/locales/bg/currencies.yml +3 -0
  126. data/resources/locales/bg/layout.yml +2 -1
  127. data/resources/locales/bg/territories.yml +1 -1
  128. data/resources/locales/bn/calendars.yml +6 -7
  129. data/resources/locales/bn/currencies.yml +2 -0
  130. data/resources/locales/bn/layout.yml +2 -1
  131. data/resources/locales/bn/territories.yml +1 -1
  132. data/resources/locales/ca/calendars.yml +8 -7
  133. data/resources/locales/ca/currencies.yml +3 -0
  134. data/resources/locales/ca/layout.yml +2 -1
  135. data/resources/locales/cs/calendars.yml +10 -11
  136. data/resources/locales/cs/currencies.yml +4 -0
  137. data/resources/locales/cs/layout.yml +2 -1
  138. data/resources/locales/cs/territories.yml +1 -1
  139. data/resources/locales/cy/calendars.yml +22 -12
  140. data/resources/locales/cy/currencies.yml +1080 -3
  141. data/resources/locales/cy/languages.yml +107 -23
  142. data/resources/locales/cy/layout.yml +2 -1
  143. data/resources/locales/cy/lists.yml +1 -1
  144. data/resources/locales/cy/numbers.yml +16 -4
  145. data/resources/locales/cy/territories.yml +257 -1
  146. data/resources/locales/cy/units.yml +175 -28
  147. data/resources/locales/da/calendars.yml +6 -9
  148. data/resources/locales/da/currencies.yml +3 -0
  149. data/resources/locales/da/layout.yml +2 -1
  150. data/resources/locales/da/territories.yml +1 -1
  151. data/resources/locales/de/calendars.yml +8 -11
  152. data/resources/locales/de/currencies.yml +3 -0
  153. data/resources/locales/de/layout.yml +2 -1
  154. data/resources/locales/de/territories.yml +1 -1
  155. data/resources/locales/el/calendars.yml +9 -11
  156. data/resources/locales/el/currencies.yml +3 -0
  157. data/resources/locales/el/layout.yml +2 -1
  158. data/resources/locales/el/numbers.yml +1 -0
  159. data/resources/locales/el/territories.yml +1 -1
  160. data/resources/locales/en/calendars.yml +8 -5
  161. data/resources/locales/en/currencies.yml +3 -0
  162. data/resources/locales/en/languages.yml +2 -1
  163. data/resources/locales/en/layout.yml +2 -1
  164. data/resources/locales/en/territories.yml +3 -3
  165. data/resources/locales/es/calendars.yml +6 -7
  166. data/resources/locales/es/currencies.yml +3 -0
  167. data/resources/locales/es/layout.yml +2 -1
  168. data/resources/locales/es/territories.yml +2 -2
  169. data/resources/locales/eu/calendars.yml +5 -4
  170. data/resources/locales/eu/currencies.yml +2 -0
  171. data/resources/locales/eu/layout.yml +2 -1
  172. data/resources/locales/eu/territories.yml +1 -1
  173. data/resources/locales/fa/calendars.yml +6 -8
  174. data/resources/locales/fa/currencies.yml +2 -0
  175. data/resources/locales/fa/layout.yml +1 -1
  176. data/resources/locales/fa/territories.yml +1 -1
  177. data/resources/locales/fi/calendars.yml +11 -14
  178. data/resources/locales/fi/currencies.yml +3 -0
  179. data/resources/locales/fi/layout.yml +2 -1
  180. data/resources/locales/fil/calendars.yml +5 -5
  181. data/resources/locales/fil/currencies.yml +2 -0
  182. data/resources/locales/fil/layout.yml +2 -1
  183. data/resources/locales/fil/territories.yml +1 -1
  184. data/resources/locales/fr/calendars.yml +9 -16
  185. data/resources/locales/fr/currencies.yml +3 -1
  186. data/resources/locales/fr/layout.yml +2 -1
  187. data/resources/locales/fr/territories.yml +2 -2
  188. data/resources/locales/ga/calendars.yml +13 -12
  189. data/resources/locales/ga/currencies.yml +2 -0
  190. data/resources/locales/ga/layout.yml +2 -1
  191. data/resources/locales/gl/calendars.yml +6 -6
  192. data/resources/locales/gl/currencies.yml +2 -0
  193. data/resources/locales/gl/layout.yml +2 -1
  194. data/resources/locales/gl/territories.yml +1 -1
  195. data/resources/locales/he/calendars.yml +8 -16
  196. data/resources/locales/he/currencies.yml +2 -0
  197. data/resources/locales/he/layout.yml +1 -1
  198. data/resources/locales/he/territories.yml +1 -1
  199. data/resources/locales/hi/calendars.yml +8 -10
  200. data/resources/locales/hi/currencies.yml +2 -0
  201. data/resources/locales/hi/languages.yml +64 -74
  202. data/resources/locales/hi/layout.yml +2 -1
  203. data/resources/locales/hi/territories.yml +32 -32
  204. data/resources/locales/hr/calendars.yml +6 -7
  205. data/resources/locales/hr/currencies.yml +5 -0
  206. data/resources/locales/hr/layout.yml +2 -1
  207. data/resources/locales/hr/territories.yml +1 -1
  208. data/resources/locales/hu/calendars.yml +9 -11
  209. data/resources/locales/hu/currencies.yml +2 -0
  210. data/resources/locales/hu/layout.yml +2 -1
  211. data/resources/locales/hu/territories.yml +1 -1
  212. data/resources/locales/id/calendars.yml +7 -6
  213. data/resources/locales/id/currencies.yml +2 -0
  214. data/resources/locales/id/languages.yml +9 -9
  215. data/resources/locales/id/layout.yml +2 -1
  216. data/resources/locales/id/territories.yml +1 -1
  217. data/resources/locales/is/calendars.yml +7 -8
  218. data/resources/locales/is/currencies.yml +2 -0
  219. data/resources/locales/is/layout.yml +2 -1
  220. data/resources/locales/is/territories.yml +1 -1
  221. data/resources/locales/it/calendars.yml +5 -8
  222. data/resources/locales/it/currencies.yml +3 -0
  223. data/resources/locales/it/layout.yml +2 -1
  224. data/resources/locales/it/territories.yml +1 -1
  225. data/resources/locales/ja/calendars.yml +12 -12
  226. data/resources/locales/ja/currencies.yml +2 -0
  227. data/resources/locales/ja/layout.yml +2 -1
  228. data/resources/locales/ko/calendars.yml +12 -11
  229. data/resources/locales/ko/currencies.yml +2 -0
  230. data/resources/locales/ko/layout.yml +2 -1
  231. data/resources/locales/ko/territories.yml +1 -1
  232. data/resources/locales/lv/calendars.yml +6 -6
  233. data/resources/locales/lv/currencies.yml +4 -0
  234. data/resources/locales/lv/layout.yml +2 -1
  235. data/resources/locales/ms/calendars.yml +5 -4
  236. data/resources/locales/ms/currencies.yml +2 -0
  237. data/resources/locales/ms/layout.yml +2 -1
  238. data/resources/locales/ms/territories.yml +1 -1
  239. data/resources/locales/nb/calendars.yml +7 -7
  240. data/resources/locales/nb/currencies.yml +3 -0
  241. data/resources/locales/nb/layout.yml +2 -1
  242. data/resources/locales/nb/territories.yml +1 -1
  243. data/resources/locales/nl/calendars.yml +5 -8
  244. data/resources/locales/nl/currencies.yml +3 -0
  245. data/resources/locales/nl/layout.yml +2 -1
  246. data/resources/locales/nl/territories.yml +1 -1
  247. data/resources/locales/pl/calendars.yml +9 -10
  248. data/resources/locales/pl/currencies.yml +5 -0
  249. data/resources/locales/pl/layout.yml +2 -1
  250. data/resources/locales/pl/territories.yml +1 -1
  251. data/resources/locales/pt/calendars.yml +9 -14
  252. data/resources/locales/pt/currencies.yml +3 -0
  253. data/resources/locales/pt/layout.yml +2 -1
  254. data/resources/locales/pt/territories.yml +1 -1
  255. data/resources/locales/ro/calendars.yml +10 -12
  256. data/resources/locales/ro/currencies.yml +4 -0
  257. data/resources/locales/ro/layout.yml +2 -1
  258. data/resources/locales/ro/territories.yml +1 -1
  259. data/resources/locales/ru/calendars.yml +8 -13
  260. data/resources/locales/ru/currencies.yml +5 -0
  261. data/resources/locales/ru/languages.yml +1 -1
  262. data/resources/locales/ru/layout.yml +2 -1
  263. data/resources/locales/ru/territories.yml +15 -15
  264. data/resources/locales/sk/calendars.yml +23 -48
  265. data/resources/locales/sk/currencies.yml +5 -1
  266. data/resources/locales/sk/layout.yml +2 -1
  267. data/resources/locales/sk/territories.yml +1 -1
  268. data/resources/locales/sq/calendars.yml +9 -9
  269. data/resources/locales/sq/layout.yml +2 -1
  270. data/resources/locales/sr/calendars.yml +7 -12
  271. data/resources/locales/sr/currencies.yml +5 -0
  272. data/resources/locales/sr/languages.yml +4 -4
  273. data/resources/locales/sr/layout.yml +2 -1
  274. data/resources/locales/sr/territories.yml +1 -1
  275. data/resources/locales/sv/calendars.yml +53 -57
  276. data/resources/locales/sv/currencies.yml +4 -2
  277. data/resources/locales/sv/layout.yml +2 -1
  278. data/resources/locales/sv/numbers.yml +0 -1
  279. data/resources/locales/sv/territories.yml +1 -1
  280. data/resources/locales/ta/calendars.yml +6 -5
  281. data/resources/locales/ta/currencies.yml +2 -0
  282. data/resources/locales/ta/layout.yml +2 -1
  283. data/resources/locales/ta/territories.yml +1 -1
  284. data/resources/locales/th/calendars.yml +7 -8
  285. data/resources/locales/th/currencies.yml +2 -0
  286. data/resources/locales/th/layout.yml +2 -1
  287. data/resources/locales/tr/calendars.yml +8 -11
  288. data/resources/locales/tr/currencies.yml +3 -1
  289. data/resources/locales/tr/layout.yml +2 -1
  290. data/resources/locales/tr/territories.yml +1 -1
  291. data/resources/locales/uk/calendars.yml +8 -10
  292. data/resources/locales/uk/currencies.yml +5 -0
  293. data/resources/locales/uk/layout.yml +2 -1
  294. data/resources/locales/ur/calendars.yml +8 -7
  295. data/resources/locales/ur/currencies.yml +3 -1
  296. data/resources/locales/ur/layout.yml +1 -1
  297. data/resources/locales/ur/territories.yml +1 -1
  298. data/resources/locales/vi/calendars.yml +19 -19
  299. data/resources/locales/vi/currencies.yml +2 -0
  300. data/resources/locales/vi/layout.yml +2 -1
  301. data/resources/locales/vi/territories.yml +1 -1
  302. data/resources/locales/zh-Hant/calendars.yml +7 -10
  303. data/resources/locales/zh-Hant/currencies.yml +2 -0
  304. data/resources/locales/zh-Hant/layout.yml +2 -1
  305. data/resources/locales/zh/calendars.yml +7 -10
  306. data/resources/locales/zh/currencies.yml +2 -0
  307. data/resources/locales/zh/layout.yml +2 -1
  308. data/resources/locales/zh/territories.yml +4 -4
  309. data/resources/shared/currency_digits_and_rounding.yml +4 -1
  310. data/resources/shared/language_codes_table.dump +0 -0
  311. data/resources/shared/phone_codes.yml +1 -0
  312. data/resources/shared/postal_codes.yml +159 -159
  313. data/resources/unicode_data/blocks/alphabetic_presentation_forms.yml +23 -23
  314. data/resources/unicode_data/blocks/arabic.yml +4 -4
  315. data/resources/unicode_data/blocks/arabic_mathematical_alphabetic_symbols.yml +141 -141
  316. data/resources/unicode_data/blocks/arabic_presentation_forms_a.yml +593 -593
  317. data/resources/unicode_data/blocks/arabic_presentation_forms_b.yml +139 -139
  318. data/resources/unicode_data/blocks/armenian.yml +1 -1
  319. data/resources/unicode_data/blocks/basic_latin.yml +33 -33
  320. data/resources/unicode_data/blocks/cjk_compatibility.yml +256 -256
  321. data/resources/unicode_data/blocks/cjk_compatibility_forms.yml +30 -30
  322. data/resources/unicode_data/blocks/cjk_radicals_supplement.yml +2 -2
  323. data/resources/unicode_data/blocks/cjk_symbols_and_punctuation.yml +5 -5
  324. data/resources/unicode_data/blocks/cjk_unified_ideographs.yml +2 -2
  325. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_a.yml +2 -2
  326. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_b.yml +2 -2
  327. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_c.yml +2 -2
  328. data/resources/unicode_data/blocks/cjk_unified_ideographs_extension_d.yml +2 -2
  329. data/resources/unicode_data/blocks/cuneiform_numbers_and_punctuation.yml +4 -4
  330. data/resources/unicode_data/blocks/currency_symbols.yml +17 -1
  331. data/resources/unicode_data/blocks/enclosed_alphanumeric_supplement.yml +77 -77
  332. data/resources/unicode_data/blocks/enclosed_alphanumerics.yml +139 -139
  333. data/resources/unicode_data/blocks/enclosed_cjk_letters_and_months.yml +245 -245
  334. data/resources/unicode_data/blocks/enclosed_ideographic_supplement.yml +57 -57
  335. data/resources/unicode_data/blocks/general_punctuation.yml +26 -26
  336. data/resources/unicode_data/blocks/georgian.yml +1 -1
  337. data/resources/unicode_data/blocks/greek_and_coptic.yml +13 -13
  338. data/resources/unicode_data/blocks/greek_extended.yml +4 -4
  339. data/resources/unicode_data/blocks/halfwidth_and_fullwidth_forms.yml +225 -225
  340. data/resources/unicode_data/blocks/hangul_compatibility_jamo.yml +94 -94
  341. data/resources/unicode_data/blocks/hangul_syllables.yml +2 -2
  342. data/resources/unicode_data/blocks/high_private_use_surrogates.yml +2 -2
  343. data/resources/unicode_data/blocks/high_surrogates.yml +2 -2
  344. data/resources/unicode_data/blocks/hiragana.yml +3 -3
  345. data/resources/unicode_data/blocks/kanbun.yml +14 -14
  346. data/resources/unicode_data/blocks/kangxi_radicals.yml +214 -214
  347. data/resources/unicode_data/blocks/katakana.yml +1 -1
  348. data/resources/unicode_data/blocks/lao.yml +3 -3
  349. data/resources/unicode_data/blocks/latin_1_supplement.yml +46 -46
  350. data/resources/unicode_data/blocks/latin_extended_a.yml +6 -6
  351. data/resources/unicode_data/blocks/latin_extended_additional.yml +1 -1
  352. data/resources/unicode_data/blocks/latin_extended_b.yml +12 -12
  353. data/resources/unicode_data/blocks/latin_extended_c.yml +2 -2
  354. data/resources/unicode_data/blocks/latin_extended_d.yml +3 -3
  355. data/resources/unicode_data/blocks/letterlike_symbols.yml +53 -53
  356. data/resources/unicode_data/blocks/low_surrogates.yml +2 -2
  357. data/resources/unicode_data/blocks/mathematical_alphanumeric_symbols.yml +996 -996
  358. data/resources/unicode_data/blocks/mathematical_operators.yml +4 -4
  359. data/resources/unicode_data/blocks/number_forms.yml +49 -49
  360. data/resources/unicode_data/blocks/phonetic_extensions.yml +61 -61
  361. data/resources/unicode_data/blocks/phonetic_extensions_supplement.yml +37 -37
  362. data/resources/unicode_data/blocks/private_use_area.yml +2 -2
  363. data/resources/unicode_data/blocks/small_form_variants.yml +26 -26
  364. data/resources/unicode_data/blocks/spacing_modifier_letters.yml +20 -20
  365. data/resources/unicode_data/blocks/superscripts_and_subscripts.yml +42 -42
  366. data/resources/unicode_data/blocks/supplemental_mathematical_operators.yml +4 -4
  367. data/resources/unicode_data/blocks/supplementary_private_use_area_a.yml +2 -2
  368. data/resources/unicode_data/blocks/supplementary_private_use_area_b.yml +2 -2
  369. data/resources/unicode_data/blocks/thai.yml +1 -1
  370. data/resources/unicode_data/blocks/tibetan.yml +4 -4
  371. data/resources/unicode_data/blocks/tifinagh.yml +1 -1
  372. data/resources/unicode_data/blocks/vertical_forms.yml +10 -10
  373. data/spec/collation/trie_dumps_spec.rb +1 -1
  374. data/spec/core_ext_spec.rb +1 -1
  375. data/spec/formatters/calendars/datetime_formatter_spec.rb +1 -1
  376. data/spec/formatters/numbers/abbreviated/long_decimal_formatter_spec.rb +4 -0
  377. data/spec/formatters/numbers/abbreviated/short_decimal_formatter_spec.rb +4 -0
  378. data/spec/formatters/numbers/currency_formatter_spec.rb +5 -3
  379. data/spec/localized/localized_date_spec.rb +36 -27
  380. data/spec/localized/localized_datetime_spec.rb +10 -1
  381. data/spec/localized/localized_time_spec.rb +11 -1
  382. data/spec/readme_spec.rb +10 -11
  383. data/spec/resources/loader_spec.rb +18 -8
  384. data/spec/shared/currencies_spec.rb +1 -1
  385. data/spec/tokenizers/calendars/datetime_tokenizer_spec.rb +2 -2
  386. data/twitter_cldr.gemspec +1 -0
  387. metadata +56 -49
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source :rubygems
1
+ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
@@ -10,7 +10,7 @@ end
10
10
 
11
11
  group :development do
12
12
  gem 'nokogiri'
13
- gem 'ruby-cldr', :github => 'svenfuchs/ruby-cldr'
13
+ gem 'ruby-cldr', :github => 'camertron/ruby-cldr'
14
14
  end
15
15
 
16
16
  group :test do
data/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ == 2.4.0
2
+
3
+ * Upgrade to CLDR v23.
4
+ * Ability to disable loading of any custom locale resources.
5
+ * Long and short decimal formatters now respect the :precision option.
6
+
7
+ == 2.3.0
8
+
9
+ * Adding timezone support to date/time formatting.
10
+ * Removing the localize method from Date objects. Call to_date on a LocalizedDateTime or LocalizedTime object instead.
11
+
1
12
  == 2.2.0
2
13
 
3
14
  * Relaxing JSON dependency to give users more version flexibility. JSON gem now has no version number in twitter-cldr-rb.
data/README.md CHANGED
@@ -89,8 +89,8 @@ In addition to formatting regular decimals, TwitterCLDR supports short and long
89
89
  `Date`, `Time`, and `DateTime` objects are supported:
90
90
 
91
91
  ```ruby
92
- DateTime.now.localize(:es).to_full_s # "lunes, 12 de diciembre de 2011 21:44:57 UTC -0800"
93
- DateTime.now.localize(:es).to_long_s # "12 de diciembre de 2011 21:44:57 -08:00"
92
+ DateTime.now.localize(:es).to_full_s # "lunes, 12 de diciembre de 2011 21:44:57 UTC -08:00"
93
+ DateTime.now.localize(:es).to_long_s # "12 de diciembre de 2011 21:44:57 UTC"
94
94
  DateTime.now.localize(:es).to_medium_s # "12/12/2011 21:44:57"
95
95
  DateTime.now.localize(:es).to_short_s # "12/12/11 21:44"
96
96
 
data/Rakefile CHANGED
@@ -80,7 +80,7 @@ namespace :update do
80
80
  TwitterCldr::Resources::TailoringImporter.new(
81
81
  args[:cldr_path] || './vendor/cldr',
82
82
  './resources/collation/tailoring',
83
- args[:icu4j_jar_path] ||'./vendor/icu4j-49_1.jar'
83
+ args[:icu4j_jar_path] ||'./vendor/icu4j-50_1_1.jar'
84
84
  ).import(TwitterCldr.supported_locales)
85
85
  end
86
86
 
data/lib/twitter_cldr.rb CHANGED
@@ -56,6 +56,7 @@ module TwitterCldr
56
56
  class << self
57
57
 
58
58
  attr_writer :locale
59
+ attr_accessor :disable_custom_locale_resources
59
60
 
60
61
  def resources
61
62
  @resources ||= TwitterCldr::Resources::Loader.new
@@ -7,6 +7,6 @@
7
7
  TwitterCldr::Localized::LocalizedNumber.localize(klass)
8
8
  end
9
9
 
10
- [Array, Date, DateTime, String, Symbol, Time, Hash].each do |klass|
10
+ [Array, DateTime, String, Symbol, Time, Hash].each do |klass|
11
11
  TwitterCldr::Localized::const_get("Localized#{klass}").localize(klass)
12
12
  end
@@ -9,12 +9,12 @@ module TwitterCldr
9
9
  attr_reader :tokenizer
10
10
 
11
11
  def format(obj, options = {})
12
- process_tokens(self.get_tokens(obj, options), obj)
12
+ process_tokens(self.get_tokens(obj, options), obj, options)
13
13
  end
14
14
 
15
15
  protected
16
16
 
17
- def process_tokens(tokens, obj)
17
+ def process_tokens(tokens, obj, options = {})
18
18
  result = ""
19
19
 
20
20
  tokens.each_with_index do |token, index|
@@ -22,7 +22,7 @@ module TwitterCldr
22
22
  when :composite
23
23
  result << eval(process_tokens(token.tokens, obj)).to_s
24
24
  when :pattern
25
- result << self.result_for_token(token, index, obj)
25
+ result << self.result_for_token(token, index, obj, options)
26
26
  else
27
27
  if token.value.size > 0 && token.value[0].chr == "'" && token.value[-1].chr == "'"
28
28
  result << token.value[1..-2]
@@ -6,6 +6,8 @@
6
6
  # This class has been adapted from Sven Fuch's ruby-cldr gem
7
7
  # See LICENSE for the accompanying license for his contributions
8
8
 
9
+ require 'tzinfo'
10
+
9
11
  module TwitterCldr
10
12
  module Formatters
11
13
  class DateTimeFormatter < Base
@@ -49,8 +51,8 @@ module TwitterCldr
49
51
  )
50
52
  end
51
53
 
52
- def result_for_token(token, index, date)
53
- self.send(METHODS[token.value[0].chr], date, token.value, token.value.size)
54
+ def result_for_token(token, index, date, options = {})
55
+ self.send(METHODS[token.value[0].chr], date, token.value, token.value.size, options)
54
56
  end
55
57
 
56
58
  def additional_format_selector
@@ -69,7 +71,7 @@ module TwitterCldr
69
71
 
70
72
  # there is incomplete era data in CLDR for certain locales like Hindi
71
73
  # fall back if that happens
72
- def era(date, pattern, length)
74
+ def era(date, pattern, length, options = {})
73
75
  choices = case length
74
76
  when 0
75
77
  ["", ""]
@@ -86,22 +88,22 @@ module TwitterCldr
86
88
  end
87
89
  end
88
90
 
89
- def year(date, pattern, length)
91
+ def year(date, pattern, length, options = {})
90
92
  year = date.year.to_s
91
93
  year = year.length == 1 ? year : year[-2, 2] if length == 2
92
94
  year = year.rjust(length, '0') if length > 1
93
95
  year
94
96
  end
95
97
 
96
- def year_of_week_of_year(date, pattern, length)
98
+ def year_of_week_of_year(date, pattern, length, options = {})
97
99
  raise NotImplementedError
98
100
  end
99
101
 
100
- def day_of_week_in_month(date, pattern, length) # e.g. 2nd Wed in July
102
+ def day_of_week_in_month(date, pattern, length, options = {}) # e.g. 2nd Wed in July
101
103
  raise NotImplementedError
102
104
  end
103
105
 
104
- def quarter(date, pattern, length)
106
+ def quarter(date, pattern, length, options = {})
105
107
  quarter = (date.month.to_i - 1) / 3 + 1
106
108
  case length
107
109
  when 1
@@ -115,7 +117,7 @@ module TwitterCldr
115
117
  end
116
118
  end
117
119
 
118
- def quarter_stand_alone(date, pattern, length)
120
+ def quarter_stand_alone(date, pattern, length, options = {})
119
121
  quarter = (date.month.to_i - 1) / 3 + 1
120
122
  case length
121
123
  when 1
@@ -133,7 +135,7 @@ module TwitterCldr
133
135
  end
134
136
  end
135
137
 
136
- def month(date, pattern, length)
138
+ def month(date, pattern, length, options = {})
137
139
  case length
138
140
  when 1
139
141
  date.month.to_s
@@ -151,7 +153,7 @@ module TwitterCldr
151
153
  end
152
154
  end
153
155
 
154
- def month_stand_alone(date, pattern, length)
156
+ def month_stand_alone(date, pattern, length, options = {})
155
157
  case length
156
158
  when 1
157
159
  date.month.to_s
@@ -168,7 +170,7 @@ module TwitterCldr
168
170
  end
169
171
  end
170
172
 
171
- def day(date, pattern, length)
173
+ def day(date, pattern, length, options = {})
172
174
  case length
173
175
  when 1
174
176
  date.day.to_s
@@ -177,7 +179,7 @@ module TwitterCldr
177
179
  end
178
180
  end
179
181
 
180
- def weekday(date, pattern, length)
182
+ def weekday(date, pattern, length, options = {})
181
183
  key = WEEKDAY_KEYS[date.wday]
182
184
  case length
183
185
  when 1..3
@@ -189,7 +191,7 @@ module TwitterCldr
189
191
  end
190
192
  end
191
193
 
192
- def weekday_local(date, pattern, length)
194
+ def weekday_local(date, pattern, length, options = {})
193
195
  # "Like E except adds a numeric value depending on the local starting day of the week"
194
196
  # CLDR does not contain data as to which day is the first day of the week, so we will assume Monday (Ruby default)
195
197
  case length
@@ -200,7 +202,7 @@ module TwitterCldr
200
202
  end
201
203
  end
202
204
 
203
- def weekday_local_stand_alone(date, pattern, length)
205
+ def weekday_local_stand_alone(date, pattern, length, options = {})
204
206
  case length
205
207
  when 1
206
208
  weekday_local(date, pattern, length)
@@ -209,14 +211,14 @@ module TwitterCldr
209
211
  end
210
212
  end
211
213
 
212
- def period(time, pattern, length)
214
+ def period(time, pattern, length, options = {})
213
215
  # Always use :wide form. Day-period design was changed in CLDR -
214
216
  # http://cldr.unicode.org/development/development-process/design-proposals/day-period-design that means some
215
217
  # major changes are required for a full support of day periods.
216
218
  @tokenizer.calendar[:periods][:format][:wide][time.strftime('%p').downcase.to_sym]
217
219
  end
218
220
 
219
- def hour(time, pattern, length)
221
+ def hour(time, pattern, length, options = {})
220
222
  hour = time.hour
221
223
  hour = case pattern[0, 1]
222
224
  when 'h' # [1-12]
@@ -231,29 +233,36 @@ module TwitterCldr
231
233
  length == 1 ? hour.to_s : hour.to_s.rjust(length, '0')
232
234
  end
233
235
 
234
- def minute(time, pattern, length)
236
+ def minute(time, pattern, length, options = {})
235
237
  length == 1 ? time.min.to_s : time.min.to_s.rjust(length, '0')
236
238
  end
237
239
 
238
- def second(time, pattern, length)
240
+ def second(time, pattern, length, options = {})
239
241
  length == 1 ? time.sec.to_s : time.sec.to_s.rjust(length, '0')
240
242
  end
241
243
 
242
- def second_fraction(time, pattern, length)
244
+ def second_fraction(time, pattern, length, options = {})
243
245
  raise ArgumentError.new('can not use the S format with more than 6 digits') if length > 6
244
246
  (time.usec.to_f / 10 ** (6 - length)).round.to_s.rjust(length, '0')
245
247
  end
246
248
 
247
- def timezone(time, pattern, length)
249
+ def timezone(time, pattern, length, options = {})
250
+ # ruby is dumb and doesn't let you set non-UTC timezones in dates/times, so we have to pass it as an option instead
251
+ timezone_info = TZInfo::Timezone.get(options[:timezone] || "UTC")
252
+
248
253
  case length
249
254
  when 1..3
250
- time.zone
255
+ timezone_info.current_period.abbreviation.to_s
251
256
  else
252
- "UTC #{time.strftime("%z")}"
257
+ hours = (timezone_info.current_period.utc_offset.to_f / 60 ** 2).abs
258
+ divisor = hours.to_i
259
+ minutes = (hours % (divisor == 0 ? 1 : divisor)) * 60
260
+ sign = timezone_info.current_period.utc_offset < 0 ? "-" : "+"
261
+ "UTC #{sign}#{divisor.to_s.rjust(2, "0")}:#{minutes.floor.to_s.rjust(2, "0")}"
253
262
  end
254
263
  end
255
264
 
256
- def timezone_generic_non_location(time, pattern, length)
265
+ def timezone_generic_non_location(time, pattern, length, options = {})
257
266
  raise NotImplementedError, 'requires timezone translation data'
258
267
  end
259
268
  end
@@ -36,8 +36,9 @@ module TwitterCldr
36
36
 
37
37
  def transform_number(number)
38
38
  if (number < NUMBER_MAX) && (number >= NUMBER_MIN)
39
- sig_figs = ((number.to_i.to_s.size - 1) % 3)
40
- number.to_s[0..sig_figs].to_i
39
+ power = (((number.to_s.length - 1) / 3) * 3).floor
40
+ factor = (10 ** power).to_f
41
+ number / factor
41
42
  else
42
43
  number
43
44
  end
@@ -7,26 +7,45 @@ module TwitterCldr
7
7
  module Localized
8
8
 
9
9
  class LocalizedDate < LocalizedDateTime
10
- def to_datetime(time)
11
- time_obj = time.is_a?(LocalizedTime) ? time.base_obj : time
12
- LocalizedDateTime.new(DateTime.parse("#{@base_obj.strftime("%Y-%m-%d")}T#{time_obj.strftime("%H:%M:%S%z")}"), @locale, :calendar_type => @calendar_type)
10
+ def to_datetime(time = Time.now)
11
+ dt = DateTime.parse("#{@base_obj.strftime("%Y-%m-%d")}T#{unwrap_time_obj(time).strftime("%H:%M:%S%z")}")
12
+ LocalizedDateTime.new(dt, @locale, chain_params)
13
13
  end
14
14
 
15
15
  def to_time(base = Time.now)
16
- time = Time.gm(
17
- @base_obj.year,
18
- @base_obj.month,
19
- @base_obj.day,
20
- base.hour,
21
- base.min,
22
- base.sec
23
- )
24
-
25
- LocalizedTime.new(time, @locale, :calendar_type => @calendar_type)
16
+ case @base_obj
17
+ when Time
18
+ LocalizedTime.new(@base_obj, @locale, chain_params)
19
+ when DateTime
20
+ utc_dt = @base_obj.new_offset(0)
21
+
22
+ time = Time.gm(
23
+ utc_dt.year,
24
+ utc_dt.month,
25
+ utc_dt.day,
26
+ utc_dt.hour,
27
+ utc_dt.min,
28
+ utc_dt.sec,
29
+ utc_dt.sec_fraction * (RUBY_VERSION < '1.9' ? 86400000000 : 1000000)
30
+ )
31
+
32
+ LocalizedTime.new(time, @locale, chain_params)
33
+ else
34
+ nil
35
+ end
26
36
  end
27
37
 
28
38
  protected
29
39
 
40
+ def unwrap_time_obj(time)
41
+ time.is_a?(LocalizedTime) ? time.base_obj : time
42
+ end
43
+
44
+ def base_in_timezone
45
+ time = unwrap_time_obj(to_time)
46
+ timezone_info.utc_to_local(time.is_a?(DateTime) ? time.new_offset(0) : time.utc)
47
+ end
48
+
30
49
  def formatter_const
31
50
  TwitterCldr::Formatters::DateFormatter
32
51
  end
@@ -3,20 +3,23 @@
3
3
  # Copyright 2012 Twitter, Inc
4
4
  # http://www.apache.org/licenses/LICENSE-2.0
5
5
 
6
+ require 'tzinfo'
7
+
6
8
  module TwitterCldr
7
9
  module Localized
8
10
 
9
11
  class LocalizedDateTime < LocalizedObject
10
- attr_reader :calendar_type
12
+ attr_reader :calendar_type, :timezone
11
13
 
12
14
  def initialize(obj, locale, options = {})
13
15
  super
14
16
  @calendar_type = options[:calendar_type] || TwitterCldr::DEFAULT_CALENDAR_TYPE
17
+ @timezone = options[:timezone] || "UTC"
15
18
  end
16
19
 
17
20
  TwitterCldr::Tokenizers::DateTimeTokenizer::VALID_TYPES.each do |format_type|
18
21
  define_method "to_#{format_type}_s" do
19
- @formatter.format(@base_obj, :type => format_type.to_sym)
22
+ @formatter.format(base_in_timezone, chain_params.merge(:type => format_type.to_sym))
20
23
  end
21
24
  end
22
25
 
@@ -42,15 +45,14 @@ module TwitterCldr
42
45
 
43
46
  def to_s(options = {})
44
47
  if options[:format]
45
- @formatter.format(@base_obj, options.merge(:type => :additional))
48
+ @formatter.format(base_in_timezone, options.merge(:type => :additional))
46
49
  else
47
50
  to_default_s
48
51
  end
49
52
  end
50
53
 
51
54
  def to_date
52
- date = Date.new(@base_obj.year, @base_obj.month, @base_obj.day)
53
- LocalizedDate.new(date, @locale, :calendar_type => @calendar_type)
55
+ LocalizedDate.new(@base_obj, @locale, chain_params)
54
56
  end
55
57
 
56
58
  def to_time(base = Time.now)
@@ -66,14 +68,30 @@ module TwitterCldr
66
68
  utc_dt.sec_fraction * (RUBY_VERSION < '1.9' ? 86400000000 : 1000000)
67
69
  )
68
70
 
69
- LocalizedTime.new(time, @locale, :calendar_type => @calendar_type)
71
+ LocalizedTime.new(time, @locale, chain_params)
72
+ end
73
+
74
+ def with_timezone(timezone)
75
+ self.class.new(@base_obj, @locale, chain_params.merge(:timezone => timezone))
70
76
  end
71
77
 
72
78
  protected
73
79
 
80
+ def chain_params
81
+ { :calendar_type => @calendar_type, :timezone => @timezone }
82
+ end
83
+
84
+ def base_in_timezone
85
+ timezone_info.utc_to_local(@base_obj.new_offset(0))
86
+ end
87
+
74
88
  def formatter_const
75
89
  TwitterCldr::Formatters::DateTimeFormatter
76
90
  end
91
+
92
+ def timezone_info
93
+ (@@timezone_info ||= {})[@timezone] ||= TZInfo::Timezone.get(@timezone)
94
+ end
77
95
  end
78
96
 
79
97
  end
@@ -9,23 +9,32 @@ module TwitterCldr
9
9
  class LocalizedTime < LocalizedDateTime
10
10
  def to_datetime(date)
11
11
  date_obj = date.is_a?(LocalizedDate) ? date.base_obj : date
12
- LocalizedDateTime.new(DateTime.parse("#{date_obj.strftime("%Y-%m-%d")}T#{@base_obj.strftime("%H:%M:%S%z")}"), @locale, :calendar_type => @calendar_type)
12
+ dt = DateTime.parse("#{date_obj.strftime("%Y-%m-%d")}T#{@base_obj.strftime("%H:%M:%S%z")}")
13
+ LocalizedDateTime.new(dt, @locale, chain_params)
13
14
  end
14
15
 
15
16
  def to_time(base_time = Time.now)
16
17
  self
17
18
  end
18
19
 
20
+ def to_date
21
+ LocalizedDate.new(@base_obj, @locale, chain_params)
22
+ end
23
+
19
24
  def gmtime
20
- LocalizedTime.new(@base_obj.gmtime, @locale, :calendar_type => @calendar_type)
25
+ LocalizedTime.new(@base_obj.gmtime, @locale, chain_params)
21
26
  end
22
27
 
23
28
  def localtime
24
- LocalizedTime.new(@base_obj.localtime, @locale, :calendar_type => @calendar_type)
29
+ LocalizedTime.new(@base_obj.localtime, @locale, chain_params)
25
30
  end
26
31
 
27
32
  protected
28
33
 
34
+ def base_in_timezone
35
+ timezone_info.utc_to_local(@base_obj.utc)
36
+ end
37
+
29
38
  def formatter_const
30
39
  TwitterCldr::Formatters::TimeFormatter
31
40
  end