2017-09-01 14 views
5

का उपयोग नहीं कर सकता मैं अपनी वेबसाइट पर स्थानीयकरण जोड़ने की कोशिश कर रहा हूं। मैं i18n स्थापित करता हूं, स्पेनिश और अंग्रेजी में 2 स्थानीयकरण जेसन फाइलें बनाता हूं और मैं app.js फ़ाइल में कॉन्फ़िगरेशन जोड़ता हूं। app.js फ़ाइल यह है:i18n स्थानीयकरण यूआरएल

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

और विभिन्न मंचों में लग रही है लेकिन समाधान में से कोई भी मेरे लिए काम किया। इसे ठीक से काम करने के लिए क्या गुम है? मैंने देखा कि मार्गों को संशोधित करना है, लेकिन मैं भी कोशिश करता हूं और यह काम नहीं करता है।

संपादित

मैं एक ट्यूटोरियल है कि मैं वेब में देखा था निम्नलिखित थोड़ा 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) –

उत्तर

0

आप इसे अच्छी तरह से कॉन्फ़िगर किया गया तो मैं लगता है कि आपकी समस्या का i18n पुस्तकालय पर उपयोग में है, समस्या यह है कि आप इसे साझा नहीं किया है। मैं इस tuturial पर जाने recommand होगा:

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

और तुम अगर तुम क्या एक शीर्षक लिखने के लिए exmple के लिए सही तरीके से lirary उपयोग करते हैं, इस तरह के रूप में इसका इस्तेमाल सुनिश्चित करने के:

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

संबंधित मुद्दे