안녕하세요! 오늘은 NestJS를 사용하여 자바스크립트 애플리케이션의 로컬라이제이션(Localization) 방법에 대해 알아보겠습니다.
로컬라이제이션은 애플리케이션의 문자열, 형식, 날짜 등을 다른 언어와 지역에 맞게 변환하는 과정입니다. 이는 다국어 지원 및 지역별 형식 요구에 부합하는 애플리케이션을 만들 때 필수적입니다. NestJS는 이러한 로컬라이제이션을 쉽게 구현할 수 있는 다양한 기능을 제공합니다.
1. 패키지 설치하기
NestJS의 로컬라이제이션을 구현하기 위해 nestjs-i18n
패키지를 설치해야 합니다. 프로젝트의 루트 디렉토리에서 아래 명령어를 사용하여 패키지를 설치합니다.
npm install nestjs-i18n
2. 설정 파일 생성하기
nestjs-i18n
패키지를 사용하기 위해 설정 파일을 생성해야 합니다. 루트 디렉토리에 i18n.config.ts
파일을 생성하고 다음과 같이 작성합니다.
import { registerAs } from '@nestjs/config';
export default registerAs('i18n', () => ({
locale: process.env.DEFAULT_LOCALE || 'en',
fallbacks: {
'zh-tw': 'zh',
'zh-cn': 'zh',
},
}));
위 코드는 기본 로케일을 영어(en)로 지정하고, 중국어 중 트위플 또는 간체를 사용할 때는 중국어(zh)로 폴백(fallback)하도록 설정한 예시입니다. 필요에 따라 로케일과 폴백 옵션을 수정하세요.
3. 모듈 설정하기
NestJS 모듈에서 nestjs-i18n
패키지를 설정해야 합니다. AppModule
파일에서 아래와 같이 모듈을 설정합니다.
import { I18nModule } from 'nestjs-i18n';
import { I18nConfigService } from './i18n-config.service';
@Module({
imports: [
I18nModule.forRootAsync({
useClass: I18nConfigService,
imports: [ConfigModule],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
위 코드에서 I18nConfigService
는 I18nModule
의 구성을 위한 설정 서비스입니다. 이 서비스에서는 앞서 작성한 i18n.config.ts
파일의 설정을 가져와 사용합니다.
4. 라우트 설정하기
로컬라이제이션을 적용할 라우트를 설정합니다. 라우트의 컨트롤러에서 I18nService
클래스를 주입받아 사용할 수 있습니다. 예를 들어, 다음은 /hello
경로로 들어온 요청에 대해 로케일에 맞는 인사말을 반환하는 코드입니다.
import { Controller, Get, Req } from '@nestjs/common';
import { I18nService } from 'nestjs-i18n';
@Controller()
export class HelloController {
constructor(private readonly i18n: I18nService) {}
@Get('hello')
async hello(@Req() request) {
const greeting = await this.i18n.translate('greeting');
return {
message: greeting,
};
}
}
위 코드에서 I18nService
의 translate
메서드를 사용하여 greeting
키에 해당하는 로컬라이즈된 문자열을 가져옵니다. 이 코드는 로케일에 맞는 인사말을 응답으로 반환합니다.
5. 언어 설정하기
로컬라이제이션을 적용하기 위해서는 클라이언트에서 언어 설정을 전달해 주어야 합니다. 이를 위해 헤더나 쿼리 파라미터 등을 사용할 수 있습니다. NestJS에서는 미들웨어를 통해 언어 설정을 처리할 수 있습니다. 아래 예시는 LanguageMiddleware
를 생성하여 헤더의 Accept-Language
값을 바탕으로 언어 설정을 하는 코드입니다.
import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class LanguageMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
const language = req.headers['accept-language'];
// 언어 설정 로직 적용
next();
}
}
위에서 생성한 미들웨어를 애플리케이션에 등록하기 위해서는 AppModule
의 configure()
메서드에서 app.use()
메서드를 사용합니다.
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
@Module({})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LanguageMiddleware).forRoutes('*');
}
}
위 코드의 forRoutes('*')
는 모든 라우트에 대해 미들웨어를 적용한다는 의미입니다.
이렇게 설정하면 클라이언트에서 헤더에 포함된 Accept-Language
값을 바탕으로 언어 설정이 자동으로 적용되며, I18nService
의 translate
메서드를 통해 로컬라이즈된 문자열을 사용할 수 있습니다.
이렇게 NestJS를 활용하여 자바스크립트 애플리케이션의 로컬라이제이션을 구현하는 방법에 대해 알아보았습니다. NestJS와 nestjs-i18n
패키지를 이용하면 다국어 및 지역별 로컬라이제이션을 쉽게 구현할 수 있습니다. 다양한 언어와 지역에서 애플리케이션을 사용할 수 있도록 로컬라이제이션 기능을 추가해 보세요!
참고문헌:
- NestJS 공식 문서: https://docs.nestjs.com/
- nestjs-i18n GitHub 페이지: https://github.com/ToonvanStrijp/nestjs-i18n
#NestJS #로컬라이제이션