From 2476221b792da3ec926fdf35b24acc1c6d358709 Mon Sep 17 00:00:00 2001
From: Peter Jaszkowiak
Date: Thu, 20 Apr 2017 00:16:10 -0600
Subject: [PATCH] Close #3462, automatically detect user language based on
browser accepts header
---
src/webserver.js | 48 +++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/src/webserver.js b/src/webserver.js
index 94684d8e24..3911846b67 100644
--- a/src/webserver.js
+++ b/src/webserver.js
@@ -55,13 +55,16 @@ module.exports.listen = function (callback) {
callback = callback || function () { };
emailer.registerApp(app);
- setupExpressApp(app);
-
- helpers.register();
-
- logger.init(app);
-
async.waterfall([
+ function (next) {
+ setupExpressApp(app, next);
+ },
+ function (next) {
+ helpers.register();
+
+ logger.init(app);
+ next();
+ },
initializeNodeBB,
function (next) {
winston.info('NodeBB Ready');
@@ -110,7 +113,7 @@ function initializeNodeBB(callback) {
});
}
-function setupExpressApp(app) {
+function setupExpressApp(app, callback) {
var middleware = require('./middleware');
var relativePath = nconf.get('relative_path');
@@ -155,6 +158,8 @@ function setupExpressApp(app) {
var toobusy = require('toobusy-js');
toobusy.maxLag(parseInt(meta.config.eventLoopLagThreshold, 10) || 100);
toobusy.interval(parseInt(meta.config.eventLoopInterval, 10) || 500);
+
+ setupAutoLocale(app, callback);
}
function setupFavicon(app) {
@@ -188,6 +193,35 @@ function setupCookie() {
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) {
callback = callback || function () { };
var port = parseInt(nconf.get('port'), 10);