src/cm/media/js/lib/yui/yui3-3.15.0/build/intl-base/intl-base-debug.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('intl-base', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * The Intl utility provides a central location for managing sets of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * localized resources (strings and formatting patterns).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @class Intl
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * @uses EventTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
var SPLIT_REGEX = /[, ]/;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
Y.mix(Y.namespace('Intl'), {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
 /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    * Returns the language among those available that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
    * best matches the preferred language list, using the Lookup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
    * algorithm of BCP 47.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    * If none of the available languages meets the user's preferences,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    * then "" is returned.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    * Extended language ranges are not supported.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    * @method lookupBestLang
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
    * @param {String[] | String} preferredLanguages The list of preferred
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    * languages in descending preference order, represented as BCP 47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
    * language tags. A string array or a comma-separated list.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    * @param {String[]} availableLanguages The list of languages
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
    * that the application supports, represented as BCP 47 language
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    * tags.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
    * @return {String} The available language that best matches the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    * preferred language list, or "".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    * @since 3.1.0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    lookupBestLang: function(preferredLanguages, availableLanguages) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
        var i, language, result, index;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        // check whether the list of available languages contains language;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        // if so return it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        function scan(language) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
            var i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
            for (i = 0; i < availableLanguages.length; i += 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
                if (language.toLowerCase() ===
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
                            availableLanguages[i].toLowerCase()) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
                    return availableLanguages[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        if (Y.Lang.isString(preferredLanguages)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        for (i = 0; i < preferredLanguages.length; i += 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
            language = preferredLanguages[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
            if (!language || language === '*') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
                continue;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
            // check the fallback sequence for one language
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
            while (language.length > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
                result = scan(language);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
                if (result) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
                    return result;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                    index = language.lastIndexOf('-');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                    if (index >= 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                        language = language.substring(0, index);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                        // one-character subtags get cut along with the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                        // following subtag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                        if (index >= 2 && language.charAt(index - 2) === '-') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                            language = language.substring(0, index - 2);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
                        // nothing available for this language
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
                        break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        return '';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
}, '@VERSION@', {"requires": ["yui-base"]});