FastAPI는 Python으로 작성된 빠르고, 현대적인 웹 프레임워크입니다. 이 프레임워크는 깔끔한 구조와 높은 성능을 가지고 있으며, 국제화 기능을 원활하게 지원합니다. 국제화는 애플리케이션을 여러 언어와 문화권에 맞춰 사용할 수 있도록 하는 중요한 기능입니다. FastAPI에서는 국제화를 쉽게 구현할 수 있는 다양한 방법을 제공합니다.
Flask-Babel 라이브러리 사용하기
FastAPI에서 국제화를 구현하는 한 가지 방법은 Flask-Babel 라이브러리를 사용하는 것입니다. Flask-Babel은 Flask 웹 프레임워크의 국제화 지원을 위해 개발된 라이브러리로, FastAPI에서도 잘 동작합니다.
필요한 패키지를 설치하기 위해 다음 명령어를 실행합니다:
pip install Flask-Babel
다음으로, FastAPI 애플리케이션에서 Flask-Babel을 초기화합니다. 아래 코드를 참고하세요:
from fastapi import FastAPI
from flask_babel import Babel
app = FastAPI()
babel = Babel(app)
이제 다국어 지원을 위한 메시지 카탈로그 파일(.po)을 생성해야 합니다. 이 파일은 각 언어에 대한 번역을 담고 있습니다. 메시지 카탈로그 파일을 생성하려면 다음 명령어를 실행하세요:
pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
이 명령어는 현재 디렉터리에서 messages.pot
파일을 생성합니다. 이 파일을 다국어 번역이 필요한 언어에 맞게 복사하고, 번역을 완료한 다음 해당 파일을 .mo
로 컴파일합니다.
애플리케이션에서 알맞은 언어로 설정하는 방법은 다음과 같습니다:
from flask import request
from flask_babel import gettext
@app.middleware("http")
async def set_locale(request: Request, call_next):
accept_languages = request.headers.get("Accept-Language")
locale = get_best_match(accept_languages)
# 사용자의 세션 혹은 프로필을 기반으로 사용자 설정 언어 가져오기
request.state.locale = locale
request.state.gettext = gettext
response = await call_next(request)
return response
이제 뷰 함수에서 다음과 같이 번역된 문자열을 사용할 수 있습니다:
@app.get("/hello")
async def hello(request: Request)
return request.state.gettext("Hello, World!")
다양한 언어에 대한 라우트 설정하기
또 다른 방법으로는 다양한 언어에 대한 라우트를 설정하는 것입니다. 일반적으로, 다국어 웹 애플리케이션은 각 언어별로 고유한 라우트를 가지고 있습니다. 이를 위해 FastAPI는 Path
클래스를 사용할 수 있습니다.
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/{lang}/hello")
async def hello(lang: str = Path(..., title="Language"))
return f"Hello in {lang}"
이렇게 설정하면 /en/hello
, /fr/hello
와 같은 URL을 통해 각 언어별로 다른 인사말을 출력할 수 있습니다.
결론
FastAPI는 Flask-Babel 및 다양한 언어별 라우트 설정과 같은 다양한 방법을 통해 국제화를 지원합니다. 애플리케이션을 여러 언어와 문화권에서 사용할 수 있도록 국제화 기능을 적용하여 다국어 애플리케이션을 개발할 수 있습니다.