i18n 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of i18n might be problematic. Click here for more details.

Files changed (885) hide show
  1. data/README.textile +24 -1
  2. data/Rakefile +6 -2
  3. data/lib/i18n.rb +13 -13
  4. data/lib/i18n/backend.rb +2 -0
  5. data/lib/i18n/backend/active_record.rb +9 -13
  6. data/lib/i18n/backend/active_record/missing.rb +1 -1
  7. data/lib/i18n/backend/active_record/store_procs.rb +5 -5
  8. data/lib/i18n/backend/active_record/translation.rb +6 -4
  9. data/lib/i18n/backend/base.rb +21 -14
  10. data/lib/i18n/backend/cache.rb +1 -0
  11. data/lib/i18n/backend/cascade.rb +22 -8
  12. data/lib/i18n/backend/chain.rb +2 -1
  13. data/lib/i18n/backend/cldr.rb +100 -0
  14. data/lib/i18n/backend/fallbacks.rb +15 -3
  15. data/lib/i18n/backend/fast.rb +14 -13
  16. data/lib/i18n/backend/gettext.rb +2 -1
  17. data/lib/i18n/backend/helpers.rb +4 -16
  18. data/lib/i18n/backend/interpolation_compiler.rb +2 -2
  19. data/lib/i18n/backend/links.rb +34 -0
  20. data/lib/i18n/backend/pluralization.rb +1 -1
  21. data/lib/i18n/core_ext/hash/except.rb +8 -0
  22. data/lib/i18n/core_ext/hash/slice.rb +8 -0
  23. data/lib/i18n/core_ext/string/interpolate.rb +6 -2
  24. data/lib/i18n/exceptions.rb +1 -1
  25. data/lib/i18n/helpers/gettext.rb +3 -2
  26. data/lib/i18n/version.rb +1 -1
  27. data/test/api.rb +18 -0
  28. data/test/{cases/api → api}/active_record_test.rb +6 -5
  29. data/test/{cases/api → api}/all_features_test.rb +22 -3
  30. data/test/{cases/api → api}/cascade_test.rb +4 -3
  31. data/test/{cases/api → api}/chain_test.rb +4 -3
  32. data/test/{cases/api → api}/fallbacks_test.rb +4 -3
  33. data/test/{cases/api → api}/fast_test.rb +4 -3
  34. data/test/{cases/api → api}/pluralization_test.rb +4 -3
  35. data/test/{cases/api → api}/simple_test.rb +5 -3
  36. data/test/api/{basics.rb → tests/basics.rb} +0 -0
  37. data/test/api/{defaults.rb → tests/defaults.rb} +1 -1
  38. data/test/api/{interpolation.rb → tests/interpolation.rb} +6 -6
  39. data/test/api/{link.rb → tests/link.rb} +4 -3
  40. data/test/api/{localization → tests/localization}/date.rb +6 -2
  41. data/test/api/{localization → tests/localization}/date_time.rb +7 -5
  42. data/test/api/{localization → tests/localization}/procs.rb +0 -0
  43. data/test/api/{localization → tests/localization}/time.rb +16 -12
  44. data/test/api/{lookup.rb → tests/lookup.rb} +20 -3
  45. data/test/api/{pluralization.rb → tests/pluralization.rb} +1 -1
  46. data/test/api/{procs.rb → tests/procs.rb} +10 -1
  47. data/test/{cases/backend → backend}/active_record/missing_test.rb +12 -21
  48. data/test/{cases/backend → backend}/active_record_test.rb +11 -6
  49. data/test/{cases/backend → backend}/cache_test.rb +9 -10
  50. data/test/backend/cascade_test.rb +73 -0
  51. data/test/{cases/backend → backend}/chain_test.rb +10 -11
  52. data/test/backend/cldr_test.rb +151 -0
  53. data/test/backend/exceptions_test.rb +25 -0
  54. data/test/backend/fallbacks_test.rb +107 -0
  55. data/test/{cases/backend → backend}/fast_test.rb +7 -7
  56. data/test/{cases/backend → backend}/helpers_test.rb +7 -6
  57. data/test/{cases/backend → backend}/interpolation_compiler_test.rb +3 -2
  58. data/test/{cases/backend → backend}/metadata_test.rb +11 -12
  59. data/test/{cases/backend → backend}/pluralization_test.rb +20 -16
  60. data/test/{cases/backend → backend}/simple_test.rb +15 -15
  61. data/test/{cases/core_ext → core_ext}/string/interpolate_test.rb +26 -21
  62. data/test/{cases/gettext → gettext}/api_test.rb +11 -5
  63. data/test/{cases/gettext → gettext}/backend_test.rb +4 -4
  64. data/test/{cases/i18n_exceptions_test.rb → i18n_exceptions_test.rb} +3 -3
  65. data/test/{cases/i18n_load_path_test.rb → i18n_load_path_test.rb} +2 -2
  66. data/test/{cases/i18n_test.rb → i18n_test.rb} +15 -15
  67. data/test/{cases/locale → locale}/fallbacks_test.rb +2 -2
  68. data/test/{cases/locale → locale}/tag/rfc4646_test.rb +3 -3
  69. data/test/{cases/locale → locale}/tag/simple_test.rb +2 -2
  70. data/test/test_data/locales/cldr/de/calendars.yml +152 -0
  71. data/test/test_data/locales/cldr/de/currencies.yml +8 -0
  72. data/test/test_data/locales/cldr/de/numbers.yml +31 -0
  73. data/test/{fixtures → test_data}/locales/de.po +0 -0
  74. data/test/{fixtures → test_data}/locales/en.rb +0 -0
  75. data/test/{fixtures → test_data}/locales/en.yml +0 -0
  76. data/test/{fixtures → test_data}/locales/plurals.rb +0 -0
  77. data/test/test_helper.rb +49 -36
  78. data/vendor/cldr/common/bcp47/calendar.xml +26 -0
  79. data/vendor/cldr/common/bcp47/collation.xml +72 -0
  80. data/vendor/cldr/common/bcp47/currency.xml +177 -0
  81. data/vendor/cldr/common/bcp47/number.xml +47 -0
  82. data/vendor/cldr/common/bcp47/timezone.xml +443 -0
  83. data/vendor/cldr/common/bcp47/variant.xml +14 -0
  84. data/vendor/cldr/common/collation/af.xml +17 -0
  85. data/vendor/cldr/common/collation/ar.xml +17 -0
  86. data/vendor/cldr/common/collation/as.xml +42 -0
  87. data/vendor/cldr/common/collation/az.xml +44 -0
  88. data/vendor/cldr/common/collation/be.xml +12 -0
  89. data/vendor/cldr/common/collation/bg.xml +12 -0
  90. data/vendor/cldr/common/collation/bn.xml +99 -0
  91. data/vendor/cldr/common/collation/bn_IN.xml +733 -0
  92. data/vendor/cldr/common/collation/ca.xml +49 -0
  93. data/vendor/cldr/common/collation/cs.xml +55 -0
  94. data/vendor/cldr/common/collation/cy.xml +55 -0
  95. data/vendor/cldr/common/collation/da.xml +90 -0
  96. data/vendor/cldr/common/collation/de.xml +42 -0
  97. data/vendor/cldr/common/collation/dz.xml +525 -0
  98. data/vendor/cldr/common/collation/el.xml +14 -0
  99. data/vendor/cldr/common/collation/en.xml +24 -0
  100. data/vendor/cldr/common/collation/en_BE.xml +15 -0
  101. data/vendor/cldr/common/collation/eo.xml +33 -0
  102. data/vendor/cldr/common/collation/es.xml +59 -0
  103. data/vendor/cldr/common/collation/et.xml +34 -0
  104. data/vendor/cldr/common/collation/fa.xml +34 -0
  105. data/vendor/cldr/common/collation/fa_AF.xml +13 -0
  106. data/vendor/cldr/common/collation/fi.xml +134 -0
  107. data/vendor/cldr/common/collation/fil.xml +21 -0
  108. data/vendor/cldr/common/collation/fo.xml +88 -0
  109. data/vendor/cldr/common/collation/fr.xml +25 -0
  110. data/vendor/cldr/common/collation/gu.xml +47 -0
  111. data/vendor/cldr/common/collation/haw.xml +41 -0
  112. data/vendor/cldr/common/collation/he.xml +14 -0
  113. data/vendor/cldr/common/collation/hi.xml +62 -0
  114. data/vendor/cldr/common/collation/hr.xml +70 -0
  115. data/vendor/cldr/common/collation/hu.xml +295 -0
  116. data/vendor/cldr/common/collation/is.xml +51 -0
  117. data/vendor/cldr/common/collation/it.xml +24 -0
  118. data/vendor/cldr/common/collation/ja.xml +2419 -0
  119. data/vendor/cldr/common/collation/kk.xml +35 -0
  120. data/vendor/cldr/common/collation/kl.xml +49 -0
  121. data/vendor/cldr/common/collation/km.xml +155 -0
  122. data/vendor/cldr/common/collation/kn.xml +765 -0
  123. data/vendor/cldr/common/collation/ko.xml +976 -0
  124. data/vendor/cldr/common/collation/kok.xml +45 -0
  125. data/vendor/cldr/common/collation/ln.xml +107 -0
  126. data/vendor/cldr/common/collation/lt.xml +47 -0
  127. data/vendor/cldr/common/collation/lv.xml +75 -0
  128. data/vendor/cldr/common/collation/mk.xml +12 -0
  129. data/vendor/cldr/common/collation/ml.xml +166 -0
  130. data/vendor/cldr/common/collation/mr.xml +52 -0
  131. data/vendor/cldr/common/collation/mt.xml +33 -0
  132. data/vendor/cldr/common/collation/my.xml +980 -0
  133. data/vendor/cldr/common/collation/nb.xml +46 -0
  134. data/vendor/cldr/common/collation/nn.xml +46 -0
  135. data/vendor/cldr/common/collation/om.xml +33 -0
  136. data/vendor/cldr/common/collation/or.xml +64 -0
  137. data/vendor/cldr/common/collation/pa.xml +28 -0
  138. data/vendor/cldr/common/collation/pl.xml +41 -0
  139. data/vendor/cldr/common/collation/ps.xml +58 -0
  140. data/vendor/cldr/common/collation/ro.xml +61 -0
  141. data/vendor/cldr/common/collation/root.xml +15 -0
  142. data/vendor/cldr/common/collation/ru.xml +14 -0
  143. data/vendor/cldr/common/collation/sa.xml +898 -0
  144. data/vendor/cldr/common/collation/si.xml +47 -0
  145. data/vendor/cldr/common/collation/sk.xml +70 -0
  146. data/vendor/cldr/common/collation/sl.xml +39 -0
  147. data/vendor/cldr/common/collation/sq.xml +112 -0
  148. data/vendor/cldr/common/collation/sr.xml +12 -0
  149. data/vendor/cldr/common/collation/sr_Latn.xml +13 -0
  150. data/vendor/cldr/common/collation/sv.xml +90 -0
  151. data/vendor/cldr/common/collation/ta.xml +82 -0
  152. data/vendor/cldr/common/collation/te.xml +46 -0
  153. data/vendor/cldr/common/collation/th.xml +58 -0
  154. data/vendor/cldr/common/collation/to.xml +52 -0
  155. data/vendor/cldr/common/collation/tr.xml +35 -0
  156. data/vendor/cldr/common/collation/uk.xml +18 -0
  157. data/vendor/cldr/common/collation/ur.xml +77 -0
  158. data/vendor/cldr/common/collation/vi.xml +37 -0
  159. data/vendor/cldr/common/collation/zh.xml +544 -0
  160. data/vendor/cldr/common/collation/zh_Hant.xml +13 -0
  161. data/vendor/cldr/common/dtd/cldrTest.dtd +46 -0
  162. data/vendor/cldr/common/dtd/ldml.dtd +1198 -0
  163. data/vendor/cldr/common/dtd/ldmlBCP47.dtd +36 -0
  164. data/vendor/cldr/common/dtd/ldmlICIR.dtd +142 -0
  165. data/vendor/cldr/common/dtd/ldmlICU.dtd +111 -0
  166. data/vendor/cldr/common/dtd/ldmlOpenOffice.dtd +192 -0
  167. data/vendor/cldr/common/dtd/ldmlSupplemental.dtd +423 -0
  168. data/vendor/cldr/common/main/aa.xml +221 -0
  169. data/vendor/cldr/common/main/aa_DJ.xml +26 -0
  170. data/vendor/cldr/common/main/aa_ER.xml +11 -0
  171. data/vendor/cldr/common/main/aa_ER_SAAHO.xml +39 -0
  172. data/vendor/cldr/common/main/aa_ET.xml +10 -0
  173. data/vendor/cldr/common/main/af.xml +827 -0
  174. data/vendor/cldr/common/main/af_NA.xml +75 -0
  175. data/vendor/cldr/common/main/af_ZA.xml +10 -0
  176. data/vendor/cldr/common/main/ak.xml +194 -0
  177. data/vendor/cldr/common/main/ak_GH.xml +10 -0
  178. data/vendor/cldr/common/main/am.xml +1413 -0
  179. data/vendor/cldr/common/main/am_ET.xml +10 -0
  180. data/vendor/cldr/common/main/ar.xml +3232 -0
  181. data/vendor/cldr/common/main/ar_AE.xml +15 -0
  182. data/vendor/cldr/common/main/ar_BH.xml +15 -0
  183. data/vendor/cldr/common/main/ar_DZ.xml +44 -0
  184. data/vendor/cldr/common/main/ar_EG.xml +10 -0
  185. data/vendor/cldr/common/main/ar_IQ.xml +15 -0
  186. data/vendor/cldr/common/main/ar_JO.xml +66 -0
  187. data/vendor/cldr/common/main/ar_KW.xml +15 -0
  188. data/vendor/cldr/common/main/ar_LB.xml +67 -0
  189. data/vendor/cldr/common/main/ar_LY.xml +15 -0
  190. data/vendor/cldr/common/main/ar_MA.xml +47 -0
  191. data/vendor/cldr/common/main/ar_OM.xml +15 -0
  192. data/vendor/cldr/common/main/ar_QA.xml +50 -0
  193. data/vendor/cldr/common/main/ar_SA.xml +50 -0
  194. data/vendor/cldr/common/main/ar_SD.xml +15 -0
  195. data/vendor/cldr/common/main/ar_SY.xml +82 -0
  196. data/vendor/cldr/common/main/ar_TN.xml +75 -0
  197. data/vendor/cldr/common/main/ar_YE.xml +50 -0
  198. data/vendor/cldr/common/main/as.xml +278 -0
  199. data/vendor/cldr/common/main/as_IN.xml +10 -0
  200. data/vendor/cldr/common/main/az.xml +2718 -0
  201. data/vendor/cldr/common/main/az_AZ.xml +11 -0
  202. data/vendor/cldr/common/main/az_Cyrl.xml +85 -0
  203. data/vendor/cldr/common/main/az_Cyrl_AZ.xml +11 -0
  204. data/vendor/cldr/common/main/az_Latn.xml +10 -0
  205. data/vendor/cldr/common/main/az_Latn_AZ.xml +11 -0
  206. data/vendor/cldr/common/main/be.xml +1096 -0
  207. data/vendor/cldr/common/main/be_BY.xml +10 -0
  208. data/vendor/cldr/common/main/bg.xml +3985 -0
  209. data/vendor/cldr/common/main/bg_BG.xml +10 -0
  210. data/vendor/cldr/common/main/bn.xml +3193 -0
  211. data/vendor/cldr/common/main/bn_BD.xml +10 -0
  212. data/vendor/cldr/common/main/bn_IN.xml +36 -0
  213. data/vendor/cldr/common/main/bo.xml +449 -0
  214. data/vendor/cldr/common/main/bo_CN.xml +10 -0
  215. data/vendor/cldr/common/main/bo_IN.xml +10 -0
  216. data/vendor/cldr/common/main/bs.xml +330 -0
  217. data/vendor/cldr/common/main/bs_BA.xml +10 -0
  218. data/vendor/cldr/common/main/byn.xml +502 -0
  219. data/vendor/cldr/common/main/byn_ER.xml +10 -0
  220. data/vendor/cldr/common/main/ca.xml +3284 -0
  221. data/vendor/cldr/common/main/ca_ES.xml +10 -0
  222. data/vendor/cldr/common/main/cch.xml +189 -0
  223. data/vendor/cldr/common/main/cch_NG.xml +10 -0
  224. data/vendor/cldr/common/main/cop.xml +201 -0
  225. data/vendor/cldr/common/main/cs.xml +2588 -0
  226. data/vendor/cldr/common/main/cs_CZ.xml +10 -0
  227. data/vendor/cldr/common/main/cy.xml +783 -0
  228. data/vendor/cldr/common/main/cy_GB.xml +10 -0
  229. data/vendor/cldr/common/main/da.xml +3379 -0
  230. data/vendor/cldr/common/main/da_DK.xml +10 -0
  231. data/vendor/cldr/common/main/de.xml +3092 -0
  232. data/vendor/cldr/common/main/de_AT.xml +70 -0
  233. data/vendor/cldr/common/main/de_BE.xml +115 -0
  234. data/vendor/cldr/common/main/de_CH.xml +65 -0
  235. data/vendor/cldr/common/main/de_DE.xml +10 -0
  236. data/vendor/cldr/common/main/de_LI.xml +23 -0
  237. data/vendor/cldr/common/main/de_LU.xml +19 -0
  238. data/vendor/cldr/common/main/dv.xml +228 -0
  239. data/vendor/cldr/common/main/dv_MV.xml +10 -0
  240. data/vendor/cldr/common/main/dz.xml +412 -0
  241. data/vendor/cldr/common/main/dz_BT.xml +10 -0
  242. data/vendor/cldr/common/main/ee.xml +197 -0
  243. data/vendor/cldr/common/main/ee_GH.xml +10 -0
  244. data/vendor/cldr/common/main/ee_TG.xml +10 -0
  245. data/vendor/cldr/common/main/el.xml +4148 -0
  246. data/vendor/cldr/common/main/el_CY.xml +20 -0
  247. data/vendor/cldr/common/main/el_GR.xml +10 -0
  248. data/vendor/cldr/common/main/el_POLYTON.xml +542 -0
  249. data/vendor/cldr/common/main/en.xml +4150 -0
  250. data/vendor/cldr/common/main/en_AS.xml +10 -0
  251. data/vendor/cldr/common/main/en_AU.xml +161 -0
  252. data/vendor/cldr/common/main/en_BE.xml +159 -0
  253. data/vendor/cldr/common/main/en_BW.xml +131 -0
  254. data/vendor/cldr/common/main/en_BZ.xml +161 -0
  255. data/vendor/cldr/common/main/en_CA.xml +127 -0
  256. data/vendor/cldr/common/main/en_Dsrt.xml +1029 -0
  257. data/vendor/cldr/common/main/en_Dsrt_US.xml +11 -0
  258. data/vendor/cldr/common/main/en_GB.xml +170 -0
  259. data/vendor/cldr/common/main/en_GU.xml +10 -0
  260. data/vendor/cldr/common/main/en_HK.xml +57 -0
  261. data/vendor/cldr/common/main/en_IE.xml +150 -0
  262. data/vendor/cldr/common/main/en_IN.xml +146 -0
  263. data/vendor/cldr/common/main/en_JM.xml +27 -0
  264. data/vendor/cldr/common/main/en_MH.xml +10 -0
  265. data/vendor/cldr/common/main/en_MP.xml +10 -0
  266. data/vendor/cldr/common/main/en_MT.xml +155 -0
  267. data/vendor/cldr/common/main/en_NA.xml +27 -0
  268. data/vendor/cldr/common/main/en_NZ.xml +158 -0
  269. data/vendor/cldr/common/main/en_PH.xml +17 -0
  270. data/vendor/cldr/common/main/en_PK.xml +154 -0
  271. data/vendor/cldr/common/main/en_SG.xml +48 -0
  272. data/vendor/cldr/common/main/en_Shaw.xml +188 -0
  273. data/vendor/cldr/common/main/en_TT.xml +27 -0
  274. data/vendor/cldr/common/main/en_UM.xml +10 -0
  275. data/vendor/cldr/common/main/en_US.xml +10 -0
  276. data/vendor/cldr/common/main/en_US_POSIX.xml +54 -0
  277. data/vendor/cldr/common/main/en_VI.xml +10 -0
  278. data/vendor/cldr/common/main/en_ZA.xml +153 -0
  279. data/vendor/cldr/common/main/en_ZW.xml +145 -0
  280. data/vendor/cldr/common/main/eo.xml +636 -0
  281. data/vendor/cldr/common/main/es.xml +3746 -0
  282. data/vendor/cldr/common/main/es_AR.xml +130 -0
  283. data/vendor/cldr/common/main/es_BO.xml +10 -0
  284. data/vendor/cldr/common/main/es_CL.xml +160 -0
  285. data/vendor/cldr/common/main/es_CO.xml +128 -0
  286. data/vendor/cldr/common/main/es_CR.xml +10 -0
  287. data/vendor/cldr/common/main/es_DO.xml +16 -0
  288. data/vendor/cldr/common/main/es_EC.xml +123 -0
  289. data/vendor/cldr/common/main/es_ES.xml +10 -0
  290. data/vendor/cldr/common/main/es_GT.xml +115 -0
  291. data/vendor/cldr/common/main/es_HN.xml +115 -0
  292. data/vendor/cldr/common/main/es_MX.xml +21 -0
  293. data/vendor/cldr/common/main/es_NI.xml +16 -0
  294. data/vendor/cldr/common/main/es_PA.xml +110 -0
  295. data/vendor/cldr/common/main/es_PE.xml +112 -0
  296. data/vendor/cldr/common/main/es_PR.xml +115 -0
  297. data/vendor/cldr/common/main/es_PY.xml +19 -0
  298. data/vendor/cldr/common/main/es_SV.xml +16 -0
  299. data/vendor/cldr/common/main/es_US.xml +148 -0
  300. data/vendor/cldr/common/main/es_UY.xml +24 -0
  301. data/vendor/cldr/common/main/es_VE.xml +19 -0
  302. data/vendor/cldr/common/main/et.xml +2045 -0
  303. data/vendor/cldr/common/main/et_EE.xml +10 -0
  304. data/vendor/cldr/common/main/eu.xml +1004 -0
  305. data/vendor/cldr/common/main/eu_ES.xml +10 -0
  306. data/vendor/cldr/common/main/fa.xml +3334 -0
  307. data/vendor/cldr/common/main/fa_AF.xml +309 -0
  308. data/vendor/cldr/common/main/fa_IR.xml +10 -0
  309. data/vendor/cldr/common/main/fi.xml +3870 -0
  310. data/vendor/cldr/common/main/fi_FI.xml +10 -0
  311. data/vendor/cldr/common/main/fil.xml +1031 -0
  312. data/vendor/cldr/common/main/fil_PH.xml +10 -0
  313. data/vendor/cldr/common/main/fo.xml +799 -0
  314. data/vendor/cldr/common/main/fo_FO.xml +10 -0
  315. data/vendor/cldr/common/main/fr.xml +5705 -0
  316. data/vendor/cldr/common/main/fr_BE.xml +104 -0
  317. data/vendor/cldr/common/main/fr_CA.xml +152 -0
  318. data/vendor/cldr/common/main/fr_CH.xml +125 -0
  319. data/vendor/cldr/common/main/fr_FR.xml +10 -0
  320. data/vendor/cldr/common/main/fr_LU.xml +23 -0
  321. data/vendor/cldr/common/main/fr_MC.xml +10 -0
  322. data/vendor/cldr/common/main/fr_SN.xml +10 -0
  323. data/vendor/cldr/common/main/fur.xml +1226 -0
  324. data/vendor/cldr/common/main/fur_IT.xml +10 -0
  325. data/vendor/cldr/common/main/ga.xml +1504 -0
  326. data/vendor/cldr/common/main/ga_IE.xml +10 -0
  327. data/vendor/cldr/common/main/gaa.xml +194 -0
  328. data/vendor/cldr/common/main/gaa_GH.xml +10 -0
  329. data/vendor/cldr/common/main/gez.xml +504 -0
  330. data/vendor/cldr/common/main/gez_ER.xml +10 -0
  331. data/vendor/cldr/common/main/gez_ET.xml +10 -0
  332. data/vendor/cldr/common/main/gl.xml +1364 -0
  333. data/vendor/cldr/common/main/gl_ES.xml +10 -0
  334. data/vendor/cldr/common/main/gsw.xml +2921 -0
  335. data/vendor/cldr/common/main/gsw_CH.xml +10 -0
  336. data/vendor/cldr/common/main/gu.xml +1165 -0
  337. data/vendor/cldr/common/main/gu_IN.xml +10 -0
  338. data/vendor/cldr/common/main/gv.xml +201 -0
  339. data/vendor/cldr/common/main/gv_GB.xml +10 -0
  340. data/vendor/cldr/common/main/ha.xml +380 -0
  341. data/vendor/cldr/common/main/ha_Arab.xml +95 -0
  342. data/vendor/cldr/common/main/ha_Arab_NG.xml +11 -0
  343. data/vendor/cldr/common/main/ha_Arab_SD.xml +11 -0
  344. data/vendor/cldr/common/main/ha_GH.xml +11 -0
  345. data/vendor/cldr/common/main/ha_Latn.xml +10 -0
  346. data/vendor/cldr/common/main/ha_Latn_GH.xml +11 -0
  347. data/vendor/cldr/common/main/ha_Latn_NE.xml +11 -0
  348. data/vendor/cldr/common/main/ha_Latn_NG.xml +11 -0
  349. data/vendor/cldr/common/main/ha_NE.xml +11 -0
  350. data/vendor/cldr/common/main/ha_NG.xml +11 -0
  351. data/vendor/cldr/common/main/ha_SD.xml +11 -0
  352. data/vendor/cldr/common/main/haw.xml +219 -0
  353. data/vendor/cldr/common/main/haw_US.xml +10 -0
  354. data/vendor/cldr/common/main/he.xml +2809 -0
  355. data/vendor/cldr/common/main/he_IL.xml +10 -0
  356. data/vendor/cldr/common/main/hi.xml +3376 -0
  357. data/vendor/cldr/common/main/hi_IN.xml +10 -0
  358. data/vendor/cldr/common/main/hr.xml +3765 -0
  359. data/vendor/cldr/common/main/hr_HR.xml +10 -0
  360. data/vendor/cldr/common/main/hu.xml +3767 -0
  361. data/vendor/cldr/common/main/hu_HU.xml +10 -0
  362. data/vendor/cldr/common/main/hy.xml +594 -0
  363. data/vendor/cldr/common/main/hy_AM.xml +10 -0
  364. data/vendor/cldr/common/main/hy_AM_REVISED.xml +40 -0
  365. data/vendor/cldr/common/main/ia.xml +553 -0
  366. data/vendor/cldr/common/main/id.xml +1342 -0
  367. data/vendor/cldr/common/main/id_ID.xml +10 -0
  368. data/vendor/cldr/common/main/ig.xml +198 -0
  369. data/vendor/cldr/common/main/ig_NG.xml +10 -0
  370. data/vendor/cldr/common/main/ii.xml +255 -0
  371. data/vendor/cldr/common/main/ii_CN.xml +10 -0
  372. data/vendor/cldr/common/main/in.xml +10 -0
  373. data/vendor/cldr/common/main/is.xml +2394 -0
  374. data/vendor/cldr/common/main/is_IS.xml +10 -0
  375. data/vendor/cldr/common/main/it.xml +3028 -0
  376. data/vendor/cldr/common/main/it_CH.xml +117 -0
  377. data/vendor/cldr/common/main/it_IT.xml +10 -0
  378. data/vendor/cldr/common/main/iu.xml +182 -0
  379. data/vendor/cldr/common/main/iw.xml +10 -0
  380. data/vendor/cldr/common/main/ja.xml +3816 -0
  381. data/vendor/cldr/common/main/ja_JP.xml +10 -0
  382. data/vendor/cldr/common/main/ka.xml +2160 -0
  383. data/vendor/cldr/common/main/ka_GE.xml +10 -0
  384. data/vendor/cldr/common/main/kaj.xml +189 -0
  385. data/vendor/cldr/common/main/kaj_NG.xml +10 -0
  386. data/vendor/cldr/common/main/kam.xml +188 -0
  387. data/vendor/cldr/common/main/kam_KE.xml +10 -0
  388. data/vendor/cldr/common/main/kcg.xml +189 -0
  389. data/vendor/cldr/common/main/kcg_NG.xml +10 -0
  390. data/vendor/cldr/common/main/kfo.xml +189 -0
  391. data/vendor/cldr/common/main/kfo_CI.xml +10 -0
  392. data/vendor/cldr/common/main/kk.xml +389 -0
  393. data/vendor/cldr/common/main/kk_Cyrl.xml +10 -0
  394. data/vendor/cldr/common/main/kk_Cyrl_KZ.xml +11 -0
  395. data/vendor/cldr/common/main/kk_KZ.xml +11 -0
  396. data/vendor/cldr/common/main/kl.xml +208 -0
  397. data/vendor/cldr/common/main/kl_GL.xml +10 -0
  398. data/vendor/cldr/common/main/km.xml +668 -0
  399. data/vendor/cldr/common/main/km_KH.xml +10 -0
  400. data/vendor/cldr/common/main/kn.xml +1166 -0
  401. data/vendor/cldr/common/main/kn_IN.xml +10 -0
  402. data/vendor/cldr/common/main/ko.xml +3961 -0
  403. data/vendor/cldr/common/main/ko_KR.xml +10 -0
  404. data/vendor/cldr/common/main/kok.xml +364 -0
  405. data/vendor/cldr/common/main/kok_IN.xml +10 -0
  406. data/vendor/cldr/common/main/kpe.xml +188 -0
  407. data/vendor/cldr/common/main/kpe_GN.xml +17 -0
  408. data/vendor/cldr/common/main/kpe_LR.xml +10 -0
  409. data/vendor/cldr/common/main/ku.xml +159 -0
  410. data/vendor/cldr/common/main/ku_Arab.xml +10 -0
  411. data/vendor/cldr/common/main/ku_Arab_IQ.xml +11 -0
  412. data/vendor/cldr/common/main/ku_Arab_IR.xml +11 -0
  413. data/vendor/cldr/common/main/ku_Arab_SY.xml +11 -0
  414. data/vendor/cldr/common/main/ku_IQ.xml +11 -0
  415. data/vendor/cldr/common/main/ku_IR.xml +11 -0
  416. data/vendor/cldr/common/main/ku_Latn.xml +190 -0
  417. data/vendor/cldr/common/main/ku_Latn_TR.xml +11 -0
  418. data/vendor/cldr/common/main/ku_SY.xml +11 -0
  419. data/vendor/cldr/common/main/ku_TR.xml +11 -0
  420. data/vendor/cldr/common/main/kw.xml +201 -0
  421. data/vendor/cldr/common/main/kw_GB.xml +10 -0
  422. data/vendor/cldr/common/main/ky.xml +276 -0
  423. data/vendor/cldr/common/main/ky_KG.xml +10 -0
  424. data/vendor/cldr/common/main/ln.xml +492 -0
  425. data/vendor/cldr/common/main/ln_CD.xml +10 -0
  426. data/vendor/cldr/common/main/ln_CG.xml +10 -0
  427. data/vendor/cldr/common/main/lo.xml +624 -0
  428. data/vendor/cldr/common/main/lo_LA.xml +10 -0
  429. data/vendor/cldr/common/main/lt.xml +3394 -0
  430. data/vendor/cldr/common/main/lt_LT.xml +10 -0
  431. data/vendor/cldr/common/main/lv.xml +3086 -0
  432. data/vendor/cldr/common/main/lv_LV.xml +10 -0
  433. data/vendor/cldr/common/main/mk.xml +2323 -0
  434. data/vendor/cldr/common/main/mk_MK.xml +10 -0
  435. data/vendor/cldr/common/main/ml.xml +4443 -0
  436. data/vendor/cldr/common/main/ml_IN.xml +10 -0
  437. data/vendor/cldr/common/main/mn.xml +320 -0
  438. data/vendor/cldr/common/main/mn_CN.xml +11 -0
  439. data/vendor/cldr/common/main/mn_Cyrl.xml +10 -0
  440. data/vendor/cldr/common/main/mn_Cyrl_MN.xml +11 -0
  441. data/vendor/cldr/common/main/mn_MN.xml +11 -0
  442. data/vendor/cldr/common/main/mn_Mong.xml +17 -0
  443. data/vendor/cldr/common/main/mn_Mong_CN.xml +11 -0
  444. data/vendor/cldr/common/main/mo.xml +10 -0
  445. data/vendor/cldr/common/main/mr.xml +1199 -0
  446. data/vendor/cldr/common/main/mr_IN.xml +10 -0
  447. data/vendor/cldr/common/main/ms.xml +558 -0
  448. data/vendor/cldr/common/main/ms_BN.xml +135 -0
  449. data/vendor/cldr/common/main/ms_MY.xml +10 -0
  450. data/vendor/cldr/common/main/mt.xml +1146 -0
  451. data/vendor/cldr/common/main/mt_MT.xml +10 -0
  452. data/vendor/cldr/common/main/my.xml +1590 -0
  453. data/vendor/cldr/common/main/my_MM.xml +10 -0
  454. data/vendor/cldr/common/main/nb.xml +3300 -0
  455. data/vendor/cldr/common/main/nb_NO.xml +10 -0
  456. data/vendor/cldr/common/main/nds.xml +1151 -0
  457. data/vendor/cldr/common/main/nds_DE.xml +10 -0
  458. data/vendor/cldr/common/main/ne.xml +1387 -0
  459. data/vendor/cldr/common/main/ne_IN.xml +10 -0
  460. data/vendor/cldr/common/main/ne_NP.xml +10 -0
  461. data/vendor/cldr/common/main/nl.xml +3888 -0
  462. data/vendor/cldr/common/main/nl_BE.xml +81 -0
  463. data/vendor/cldr/common/main/nl_NL.xml +10 -0
  464. data/vendor/cldr/common/main/nn.xml +2999 -0
  465. data/vendor/cldr/common/main/nn_NO.xml +10 -0
  466. data/vendor/cldr/common/main/no.xml +10 -0
  467. data/vendor/cldr/common/main/nr.xml +227 -0
  468. data/vendor/cldr/common/main/nr_ZA.xml +10 -0
  469. data/vendor/cldr/common/main/nso.xml +229 -0
  470. data/vendor/cldr/common/main/nso_ZA.xml +10 -0
  471. data/vendor/cldr/common/main/ny.xml +193 -0
  472. data/vendor/cldr/common/main/ny_MW.xml +10 -0
  473. data/vendor/cldr/common/main/oc.xml +280 -0
  474. data/vendor/cldr/common/main/oc_FR.xml +10 -0
  475. data/vendor/cldr/common/main/om.xml +328 -0
  476. data/vendor/cldr/common/main/om_ET.xml +10 -0
  477. data/vendor/cldr/common/main/om_KE.xml +10 -0
  478. data/vendor/cldr/common/main/or.xml +1146 -0
  479. data/vendor/cldr/common/main/or_IN.xml +10 -0
  480. data/vendor/cldr/common/main/pa.xml +314 -0
  481. data/vendor/cldr/common/main/pa_Arab.xml +135 -0
  482. data/vendor/cldr/common/main/pa_Arab_PK.xml +11 -0
  483. data/vendor/cldr/common/main/pa_Guru.xml +10 -0
  484. data/vendor/cldr/common/main/pa_Guru_IN.xml +11 -0
  485. data/vendor/cldr/common/main/pa_IN.xml +11 -0
  486. data/vendor/cldr/common/main/pa_PK.xml +11 -0
  487. data/vendor/cldr/common/main/pl.xml +3124 -0
  488. data/vendor/cldr/common/main/pl_PL.xml +10 -0
  489. data/vendor/cldr/common/main/ps.xml +425 -0
  490. data/vendor/cldr/common/main/ps_AF.xml +10 -0
  491. data/vendor/cldr/common/main/pt.xml +4373 -0
  492. data/vendor/cldr/common/main/pt_BR.xml +10 -0
  493. data/vendor/cldr/common/main/pt_PT.xml +1866 -0
  494. data/vendor/cldr/common/main/ro.xml +2515 -0
  495. data/vendor/cldr/common/main/ro_MD.xml +10 -0
  496. data/vendor/cldr/common/main/ro_RO.xml +10 -0
  497. data/vendor/cldr/common/main/root.xml +3193 -0
  498. data/vendor/cldr/common/main/ru.xml +3992 -0
  499. data/vendor/cldr/common/main/ru_RU.xml +10 -0
  500. data/vendor/cldr/common/main/ru_UA.xml +117 -0
  501. data/vendor/cldr/common/main/rw.xml +306 -0
  502. data/vendor/cldr/common/main/rw_RW.xml +10 -0
  503. data/vendor/cldr/common/main/sa.xml +152 -0
  504. data/vendor/cldr/common/main/sa_IN.xml +10 -0
  505. data/vendor/cldr/common/main/se.xml +745 -0
  506. data/vendor/cldr/common/main/se_FI.xml +250 -0
  507. data/vendor/cldr/common/main/se_NO.xml +10 -0
  508. data/vendor/cldr/common/main/sh.xml +10 -0
  509. data/vendor/cldr/common/main/sh_BA.xml +11 -0
  510. data/vendor/cldr/common/main/sh_CS.xml +11 -0
  511. data/vendor/cldr/common/main/sh_YU.xml +11 -0
  512. data/vendor/cldr/common/main/si.xml +242 -0
  513. data/vendor/cldr/common/main/si_LK.xml +10 -0
  514. data/vendor/cldr/common/main/sid.xml +249 -0
  515. data/vendor/cldr/common/main/sid_ET.xml +10 -0
  516. data/vendor/cldr/common/main/sk.xml +1923 -0
  517. data/vendor/cldr/common/main/sk_SK.xml +10 -0
  518. data/vendor/cldr/common/main/sl.xml +2573 -0
  519. data/vendor/cldr/common/main/sl_SI.xml +10 -0
  520. data/vendor/cldr/common/main/so.xml +560 -0
  521. data/vendor/cldr/common/main/so_DJ.xml +10 -0
  522. data/vendor/cldr/common/main/so_ET.xml +10 -0
  523. data/vendor/cldr/common/main/so_KE.xml +10 -0
  524. data/vendor/cldr/common/main/so_SO.xml +10 -0
  525. data/vendor/cldr/common/main/sq.xml +657 -0
  526. data/vendor/cldr/common/main/sq_AL.xml +10 -0
  527. data/vendor/cldr/common/main/sr.xml +5983 -0
  528. data/vendor/cldr/common/main/sr_BA.xml +11 -0
  529. data/vendor/cldr/common/main/sr_CS.xml +11 -0
  530. data/vendor/cldr/common/main/sr_Cyrl.xml +10 -0
  531. data/vendor/cldr/common/main/sr_Cyrl_BA.xml +104 -0
  532. data/vendor/cldr/common/main/sr_Cyrl_CS.xml +12 -0
  533. data/vendor/cldr/common/main/sr_Cyrl_ME.xml +11 -0
  534. data/vendor/cldr/common/main/sr_Cyrl_RS.xml +11 -0
  535. data/vendor/cldr/common/main/sr_Cyrl_YU.xml +12 -0
  536. data/vendor/cldr/common/main/sr_Latn.xml +5382 -0
  537. data/vendor/cldr/common/main/sr_Latn_BA.xml +11 -0
  538. data/vendor/cldr/common/main/sr_Latn_CS.xml +12 -0
  539. data/vendor/cldr/common/main/sr_Latn_ME.xml +55 -0
  540. data/vendor/cldr/common/main/sr_Latn_RS.xml +11 -0
  541. data/vendor/cldr/common/main/sr_Latn_YU.xml +12 -0
  542. data/vendor/cldr/common/main/sr_ME.xml +11 -0
  543. data/vendor/cldr/common/main/sr_RS.xml +11 -0
  544. data/vendor/cldr/common/main/sr_YU.xml +11 -0
  545. data/vendor/cldr/common/main/ss.xml +231 -0
  546. data/vendor/cldr/common/main/ss_SZ.xml +11 -0
  547. data/vendor/cldr/common/main/ss_ZA.xml +10 -0
  548. data/vendor/cldr/common/main/st.xml +321 -0
  549. data/vendor/cldr/common/main/st_LS.xml +17 -0
  550. data/vendor/cldr/common/main/st_ZA.xml +10 -0
  551. data/vendor/cldr/common/main/sv.xml +5088 -0
  552. data/vendor/cldr/common/main/sv_FI.xml +48 -0
  553. data/vendor/cldr/common/main/sv_SE.xml +10 -0
  554. data/vendor/cldr/common/main/sw.xml +400 -0
  555. data/vendor/cldr/common/main/sw_KE.xml +19 -0
  556. data/vendor/cldr/common/main/sw_TZ.xml +10 -0
  557. data/vendor/cldr/common/main/syr.xml +129 -0
  558. data/vendor/cldr/common/main/syr_SY.xml +10 -0
  559. data/vendor/cldr/common/main/ta.xml +1195 -0
  560. data/vendor/cldr/common/main/ta_IN.xml +10 -0
  561. data/vendor/cldr/common/main/te.xml +1159 -0
  562. data/vendor/cldr/common/main/te_IN.xml +10 -0
  563. data/vendor/cldr/common/main/tg.xml +224 -0
  564. data/vendor/cldr/common/main/tg_Cyrl.xml +10 -0
  565. data/vendor/cldr/common/main/tg_Cyrl_TJ.xml +11 -0
  566. data/vendor/cldr/common/main/tg_TJ.xml +11 -0
  567. data/vendor/cldr/common/main/th.xml +4466 -0
  568. data/vendor/cldr/common/main/th_TH.xml +10 -0
  569. data/vendor/cldr/common/main/ti.xml +326 -0
  570. data/vendor/cldr/common/main/ti_ER.xml +124 -0
  571. data/vendor/cldr/common/main/ti_ET.xml +10 -0
  572. data/vendor/cldr/common/main/tig.xml +501 -0
  573. data/vendor/cldr/common/main/tig_ER.xml +10 -0
  574. data/vendor/cldr/common/main/tl.xml +10 -0
  575. data/vendor/cldr/common/main/tn.xml +313 -0
  576. data/vendor/cldr/common/main/tn_ZA.xml +10 -0
  577. data/vendor/cldr/common/main/to.xml +613 -0
  578. data/vendor/cldr/common/main/to_TO.xml +10 -0
  579. data/vendor/cldr/common/main/tr.xml +3782 -0
  580. data/vendor/cldr/common/main/tr_TR.xml +10 -0
  581. data/vendor/cldr/common/main/trv.xml +562 -0
  582. data/vendor/cldr/common/main/trv_TW.xml +10 -0
  583. data/vendor/cldr/common/main/ts.xml +173 -0
  584. data/vendor/cldr/common/main/ts_ZA.xml +10 -0
  585. data/vendor/cldr/common/main/tt.xml +105 -0
  586. data/vendor/cldr/common/main/tt_RU.xml +10 -0
  587. data/vendor/cldr/common/main/ug.xml +40 -0
  588. data/vendor/cldr/common/main/ug_Arab.xml +10 -0
  589. data/vendor/cldr/common/main/ug_Arab_CN.xml +11 -0
  590. data/vendor/cldr/common/main/ug_CN.xml +11 -0
  591. data/vendor/cldr/common/main/uk.xml +3855 -0
  592. data/vendor/cldr/common/main/uk_UA.xml +10 -0
  593. data/vendor/cldr/common/main/ur.xml +1027 -0
  594. data/vendor/cldr/common/main/ur_IN.xml +33 -0
  595. data/vendor/cldr/common/main/ur_PK.xml +10 -0
  596. data/vendor/cldr/common/main/uz.xml +235 -0
  597. data/vendor/cldr/common/main/uz_AF.xml +11 -0
  598. data/vendor/cldr/common/main/uz_Arab.xml +172 -0
  599. data/vendor/cldr/common/main/uz_Arab_AF.xml +12 -0
  600. data/vendor/cldr/common/main/uz_Cyrl.xml +11 -0
  601. data/vendor/cldr/common/main/uz_Cyrl_UZ.xml +11 -0
  602. data/vendor/cldr/common/main/uz_Latn.xml +170 -0
  603. data/vendor/cldr/common/main/uz_Latn_UZ.xml +11 -0
  604. data/vendor/cldr/common/main/uz_UZ.xml +11 -0
  605. data/vendor/cldr/common/main/ve.xml +194 -0
  606. data/vendor/cldr/common/main/ve_ZA.xml +10 -0
  607. data/vendor/cldr/common/main/vi.xml +1065 -0
  608. data/vendor/cldr/common/main/vi_VN.xml +10 -0
  609. data/vendor/cldr/common/main/wal.xml +350 -0
  610. data/vendor/cldr/common/main/wal_ET.xml +10 -0
  611. data/vendor/cldr/common/main/wo.xml +42 -0
  612. data/vendor/cldr/common/main/wo_Latn.xml +10 -0
  613. data/vendor/cldr/common/main/wo_Latn_SN.xml +11 -0
  614. data/vendor/cldr/common/main/wo_SN.xml +10 -0
  615. data/vendor/cldr/common/main/xh.xml +261 -0
  616. data/vendor/cldr/common/main/xh_ZA.xml +10 -0
  617. data/vendor/cldr/common/main/yo.xml +240 -0
  618. data/vendor/cldr/common/main/yo_NG.xml +10 -0
  619. data/vendor/cldr/common/main/zh.xml +4612 -0
  620. data/vendor/cldr/common/main/zh_CN.xml +11 -0
  621. data/vendor/cldr/common/main/zh_HK.xml +11 -0
  622. data/vendor/cldr/common/main/zh_Hans.xml +10 -0
  623. data/vendor/cldr/common/main/zh_Hans_CN.xml +11 -0
  624. data/vendor/cldr/common/main/zh_Hans_HK.xml +18 -0
  625. data/vendor/cldr/common/main/zh_Hans_MO.xml +11 -0
  626. data/vendor/cldr/common/main/zh_Hans_SG.xml +88 -0
  627. data/vendor/cldr/common/main/zh_Hant.xml +3791 -0
  628. data/vendor/cldr/common/main/zh_Hant_HK.xml +191 -0
  629. data/vendor/cldr/common/main/zh_Hant_MO.xml +117 -0
  630. data/vendor/cldr/common/main/zh_Hant_TW.xml +11 -0
  631. data/vendor/cldr/common/main/zh_MO.xml +11 -0
  632. data/vendor/cldr/common/main/zh_SG.xml +11 -0
  633. data/vendor/cldr/common/main/zh_TW.xml +11 -0
  634. data/vendor/cldr/common/main/zu.xml +334 -0
  635. data/vendor/cldr/common/main/zu_ZA.xml +10 -0
  636. data/vendor/cldr/common/rbnf/af.xml +105 -0
  637. data/vendor/cldr/common/rbnf/am.xml +68 -0
  638. data/vendor/cldr/common/rbnf/ar.xml +247 -0
  639. data/vendor/cldr/common/rbnf/az.xml +109 -0
  640. data/vendor/cldr/common/rbnf/be.xml +159 -0
  641. data/vendor/cldr/common/rbnf/bg.xml +105 -0
  642. data/vendor/cldr/common/rbnf/bs.xml +129 -0
  643. data/vendor/cldr/common/rbnf/ca.xml +278 -0
  644. data/vendor/cldr/common/rbnf/cs.xml +138 -0
  645. data/vendor/cldr/common/rbnf/cy.xml +116 -0
  646. data/vendor/cldr/common/rbnf/da.xml +81 -0
  647. data/vendor/cldr/common/rbnf/de.xml +130 -0
  648. data/vendor/cldr/common/rbnf/el.xml +310 -0
  649. data/vendor/cldr/common/rbnf/en.xml +174 -0
  650. data/vendor/cldr/common/rbnf/eo.xml +52 -0
  651. data/vendor/cldr/common/rbnf/es.xml +266 -0
  652. data/vendor/cldr/common/rbnf/et.xml +51 -0
  653. data/vendor/cldr/common/rbnf/fa.xml +64 -0
  654. data/vendor/cldr/common/rbnf/fa_AF.xml +63 -0
  655. data/vendor/cldr/common/rbnf/fi.xml +53 -0
  656. data/vendor/cldr/common/rbnf/fil.xml +70 -0
  657. data/vendor/cldr/common/rbnf/fo.xml +124 -0
  658. data/vendor/cldr/common/rbnf/fr.xml +147 -0
  659. data/vendor/cldr/common/rbnf/fr_BE.xml +152 -0
  660. data/vendor/cldr/common/rbnf/fr_CH.xml +152 -0
  661. data/vendor/cldr/common/rbnf/ga.xml +240 -0
  662. data/vendor/cldr/common/rbnf/he.xml +401 -0
  663. data/vendor/cldr/common/rbnf/hi.xml +137 -0
  664. data/vendor/cldr/common/rbnf/hr.xml +159 -0
  665. data/vendor/cldr/common/rbnf/hu.xml +55 -0
  666. data/vendor/cldr/common/rbnf/hy.xml +50 -0
  667. data/vendor/cldr/common/rbnf/id.xml +57 -0
  668. data/vendor/cldr/common/rbnf/is.xml +124 -0
  669. data/vendor/cldr/common/rbnf/it.xml +237 -0
  670. data/vendor/cldr/common/rbnf/ja.xml +78 -0
  671. data/vendor/cldr/common/rbnf/ka.xml +76 -0
  672. data/vendor/cldr/common/rbnf/kl.xml +82 -0
  673. data/vendor/cldr/common/rbnf/ko.xml +82 -0
  674. data/vendor/cldr/common/rbnf/lo.xml +57 -0
  675. data/vendor/cldr/common/rbnf/lt.xml +89 -0
  676. data/vendor/cldr/common/rbnf/lv.xml +94 -0
  677. data/vendor/cldr/common/rbnf/mk.xml +105 -0
  678. data/vendor/cldr/common/rbnf/ms.xml +60 -0
  679. data/vendor/cldr/common/rbnf/mt.xml +418 -0
  680. data/vendor/cldr/common/rbnf/nb.xml +80 -0
  681. data/vendor/cldr/common/rbnf/nci.xml +109 -0
  682. data/vendor/cldr/common/rbnf/nl.xml +112 -0
  683. data/vendor/cldr/common/rbnf/nn.xml +79 -0
  684. data/vendor/cldr/common/rbnf/pl.xml +131 -0
  685. data/vendor/cldr/common/rbnf/pt.xml +221 -0
  686. data/vendor/cldr/common/rbnf/pt_PT.xml +206 -0
  687. data/vendor/cldr/common/rbnf/ro.xml +101 -0
  688. data/vendor/cldr/common/rbnf/root.xml +527 -0
  689. data/vendor/cldr/common/rbnf/ru.xml +144 -0
  690. data/vendor/cldr/common/rbnf/se.xml +47 -0
  691. data/vendor/cldr/common/rbnf/sk.xml +117 -0
  692. data/vendor/cldr/common/rbnf/sl.xml +141 -0
  693. data/vendor/cldr/common/rbnf/sq.xml +75 -0
  694. data/vendor/cldr/common/rbnf/sr.xml +161 -0
  695. data/vendor/cldr/common/rbnf/sr_Latn.xml +160 -0
  696. data/vendor/cldr/common/rbnf/sv.xml +241 -0
  697. data/vendor/cldr/common/rbnf/ta.xml +71 -0
  698. data/vendor/cldr/common/rbnf/th.xml +57 -0
  699. data/vendor/cldr/common/rbnf/tr.xml +121 -0
  700. data/vendor/cldr/common/rbnf/uk.xml +159 -0
  701. data/vendor/cldr/common/rbnf/vi.xml +51 -0
  702. data/vendor/cldr/common/rbnf/zh.xml +146 -0
  703. data/vendor/cldr/common/rbnf/zh_Hant.xml +147 -0
  704. data/vendor/cldr/common/segments/el.xml +18 -0
  705. data/vendor/cldr/common/segments/en_US_POSIX.xml +22 -0
  706. data/vendor/cldr/common/segments/ja.xml +23 -0
  707. data/vendor/cldr/common/segments/root.xml +629 -0
  708. data/vendor/cldr/common/segments/th.xml +25 -0
  709. data/vendor/cldr/common/supplemental/characters.xml +491 -0
  710. data/vendor/cldr/common/supplemental/likelySubtags.xml +463 -0
  711. data/vendor/cldr/common/supplemental/metazoneInfo.xml +1409 -0
  712. data/vendor/cldr/common/supplemental/numberingSystems.xml +42 -0
  713. data/vendor/cldr/common/supplemental/plurals.xml +76 -0
  714. data/vendor/cldr/common/supplemental/postalCodeData.xml +166 -0
  715. data/vendor/cldr/common/supplemental/supplementalData.xml +5611 -0
  716. data/vendor/cldr/common/supplemental/supplementalMetadata.xml +744 -0
  717. data/vendor/cldr/common/supplemental/telephoneCodeData.xml +846 -0
  718. data/vendor/cldr/common/transforms/Amharic-Latin-BGN.xml +580 -0
  719. data/vendor/cldr/common/transforms/Any-Accents.xml +277 -0
  720. data/vendor/cldr/common/transforms/Any-Publishing.xml +29 -0
  721. data/vendor/cldr/common/transforms/Arabic-Latin-BGN.xml +234 -0
  722. data/vendor/cldr/common/transforms/Arabic-Latin.xml +138 -0
  723. data/vendor/cldr/common/transforms/Armenian-Latin-BGN.xml +285 -0
  724. data/vendor/cldr/common/transforms/Azerbaijani-Latin-BGN.xml +212 -0
  725. data/vendor/cldr/common/transforms/Belarusian-Latin-BGN.xml +285 -0
  726. data/vendor/cldr/common/transforms/Bengali-Devanagari.xml +14 -0
  727. data/vendor/cldr/common/transforms/Bengali-Gujarati.xml +14 -0
  728. data/vendor/cldr/common/transforms/Bengali-Gurmukhi.xml +14 -0
  729. data/vendor/cldr/common/transforms/Bengali-InterIndic.xml +106 -0
  730. data/vendor/cldr/common/transforms/Bengali-Kannada.xml +14 -0
  731. data/vendor/cldr/common/transforms/Bengali-Latin.xml +14 -0
  732. data/vendor/cldr/common/transforms/Bengali-Malayalam.xml +14 -0
  733. data/vendor/cldr/common/transforms/Bengali-Oriya.xml +14 -0
  734. data/vendor/cldr/common/transforms/Bengali-Tamil.xml +14 -0
  735. data/vendor/cldr/common/transforms/Bengali-Telugu.xml +14 -0
  736. data/vendor/cldr/common/transforms/Bulgarian-Latin-BGN.xml +271 -0
  737. data/vendor/cldr/common/transforms/CanadianAboriginal-Latin.xml +191 -0
  738. data/vendor/cldr/common/transforms/Cyrillic-Latin.xml +277 -0
  739. data/vendor/cldr/common/transforms/Devanagari-Bengali.xml +14 -0
  740. data/vendor/cldr/common/transforms/Devanagari-Gujarati.xml +14 -0
  741. data/vendor/cldr/common/transforms/Devanagari-Gurmukhi.xml +14 -0
  742. data/vendor/cldr/common/transforms/Devanagari-InterIndic.xml +119 -0
  743. data/vendor/cldr/common/transforms/Devanagari-Kannada.xml +14 -0
  744. data/vendor/cldr/common/transforms/Devanagari-Latin.xml +14 -0
  745. data/vendor/cldr/common/transforms/Devanagari-Malayalam.xml +14 -0
  746. data/vendor/cldr/common/transforms/Devanagari-Oriya.xml +14 -0
  747. data/vendor/cldr/common/transforms/Devanagari-Tamil.xml +14 -0
  748. data/vendor/cldr/common/transforms/Devanagari-Telugu.xml +14 -0
  749. data/vendor/cldr/common/transforms/Fullwidth-Halfwidth.xml +268 -0
  750. data/vendor/cldr/common/transforms/Georgian-Latin-BGN.xml +96 -0
  751. data/vendor/cldr/common/transforms/Georgian-Latin.xml +60 -0
  752. data/vendor/cldr/common/transforms/Greek-Latin-BGN.xml +481 -0
  753. data/vendor/cldr/common/transforms/Greek-Latin.xml +257 -0
  754. data/vendor/cldr/common/transforms/Greek_Latin_UNGEGN.xml +186 -0
  755. data/vendor/cldr/common/transforms/Gujarati-Bengali.xml +14 -0
  756. data/vendor/cldr/common/transforms/Gujarati-Devanagari.xml +14 -0
  757. data/vendor/cldr/common/transforms/Gujarati-Gurmukhi.xml +14 -0
  758. data/vendor/cldr/common/transforms/Gujarati-InterIndic.xml +95 -0
  759. data/vendor/cldr/common/transforms/Gujarati-Kannada.xml +14 -0
  760. data/vendor/cldr/common/transforms/Gujarati-Latin.xml +14 -0
  761. data/vendor/cldr/common/transforms/Gujarati-Malayalam.xml +14 -0
  762. data/vendor/cldr/common/transforms/Gujarati-Oriya.xml +14 -0
  763. data/vendor/cldr/common/transforms/Gujarati-Tamil.xml +14 -0
  764. data/vendor/cldr/common/transforms/Gujarati-Telugu.xml +14 -0
  765. data/vendor/cldr/common/transforms/Gurmukhi-Bengali.xml +14 -0
  766. data/vendor/cldr/common/transforms/Gurmukhi-Devanagari.xml +14 -0
  767. data/vendor/cldr/common/transforms/Gurmukhi-Gujarati.xml +14 -0
  768. data/vendor/cldr/common/transforms/Gurmukhi-InterIndic.xml +95 -0
  769. data/vendor/cldr/common/transforms/Gurmukhi-Kannada.xml +14 -0
  770. data/vendor/cldr/common/transforms/Gurmukhi-Latin.xml +14 -0
  771. data/vendor/cldr/common/transforms/Gurmukhi-Malayalam.xml +14 -0
  772. data/vendor/cldr/common/transforms/Gurmukhi-Oriya.xml +14 -0
  773. data/vendor/cldr/common/transforms/Gurmukhi-Tamil.xml +14 -0
  774. data/vendor/cldr/common/transforms/Gurmukhi-Telugu.xml +14 -0
  775. data/vendor/cldr/common/transforms/Han-Latin.xml +1439 -0
  776. data/vendor/cldr/common/transforms/Han-Spacedhan.xml +21 -0
  777. data/vendor/cldr/common/transforms/Hangul-Latin.xml +13 -0
  778. data/vendor/cldr/common/transforms/Hebrew-Latin-BGN.xml +132 -0
  779. data/vendor/cldr/common/transforms/Hebrew-Latin.xml +95 -0
  780. data/vendor/cldr/common/transforms/Hiragana-Katakana.xml +186 -0
  781. data/vendor/cldr/common/transforms/Hiragana-Latin.xml +16 -0
  782. data/vendor/cldr/common/transforms/InterIndic-Bengali.xml +142 -0
  783. data/vendor/cldr/common/transforms/InterIndic-Devanagari.xml +159 -0
  784. data/vendor/cldr/common/transforms/InterIndic-Gujarati.xml +143 -0
  785. data/vendor/cldr/common/transforms/InterIndic-Gurmukhi.xml +149 -0
  786. data/vendor/cldr/common/transforms/InterIndic-Kannada.xml +144 -0
  787. data/vendor/cldr/common/transforms/InterIndic-Latin.xml +497 -0
  788. data/vendor/cldr/common/transforms/InterIndic-Malayalam.xml +144 -0
  789. data/vendor/cldr/common/transforms/InterIndic-Oriya.xml +142 -0
  790. data/vendor/cldr/common/transforms/InterIndic-Tamil.xml +153 -0
  791. data/vendor/cldr/common/transforms/InterIndic-Telugu.xml +143 -0
  792. data/vendor/cldr/common/transforms/Jamo-Latin.xml +13 -0
  793. data/vendor/cldr/common/transforms/Kannada-Bengali.xml +14 -0
  794. data/vendor/cldr/common/transforms/Kannada-Devanagari.xml +14 -0
  795. data/vendor/cldr/common/transforms/Kannada-Gujarati.xml +14 -0
  796. data/vendor/cldr/common/transforms/Kannada-Gurmukhi.xml +14 -0
  797. data/vendor/cldr/common/transforms/Kannada-InterIndic.xml +94 -0
  798. data/vendor/cldr/common/transforms/Kannada-Latin.xml +14 -0
  799. data/vendor/cldr/common/transforms/Kannada-Malayalam.xml +14 -0
  800. data/vendor/cldr/common/transforms/Kannada-Oriya.xml +14 -0
  801. data/vendor/cldr/common/transforms/Kannada-Tamil.xml +14 -0
  802. data/vendor/cldr/common/transforms/Kannada-Telugu.xml +14 -0
  803. data/vendor/cldr/common/transforms/Katakana-Latin-BGN.xml +443 -0
  804. data/vendor/cldr/common/transforms/Kazakh-Latin-BGN.xml +366 -0
  805. data/vendor/cldr/common/transforms/Kirghiz-Latin-BGN.xml +235 -0
  806. data/vendor/cldr/common/transforms/Korean-Latin-BGN.xml +382 -0
  807. data/vendor/cldr/common/transforms/Latin-Armenian.xml +91 -0
  808. data/vendor/cldr/common/transforms/Latin-Bengali.xml +15 -0
  809. data/vendor/cldr/common/transforms/Latin-ConjoiningJamo.xml +522 -0
  810. data/vendor/cldr/common/transforms/Latin-Devanagari.xml +15 -0
  811. data/vendor/cldr/common/transforms/Latin-Ethiopic.xml +358 -0
  812. data/vendor/cldr/common/transforms/Latin-Gujarati.xml +15 -0
  813. data/vendor/cldr/common/transforms/Latin-Gurmukhi.xml +15 -0
  814. data/vendor/cldr/common/transforms/Latin-Hangul.xml +14 -0
  815. data/vendor/cldr/common/transforms/Latin-InterIndic.xml +384 -0
  816. data/vendor/cldr/common/transforms/Latin-Jamo.xml +13 -0
  817. data/vendor/cldr/common/transforms/Latin-Kannada.xml +15 -0
  818. data/vendor/cldr/common/transforms/Latin-Katakana.xml +389 -0
  819. data/vendor/cldr/common/transforms/Latin-Malayalam.xml +15 -0
  820. data/vendor/cldr/common/transforms/Latin-NumericPinyin.xml +36 -0
  821. data/vendor/cldr/common/transforms/Latin-Oriya.xml +15 -0
  822. data/vendor/cldr/common/transforms/Latin-Tamil.xml +15 -0
  823. data/vendor/cldr/common/transforms/Latin-Telugu.xml +15 -0
  824. data/vendor/cldr/common/transforms/Latin-Thai.xml +14 -0
  825. data/vendor/cldr/common/transforms/Macedonian-Latin-BGN.xml +198 -0
  826. data/vendor/cldr/common/transforms/Malayalam-Bengali.xml +14 -0
  827. data/vendor/cldr/common/transforms/Malayalam-Devanagari.xml +14 -0
  828. data/vendor/cldr/common/transforms/Malayalam-Gujarati.xml +14 -0
  829. data/vendor/cldr/common/transforms/Malayalam-Gurmukhi.xml +14 -0
  830. data/vendor/cldr/common/transforms/Malayalam-InterIndic.xml +88 -0
  831. data/vendor/cldr/common/transforms/Malayalam-Kannada.xml +14 -0
  832. data/vendor/cldr/common/transforms/Malayalam-Latin.xml +14 -0
  833. data/vendor/cldr/common/transforms/Malayalam-Oriya.xml +14 -0
  834. data/vendor/cldr/common/transforms/Malayalam-Tamil.xml +14 -0
  835. data/vendor/cldr/common/transforms/Malayalam-Telugu.xml +14 -0
  836. data/vendor/cldr/common/transforms/Maldivian-Latin-BGN.xml +141 -0
  837. data/vendor/cldr/common/transforms/Mongolian-Latin-BGN.xml +209 -0
  838. data/vendor/cldr/common/transforms/Oriya-Bengali.xml +14 -0
  839. data/vendor/cldr/common/transforms/Oriya-Devanagari.xml +14 -0
  840. data/vendor/cldr/common/transforms/Oriya-Gujarati.xml +14 -0
  841. data/vendor/cldr/common/transforms/Oriya-Gurmukhi.xml +14 -0
  842. data/vendor/cldr/common/transforms/Oriya-InterIndic.xml +98 -0
  843. data/vendor/cldr/common/transforms/Oriya-Kannada.xml +14 -0
  844. data/vendor/cldr/common/transforms/Oriya-Latin.xml +14 -0
  845. data/vendor/cldr/common/transforms/Oriya-Malayalam.xml +14 -0
  846. data/vendor/cldr/common/transforms/Oriya-Tamil.xml +14 -0
  847. data/vendor/cldr/common/transforms/Oriya-Telugu.xml +14 -0
  848. data/vendor/cldr/common/transforms/Pashto-Latin-BGN.xml +262 -0
  849. data/vendor/cldr/common/transforms/Persian-Latin-BGN.xml +233 -0
  850. data/vendor/cldr/common/transforms/Pinyin-NumericPinyin.xml +15 -0
  851. data/vendor/cldr/common/transforms/Russian-Latin-BGN.xml +347 -0
  852. data/vendor/cldr/common/transforms/Serbian-Latin-BGN.xml +136 -0
  853. data/vendor/cldr/common/transforms/Simplified-Traditional.xml +3576 -0
  854. data/vendor/cldr/common/transforms/Syriac-Latin.xml +59 -0
  855. data/vendor/cldr/common/transforms/Tamil-Bengali.xml +14 -0
  856. data/vendor/cldr/common/transforms/Tamil-Devanagari.xml +14 -0
  857. data/vendor/cldr/common/transforms/Tamil-Gujarati.xml +14 -0
  858. data/vendor/cldr/common/transforms/Tamil-Gurmukhi.xml +14 -0
  859. data/vendor/cldr/common/transforms/Tamil-InterIndic.xml +77 -0
  860. data/vendor/cldr/common/transforms/Tamil-Kannada.xml +14 -0
  861. data/vendor/cldr/common/transforms/Tamil-Latin.xml +14 -0
  862. data/vendor/cldr/common/transforms/Tamil-Malayalam.xml +14 -0
  863. data/vendor/cldr/common/transforms/Tamil-Oriya.xml +14 -0
  864. data/vendor/cldr/common/transforms/Tamil-Telugu.xml +14 -0
  865. data/vendor/cldr/common/transforms/Telugu-Bengali.xml +14 -0
  866. data/vendor/cldr/common/transforms/Telugu-Devanagari.xml +14 -0
  867. data/vendor/cldr/common/transforms/Telugu-Gujarati.xml +14 -0
  868. data/vendor/cldr/common/transforms/Telugu-Gurmukhi.xml +14 -0
  869. data/vendor/cldr/common/transforms/Telugu-InterIndic.xml +94 -0
  870. data/vendor/cldr/common/transforms/Telugu-Kannada.xml +14 -0
  871. data/vendor/cldr/common/transforms/Telugu-Latin.xml +14 -0
  872. data/vendor/cldr/common/transforms/Telugu-Malayalam.xml +14 -0
  873. data/vendor/cldr/common/transforms/Telugu-Oriya.xml +14 -0
  874. data/vendor/cldr/common/transforms/Telugu-Tamil.xml +14 -0
  875. data/vendor/cldr/common/transforms/Thaana-Latin.xml +440 -0
  876. data/vendor/cldr/common/transforms/Thai-Latin.xml +16 -0
  877. data/vendor/cldr/common/transforms/Thai-ThaiLogical.xml +23 -0
  878. data/vendor/cldr/common/transforms/Thai-ThaiSemi.xml +13 -0
  879. data/vendor/cldr/common/transforms/ThaiLogical-Latin.xml +153 -0
  880. data/vendor/cldr/common/transforms/Turkmen-Latin-BGN.xml +334 -0
  881. data/vendor/cldr/common/transforms/Ukrainian-Latin-BGN.xml +316 -0
  882. data/vendor/cldr/common/transforms/Uzbek-Latin-BGN.xml +290 -0
  883. metadata +906 -88
  884. data/test/cases/backend/cascade_test.rb +0 -66
  885. data/test/cases/backend/fallbacks_test.rb +0 -57
