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