Skip to content

Commit

Permalink
Merge 4758d20 into 838f6cf
Browse files Browse the repository at this point in the history
  • Loading branch information
RhobW committed Aug 3, 2020
2 parents 838f6cf + 4758d20 commit 681a34b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 7 deletions.
35 changes: 29 additions & 6 deletions i18n.js
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,28 @@ module.exports = (function() {
return filename.replace(prefix, '').replace(extensionRegex, '');
};

/**
* @param queryLanguage - language query parameter, either an array or a string.
* @return the first non-empty language query parameter found, null otherwise.
*/
function extractQueryLanguage(queryLanguage) {
let language = null;

if (Array.isArray(queryLanguage)) {
for (let i = 0; i < queryLanguage.length; ++i) {
if (queryLanguage[i] && (queryLanguage[i] !== '')) {
language = queryLanguage[i];
break;
}
}
} else if (queryLanguage !== '') {
language = queryLanguage;
}

return language;
}


/**
* guess language setting based on http headers
*/
Expand All @@ -676,15 +698,16 @@ module.exports = (function() {
if (queryParameter && request.url) {
var urlAsString = typeof request.url === 'string' ? request.url : request.url.toString();
var urlObj = url.parse(urlAsString, true);
if (urlObj.query[queryParameter]) {
logDebug('Overriding locale from query: ' + urlObj.query[queryParameter]);
request.language = urlObj.query[queryParameter];
var languageQueryParameter = urlObj.query[queryParameter];
if (languageQueryParameter) {
logDebug('Overriding locale from query: ' + languageQueryParameter);
let queryLanguage = extractQueryLanguage(languageQueryParameter);

if (preserveLegacyCase) {
request.language = request.language.toLowerCase();
if (queryLanguage && preserveLegacyCase) {
queryLanguage = queryLanguage.toLowerCase();
}

return i18n.setLocale(request, request.language);
return i18n.setLocale(request, queryLanguage);
}
}

Expand Down
20 changes: 19 additions & 1 deletion test/i18n.configureQueryParameter.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,22 @@ describe('Locale switching should work queryParameter', function() {
i18n.getLocale(req).should.equal('fr');
i18n.getLocale(res).should.equal('fr');
});
});

it('should handle multiple query parameters', function() {
const uriPath = '/test?lang=de&lang=fr';
req.request = `GET ${uriPath}`;
req.url = new URL(uriPath, 'http://localhost');
i18n.init(req, res);
i18n.getLocale(req).should.equal('de');
i18n.getLocale(res).should.equal('de');
});

it('should handle multiple query parameters, first is empty', function() {
const uriPath = '/test?lang=&lang=de';
req.request = `GET ${uriPath}`;
req.url = new URL(uriPath, 'http://localhost');
i18n.init(req, res);
i18n.getLocale(req).should.equal('de');
i18n.getLocale(res).should.equal('de');
});
});

0 comments on commit 681a34b

Please sign in to comment.