[python] Flask-WTF에서 폼 필드의 라벨을 다국어로 지원하는 방법은 무엇인가요?

Flask-WTF를 사용하면 웹 어플리케이션에서 폼을 쉽게 생성할 수 있습니다. 폼 필드의 라벨을 다국어로 지원하려면 Flask-WTF의 FlaskForm 클래스를 상속받은 사용자 정의 폼 클래스에서 label 속성을 다국어로 설정하면 됩니다.

먼저, Flask-WTF의 FlaskForm 클래스를 import하고 사용자 정의 폼을 만들어보겠습니다.

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired

class MyForm(FlaskForm):
    my_field = StringField('My Field', validators=[InputRequired()])
    submit = SubmitField('Submit')

위의 코드에서 my_field 필드의 라벨은 ‘My Field’로 설정되어 있습니다. 이 라벨을 다국어로 지원하려면 다음과 같이 gettext() 함수를 사용하여 번역해야 합니다.

먼저, Flask 라우트파일에 다국어 설정과 번역을 위한 번역 함수를 작성합니다. 가령, 영어(en)와 한국어(ko)를 지원한다고 가정하겠습니다.

from flask import Flask, render_template, request
from flask_babel import Babel, gettext

app = Flask(__name__)
babel = Babel(app)

@babel.localeselector
def get_locale():
    return request.accept_languages.best_match(['en', 'ko'])

@app.context_processor
def inject_gettext():
    return dict(gettext=gettext)

이제 번역 파일을 생성하여 다국어를 지원할 수 있습니다. 각 언어에 대해 폼 필드의 라벨을 번역합니다. 예를 들어, locale/ko/LC_MESSAGES/messages.po 파일에 다음과 같이 번역합니다.

msgid "My Field"
msgstr "내 필드"

이렇게 번역을 마치면 사용자 정의 폼 클래스에서 label 속성을 gettext() 함수로 감싸서 번역을 적용할 수 있습니다.

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
from flask_babel import gettext

class MyForm(FlaskForm):
    my_field = StringField(gettext('My Field'), validators=[InputRequired()])
    submit = SubmitField(gettext('Submit'))

이제 사용자는 웹 어플리케이션에서 언어 설정에 따라 폼 필드의 라벨이 자동으로 다국어로 표시됩니다.

참고 자료: