首页 > 解决方案 > NestJS 根据浏览器的语言传递静态文件

问题描述

Nestjs 应该基于浏览器中定义的语言交付一个 Angular 应用程序。

Angular 应用程序位于dist/public/en或上dist/public/de

如果用户使用/英文浏览器访问,nestjs 应该从文件夹传递文件dist/public/en。在这种情况下,浏览器中的路径应指向fqdn/en/.

我已经将它与单语言 Angular 应用程序一起使用:

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);

  app.useStaticAssets(join(__dirname, 'public'));
  await app.listen(process.env.PORT || 3000);
}
bootstrap();

我还查看了看起来很有希望的i18next

但我不确定这是否是正确的方向。

任何小费都受到热烈欢迎。

标签: javascriptnode.jsangularnestjsi18next

解决方案


dist静态提供文件夹更好的方法是将所有非 api 路由重定向到,index.html以便您的 Angular SPA 可以处理路由。有关更多详细信息,请参阅此答案


您可以通过考虑要检测用户语言的因素(例如ACCEPT-LANGUAGE标头或某个 cookie)来调整上面链接答案中的中间件:

@Middleware()
export class FrontendMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    // Some way of detecting the user's language
    const languages = req.header('ACCEPT-LANGUAGE') || 'en-US';

    if (languages.contains('de-DE')) {
      res.sendFile(join(__dirname, 'public', 'de' ,'index.html'));
    } else {
      res.sendFile(join(__dirname, 'public', 'en', 'index.html'));
    }
  }
}

推荐阅读