Merge pull request #5692 from Rob--W/webl10n-fix
[l10n] Treat language as case-insensitive
This commit is contained in:
commit
da258f8972
28
external/webL10n/l10n.js
vendored
28
external/webL10n/l10n.js
vendored
@ -142,7 +142,7 @@ document.webL10n = (function(window, document, undefined) {
|
||||
* URL of the l10n resource to parse.
|
||||
*
|
||||
* @param {string} lang
|
||||
* locale (language) to parse.
|
||||
* locale (language) to parse. Must be a lowercase string.
|
||||
*
|
||||
* @param {Function} successCallback
|
||||
* triggered when the l10n resource has been successully parsed.
|
||||
@ -188,7 +188,7 @@ document.webL10n = (function(window, document, undefined) {
|
||||
function parseRawLines(rawText, extendedSyntax) {
|
||||
var entries = rawText.replace(reBlank, '').split(/[\r\n]+/);
|
||||
var currentLang = '*';
|
||||
var genericLang = lang.replace(/-[a-z]+$/i, '');
|
||||
var genericLang = lang.split('-', 1)[0];
|
||||
var skipLang = false;
|
||||
var match = '';
|
||||
|
||||
@ -203,7 +203,9 @@ document.webL10n = (function(window, document, undefined) {
|
||||
if (extendedSyntax) {
|
||||
if (reSection.test(line)) { // section start?
|
||||
match = reSection.exec(line);
|
||||
currentLang = match[1];
|
||||
// RFC 4646, section 4.4, "All comparisons MUST be performed
|
||||
// in a case-insensitive manner."
|
||||
currentLang = match[1].toLowerCase();
|
||||
skipLang = (currentLang !== '*') &&
|
||||
(currentLang !== lang) && (currentLang !== genericLang);
|
||||
continue;
|
||||
@ -268,6 +270,12 @@ document.webL10n = (function(window, document, undefined) {
|
||||
|
||||
// load and parse all resources for the specified locale
|
||||
function loadLocale(lang, callback) {
|
||||
// RFC 4646, section 2.1 states that language tags have to be treated as
|
||||
// case-insensitive. Convert to lowercase for case-insensitive comparisons.
|
||||
if (lang) {
|
||||
lang = lang.toLowerCase();
|
||||
}
|
||||
|
||||
callback = callback || function _callback() {};
|
||||
|
||||
clear();
|
||||
@ -282,7 +290,19 @@ document.webL10n = (function(window, document, undefined) {
|
||||
var dict = getL10nDictionary();
|
||||
if (dict && dict.locales && dict.default_locale) {
|
||||
console.log('using the embedded JSON directory, early way out');
|
||||
gL10nData = dict.locales[lang] || dict.locales[dict.default_locale];
|
||||
gL10nData = dict.locales[lang];
|
||||
if (!gL10nData) {
|
||||
var defaultLocale = dict.default_locale.toLowerCase();
|
||||
for (var anyCaseLang in dict.locales) {
|
||||
anyCaseLang = anyCaseLang.toLowerCase();
|
||||
if (anyCaseLang === lang) {
|
||||
gL10nData = dict.locales[lang];
|
||||
break;
|
||||
} else if (anyCaseLang === defaultLocale) {
|
||||
gL10nData = dict.locales[defaultLocale];
|
||||
}
|
||||
}
|
||||
}
|
||||
callback();
|
||||
} else {
|
||||
console.log('no resource to load, early way out');
|
||||
|
@ -447,20 +447,10 @@ if (typeof PDFJS === 'undefined') {
|
||||
|
||||
// Checks if navigator.language is supported
|
||||
(function checkNavigatorLanguage() {
|
||||
if ('language' in navigator &&
|
||||
/^[a-z]+(-[A-Z]+)?$/.test(navigator.language)) {
|
||||
if ('language' in navigator) {
|
||||
return;
|
||||
}
|
||||
function formatLocale(locale) {
|
||||
var split = locale.split(/[-_]/);
|
||||
split[0] = split[0].toLowerCase();
|
||||
if (split.length > 1) {
|
||||
split[1] = split[1].toUpperCase();
|
||||
}
|
||||
return split.join('-');
|
||||
}
|
||||
var language = navigator.language || navigator.userLanguage || 'en-US';
|
||||
PDFJS.locale = formatLocale(language);
|
||||
PDFJS.locale = navigator.userLanguage || 'en-US';
|
||||
})();
|
||||
|
||||
(function checkRangeRequests() {
|
||||
|
Loading…
Reference in New Issue
Block a user