middleware.locals back to a middleware, use user specified language if avalaible, list of avalaible languages avalaible in window.env

This commit is contained in:
Matteo Pagliazzi 2013-11-12 15:57:46 +01:00
parent 6e33b88c85
commit 154a652726
3 changed files with 45 additions and 25 deletions

View file

@ -2,6 +2,7 @@ var nconf = require('nconf');
var _ = require('lodash');
var fs = require('fs');
var path = require('path');
var User = require('./models/user').model
module.exports.forceSSL = function(req, res, next){
var baseUrl = nconf.get("BASE_URL");
@ -96,23 +97,41 @@ var getTranslatedString = function(locale, string){
return 'String not found!';
}
var getUserLanguage = function(langs){
return _(langs).map(function(lang){
return lang.slice(0, 2);
}).uniq().value()[0];
var getUserLanguage = function(req, callback){
var getFromBrowser = function(){
return _(req.acceptedLanguages).map(function(lang){
return lang.slice(0, 2);
}).uniq().value()[0];
};
if(req.session && req.session.userId){
User.findOne({_id: req.session.userId}, function(err, user){
if(err) return callback(err);
return callback(null, user.preferences.language || getFromBrowser());
});
}else{
return callback(null, getFromBrowser());
}
}
module.exports.locals = function(req) {
return {
NODE_ENV: nconf.get('NODE_ENV'),
BASE_URL: nconf.get('BASE_URL'),
PAYPAL_MERCHANT: nconf.get('PAYPAL_MERCHANT'),
IS_MOBILE: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')),
STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'),
getManifestFiles: getManifestFiles,
getBuildUrl: getBuildUrl,
t: function(string){
return getTranslatedString(getUserLanguage(req.acceptedLanguages), string);
module.exports.locals = function(req, res, next) {
getUserLanguage(req, function(err, language){
if(err) return res.json(500, {err: err});
res.locals.habitrpg = {
NODE_ENV: nconf.get('NODE_ENV'),
BASE_URL: nconf.get('BASE_URL'),
PAYPAL_MERCHANT: nconf.get('PAYPAL_MERCHANT'),
IS_MOBILE: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(req.header('User-Agent')),
STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'),
getManifestFiles: getManifestFiles,
getBuildUrl: getBuildUrl,
avalaibleLanguages: Object.keys(translations),
t: function(string){
return getTranslatedString(language, string);
}
}
}
next();
});
}

View file

@ -172,7 +172,8 @@ var UserSchema = new Schema({
hideHeader: {type:Boolean, 'default':false},
showHelm: {type:Boolean, 'default':true},
skin: {type:String, 'default':'white'},
timezoneOffset: Number
timezoneOffset: Number,
language: String
},
profile: {
blurb: String,

View file

@ -5,30 +5,30 @@ var _ = require('lodash');
var middleware = require('../middleware')
// -------- App --------
router.get('/', function(req, res) {
router.get('/', middleware.locals, function(req, res) {
if (!req.headers['x-api-user'] && !req.headers['x-api-key'] && !(req.session && req.session.userId))
return res.redirect('/static/front')
return res.render('index', {
title: 'HabitRPG | Your Life, The Role Playing Game',
env: middleware.locals(req)
env: res.locals.habitrpg
});
});
// -------- Marketing --------
router.get('/static/front', function(req, res) {
var env = middleware.locals(req);
router.get('/static/front', middleware.locals, function(req, res) {
var env = res.locals.habitrpg;
env.isFrontPage = true;
res.render('static/front', {env: env});
});
router.get('/static/privacy', function(req, res) {
res.render('static/privacy', {env: middleware.locals(req)});
router.get('/static/privacy', middleware.locals, function(req, res) {
res.render('static/privacy', {env: res.locals.habitrpg});
});
router.get('/static/terms', function(req, res) {
res.render('static/terms', {env: middleware.locals(req)});
router.get('/static/terms', middleware.locals, function(req, res) {
res.render('static/terms', {env: res.locals.habitrpg});
});
// --------- Redirects --------