我正在使用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")}}
等常量字符串,一切正常。
答案 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")
将包含以下值:green
,red
,blue
,white
,black
,You chose
和as the color of magic
在PO文件中。
另一方面,如果您尝试翻译用户提供的字符串,那么您将需要另一种解决方案,因为Babel是一种静态翻译服务。
答案 1 :(得分:0)
遇到同样的问题。我需要翻译在运行时传递给jinja2的月份名称。我想出的解决方案是传递已翻译的名称。然后,我所要做的就是声明一个静态的名字列表,如接受的答案中所述。希望这会有所帮助。