You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.0 KiB
95 lines
3.0 KiB
/*
|
|
YUI 3.17.2 (build 9c3c78e)
|
|
Copyright 2014 Yahoo! Inc. All rights reserved.
|
|
Licensed under the BSD License.
|
|
http://yuilibrary.com/license/
|
|
*/
|
|
|
|
YUI.add('intl-base', function (Y, NAME) {
|
|
|
|
/**
|
|
* 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 '';
|
|
}
|
|
});
|
|
|
|
|
|
}, '3.17.2', {"requires": ["yui-base"]});
|
|
|