@@ -51,6 +51,29 @@ The new i18n gem can be loaded from vendor/plugins like this:
51
51
 
52
52
  Then you can `reload_i18n!` inside an i18n initializer.
53
53
 
54
+ h2. Tests
55
+
56
+ You can run tests both with
57
+
58
+ * `rake test` or just `rake`
59
+ * run any test file directly, e.g. `ruby test/api/simple_test.rb`
60
+ * run all tests with `ruby test/all.rb`
61
+
62
+ The structure of the test suite is a bit unusual as it uses modules to reuse
63
+ particular tests in different test cases.
64
+
65
+ The reason for this is that we need to enforce the I18n API across various
66
+ combinations of extensions. E.g. the Simple backend alone needs to support
67
+ the same API as any combination of feature and/or optimization modules included
68
+ to the Simple backend. We test this by reusing the same API defition (implemented
69
+ as test methods) in test cases with different setups.
70
+
71
+ You can find the test cases that enforce the API in test/api. And you can find
72
+ the API definition test methods in test/api/tests.
73
+
74
+ All other test cases (e.g. as defined in test/backend, test/core\_ext) etc.
75
+ follow the usual test setup and should be easy to grok.
76
+
54
77
  h2. Authors
55
78
 
56
79
  * "Sven Fuchs":http://www.artweb-design.de
