使用 INI
文件实现的多语言数据的管理和使用。
- 使用简单,支持加载多个语言,多个配置文件
- 两种数据加载模式:单文件
FileMode
(默认) 、文件夹DirMode
- 支持设置默认语言,备用语言;当在默认语言数据没找到时,自动尝试到备用语言查找
- 支持参数替换,有两种模式
SprintfMode
通过fmt.Sprintf
替换参数ReplaceMode
则使用strings.Replacer
替换
go get github.com/gookit/i18n
使用 FileMode
模式的语言文件结构:
lang/
en.ini
ru.ini
zh-CN.ini
zh-TW.ini
... ...
使用 DirMode
模式的语言文件结构:
lang/
en/
default.ini
... ...
zh-CN/
default.ini
... ...
zh-TW/
default.ini
... ...
import "github/gookit/i18n"
defaultLang := "en"
languages := map[string]string{
"en": "English",
"zh-CN": "简体中文",
// "zh-TW": "繁体中文",
}
// 这里直接初始化的默认实例
i18n.Init("conf/lang", defaultLang, languages)
或者创建自定义的新实例
myI18n := i18n.New(langDir string, defLang string, languages)
myI18n := i18n.NewEmpty()
// 从默认语言翻译
msg = i18n.Dtr("key")
// with arguments.
msg = i18n.DefTr("key1", "arg1", "arg2")
// 从指定的语言翻译
msg := i18n.Tr("en", "key")
方法列表:
// 从默认语言翻译
func Dt(key string, args ...interface{}) string
func Dtr(key string, args ...interface{}) string
func DefTr(key string, args ...interface{}) string
// 从指定的语言翻译
func T(lang, key string, args ...interface{}) string
func Tr(lang, key string, args ...interface{}) string
默认就是 SprintfMode
模式, 内部使用 fmt.Spritf()
进行参数的替换处理
# en.ini
desc = I am %s, age is %d
按顺序传入参数使用:
msg := i18n.Tr("en", "desc", "tom", 22)
// Output: "I am tom, age is 22"
使用 ReplaceMode
模式, 内部使用 strings.Replacer
进行参数的替换处理
启用 ReplaceMode
替换模式:
// set mode
i18n.Config(func(l *i18n.I18n) {
l.TransMode = i18n.ReplaceMode
})
// OR
i18n.Std().TransMode = i18n.ReplaceMode
语言配置示例:
# en.ini
desc = I am {name}, age is {age}
按kv顺序传入参数使用:
msg := i18n.Tr("en", "desc", "name", "tom", "age", 22)
// Output: "I am tom, age is 22"
传入 kv-map 参数使用:
msg := i18n.Tr("en", "desc", map[string]interface{}{
"name": "tom",
"age": 22,
})
// Output: "I am tom, age is 22"
go test -cover
- gookit/ini 功能强大的 INI 解析管理