intl-messageformat 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +44 -18
  2. package/dist/intl-messageformat-with-locales.js +1247 -320
  3. package/dist/intl-messageformat-with-locales.js.map +1 -1
  4. package/dist/intl-messageformat-with-locales.min.js +3 -2
  5. package/dist/intl-messageformat-with-locales.min.js.map +1 -1
  6. package/dist/intl-messageformat.js +265 -160
  7. package/dist/intl-messageformat.js.map +1 -1
  8. package/dist/intl-messageformat.min.js +1 -1
  9. package/dist/intl-messageformat.min.js.map +1 -1
  10. package/dist/locale-data/aa.js +4 -0
  11. package/dist/locale-data/af.js +3 -1
  12. package/dist/locale-data/agq.js +2 -0
  13. package/dist/locale-data/ak.js +2 -1
  14. package/dist/locale-data/am.js +2 -1
  15. package/dist/locale-data/ar.js +29 -1
  16. package/dist/locale-data/as.js +2 -1
  17. package/dist/locale-data/asa.js +2 -1
  18. package/dist/locale-data/ast.js +2 -1
  19. package/dist/locale-data/az.js +5 -1
  20. package/dist/locale-data/bas.js +2 -0
  21. package/dist/locale-data/be.js +2 -1
  22. package/dist/locale-data/bem.js +2 -1
  23. package/dist/locale-data/bez.js +2 -1
  24. package/dist/locale-data/bg.js +2 -1
  25. package/dist/locale-data/bh.js +1 -0
  26. package/dist/locale-data/bm.js +4 -1
  27. package/dist/locale-data/bn.js +3 -1
  28. package/dist/locale-data/bo.js +3 -1
  29. package/dist/locale-data/br.js +2 -1
  30. package/dist/locale-data/brx.js +2 -1
  31. package/dist/locale-data/bs.js +5 -1
  32. package/dist/locale-data/ca.js +6 -1
  33. package/dist/locale-data/cgg.js +2 -1
  34. package/dist/locale-data/chr.js +2 -1
  35. package/dist/locale-data/ckb.js +1 -0
  36. package/dist/locale-data/cs.js +2 -1
  37. package/dist/locale-data/cy.js +2 -1
  38. package/dist/locale-data/da.js +3 -1
  39. package/dist/locale-data/dav.js +2 -0
  40. package/dist/locale-data/de.js +7 -1
  41. package/dist/locale-data/dje.js +2 -0
  42. package/dist/locale-data/dsb.js +2 -0
  43. package/dist/locale-data/dua.js +2 -0
  44. package/dist/locale-data/dv.js +1 -0
  45. package/dist/locale-data/dyo.js +2 -0
  46. package/dist/locale-data/dz.js +2 -1
  47. package/dist/locale-data/ebu.js +2 -0
  48. package/dist/locale-data/ee.js +3 -1
  49. package/dist/locale-data/el.js +3 -1
  50. package/dist/locale-data/en.js +96 -1
  51. package/dist/locale-data/eo.js +2 -1
  52. package/dist/locale-data/es.js +27 -1
  53. package/dist/locale-data/et.js +2 -1
  54. package/dist/locale-data/eu.js +2 -1
  55. package/dist/locale-data/ewo.js +2 -0
  56. package/dist/locale-data/fa.js +3 -1
  57. package/dist/locale-data/ff.js +5 -1
  58. package/dist/locale-data/fi.js +2 -1
  59. package/dist/locale-data/fil.js +2 -1
  60. package/dist/locale-data/fo.js +2 -1
  61. package/dist/locale-data/fr.js +47 -1
  62. package/dist/locale-data/fur.js +2 -1
  63. package/dist/locale-data/fy.js +2 -1
  64. package/dist/locale-data/ga.js +2 -1
  65. package/dist/locale-data/gd.js +2 -1
  66. package/dist/locale-data/gl.js +2 -1
  67. package/dist/locale-data/gsw.js +4 -1
  68. package/dist/locale-data/gu.js +2 -1
  69. package/dist/locale-data/guw.js +1 -0
  70. package/dist/locale-data/guz.js +2 -0
  71. package/dist/locale-data/gv.js +2 -1
  72. package/dist/locale-data/ha.js +6 -1
  73. package/dist/locale-data/haw.js +2 -1
  74. package/dist/locale-data/he.js +2 -1
  75. package/dist/locale-data/hi.js +2 -1
  76. package/dist/locale-data/hr.js +3 -1
  77. package/dist/locale-data/hsb.js +2 -0
  78. package/dist/locale-data/hu.js +2 -1
  79. package/dist/locale-data/hy.js +2 -1
  80. package/dist/locale-data/ia.js +2 -0
  81. package/dist/locale-data/id.js +2 -1
  82. package/dist/locale-data/ig.js +2 -1
  83. package/dist/locale-data/ii.js +2 -1
  84. package/dist/locale-data/in.js +1 -0
  85. package/dist/locale-data/is.js +2 -1
  86. package/dist/locale-data/it.js +4 -1
  87. package/dist/locale-data/iu.js +1 -0
  88. package/dist/locale-data/iw.js +1 -0
  89. package/dist/locale-data/ja.js +2 -1
  90. package/dist/locale-data/jbo.js +1 -0
  91. package/dist/locale-data/jgo.js +2 -1
  92. package/dist/locale-data/ji.js +1 -0
  93. package/dist/locale-data/jmc.js +2 -1
  94. package/dist/locale-data/jv.js +1 -0
  95. package/dist/locale-data/jw.js +1 -0
  96. package/dist/locale-data/ka.js +2 -1
  97. package/dist/locale-data/kab.js +2 -1
  98. package/dist/locale-data/kaj.js +1 -0
  99. package/dist/locale-data/kam.js +2 -0
  100. package/dist/locale-data/kcg.js +1 -0
  101. package/dist/locale-data/kde.js +2 -1
  102. package/dist/locale-data/kea.js +2 -1
  103. package/dist/locale-data/khq.js +2 -0
  104. package/dist/locale-data/ki.js +2 -0
  105. package/dist/locale-data/kk.js +3 -1
  106. package/dist/locale-data/kkj.js +2 -1
  107. package/dist/locale-data/kl.js +2 -1
  108. package/dist/locale-data/kln.js +2 -0
  109. package/dist/locale-data/km.js +2 -1
  110. package/dist/locale-data/kn.js +2 -1
  111. package/dist/locale-data/ko.js +3 -1
  112. package/dist/locale-data/kok.js +2 -0
  113. package/dist/locale-data/ks.js +3 -1
  114. package/dist/locale-data/ksb.js +2 -1
  115. package/dist/locale-data/ksf.js +2 -0
  116. package/dist/locale-data/ksh.js +2 -1
  117. package/dist/locale-data/ku.js +1 -0
  118. package/dist/locale-data/kw.js +2 -1
  119. package/dist/locale-data/ky.js +3 -1
  120. package/dist/locale-data/lag.js +2 -1
  121. package/dist/locale-data/lb.js +2 -0
  122. package/dist/locale-data/lg.js +2 -1
  123. package/dist/locale-data/lkt.js +2 -1
  124. package/dist/locale-data/ln.js +5 -1
  125. package/dist/locale-data/lo.js +2 -1
  126. package/dist/locale-data/lt.js +2 -1
  127. package/dist/locale-data/lu.js +2 -0
  128. package/dist/locale-data/luo.js +2 -0
  129. package/dist/locale-data/luy.js +2 -0
  130. package/dist/locale-data/lv.js +2 -1
  131. package/dist/locale-data/mas.js +3 -1
  132. package/dist/locale-data/mer.js +2 -0
  133. package/dist/locale-data/mfe.js +2 -0
  134. package/dist/locale-data/mg.js +2 -1
  135. package/dist/locale-data/mgh.js +2 -0
  136. package/dist/locale-data/mgo.js +2 -1
  137. package/dist/locale-data/mk.js +2 -1
  138. package/dist/locale-data/ml.js +2 -1
  139. package/dist/locale-data/mn.js +4 -1
  140. package/dist/locale-data/mo.js +1 -0
  141. package/dist/locale-data/mr.js +2 -1
  142. package/dist/locale-data/ms.js +6 -1
  143. package/dist/locale-data/mt.js +2 -1
  144. package/dist/locale-data/mua.js +2 -0
  145. package/dist/locale-data/my.js +2 -1
  146. package/dist/locale-data/nah.js +1 -0
  147. package/dist/locale-data/naq.js +2 -1
  148. package/dist/locale-data/nb.js +3 -1
  149. package/dist/locale-data/nd.js +2 -1
  150. package/dist/locale-data/ne.js +3 -1
  151. package/dist/locale-data/nl.js +8 -1
  152. package/dist/locale-data/nmg.js +2 -0
  153. package/dist/locale-data/nn.js +2 -1
  154. package/dist/locale-data/nnh.js +2 -1
  155. package/dist/locale-data/no.js +1 -0
  156. package/dist/locale-data/nqo.js +1 -0
  157. package/dist/locale-data/nr.js +2 -1
  158. package/dist/locale-data/nso.js +2 -1
  159. package/dist/locale-data/nus.js +2 -0
  160. package/dist/locale-data/ny.js +1 -0
  161. package/dist/locale-data/nyn.js +2 -1
  162. package/dist/locale-data/om.js +3 -1
  163. package/dist/locale-data/or.js +2 -1
  164. package/dist/locale-data/os.js +3 -1
  165. package/dist/locale-data/pa.js +5 -1
  166. package/dist/locale-data/pap.js +1 -0
  167. package/dist/locale-data/pl.js +2 -1
  168. package/dist/locale-data/prg.js +1 -0
  169. package/dist/locale-data/ps.js +2 -1
  170. package/dist/locale-data/pt.js +10 -1
  171. package/dist/locale-data/qu.js +4 -0
  172. package/dist/locale-data/rm.js +2 -1
  173. package/dist/locale-data/rn.js +2 -0
  174. package/dist/locale-data/ro.js +3 -1
  175. package/dist/locale-data/rof.js +2 -1
  176. package/dist/locale-data/ru.js +7 -1
  177. package/dist/locale-data/rw.js +2 -0
  178. package/dist/locale-data/rwk.js +2 -1
  179. package/dist/locale-data/sah.js +2 -1
  180. package/dist/locale-data/saq.js +2 -1
  181. package/dist/locale-data/sbp.js +2 -0
  182. package/dist/locale-data/se.js +4 -1
  183. package/dist/locale-data/seh.js +2 -1
  184. package/dist/locale-data/ses.js +2 -1
  185. package/dist/locale-data/sg.js +2 -1
  186. package/dist/locale-data/sh.js +1 -0
  187. package/dist/locale-data/shi.js +5 -1
  188. package/dist/locale-data/si.js +2 -1
  189. package/dist/locale-data/sk.js +2 -1
  190. package/dist/locale-data/sl.js +2 -1
  191. package/dist/locale-data/sma.js +1 -0
  192. package/dist/locale-data/smi.js +1 -0
  193. package/dist/locale-data/smj.js +1 -0
  194. package/dist/locale-data/smn.js +2 -0
  195. package/dist/locale-data/sms.js +1 -0
  196. package/dist/locale-data/sn.js +2 -1
  197. package/dist/locale-data/so.js +5 -1
  198. package/dist/locale-data/sq.js +4 -1
  199. package/dist/locale-data/sr.js +11 -1
  200. package/dist/locale-data/ss.js +3 -1
  201. package/dist/locale-data/ssy.js +2 -1
  202. package/dist/locale-data/st.js +1 -1
  203. package/dist/locale-data/sv.js +4 -1
  204. package/dist/locale-data/sw.js +4 -1
  205. package/dist/locale-data/swc.js +2 -0
  206. package/dist/locale-data/syr.js +1 -0
  207. package/dist/locale-data/ta.js +5 -1
  208. package/dist/locale-data/te.js +2 -1
  209. package/dist/locale-data/teo.js +3 -1
  210. package/dist/locale-data/th.js +2 -1
  211. package/dist/locale-data/ti.js +3 -1
  212. package/dist/locale-data/tig.js +1 -1
  213. package/dist/locale-data/tk.js +1 -0
  214. package/dist/locale-data/tl.js +1 -0
  215. package/dist/locale-data/tn.js +3 -1
  216. package/dist/locale-data/to.js +2 -1
  217. package/dist/locale-data/tr.js +3 -1
  218. package/dist/locale-data/ts.js +2 -1
  219. package/dist/locale-data/twq.js +2 -0
  220. package/dist/locale-data/tzm.js +3 -1
  221. package/dist/locale-data/ug.js +3 -1
  222. package/dist/locale-data/uk.js +2 -1
  223. package/dist/locale-data/ur.js +3 -1
  224. package/dist/locale-data/uz.js +7 -1
  225. package/dist/locale-data/vai.js +5 -0
  226. package/dist/locale-data/ve.js +2 -1
  227. package/dist/locale-data/vi.js +2 -1
  228. package/dist/locale-data/vo.js +2 -1
  229. package/dist/locale-data/vun.js +2 -1
  230. package/dist/locale-data/wa.js +1 -0
  231. package/dist/locale-data/wae.js +2 -1
  232. package/dist/locale-data/wo.js +1 -0
  233. package/dist/locale-data/xh.js +1 -1
  234. package/dist/locale-data/xog.js +2 -1
  235. package/dist/locale-data/yav.js +2 -0
  236. package/dist/locale-data/yi.js +2 -0
  237. package/dist/locale-data/yo.js +3 -1
  238. package/dist/locale-data/zgh.js +2 -0
  239. package/dist/locale-data/zh.js +10 -1
  240. package/dist/locale-data/zu.js +2 -1
  241. package/lib/compiler.js +21 -10
  242. package/lib/core.js +52 -33
  243. package/lib/en.js +2 -1
  244. package/lib/es5.js +8 -0
  245. package/lib/locales.js +751 -160
  246. package/lib/main.js +2 -0
  247. package/lib/utils.js +8 -0
  248. package/package.json +6 -6
  249. package/src/compiler.js +13 -10
  250. package/src/core.js +44 -33
  251. package/src/en.js +1 -1
  252. package/bower.json +0 -40
