i18n?

글로벌 어플리케이션은 화면에 있는 모든 레이블링과 메시지를 로그인을 한 사용자의 언어로 표출해야합니다. i18n은 internalization을 의미하며 i와 n 사이에 18개의 알파벳이라는 뜻입니다.

코드

var text = "Hello {name}. I'm from {city}.";

var data = {
    name : "Lee Seungyoung",
    city : "Korea"
}

/**
 * 치환
 */
function translate(form, params = {}) {
    return form.replace(/{[^}]*}/g, match => {
        console.log(match);
        return params[match.slice(1, -1)];
    });
}

console.log(translate(text, data));

/**
 * 결과
 * {name}
 * {city}
 * Hello Lee Seungyoung. I'm from Korea.
 */

text : 텍스트 입니다. 특정 국가의 언어로 치환을 해줘야 합니다.

data : 사용자의 Parameter 입니다

translate :

정규표현식으로 form 파라미터로 들어온 모든 {} 안의 문장이 data 안에 있는 key와 매칭이 된다면 해당 key의 value로 치환을 하고, { }는 지우는 함수입니다.

const i18n = {
    en: {
        "Hello {name}. I'm from {city}.": "Hello {name}. I'm from {city}."
    },
    ko: {
        "Hello {name}. I'm from {city}.": "안녕하세요 {name}. 나는 {city}에서 왔습니다."
    }
};

const language = "ko";

그럼 위의 변수를 추가로 넣겠습니다.

i18n : 특정 언어의 key를 입력할 시 미리 설정해둔 문장입니다.

language : 해당 유저가 사용하는 언어입니다.

const translation = translate(i18n[language]["Hello {name}. I'm from {city}."], data);
console.log(translation);

/**
 * 결과
 * 안녕하세요 Lee Seungyoung. 나는 Korea에서 왔습니다.
 */

위와 같이 작성을 해보면 아래와 같은 출력 결과를 얻을 수 있습니다.

이런식으로 간단하게 다국어를 구현할 수 있습니다.

전체 코드

var text = "Hello {name}. I'm from {city}.";

var data = {
    name : "Lee Seungyoung",
    city : "Korea"
}

const i18n = {
    en: {
        "Hello {name}. I'm from {city}.": "Hello {name}. I'm from {city}."
    },
    ko: {
        "Hello {name}. I'm from {city}.": "안녕하세요 {name}. 나는 {city}에서 왔습니다."
    }
};

const language = "ko";

/**
 * 치환
 * @return : 다국어로 매칭된 텍스트
 */
function translate(form, params = {}) {
    return form.replace(/{[^}]*}/g, match => {
        return params[match.slice(1, -1)];
    });
}

const translation = translate(i18n[language]["Hello {name}. I'm from {city}."], data);
console.log(translation);

/**
 * 결과
 * 안녕하세요 Lee Seungyoung. 나는 Korea에서 왔습니다.
 */

참고

소프트웨어의 국제화 Software i18n
국제화와 지역화 - 위키백과, 우리 모두의 백과사전