[python] Flask-WTF에서 사용자가 입력한 값을 다국어로 제공하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 프레임워크에서 웹 폼을 처리하기 위한 확장 도구입니다. 사용자가 입력한 값을 다국어로 제공하는 방법에는 다음과 같은 접근 방법이 있습니다.

  1. 다국어 지원 라이브러리 설치 Flask-WTF와 함께 다국어 지원을 위한 라이브러리인 Flask-Babel을 설치합니다. 아래의 명령을 사용하여 설치할 수 있습니다:
pip install Flask-Babel
  1. 다국어 설정 Flask-Babel을 초기화하고 다국어를 지정하는 코드를 작성해야 합니다. Flask-WTF와 함께 사용하는 경우, 다음과 같이 app.config에 다국어 설정을 추가합니다:
from flask import Flask
from flask_wtf import FlaskForm
from flask_babel import Babel

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['BABEL_DEFAULT_LOCALE'] = 'en'

babel = Babel(app)

여기서 BABEL_DEFAULT_LOCALE을 원하는 언어로 설정합니다. en은 영어를 의미합니다.

  1. 다국어 문구 생성 Flask-WTF에서 다국어로 제공할 문구는 FlaskForm 클래스에서 정의된 필드의 레이블(label)이나 에러 메시지로 사용됩니다. 이를 위해서는 FlaskForm 클래스를 상속 받은 폼 클래스에서 다음과 같은 작업을 수행해야 합니다:

    • FlaskForm 클래스의 Meta 클래스에서 locale 속성을 정의합니다. 이는 다국어로 제공할 필드 레이블 및 에러 메시지의 번역을 위한 언어 코드입니다.
    • 필드 레이블은 Field 클래스에서 label 속성으로 정의할 수 있습니다. 이 때, gettext 함수를 사용하여 다국어로 번역된 문구를 반환하도록 해야 합니다.
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
from flask_babel import lazy_gettext as _

class MyForm(FlaskForm):
    class Meta:
        locale = 'ko'
        
    name = StringField(label=_('이름'), validators=[InputRequired()])
    submit = SubmitField(label=_('제출'))

위의 예제에서 _('문구')는 문구를 번역하는 함수입니다. 이 함수를 사용하면 다국어 지원에 따라 적절한 번역된 문구를 반환합니다.

  1. 번역 파일 작성 번역된 문구를 제공하기 위해서는 번역 파일을 작성해야 합니다. 이는 locales 폴더 내에 각 언어별로 작성됩니다. 예를 들어, 한국어를 위한 번역 파일(ko/LC_MESSAGES/messages.po)을 작성할 경우 다음과 같이 작성합니다:
msgid "이름"
msgstr "Name"

번역 파일은 .po 형식으로 작성되며, msgid에는 기본 문구를, msgstr에는 번역된 문구를 작성합니다.

이렇게 번역 파일을 작성하고 Flask 애플리케이션을 실행하면 설정한 언어에 맞는 번역된 값이 폼에 표시됩니다.

참고 문서: