diff --git a/index.js b/index.js index 2809fe0..e321a17 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,5 @@ +var deprecatedLocales = require('./lib/deprecated-locales.json'); + function bestMatchingLocale (inputLocale, availableLocales) { /// Normalize @@ -6,7 +8,7 @@ function bestMatchingLocale (inputLocale, availableLocales) { .toLowerCase(); availableLocales = availableLocales.map(function(l) { - return l.toLowerCase(); + return getStandardLanguage(l.toLowerCase()); }); var localeCodes = parseLocaleIntoCodes(inputLocale); @@ -65,10 +67,10 @@ function parseLocaleIntoCodes (locale) { if (!match) { return null; } - + var localeParts = []; if (match[1]) { - match[1] = match[1].toLowerCase(); + match[1] = getStandardLanguage(match[1].toLowerCase()); localeParts.push(match[1]); } if (match[2]) { @@ -88,6 +90,14 @@ function parseLocaleIntoCodes (locale) { }; } +function getStandardLanguage(language) { + if (deprecatedLocales[language]) { + return deprecatedLocales[language] + } else { + return language; + } +} + function includes(inArray, toFind) { return inArray.indexOf(toFind) > -1; } diff --git a/lib/deprecated-locales.json b/lib/deprecated-locales.json new file mode 100644 index 0000000..204213d --- /dev/null +++ b/lib/deprecated-locales.json @@ -0,0 +1,5 @@ +{ + "iw": "he", + "ji": "yi", + "in": "id" +} diff --git a/test.js b/test.js index 35216cd..9f8aa77 100644 --- a/test.js +++ b/test.js @@ -8,7 +8,10 @@ var availableLocales = [ 'es-ES', 'pt-PT', 'tr', - 'zh-Hans' + 'zh-Hans', + 'iw', + 'ji', + 'in' ]; tape('test bestMatchingLocale', function(t) { @@ -22,6 +25,13 @@ tape('test bestMatchingLocale', function(t) { t.equal(locale.bestMatchingLocale('es-mx', availableLocales), 'es'); t.equal(locale.bestMatchingLocale('zh-Hans-region', availableLocales), 'zh-Hans'); t.equal(locale.bestMatchingLocale('pt-BR', availableLocales), 'pt-PT'); + + t.equal(locale.bestMatchingLocale('iw', availableLocales), 'he', 'Test deprecated locale'); + t.equal(locale.bestMatchingLocale('iw-IL', availableLocales), 'he', 'Test deprecated locale'); + t.equal(locale.bestMatchingLocale('iw', ['iw-IL']), 'he-IL', 'Test deprecated locale'); + t.equal(locale.bestMatchingLocale('ji', availableLocales), 'yi', 'Test deprecated locale'); + t.equal(locale.bestMatchingLocale('in', availableLocales), 'id', 'Test deprecated locale'); + t.throws(function () { locale.bestMatchingLocale('en', ['foobar']); }, /foobar/); @@ -56,8 +66,8 @@ tape('test parseLocaleIntoCodes', function(t) { script: 'Hans', region: 'HK' }); - + t.equal(locale.parseLocaleIntoCodes('foobar'), null); - + t.end(); });