Skip to content

Commit

Permalink
Account for differences in accept-language header
Browse files Browse the repository at this point in the history
  • Loading branch information
codechennerator authored and jannyHou committed Feb 4, 2020
1 parent 63ffd0d commit 39fa0dd
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 4 deletions.
6 changes: 4 additions & 2 deletions packages/runtime/src/helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -865,13 +865,15 @@ export function getLanguageFromRequest(
appLanguages: string[],
defaultLanguage: string
): string {
if (!req || !req.headers) {
if (!req || !req.headers || !req.headers['accept-language']) {
return defaultLanguage;
}

let languages = req.headers['accept-language'].split(',');
for (let i = 0; i < languages.length; i++) {
languages[i] = getLangAlias(languages[i]);
let languageWeighted = languages[i].split(';');
languageWeighted[0] = getLangAlias(languageWeighted[0].trim());
languages[i] = languageWeighted.join(';');
}
const reqLanguage = languages.join(',');
if (!reqLanguage) {
Expand Down
52 changes: 50 additions & 2 deletions packages/runtime/test/test-load-msg.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ var test = require('tap').test;

SG.SetRootDir(__dirname);
SG.SetDefaultLanguage();
SG.SetAppLanguages(['en', 'zh-Hans']);
SG.SetAppLanguages(['en', 'zh-Hans', 'zh-Hant']);

var g = new SG();

Expand Down Expand Up @@ -56,7 +56,36 @@ test('remove double curly braces', function(t) {
t.equal(source.msgError, targetMsg, 'Remove double curly braces.');
t.end();
});

test('no accept-language header', function(t) {
var req = {
headers: {
accept: 'application/json',
},
};
var message = g.http(req).f('Test message');
t.equal(message, 'Test message');
t.end();
});
test('empty accept-language header', function(t) {
var req = {
headers: {
'accept-language': '',
},
};
var message = g.http(req).f('Test message');
t.equal(message, 'Test message');
t.end();
});
test('accept-language header - *', function(t) {
var req = {
headers: {
'accept-language': '*',
},
};
var message = g.http(req).f('Test message');
t.equal(message, 'Test message');
t.end();
});
test('accept-language header - en', function(t) {
var req = {
headers: {
Expand Down Expand Up @@ -84,3 +113,22 @@ test('accept-language header - alias', function(t) {
t.equal(cachedSg.getLanguage(), 'zh-Hans');
t.end();
});

test('multiple, weighted, accept-language header with alias', function(t) {
var req = {
headers: {
'accept-language':
'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7 zh-cn;q=0.7, zh-tw;q=0.9 *;q=0.5',
},
};
// create a SG instance for language 'zh-Hans' and register it
var sg_hant = new SG({language: 'zh-Hant'});
SG.sgCache.set('zh-Hant', sg_hant);

var cachedSg = g.http(req);
t.equal(cachedSg.getLanguage(), 'zh-Hant');

var message = g.http(req).f('log');
t.equal(message, '原木');
t.end();
});

0 comments on commit 39fa0dd

Please sign in to comment.