I18n res.__() return Undefined

Viewed 21

I try to implement i18n in my express project which supports ts. I have done something like this:-

index.ts

import app from './app';

app.listen(process.env.PORT, () => {
  console.log('Listening to port: ', process.env.PORT);
});

app.ts

import { json } from 'body-parser';
import dotenv from 'dotenv';
dotenv.config();
import express from 'express';
import { I18n } from 'i18n';
import cors from 'cors';
import routes from './routes';
import path from 'path';

const app = express();

const i18n = new I18n({
  locales: ['en', 'de'],
  directory: path.join(__dirname, 'locales'),
  updateFiles: false
});
// set to english
i18n.setLocale('en');
app.use(i18n.init);
app.use(json());
app.use(cors());
app.use(routes);

export default app;

Route.ts

import express from 'express';
import { getUser} from './user';

export = (() => {
  const router = express.Router();
  router.use('/user/profile', getUser);
  router.use('*', () => {
    throw new NotFoundError();
  });
  return router;
})();

Get User Route

getUserProfile.get(
  '/:id',
  async (request: express.Request, response: express.Response) => {
    try {
     // return undefined
      console.log(request.__('Hello'));

      response.json({ err: 0, message: 'Fetch User Successfully' });
    } catch (error: any) {
      response.json({ err: 1, message: error.message, error });
    }
  }
);

Here is my package.json file, I'm using i18n to support multilanguage.

"dependencies": {
    "@azure/identity": "^2.1.0",
    "@azure/msal-node": "^1.12.1",
    "@microsoft/microsoft-graph-client": "^3.0.2",
    "body-parser": "^1.20.0",
    "cors": "^2.8.5",
    "dotenv": "^16.0.1",
    "express": "^4.18.1",
    "express-validator": "^6.14.2",
    "http-status-codes": "^2.2.0",
    "i18n": "^0.15.0",
    "isomorphic-fetch": "^3.0.0",
    "morgan": "^1.10.0",
    "winston": "^3.8.1"
  }
}

Here is my en.json file inside locales folder in root DIR

en.json
{
  "Hello": "Hello World",
  "MESSAGES": {
    "USER_FETCH": "Fetch User Successfully"
  }

I don't have any idea what I'm doing wrong. I just to multi-language support on my application.

0 Answers
Related