2017-09-01 4 views
5

私は自分のウェブサイトにローカリゼーションを追加しようとしています。私はi18nをインストールし、スペイン語と英語で2つのローカリゼーションjsonファイルを作成し、app.jsファイルに設定を追加します。 app.jsファイルはこれです:i18nはローカライズURLを使用できません

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; 

私は、URL mywebsite.com/enまたはmywebsite.com/enを書くときそれを動作させるためにしたいが、それは私がこの文書を追跡しようとしたそれらを見つけることができません。 :

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

とdiferentフォーラムに見えるが、解決策のどれも私のために働いていません。正しく動作させるために欠けているのは何ですか?私はルートを変更する必要があることを知ったが、私もそれを試みるし、それは動作しませんでした。

EDIT

は、私は少し私はウェブで見た別のチュートリアル以下app.jsファイルを変更しました。今すぐ私はmywebsite.com/enに行くと完璧に動作しますが、私がmywebsite.com/esに行くと、それは翻訳されません。私はes.jsonファイルの変換でこれを持っている場合

ので:私はmywebsite.com/esに行くとき

{ 
login:{ 
    title: "Bienvenido" 
} 
} 

はlogin.titleルータ/ index.jsで

が表示されますIこれを持っている:私はあなたの問題は、国際化ライブラリで使用されていると思いますので、

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) –

答えて

0

あなたはそれをうまく構成され、問題はあなたがそれを共有していなかったということです。 私はこのtuturial乗り越えrecommandます:

https://www.sitepoint.com/how-to-implement-internationalization-i18n-in-javascript

そして、あなたがそのように使うの見出しを書くためにどのような場合には必ずexmpleのために、正しい方法でliraryを使用すること:

var headline = i18n.__('Main Headline');

関連する問題