@@ -78,4 +101,4 @@ h2. Contributors
78
101
 
79
102
  h2. License
80
103
 
81
- MIT License. See the included MIT-LICENCE file.
104
+ MIT License. See the included MIT-LICENSE file.
data/Rakefile CHANGED
@@ -1,8 +1,12 @@
1
+ require 'rake/testtask'
2
+
1
3
  task :default => [:test]
2
4
 
3
- task :test do
4
- ruby "test/all.rb"
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.pattern = "#{File.dirname(__FILE__)}/test/all.rb"
7
+ t.verbose = true
5
8
  end
9
+ Rake::Task['test'].comment = "Run all i18n tests"
6
10
 
7
11
  require File.expand_path("lib/i18n/version", File.dirname(__FILE__))
8
12
 
@@ -219,12 +219,22 @@ module I18n
219
219
 
220
220
  # Localizes certain objects, such as dates and numbers to local formatting.
221
221
  def localize(object, options = {})
222
- locale = options[:locale] || I18n.locale
223
- format = options[:format] || :default
224
- backend.localize(locale, object, format)
222
+ locale = options.delete(:locale) || I18n.locale
223
+ format = options.delete(:format) || :default
224
+ backend.localize(locale, object, format, options)
225
225
  end
226
226
  alias :l :localize
227
227
 
228
+ # Merges the given locale, key and scope into a single array of keys.
229
+ # Splits keys that contain dots into multiple keys. Makes sure all
230
+ # keys are Symbols.
231
+ def normalize_keys(locale, key, scope, separator = nil)
232
+ keys = [locale] + Array(scope) + Array(key)
233
+ keys = keys.map { |k| k.to_s.split(separator || I18n.default_separator) }
234
+ keys = keys.flatten - ['']
235
+ keys.map { |k| k.to_sym }
236
+ end
237
+
228
238
  # making these private until Ruby 1.9.2 can send to protected methods again
229
239
  # see http://redmine.ruby-lang.org/repositories/revision/ruby-19?rev=24280
230
240
  private
@@ -263,15 +273,5 @@ module I18n
263
273
  @@exception_handler.call(exception, locale, key, options)
264
274
  end
265
275
  end
266
-
267
- # Merges the given locale, key and scope into a single array of keys.
268
- # Splits keys that contain dots into multiple keys. Makes sure all
269
- # keys are Symbols.
270
- def normalize_translation_keys(locale, key, scope, separator = nil)
271
- keys = [locale] + Array(scope) + Array(key)
272
- keys = keys.map { |k| k.to_s.split(separator || I18n.default_separator) }
273
- keys = keys.flatten - ['']
274
- keys.map { |k| k.to_sym }
275
- end
276
276
  end
