translation.go 1007 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package translation
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/0xJacky/Nginx-UI/app"
  6. "github.com/0xJacky/pofile"
  7. "github.com/samber/lo"
  8. "io"
  9. "log"
  10. )
  11. var Dict map[string]pofile.Dict
  12. func init() {
  13. Dict = make(map[string]pofile.Dict)
  14. i18nJson, _ := app.DistFS.Open("i18n.json")
  15. defer i18nJson.Close()
  16. bytes, _ := io.ReadAll(i18nJson)
  17. i18nMap := make(map[string]string)
  18. _ = json.Unmarshal(bytes, &i18nMap)
  19. langCode := lo.MapToSlice(i18nMap, func(key string, value string) string {
  20. return key
  21. })
  22. for _, v := range langCode {
  23. handlePo(v)
  24. }
  25. }
  26. func handlePo(langCode string) {
  27. file, err := app.DistFS.Open(fmt.Sprintf("src/language/%s/app.po", langCode))
  28. if err != nil {
  29. log.Fatalln(err)
  30. }
  31. defer file.Close()
  32. bytes, err := io.ReadAll(file)
  33. if err != nil {
  34. log.Fatalln(err)
  35. }
  36. p, err := pofile.ParseText(string(bytes))
  37. if err != nil {
  38. log.Fatalln(err)
  39. }
  40. Dict[langCode] = p.ToDict()
  41. }
  42. func GetTranslation(langCode string) pofile.Dict {
  43. return Dict[langCode]
  44. }