|
1 /* |
|
2 YUI 3.10.3 (build 2fb5187) |
|
3 Copyright 2013 Yahoo! Inc. All rights reserved. |
|
4 Licensed under the BSD License. |
|
5 http://yuilibrary.com/license/ |
|
6 */ |
|
7 |
|
8 YUI.add('intl', function (Y, NAME) { |
|
9 |
|
10 var _mods = {}, |
|
11 |
|
12 ROOT_LANG = "yuiRootLang", |
|
13 ACTIVE_LANG = "yuiActiveLang", |
|
14 NONE = []; |
|
15 |
|
16 /** |
|
17 * Provides utilities to support the management of localized resources (strings and formatting patterns). |
|
18 * |
|
19 * @module intl |
|
20 */ |
|
21 |
|
22 /** |
|
23 * The Intl utility provides a central location for managing sets of localized resources (strings and formatting patterns). |
|
24 * |
|
25 * @class Intl |
|
26 * @uses EventTarget |
|
27 * @static |
|
28 */ |
|
29 Y.mix(Y.namespace("Intl"), { |
|
30 |
|
31 /** |
|
32 * Private method to retrieve the language hash for a given module. |
|
33 * |
|
34 * @method _mod |
|
35 * @private |
|
36 * |
|
37 * @param {String} module The name of the module |
|
38 * @return {Object} The hash of localized resources for the module, keyed by BCP language tag |
|
39 */ |
|
40 _mod : function(module) { |
|
41 if (!_mods[module]) { |
|
42 _mods[module] = {}; |
|
43 } |
|
44 return _mods[module]; |
|
45 }, |
|
46 |
|
47 /** |
|
48 * Sets the active language for the given module. |
|
49 * |
|
50 * Returns false on failure, which would happen if the language had not been registered through the <a href="#method_add">add()</a> method. |
|
51 * |
|
52 * @method setLang |
|
53 * |
|
54 * @param {String} module The module name. |
|
55 * @param {String} lang The BCP 47 language tag. |
|
56 * @return boolean true if successful, false if not. |
|
57 */ |
|
58 setLang : function(module, lang) { |
|
59 var langs = this._mod(module), |
|
60 currLang = langs[ACTIVE_LANG], |
|
61 exists = !!langs[lang]; |
|
62 |
|
63 if (exists && lang !== currLang) { |
|
64 langs[ACTIVE_LANG] = lang; |
|
65 this.fire("intl:langChange", {module: module, prevVal: currLang, newVal: (lang === ROOT_LANG) ? "" : lang}); |
|
66 } |
|
67 |
|
68 return exists; |
|
69 }, |
|
70 |
|
71 /** |
|
72 * Get the currently active language for the given module. |
|
73 * |
|
74 * @method getLang |
|
75 * |
|
76 * @param {String} module The module name. |
|
77 * @return {String} The BCP 47 language tag. |
|
78 */ |
|
79 getLang : function(module) { |
|
80 var lang = this._mod(module)[ACTIVE_LANG]; |
|
81 return (lang === ROOT_LANG) ? "" : lang; |
|
82 }, |
|
83 |
|
84 /** |
|
85 * Register a hash of localized resources for the given module and language |
|
86 * |
|
87 * @method add |
|
88 * |
|
89 * @param {String} module The module name. |
|
90 * @param {String} lang The BCP 47 language tag. |
|
91 * @param {Object} strings The hash of localized values, keyed by the string name. |
|
92 */ |
|
93 add : function(module, lang, strings) { |
|
94 lang = lang || ROOT_LANG; |
|
95 this._mod(module)[lang] = strings; |
|
96 this.setLang(module, lang); |
|
97 }, |
|
98 |
|
99 /** |
|
100 * Gets the module's localized resources for the currently active language (as provided by the <a href="#method_getLang">getLang</a> method). |
|
101 * <p> |
|
102 * Optionally, the localized resources for alternate languages which have been added to Intl (see the <a href="#method_add">add</a> method) can |
|
103 * be retrieved by providing the BCP 47 language tag as the lang parameter. |
|
104 * </p> |
|
105 * @method get |
|
106 * |
|
107 * @param {String} module The module name. |
|
108 * @param {String} key Optional. A single resource key. If not provided, returns a copy (shallow clone) of all resources. |
|
109 * @param {String} lang Optional. The BCP 47 language tag. If not provided, the module's currently active language is used. |
|
110 * @return String | Object A copy of the module's localized resources, or a single value if key is provided. |
|
111 */ |
|
112 get : function(module, key, lang) { |
|
113 var mod = this._mod(module), |
|
114 strs; |
|
115 |
|
116 lang = lang || mod[ACTIVE_LANG]; |
|
117 strs = mod[lang] || {}; |
|
118 |
|
119 return (key) ? strs[key] : Y.merge(strs); |
|
120 }, |
|
121 |
|
122 /** |
|
123 * Gets the list of languages for which localized resources are available for a given module, based on the module |
|
124 * meta-data (part of loader). If loader is not on the page, returns an empty array. |
|
125 * |
|
126 * @method getAvailableLangs |
|
127 * @param {String} module The name of the module |
|
128 * @return {Array} The array of languages available. |
|
129 */ |
|
130 getAvailableLangs : function(module) { |
|
131 var loader = Y.Env._loader, |
|
132 mod = loader && loader.moduleInfo[module], |
|
133 langs = mod && mod.lang; |
|
134 return (langs) ? langs.concat() : NONE; |
|
135 |
|
136 } |
|
137 }); |
|
138 |
|
139 Y.augment(Y.Intl, Y.EventTarget); |
|
140 |
|
141 /** |
|
142 * Notification event to indicate when the lang for a module has changed. There is no default behavior associated with this event, |
|
143 * so the on and after moments are equivalent. |
|
144 * |
|
145 * @event intl:langChange |
|
146 * @param {EventFacade} e The event facade |
|
147 * <p>The event facade contains:</p> |
|
148 * <dl> |
|
149 * <dt>module</dt><dd>The name of the module for which the language changed</dd> |
|
150 * <dt>newVal</dt><dd>The new language tag</dd> |
|
151 * <dt>prevVal</dt><dd>The current language tag</dd> |
|
152 * </dl> |
|
153 */ |
|
154 Y.Intl.publish("intl:langChange", {emitFacade:true}); |
|
155 |
|
156 |
|
157 }, '3.10.3', {"requires": ["intl-base", "event-custom"]}); |