flask-babel:如何翻译变量

时间:2016-01-03 17:18:15

标签: python flask babel flask-babel

我正在使用flask-babel来翻译基于Flask的Web应用程序。我真的想知道如何翻译变量的内容,比如foo

我尝试{{ _(foo) }},但是当我像这样更新.po文件时:

pybabel extract -F babel.cfg -k lazy_gettext -o messages.pot .
pybabel update -i messages.pot -d translations

使用foo var。

的内容进行翻译时,不会显示任何内容

对于{{ _("goo")}}等常量字符串,一切正常。

2 个答案:

答案 0 :(得分:1)

您无法提取变量,因为在运行时查找表达式_(some_variable) some_variable。如果从静态值列表中取出some_variable,则将提取静态值 。例如:

COLORS_OF_MAGIC = [_("green"), _("red"), _("blue"), _("white"), _("black")]

def color_for_index(index):
    if not (0 < index > len(COLORS_OF_MAGIC)):
        index = 0

    return COLORS_OF_MAGIC[index]

def do_work():
    index = get_index_from_user()
    some_variable = color_for_index(index)
    return _("You chose ") + _(some_variable) + _(" as the color of magic")

将包含以下值:greenredbluewhiteblackYou choseas the color of magic在PO文件中。

另一方面,如果您尝试翻译用户提供的字符串,那么您将需要另一种解决方案,因为Babel是一种静态翻译服务。

答案 1 :(得分:0)

遇到同样的问题。我需要翻译在运行时传递给jinja2的月份名称。我想出的解决方案是传递已翻译的名称。然后,我所要做的就是声明一个静态的名字列表,如接受的答案中所述。希望这会有所帮助。