annotate babel3/contrib/babel.js @ 494:cddcd04db33e experimental

Commit the resulting files after a 2to3 -nvw run.
author jruigrok
date Thu, 15 Apr 2010 14:20:11 +0000
parents 0b228ee775fe
children
rev   line source
493
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
1 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
2 * Babel JavaScript Support
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
3 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
4 * Copyright (C) 2008 Edgewall Software
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
5 * All rights reserved.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
6 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
7 * This software is licensed as described in the file COPYING, which
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
8 * you should have received as part of this distribution. The terms
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
9 * are also available at http://babel.edgewall.org/wiki/License.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
10 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
11 * This software consists of voluntary contributions made by many
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
12 * individuals. For the exact contribution history, see the revision
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
13 * history and logs, available at http://babel.edgewall.org/log/.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
14 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
15
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
16 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
17 * A simple module that provides a gettext like translation interface.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
18 * The catalog passed to load() must be a object conforming to this
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
19 * interface::
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
20 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
21 * {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
22 * messages: an object of {msgid: translations} items where
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
23 * translations is an array of messages or a single
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
24 * string if the message is not pluralizable.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
25 * plural_expr: the plural expression for the language.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
26 * locale: the identifier for this locale.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
27 * domain: the name of the domain.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
28 * }
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
29 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
30 * Missing elements in the object are ignored.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
31 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
32 * Typical usage::
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
33 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
34 * var translations = babel.Translations.load(...).install();
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
35 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
36 var babel = new function() {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
37
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
38 var defaultPluralExpr = function(n) { return n == 1 ? 0 : 1; };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
39 var formatRegex = /%?%(?:\(([^\)]+)\))?([disr])/g;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
40
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
41 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
42 * A translations object implementing the gettext interface
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
43 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
44 var Translations = this.Translations = function(locale, domain) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
45 this.messages = {};
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
46 this.locale = locale || 'unknown';
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
47 this.domain = domain || 'messages';
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
48 this.pluralexpr = defaultPluralExpr;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
49 };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
50
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
51 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
52 * Create a new translations object from the catalog and return it.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
53 * See the babel-module comment for more details.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
54 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
55 Translations.load = function(catalog) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
56 var rv = new Translations();
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
57 rv.load(catalog);
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
58 return rv;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
59 };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
60
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
61 Translations.prototype = {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
62 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
63 * translate a single string.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
64 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
65 gettext: function(string) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
66 var translated = this.messages[string];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
67 if (typeof translated == 'undefined')
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
68 return string;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
69 return (typeof translated == 'string') ? translated : translated[0];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
70 },
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
71
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
72 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
73 * translate a pluralizable string
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
74 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
75 ngettext: function(singular, plural, n) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
76 var translated = this.messages[singular];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
77 if (typeof translated == 'undefined')
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
78 return (n == 1) ? singular : plural;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
79 return translated[this.pluralexpr(n)];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
80 },
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
81
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
82 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
83 * Install this translation document wide. After this call, there are
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
84 * three new methods on the window object: _, gettext and ngettext
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
85 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
86 install: function() {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
87 var self = this;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
88 window._ = window.gettext = function(string) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
89 return self.gettext(string);
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
90 };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
91 window.ngettext = function(singular, plural, n) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
92 return self.ngettext(singular, plural, n);
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
93 };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
94 return this;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
95 },
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
96
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
97 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
98 * Works like Translations.load but updates the instance rather
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
99 * then creating a new one.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
100 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
101 load: function(catalog) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
102 if (catalog.messages)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
103 this.update(catalog.messages)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
104 if (catalog.plural_expr)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
105 this.setPluralExpr(catalog.plural_expr);
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
106 if (catalog.locale)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
107 this.locale = catalog.locale;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
108 if (catalog.domain)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
109 this.domain = catalog.domain;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
110 return this;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
111 },
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
112
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
113 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
114 * Updates the translations with the object of messages.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
115 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
116 update: function(mapping) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
117 for (var key in mapping)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
118 if (mapping.hasOwnProperty(key))
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
119 this.messages[key] = mapping[key];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
120 return this;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
121 },
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
122
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
123 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
124 * Sets the plural expression
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
125 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
126 setPluralExpr: function(expr) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
127 this.pluralexpr = new Function('n', 'return +(' + expr + ')');
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
128 return this;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
129 }
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
130 };
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
131
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
132 /**
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
133 * A python inspired string formatting function. Supports named and
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
134 * positional placeholders and "s", "d" and "i" as type characters
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
135 * without any formatting specifications.
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
136 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
137 * Examples::
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
138 *
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
139 * babel.format(_('Hello %s'), name)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
140 * babel.format(_('Progress: %(percent)s%%'), {percent: 100})
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
141 */
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
142 this.format = function() {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
143 var arg, string = arguments[0], idx = 0;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
144 if (arguments.length == 1)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
145 return string;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
146 else if (arguments.length == 2 && typeof arguments[1] == 'object')
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
147 arg = arguments[1];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
148 else {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
149 arg = [];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
150 for (var i = 1, n = arguments.length; i != n; ++i)
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
151 arg[i - 1] = arguments[i];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
152 }
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
153 return string.replace(formatRegex, function(all, name, type) {
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
154 if (all[0] == all[1]) return all.substring(1);
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
155 var value = arg[name || idx++];
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
156 return (type == 'i' || type == 'd') ? +value : value;
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
157 });
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
158 }
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
159
0b228ee775fe Copy over trunk.
jruigrok
parents:
diff changeset
160 };
Copyright (C) 2012-2017 Edgewall Software