fix: #7038, autoLocale logic not playing nicely with no-refresh auths (#7059)

* fix: #7038, autoLocale logic not playing nicely with no-refresh auths

- on login, req.query.lang is deleted (since it seems to be left over)
- on logout, the middleware.autoLocale is executed, which resets
  req.query.lang
- middleware.autoLocale is new, just refactored existing logic in
  webserver.js into new middleware method.

* style: tests, use lodash

* fix: timeago strings not switching languages on login or out
This commit is contained in:
Julian Lam
2018-12-07 11:29:20 -05:00
committed by GitHub
parent 72f56d7f49
commit 5f3d1c76c8
6 changed files with 56 additions and 42 deletions

View File

@@ -2,8 +2,10 @@
var os = require('os');
var winston = require('winston');
var _ = require('lodash');
var meta = require('../meta');
var languages = require('../languages');
module.exports = function (middleware) {
middleware.addHeaders = function (req, res, next) {
@@ -60,4 +62,30 @@ module.exports = function (middleware) {
next();
};
let langs = [];
middleware.autoLocale = function (req, res, next) {
if (parseInt(req.uid, 10) > 0 || !meta.config.autoDetectLang) {
return next();
}
var lang = req.acceptsLanguages(langs);
if (!lang) {
return next();
}
req.query.lang = lang;
next();
};
languages.listCodes(function (err, codes) {
if (err) {
winston.error('[middleware/autoLocale] Could not retrieve languages codes list!');
codes = [];
}
winston.verbose('[middleware/autoLocale] Retrieves languages list for middleware');
var defaultLang = meta.config.defaultLang || 'en-GB';
langs = _.uniq([defaultLang, ...codes]);
});
};