Python flask babel:如何翻译变量

Python flask babel:如何翻译变量,python,flask,python-babel,flask-babel,Python,Flask,Python 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 使用foovar的内容进行翻译时,不会显示任何内容 对于常量字符串,如{{{(“goo”)}您不

我正在使用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”)}

您不能提取变量,因为在表达式
{uu(某些变量)
中,某些变量
在运行时被查找。如果从静态值列表中获取某个变量,则将提取静态值。例如:

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")
魔法的颜色=[[绿色]、[红色]、[蓝色]、[白色]、[黑色]] def color_用于索引(索引): 如果不是(0len(魔法的颜色): 索引=0 返回魔法的颜色[索引] def do_work(): index=从用户()获取索引 某些_变量=_索引的颜色(索引) 返回(“您选择的”)+(某些变量)+(“作为魔法的颜色”) 将具有以下值:
绿色
红色
蓝色
白色
黑色
您选择的
,以及
作为PO文件中的魔法颜色


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

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

如果我尝试:
{%trans%}{{activity.title}{%endtrans%}
,我会得到
jinja2.exceptions.TemplateSyntaxError jinja2.exceptions.TemplateSyntaxError:预期的标记是“打印语句结束”,得到“。
那么有什么动态翻译的解决方案吗?说同样的话:巴贝尔不能翻译动态字段,但谁能翻译呢。这是一种应用程序,你可以/应该要求用户为他们的文本提供替代翻译(例如CMS),还是最终用户通常不提供翻译,而有人可能希望看到另一种语言的内容(例如博客)?我从一个文件中得到了变量的值。有什么方法可以翻译吗?我可以定义:
COLORS\u of\u MAGIC=yaml.load(file)
?必须构建自定义脚本是很麻烦的。我认为巴贝尔有足够的能力做到这一点。我必须重新发明轮子。。。