MDL-32843 import YUI 3.5.1
[moodle.git] / lib / yui / 3.5.1 / build / intl-base / intl-base-debug.js
blob0ee13e15dbb34af3bc31379ae7405a9909a366e6
1 /*
2 YUI 3.5.1 (build 22)
3 Copyright 2012 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
6 */
7 YUI.add('intl-base', function(Y) {
9 /**
10  * The Intl utility provides a central location for managing sets of
11  * localized resources (strings and formatting patterns).
12  *
13  * @class Intl
14  * @uses EventTarget
15  * @static
16  */
18 var SPLIT_REGEX = /[, ]/;
20 Y.mix(Y.namespace('Intl'), {
22  /**
23     * Returns the language among those available that
24     * best matches the preferred language list, using the Lookup
25     * algorithm of BCP 47.
26     * If none of the available languages meets the user's preferences,
27     * then "" is returned.
28     * Extended language ranges are not supported.
29     *
30     * @method lookupBestLang
31     * @param {String[] | String} preferredLanguages The list of preferred
32     * languages in descending preference order, represented as BCP 47
33     * language tags. A string array or a comma-separated list.
34     * @param {String[]} availableLanguages The list of languages
35     * that the application supports, represented as BCP 47 language
36     * tags.
37     *
38     * @return {String} The available language that best matches the
39     * preferred language list, or "".
40     * @since 3.1.0
41     */
42     lookupBestLang: function(preferredLanguages, availableLanguages) {
44         var i, language, result, index;
46         // check whether the list of available languages contains language;
47         // if so return it
48         function scan(language) {
49             var i;
50             for (i = 0; i < availableLanguages.length; i += 1) {
51                 if (language.toLowerCase() ===
52                             availableLanguages[i].toLowerCase()) {
53                     return availableLanguages[i];
54                 }
55             }
56         }
58         if (Y.Lang.isString(preferredLanguages)) {
59             preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
60         }
62         for (i = 0; i < preferredLanguages.length; i += 1) {
63             language = preferredLanguages[i];
64             if (!language || language === '*') {
65                 continue;
66             }
67             // check the fallback sequence for one language
68             while (language.length > 0) {
69                 result = scan(language);
70                 if (result) {
71                     return result;
72                 } else {
73                     index = language.lastIndexOf('-');
74                     if (index >= 0) {
75                         language = language.substring(0, index);
76                         // one-character subtags get cut along with the
77                         // following subtag
78                         if (index >= 2 && language.charAt(index - 2) === '-') {
79                             language = language.substring(0, index - 2);
80                         }
81                     } else {
82                         // nothing available for this language
83                         break;
84                     }
85                 }
86             }
87         }
89         return '';
90     }
91 });
94 }, '3.5.1' ,{requires:['yui-base']});