Browse Source

enhance: dynamic translation module

Jacky 1 year ago
parent
commit
7640c1fdc3
4 changed files with 19 additions and 2 deletions
  1. 1 1
      app/app.go
  2. 1 0
      go.mod
  3. 2 0
      go.sum
  4. 15 1
      internal/translation/translation.go

+ 1 - 1
app/app.go

@@ -4,5 +4,5 @@ import (
 	"embed"
 )
 
-//go:embed dist/* dist/*/* src/language/* src/language/*/*
+//go:embed i18n.json dist/* dist/*/* src/language/* src/language/*/*
 var DistFS embed.FS

+ 1 - 0
go.mod

@@ -203,6 +203,7 @@ require (
 	github.com/sacloud/go-http v0.1.8 // indirect
 	github.com/sacloud/iaas-api-go v1.11.2 // indirect
 	github.com/sacloud/packages-go v0.0.10 // indirect
+	github.com/samber/lo v1.39.0 // indirect
 	github.com/scaleway/scaleway-sdk-go v1.0.0-beta.23 // indirect
 	github.com/schollz/closestmatch v2.1.0+incompatible // indirect
 	github.com/shoenig/go-m1cpu v0.1.6 // indirect

+ 2 - 0
go.sum

@@ -1533,6 +1533,8 @@ github.com/sacloud/iaas-api-go v1.11.2/go.mod h1:gjiuIY5c/7lj2LmFnVgyHcPMT17PysX
 github.com/sacloud/packages-go v0.0.10 h1:UiQGjy8LretewkRhsuna1TBM9Vz/l9FoYpQx+D+AOck=
 github.com/sacloud/packages-go v0.0.10/go.mod h1:f8QITBh9z4IZc4yE9j21Q8b0sXEMwRlRmhhjWeDVTYs=
 github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ=
+github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
+github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
 github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo=
 github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U=
 github.com/sashabaranov/go-openai v1.19.2 h1:+dkuCADSnwXV02YVJkdphY8XD9AyHLUWwk6V7LB6EL8=

+ 15 - 1
internal/translation/translation.go

@@ -1,9 +1,11 @@
 package translation
 
 import (
+	"encoding/json"
 	"fmt"
 	"github.com/0xJacky/Nginx-UI/app"
 	"github.com/0xJacky/pofile/pofile"
+	"github.com/samber/lo"
 	"io"
 	"log"
 )
@@ -13,7 +15,19 @@ var Dict map[string]pofile.Dict
 func init() {
 	Dict = make(map[string]pofile.Dict)
 
-	langCode := []string{"zh_CN", "zh_TW", "ru_RU", "fr_FR", "es", "vi_VN"}
+	i18nJson, _ := app.DistFS.Open("i18n.json")
+
+	defer i18nJson.Close()
+
+	bytes, _ := io.ReadAll(i18nJson)
+
+	i18nMap := make(map[string]string)
+
+	_ = json.Unmarshal(bytes, &i18nMap)
+
+	langCode := lo.MapToSlice(i18nMap, func(key string, value string) string {
+		return key
+	})
 
 	for _, v := range langCode {
 		handlePo(v)