i18n.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package conf
  2. import (
  3. "io/ioutil"
  4. "strings"
  5. yaml "gopkg.in/yaml.v2"
  6. )
  7. // Dictinary 字典
  8. var Dictinary *map[interface{}]interface{}
  9. // LoadLocales 读取国际化文件
  10. func LoadLocales(path string) error {
  11. //dir, _ := os.Getwd()
  12. //fmt.Println(dir + path)
  13. data, err := ioutil.ReadFile(path)
  14. if err != nil {
  15. return err
  16. }
  17. m := make(map[interface{}]interface{})
  18. err = yaml.Unmarshal([]byte(data), &m)
  19. if err != nil {
  20. return err
  21. }
  22. Dictinary = &m
  23. return nil
  24. }
  25. // T 翻译
  26. func T(key string) string {
  27. dic := *Dictinary
  28. keys := strings.Split(key, ".")
  29. for index, path := range keys {
  30. // 如果到达了最后一层,寻找目标翻译
  31. if len(keys) == (index + 1) {
  32. for k, v := range dic {
  33. if k, ok := k.(string); ok {
  34. if k == path {
  35. if value, ok := v.(string); ok {
  36. return value
  37. }
  38. }
  39. }
  40. }
  41. return path
  42. }
  43. // 如果还有下一层,继续寻找
  44. for k, v := range dic {
  45. if ks, ok := k.(string); ok {
  46. if ks == path {
  47. if dic, ok = v.(map[interface{}]interface{}); ok == false {
  48. return path
  49. }
  50. }
  51. } else {
  52. return ""
  53. }
  54. }
  55. }
  56. return ""
  57. }