【问题标题】:how to translate inside a loop using flask-babel如何使用flask-babel在循环内翻译
【发布时间】:2015-11-18 18:31:46
【问题描述】:

我很难弄清楚如何使用 flask-babel 来转换循环内的变量。给出这个(非工作)示例,我需要为每次迭代更改哪些内容才能拥有自己的翻译?

{% for key, values in products.items() %}
    <h4>{{ _('%(name)s', name=values['name']) }}</h4>
    <p>{{ _('%(caption)s', caption=values['caption']) }}</p>
{% endfor %}

在这个例子中,PO 的生成方式如下:

msgid "%(name)s"
msgstr ""

据我所知,这只允许我为翻译插入一个值

【问题讨论】:

  • products 变量是否有动态内容?我的意思是您可以在线添加更多产品(或编辑、删除、重命名等)吗?
  • 是的,没错。信息实际上是从 3rd 方 api 中提取的,并且列表可以并且将会改变

标签: python flask internationalization jinja2 flask-babel


【解决方案1】:

所以你有静态和动态文本。 Babel-way 翻译文本只对静态文本有效。对于动态生成的文本,它会非常无效:Babel 不知道动态文本,每次新产品出现时,您都必须手动将新闻文本添加到 PO。不推荐。

您应该对动态文本使用不同的方法。我想您会定期通过第 3 方 API 将产品导入数据库,因此您拥有 Product 模型。如果只有几种语言和文本要翻译,那么只有一个模型具有许多翻译字段(每种语言一个)仍然足够。例如:

class Product(db.Model):
    __tablename__ = 'product'

    id       = db.Column(db.Integer, primary_key=True)
    category = db.Column(db.SmallInteger, index=True)
    added    = db.Column(db.DateTime, index=True)

    name_en  = db.Column(db.String(255))
    name_eo  = db.Column(db.String(255))
    name_hu  = db.Column(db.String(255))

    description_en = db.Column(db.Text)
    description_eo = db.Column(db.Text)
    description_hu = db.Column(db.Text)

因此,在您导入新产品后,您可以通过在线界面翻译其文本。如果您有许多要翻译的字段,您可以将Product 的语言相关部分和独立部分分开,并为它们设置单独的模型:

class Product(db.Model):
    __tablename__ = 'product'

    id       = db.Column(db.Integer, primary_key=True)
    category = db.Column(db.SmallInteger, index=True)
    added    = db.Column(db.DateTime, index=True)

class ProductText(db.Model):
    __tablename__ = 'product'

    id          = db.Column(db.Integer, primary_key=True)
    pid         = db.Column(db.Integer, db.ForeignKey('product.id'))
    language    = db.Column(db.String(10), index=True)

    name        = db.Column(db.String(255))
    description = db.Column(db.Text)

因此,当您想向客户展示产品时,首先检查活动语言,然后将对应的翻译后的ProductText 与当前的Product 一起加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    相关资源
    最近更新 更多