@ Ким-Керн большое спасибо за ваш ответ. Это подтолкнуло меня в правильном направлении.
Я решил проблему следующим образом:
maint.ts определяет язык на основе глобального промежуточного программного обеспечения и определяет статическую доставку файлов:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as compression from 'compression';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
const i18next = require('i18next');
const middleware = require('i18next-express-middleware');
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
i18next.use(middleware.LanguageDetector).init({
detection: {
order: ['path', 'session', 'querystring', 'cookie', 'header'],
},
});
app.use(
middleware.handle(i18next, {
ignoreRoutes: ['/api'],
removeLngFromUrl: false,
}),
);
app.useStaticAssets(join(__dirname, 'public'));
app.use(compression());
await app.listen(process.env.PORT || 3000);
}
bootstrap();
Я определил пользовательское промежуточное ПО, которое проверяет найденный язык и на основе baseUrl выдает правильный файл index.html:
import { NestMiddleware, Injectable } from '@nestjs/common';
import { Request, Response } from 'express';
import { join } from 'path';
@Injectable()
export class FrontendMiddleware implements NestMiddleware {
use(req: any, res: Response, next: Function) {
if (req.lng && !req.baseUrl && req.lng.startsWith('de')) {
res.sendFile(join(__dirname, 'public', 'de', 'index.html'));
} else if (!req.baseUrl) {
res.sendFile(join(__dirname, 'public', 'en', 'index.html'));
} else {
next();
}
}
}
Затем в app.module.ts включается пользовательское промежуточное ПО:
...
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): void {
consumer.apply(FrontendMiddleware).forRoutes({
path: '/**',
method: RequestMethod.ALL,
});
}
}
Единственная проблема, которая открыта, заключается в том, что теперь он пытается доставлять файлы всегда из фиксированной общедоступной директории, которая завершается неудачно, если выполняется в режиме разработки, а не в рабочем режиме.
Я буду искать там решение для него.