277
277
  end
@@ -5,10 +5,12 @@ module I18n
5
5
  autoload :Cache, 'i18n/backend/cache'
6
6
  autoload :Cascade, 'i18n/backend/cascade'
7
7
  autoload :Chain, 'i18n/backend/chain'
8
+ autoload :Cldr, 'i18n/backend/cldr'
8
9
  autoload :Fallbacks, 'i18n/backend/fallbacks'
9
10
  autoload :Fast, 'i18n/backend/fast'
10
11
  autoload :Gettext, 'i18n/backend/gettext'
11
12
  autoload :Helpers, 'i18n/backend/helpers'
13
+ autoload :Links, 'i18n/backend/links'
12
14
  autoload :InterpolationCompiler, 'i18n/backend/interpolation_compiler'
13
15
  autoload :Metadata, 'i18n/backend/metadata'
14
16
  autoload :Pluralization, 'i18n/backend/pluralization'
@@ -1,13 +1,6 @@
1
1
  require 'i18n/backend/base'
2
2
  require 'i18n/backend/active_record/translation'
3
3
 
4
- #
5
- # This backend reads translations from a Translations table in environment database. Note that the database
6
- # will not automatically be prepopulated with missing keys. You can achieve this effect with the ActiveRecordMissing backend,
7
- # as the following example shows:
8
- #
9
- # I18n.backend = I18n::Backend::Chain.new(I18n::Backend::ActiveRecord.new, I18.backend, I18n::Backend::ActiveRecordMissing.new)
10
- #
11
4
  module I18n
