可能我忽略了一个明显的解决方案或以错误的方式思考......
我有有限数量的文本,数据库中的单词,我想在flask/jinja/babel webapp 中显示翻译给用户。例如。“运行”是“活动”列的一个可能值,对于我的德国用户来说应该是“劳芬”。
模板和代码中的单词被提取并放入目录中,但是我如何将其他单词放入目录中?有没有简单的文本文件提取器?
我唯一能想到的是,只需创建一个 .py 文件并在其中放入大量 _('...') 行,但这感觉不对……是吗?
可能我忽略了一个明显的解决方案或以错误的方式思考......
我有有限数量的文本,数据库中的单词,我想在flask/jinja/babel webapp 中显示翻译给用户。例如。“运行”是“活动”列的一个可能值,对于我的德国用户来说应该是“劳芬”。
模板和代码中的单词被提取并放入目录中,但是我如何将其他单词放入目录中?有没有简单的文本文件提取器?
我唯一能想到的是,只需创建一个 .py 文件并在其中放入大量 _('...') 行,但这感觉不对……是吗?
我用我的“单词”创建了一个 messages.txt,比如 gettext 函数调用:
_('cycling')
_('running')
并将其作为 python 源添加到我的 babel.cfg 中:
[python: messages.txt]
简单,简单,愚蠢,但有效。
首先,从http://flask.pocoo.org/snippets/4/开始。
其次,您需要将这些“有限”值作为整数或枚举存储在数据库中,然后在代码中为所有这些枚举创建查找表(以便 Babel 知道它们):
i18n_val = {0: _('running'), ...}
# Or multi-level dict with different categories:
i18n_all = {
'activity': {
0: _('running'), ...
'foo': {
0: _('bar..'), ...
}
}
从模板访问翻译后的字符串现在很简单:
{{ i18n_val[obj.activity] }}
{{ i18n_all['activity'][obj.activity] }}
为了使i18n_val
和i18n_all
变量可用于所有模板,只需将它们注册到上下文处理器。