Flask에서 메시지 국제화(i18n) 적용하기 - 실무 예제 기반

박하늘·2025년 6월 11일
post-thumbnail

Flask 기반 API에서 메시지 국제화(i18n)를 어떻게 적용했는지 실제 프로젝트에서 사용한 방식과 적용 확인 방법에 대한 내용을 정리하였다.

🧩 국제화(i18n)란 무엇인가?

국제화(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")}
  1. pybabel 을 이용하여 소스에 적용된 key 값을 추출할 수 있다 (기준파일 생성 : messages.pot)

💡 pybabel Python에서 국제화와 현지화를 지원하기 위해 사용되는 도구입니다. 특히 번역 파일 (po, mo 파일)을 생성하고 관리하는데 사용됩니다. 이를 통해 소프트웨어가 여러 언어를 지원할 수 있도록 도와주는 역할을 한다.

 pybabel extract -F babel.cfg -o messages.pot . --sort-output # 현재 경로에 모든 하위 파일들에 적용된 key 값 추출 
  1. 추출된 키 값을 기존 파일에 업데이트
 pybabel update -i messages.po -d src/translations
  • /src/translations/en, ko/messages.po 파일에 추가된 변수 확인 가능
  1. 국제화 파일에 한/영 내용 추가
 src/translations 디렉토리 하위의 messages.po 파일을 수정한다
  1. 적용하기 위한 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
  • 플러그인 설치 후 언어 변경
  1. 소스 상에서 현재 언어 확인 방법
# 테스트할 api에 아래 코드 추가 
from flask_babel import get_locale

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

  1. 실제 코드를 실행하여 확인
  • en으로 설정한 경우
  • kr로 설정한 경우
profile
백엔드 개발자

0개의 댓글