國際化站點
管理多個本地包
# zh.json
{
"zh": {
"submit": "提交",
"create": "建立"
}
}
# en.json
{
"en": {
"submit": "Submit",
"create": "Create"
}
}自動載入本地套件
template mapfunc
總結
links
Last updated
# zh.json
{
"zh": {
"submit": "提交",
"create": "建立"
}
}
# en.json
{
"en": {
"submit": "Submit",
"create": "Create"
}
}Last updated
Tr:=i18n.NewLocale()
Tr.LoadPath("config/locales")fmt.Println(Tr.Translate("submit"))
//輸出 Submit
Tr.SetLocale("zh")
fmt.Println(Tr.Translate("submit"))
//輸出“提交”//載入預設配置檔案,這些檔案都放在 go-i18n/locales 下面
//檔案命名 zh.json、en.json、en-US.json 等,可以不斷的擴充套件支援更多的語言
func (il *IL) loadDefaultTranslations(dirPath string) error {
dir, err := os.Open(dirPath)
if err != nil {
return err
}
defer dir.Close()
names, err := dir.Readdirnames(-1)
if err != nil {
return err
}
for _, name := range names {
fullPath := path.Join(dirPath, name)
fi, err := os.Stat(fullPath)
if err != nil {
return err
}
if fi.IsDir() {
if err := il.loadTranslations(fullPath); err != nil {
return err
}
} else if locale := il.matchingLocaleFromFileName(name); locale != "" {
file, err := os.Open(fullPath)
if err != nil {
return err
}
defer file.Close()
if err := il.loadTranslation(file, locale); err != nil {
return err
}
}
}
return nil
}//locale=zh 的情況下,執行如下程式碼:
fmt.Println(Tr.Time(time.Now()))
//輸出:2009 年 1 月 08 日 星期四 20:37:58 CST
fmt.Println(Tr.Time(time.Now(),"long"))
//輸出:2009 年 1 月 08 日
fmt.Println(Tr.Money(11.11))
//輸出:¥11.11func I18nT(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Translate(s)
}t.Funcs(template.FuncMap{"T": I18nT}){{.V.Submit | T}}func I18nTimeDate(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Time(s)
}t.Funcs(template.FuncMap{"TD": I18nTimeDate}){{.V.Now | TD}}func I18nMoney(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Money(s)
}t.Funcs(template.FuncMap{"M": I18nMoney}){{.V.Money | M}}