I am setting up i18next-http-middleware with my express app. My goal is to have the language detected based on the query string ‘lng’ for each request. When following the documentation as I understand it, I get this error:
TypeError: req.t is not a function
Here is my init setup:
const express = require("express");
const bodyParser = require("body-parser");
const i18next = require('i18next');
const middleware = require('i18next-http-middleware');
const Backend = require('i18next-fs-backend');
const logger = require('./util/logger');
const translationTest = require('./translationTest');
const router = express.Router();
router.use('/translation', translationTest);
i18next
.use(Backend)
.use(middleware.LanguageDetector)
.init({
ns: ['common'],
defaultNS: 'common',
preload: ['en', 'de'],
fallbackLng: 'en',
// supportedLngs: ['en', 'de'],
detection: {
order: ['querystring'],
lookupQuerystring: 'lng',
caches: false,
ignoreCase: true
},
debug: true,
backend: {
loadPath: 'locales/{{ns}}/{{ns}}_{{lng}}.json'
},
initImmediate: false
});
const app = express();
app.use(logger);
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use('/', router);
app.use(middleware.handle(i18next));
const port = parseInt(process.env.PORT) || 3000;
const server = app.listen(port, () => {
console.log(`Listening at http://localhost:${port}`);
});
And my test file:
const express = require('express');
const router = express.Router();
router.get("/", async (req, res) => {
res.send(req.t('common:test'));
});
module.exports = router;