Express React i18n:无法获取 /locales/resources.json (JS / TS / Node)

Express React i18n: Cannot GET /locales/resources.json (JS / TS / Node)

我正在使用 NodeJS 后端开发 React 应用程序。作为中间件,我之前使用 Koa,现在我确实切换到 ExpressJS.

我需要将 i18n 翻译调整为 Express。
我做了文档中解释的所有事情,但是在查询我的 .json 文件时我收到以下错误:
"Cannot GET /locales/resources.json

我什至没有将这个文件设置到这个路径。
我的翻译保存在即: "packages/backend/src/i18n/de-DE/common.json"
=> "packages/backend/src/i18n/语言标签/common.json"

这是我的 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]);
};

旧配置如下:


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',
    })
  );
};

我确实遗漏了旧实现中的 'linking' 部分。

path: '/locales/resources.json'

i18n 基本上无法访问这些文件。我确实使用了资源处理程序以便正确重定向并使用中间件,现在它像以前一样工作。

更新代码:

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));

};