plurals.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. // @flow
  2. 'use strict'
  3. /*:: export type Rule = 'zero' | 'one' | 'two' | 'few' | 'many' | 'other' */
  4. var zero = 'zero', one = 'one', two = 'two', few = 'few', many = 'many', other = 'other'
  5. var f = [
  6. function (s/*: string | number */)/*: Rule */ {
  7. var n = +s
  8. return n === 1 ? one
  9. : other
  10. },
  11. function (s/*: string | number */)/*: Rule */ {
  12. var n = +s
  13. return 0 <= n && n <= 1 ? one
  14. : other
  15. },
  16. function (s/*: string | number */)/*: Rule */ {
  17. var i = Math.floor(Math.abs(+s))
  18. var n = +s
  19. return i === 0 || n === 1 ? one
  20. : other
  21. },
  22. function (s/*: string | number */)/*: Rule */ {
  23. var n = +s
  24. return n === 0 ? zero
  25. : n === 1 ? one
  26. : n === 2 ? two
  27. : 3 <= n % 100 && n % 100 <= 10 ? few
  28. : 11 <= n % 100 && n % 100 <= 99 ? many
  29. : other
  30. },
  31. function (s/*: string | number */)/*: Rule */ {
  32. var i = Math.floor(Math.abs(+s))
  33. var v = (s + '.').split('.')[1].length
  34. return i === 1 && v === 0 ? one
  35. : other
  36. },
  37. function (s/*: string | number */)/*: Rule */ {
  38. var n = +s
  39. return n % 10 === 1 && n % 100 !== 11 ? one
  40. : (2 <= n % 10 && n % 10 <= 4) && (n % 100 < 12 || 14 < n % 100) ? few
  41. : n % 10 === 0 || (5 <= n % 10 && n % 10 <= 9) || (11 <= n % 100 && n % 100 <= 14) ? many
  42. : other
  43. },
  44. function (s/*: string | number */)/*: Rule */ {
  45. var n = +s
  46. return n % 10 === 1 && (n % 100 !== 11 && n % 100 !== 71 && n % 100 !== 91) ? one
  47. : n % 10 === 2 && (n % 100 !== 12 && n % 100 !== 72 && n % 100 !== 92) ? two
  48. : ((3 <= n % 10 && n % 10 <= 4) || n % 10 === 9) && ((n % 100 < 10 || 19 < n % 100) && (n % 100 < 70 || 79 < n % 100) && (n % 100 < 90 || 99 < n % 100)) ? few
  49. : n !== 0 && n % 1000000 === 0 ? many
  50. : other
  51. },
  52. function (s/*: string | number */)/*: Rule */ {
  53. var i = Math.floor(Math.abs(+s))
  54. var v = (s + '.').split('.')[1].length
  55. var f = +(s + '.').split('.')[1]
  56. return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one
  57. : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) || (2 <= f % 10 && f % 10 <= 4) && (f % 100 < 12 || 14 < f % 100) ? few
  58. : other
  59. },
  60. function (s/*: string | number */)/*: Rule */ {
  61. var i = Math.floor(Math.abs(+s))
  62. var v = (s + '.').split('.')[1].length
  63. return i === 1 && v === 0 ? one
  64. : (2 <= i && i <= 4) && v === 0 ? few
  65. : v !== 0 ? many
  66. : other
  67. },
  68. function (s/*: string | number */)/*: Rule */ {
  69. var n = +s
  70. return n === 0 ? zero
  71. : n === 1 ? one
  72. : n === 2 ? two
  73. : n === 3 ? few
  74. : n === 6 ? many
  75. : other
  76. },
  77. function (s/*: string | number */)/*: Rule */ {
  78. var i = Math.floor(Math.abs(+s))
  79. var t = +('' + s).replace(/^[^.]*.?|0+$/g, '')
  80. var n = +s
  81. return n === 1 || t !== 0 && (i === 0 || i === 1) ? one
  82. : other
  83. },
  84. function (s/*: string | number */)/*: Rule */ {
  85. var i = Math.floor(Math.abs(+s))
  86. var v = (s + '.').split('.')[1].length
  87. var f = +(s + '.').split('.')[1]
  88. return v === 0 && i % 100 === 1 || f % 100 === 1 ? one
  89. : v === 0 && i % 100 === 2 || f % 100 === 2 ? two
  90. : v === 0 && (3 <= i % 100 && i % 100 <= 4) || (3 <= f % 100 && f % 100 <= 4) ? few
  91. : other
  92. },
  93. function (s/*: string | number */)/*: Rule */ {
  94. var i = Math.floor(Math.abs(+s))
  95. return i === 0 || i === 1 ? one
  96. : other
  97. },
  98. function (s/*: string | number */)/*: Rule */ {
  99. var i = Math.floor(Math.abs(+s))
  100. var v = (s + '.').split('.')[1].length
  101. var f = +(s + '.').split('.')[1]
  102. return v === 0 && (i === 1 || i === 2 || i === 3) || v === 0 && (i % 10 !== 4 && i % 10 !== 6 && i % 10 !== 9) || v !== 0 && (f % 10 !== 4 && f % 10 !== 6 && f % 10 !== 9) ? one
  103. : other
  104. },
  105. function (s/*: string | number */)/*: Rule */ {
  106. var n = +s
  107. return n === 1 ? one
  108. : n === 2 ? two
  109. : 3 <= n && n <= 6 ? few
  110. : 7 <= n && n <= 10 ? many
  111. : other
  112. },
  113. function (s/*: string | number */)/*: Rule */ {
  114. var n = +s
  115. return n === 1 || n === 11 ? one
  116. : n === 2 || n === 12 ? two
  117. : ((3 <= n && n <= 10) || (13 <= n && n <= 19)) ? few
  118. : other
  119. },
  120. function (s/*: string | number */)/*: Rule */ {
  121. var i = Math.floor(Math.abs(+s))
  122. var v = (s + '.').split('.')[1].length
  123. return v === 0 && i % 10 === 1 ? one
  124. : v === 0 && i % 10 === 2 ? two
  125. : v === 0 && (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? few
  126. : v !== 0 ? many
  127. : other
  128. },
  129. function (s/*: string | number */)/*: Rule */ {
  130. var i = Math.floor(Math.abs(+s))
  131. var v = (s + '.').split('.')[1].length
  132. var n = +s
  133. return i === 1 && v === 0 ? one
  134. : i === 2 && v === 0 ? two
  135. : v === 0 && (n < 0 || 10 < n) && n % 10 === 0 ? many
  136. : other
  137. },
  138. function (s/*: string | number */)/*: Rule */ {
  139. var i = Math.floor(Math.abs(+s))
  140. var t = +('' + s).replace(/^[^.]*.?|0+$/g, '')
  141. return t === 0 && i % 10 === 1 && i % 100 !== 11 || t !== 0 ? one
  142. : other
  143. },
  144. function (s/*: string | number */)/*: Rule */ {
  145. var n = +s
  146. return n === 1 ? one
  147. : n === 2 ? two
  148. : other
  149. },
  150. function (s/*: string | number */)/*: Rule */ {
  151. var n = +s
  152. return n === 0 ? zero
  153. : n === 1 ? one
  154. : other
  155. },
  156. function (s/*: string | number */)/*: Rule */ {
  157. var i = Math.floor(Math.abs(+s))
  158. var n = +s
  159. return n === 0 ? zero
  160. : (i === 0 || i === 1) && n !== 0 ? one
  161. : other
  162. },
  163. function (s/*: string | number */)/*: Rule */ {
  164. var f = +(s + '.').split('.')[1]
  165. var n = +s
  166. return n % 10 === 1 && (n % 100 < 11 || 19 < n % 100) ? one
  167. : (2 <= n % 10 && n % 10 <= 9) && (n % 100 < 11 || 19 < n % 100) ? few
  168. : f !== 0 ? many
  169. : other
  170. },
  171. function (s/*: string | number */)/*: Rule */ {
  172. var v = (s + '.').split('.')[1].length
  173. var f = +(s + '.').split('.')[1]
  174. var n = +s
  175. return n % 10 === 0 || (11 <= n % 100 && n % 100 <= 19) || v === 2 && (11 <= f % 100 && f % 100 <= 19) ? zero
  176. : n % 10 === 1 && n % 100 !== 11 || v === 2 && f % 10 === 1 && f % 100 !== 11 || v !== 2 && f % 10 === 1 ? one
  177. : other
  178. },
  179. function (s/*: string | number */)/*: Rule */ {
  180. var i = Math.floor(Math.abs(+s))
  181. var v = (s + '.').split('.')[1].length
  182. var f = +(s + '.').split('.')[1]
  183. return v === 0 && i % 10 === 1 && i % 100 !== 11 || f % 10 === 1 && f % 100 !== 11 ? one
  184. : other
  185. },
  186. function (s/*: string | number */)/*: Rule */ {
  187. var i = Math.floor(Math.abs(+s))
  188. var v = (s + '.').split('.')[1].length
  189. var n = +s
  190. return i === 1 && v === 0 ? one
  191. : v !== 0 || n === 0 || n !== 1 && (1 <= n % 100 && n % 100 <= 19) ? few
  192. : other
  193. },
  194. function (s/*: string | number */)/*: Rule */ {
  195. var n = +s
  196. return n === 1 ? one
  197. : n === 0 || (2 <= n % 100 && n % 100 <= 10) ? few
  198. : 11 <= n % 100 && n % 100 <= 19 ? many
  199. : other
  200. },
  201. function (s/*: string | number */)/*: Rule */ {
  202. var i = Math.floor(Math.abs(+s))
  203. var v = (s + '.').split('.')[1].length
  204. return i === 1 && v === 0 ? one
  205. : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few
  206. : v === 0 && i !== 1 && (0 <= i % 10 && i % 10 <= 1) || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (12 <= i % 100 && i % 100 <= 14) ? many
  207. : other
  208. },
  209. function (s/*: string | number */)/*: Rule */ {
  210. var i = Math.floor(Math.abs(+s))
  211. return 0 <= i && i <= 1 ? one
  212. : other
  213. },
  214. function (s/*: string | number */)/*: Rule */ {
  215. var i = Math.floor(Math.abs(+s))
  216. var v = (s + '.').split('.')[1].length
  217. return v === 0 && i % 10 === 1 && i % 100 !== 11 ? one
  218. : v === 0 && (2 <= i % 10 && i % 10 <= 4) && (i % 100 < 12 || 14 < i % 100) ? few
  219. : v === 0 && i % 10 === 0 || v === 0 && (5 <= i % 10 && i % 10 <= 9) || v === 0 && (11 <= i % 100 && i % 100 <= 14) ? many
  220. : other
  221. },
  222. function (s/*: string | number */)/*: Rule */ {
  223. var i = Math.floor(Math.abs(+s))
  224. var n = +s
  225. return i === 0 || n === 1 ? one
  226. : 2 <= n && n <= 10 ? few
  227. : other
  228. },
  229. function (s/*: string | number */)/*: Rule */ {
  230. var i = Math.floor(Math.abs(+s))
  231. var f = +(s + '.').split('.')[1]
  232. var n = +s
  233. return (n === 0 || n === 1) || i === 0 && f === 1 ? one
  234. : other
  235. },
  236. function (s/*: string | number */)/*: Rule */ {
  237. var i = Math.floor(Math.abs(+s))
  238. var v = (s + '.').split('.')[1].length
  239. return v === 0 && i % 100 === 1 ? one
  240. : v === 0 && i % 100 === 2 ? two
  241. : v === 0 && (3 <= i % 100 && i % 100 <= 4) || v !== 0 ? few
  242. : other
  243. },
  244. function (s/*: string | number */)/*: Rule */ {
  245. var n = +s
  246. return (0 <= n && n <= 1) || (11 <= n && n <= 99) ? one
  247. : other
  248. },
  249. function (s/*: string | number */)/*: Rule */ {
  250. var n = +s
  251. return n === 1 || n === 5 || n === 7 || n === 8 || n === 9 || n === 10 ? one
  252. : n === 2 || n === 3 ? two
  253. : n === 4 ? few
  254. : n === 6 ? many
  255. : other
  256. },
  257. function (s/*: string | number */)/*: Rule */ {
  258. var i = Math.floor(Math.abs(+s))
  259. return (i % 10 === 1 || i % 10 === 2 || i % 10 === 5 || i % 10 === 7 || i % 10 === 8) || (i % 100 === 20 || i % 100 === 50 || i % 100 === 70 || i % 100 === 80) ? one
  260. : (i % 10 === 3 || i % 10 === 4) || (i % 1000 === 100 || i % 1000 === 200 || i % 1000 === 300 || i % 1000 === 400 || i % 1000 === 500 || i % 1000 === 600 || i % 1000 === 700 || i % 1000 === 800 || i % 1000 === 900) ? few
  261. : i === 0 || i % 10 === 6 || (i % 100 === 40 || i % 100 === 60 || i % 100 === 90) ? many
  262. : other
  263. },
  264. function (s/*: string | number */)/*: Rule */ {
  265. var n = +s
  266. return (n % 10 === 2 || n % 10 === 3) && (n % 100 !== 12 && n % 100 !== 13) ? few
  267. : other
  268. },
  269. function (s/*: string | number */)/*: Rule */ {
  270. var n = +s
  271. return n === 1 || n === 3 ? one
  272. : n === 2 ? two
  273. : n === 4 ? few
  274. : other
  275. },
  276. function (s/*: string | number */)/*: Rule */ {
  277. var n = +s
  278. return n === 0 || n === 7 || n === 8 || n === 9 ? zero
  279. : n === 1 ? one
  280. : n === 2 ? two
  281. : n === 3 || n === 4 ? few
  282. : n === 5 || n === 6 ? many
  283. : other
  284. },
  285. function (s/*: string | number */)/*: Rule */ {
  286. var n = +s
  287. return n % 10 === 1 && n % 100 !== 11 ? one
  288. : n % 10 === 2 && n % 100 !== 12 ? two
  289. : n % 10 === 3 && n % 100 !== 13 ? few
  290. : other
  291. },
  292. function (s/*: string | number */)/*: Rule */ {
  293. var n = +s
  294. return n === 1 || n === 11 ? one
  295. : n === 2 || n === 12 ? two
  296. : n === 3 || n === 13 ? few
  297. : other
  298. },
  299. function (s/*: string | number */)/*: Rule */ {
  300. var n = +s
  301. return n === 1 ? one
  302. : n === 2 || n === 3 ? two
  303. : n === 4 ? few
  304. : n === 6 ? many
  305. : other
  306. },
  307. function (s/*: string | number */)/*: Rule */ {
  308. var n = +s
  309. return n === 1 || n === 5 ? one
  310. : other
  311. },
  312. function (s/*: string | number */)/*: Rule */ {
  313. var n = +s
  314. return n === 11 || n === 8 || n === 80 || n === 800 ? many
  315. : other
  316. },
  317. function (s/*: string | number */)/*: Rule */ {
  318. var i = Math.floor(Math.abs(+s))
  319. return i === 1 ? one
  320. : i === 0 || ((2 <= i % 100 && i % 100 <= 20) || i % 100 === 40 || i % 100 === 60 || i % 100 === 80) ? many
  321. : other
  322. },
  323. function (s/*: string | number */)/*: Rule */ {
  324. var n = +s
  325. return n % 10 === 6 || n % 10 === 9 || n % 10 === 0 && n !== 0 ? many
  326. : other
  327. },
  328. function (s/*: string | number */)/*: Rule */ {
  329. var i = Math.floor(Math.abs(+s))
  330. return i % 10 === 1 && i % 100 !== 11 ? one
  331. : i % 10 === 2 && i % 100 !== 12 ? two
  332. : (i % 10 === 7 || i % 10 === 8) && (i % 100 !== 17 && i % 100 !== 18) ? many
  333. : other
  334. },
  335. function (s/*: string | number */)/*: Rule */ {
  336. var n = +s
  337. return n === 1 ? one
  338. : n === 2 || n === 3 ? two
  339. : n === 4 ? few
  340. : other
  341. },
  342. function (s/*: string | number */)/*: Rule */ {
  343. var n = +s
  344. return 1 <= n && n <= 4 ? one
  345. : other
  346. },
  347. function (s/*: string | number */)/*: Rule */ {
  348. var n = +s
  349. return (n === 1 || n === 5 || (7 <= n && n <= 9)) ? one
  350. : n === 2 || n === 3 ? two
  351. : n === 4 ? few
  352. : n === 6 ? many
  353. : other
  354. },
  355. function (s/*: string | number */)/*: Rule */ {
  356. var n = +s
  357. return n === 1 ? one
  358. : n % 10 === 4 && n % 100 !== 14 ? many
  359. : other
  360. },
  361. function (s/*: string | number */)/*: Rule */ {
  362. var n = +s
  363. return (n % 10 === 1 || n % 10 === 2) && (n % 100 !== 11 && n % 100 !== 12) ? one
  364. : other
  365. },
  366. function (s/*: string | number */)/*: Rule */ {
  367. var n = +s
  368. return (n % 10 === 6 || n % 10 === 9) || n === 10 ? few
  369. : other
  370. },
  371. function (s/*: string | number */)/*: Rule */ {
  372. var n = +s
  373. return n % 10 === 3 && n % 100 !== 13 ? few
  374. : other
  375. }
  376. ]
  377. module.exports = {
  378. af: { cardinal: f[0] },
  379. ak: { cardinal: f[1] },
  380. am: { cardinal: f[2] },
  381. ar: { cardinal: f[3] },
  382. ars: { cardinal: f[3] },
  383. as: { cardinal: f[2], ordinal: f[34] },
  384. asa: { cardinal: f[0] },
  385. ast: { cardinal: f[4] },
  386. az: { cardinal: f[0], ordinal: f[35] },
  387. be: { cardinal: f[5], ordinal: f[36] },
  388. bem: { cardinal: f[0] },
  389. bez: { cardinal: f[0] },
  390. bg: { cardinal: f[0] },
  391. bh: { cardinal: f[1] },
  392. bn: { cardinal: f[2], ordinal: f[34] },
  393. br: { cardinal: f[6] },
  394. brx: { cardinal: f[0] },
  395. bs: { cardinal: f[7] },
  396. ca: { cardinal: f[4], ordinal: f[37] },
  397. ce: { cardinal: f[0] },
  398. cgg: { cardinal: f[0] },
  399. chr: { cardinal: f[0] },
  400. ckb: { cardinal: f[0] },
  401. cs: { cardinal: f[8] },
  402. cy: { cardinal: f[9], ordinal: f[38] },
  403. da: { cardinal: f[10] },
  404. de: { cardinal: f[4] },
  405. dsb: { cardinal: f[11] },
  406. dv: { cardinal: f[0] },
  407. ee: { cardinal: f[0] },
  408. el: { cardinal: f[0] },
  409. en: { cardinal: f[4], ordinal: f[39] },
  410. eo: { cardinal: f[0] },
  411. es: { cardinal: f[0] },
  412. et: { cardinal: f[4] },
  413. eu: { cardinal: f[0] },
  414. fa: { cardinal: f[2] },
  415. ff: { cardinal: f[12] },
  416. fi: { cardinal: f[4] },
  417. fil: { cardinal: f[13], ordinal: f[0] },
  418. fo: { cardinal: f[0] },
  419. fr: { cardinal: f[12], ordinal: f[0] },
  420. fur: { cardinal: f[0] },
  421. fy: { cardinal: f[4] },
  422. ga: { cardinal: f[14], ordinal: f[0] },
  423. gd: { cardinal: f[15], ordinal: f[40] },
  424. gl: { cardinal: f[4] },
  425. gsw: { cardinal: f[0] },
  426. gu: { cardinal: f[2], ordinal: f[41] },
  427. guw: { cardinal: f[1] },
  428. gv: { cardinal: f[16] },
  429. ha: { cardinal: f[0] },
  430. haw: { cardinal: f[0] },
  431. he: { cardinal: f[17] },
  432. hi: { cardinal: f[2], ordinal: f[41] },
  433. hr: { cardinal: f[7] },
  434. hsb: { cardinal: f[11] },
  435. hu: { cardinal: f[0], ordinal: f[42] },
  436. hy: { cardinal: f[12], ordinal: f[0] },
  437. ia: { cardinal: f[4] },
  438. io: { cardinal: f[4] },
  439. is: { cardinal: f[18] },
  440. it: { cardinal: f[4], ordinal: f[43] },
  441. iu: { cardinal: f[19] },
  442. iw: { cardinal: f[17] },
  443. jgo: { cardinal: f[0] },
  444. ji: { cardinal: f[4] },
  445. jmc: { cardinal: f[0] },
  446. ka: { cardinal: f[0], ordinal: f[44] },
  447. kab: { cardinal: f[12] },
  448. kaj: { cardinal: f[0] },
  449. kcg: { cardinal: f[0] },
  450. kk: { cardinal: f[0], ordinal: f[45] },
  451. kkj: { cardinal: f[0] },
  452. kl: { cardinal: f[0] },
  453. kn: { cardinal: f[2] },
  454. ks: { cardinal: f[0] },
  455. ksb: { cardinal: f[0] },
  456. ksh: { cardinal: f[20] },
  457. ku: { cardinal: f[0] },
  458. kw: { cardinal: f[19] },
  459. ky: { cardinal: f[0] },
  460. lag: { cardinal: f[21] },
  461. lb: { cardinal: f[0] },
  462. lg: { cardinal: f[0] },
  463. ln: { cardinal: f[1] },
  464. lt: { cardinal: f[22] },
  465. lv: { cardinal: f[23] },
  466. mas: { cardinal: f[0] },
  467. mg: { cardinal: f[1] },
  468. mgo: { cardinal: f[0] },
  469. mk: { cardinal: f[24], ordinal: f[46] },
  470. ml: { cardinal: f[0] },
  471. mn: { cardinal: f[0] },
  472. mo: { cardinal: f[25], ordinal: f[0] },
  473. mr: { cardinal: f[2], ordinal: f[47] },
  474. mt: { cardinal: f[26] },
  475. nah: { cardinal: f[0] },
  476. naq: { cardinal: f[19] },
  477. nb: { cardinal: f[0] },
  478. nd: { cardinal: f[0] },
  479. ne: { cardinal: f[0], ordinal: f[48] },
  480. nl: { cardinal: f[4] },
  481. nn: { cardinal: f[0] },
  482. nnh: { cardinal: f[0] },
  483. no: { cardinal: f[0] },
  484. nr: { cardinal: f[0] },
  485. nso: { cardinal: f[1] },
  486. ny: { cardinal: f[0] },
  487. nyn: { cardinal: f[0] },
  488. om: { cardinal: f[0] },
  489. or: { cardinal: f[0], ordinal: f[49] },
  490. os: { cardinal: f[0] },
  491. pa: { cardinal: f[1] },
  492. pap: { cardinal: f[0] },
  493. pl: { cardinal: f[27] },
  494. prg: { cardinal: f[23] },
  495. ps: { cardinal: f[0] },
  496. pt: { cardinal: f[28] },
  497. 'pt-PT': { cardinal: f[4] },
  498. rm: { cardinal: f[0] },
  499. ro: { cardinal: f[25], ordinal: f[0] },
  500. rof: { cardinal: f[0] },
  501. ru: { cardinal: f[29] },
  502. rwk: { cardinal: f[0] },
  503. saq: { cardinal: f[0] },
  504. sc: { cardinal: f[4], ordinal: f[43] },
  505. scn: { cardinal: f[4], ordinal: f[43] },
  506. sd: { cardinal: f[0] },
  507. sdh: { cardinal: f[0] },
  508. se: { cardinal: f[19] },
  509. seh: { cardinal: f[0] },
  510. sh: { cardinal: f[7] },
  511. shi: { cardinal: f[30] },
  512. si: { cardinal: f[31] },
  513. sk: { cardinal: f[8] },
  514. sl: { cardinal: f[32] },
  515. sma: { cardinal: f[19] },
  516. smi: { cardinal: f[19] },
  517. smj: { cardinal: f[19] },
  518. smn: { cardinal: f[19] },
  519. sms: { cardinal: f[19] },
  520. sn: { cardinal: f[0] },
  521. so: { cardinal: f[0] },
  522. sq: { cardinal: f[0], ordinal: f[50] },
  523. sr: { cardinal: f[7] },
  524. ss: { cardinal: f[0] },
  525. ssy: { cardinal: f[0] },
  526. st: { cardinal: f[0] },
  527. sv: { cardinal: f[4], ordinal: f[51] },
  528. sw: { cardinal: f[4] },
  529. syr: { cardinal: f[0] },
  530. ta: { cardinal: f[0] },
  531. te: { cardinal: f[0] },
  532. teo: { cardinal: f[0] },
  533. ti: { cardinal: f[1] },
  534. tig: { cardinal: f[0] },
  535. tk: { cardinal: f[0], ordinal: f[52] },
  536. tl: { cardinal: f[13], ordinal: f[0] },
  537. tn: { cardinal: f[0] },
  538. tr: { cardinal: f[0] },
  539. ts: { cardinal: f[0] },
  540. tzm: { cardinal: f[33] },
  541. ug: { cardinal: f[0] },
  542. uk: { cardinal: f[29], ordinal: f[53] },
  543. ur: { cardinal: f[4] },
  544. uz: { cardinal: f[0] },
  545. ve: { cardinal: f[0] },
  546. vo: { cardinal: f[0] },
  547. vun: { cardinal: f[0] },
  548. wa: { cardinal: f[1] },
  549. wae: { cardinal: f[0] },
  550. xh: { cardinal: f[0] },
  551. xog: { cardinal: f[0] },
  552. yi: { cardinal: f[4] },
  553. zu: { cardinal: f[2] },
  554. lo: { ordinal: f[0] },
  555. ms: { ordinal: f[0] },
  556. vi: { ordinal: f[0] }
  557. }