12
5
  module Backend
13
6
  class ActiveRecord
@@ -15,16 +8,17 @@ module I18n
15
8
  autoload :StoreProcs, 'i18n/backend/active_record/store_procs'
16
9
  autoload :Translation, 'i18n/backend/active_record/translation'
17
10
 
18
- include Base
11
+ include Base, Links
19
12
 
20
13
  def reload!
21
14
  end
22
15
 
23
16
  def store_translations(locale, data, options = {})
24
17
  separator = options[:separator] || I18n.default_separator
25
- wind_keys(data, separator).each do |key, v|
18
+ wind_keys(data, separator).each do |key, value|
19
+ store_link(locale, key, value) if value.is_a?(Symbol)
26
20
  Translation.locale(locale).lookup(expand_keys(key, separator), separator).delete_all
27
- Translation.create(:locale => locale.to_s, :key => key.to_s, :value => v)
21
+ Translation.create(:locale => locale.to_s, :key => key.to_s, :value => value)
28
22
  end
29
23
  end
30
24
 
@@ -38,13 +32,15 @@ module I18n
38
32
 
39
33
  protected
40
34
 
41
- def lookup(locale, key, scope = [], separator = nil)
35
+ def lookup(locale, key, scope = [], options = {})
42
36
  return unless key
43
37
 
