Close #3462, automatically detect user language based on browser accepts header

v1.18.x
Peter Jaszkowiak 8 years ago
parent 413bb4736c
commit 2476221b79

@ -55,13 +55,16 @@ module.exports.listen = function (callback) {
callback = callback || function () { }; callback = callback || function () { };
emailer.registerApp(app); emailer.registerApp(app);
setupExpressApp(app); async.waterfall([
function (next) {
setupExpressApp(app, next);
},
function (next) {
helpers.register(); helpers.register();
logger.init(app); logger.init(app);
next();
async.waterfall([ },
initializeNodeBB, initializeNodeBB,
function (next) { function (next) {
winston.info('NodeBB Ready'); winston.info('NodeBB Ready');
@ -110,7 +113,7 @@ function initializeNodeBB(callback) {
}); });
} }
function setupExpressApp(app) { function setupExpressApp(app, callback) {
var middleware = require('./middleware'); var middleware = require('./middleware');
var relativePath = nconf.get('relative_path'); var relativePath = nconf.get('relative_path');
@ -155,6 +158,8 @@ function setupExpressApp(app) {
var toobusy = require('toobusy-js'); var toobusy = require('toobusy-js');
toobusy.maxLag(parseInt(meta.config.eventLoopLagThreshold, 10) || 100); toobusy.maxLag(parseInt(meta.config.eventLoopLagThreshold, 10) || 100);
toobusy.interval(parseInt(meta.config.eventLoopInterval, 10) || 500); toobusy.interval(parseInt(meta.config.eventLoopInterval, 10) || 500);
setupAutoLocale(app, callback);
} }
function setupFavicon(app) { function setupFavicon(app) {
@ -188,6 +193,35 @@ function setupCookie() {
return cookie; return cookie;
} }
function setupAutoLocale(app, callback) {
languages.listCodes(function (err, codes) {
if (err) {
return callback(err);
}
var defaultLang = meta.config.defaultLang || 'en-GB';
var langs = [defaultLang].concat(codes).filter(function (el, i, arr) {
return arr.indexOf(el) === i;
});
app.use(function (req, res, next) {
if (parseInt(req.uid, 10) > 0) {
return next();
}
var lang = req.acceptsLanguages(langs);
if (!lang) {
return next();
}
req.query.lang = lang;
next();
});
callback();
});
}
function listen(callback) { function listen(callback) {
callback = callback || function () { }; callback = callback || function () { };
var port = parseInt(nconf.get('port'), 10); var port = parseInt(nconf.get('port'), 10);

Loading…
Cancel
Save