flask
flask_ext
python
babel
官方文件:
flask_babel
包裝了babel
讓Flask用戶可以便捷的使用它,不管如何,官方文件都很建議要閱讀過一次,至少知道這個package的用途,當然,其它還有如gettext
、pytz
、speaklater
也有其相關性,在了解如何應用之後也記得往下深入理解。
安裝的時候會將相依套件babel
一併安裝,不需要各別安裝。
直觀來看,babel
的應用包括了本地時間、日期、數值的格式化以及多語系的應用,本地(locale)所指的即為en_US
、zh_TW
…等設置。
下面是一個官方文件上簡單的設置說明,利用Locale
來設置語系,案例中利用Locale.parse
來設置語系為zh_TW
,如下:
設置本地語系之後,還可以再套其它語系來顯示想顯示的資訊,雖然本地語系已經設置為zh_TW
,但是還是可以再讓顯示的資訊以en_US
來呈現,如下範例:
上述只是一個簡單的案例來快速理解『本地』所指的意函,因此當語系切換的時候,呈現的資訊就可以依著語系來變動。
時間與日期的部份可以結合Python的datetime
、date
、time
等package一起使用,更細部份的部份當然還是會希望直接的看官方文件一次,至少理解到包裝起來的babel
能提供的功能。
下面案例是一個日期時間的格式化,將Pythondatetime
物件做為format_datetime
的參數,再搭配locale
來做不同語系的呈現。
把鏡頭帶回來flask_babel
,Flask的擴展應該可以快速上手了,實作,接著初始化參數,flask_babel
的參數不多,只有兩個:
en
UTC
了解參數之後,我們就來做實作並初始化,如下:
上面我們預設了locale
為en
,timezone=UTC
,當有不同語系的使用者登入的時候,我們可以在登入的時候利用refresh()
來變更。依官方文件說明,babel
第一次需要當前用戶的地區的時候,會呼叫localeselector
,如果需要時區的時候則是呼叫timezoneselector
,如果回傳None
的話,就會取參數設置的預設值了。
千言萬語都不如動手來操作,剛才我們看過了babel
的簡單示範,現在來認識一下flask-babel
。
範例的部份都是直接在Command上操作,所以有『>>>』就是指令,沒有的就是結果
第7行:單純的設置一個datetime
物件dt
,年、月、日、時、分
第11行:測試的時候可以透過test_request_context().push()
來手動模擬一個request
第12行:格式化日期,回傳的格式是很明顯的是en
第14行:檢查預設的default_locale
,可以發現到,即使我們沒有設置參數,預設上還是以en
為主。
接續著上例,如果現在切換語言至zh_TW
,那可以透過refresh()
來做一個locale
的更新
第1行:利用lambda
來設置一個簡單的函數,回傳zh
第2行:利用babel.localeselector
來模擬用戶登入之後取得他的語系
第3行:執行refresh
之前還是回傳en
第5行:執行refresh
之後還是回傳zh
第7行:執行format_datetime
顯示的格式已經是zh_TW
的格式
第9行:加入參數short
,另外還有不少調控的格式,這部份請參閱官方文件
這篇很快速的了解了babel
於日期、時間格式化的應用,簡單的幾個案例,我們大概對將babel
加入專案的時候該怎麼結合登入功能的部份心裡有底,另篇會針對babel
應用在多語系說明,繼續了解。
Flask_babel_多語系:Flask實作_ext_17_Flask_babel_多語系