也許我正在俯瞰着明顯的解決方案或思維方式不對......從外部源獲取翻譯文本進入目錄
我有文字,詞彙量有限的數據庫,我想顯示翻譯給燒瓶/ 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