[python] Flask-WTF에서 다국어 지원을 위해 언어 선택 옵션을 제공하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 프레임워크를 위한 WTForms의 확장입니다. Flask-WTF를 사용하면 쉽게 웹 어플리케이션에서 다국어를 지원할 수 있습니다.

먼저, Flask-WTF를 설치해야 합니다. 다음 명령을 사용하여 설치할 수 있습니다:

pip install Flask-WTF

다음으로, Flask-WTF의 FlaskForm 클래스를 사용하여 양식을 정의합니다. 양식에 언어 선택 옵션을 추가하기 위해 SelectField를 사용할 수 있습니다. 다음은 이를 구현한 예시입니다:

from flask_wtf import FlaskForm
from wtforms import SelectField

class LanguageForm(FlaskForm):
    language = SelectField('Language', choices=[('en', 'English'), ('es', 'Spanish'), ('ko', 'Korean')])

위의 예시에서 SelectFieldchoices 매개변수에는 언어 코드와 해당 언어 이름을 포함하는 튜플의 리스트를 전달합니다. 이 예시에서는 영어, 스페인어, 한국어를 선택할 수 있도록 했습니다.

다음으로, Flask 어플리케이션에서 위에서 정의한 양식을 사용하고, 사용자가 선택한 언어를 처리하는 뷰 함수를 작성해야 합니다. 다음은 이를 구현한 예시입니다:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm

app = Flask(__name__)
app.secret_key = 'your-secret-key'

@app.route('/', methods=['GET', 'POST'])
def home():
    form = LanguageForm()
    
    if form.validate_on_submit():
        selected_language = form.language.data
        # 선택된 언어를 어플리케이션에서 처리하는 로직을 작성합니다. 예를 들어 언어 설정을 업데이트하거나 로그인 사용자의 언어 설정을 저장할 수 있습니다.
        # 이 예시에서는 선택된 언어를 세션에 저장합니다.
        session['lang'] = selected_language
        return redirect('/')
    
    return render_template('home.html', form=form)

위의 예시에서는 / 경로에 대한 GET과 POST 요청을 처리하는 home 함수를 작성하였습니다. GET 요청일 경우 LanguageForm 양식을 사용하여 템플릿을 렌더링합니다. POST 요청일 경우, 양식이 유효할 경우 선택된 언어를 처리하는 로직을 작성하고, 세션에 언어를 저장하는 예시를 보여주었습니다.

마지막으로, 선택된 언어를 템플릿에서 사용할 수 있도록 언어 설정을 만들어야 합니다. Flask에서는 context processor를 사용하여 템플릿에서 사용할 수 있는 변수를 제공할 수 있습니다. 다음은 이를 구현한 예시입니다:

@app.context_processor
def inject_language():
    lang = session.get('lang')
    if lang is None:
        lang = 'en'  # 기본 언어 설정입니다.
    
    # 다른 다국어 설정을 여기에 추가할 수 있습니다.
    translations = {
        'en': {
            'welcome_message': 'Welcome to our application!'
        },
        'es': {
            'welcome_message': '¡Bienvenido a nuestra aplicación!'
        },
        'ko': {
            'welcome_message': '우리 애플리케이션에 오신 것을 환영합니다!'
        }
    }
    
    return dict(lang=lang, translations=translations.get(lang))

위의 예시에서는 inject_language 함수를 사용하여 lang 변수와 선택된 언어에 맞는 다국어 설정을 템플릿에서 사용할 수 있도록 만들었습니다. translations 딕셔너리를 통해 각 언어에 맞는 다국어를 제공할 수 있습니다.

이제 언어 선택 옵션을 가진 양식을 플라스크 어플리케이션에 추가하고, 선택된 언어에 맞는 다국어 설정을 사용하여 원하는 템플릿을 렌더링할 수 있습니다.