一、I18n国际化
使用nestjs-i18n实现后端国际化
1、安装
npm install --save nestjs-i18n
nestjs-i18n默认使用I18nJsonLoader
读取json文件
2、在项目src文件夹下,创建i18n文件夹,多个不同语言创建多个不同文件夹,例如:
我在我项目src文件夹下面创建三个文件夹,分别是英文、简体中文、繁体中文,并在文件夹下各创建了一个tips.sjon文件,内容结构如下:
3、在项目中导入nestjs-i18n 模块
I18nModule.forRootAsync({
useFactory: (configService: ConfigService) => ({
fallbackLanguage: configService.get<string>('FALLBACK_LANGUAGE'),
loaderOptions: {
path: join(__dirname, '/i18n/'),
watch: true,
},
typesOutputPath: join(__dirname, '../src/generated/i18n.generated.ts'),
}),
resolvers: [
{ use: QueryResolver, options: ['lang'] },
new HeaderResolver(['x-lang']),
],
inject: [ConfigService],
})
在app.module.ts文件中,imports 中添加如上代码,动态导入I18nModule。
fallbackLanguage:当没有语言被解析时,使用此处配置语言
loaderOptions:语言配置的读取路径
typesOutputPath:nestjs-i18n可以生成类型,使用时可以链式带出,这里配置的是类型输出的文件路径,如下图:
注意:运行项目时,还要在nest-cli.json 配置i18n文件输出
resolvers:配置获取当前上下文使用的语言类型,我这里随便配置了两种类型。
QueryResolver:['lang'] ,前端调用时,传入lang=zh-CN,就表使用简体中文
HeaderResolver:['x-lang'],当前端调用时,在headers中添加key:x-lang,value:zh-CN就代表使用简体中文
下面是官网列出的方式:
4、使用
我在app.controller.ts中加入以下代码:
@Public()
@Get('testi18n')
getI18nHello() {
return this.appService.getI18nHello()
}
在app.service.ts中加入以下代码:
注入I18nService
constructor(private readonly i18n: I18nService<I18nTranslations>) { }
其中 I18nTranslations