从外部源获取可翻译文本到目录中

时间:2012-01-07 07:26:37

标签: python jinja2 babel

可能我忽略了一个明显的解决方案或者想错了方法......

我有一个数量有限的文本,数据库中的单词,我希望显示转换为flask / jinja / babel webapp中的用户。例如。 “running”是“活动”列的可能值,对于我的德国用户来说应该是“laufen”。

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

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

2 个答案:

答案 0 :(得分:4)

我创建了一个messages.txt,其中的“words”就像gettext函数调用一样:

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

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

[python: messages.txt]

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

答案 1 :(得分:1)

首先,从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变量可用于所有模板,只需使用context processors注册它们。