Files
habitica/website/server/middlewares/language.js
2021-11-17 10:46:46 -06:00

52 lines
1.3 KiB
JavaScript

import { model as User } from '../models/user';
import common from '../../common';
import {
translations,
} from '../libs/i18n';
import {
getLanguageFromUser,
getLanguageFromBrowser,
} from '../libs/language';
const { i18n } = common;
export function attachTranslateFunction (req, res, next) {
res.t = function reqTranslation (...args) {
return i18n.t(...args, req.language);
};
next();
}
export function getUserLanguage (req, res, next) {
// In case the language is specified in the request url, use intersection
if (req.query.lang) {
req.language = translations[req.query.lang] ? req.query.lang : 'en';
return next();
}
// If the request is authenticated, use the user's preferred language
if (res.locals && res.locals.user) {
req.language = getLanguageFromUser(res.locals.user, req);
return next();
}
// Same thing if the user has a valid session
if (req.session && req.session.userId) {
return User.findOne({
_id: req.session.userId,
}, 'preferences.language')
.lean()
.exec()
.then(user => {
req.language = getLanguageFromUser(user, req);
return next();
})
.catch(next);
}
// Otherwise get from browser
req.language = getLanguageFromBrowser(req);
return next();
}