2012-01-07 57 views
6

也许我正在俯瞰着明显的解决方案或思维方式不对......从外部源获取翻译文本进入目录

我有文字,词汇量有限的数据库,我想显示翻译给烧瓶/ jinja/babel webapp中的用户。例如。 “运行”是“活动”列的可能值,对于我的德国用户应该是“laufen”。

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

我能想到的唯一的事情就是创建一个.py文件,并在其中放置大量的_('...')行,但那种感觉只是错误的...是吗?

+0

数据库中的这些单词是否定义为枚举? – plaes 2012-01-15 16:18:09

+0

是的,但不要将自己限制为枚举或数据库。 另一种情况可能是外部系统,可能会发送JSON到我的系统,某些词语,我需要翻译,哪些*从未*出现在* my *代码中,但只在传入的消息中。 我知道这些词让我们来说说API规范,但是我想避免把它们放在我的代码中作为'_('word')',只是被gettext拾取。 我想我只是使用一个痛苦的文本文件每行一个字,并为它写我自己的提取功能。 – Florian 2012-01-15 21:05:34

回答

3

我创建了一个messages.txt与我 “的话” 之类的gettext函数调用:

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

并把它添加到我的babel.cfg为Python源:

[python: messages.txt] 

朴素,简单,愚蠢的,但工程。

1

首先,从http://flask.pocoo.org/snippets/4/开始。

其次,你需要存储这些“有限”值作为数据库整数或枚举,然后创建查找表的代码所有这些枚举(所以通天知道它们):

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登记。

+0

第二部分是我遇到问题的部分。我不想从数据库中获取所有文本,并手动将其复制到代码中。 最后一点,我实际上是通过使用“| trans”过滤器来解决的,该过滤器查找翻译。 – Florian 2012-01-15 20:53:16