Skip to content

Language getting detected but translation not working with i18n

I have set up the i18n middleware in my Express Node js server like this:

// server.js
import i18nMiddleware from 'i18next-express-middleware';
import i18n from 'i18next';
import Backend from 'i18next-node-fs-backend';
import { LanguageDetector } from 'i18next-express-middleware';
    whitelist: ['en', 'my'],
    fallbackLng: 'en',
    // have a common namespace used around the full app
    ns: ['common'],
    defaultNS: 'common',
    debug: false,
    backend: {
        loadPath: './locales/{{lng}}/{{ns}}.json',
        // jsonIndent: 2

Here is the translation test file:

// test.js
import i18next from "i18next";
const test = (req, res) =>{
    const t = req.i18n.t.bind(i18next);
    console.log(req.i18n.language) // language set correctly :)
    console.log(t('title')) // translation not working :(

The value of title in English is title and for Malaysian, it’s tajuk

As per the express middleware documentation, I’m passing my as the accept-language header , and console.log(req.i18n.language) is correctly printing it.

However, console.log(t('title')) is still printing title instead of tajuk


This looks crazy but this solved the problem:

const i18n = req.i18n;