44
- separator ||= I18n.default_separator
45
- key = (Array(scope) + Array(key)).join(separator)
38
+ separator = options[:separator] || I18n.default_separator
46
39
 
40
+ key = resolve_link(locale, key)
41
+ key = (Array(scope) + Array(key)).join(separator)
47
42
  result = Translation.locale(locale).lookup(key, separator).all
43
+
48
44
  if result.empty?
49
45
  return nil
50
46
  elsif result.first.key == key
@@ -37,7 +37,7 @@ module I18n
37
37
  count, scope, default, separator = options.values_at(:count, *Base::RESERVED_KEYS)
38
38
  separator ||= I18n.default_separator
39
39
 
40
- keys = I18n.send(:normalize_translation_keys, locale, key, scope, separator)[1..-1]
40
+ keys = I18n.normalize_keys(locale, key, scope, separator)[1..-1]
41
41
  key = keys.join(separator || I18n.default_separator)
42
42
 
43
43
  unless ActiveRecord::Translation.locale(locale).lookup(key, separator).exists?
@@ -23,11 +23,11 @@ module I18n
23
23
  module StoreProcs
24
24
  def value=(v)
25
25
  case v
26
- when Proc
27
- write_attribute(:value, v.to_ruby)
28
- write_attribute(:is_proc, true)
29
- else
30
- write_attribute(:value, v)
26
+ when Proc
27
+ write_attribute(:value, v.to_ruby)
28
+ write_attribute(:is_proc, true)
29
+ else
30
+ write_attribute(:value, v)
31
31
  end
32
32
  end
33
33
 
@@ -56,9 +56,11 @@ module I18n
56
56
  }
57
57
 
58
58
  named_scope :lookup, lambda { |keys, *separator|
59
- keys = Array(keys).map! { |key| key.to_s }
60
- separator = separator.first || I18n.default_separator
61
- { :conditions => ["`key` IN (?) OR `key` LIKE '#{keys.last}#{separator}%'", keys] }
59
+ column_name = connection.quote_column_name('key')
60
+ keys = Array(keys).map! { |key| key.to_s }
61
+ separator = separator.first || I18n.default_separator
62
+ namespace = "#{keys.last}#{separator}%"
63
+ { :conditions => ["#{column_name} IN (?) OR #{column_name} LIKE ?", keys, namespace] }
62
64
  }
63
65
 
64
66
  def self.available_locales
@@ -71,7 +73,7 @@ module I18n
71
73
 
72
74
  def value
73
75
  if is_proc
74
- Kernel.eval read_attribute(:value)
76
+ Kernel.eval(read_attribute(:value))
75
77
  else
76
78
  value = read_attribute(:value)
77
79
  value == 'f' ? false : value
@@ -1,13 +1,14 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  require 'yaml'
4
+ require 'i18n/core_ext/hash/except'
4
5
 
5
6
  module I18n
6
7
  module Backend
7
8
  module Base
8
9
  include I18n::Backend::Helpers
9
10
 
10
- RESERVED_KEYS = [:scope, :default, :separator]
11
+ RESERVED_KEYS = [:scope, :default, :separator, :resolve]
11
12
  INTERPOLATION_SYNTAX_PATTERN = /(\\)?\{\{([^\}]+)\}\}/
12
13
 
13
14
  # Accepts a list of paths to translation files. Loads translations from
@@ -22,7 +23,7 @@ module I18n
22
23
  # translations will be overwritten by new ones only at the deepest
23
24
  # level of the hash.
24
25
  def store_translations(locale, data, options = {})
25
- merge_translations(locale, data)
26
+ merge_translations(locale, data, options)
26
27
  end
27
28
 
28
29
  def translate(locale, key, options = {})
@@ -33,10 +34,10 @@ module I18n
33
34
  entry = resolve(locale, key, lookup(locale, key), options)
34
35
  raise(I18n::MissingTranslationData.new(locale, key, options)) if entry.nil?
35
36
  else
36
- count, scope, default, separator = options.values_at(:count, :scope, :default, :separator)
37
+ count, scope, default = options.values_at(:count, :scope, :default)
37
38
  values = options.reject { |name, value| RESERVED_KEYS.include?(name) }
38
39
 
39
- entry = lookup(locale, key, scope, separator)
40
+ entry = lookup(locale, key, scope, options)
40
41
  entry = entry.nil? && default ? default(locale, key, default, options) : resolve(locale, key, entry, options)
