본문 바로가기
JavaScript

JavaScript 간단한 함수로 다국어 처리하기

by soro.k 2021. 11. 21.

 

Validation을 하면서 에러메시지를 다국어 처리했어야 했는데 굳이 라이브러리를 쓰지 않아도 될 것 같아서 간단히 함수와 메시지 파일을 만들어 처리했다.

 

locale 정보 가져오기

기존 서버 코드가 쿠키에 locale 정보를 저장하게 되어 있어서 getLocale 함수를 생성해서 값을 가져온다.

 

 

validation.js

function getLocale() {
    var lang = 'ko';
    var cookies = document.cookie;
    var splitCookies = [];

    if (cookies) {
        splitCookies = cookies.split('=');
        lang = splitCookies[1]
    }
    return lang;
}
  • default 값은 'ko'로 설정한다.
  • document.cookie는 name=value 쌍으로 구성되어 있고, 각 쌍은 ';'로 구분한다.
  • 쿠키 정보가 여러 개이면 ';'를 기준으로 값을 분리해서 원하는 쿠키를 찾으면 되지만 위의 코드에서는 쿠키에 locale 정보만 있기 때문에 '='를 기준으로 분리해서 값을 가져오게 했다.

 

validation.messages.js

function getMessage(lang, key) {
        if(lang === 'ko') {
                return messages_ko[key];
        } else if(lang === 'en') {
                return messages_en[key];
        }

}

var messages_ko = {
        "userId.rangelength":'5글자에서 10글자 내로 입력해 주세요.',
        "userId.regex":'첫 글자 영문을 포함하여 영문 대소문자/숫자로 입력해 주세요.'
}

var messages_en = {
        "userId.rangelength": 'Please enter a value between 5 and 30 characters long.',
        "userId.regex":'Example example'
}
  • getMassage(lang, key) 함수로 locale 정보와 key 입력 값을 받아와서 각각에 맞는 value 값을 찾아서 return 해준다.
  • 처음에는 var map = new Map()에 key, value를 추가했었는데 IE는 지원하지 않아서 위의 코드와 같이 변경했다.

 

join.html

<head>
	<script th:src="@{/js/validation.messages.js}"></script>
</head>

 

 

validation.js

function i18n(value) {
    var lang = getLocale();
    var message = getMessage(lang, value);

    return message;
}

getLocale()로 locale 정보를 가져온 후 message.js 파일에 생성했던 함수로 message를 가져올 수 있게 한다.

 

 

적용 코드

$(document).ready(function () {
	$('#signup-form').validate({
        rules: { ... },
        messages: {
            userId: {
                rangelength: i18n('userId.rangelength'),
                regex: i18n('userId.regex')
            },
            ...
        }
    });
});

 

적용 화면(ko/en)