6

可能我忽略了一个明显的解决方案或以错误的方式思考......

我有有限数量的文本,数据库中的单词,我想在flask/jinja/babel webapp 中显示翻译给用户。例如。“运行”是“活动”列的一个可能值,对于我的德国用户来说应该是“劳芬”。

模板和代码中的单词被提取并放入目录中,但是我如何将其他单词放入目录中?有没有简单的文本文件提取器?

我唯一能想到的是,只需创建一个 .py 文件并在其中放入大量 _('...') 行,但这感觉不对……是吗?

4

2 回答 2

4

我用我的“单词”创建了一个 messages.txt,比如 gettext 函数调用:

_('cycling')
_('running')

并将其作为 python 源添加到我的 babel.cfg 中:

[python: messages.txt]

简单,简单,愚蠢,但有效。

于 2012-01-21T15:08:34.263 回答
2

首先,从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_vali18n_all变量可用于所有模板,只需将它们注册到上下文处理器

于 2012-01-15T16:34:14.903 回答