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