Nodejs Nestjs国际化插件@nestjs/i18n的使用
Nodejs Nestjs国际化插件@nestjs/i18n的使用[@nestjs](/user/nestjs)/i18n
是一个用于在 NestJS 应用程序中实现国际化(i18n)的插件。下面是如何使用这个插件的一些基本步骤和示例代码。
安装
首先,你需要安装 [@nestjs](/user/nestjs)/i18n
和相关依赖:
npm install [@nestjs](/user/nestjs)/i18n i18n
配置
在你的 NestJS 项目中,创建一个配置文件来设置 i18n。例如,你可以在 app.module.ts
中进行如下配置:
import { Module } from '[@nestjs](/user/nestjs)/common';
import { APP_INTERCEPTOR } from '[@nestjs](/user/nestjs)/core';
import { I18nJsonParser, I18nModule, I18nJsonParserOptions } from '[@nestjs](/user/nestjs)/i18n';
@Module({
imports: [
I18nModule.forRootAsync({
useFactory: () => ({
fallbackLanguage: 'en',
parser: I18nJsonParser,
parserOptions: {
path: join(__dirname, '/i18n/'),
} as I18nJsonParserOptions,
}),
}),
],
providers: [
{
provide: APP_INTERCEPTOR,
useClass: I18nInterceptor,
},
],
})
export class AppModule {}
这里我们设置了默认的语言为英文 (en
),并且指定了翻译文件的路径。
创建翻译文件
在你的项目中创建一个 i18n
文件夹,并在其中为每种语言创建 JSON 文件。例如:
i18n/en.json
i18n/es.json
这些文件应该包含键值对,比如:
en.json
{
"welcome": "Welcome to our app!"
}
es.json
{
"welcome": "Bienvenido a nuestra aplicación!"
}
使用翻译
现在你可以在控制器或服务中使用翻译了。你可以通过构造函数注入 I18nService
来获取当前的语言环境,并使用它来访问翻译:
import { Controller, Get } from '[@nestjs](/user/nestjs)/common';
import { I18nService } from '[@nestjs](/user/nestjs)/i18n';
@Controller('example')
export class ExampleController {
constructor(private readonly i18n: I18nService) {}
@Get()
getExample() {
const welcomeMessage = this.i18n.translate('welcome');
return { message: welcomeMessage };
}
}
自定义拦截器
如果你希望在每个响应中自动包含语言信息,可以创建一个自定义拦截器。例如:
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '[@nestjs](/user/nestjs)/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { I18nService } from '[@nestjs](/user/nestjs)/i18n';
@Injectable()
export class I18nInterceptor implements NestInterceptor {
constructor(private readonly i18n: I18nService) {}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
map(data => ({
...data,
i18n: this.i18n.getLangs(),
})),
);
}
}
然后在 AppModule
中注册这个拦截器:
providers: [
{
provide: APP_INTERCEPTOR,
useClass: I18nInterceptor,
},
],
这样,每次请求都会返回当前支持的语言列表。
以上就是使用 [@nestjs](/user/nestjs)/i18n
插件的基本方法。
当然,要让@nestjs/i18n在你的NestJS项目中翩翩起舞,你需要跳几步优雅的代码舞步:
-
安装:首先,确保你已经安装了
[@nestjs](/user/nestjs)/i18n
和必要的依赖。你可以通过运行npm install [@nestjs](/user/nestjs)/i18n i18n
来完成这一步。 -
配置:接下来,在你的AppModule里引入
I18nModule
。你可以这样配置它:[@Module](/user/Module)({ imports: [ I18nModule.forRoot({ fallbackLanguage: 'en', }), ], }) export class AppModule {}
-
使用:现在,你可以在控制器或服务中注入
I18nService
来使用它。例如:[@Controller](/user/Controller)('example') export class ExampleController { constructor(private readonly i18n: I18nService) {} @Get() async getTranslatedMessage(@Query('lang') lang: string) { return this.i18n.translate('message.welcome', { lang }); } }
-
享受:现在,你可以根据请求的语言环境返回不同的翻译文本了!
记得调整路径和文件名以匹配你的项目结构。祝你在多语言世界的探险愉快!
@nestjs/i18n
是一个用于 NestJS 项目的国际化插件,它简化了多语言支持的过程。下面是如何使用 @nestjs/i18n
的步骤和一些基本示例。
安装依赖
首先,你需要安装必要的依赖包:
npm install @nestjs/i18n i18n
配置模块
接下来,在你的应用模块中导入并配置 I18nModule
。这里以一个简单的模块为例:
import { Module } from '@nestjs/common';
import { I18nModule, I18nJsonParser } from '@nestjs/i18n';
@Module({
imports: [
I18nModule.forRoot({
parser: I18nJsonParser,
parserOptions: {
path: path.join(__dirname, '/i18n/'), // 本地化文件路径
},
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
创建翻译文件
创建一个 i18n
文件夹,并在其中为每种语言创建 JSON 文件。例如,en.json
和 zh-cn.json
文件:
en.json
{
"welcome": "Welcome to our app!"
}
zh-cn.json
{
"welcome": "欢迎来到我们的应用!"
}
在服务或控制器中使用
现在你可以在你的服务或控制器中注入 I18nService
来获取翻译文本:
import { Controller, Get } from '@nestjs/common';
import { I18nService } from '@nestjs/i18n';
@Controller('example')
export class ExampleController {
constructor(private readonly i18n: I18nService) {}
@Get('greet')
greet(@Req() request): string {
return this.i18n.translate('welcome', { lang: request.lang });
}
}
设置语言
为了使上述代码正常工作,你需要设置请求的语言环境。可以通过中间件来实现这一点。这里提供一个简单的中间件示例:
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LanguageMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
const lang = req.query.lang || 'en'; // 根据需要从查询参数、cookie 或其他地方获取语言
req['lang'] = lang;
next();
}
}
然后将其注册到你的应用程序中:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { LanguageMiddleware } from './middleware/language.middleware';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(new LanguageMiddleware());
await app.listen(3000);
}
bootstrap();
以上就是使用 @nestjs/i18n
进行国际化的基本步骤。通过这些步骤,你可以轻松地为你的 NestJS 应用添加多语言支持。
@nestjs/i18n
是基于 NestJS 的国际化解决方案。首先安装此插件及依赖:
npm install @nestjs/i18n i18n
在模块中导入 I18nModule
并配置路径:
import { I18nModule } from '@nestjs/i18n';
@Module({
imports: [
I18nModule.forRoot({
fallbackLanguage: 'en',
path: join(__dirname, '/i18n/{{lng}}/{{ns}}.json'),
}),
],
})
export class AppModule {}
控制器中使用 @I18n()
, @I18nContext()
装饰器获取翻译内容:
import { Get, Controller } from '@nestjs/common';
import { I18n, I18nContext } from '@nestjs/i18n';
@Controller('example')
export class ExampleController {
@Get()
get(@I18n() i18n: I18nContext) {
return i18n.t('hello');
}
}
确保你的 JSON 文件已准备好,并位于指定路径。