package/lib/core.js CHANGED
@@ -1,3 +1,11 @@
1
+ /*
2
+ Copyright (c) 2014, Yahoo! Inc. All rights reserved.
3
+ Copyrights licensed under the New BSD License.
4
+ See the accompanying LICENSE file for terms.
5
+ */
6
+
7
+ /* jslint esnext: true */
8
+
1
9
  "use strict";
2
10
  var src$utils$$ = require("./utils"), src$es5$$ = require("./es5"), src$compiler$$ = require("./compiler"), intl$messageformat$parser$$ = require("intl-messageformat-parser");
3
11
  exports["default"] = MessageFormat;
@@ -20,12 +28,11 @@ function MessageFormat(message, locales, formats) {
20
28
  // Defined first because it's used to build the format pattern.
21
29
  src$es5$$.defineProperty(this, '_locale', {value: this._resolveLocale(locales)});
22
30
 
23
- var pluralFn = MessageFormat.__localeData__[this._locale].pluralRuleFunction;
24
-
25
31
  // Compile the `ast` to a pattern that is highly optimized for repeated
26
32
  // `format()` invocations. **Note:** This passes the `locales` set provided
27
33
  // to the constructor instead of just the resolved locale.
28
- var pattern = this._compilePattern(ast, locales, formats, pluralFn);
34
+ var pluralFn = this._findPluralRuleFunction(this._locale);
35
+ var pattern = this._compilePattern(ast, locales, formats, pluralFn);
29
36
 
30
37
  // "Bind" `format()` method to `this` so it can be passed by reference like
31
38
  // the other `Intl` APIs.
@@ -118,17 +125,7 @@ src$es5$$.defineProperty(MessageFormat, '__addLocaleData', {value: function (dat
118
125
  );
119
126
  }
120
127
 
121
- if (!data.pluralRuleFunction) {
122
- throw new Error(
123
- 'Locale data provided to IntlMessageFormat is missing a ' +
124
- '`pluralRuleFunction` property'
125
- );
126
- }
127
-
128
- // Message format locale data only requires the first part of the tag.
129
- var locale = data.locale.toLowerCase().split('-')[0];
130
-
131
- MessageFormat.__localeData__[locale] = data;
128
+ MessageFormat.__localeData__[data.locale.toLowerCase()] = data;
132
129
  }});
