Estoy trabajando en una aplicación React con backend NodeJS . Como Middleware, estaba usando Koa antes, ahora cambié a ExpressJS .
Necesito ajustar las traducciones de i18n a Express.
Hice todo lo que se explica en la documentación, pero, sin embargo, recibo el siguiente error al consultar mis archivos .json:
" No se puede OBTENER /locales/resources.json "
Ni siquiera configuro estos archivos en esta ruta.
Mis traducciones se guardan en, por ejemplo: "packages/backend/src/i18n/de-DE/common.json"
=> "paquetes/backend/src/i18n/ etiqueta de idioma /common.json"
Aquí está mi router.ts:
import * as Express from 'express'; import documentRouter from './documentRouter'; import pdfRouter from './pdfRouter'; import debugRouter from './debugRouter'; import * as i18next from 'i18next'; // @ts-ignore import * as Backend from 'i18next-node-fs-backend'; // @ts-ignore import middleware from 'i18next-express-middleware'; // @ts-ignore i18next.use(Backend) .use(middleware.LanguageDetector) .init({ initImmediate: false, backend: { // translation resources loadPath: __dirname + '../i18n/{{lng}}/{{ns}}.json' // addPath: __dirname, '../i18n/{{lng}}/{{ns}}.missing.json' }, preload: ['en-US', 'en-GB', 'de-DE', 'fr-FR'], fallbackLng: 'de-DE', }); const app = Express(); // @ts-ignore app.use(middleware.handle(i18next)); export default (app: Express.Application) => { app.use([debugRouter, documentRouter, pdfRouter]); };la configuración anterior se veía así:
import * as Koa from 'koa'; import documentRouter from './documentRouter'; import errorReportsRouter from './errorReportsRouter'; import pdfRouter from './pdfRouter'; import debugRouter from './debugRouter'; import * as i18next from 'i18next'; // @ts-ignore import * as Backend from 'i18next-fs-backend'; // @ts-ignore import * as koaI18next from 'koa-i18next'; // @ts-ignore i18next.use(Backend).init({ initImmediate: false, backend: { // translation resources loadPath: path.resolve(__dirname, '../i18n/{{lng}}/{{ns}}.json'), addPath: path.resolve(__dirname, '../i18n/{{lng}}/{{ns}}.missing.json'), }, preload: ['en-US', 'en-GB', 'de-DE', 'fr-FR'], fallbackLng: 'de-DE', }); export default (app: Koa) => { app.use(debugRouter.routes()); app.use(documentRouter.routes()); app.use(errorReportsRouter.routes()); app.use(pdfRouter.routes()); app.use( koaI18next.getResourcesHandler(i18next, { path: '/locales/resources.json', }) ); };Me perdí la parte de 'enlace' de la implementación anterior.
path: '/locales/resources.json'i18n no tenía acceso a los archivos básicamente. Usé el controlador de recursos para redirigir correctamente y usar el middleware, ahora funciona como antes.
Código actualizado:
import * as Express from 'express'; import documentRouter from './documentRouter'; import pdfRouter from './pdfRouter'; import debugRouter from './debugRouter'; import * as i18next from 'i18next'; // @ts-ignore import * as Backend from 'i18next-fs-backend'; // @ts-ignore import middleware from 'i18next-http-middleware'; // @ts-ignore i18next.use(Backend).init({ initImmediate: false, backend: { // translation resources loadPath: path.resolve(__dirname, '../i18n/{{lng}}/{{ns}}.json'), addPath: path.resolve(__dirname, '../i18n/{{lng}}/{{ns}}.missing.json'), }, preload: ['en-US', 'en-GB', 'de-DE', 'fr-FR'], fallbackLng: 'de-DE', }); export default (app: Express.Application) => { // load translation resources //@ts-ignore app.get("/locales/resources.json", middleware.getResourcesHandler(i18next)); app.use([debugRouter, documentRouter, pdfRouter]); //@ts-ignore app.use(middleware.handle(i18next)); };