translation.go 1.2 KB

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