41
42
  raise(I18n::MissingTranslationData.new(locale, key, options)) if entry.nil?
42
43
 
@@ -56,8 +57,7 @@ module I18n
56
57
  if Symbol === format
57
58
  key = format
58
59
  type = object.respond_to?(:sec) ? 'time' : 'date'
59
- format = lookup(locale, :"#{type}.formats.#{key}")
60
- raise(MissingTranslationData.new(locale, key, options)) if format.nil?
60
+ format = I18n.t(:"#{type}.formats.#{key}", :locale => locale, :raise => true)
61
61
  end
62
62
 
63
63
  format = resolve(locale, object, format, options)
@@ -108,15 +108,15 @@ module I18n
108
108
  # nested translations hash. Splits keys or scopes containing dots
109
109
  # into multiple keys, i.e. <tt>currency.format</tt> is regarded the same as
110
110
  # <tt>%w(currency format)</tt>.
111
- def lookup(locale, key, scope = [], separator = nil)
111
+ def lookup(locale, key, scope = [], options = {})
112
112
  return unless key
113
113
  init_translations unless initialized?
114
- keys = I18n.send(:normalize_translation_keys, locale, key, scope, separator)
114
+ keys = I18n.normalize_keys(locale, key, scope, options[:separator])
115
115
  keys.inject(translations) do |result, key|
116
116
  key = key.to_sym
117
117
  return nil unless result.is_a?(Hash) && result.has_key?(key)
118
118
  result = result[key]
119
- result = resolve(locale, key, result, :separator => separator) if result.is_a?(Symbol)
119
+ result = resolve(locale, key, result, options) if result.is_a?(Symbol)
120
120
  result
121
121
  end
122
122
  end
@@ -142,6 +142,7 @@ module I18n
142
142
  # given options. If it is a Proc then it will be evaluated. All other
143
143
  # subjects will be returned directly.
144
144
  def resolve(locale, object, subject, options = nil)
145
+ return subject if options[:resolve] == false
145
146
  case subject
146
147
  when Symbol
147
148
  I18n.translate(subject, (options || {}).merge(:locale => locale, :raise => true))
@@ -176,7 +177,7 @@ module I18n
176
177
  # the <tt>{{...}}</tt> key in a string (once for the string and once for the
177
178
  # interpolation).
178
179
  def interpolate(locale, string, values = {})
179
- return string unless string.is_a?(String) && !values.empty?
180
+ return string unless string.is_a?(::String) && !values.empty?
180
181
 
181
182
  preserve_encoding(string) do
182
183
  s = string.gsub(INTERPOLATION_SYNTAX_PATTERN) do
@@ -192,7 +193,7 @@ module I18n
192
193
 
193
194
  values.each do |key, value|
194
195
  value = value.call(values) if interpolate_lambda?(value, s, key)
195
- value = value.to_s unless value.is_a?(String)
196
+ value = value.to_s unless value.is_a?(::String)
196
197
  values[key] = value
197
198
  end
198
199
 
@@ -227,7 +228,7 @@ module I18n
227
228
  def load_file(filename)
228
229
  type = File.extname(filename).tr('.', '').downcase
229
230
  raise UnknownFileType.new(type, filename) unless respond_to?(:"load_#{type}")
230
- data = send :"load_#{type}", filename # TODO raise a meaningful exception if this does not yield a Hash
231
+ data = send(:"load_#{type}", filename) # TODO raise a meaningful exception if this does not yield a Hash
231
232
  data.each { |locale, d| merge_translations(locale, d) }
232
233
  end
233
234
 
@@ -245,13 +246,19 @@ module I18n
245
246
 
246
247
  # Deep merges the given translations hash with the existing translations
247
248
  # for the given locale
248
- def merge_translations(locale, data)
249
+ def merge_translations(locale, data, options = {})
249
250
  locale = locale.to_sym
250
251
  translations[locale] ||= {}
252
+ separator = options[:separator] || I18n.default_separator
253
+ data = unwind_keys(data, separator)
251
254
  data = deep_symbolize_keys(data)
252
255
 
253
256
  # deep_merge by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
254
- merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
257
+ merger = proc do |key, v1, v2|
258
+ # TODO should probably be:
259
+ # raise TypeError.new("can't merge #{v1.inspect} and #{v2.inspect}") unless Hash === v1 && Hash === v2
260
+ Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : (v2 || v1)
261
+ end
255
262
  translations[locale].merge!(data, &merger)
256
263
  end
257
264
  end
@@ -55,6 +55,7 @@ module I18n
55
55
  def fetch(*args, &block)
56
56
  result = I18n.cache_store.fetch(cache_key(*args), &block)
57
57
  raise result if result.is_a?(Exception)
58
+ result = result.dup if result.frozen?
58
59
  result
59
60
  rescue MissingTranslationData => exception
60
61
  I18n.cache_store.write(cache_key(*args), exception)
@@ -2,7 +2,7 @@
2
2
 
3
3
  # EXPERIMENTAL
4
4
  #
5
- # The cascade module adds the ability to do cascading lookups to backends that
5
+ # The Cascade module adds the ability to do cascading lookups to backends that
6
6
  # are compatible to the Simple backend.
7
7
  #
8
8
  # By cascading lookups we mean that for any key that can not be found the
@@ -15,7 +15,15 @@
15
15
  # then the remaining scope segment :foo will be omitted, too, and again the
16
16
  # key :baz will be looked up (now with no scope).
17
17
  #
18
- # Defaults will only kick in after the cascading lookups haven't succeeded.
18
+ # To enable a cascading lookup one passes the :cascade option:
19
+ #
20
+ # I18n.t(:'foo.bar.baz', :cascade => true)
21
+ #
22
+ # This will return the first translation found for :"foo.bar.baz", :"foo.baz"
23
+ # or :baz in this order.
24
+ #
25
+ # The cascading lookup takes precedence over resolving any given defaults.
26
+ # I.e. defaults will kick in after the cascading lookups haven't succeeded.
19
27
  #
20
28
  # This behavior is useful for libraries like ActiveRecord validations where
21
29
  # the library wants to give users a bunch of more or less fine-grained options
@@ -25,19 +33,25 @@
25
33
  # http://github.com/clemens/i18n-cascading-backend
26
34
 
27
35
  module I18n
28
- @@fallbacks = nil
29
-
30
36
  module Backend
31
37
  module Cascade
32
- def lookup(locale, key, scope = [], separator = nil)
38
+ def lookup(locale, key, scope = [], options = {})
33
39
  return unless key
34
- locale, *scope = I18n.send(:normalize_translation_keys, locale, key, scope, separator)
35
- key = scope.pop
40
+ return super unless cascade = options[:cascade]
41
+
42
+ separator = options[:separator] || I18n.default_separator
43
+ skip_root = cascade.has_key?(:skip_root) ? cascade[:skip_root] : true
44
+ step = cascade[:step]
45
+
46
+ keys = I18n.normalize_keys(nil, key, nil, separator)
47
+ offset = options[:cascade][:offset] || keys.length
48
+ scope = I18n.normalize_keys(nil, nil, scope, separator) + keys
49
+ key = scope.slice!(-offset, offset).join(separator)
36
50
 
37
51
  begin
38
52
  result = super
39
53
  return result unless result.nil?
40
- end while scope.pop
54
+ end while scope.slice!(-step, step) && (!scope.empty? || !skip_root)
41
55
  end
42
56
  end
43
57
  end
@@ -62,7 +62,8 @@ module I18n
62
62
  result = backend.localize(locale, object, format, options) and return result
63
63
  rescue MissingTranslationData
64
64
  end
65
- end and nil
65
+ end
66
+ raise(I18n::MissingTranslationData.new(locale, format, options))
66
67
  end
67
68
 
68
69
  protected
@@ -0,0 +1,100 @@
1
+ # encoding: utf-8
2
+ require 'cldr'
3
+
4
+ module I18n
5
+ module Backend
6
+ module Cldr
7
+ include ::Cldr::Format
8
+
9
+ def localize(locale, object, format = :default, options = {})
10
+ options[:as] ||= detect_type(object, options)
11
+ send(:"format_#{options[:as]}", locale, object, format, options)
12
+ end
13
+
14
+ def format_decimal(locale, object, format = :default, options = {})
15
+ formatter(locale, :decimal, format).apply(object, options)
16
+ end
17
+
18
+ def format_integer(locale, object, format = :default, options = {})
19
+ format_object(number, options.merge(:precision => 0))
20
+ end
21
+
22
+ def format_currency(locale, object, format = :default, options = {})
23
+ options.merge!(:currency => lookup_currency(locale, options[:currency], object)) if options[:currency].is_a?(Symbol)
24
+ formatter(locale, :currency, format).apply(object, options)
25
+ end
26
+
27
+ def format_percent(locale, object, format = :default, options = {})
28
+ formatter(locale, :percent, format).apply(object, options)
29
+ end
30
+
31
+ def format_date(locale, object, format = :default, options = {})
32
+ formatter(locale, :date, format).apply(object, options)
33
+ end
34
+
35
+ def format_time(locale, object, format = :default, options = {})
36
+ formatter(locale, :time, format).apply(object, options)
37
+ end
38
+
39
+ def format_datetime(locale, object, format = :default, options = {})
40
+ key = :"calendars.gregorian.formats.datetime.#{format}.pattern"
41
+ date = I18n.l(object, :format => options[:date_format] || format, :locale => locale, :as => :date)
42
+ time = I18n.l(object, :format => options[:time_format] || format, :locale => locale, :as => :time)
43
+ I18n.t(key, :date => date, :time => time, :locale => locale, :raise => true)
44
+ end
45
+
46
+ protected
47
+
48
+ def detect_type(object, options)
49
+ options.has_key?(:currency) ? :currency : case object
50
+ when ::Numeric
51
+ :decimal
52
+ when ::Date, ::DateTime, ::Time
53
+ object.class.name.downcase.to_sym
54
+ else
55
+ raise_unspecified_format_type!
56
+ end
57
+ end
58
+
59
+ def formatter(locale, type, format)
60
+ (@formatters ||= {})[:"#{locale}.#{type}.#{format}"] ||= begin
61
+ format = lookup_format(locale, type, format)
62
+ data = lookup_format_data(locale, type)
63
+ ::Cldr::Format.const_get(type.to_s.camelize).new(format, data)
64
+ end
65
+ end
66
+
67
+ def lookup_format(locale, type, format)
68
+ key = case type
69
+ when :date, :time, :datetime
70
+ :"calendars.gregorian.formats.#{type}.#{format}.pattern"
71
+ else
72
+ :"numbers.formats.#{type}.patterns.#{format || :default}"
73
+ end
74
+ I18n.t(key, :locale => locale, :raise => true)
75
+ end
76
+
77
+ def lookup_format_data(locale, type)
78
+ key = case type
79
+ when :date, :time, :datetime
80
+ :'calendars.gregorian'
81
+ else
82
+ :'numbers.symbols'
83
+ end
84
+ I18n.t(key, :locale => locale, :raise => true)
85
+ end
86
+
87
+ def lookup_currency(locale, currency, count)
88
+ I18n.t(:"currencies.#{currency}", :locale => locale, :count => count)
89
+ end
90
+
91
+ def raise_unspecified_format_type!
92
+ raise ArgumentError.new("You have to specify a format type, e.g. :as => :number.")
93
+ end
94
+
95
+ def raise_unspecified_currency!
96
+ raise ArgumentError.new("You have to specify a currency, e.g. :currency => 'EUR'.")
97
+ end
98
+ end
99
+ end
100
+ end