133
130
 
134
131
  // Defines `__parse()` static method as an exposed private.
@@ -154,6 +151,26 @@ MessageFormat.prototype._compilePattern = function (ast, locales, formats, plura
154
151
  return compiler.compile(ast);
155
152
  };
156
153
 
154
+ MessageFormat.prototype._findPluralRuleFunction = function (locale) {
155
+ var localeData = MessageFormat.__localeData__;
156
+ var data = localeData[locale.toLowerCase()];
157
+
158
+ // The locale data is de-duplicated, so we have to traverse the locale's
159
+ // hierarchy until we find a `pluralRuleFunction` to return.
160
+ while (data) {
161
+ if (data.pluralRuleFunction) {
162
+ return data.pluralRuleFunction;
163
+ }
164
+
165
+ data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];
166
+ }
167
+
168
+ throw new Error(
169
+ 'Locale data added to IntlMessageFormat is missing a ' +
170
+ '`pluralRuleFunction` for :' + locale
171
+ );
172
+ };
173
+
157
174
  MessageFormat.prototype._format = function (pattern, values) {
158
175
  var result = '',
159
176
  i, len, part, id, value;
@@ -207,38 +224,40 @@ MessageFormat.prototype._mergeFormats = function (defaults, formats) {
207
224
  };
208
225
 
209
226
  MessageFormat.prototype._resolveLocale = function (locales) {
210
- if (!locales) {
211
- locales = MessageFormat.defaultLocale;
212
- }
213
-
214
227
  if (typeof locales === 'string') {
215
228
  locales = [locales];
216
229
  }
217
230
 
231
+ // Create a copy of the array so we can push on the default locale.
232
+ locales = (locales || []).concat(MessageFormat.defaultLocale);
233
+
218
234
  var localeData = MessageFormat.__localeData__;
219
- var i, len, locale;
235
+ var i, len, localeParts, data;
220
236
 
237
+ // Using the set of locales + the default locale, we look for the first one
238
+ // which that has been registered. When data does not exist for a locale, we
239
+ // traverse its ancestors to find something that's been registered within
240
+ // its hierarchy of locales. Since we lack the proper `parentLocale` data
241
+ // here, we must take a naive approach to traversal.
221
242
  for (i = 0, len = locales.length; i < len; i += 1) {
222
- // We just need the root part of the langage tag.
223
- locale = locales[i].split('-')[0].toLowerCase();
224
-
225
- // Validate that the langage tag is structurally valid.
226
- if (!/[a-z]{2,3}/.test(locale)) {
227
- throw new Error(
228
- 'Language tag provided to IntlMessageFormat is not ' +
229
- 'structrually valid: ' + locale
230
- );
231
- }
243
+ localeParts = locales[i].toLowerCase().split('-');
244
+
245
+ while (localeParts.length) {
246
+ data = localeData[localeParts.join('-')];
247
+ if (data) {
248
+ // Return the normalized locale string; e.g., we return "en-US",
249
+ // instead of "en-us".
250
+ return data.locale;
251
+ }
232
252
 
233
- // Return the first locale for which we have CLDR data registered.
234
- if (src$utils$$.hop.call(localeData, locale)) {
235
- return locale;
253
+ localeParts.pop();
236
254
  }
237
255
  }
238
256
 
257
+ var defaultLocale = locales.pop();
239
258
  throw new Error(
240
259
  'No locale data has been added to IntlMessageFormat for: ' +
241
- locales.join(', ')
260
+ locales.join(', ') + ', or the default locale: ' + defaultLocale
242
261
  );
243
262
  };
244
263
 
package/lib/en.js CHANGED
@@ -1,4 +1,5 @@
1
+ // GENERATED FILE
1
2
  "use strict";
2
- exports["default"] = {"locale":"en","pluralRuleFunction":function (n) {var i=Math.floor(Math.abs(n)),v=n.toString().replace(/^[^.]*\.?/,"").length;n=Math.floor(n);if(i===1&&v===0)return"one";return"other";}};
3
+ exports["default"] = {"locale":"en","pluralRuleFunction":function (n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}};
3
4
 
4
5
  //# sourceMappingURL=en.js.map
package/lib/es5.js CHANGED
@@ -1,3 +1,11 @@
1
+ /*
2
+ Copyright (c) 2014, Yahoo! Inc. All rights reserved.
3
+ Copyrights licensed under the New BSD License.
4
+ See the accompanying LICENSE file for terms.
5
+ */
6
+
7
+ /* jslint esnext: true */
8
+
1
9
  "use strict";
2
10
  var src$utils$$ = require("./utils");
3
11