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模型的模式定义

路由/api/users.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/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”

请让我知道如何修理:)