diff --git a/cmd/edge-admin/main.go b/cmd/edge-admin/main.go index a1b4ec1b..6cf6f881 100644 --- a/cmd/edge-admin/main.go +++ b/cmd/edge-admin/main.go @@ -11,6 +11,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/nodes" "github.com/TeaOSLab/EdgeAdmin/internal/utils" _ "github.com/TeaOSLab/EdgeAdmin/internal/web" + _ "github.com/TeaOSLab/EdgeCommon/pkg/langs/messages" "github.com/iwind/TeaGo/Tea" _ "github.com/iwind/TeaGo/bootstrap" "github.com/iwind/TeaGo/maps" diff --git a/go.mod b/go.mod index bc6d599f..0046de74 100644 --- a/go.mod +++ b/go.mod @@ -8,15 +8,16 @@ require ( github.com/TeaOSLab/EdgeCommon v0.0.0-00010101000000-000000000000 github.com/cespare/xxhash v1.1.0 github.com/go-sql-driver/mysql v1.5.0 - github.com/iwind/TeaGo v0.0.0-20230304012706-c1f4a4e27470 + github.com/iwind/TeaGo v0.0.0-20230623080147-cd1e53b4915f github.com/iwind/gosock v0.0.0-20211103081026-ee4652210ca4 github.com/miekg/dns v1.1.43 + github.com/quic-go/quic-go v0.36.0 github.com/shirou/gopsutil/v3 v3.22.5 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/tealeg/xlsx/v3 v3.2.3 github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 - golang.org/x/crypto v0.7.0 - golang.org/x/sys v0.6.0 + golang.org/x/crypto v0.10.0 + golang.org/x/sys v0.9.0 google.golang.org/grpc v1.45.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -24,19 +25,29 @@ require ( require ( github.com/frankban/quicktest v1.11.3 // indirect github.com/go-ole/go-ole v1.2.6 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/golang/mock v1.6.0 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.0.0 // indirect - github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 // indirect github.com/kr/pretty v0.2.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/onsi/ginkgo/v2 v2.11.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qtls-go1-19 v0.3.2 // indirect + github.com/quic-go/qtls-go1-20 v0.2.2 // indirect github.com/rogpeppe/fastuuid v1.2.0 // indirect github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - golang.org/x/net v0.8.0 // indirect - golang.org/x/text v0.8.0 // indirect + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/net v0.11.0 // indirect + golang.org/x/text v0.10.0 // indirect + golang.org/x/tools v0.10.0 // indirect google.golang.org/genproto v0.0.0-20220317150908-0efb43f6373e // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect ) diff --git a/go.sum b/go.sum index b657b695..7f74cf78 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -36,13 +37,18 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnVcKQN0E3u5/5lRz+g= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= @@ -55,8 +61,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -67,15 +74,20 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs= +github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/iwind/TeaGo v0.0.0-20210411134150-ddf57e240c2f/go.mod h1:KU4mS7QNiZ7QWEuDBk1zw0/Q2LrAPZv3tycEFBsuUwc= github.com/iwind/TeaGo v0.0.0-20230304012706-c1f4a4e27470 h1:TuRxvKRv9PxKVijWOkUnZm5TeanQqWGUJyPx9u6cra4= github.com/iwind/TeaGo v0.0.0-20230304012706-c1f4a4e27470/go.mod h1:fi/Pq+/5m2HZoseM+39dMF57ANXRt6w4PkGu3NXPc5s= +github.com/iwind/TeaGo v0.0.0-20230623080147-cd1e53b4915f h1:xo6XmXLtveKcwcZAXV6VMxkWNzy/2dStfHEnyowsGAE= +github.com/iwind/TeaGo v0.0.0-20230623080147-cd1e53b4915f/go.mod h1:fi/Pq+/5m2HZoseM+39dMF57ANXRt6w4PkGu3NXPc5s= github.com/iwind/gosock v0.0.0-20211103081026-ee4652210ca4 h1:VWGsCqTzObdlbf7UUE3oceIpcEKi4C/YBUszQXk118A= github.com/iwind/gosock v0.0.0-20211103081026-ee4652210ca4/go.mod h1:H5Q7SXwbx3a97ecJkaS2sD77gspzE7HFUafBO0peEyA= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -97,18 +109,30 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug= github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= +github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/qtls-go1-19 v0.3.2 h1:tFxjCFcTQzK+oMxG6Zcvp4Dq8dx4yD3dDiIiyc86Z5U= +github.com/quic-go/qtls-go1-19 v0.3.2/go.mod h1:ySOI96ew8lnoKPtSqx2BlI5wCpUVPT05RMAlajtnyOI= +github.com/quic-go/qtls-go1-20 v0.2.2 h1:WLOPx6OY/hxtTxKV1Zrq20FtXtDEkeY00CGQm8GEa3E= +github.com/quic-go/qtls-go1-20 v0.2.2/go.mod h1:JKtK6mjbAVcUTN/9jZpvLbGxvdWIKS8uT7EiStoU1SM= +github.com/quic-go/quic-go v0.36.0 h1:JIrO7p7Ug6hssFcARjWDiqS2RAKJHCiwPxBAA989rbI= +github.com/quic-go/quic-go v0.36.0/go.mod h1:zPetvwDlILVxt15n3hr3Gf/I3mDf7LpLKPhR4Ez0AZQ= github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/shabbyrobe/xmlwriter v0.0.0-20200208144257-9fca06d00ffa h1:2cO3RojjYl3hVTbEvJVqrMaFmORhL6O06qdW42toftk= @@ -124,6 +148,7 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/tealeg/xlsx/v3 v3.2.3 h1:MXnVh+9Y8cUglowItTy2HL3Kv6z+q/0aNjeKuTsVqZQ= github.com/tealeg/xlsx/v3 v3.2.3/go.mod h1:0hGmAEoZ48SS1ZAE6eqZJkJVXgOMY+8a33vjXa8S8HA= @@ -131,6 +156,7 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119 h1:YyPWX3jLOtYKulBR6AScGIs74lLrJcgeKRwcbAuQOG4= github.com/xlzd/gotp v0.0.0-20181030022105-c8557ba2c119/go.mod h1:/nuTSlK+okRfR/vnIPqR89fFKonnWPiZymN5ydRJkX8= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo= @@ -138,11 +164,13 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -151,6 +179,9 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -164,16 +195,16 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -193,22 +224,27 @@ golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg= +golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -241,8 +277,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/configloaders/admin_module.go b/internal/configloaders/admin_module.go index e3570f80..40bb34de 100644 --- a/internal/configloaders/admin_module.go +++ b/internal/configloaders/admin_module.go @@ -3,6 +3,8 @@ package configloaders import ( teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/TeaOSLab/EdgeAdmin/internal/rpc" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" "github.com/iwind/TeaGo/maps" @@ -47,6 +49,7 @@ func loadAdminModuleMapping() (map[int64]*AdminModuleList, error) { IsSuper: m.IsSuper, Fullname: m.Fullname, Theme: m.Theme, + Lang: m.Lang, } for _, pbModule := range m.Modules { @@ -158,50 +161,63 @@ func UpdateAdminTheme(adminId int64, theme string) { } } +// FindAdminLang 查找某个管理员选择的语言 +func FindAdminLang(adminId int64) string { + locker.Lock() + defer locker.Unlock() + + list, ok := sharedAdminModuleMapping[adminId] + if ok { + return list.Lang + } + return "" +} + + // AllModuleMaps 所有权限列表 -func AllModuleMaps() []maps.Map { +func AllModuleMaps(langCode string) []maps.Map { var m = []maps.Map{ { - "name": "看板", + "name": langs.Message(langCode, codes.AdminMenuDashboard), "code": AdminModuleCodeDashboard, "url": "/dashboard", }, { - "name": "网站列表", + "name": langs.Message(langCode, codes.AdminMenuServers), "code": AdminModuleCodeServer, "url": "/servers", }, { - "name": "边缘节点", + "name": langs.Message(langCode, codes.AdminMenuNodes), "code": AdminModuleCodeNode, "url": "/clusters", }, { - "name": "域名解析", + "name": langs.Message(langCode, codes.AdminMenuDNS), "code": AdminModuleCodeDNS, "url": "/dns", }, } if teaconst.IsPlus { m = append(m, maps.Map{ - "name": "智能DNS", + "name": langs.Message(langCode, codes.AdminMenuNS), "code": AdminModuleCodeNS, "url": "/ns", }) } m = append(m, []maps.Map{ { - "name": "平台用户", + "name": langs.Message(langCode, codes.AdminMenuUsers), "code": AdminModuleCodeUser, "url": "/users", }, { - "name": "系统用户", + "name": langs.Message(langCode, codes.AdminMenuAdmins), "code": AdminModuleCodeAdmin, "url": "/admins", }, { - "name": "财务管理", + "name": langs.Message(langCode, codes.AdminMenuFinance), "code": AdminModuleCodeFinance, "url": "/finance", }, @@ -210,12 +226,12 @@ func AllModuleMaps() []maps.Map { if teaconst.IsPlus { m = append(m, []maps.Map{ { - "name": "套餐管理", + "name": langs.Message(langCode, codes.AdminMenuPlans), "code": AdminModuleCodePlan, "url": "/plans", }, { - "name": "工单系统", + "name": langs.Message(langCode, codes.AdminMenuTickets), "code": AdminModuleCodeTicket, "url": "/tickets", }, @@ -224,12 +240,12 @@ func AllModuleMaps() []maps.Map { m = append(m, []maps.Map{ { - "name": "日志审计", + "name": langs.Message(langCode, codes.AdminMenuLogs), "code": AdminModuleCodeLog, "url": "/log", }, { - "name": "系统设置", + "name": langs.Message(langCode, codes.AdminMenuSettings), "code": AdminModuleCodeSetting, "url": "/settings", }, diff --git a/internal/configloaders/admin_module_list.go b/internal/configloaders/admin_module_list.go index 00b66ff4..2c26b9a8 100644 --- a/internal/configloaders/admin_module_list.go +++ b/internal/configloaders/admin_module_list.go @@ -7,6 +7,7 @@ type AdminModuleList struct { Modules []*systemconfigs.AdminModule Fullname string Theme string + Lang string } func (this *AdminModuleList) Allow(module string) bool { diff --git a/internal/web/actions/actionutils/parent_action.go b/internal/web/actions/actionutils/parent_action.go index 22ce6833..9fe62234 100644 --- a/internal/web/actions/actionutils/parent_action.go +++ b/internal/web/actions/actionutils/parent_action.go @@ -8,6 +8,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/utils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/dao" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/logs" @@ -148,3 +149,12 @@ func (this *ParentAction) AdminContext() context.Context { func (this *ParentAction) ViewData() maps.Map { return this.Data } + +func (this *ParentAction) Lang() string { + var lang = configloaders.FindAdminLang(this.AdminId()) + if len(lang) > 0 { + // TODO check language still exists + return lang + } + return langs.ParseLangFromAction(this) +} diff --git a/internal/web/actions/default/admins/admin.go b/internal/web/actions/default/admins/admin.go index cb8408ee..ab594bae 100644 --- a/internal/web/actions/default/admins/admin.go +++ b/internal/web/actions/default/admins/admin.go @@ -51,7 +51,7 @@ func (this *AdminAction) RunGet(params struct { // 权限 moduleMaps := []maps.Map{} - for _, m := range configloaders.AllModuleMaps() { + for _, m := range configloaders.AllModuleMaps(this.Lang()) { code := m.GetString("code") isChecked := false for _, module := range admin.Modules { diff --git a/internal/web/actions/default/admins/createPopup.go b/internal/web/actions/default/admins/createPopup.go index 9eb42900..00393279 100644 --- a/internal/web/actions/default/admins/createPopup.go +++ b/internal/web/actions/default/admins/createPopup.go @@ -20,7 +20,7 @@ func (this *CreatePopupAction) Init() { } func (this *CreatePopupAction) RunGet(params struct{}) { - this.Data["modules"] = configloaders.AllModuleMaps() + this.Data["modules"] = configloaders.AllModuleMaps(this.Lang()) this.Show() } diff --git a/internal/web/actions/default/admins/update.go b/internal/web/actions/default/admins/update.go index 9bb2ba0e..7718581b 100644 --- a/internal/web/actions/default/admins/update.go +++ b/internal/web/actions/default/admins/update.go @@ -59,7 +59,7 @@ func (this *UpdateAction) RunGet(params struct { } // 权限 - var moduleMaps = configloaders.AllModuleMaps() + var moduleMaps = configloaders.AllModuleMaps(this.Lang()) for _, m := range moduleMaps { code := m.GetString("code") isChecked := false diff --git a/internal/web/actions/default/dashboard/index.go b/internal/web/actions/default/dashboard/index.go index 897c78b6..b5c01678 100644 --- a/internal/web/actions/default/dashboard/index.go +++ b/internal/web/actions/default/dashboard/index.go @@ -39,7 +39,7 @@ func (this *IndexAction) RunGet(params struct{}) { module, ok := configloaders.FindFirstAdminModule(this.AdminId()) if ok { if module != "dashboard" { - for _, m := range configloaders.AllModuleMaps() { + for _, m := range configloaders.AllModuleMaps(this.Lang()) { if m.GetString("code") == module { this.RedirectURL(m.GetString("url")) return diff --git a/internal/web/helpers/menu.go b/internal/web/helpers/menu.go index da6eb1ea..a953f8ce 100644 --- a/internal/web/helpers/menu.go +++ b/internal/web/helpers/menu.go @@ -5,36 +5,38 @@ package helpers import ( "github.com/TeaOSLab/EdgeAdmin/internal/configloaders" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" + "github.com/TeaOSLab/EdgeCommon/pkg/langs/codes" "github.com/iwind/TeaGo/maps" ) -func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnreadIPItems int64) []maps.Map { +func FindAllMenuMaps(langCode string, nodeLogsType string, countUnreadNodeLogs int64, countUnreadIPItems int64) []maps.Map { return []maps.Map{ { "code": "dashboard", "module": configloaders.AdminModuleCodeDashboard, - "name": "数据看板", + "name": langs.Message(langCode, codes.AdminMenuDashboard), "icon": "dashboard", }, { "code": "servers", "module": configloaders.AdminModuleCodeServer, - "name": "网站列表", + "name": langs.Message(langCode, codes.AdminMenuServers), "subtitle": "", "icon": "clone outsize", "subItems": []maps.Map{ { - "name": "访问日志", + "name": langs.Message(langCode, codes.AdminMenuServerAccessLogs), "url": "/servers/logs", "code": "log", }, { - "name": "证书管理", + "name": langs.Message(langCode, codes.AdminMenuServerCerts), "url": "/servers/certs", "code": "cert", }, { - "name": "网站分组", + "name": langs.Message(langCode, codes.AdminMenuServerGroups), "url": "/servers/groups", "code": "group", }, @@ -44,12 +46,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread "code": "", }, { - "name": "缓存策略", + "name": langs.Message(langCode, codes.AdminMenuServerCachePolicies), "url": "/servers/components/cache", "code": "cache", }, { - "name": "刷新预热", + "name": langs.Message(langCode, codes.AdminMenuServerPurgeFetchCaches), "url": "/servers/components/cache/batch", "code": "cacheBatch", }, @@ -59,12 +61,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread "code": "", }, { - "name": "WAF策略", + "name": langs.Message(langCode, codes.AdminMenuServerWAFPolicies), "url": "/servers/components/waf", "code": "waf", }, { - "name": "IP名单", + "name": langs.Message(langCode, codes.AdminMenuServerIPLists), "url": "/servers/iplists", "code": "iplist", "badge": countUnreadIPItems, @@ -75,12 +77,12 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread "code": "", }, { - "name": "统计指标", + "name": langs.Message(langCode, codes.AdminMenuServerMetrics), "url": "/servers/metrics", "code": "metric", }, { - "name": "通用设置", + "name": langs.Message(langCode, codes.AdminMenuServerGlobalSettings), "url": "/servers/components", "code": "global", }, @@ -89,28 +91,28 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread { "code": "clusters", "module": configloaders.AdminModuleCodeNode, - "name": "边缘节点", + "name": langs.Message(langCode, codes.AdminMenuNodes), "subtitle": "", "icon": "cloud", "subItems": []maps.Map{ { - "name": "集群列表", + "name": langs.Message(langCode, codes.AdminMenuNodeClusters), "url": "/clusters", "code": "cluster", }, { - "name": "节点日志", + "name": langs.Message(langCode, codes.AdminMenuNodeLogs), "url": "/clusters/logs?type=" + nodeLogsType, "code": "log", "badge": countUnreadNodeLogs, }, { - "name": "区域设置", + "name": langs.Message(langCode, codes.AdminMenuNodeRegions), "url": "/clusters/regions", "code": "region", }, { - "name": "节点SSH", + "name": langs.Message(langCode, codes.AdminMenuNodeSSHGrants), "url": "/clusters/grants", "code": "grant", }, @@ -119,22 +121,22 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread { "code": "dns", "module": configloaders.AdminModuleCodeDNS, - "name": "域名解析", + "name": langs.Message(langCode, codes.AdminMenuDNS), "subtitle": "", "icon": "globe", "subItems": []maps.Map{ { - "name": "集群列表", + "name": langs.Message(langCode, codes.AdminMenuDNSClusters), "url": "/dns", "code": "cluster", }, { - "name": "DNS服务商", + "name": langs.Message(langCode, codes.AdminMenuDNSProviders), "url": "/dns/providers", "code": "provider", }, { - "name": "问题修复", + "name": langs.Message(langCode, codes.AdminMenuDNSIssues), "url": "/dns/issues", "code": "issue", }, @@ -143,36 +145,36 @@ func FindAllMenuMaps(nodeLogsType string, countUnreadNodeLogs int64, countUnread { "code": "users", "module": configloaders.AdminModuleCodeUser, - "name": "平台用户", + "name": langs.Message(langCode, codes.AdminMenuUsers), "icon": "users", }, { "code": "admins", "module": configloaders.AdminModuleCodeAdmin, - "name": "系统用户", + "name": langs.Message(langCode, codes.AdminMenuAdmins), "subtitle": "", "icon": "user secret", }, { "code": "log", "module": configloaders.AdminModuleCodeLog, - "name": "日志审计", + "name": langs.Message(langCode, codes.AdminMenuLogs), "icon": "history", }, { "code": "settings", "module": configloaders.AdminModuleCodeSetting, - "name": "系统设置", + "name": langs.Message(langCode, codes.AdminMenuSettings), "subtitle": "", "icon": "setting", "subItems": []maps.Map{ { - "name": "基础设置", + "name": langs.Message(langCode, codes.AdminMenuSettingBasicSettings), "url": "/settings", "code": "basic", }, { - "name": "高级设置", + "name": langs.Message(langCode, codes.AdminMenuSettingAdvancedSettings), "url": "/settings/advanced", "code": "advanced", }, diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index b66c9933..e000f820 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -8,6 +8,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/setup" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/index/loginutils" + "github.com/TeaOSLab/EdgeCommon/pkg/langs" "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs" @@ -119,7 +120,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam if teaconst.IsDemoMode { if action.Request.Method == http.MethodPost { var actionName = action.Spec.ClassName[strings.LastIndex(action.Spec.ClassName, ".")+1:] - var denyPrefixes = []string{"Update", "Create", "Delete", "Truncate", "Clean", "Clear", "Reset", "Add", "Remove", "Sync"} + var denyPrefixes = []string{"Update", "Create", "Delete", "Truncate", "Clean", "Clear", "Reset", "Add", "Remove", "Sync", "Run", "Exec"} for _, prefix := range denyPrefixes { if strings.HasPrefix(actionName, prefix) { action.Fail(teaconst.ErrorDemoOperation) @@ -255,7 +256,16 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam if !action.Data.Has("teaMenu") { action.Data["teaMenu"] = "" } - action.Data["teaModules"] = this.modules(actionPtr, adminId, uiConfig) + + // 语言 + // Language + var lang = configloaders.FindAdminLang(adminId) + if len(lang) == 0 { + lang = langs.ParseLangFromAction(action) + } + action.Data["teaLang"] = lang + + action.Data["teaModules"] = this.modules(lang, actionPtr, adminId, uiConfig) action.Data["teaSubMenus"] = []map[string]interface{}{} action.Data["teaTabbar"] = []map[string]interface{}{} if len(uiConfig.Version) == 0 { @@ -290,7 +300,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam } // 菜单配置 -func (this *userMustAuth) modules(actionPtr actions.ActionWrapper, adminId int64, adminUIConfig *systemconfigs.AdminUIConfig) []maps.Map { +func (this *userMustAuth) modules(langCode string, actionPtr actions.ActionWrapper, adminId int64, adminUIConfig *systemconfigs.AdminUIConfig) []maps.Map { // 父级动作 var action = actionPtr.Object() @@ -309,7 +319,7 @@ func (this *userMustAuth) modules(actionPtr actions.ActionWrapper, adminId int64 } var result = []maps.Map{} - for _, m := range FindAllMenuMaps(nodeLogsType, countUnreadNodeLogs, countUnreadIPItems) { + for _, m := range FindAllMenuMaps(langCode, nodeLogsType, countUnreadNodeLogs, countUnreadIPItems) { if m.GetString("code") == "finance" && !configloaders.ShowFinance() { continue } diff --git a/web/public/js/langs/zh-cn.js b/web/public/js/langs/zh-cn.js new file mode 100644 index 00000000..933d3e93 --- /dev/null +++ b/web/public/js/langs/zh-cn.js @@ -0,0 +1,2 @@ +// generated by 'langs generate' +window.LANG_MESSAGES = {"admin_dashboard_dns":"DNS","admin_dashboard_events":"事件","admin_dashboard_overview":"概况","admin_dashboard_user":"用户","admin_dashboard_waf":"WAF","admin_menu_admin_recipients":"通知媒介","admin_menu_admins":"系统用户","admin_menu_dashboard":"数据看板","admin_menu_dns":"域名解析","admin_menu_dns_clusters":"集群列表","admin_menu_dns_issues":"问题修复","admin_menu_dns_providers":"DNS服务商","admin_menu_finance":"财务管理","admin_menu_finance_accounts":"用户账户","admin_menu_finance_bills":"费用账单","admin_menu_finance_fee":"计费设置","admin_menu_finance_income":"统计报表","admin_menu_finance_logs":"收支明细","admin_menu_finance_orders":"订单管理","admin_menu_finance_packages":"流量包","admin_menu_logs":"日志审计","admin_menu_node_anti_ddos_products":"高防IP","admin_menu_node_clusters":"集群列表","admin_menu_node_distributed_monitors":"区域监控","admin_menu_node_ip_list":"节点IP","admin_menu_node_logs":"节点日志","admin_menu_node_regions":"区域设置","admin_menu_node_ssh_grants":"节点SSH","admin_menu_nodes":"边缘节点","admin_menu_ns":"智能DNS","admin_menu_ns_access_logs":"访问日志","admin_menu_ns_clusters":"集群管理","admin_menu_ns_domain_batch_operations":"批量操作","admin_menu_ns_domain_groups":"域名分组","admin_menu_ns_domains":"域名管理","admin_menu_ns_node_logs":"运行日志","admin_menu_ns_plans":"套餐设置","admin_menu_ns_resolve_test":"解析测试","admin_menu_ns_routes":"线路管理","admin_menu_ns_settings":"全局配置","admin_menu_ns_user_plans":"用户套餐","admin_menu_plan_user_plans":"已购套餐","admin_menu_plans":"套餐管理","admin_menu_server_access_log_policies":"日志策略","admin_menu_server_access_logs":"访问日志","admin_menu_server_cache_policies":"缓存策略","admin_menu_server_certs":"证书管理","admin_menu_server_global_settings":"通用设置","admin_menu_server_groups":"网站分组","admin_menu_server_ip_lists":"IP名单","admin_menu_server_metrics":"统计指标","admin_menu_server_purge_fetch_caches":"刷新预热","admin_menu_server_scripts":"脚本库","admin_menu_server_traffic_stats":"用量统计","admin_menu_server_waf_policies":"WAF策略","admin_menu_servers":"网站列表","admin_menu_setting_advanced_settings":"高级设置","admin_menu_setting_authority":"商业版本","admin_menu_setting_basic_settings":"基础设置","admin_menu_settings":"系统设置","admin_menu_ticket_category":"分类","admin_menu_tickets":"工单系统","admin_menu_users":"用户设置"}; diff --git a/web/views/@default/@layout.html b/web/views/@default/@layout.html index 9557d1ed..3cfaed98 100644 --- a/web/views/@default/@layout.html +++ b/web/views/@default/@layout.html @@ -17,8 +17,9 @@ - + + diff --git a/web/views/@default/@layout.js b/web/views/@default/@layout.js index e662f26c..7bcea3c9 100644 --- a/web/views/@default/@layout.js +++ b/web/views/@default/@layout.js @@ -185,6 +185,16 @@ Tea.context(function () { width: "54em" }) } + + this.LANG = function (code) { + if (window.LANG_MESSAGES != null) { + let message = window.LANG_MESSAGES[code] + if (typeof message == "string") { + return message + } + } + return "{{ LANG('" + code + "') }}" + } }); window.NotifySuccess = function (message, url, params) { diff --git a/web/views/@default/@layout_popup.html b/web/views/@default/@layout_popup.html index 881b667d..ce0f58ce 100644 --- a/web/views/@default/@layout_popup.html +++ b/web/views/@default/@layout_popup.html @@ -20,6 +20,7 @@ +