~ubuntu-branches/ubuntu/utopic/moodle/utopic

« back to all changes in this revision

Viewing changes to lib/yuilib/3.13.0/intl/intl.js

  • Committer: Package Import Robot
  • Author(s): Thijs Kinkhorst
  • Date: 2014-05-12 16:10:38 UTC
  • mfrom: (36.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20140512161038-puyqf65k4e0s8ytz
Tags: 2.6.3-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
YUI 3.13.0 (build 508226d)
 
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.13.0', {"requires": ["intl-base", "event-custom"]});