자바스크립트 기반 NestJS 웹 애플리케이션의 국제화 방법

NestJS는 자바스크립트 기반의 프레임워크로, 웹 애플리케이션을 개발할 때 사용됩니다. 이 프레임워크를 사용하여 국제화(i18n)를 구현하는 방법에 대해 알아보겠습니다.

1. i18n 라이브러리 설치

NestJS에서 국제화를 구현하기 위해서는 i18n 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 i18n 라이브러리를 설치합니다.

npm install i18n --save

2. i18n 설정

NestJS 애플리케이션의 국제화 설정은 main.ts 파일에서 이루어집니다. main.ts 파일의 bootstrap() 함수에서 i18n 미들웨어를 설정합니다. 다음은 i18n 설정 예시입니다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as i18n from 'i18n';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  
  // i18n 미들웨어 설정
  i18n.configure({
    locales: ['en', 'ko'],
    defaultLocale: 'en',
    directory: __dirname + '/locales',
    queryParameter: 'lang',
    register: global,
  });
  
  app.use(i18n.init);

  await app.listen(3000);
}
bootstrap();

위의 예제에서는 locales에 지원할 언어의 목록을 설정하고, defaultLocale에 기본 언어를 설정합니다. directory에는 언어 파일들이 저장된 경로를 지정하며, queryParameter는 언어 설정에 사용될 쿼리 파라미터를 지정합니다.

3. 언어 파일 작성

locales 디렉토리에 언어 파일을 작성해야 합니다. 각 언어마다 별도의 JSON 파일을 생성하고, 모든 언어의 번역 내용을 포함하도록 작성합니다.

다음은 예시로 ‘en.json’과 ‘ko.json’ 파일을 작성한 것입니다.

en.json:

{
  "welcome": "Welcome to our website!",
  "about": "About Us",
  "contact": "Contact Us"
}

ko.json:

{
  "welcome": "우리 웹사이트에 오신 것을 환영합니다!",
  "about": "회사 소개",
  "contact": "연락처"
}

4. 국제화 적용하기

NestJS에서는 @nestjs/i18n 모듈을 사용하여 국제화를 적용할 수 있습니다. 컨트롤러에서 이 모듈을 가져와서 다음과 같이 사용할 수 있습니다.

import { Controller, Get, Req, Res } from '@nestjs/common';
import { I18nRequestScopeService } from 'nestjs-i18n';

@Controller()
export class AppController {
  constructor(private readonly i18n: I18nRequestScopeService) {}

  @Get()
  async index(@Req() req, @Res() res) {
    const translations = await this.i18n.translate('welcome');
    res.render('index', { translations });
  }
}

위의 예제에서는 I18nRequestScopeService를 사용하여 welcome 키에 해당하는 번역 내용을 가져오고, res.render() 메소드를 통해 뷰 템플릿으로 전송합니다.

이제 NestJS 기반 웹 애플리케이션에서 국제화를 적용하는 방법에 대해 알아보았습니다. i18n 라이브러리를 사용하여 언어 파일을 작성하고, 컨트롤러에서 I18nRequestScopeService를 사용하여 번역 내용을 가져올 수 있습니다.

#nestjs #국제화