3
Copyright 2011 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.4.1' ,{requires:['yui-base']});