golang i18n, golang实现的多语言解析使用
internationalization (国际化)简称:i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。 一般用语言_地区的形式表示一种语言,如:zh_CN表示简体中文。
- go mod
require github.com/gohouse/i18n master
- go get
go get github.com/gohouse/i18n
可以查看包内的示例代码: https://github.com/gohouse/i18n/blob/master/examples/demo.go
添加语言文件
# 创建文件夹
mkdir -p /go/src/gopro/language/zh_cn /go/src/gopro/language/en-us
# 编写中文语言文件
cat >>~/go/src/gopro/language/zh_cn/error.json<<EOF
{
"test": "测试",
"params_format_error": "参数格式有误",
"params_missing": "参数缺失",
"err2": {
"aa": "aaxx",
"bb": {
"cc": "cc"
}
}
}
EOF
# 编写英文语言文件
cat >>~/go/src/gopro/language/en-us/error.json<<EOF
{
"test": "just a test",
"params_format_error": "Incorrect parameters format",
"params_missing": "Missing parameters",
"err2": {
"aa": "aaxx",
"bb": {
"cc": "cc"
}
}
}
EOF
编写go代码文件~/go/src/gopro/demo.go
package main
import (
"fmt"
"github.com/gohouse/i18n"
// 这里不要忘记引入默认的json驱动
_ "github.com/gohouse/i18n/parser_json"
)
func main() {
lang := i18n.NewI18n(
// 这里指定语言文件路径
i18n.LangDirectory("/go/src/github.com/gohouse/i18n/examples/language"),
// 这里如果不i设置, 则默认使用zh_cn
//i18n.DefaultLang("zh_cn"),
// 这里如果不i设置, 则默认使用 json,可以自定义解析器和配置文件格式
//i18n.DefaultParser("json"),
)
// 加载error.json文件内的具体配置项, 多级加载, 使用.连接
test := lang.LoadWithDefault("error.test")
test2 := lang.LoadWithDefault("error.err2.bb.cc")
fmt.Println(test)
fmt.Println(test2)
}
结果
测试
cc
i18n默认提供了json解析器, 同时, 提供了解析器接口, 可以自由定制其他格式的解析器, 如yml,ini,toml等
语言标识 | 国家地区 |
---|---|
zh_CN | 简体中文(中国) |
zh_TW | 繁体中文(台湾地区) |
zh_HK | 繁体中文(香港) |
en_HK | 英语(香港) |
en_US | 英语(美国) |
en_GB | 英语(英国) |
en_WW | 英语(全球) |
en_CA | 英语(加拿大) |
en_AU | 英语(澳大利亚) |
en_IE | 英语(爱尔兰) |
en_FI | 英语(芬兰) |
fi_FI | 芬兰语(芬兰) |
en_DK | 英语(丹麦) |
da_DK | 丹麦语(丹麦) |
en_IL | 英语(以色列) |
he_IL | 希伯来语(以色列) |
en_ZA | 英语(南非) |
en_IN | 英语(印度) |
en_NO | 英语(挪威) |
en_SG | 英语(新加坡) |
en_NZ | 英语(新西兰) |
en_ID | 英语(印度尼西亚) |
en_PH | 英语(菲律宾) |
en_TH | 英语(泰国) |
en_MY | 英语(马来西亚) |
en_XA | 英语(阿拉伯) |
ko_KR | 韩文(韩国) |
ja_JP | 日语(日本) |
nl_NL | 荷兰语(荷兰) |
nl_BE | 荷兰语(比利时) |
pt_PT | 葡萄牙语(葡萄牙) |
pt_BR | 葡萄牙语(巴西) |
fr_FR | 法语(法国) |
fr_LU | 法语(卢森堡) |
fr_CH | 法语(瑞士) |
fr_BE | 法语(比利时) |
fr_CA | 法语(加拿大) |
es_LA | 西班牙语(拉丁美洲) |
es_ES | 西班牙语(西班牙) |
es_AR | 西班牙语(阿根廷) |
es_US | 西班牙语(美国) |
es_MX | 西班牙语(墨西哥) |
es_CO | 西班牙语(哥伦比亚) |
es_PR | 西班牙语(波多黎各) |
de_DE | 德语(德国) |
de_AT | 德语(奥地利) |
de_CH | 德语(瑞士) |
ru_RU | 俄语(俄罗斯) |
it_IT | 意大利语(意大利) |
el_GR | 希腊语(希腊) |
no_NO | 挪威语(挪威) |
hu_HU | 匈牙利语(匈牙利) |
tr_TR | 土耳其语(土耳其) |
cs_CZ | 捷克语(捷克共和国) |
sl_SL | 斯洛文尼亚语 |
pl_PL | 波兰语(波兰) |
sv_SE | 瑞典语(瑞典) |
es_CL | 西班牙语 (智利) |