Node.js 如何翻译外部路由器,使用i18n+;快车?
目前我已成功集成到路由、请求和配置 应用程序结构Node.js 如何翻译外部路由器,使用i18n+;快车?,node.js,express,i18n-node,Node.js,Express,I18n Node,目前我已成功集成到路由、请求和配置 应用程序结构 app.js-我们的应用程序的入口点。该文件定义了我们的express服务器,并使用mongoose将其连接到MongoDB。它还需要我们将在应用程序中使用的路由和模型 config/-此文件夹包含passport的配置以及配置/环境变量的中心位置 routes/-此文件夹包含API的路由定义 models/-此文件夹包含Mongoose模型的模式定义 路由/api/users.js var mongoose = require('mongo
- app.js-我们的应用程序的入口点。该文件定义了我们的express服务器,并使用mongoose将其连接到MongoDB。它还需要我们将在应用程序中使用的路由和模型
- config/-此文件夹包含passport的配置以及配置/环境变量的中心位置
- routes/-此文件夹包含API的路由定义
- models/-此文件夹包含Mongoose模型的模式定义
var mongoose = require('mongoose');
var router = require('express').Router();
var passport = require('passport');
var User = mongoose.model('User');
var auth = require('../auth');
router.post('/users', function(req, res, next){
var user = new User();
user.username = req.body.user.username;
user.email = req.body.user.email;
user.setPassword(req.body.user.password);
user.save(req, res).then(function(){
return res.json({user: user.toAuthJSON()});
}).catch(next);
});
module.exports = router;
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var secret = require('../config').secret;
var UserSchema = new mongoose.Schema({
username: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/^[a-zA-Z0-9]+$/, 'is invalid'], index: true},
email: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/\S+@\S+\.\S+/, 'is invalid'], index: true},
bio: String,
image: String,
favorites: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Article' }],
following: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
hash: String,
salt: String
}, {timestamps: true});
/**<<HERE>> Does not work inside the models. <<HERE>>**/
UserSchema.plugin(uniqueValidator, {message: i18n.__('user.register.errors.is_already_taken')});
mongoose.model('User', UserSchema);
var http = require('http'),
path = require('path'),
methods = require('methods'),
express = require('express'),
bodyParser = require('body-parser'),
session = require('express-session'),
cors = require('cors'),
passport = require('passport'),
errorhandler = require('errorhandler'),
mongoose = require('mongoose');
cookieParser = require('cookie-parser');
i18n = require('i18n');
var isProduction = process.env.NODE_ENV === 'production';
// Create global app object
var app = express();
app.use(cors());
app.use(cookieParser())
// Configure i18n
i18n.configure({
locales:['en', 'es'],
directory: __dirname + '/locales',
objectNotation: true,
//defaultLocale: 'en',
register: global,
cookie: 'lang'
})
i18n.init();
// you will need to use cookieParser to expose cookies to req.cookies
app.use(cookieParser());
// i18n init parses req for language headers, cookies, etc.
app.use(i18n.init);
// Support "Accept-Language" : "es" or "en" via headers
app.use(function (req, res, next) {
i18n.init(req, res);
if (typeof req.locale !== 'undefined') {
console.log('locale : ', req.locale);
i18n.setLocale(req.locale);
}else{
var locale = i18n.getLocale();
res.set('Content-Language', locale);
}
next();
});
// finally, let's start our server...
var server = app.listen( process.env.PORT || 3000, function(){
console.log('Listening on port ' + server.address().port);
});
models/User.js
var mongoose = require('mongoose');
var router = require('express').Router();
var passport = require('passport');
var User = mongoose.model('User');
var auth = require('../auth');
router.post('/users', function(req, res, next){
var user = new User();
user.username = req.body.user.username;
user.email = req.body.user.email;
user.setPassword(req.body.user.password);
user.save(req, res).then(function(){
return res.json({user: user.toAuthJSON()});
}).catch(next);
});
module.exports = router;
var mongoose = require('mongoose');
var uniqueValidator = require('mongoose-unique-validator');
var crypto = require('crypto');
var jwt = require('jsonwebtoken');
var secret = require('../config').secret;
var UserSchema = new mongoose.Schema({
username: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/^[a-zA-Z0-9]+$/, 'is invalid'], index: true},
email: {type: String, lowercase: true, unique: true, required: [true, "can't be blank"], match: [/\S+@\S+\.\S+/, 'is invalid'], index: true},
bio: String,
image: String,
favorites: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Article' }],
following: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
hash: String,
salt: String
}, {timestamps: true});
/**<<HERE>> Does not work inside the models. <<HERE>>**/
UserSchema.plugin(uniqueValidator, {message: i18n.__('user.register.errors.is_already_taken')});
mongoose.model('User', UserSchema);
var http = require('http'),
path = require('path'),
methods = require('methods'),
express = require('express'),
bodyParser = require('body-parser'),
session = require('express-session'),
cors = require('cors'),
passport = require('passport'),
errorhandler = require('errorhandler'),
mongoose = require('mongoose');
cookieParser = require('cookie-parser');
i18n = require('i18n');
var isProduction = process.env.NODE_ENV === 'production';
// Create global app object
var app = express();
app.use(cors());
app.use(cookieParser())
// Configure i18n
i18n.configure({
locales:['en', 'es'],
directory: __dirname + '/locales',
objectNotation: true,
//defaultLocale: 'en',
register: global,
cookie: 'lang'
})
i18n.init();
// you will need to use cookieParser to expose cookies to req.cookies
app.use(cookieParser());
// i18n init parses req for language headers, cookies, etc.
app.use(i18n.init);
// Support "Accept-Language" : "es" or "en" via headers
app.use(function (req, res, next) {
i18n.init(req, res);
if (typeof req.locale !== 'undefined') {
console.log('locale : ', req.locale);
i18n.setLocale(req.locale);
}else{
var locale = i18n.getLocale();
res.set('Content-Language', locale);
}
next();
});
// finally, let's start our server...
var server = app.listen( process.env.PORT || 3000, function(){
console.log('Listening on port ' + server.address().port);
});
但是,当我尝试在models/中进行翻译时,例如i18n.\uuuuu('my-key'),这不会检测到区域设置,因此这会返回默认“en”的区域设置,但从标头我会正确地接收到语言“es”
请让我知道如何修理:)