如何在使用flask-admin时自动翻译字段标签?

时间:2015-06-16 06:22:29

标签: python flask flask-admin

我想知道如何使用Flask-BabelEx(Flask-Admin推荐)在burn-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)而不是翻译的字符串(物流费用)一直显示在列表和编辑页面中。

这里有没有遗失?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我的猜测是,在您的情况下,gettext("logistic_amount")实际上并不会返回已翻译的字符串。

作为一个相当粗略的快速解决方案'您可以尝试为您的模型使用自定义admin/model/list.html并:将所有{{ name }}替换为{{ _(name) }},然后Jinja应该处理这个问题。 (为我工作。)

我还没有调查过,但我相信这是Babel / BabelEx配置问题。

此致

答案 1 :(得分:0)

我们需要使用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"),)