| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- Copyright (c) 2010, Yahoo! Inc. All rights reserved.
- Code licensed under the BSD License:
- http://developer.yahoo.com/yui/license.html
- version: 3.4.0
- build: nightly
- */
- YUI.add('intl-base', function(Y) {
-
- /**
- * 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.4.0' ,{requires:['yui-base']});
|