국제화 적용 방법

국제화 적용 방법

국제화란?

국제화(Internationalization, i18n)는 소프트웨어, 웹 사이트 등의 제품을 언어 및 문화권이 다른 여러 환경에 대해 다양한 언어를 지원하는 서비스를 의미합니다.

핵심은 코드 수준에서 언어와 지역에 대한 의존성을 최소화하는 것이 목표입니다.

현지화는 특정 언어와 문화에 맞게 조정하는 과정으로, 국제화 간의 대표적인 차이를 보여주는 예시는 한국어 사용자에게는 날짜 형식을 YYYY/MM/DD로, 미국 사용자에게는 MM/DD/YYYY 형식으로 표시하게 하는 작업입니다.

국제화의 필요성

  1. 글로벌 사용자 확대: 여러 언어를 지원함으로써 다양한 국가의 사용자들에게 플랫폼을 제공할 수 있습니다.
  2. 시장 확장: 새로운 언어권 사용자에게 접근할 수 있어 시장 확장 가능성이 있습니다.
  3. 현지화된 사용자 경험 제공: 사용자가 익숙한 언어를 반영하면 더 나은 사용자 경험을 제공하여 사용자의 만족도가 향상됩니다.

국제화를 적용하기 위해서는 어떤 작업이 필요한지?

SVC 국제화 적용 방법

  1. 코드에서 국제화 할 영역을 찾아 적용 : 서비스가 반환하는 메시지만 국제화 적용

     from flask_babel import gettext as _
        
     _('key')
        
     # 아래는 실제 코드를 적용한 예시 입니다.
     # 변경 전 
     return_msg = {"result": "success", "msg": cons.MSG_STOP}
        
     # 변경 후 
     return_msg = {"result": "success", "msg": _("msg.stop")}
    
  2. pybabel 을 이용하여 소스에 적용된 key 값을 추출할 수 있다 (기준파일 생성 : messages.pot)

     pybabel extract -F babel.cfg -o messages.pot . --sort-output # 현재 경로에 모든 하위 파일들에 적용된 key 값 추출 
    
  3. 추출된 키 값을 기존 파일에 업데이트

     pybabel update -i messages.po -d src/translations
    
    • /src/translations/en, ko/messages.po 파일에 추가된 변수 확인 가능

    messages.po 파일에 추가된 변수 확인

  4. 국제화 파일에 한/영 내용 추가

     src/translations 디렉토리 하위의 messages.po 파일을 수정한다
    
  5. 적용하기 위한 mo 파일을 생성(컴파일)한다

     pybabel compile -f -d src/translations
    

파일 구조에 대한 설명

/project-root
  /public
  /src
    /translations     // 모든 번역 리소스 파일 관리 
      /en             // 영어 번역 파일을 저장하는 폴더
        messages.mo   // 컴파일된 바이너리 형식의 번역 파일 (기계가 읽을 수 있는 형식으로 컴파일된 파일이기 떄문에, 사람이 직접 읽거나 수정 불가)
        messages.po   // public object file : 사람이 읽을 수 있는 형식으로 작성된 번역 파일 
      /ko             // 한국어 번역 파일을 저장하는 폴더
        messages.mo
        messages.po

적용 확인 방법

1. 크롬 플러그인 설치 : Locale Switcher

  • 플러그인 설치 후 언어 변경

    플러그인으로 언어 변경

2. 소스 상에서 현재 언어 확인 방법

# 테스트할 api에 아래 코드 추가 
from flask_babel import get_locale

def get(self):
        print("@@ locale check : ", str(get_locale()))

언어 체크

3. 실제 코드를 실행하여 확인

  • en으로 설정한 경우

    영문

  • kr로 설정한 경우

    한국어