如何給 Pelican 增加 Jinja2 過濾器
雖然這個部落格主要語言是正體中文,但偶爾會需要將英文轉成中文來顯示。例如:將導覽路徑 (breadcrumb) 轉成中文,但在網址路徑中維持使用英文。 要達到這個目的,使用 Jinja 2 模板的過濾器 (filter) 應該是個簡單方案。本文山姆鍋說明如何增加一個客製化過濾器, 來將模板中部分的英文字串對應到中文。
Jinja 過濾器簡介
Jinja 2 的過濾器可以用來修改主題模板中的變數,過濾器以管道符號 ( |
) 分隔,多個過濾器可以串連在一起,例如: {{name|striptags|title}} 。實作上,過濾器只是單純的 Python 函式,用來轉換參數。
客製化過濾器
山姆鍋定義了 customer_filters.py
作為所有客製化過濾器的模組,其中定義一個過濾器 mytrans
, 負責將英文對應到中文字串。
1 | _trans = { |
設定 Pelican 加入過濾器
Pelican 設定檔中的 JINJA_FILTERS
可以用來新增客製化的過濾器,不過需要引入 (import) custom_filters.py 模組先。為了讓 Pelicanconf.py 可以引入該模組,我們同時需要將目前路徑加入系統的引入路徑中 (sys.path)。
下面是片段展示 pelicanconf.py 的部分內容:
1 | import os |
在主題樣板中套用過濾器
要在主題樣板中套用我們開發的過濾器,只需要按照 Jinja 2 [^1] 的語法即可。如下面範例:
1 | <li class="active">{{ category|mytrans }}</li> |
結語
本來山姆鍋以為需要使用 Jinja 2 的 i18n 擴充功能,不過後來稍微研究一下,因為部落格使用正體中文作為預設語言,使用 i18n 擴充功能並無法用來翻譯英文成中文,反過來倒是可以。最後,山姆鍋選擇撰寫一個過濾器來達到目的。
參考資料
-
How to add a custom Jinja filter to Pelican: http://linkpeek.com/blog/how-to-add-a-custom-jinja-filter-to-pelican.html