
우선 i18n이 무엇인지 알아야 무엇을 어떻게 왜 작업하는지 알 수 있지 않을까? i18n은 자바스크립트를 위해 작성된 국제화 프레임워크라고 한다. React, Vue, Angular 같은 프런트엔드의 프레임워크뿐만 아니라 Node.js, Deno, Android, IOS, PHP 등 다른 플랫폼에서도 사용할 수 있는 국제화를 도와주는 라이브러리라고 합니다.
i18n을 사용하면 사용자의 언어를 감지할 수 있고 그에 따라 번역본을 보여줄 수 있다. 더 나아가 선택적으로 번역을 캐싱을 할 수도 있다고 한다. 그럼 이제 어떻게 사용을 할 수 있을까?
이로 NestJS를 이용한 다국어 서비스를 위한 모듈을 테스트를 해보겠습니다.
npm i nestjs-i18n
import { Module } from '@nestjs/common';
import { AcceptLanguageResolver, HeaderResolver, I18nModule, QueryResolver } from 'nestjs-i18n';
import * as path from 'path';
import { AppController } from './app.controller';
@Module({
imports: [
I18nModule.forRoot({
fallbackLanguage: 'en',
loaderOptions: {
path: path.join(__dirname, '/i18n/'),
watch: true,
},
resolvers: [
{ use: QueryResolver, options: ['lang'] },
AcceptLanguageResolver,
new HeaderResolver(['x-lang']),
],
}),
],
controllers: [AppController],
})
export class AppModule { }
기댓값으로 영어, 한국어, 일본어를 3개로 대표적으로 JSON에 세팅해두었다.


@Get('test')
async getGreeting(@I18n() i18n: I18nContext): Promise<string> {
return await i18n.t('test.HELLO')
}






간단한 테스트를 마치고, Header 혹은 query String에 특정 국가코드를 입력하여 서버단에서 처리할수 있게 되었다. Client에서 국가Locale 정보를 자동으로 인식하여 넘겨준다면, 좋은 자리매김을 할것 같다. 공식문서를 보고 이해가 안되었던 부분이 nest-cli에서 삽질하는데 시간을 좀 소요를 많이 한것같다. 이집트에 계신 Mahmoud Anani님의 도움으로 긴 시간이나마 단축할수 있게 되었다.
참고문헌