使用 flask-admin 时如何自动翻译字段标签?
How to translate field label automatically when using flask-admin?
我想知道如何使用 Flask-BabelEx(Flask-Admin 推荐)自动翻译 flask-admin 生成的字段标签。
例如,如果我有一个定义如下的字段:
class PurchaseOrder(Base):
__tablename__ = 'purchase_order'
id = Column(Integer, primary_key=True)
logistic_amount = Column(Numeric(xxxx))
def __unicode__(self):
return self.id
并且视图被定义为
class PurchaseOrderAdmin(ModelView):
column_labels = dict(logistic_amount=gettext("logistic_amount"),)
然后如下注册到管理员:
admin.add_view(PurchaseOrderAdmin(PurchaseOrder, db_session, category='Order'))
这是我初始化 babel 的方式:
babel = Babel(app, default_locale="zh_CN", default_timezone="CST")
@babel.localeselector
def get_locale():
override = request.args.get('lang')
if override:
session['lang'] = override
return session.get('lang', 'zh_CN')
我生成了以下文件:
translations/zh_CN/LC_MESSAGES/messages.mo
translations/zh_CN/LC_MESSAGES/messages.po
文件 messages.po 的内容如下所示:
msgid ""
msgstr ""
msgid "logistic_amount"
msgstr "物流费用"
但列表和编辑页面中似乎一直显示的是密钥(logistic_amount)而不是翻译后的字符串(物流费用)
这里是不是少了一块?
感谢您的帮助。
我的猜测是,在您的情况下 gettext("logistic_amount")
实际上 return 不是翻译后的字符串。
作为一个相当粗略的 'quick fix',您可以尝试为您的模型使用自定义 admin/model/list.html
并且:将所有出现的 {{ name }}
替换为 {{ _(name) }}
,然后 Jinja 应该采用照顾那个。 (为我工作。)
我没有调查过,但我相信那是一些 Babel / BabelEx 配置问题。
此致
我们需要使用 lazy_gettext 而不是 gettext 来使其工作,示例如下:
adminViews.add_view(SalesOrderAdmin(SalesOrder, db_session, name=lazy_gettext("Sales Order")))
和
class PurchaseOrderAdmin(ModelView):
column_labels = dict(logistic_amount=lazy_gettext("logistic_amount"),)
我想知道如何使用 Flask-BabelEx(Flask-Admin 推荐)自动翻译 flask-admin 生成的字段标签。
例如,如果我有一个定义如下的字段:
class PurchaseOrder(Base):
__tablename__ = 'purchase_order'
id = Column(Integer, primary_key=True)
logistic_amount = Column(Numeric(xxxx))
def __unicode__(self):
return self.id
并且视图被定义为
class PurchaseOrderAdmin(ModelView):
column_labels = dict(logistic_amount=gettext("logistic_amount"),)
然后如下注册到管理员:
admin.add_view(PurchaseOrderAdmin(PurchaseOrder, db_session, category='Order'))
这是我初始化 babel 的方式:
babel = Babel(app, default_locale="zh_CN", default_timezone="CST")
@babel.localeselector
def get_locale():
override = request.args.get('lang')
if override:
session['lang'] = override
return session.get('lang', 'zh_CN')
我生成了以下文件:
translations/zh_CN/LC_MESSAGES/messages.mo
translations/zh_CN/LC_MESSAGES/messages.po
文件 messages.po 的内容如下所示:
msgid ""
msgstr ""
msgid "logistic_amount"
msgstr "物流费用"
但列表和编辑页面中似乎一直显示的是密钥(logistic_amount)而不是翻译后的字符串(物流费用)
这里是不是少了一块?
感谢您的帮助。
我的猜测是,在您的情况下 gettext("logistic_amount")
实际上 return 不是翻译后的字符串。
作为一个相当粗略的 'quick fix',您可以尝试为您的模型使用自定义 admin/model/list.html
并且:将所有出现的 {{ name }}
替换为 {{ _(name) }}
,然后 Jinja 应该采用照顾那个。 (为我工作。)
我没有调查过,但我相信那是一些 Babel / BabelEx 配置问题。
此致
我们需要使用 lazy_gettext 而不是 gettext 来使其工作,示例如下:
adminViews.add_view(SalesOrderAdmin(SalesOrder, db_session, name=lazy_gettext("Sales Order")))
和
class PurchaseOrderAdmin(ModelView):
column_labels = dict(logistic_amount=lazy_gettext("logistic_amount"),)