#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# File: yui/js/intl-base.js

    /**
     * The Intl utility provides a central location for managing sets of
     * localized resources (strings and formatting patterns).
     *
     * @class Intl
     * @uses EventTarget
     * @static
     */

    var SPLIT_REGEX = /[, ]/;

    Y.mix(Y.namespace('Intl'), {

     /**
        * Returns the language among those available that
        * best matches the preferred language list, using the Lookup
        * algorithm of BCP 47.
        * If none of the available languages meets the user's preferences,
        * then "" is returned.
        * Extended language ranges are not supported.
        *
        * @method lookupBestLang
        * @param {String[] | String} preferredLanguages The list of preferred
        * languages in descending preference order, represented as BCP 47
        * language tags. A string array or a comma-separated list.
        * @param {String[]} availableLanguages The list of languages
        * that the application supports, represented as BCP 47 language
        * tags.
        *
        * @return {String} The available language that best matches the
        * preferred language list, or "".
        * @since 3.1.0
        */
        lookupBestLang: function(preferredLanguages, availableLanguages) {

            var i, language, result, index;

            // check whether the list of available languages contains language;
            // if so return it
            function scan(language) {
                var i;
                for (i = 0; i < availableLanguages.length; i += 1) {
                    if (language.toLowerCase() ===
                                availableLanguages[i].toLowerCase()) {
                        return availableLanguages[i];
                    }
                }
            }

            if (Y.Lang.isString(preferredLanguages)) {
                preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
            }

            for (i = 0; i < preferredLanguages.length; i += 1) {
                language = preferredLanguages[i];
                if (!language || language === '*') {
                    continue;
                }
                // check the fallback sequence for one language
                while (language.length > 0) {
                    result = scan(language);
                    if (result) {
                        return result;
                    } else {
                        index = language.lastIndexOf('-');
                        if (index >= 0) {
                            language = language.substring(0, index);
                            // one-character subtags get cut along with the
                            // following subtag
                            if (index >= 2 && language.charAt(index - 2) === '-') {
                                language = language.substring(0, index - 2);
                            }
                        } else {
                            // nothing available for this language
                            break;
                        }
                    }
                }
            }

            return '';
        }
    });