NestJS를 활용한 자바스크립트 애플리케이션의 로컬라이제이션 방법

안녕하세요! 오늘은 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 {}

위 코드에서 I18nConfigServiceI18nModule의 구성을 위한 설정 서비스입니다. 이 서비스에서는 앞서 작성한 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,
    };
  }
}

위 코드에서 I18nServicetranslate 메서드를 사용하여 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();
  }
}

위에서 생성한 미들웨어를 애플리케이션에 등록하기 위해서는 AppModuleconfigure() 메서드에서 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 값을 바탕으로 언어 설정이 자동으로 적용되며, I18nServicetranslate 메서드를 통해 로컬라이즈된 문자열을 사용할 수 있습니다.

이렇게 NestJS를 활용하여 자바스크립트 애플리케이션의 로컬라이제이션을 구현하는 방법에 대해 알아보았습니다. NestJS와 nestjs-i18n 패키지를 이용하면 다국어 및 지역별 로컬라이제이션을 쉽게 구현할 수 있습니다. 다양한 언어와 지역에서 애플리케이션을 사용할 수 있도록 로컬라이제이션 기능을 추가해 보세요!

참고문헌:

#NestJS #로컬라이제이션