1

我想用Flask-Babel转换Flask-WTF SelectField 值。

这是我的代码片段:

from flask_babel import _, lazy_gettext as _l

class PaymentStatus(enum.Enum):
    REJECTED = 'REJECTED'
    COMPLETED = 'COMPLETED'
    EXPIRED = 'EXPIRED'

    def __str__(self):
        return self.value

payment_status = [(str(y), y) for y in (PaymentStatus)]

def course_list():
    return Course.query.all()

class PaymentForm(FlaskForm):
    course_name = QuerySelectField(_l('Course name'), validators=[required()], query_factory=course_list)
    status_of_payment = SelectField(_l('Payment Status'), choices=payment_status)
    # ...
    # ...

在那里,我想用Flask-Babelchoices本地化 SelectField值和 QuerySelectFieldquery_factory值。

是否有可能..?,如果是这样,任何示例或参考教程将不胜感激:)

4

1 回答 1

3

SelectFieldchoices可以由lazy_gettext().

引自 The Flask Mega-Tutorial Part XIII: I18n and L10n

一些字符串文字是在 request 之外分配的,通​​常是在应用程序启动时,因此在评估这些文本时,无法知道要使用哪种语言。

Flask-Babel 提供了一个惰性求值版本_(),称为lazy_gettext().

from flask_babel import lazy_gettext as _l

class LoginForm(FlaskForm):
    username = StringField(_l('Username'), validators=[DataRequired()])
    # ...

为了choices

from flask_babel import _, lazy_gettext as _l

class PaymentStatus(enum.Enum):
    REJECTED = _l('REJECTED')
    COMPLETED = _l('COMPLETED')
    EXPIRED = _l('EXPIRED')

    def __str__(self):
        return self.value

QuerySelectFieldquery_factory接受从数据库中查询的值。这些值不应由 Flask-Babel/babel 处理。原因数据库将数据存储在 Python 源代码之外。

可能的解决方案:

顺便说一句,由 Miguel Grinberg 制作的 Flask Mega-Tutorial是一个非常有名的 Flask 教程。所有这些情况都包含在其中。

于 2019-10-01T05:23:12.533 回答