用 i18n 做國際化 go 後端
internationalization,取開頭和結尾字母,算一下字母數 18,組合一下就是 i18n,這是一個約定俗稱的叫法。在其他語言中,做國際化的相關包一般也會以這個名字命名。GitHub - ExcitingFrog/go-pangu: rest api web server based on go(High availability, high security, high performance)internationalization,取開頭和結尾字母,算一下字母數 18,組合一下就是 i18n,這是一個約定俗稱的叫法。在其他語言中,做國際化的相關包一般也會以這個名字命名。
開始
爲了使開發的軟件能夠國際化,需要做各種語言的適配,但是不可能對不同語言進行開發不同的頁面或是接口。因此我們需要對文字的部分進行處理,常見的方法就是,建立不同語言的文件,他們記錄着一些詞語在不同語言下的翻譯,通過關鍵詞索引來完成對應。當要使用的時候,通過調用不同語言文件裏的索引就可以引用出來。
我這裏使用的是
https://github.com/gogf/gfgithub.com/gogf/gf
這個底下的 i18n 包
安裝過後,在根目錄建一個 i18n 的文件夾,新建兩個不同語言的文件。
en.toml
City_SuZhou="SuZhou"
City_Peking="Peking"
zh.toml
City_SuZhou="蘇州"
City_Peking="北京"
如何使用
我們這裏建一個接口來測試,接收前端傳來的 language 參數:en 或者 zh
這裏的 handler 通過 SetLanguage 函數設置語言後,來通過 Translate 函數來調用出關鍵詞所對應的翻譯
var cities = []string{
"City_SuZhou",
"City_Peking",
}
func CityListHandler(c *gin.Context) {
t := gi18n.New()
var list []string
//綁定數據
var params map[string]string
if err := c.ShouldBindJSON(¶ms); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
language := params["language"]
t.SetLanguage(language)
//循環引出所有城市
for _, city := range cities {
list = append(list, t.Translate(city))
}
c.JSON(http.StatusOK, gin.H{
"status": "success",
"cities_list": list,
})
}
當參數是 zh 時,結果就是
{
"cities_list": [
"蘇州",
"北京"
],
"status": "success"
}
當參數是 en 時,結果就是
{
"cities_list": [
"SuZhou",
"Peking"
],
"status": "success"
}
這是一種在後端實現的方法,不同情況需要具體來看,如果是前端顯示的內容,還是在前端使用 i18n 相關包比較好。當涉及到返回的數據需要不同語言時,還是在後端直接處理好返回給前端。
轉自:
zhuanlan.zhihu.com/p/336401644
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/JiFiSWfVdptueSxGmbZE3A