@@ -3,14 +3,12 @@ package i18n
33import (
44 "embed"
55 "fmt"
6+ "os/exec"
67 "strings"
7- "sync"
88 "sync/atomic"
99
1010 "github.com/1Panel-dev/1Panel/core/app/repo"
11-
1211 "github.com/1Panel-dev/1Panel/core/global"
13-
1412 "github.com/gin-gonic/gin"
1513 "github.com/nicksnyder/go-i18n/v2/i18n"
1614 "golang.org/x/text/language"
@@ -140,38 +138,29 @@ func UseI18n() gin.HandlerFunc {
140138}
141139
142140func Init () {
143- initOnce .Do (func () {
144- bundle = i18n .NewBundle (language .Chinese )
145- bundle .RegisterUnmarshalFunc ("yaml" , yaml .Unmarshal )
146-
147- isSuccess := true
148- for _ , file := range langFiles {
149- if _ , err := bundle .LoadMessageFileFS (fs , file ); err != nil {
150- fmt .Printf ("[i18n] load language file %s failed: %v\n " , file , err )
151- isSuccess = false
152- }
153- }
154-
155- if ! isSuccess {
156- panic ("[i18n] failed to init language files, See log above for details" )
157- }
158-
159- dbLang := getLanguageFromDBInternal ()
160- if dbLang == "" {
161- dbLang = defaultLang
162- }
163- SetCachedDBLanguage (dbLang )
141+ if bundle == nil {
142+ initBundle ()
143+ }
144+ dbLang := getLanguageFromDBInternal ()
145+ if dbLang == "" {
146+ dbLang = defaultLang
147+ }
148+ SetCachedDBLanguage (dbLang )
164149
165- global .I18n = i18n .NewLocalizer (bundle , dbLang )
166- })
150+ global .I18n = i18n .NewLocalizer (bundle , dbLang )
167151}
168152
169153func UseI18nForCmd (lang string ) {
170154 if bundle == nil {
171- Init ()
155+ initBundle ()
172156 }
173157 if lang == "" {
174- lang = defaultLang
158+ langFrom1pctl := getLanguageFrom1pctl ()
159+ if langFrom1pctl == "" {
160+ lang = defaultLang
161+ } else {
162+ lang = langFrom1pctl
163+ }
175164 }
176165 global .I18nForCmd = i18n .NewLocalizer (bundle , lang )
177166}
@@ -219,9 +208,20 @@ func getLanguageFromDBInternal() string {
219208 }
220209 return lang
221210}
211+ func getLanguageFrom1pctl () string {
212+ cmd := exec .Command ("bash" , "-c" , "grep '^LANGUAGE=' /usr/local/bin/1pctl | cut -d'=' -f2" )
213+ stdout , err := cmd .CombinedOutput ()
214+ if err != nil {
215+ panic (err )
216+ }
217+ info := strings .ReplaceAll (string (stdout ), "\n " , "" )
218+ if len (info ) == 0 || info == `""` {
219+ panic ("error `LANGUAGE` find in /usr/local/bin/1pctl" )
220+ }
221+ return info
222+ }
222223
223224var cachedDBLang atomic.Value
224- var initOnce sync.Once
225225
226226func GetLanguage () string {
227227 if v := cachedDBLang .Load (); v != nil {
@@ -236,3 +236,20 @@ func SetCachedDBLanguage(lang string) {
236236 }
237237 cachedDBLang .Store (lang )
238238}
239+
240+ func initBundle () {
241+ bundle = i18n .NewBundle (language .Chinese )
242+ bundle .RegisterUnmarshalFunc ("yaml" , yaml .Unmarshal )
243+
244+ isSuccess := true
245+ for _ , file := range langFiles {
246+ if _ , err := bundle .LoadMessageFileFS (fs , file ); err != nil {
247+ fmt .Printf ("[i18n] load language file %s failed: %v\n " , file , err )
248+ isSuccess = false
249+ }
250+ }
251+
252+ if ! isSuccess {
253+ panic ("[i18n] failed to init language files, See log above for details" )
254+ }
255+ }
0 commit comments