github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/i18n/i18n.go (about) 1 package i18n 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "path/filepath" 8 9 f0 "github.com/isyscore/isc-gobase/file" 10 ) 11 12 // InitI18N 初始化国际化,传入的语言为默认语言 13 func InitI18N(language string) error { 14 pwd, _ := os.Getwd() 15 i18nDir := filepath.Join(pwd, "i18n") 16 if !f0.DirectoryExists(i18nDir) { 17 f0.MkDirs(i18nDir) 18 } 19 lngFile := filepath.Join(i18nDir, fmt.Sprintf("%s.po", language)) 20 if !f0.FileExists(lngFile) { 21 return fmt.Errorf("没有找到指定的语言文件 %s", lngFile) 22 } 23 innerMap = NewI18NMap(language, lngFile) 24 return nil 25 } 26 27 // LoadI18NLanguage 加载指定语言,该语言将优先于默认语言,但是若指定语言中不存在某个key,将会从默认语言读取 28 func LoadI18NLanguage(language string) error { 29 pwd, _ := os.Getwd() 30 i18nDir := filepath.Join(pwd, "i18n") 31 lngFile := filepath.Join(i18nDir, fmt.Sprintf("%s.po", language)) 32 if !f0.FileExists(lngFile) { 33 return fmt.Errorf("没有找到指定的语言文件 %s", lngFile) 34 } 35 innerMap.Language = language 36 innerMap.Data = loadPo(lngFile) 37 return nil 38 } 39 40 func T(key string) string { 41 if v, ok := innerMap.Data[key]; ok { 42 return v 43 } else if v, ok := innerMap.DefaultData[key]; ok { 44 return v 45 } else { 46 log.Printf("没有找到key %s", key) 47 return "" 48 } 49 } 50 51 func Tf(key string, value ...any) string { 52 if v, ok := innerMap.Data[key]; ok { 53 return fmt.Sprintf(v, value...) 54 } else if v, ok := innerMap.DefaultData[key]; ok { 55 return fmt.Sprintf(v, value...) 56 } else { 57 log.Printf("没有找到key %s", key) 58 return "" 59 } 60 }