2017-09-01 83 views
5

我想添加本地化到我的網站。我安裝i18n,用西班牙語和英語創建2個本地化json文件,並在app.js文件中添加配置。在app.js文件是這樣的:國際化域名不能使用本地化網址

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var i18n = require("i18n"); 
var session = require('express-session'); 
var RedisStore = require('connect-redis')(session); 
var request = require('request'); 
var flash = require('express-flash'); 
var winston = require('winston'); 

winston.add(winston.transports.File, { name: 'app-info', maxFiles: 3, filename: 'logs/app-info.log', level: 'info' }); 
winston.add(winston.transports.File, { name: 'app-error', maxFiles: 3, filename: 'logs/app-error.log', level: 'error' }); 

require('dotenv').config(); 
var app_port = process.env.APP_PORT; 


var fs = require('fs'); 


var app = express(); 
app.listen(app_port, function(){ 
    console.log('listening on *:' + app_port); 
}); 

// Include php notifications 
var notifications = require('./phpmonitor'); 


// Define routes 
var routes = require('./routes/index'); 
var login = require('./routes/login'); 
var doctors = require('./routes/doctors'); 
var new_appointment = require('./routes/new_appointment'); 
var new_appointment_medicine = require('./routes/new_appointment_medicine'); 
var new_appointment_psychology = require('./routes/new_appointment_psychology'); 
var appointments = require('./routes/appointments'); 
var videoconference = require('./routes/videoconference'); 
var user = require('./routes/user'); 
var user_doctor = require('./routes/user_doctor'); 
var doctor = require('./routes/doctor'); 
var history = require('./routes/history'); 
var public = require('./routes/public'); 
var ajax = require('./routes/ajax'); 
var patients = require('./routes/patients'); 


// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// i18n setup 
i18n.configure({ 
    locales:['es', 'en'], 
    defaultLocale: 'es', 
    objectNotation : true, 
    queryParameter: 'lang', 
    cookie: 'i18n', 
    syncFiles: true, 
    updateFiles: true, 
    directory: __dirname + '/locales' 
}); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(flash()); 



app.use(i18n.init); 
app.locals.request = request.defaults({jar: true}); 
app.locals.winston = winston; 

// Set session 
app.use(session({ 
    store: new RedisStore, 
    secret: 'Y0V3NJS58jP61lfQjPn8gm99Cb2Ppl6y', 
    resave: true, 
    saveUninitialized: false, 
})); 

// Global use, set locale and basic locals 
app.use(function(req, res, next) { 

    var cookie = req.cookies.i18n; 
    if (cookie === undefined) { 
    res.cookie('i18n', 'es', { maxAge: 900000000, httpOnly: true }); 
    } 

    // Wizard cookie 
    var cookie_wizard = req.cookies.omnidoctor_wizard; 
    if (cookie_wizard === undefined) { 
    res.locals.wizard_cookies  = 'pending'; 
    } 

    // Accept cookies 
    var accept_cookies = req.cookies.omnidoctor_cookies; 
    if (accept_cookies === undefined) { 
    res.locals.accept_cookies  = 'pending'; 
    } 

    i18n.setLocale(req, i18n.getLocale()); 
    app.locals.api   = process.env.API_URL; 
    app.locals.site_url  = process.env.SITE_URL; 
    app.locals.site_protocol = process.env.SITE_PROTOCOL; 
    app.locals.socket_port = process.env.SOCKET_PORT; 
    res.locals.analytics  = process.env.ANALYTICS; 

    // Load moment with i18n locale 
    app.locals.moment = require('moment'); 
    app.locals.moment.locale(i18n.getLocale()); 

    next(); 
}); 

app.use('/', routes); 
app.use('/', login); 
app.use('/doctors', doctors); 
app.use('/history', history); 
app.use('/new-appointment/medicine', new_appointment_medicine); 
app.use(['/new-appointment/psychiatry', '/new-appointment/psychology'], new_appointment_psychology); 
app.use('/new-appointment', new_appointment); 
app.use('/appointments', appointments); 
app.use('/videoconference', videoconference); 
app.use('/', user); 
app.use('/', user_doctor); 
app.use('/', public); 
app.use('/doctor', doctor); 
app.use('/ajax', ajax); 
app.use('/patients', patients); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

/*app.listen(3500, function() { 
    console.log("express has started on port 3500"); 
});*/ 

module.exports = app; 

我想讓我寫的網址mywebsite.com/en或mywebsite.com/en它的工作,但它沒有找到他們,我試圖按照本文檔:

https://www.npmjs.com/package/i18n

,並期待在diferent論壇,但沒有一個解決方案爲我工作。缺少什麼使其正常工作?我看到路線必須修改,但我也嘗試了,而且沒有奏效。

編輯

我改變了一下app.js文件下面另一個教程,我在網上看到的。現在當我去mywebsite.com/en它完美的作品,但是當我去mywebsite.com/es它不翻譯它。

所以,如果我有這樣的es.json文件翻譯:

{ 
login:{ 
    title: "Bienvenido" 
} 
} 

當我去mywebsite.com/es即會出現login.title

在路由器/ index.js我有這樣的:

router.get('/', requireLogin, function(req, res, next) { 

    request = req.app.locals.request; 

    res.setLocale(req.cookies.i18n); 

    if(req.session.role == 'doctor') { 

    var locals = { 
     i18n: res 
    }; 

    res.render('index', locals); 
    } 

}); 

router.get('/es', function (req, res) { 
    res.cookie('i18n', 'es'); 
    res.redirect('/') 
}); 

router.get('/en', function (req, res) { 
    res.cookie('i18n', 'en'); 
    res.redirect('/') 
}); 
+0

您是否可以減少代碼以提供最小的錯誤演示?描述究竟發生了什麼。像*這樣的短語不能使用url *,*它沒有找到它們*,*它沒有用*對理解你的問題沒有幫助。 – yacc

+0

@yacc我想要的是,當我寫mywebsite.com/en時,網頁以英文顯示,當我用西班牙文輸入mywebsite.com/es時。我有這個app.js文件,我也準備好了es.json和en.json文件,但是當我鍵入mywebsite.com/en時,它給了我一個未找到的錯誤(錯誤500) –

回答