也许我正在俯瞰着明显的解决方案或思维方式不对......从外部源获取翻译文本进入目录
我有文字,词汇量有限的数据库,我想显示翻译给烧瓶/ jinja/babel webapp中的用户。例如。 “运行”是“活动”列的可能值,对于我的德国用户应该是“laufen”。
提取模板和代码中的单词并将其放入目录中,但是如何将额外的单词放入目录中?有没有简单的文本文件提取?
我能想到的唯一的事情就是创建一个.py文件,并在其中放置大量的_('...')行,但那种感觉只是错误的...是吗?
也许我正在俯瞰着明显的解决方案或思维方式不对......从外部源获取翻译文本进入目录
我有文字,词汇量有限的数据库,我想显示翻译给烧瓶/ jinja/babel webapp中的用户。例如。 “运行”是“活动”列的可能值,对于我的德国用户应该是“laufen”。
提取模板和代码中的单词并将其放入目录中,但是如何将额外的单词放入目录中?有没有简单的文本文件提取?
我能想到的唯一的事情就是创建一个.py文件,并在其中放置大量的_('...')行,但那种感觉只是错误的...是吗?
我创建了一个messages.txt与我 “的话” 之类的gettext函数调用:
_('cycling')
_('running')
并把它添加到我的babel.cfg为Python源:
[python: messages.txt]
朴素,简单,愚蠢的,但工程。
首先,从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_val
和i18n_all
变量,只是context processors登记。
第二部分是我遇到问题的部分。我不想从数据库中获取所有文本,并手动将其复制到代码中。 最后一点,我实际上是通过使用“| trans”过滤器来解决的,该过滤器查找翻译。 – Florian 2012-01-15 20:53:16
数据库中的这些单词是否定义为枚举? – plaes 2012-01-15 16:18:09
是的,但不要将自己限制为枚举或数据库。 另一种情况可能是外部系统,可能会发送JSON到我的系统,某些词语,我需要翻译,哪些*从未*出现在* my *代码中,但只在传入的消息中。 我知道这些词让我们来说说API规范,但是我想避免把它们放在我的代码中作为'_('word')',只是被gettext拾取。 我想我只是使用一个痛苦的文本文件每行一个字,并为它写我自己的提取功能。 – Florian 2012-01-15 21:05:34