我想用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-Babel本地化SelectField choices
值和QuerySelectField query_factory
值。
是否可能..?,如果是这样,任何示例或参考教程将不胜感激:)
[SelectField choices
可以由lazy_gettext()
处理。
Quote from The Flask Mega-Tutorial Part XIII: I18n and L10n
通常在应用程序启动时为某些字符串文字分配在请求之外,因此,在评估这些文本时,无法知道使用哪种语言。
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
QuerySelectField query_factory
接受值从数据库中查询。 Flask-Babel / babel不应该处理这些值。原因是数据库是Python源代码之外的数据。
可能的解决方案:
BTW,Flask Mega-Tutorial是一个非常著名的Flask教程。所有这些情况都包含在其中。