3 Copyright 2012 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
7 YUI.add('intl-base', function(Y) {
10 * The Intl utility provides a central location for managing sets of
11 * localized resources (strings and formatting patterns).
18 var SPLIT_REGEX = /[, ]/;
20 Y.mix(Y.namespace('Intl'), {
23 * Returns the language among those available that
24 * best matches the preferred language list, using the Lookup
25 * algorithm of BCP 47.
26 * If none of the available languages meets the user's preferences,
27 * then "" is returned.
28 * Extended language ranges are not supported.
30 * @method lookupBestLang
31 * @param {String[] | String} preferredLanguages The list of preferred
32 * languages in descending preference order, represented as BCP 47
33 * language tags. A string array or a comma-separated list.
34 * @param {String[]} availableLanguages The list of languages
35 * that the application supports, represented as BCP 47 language
38 * @return {String} The available language that best matches the
39 * preferred language list, or "".
42 lookupBestLang: function(preferredLanguages, availableLanguages) {
44 var i, language, result, index;
46 // check whether the list of available languages contains language;
48 function scan(language) {
50 for (i = 0; i < availableLanguages.length; i += 1) {
51 if (language.toLowerCase() ===
52 availableLanguages[i].toLowerCase()) {
53 return availableLanguages[i];
58 if (Y.Lang.isString(preferredLanguages)) {
59 preferredLanguages = preferredLanguages.split(SPLIT_REGEX);
62 for (i = 0; i < preferredLanguages.length; i += 1) {
63 language = preferredLanguages[i];
64 if (!language || language === '*') {
67 // check the fallback sequence for one language
68 while (language.length > 0) {
69 result = scan(language);
73 index = language.lastIndexOf('-');
75 language = language.substring(0, index);
76 // one-character subtags get cut along with the
78 if (index >= 2 && language.charAt(index - 2) === '-') {
79 language = language.substring(0, index - 2);
82 // nothing available for this language
94 }, '3.5.1' ,{requires:['yui-base']});