intl-messageformat 1.0.1 → 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 (253) hide show
  1. package/README.md +44 -18
  2. package/dist/intl-messageformat-with-locales.js +1249 -321
  3. package/dist/intl-messageformat-with-locales.js.map +1 -0
  4. package/dist/intl-messageformat-with-locales.min.js +4 -2
  5. package/dist/intl-messageformat-with-locales.min.js.map +1 -0
  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/index.js +4 -6
  242. package/lib/compiler.js +21 -21
  243. package/lib/core.js +54 -46
  244. package/lib/en.js +2 -12
  245. package/lib/es5.js +8 -18
  246. package/lib/locales.js +752 -161
  247. package/lib/main.js +5 -14
  248. package/lib/utils.js +9 -18
  249. package/package.json +18 -12
  250. package/src/compiler.js +13 -10
  251. package/src/core.js +44 -33
  252. package/src/en.js +1 -1
  253. package/bower.json +0 -40
package/lib/core.js CHANGED
@@ -1,17 +1,14 @@
1
- "use strict";
2
-
3
- Object.seal(Object.defineProperties(exports, {
4
- default: {
5
- get: function() {
6
- return src$core$$default;
7
- },
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
+ */
8
6
 
9
- enumerable: true
10
- }
11
- }));
7
+ /* jslint esnext: true */
12
8
 
9
+ "use strict";
13
10
  var src$utils$$ = require("./utils"), src$es5$$ = require("./es5"), src$compiler$$ = require("./compiler"), intl$messageformat$parser$$ = require("intl-messageformat-parser");
14
- var src$core$$default = MessageFormat;
11
+ exports["default"] = MessageFormat;
15
12
 
16
13
  // -- MessageFormat --------------------------------------------------------
17
14
 
@@ -31,12 +28,11 @@ function MessageFormat(message, locales, formats) {
31
28
  // Defined first because it's used to build the format pattern.
32
29
  src$es5$$.defineProperty(this, '_locale', {value: this._resolveLocale(locales)});
33
30
 
34
- var pluralFn = MessageFormat.__localeData__[this._locale].pluralRuleFunction;
35
-
36
31
  // Compile the `ast` to a pattern that is highly optimized for repeated
37
32
  // `format()` invocations. **Note:** This passes the `locales` set provided
38
33
  // to the constructor instead of just the resolved locale.
39
- var pattern = this._compilePattern(ast, locales, formats, pluralFn);
34
+ var pluralFn = this._findPluralRuleFunction(this._locale);
35
+ var pattern = this._compilePattern(ast, locales, formats, pluralFn);
40
36
 
41
37
  // "Bind" `format()` method to `this` so it can be passed by reference like
42
38
  // the other `Intl` APIs.
@@ -129,21 +125,11 @@ src$es5$$.defineProperty(MessageFormat, '__addLocaleData', {value: function (dat
129
125
  );
130
126
  }
131
127
 
132
- if (!data.pluralRuleFunction) {
133
- throw new Error(
134
- 'Locale data provided to IntlMessageFormat is missing a ' +
135
- '`pluralRuleFunction` property'
136
- );
137
- }
138
-
139
- // Message format locale data only requires the first part of the tag.
140
- var locale = data.locale.toLowerCase().split('-')[0];
141
-
142
- MessageFormat.__localeData__[locale] = data;
128
+ MessageFormat.__localeData__[data.locale.toLowerCase()] = data;
143
129
  }});
144
130
 
145
131
  // Defines `__parse()` static method as an exposed private.
146
- src$es5$$.defineProperty(MessageFormat, '__parse', {value: intl$messageformat$parser$$.default.parse});
132
+ src$es5$$.defineProperty(MessageFormat, '__parse', {value: intl$messageformat$parser$$["default"].parse});
147
133
 
148
134
  // Define public `defaultLocale` property which defaults to English, but can be
149
135
  // set by the developer.
@@ -161,10 +147,30 @@ MessageFormat.prototype.resolvedOptions = function () {
161
147
  };
162
148
 
163
149
  MessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {
164
- var compiler = new src$compiler$$.default(locales, formats, pluralFn);
150
+ var compiler = new src$compiler$$["default"](locales, formats, pluralFn);
165
151
  return compiler.compile(ast);
166
152
  };
167
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
+
168
174
  MessageFormat.prototype._format = function (pattern, values) {
169
175
  var result = '',
170
176
  i, len, part, id, value;
@@ -218,38 +224,40 @@ MessageFormat.prototype._mergeFormats = function (defaults, formats) {
218
224
  };
219
225
 
220
226
  MessageFormat.prototype._resolveLocale = function (locales) {
221
- if (!locales) {
222
- locales = MessageFormat.defaultLocale;
223
- }
224
-
225
227
  if (typeof locales === 'string') {
226
228
  locales = [locales];
227
229
  }
228
230
 
231
+ // Create a copy of the array so we can push on the default locale.
232
+ locales = (locales || []).concat(MessageFormat.defaultLocale);
233
+
229
234
  var localeData = MessageFormat.__localeData__;
230
- var i, len, locale;
235
+ var i, len, localeParts, data;
231
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.
232
242
  for (i = 0, len = locales.length; i < len; i += 1) {
233
- // We just need the root part of the langage tag.
234
- locale = locales[i].split('-')[0].toLowerCase();
235
-
236
- // Validate that the langage tag is structurally valid.
237
- if (!/[a-z]{2,3}/.test(locale)) {
238
- throw new Error(
239
- 'Language tag provided to IntlMessageFormat is not ' +
240
- 'structrually valid: ' + locale
241
- );
242
- }
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
+ }
243
252
 
244
- // Return the first locale for which we have CLDR data registered.
245
- if (src$utils$$.hop.call(localeData, locale)) {
246
- return locale;
253
+ localeParts.pop();
247
254
  }
248
255
  }
249
256
 
257
+ var defaultLocale = locales.pop();
250
258
  throw new Error(
251
259
  'No locale data has been added to IntlMessageFormat for: ' +
252
- locales.join(', ')
260
+ locales.join(', ') + ', or the default locale: ' + defaultLocale
253
261
  );
254
262
  };
255
263
 
package/lib/en.js CHANGED
@@ -1,15 +1,5 @@
1
+ // GENERATED FILE
1
2
  "use strict";
2
-
3
- Object.seal(Object.defineProperties(exports, {
4
- default: {
5
- get: function() {
6
- return src$en$$default;
7
- },
8
-
9
- enumerable: true
10
- }
11
- }));
12
-
13
- var src$en$$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"}};
14
4
 
15
5
  //# sourceMappingURL=en.js.map
package/lib/es5.js CHANGED
@@ -1,23 +1,12 @@
1
- "use strict";
2
-
3
- Object.seal(Object.defineProperties(exports, {
4
- defineProperty: {
5
- get: function() {
6
- return defineProperty;
7
- },
8
-
9
- enumerable: true
10
- },
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
+ */
11
6
 
12
- objCreate: {
13
- get: function() {
14
- return objCreate;
15
- },
16
-
17
- enumerable: true
18
- }
19
- }));
7
+ /* jslint esnext: true */
20
8
 
9
+ "use strict";
21
10
  var src$utils$$ = require("./utils");
22
11
 
23
12
  // Purposely using the same implementation as the Intl.js `Intl` polyfill.
@@ -55,5 +44,6 @@ var objCreate = Object.create || function (proto, props) {
55
44
 
56
45
  return obj;
57
46
  };
47
+ exports.defineProperty = defineProperty, exports.objCreate = objCreate;
58
48
 
59
49
  //# sourceMappingURL=es5.js.map