import { DynamicModule } from '@nestjs/common';
import { join } from 'path';
import { I18nModule as i18n, HeaderResolver } from 'nestjs-i18n';
import { ConfigService } from '@nestjs/config';
export class I18nModule {
static forRootAsync(): DynamicModule {
const rootPath = join(__dirname, '..', '..', '..');
return i18n.forRootAsync({
inject: [ConfigService],
resolvers: [new HeaderResolver(['lang'])], // 请求头匹配
useFactory: (configService: ConfigService) => ({
fallbackLanguage: configService.get('i18n.fallbackLanguage'), // 默认语言
loaderOptions: {
path: ${rootPath}${configService.get<string>('i18n.path')}, // 翻译文件位置
watch: configService.get('i18n.watch'), // 将选项设置watch为可true启用loaderOptions实时重新加载
},
}),
});
}
}
使用nestjs-i18n翻译,想通过接口请求header中的lang对应翻译,但是发现翻译的语言一直都是fallbackLanguage的语言。
在 NestJS 中使用 forRootAsync 设置 resolvers 不生效的原因通常是因为 resolvers 的位置不正确。resolvers 应该放在 useFactory 外面,而不是里面。