
Flask 기반 API에서 메시지 국제화(i18n)를 어떻게 적용했는지 실제 프로젝트에서 사용한 방식과 적용 확인 방법에 대한 내용을 정리하였다.
국제화(Internationalization, i18n)는 소프트웨어, 웹 사이트 등의 제품을 언어 및 문화권이 다른 여러 환경에 대해 다양한 언어를 지원하는 서비스를 의미한다.
핵심은 코드 수준에서 언어와 지역에 대한 의존성을 최소화하는 것이 목표다.
현지화는 특정 언어와 문화에 맞게 조정하는 과정으로, 국제화 간의 대표적인 차이를 보여주는 예시는 한국어 사용자에게는 날짜 형식을 YYYY/MM/DD로, 미국 사용자에게는 MM/DD/YYYY 형식으로 표시하게 하는 작업이다.
SVC 국제화 적용 방법
1. 코드에서 국제화 할 영역을 찾아 적용 : 서비스가 반환하는 메시지만 국제화 적용
from flask_babel import gettext as _
_('key')
# 아래는 실제 코드를 적용한 예시 입니다.
# 변경 전
return_msg = {"result": "success", "msg": cons.MSG_STOP}
# 변경 후
return_msg = {"result": "success", "msg": _("msg.stop")}
💡 pybabel Python에서 국제화와 현지화를 지원하기 위해 사용되는 도구입니다. 특히 번역 파일 (po, mo 파일)을 생성하고 관리하는데 사용됩니다. 이를 통해 소프트웨어가 여러 언어를 지원할 수 있도록 도와주는 역할을 한다.
pybabel extract -F babel.cfg -o messages.pot . --sort-output # 현재 경로에 모든 하위 파일들에 적용된 key 값 추출
pybabel update -i messages.po -d src/translations

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

# 테스트할 api에 아래 코드 추가
from flask_babel import get_locale
def get(self):
print("@@ locale check : ", str(get_locale()))


