用 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