我有一个想要国际化的快速后端。我要:
这听起来像是一个原始问题,但是即使阅读了i18next文档,我仍然不知道应该如何重用已初始化的i18next实例。如果使用i18next-express-middleware,则可以在路由中使用t()
方法。很好,但是如果我想在模型或其他文件中使用它,例如在模型中,该怎么办?
我不喜欢通过参数将其传递给每个模型方法的想法。我不能简单地在每个文件中执行import i18next from 'i18next'
,因为它将返回一个新实例。我无法在异步函数中将实例初始化然后返回它的实例中创建js文件,因为我无法通过app.js(我的快速应用程序的根文件)中的await调用异步函数。我是否要在未为其构建用例的情况下强制使用它?
谢谢您的提示。
答案 0 :(得分:0)
const express = require('express');
const i18next = require('i18next');
const i18nextMiddleware = require('i18next-express-middleware');
const app = express();
i18next
.use(i18nextMiddleware.LanguageDetector)
.init({
preload: ['de', 'en'],
fallbackLng: 'en',
resources: {
en: {
translation: {
key: 'hello world'
}
}, // ...
},
detection: {
// order and from where user language should be detected
order: [/*'path', 'session', */ 'querystring', 'cookie', 'header'],
// keys or params to lookup language from
lookupQuerystring: 'lng',
lookupCookie: 'i18next',
lookupHeader: 'accept-language',
lookupSession: 'lng',
lookupPath: 'lng',
lookupFromPathIndex: 0,
// cache user language
caches: false, // ['cookie']
// optional expire and domain for set cookie
cookieExpirationDate: new Date(),
cookieDomain: `${config.Host.hostname.replace(/^https?:\/\//, '')}`,
cookieSecure: true // if need secure cookie
}
});
app.use(
i18nextMiddleware.handle(i18next, {
// options
})
);
app.use((req, res, next) => {
i18next.changeLanguage(req.language);
});
从文档中收集
expressjs.com/en/guide/using-middleware.html
github.com/i18next/i18next
github.com/i18next/i18next-express-middleware