728x90
반응형

i18n은 다국어 지원을 가능하게 해주는 모듈이다. JQuery 와 React에서 쓰이는 방법이 다르며, React에서 쓰이는 방법은 

차후에 올리도록 하겠다. 

 

1. 먼저 i18n을 설치한다.

sudo npm i i18n

 

2. 최상 루트폴더 밑에 i18n.js를 만들어준다.

 

i18n.js

const i18n = require('i18n');

i18n.configure({
    locales: ['ko', 'en'],
    directory: __dirname + '/locales',
    defaultLocale: 'ko',
    cookie: 'lang',
});

module.exports = function(req, res, next) {
    i18n.init(req, res);
    res.locals.__ = res.__;
    var current_locale = i18n.getLocale();
    return next();
};

코드를 보면 /locales 파일 밑에 ko, en 파일들을 쓴다고 되어있다. 

defaultLocale인 ko(한국어)가 최초의 값으로 되어있고, 위에 사진처럼 다른언어를 클릭할 시에 페이지 내에

텍스트들이 바뀌는것을 확인 할 수 있다.

 

3.  최상 루트폴더 밑에 locales 폴더를 만들고, 하위에 ko.json, en.json파일들을 만들어 준다.

 

ko.json

{
	"" : "",
	"lang_kr": "한국어 (기본)",
	"lang_en": "영어",
}

 

en.json

{
	"" : "",
    "lang_kr": "Korean (Basic)",
	"lang_en": "English"
}

 

해당 모듈은 json형식을 완벽하게 따라해야되기 때문에 마지막 value 값 뒤 ,(콤마)를 붙이는 실수를 하면 안된다.

(나중에 큰 고생을 합니다..ㅜㅜ) 두 개의 파일의 순서도 똑같이 해줘야 한다.

 

4. app.js에 i18n을 설정해준다.

const i18n = require('./i18n');

app.use(i18n);

 

5. 클라이언트에서 버튼을 생성해준다

<div class="dropdown-menu dropdown-menu-right">
	<a href="/ko" class="dropdown-item d-flex justify-content-start align-items-center"><img class="flag" src="https://lipis.github.io/flag-icon-css/flags/4x3/kr.svg" alt="South Korea Flag">{{__('lang_kr')}}</a>
	<a href="/en" class="dropdown-item d-flex justify-content-start align-items-center"><img class="flag" src="https://lipis.github.io/flag-icon-css/flags/4x3/us.svg" alt="United States of America Flag">{{__('lang_en')}}</a>
</div>

 

6. 백엔드(node.js)라우터에서 쿠키설정을 해줍니다.

router.get('/en', function(req, res) {
  res.cookie('lang', 'en');
  res.redirect('/main');
});

router.get('/ko', function(req, res) {
  res.cookie('lang', 'ko');
  res.redirect('/main');
});

 

그럼 모든 설정을 끝이 났다. 

사용하는 방법은 아래와같다.

<button type="button">{{__('close')}}</button>

{{__('이곳')}} 에 json파일들로 설정한 이름들을 넣어주면 get메소드가 실행될 때마다 언어를 바꿔줄 수 있다.

 

노가다지만 나중에 다국어를 한다 생각해보면 필요성이 있는 모듈이었다.

728x90
반응형

+ Recent posts