2012-01-07 26 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