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));
};
我正在使用 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));
};