본문 바로가기
JavaScript

[JavaScript]i18next을 활용한 언어 변환 처리

by teamnova 2023. 4. 8.

안녕하세요. 이번 시간에는 자바스크립트에서 간단하게 언어를 변환 처리 할 수 있는 방법을 알아보려 합니다. i18next는 자바스크립트에서 언어 변환등의 국제화(i18n)처리를 가능하게 해주는 라이브러리입니다. i18n이란 국제화 (internationalization)의 약자로 첫 글자 i와 마지막 글자 n 사이에 18글자가 들어가 있다는 의미입니다. 이번 포스팅에서는 국제화 라이브러리인 i18next을 활용하여 웹페이지의 한/영 변환을 할 수 있는 예제를 만들어보겠습니다.

 

i18next 활용 예시

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>i18n</title>
    <script
      src="https://cdnjs.cloudflare.com/ajax/libs/i18next/17.0.18/i18next.min.js"
      type="text/javascript"
    ></script>
  </head>
  <body>
    <!-- 한국어, 영어 선택을 할 수 있는 selector -->
    <select id="language_select" onchange="i18next.changeLanguage(this.value)">
      <option value="en">English</option>
      <option value="ko">Korean</option>      
    </select>
    <!-- 웹페이지 텍스트 (제목 + 내용) -->
    <h1 id="title"></h1>
    <p id="content"></p>
    <script>
      // 현재의 웹 브라우저에 설정된 언어 확인 (만약 한국어라면 true, 아니라면 false)
      const isKorean = navigator.language === "ko-KR";
      // 웹 브라우저 언어가 한국어면 select에 한국어 선택, 아닐 경우 영어 선택      
      if (isKorean) {
        document
          .getElementById("language_select")
          .options[1].setAttribute("selected", true);
      }
      else {
        document
          .getElementById("language_select")
          .options[0].setAttribute("selected", true);
      }
      // 웹페이지 텍스트 변환을 위한 세팅
      i18next.init(
        {
          lng: isKorean ? "ko" : "en", // 한국어인지, 영어인지 표시
          debug: true,
          resources: { // 웹페이지를 구성하는 텍스트들을 json 형태로 입력
            ko: {
              translation: {
                title: "한국어 제목",
                content: "한국어 내용"
              }
            },
            en: {
              translation: {
                title: "English title",
                content: "English content"
              }
            }
          }
        },
        function(err, t) {
          if (err) {
            console.error(err);
          } else { // 에러가 없을 경우 설정한 언어로 json 안의 텍스트들 대입
            updateContent();
          }
        }
      );

      function updateContent() { // i18nest.init에서 세팅한 텍스트들 html 태그에 대입
        document.getElementById("title").innerHTML = i18next.t("title");
        document.getElementById("content").innerHTML = i18next.t("content");
      }

      // 언어 변환 시 이벤트 (위의 select에서 onchange="i18next.changeLanguage(this.value)" 이벤트)
      i18next.on("languageChanged", () => {
        updateContent(); // 바뀐 언어에 따라 웹페이지 텍스트 재대입
      });
    </script>
  </body>
</html>

 

결과 영상

 

구현한 페이지는 한국어/영어에 대한 선택이 가능하게 되어 있고, 다른 언어를 추가하고 싶을 경우 다른 나라의 언어 코드를 추가한 뒤 분기처리 할 수 있습니다.

 

i18next에 대한 더 자세한 내용은 아래의 공식 홈페이지를 참고해주세요.

https://www.i18next.com/