Если вы внимательно прочитаете документы в разделе Использование с Express.js , это четко документирует, как оно используется.После привязки i18n
к экспресс-приложению через i18n.expressBind
, i18n
становится доступным через объект req
, доступный для всех промежуточных программных продуктов экспрессии, таких как:
req.i18n.__("My Site Title")
Так что somefunction
должен быть либо промежуточным ПОнапример:
function somefunction(req, res, next) {
// notice how its invoked through the req object
const message = req.i18n.__("no_user_to_select") + "???";
// outputs -> no_user_to_select???
}
Или вам нужно явно передать объект req
через промежуточное ПО, например:
function somefunction(req) {
const message = req.i18n.__("no_user_to_select") + "???";
// outputs -> no_user_to_select???
}
app.use((req, res, next) => {
somefunction(req);
});
Если вы хотите использовать i18n
напрямую, вам нужно instantiate
это как документировано, как
const I18n = require('i18n-2');
// make an instance with options
var i18n = new I18n({
// setup some locales - other locales default to the first locale
locales: ['en', 'de']
});
// set it to global as in your question
// but many advise not to use global
global.i18n = i18n;
// use anywhere
somefunction() {
const message = i18n.__("no_user_to_select") + "???";
// outputs -> no_user_to_select???
}
Многие препятствуют использованию глобальных.
// international.js
// you can also export and import
const I18n = require('i18n-2');
// make an instance with options
var i18n = new I18n({
// setup some locales - other locales default to the first locale
locales: ['en', 'de']
});
module.exports = i18n;
// import wherever necessary
const { i18n } = require('./international');