大家好,我是peachesTao,今天给大家推荐一个go的支持多语言的error自动生成的插件,插件主页可以访问下方链接。
在一个多语言国际化的项目中,后端接口返回给前端的错误描述也需要国际化,我们来看一下后端给前端返回多语言错误描述的实现方式有哪些。
常规实现
服务端将错误码和不同语言的错误描述硬编码在代码中,通过前端从http head中传过来的language来决定是返回中文还是英文。
1、定义Error结构体
该结构体实现标准库的error接口,实现自定义error
type Error struct {
Code int
Msg string
}
func (e *Error) Error() string {
return fmt.Sprintf("%d,%s", e.Code, e.Msg)
}
2、定义错误码和错误描述map
const (
Err_Code_Success = 0
Err_Code_UnKnown = -1
Err_Code_InValid_Phone = 10001
)
const (
Language_Chinese = 0 //中文
Language_Enligh = 1 //英文
)
//不同语言对应的错误描述
var errMap = map[int]map[int]string{
Language_Chinese: {
Err_Code_Success: "成功",
Err_Code_InValid_Phone: "手机号格式不正确",
Err_Code_UnKnown: "未知错误",
},
Language_Enligh: {
Err_Code_Success: "success",
Err_Code_InValid_Phone: "invalid phone no",
Err_Code_UnKnown: "unknown err",
},
}
3、申明一个用户注册的api
根据客户端传过来的http header中的language的值决定返回中文还是英文的错误描述
func main() {
http.HandleFunc("/user/register", func(w http.ResponseWriter, r *http.Request) {
languageStr := r.Header.Get("language")
language, _ := strconv.