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/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相关包比较好。当涉及到返回的数据需要不同语言时,还是在后端直接处理好返回给前端。