@@ -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,27 @@ 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+ initBundle ()
142+ dbLang := getLanguageFromDBInternal ()
143+ if dbLang == "" {
144+ dbLang = defaultLang
145+ }
146+ SetCachedDBLanguage (dbLang )
164147
165- global .I18n = i18n .NewLocalizer (bundle , dbLang )
166- })
148+ global .I18n = i18n .NewLocalizer (bundle , dbLang )
167149}
168150
169151func UseI18nForCmd (lang string ) {
170152 if bundle == nil {
171- Init ()
153+ initBundle ()
172154 }
173155 if lang == "" {
174- lang = defaultLang
156+ langFrom1pctl := getLanguageFrom1pctl ()
157+ if langFrom1pctl == "" {
158+ lang = defaultLang
159+ } else {
160+ lang = langFrom1pctl
161+ }
175162 }
176163 global .I18nForCmd = i18n .NewLocalizer (bundle , lang )
177164}
@@ -219,9 +206,20 @@ func getLanguageFromDBInternal() string {
219206 }
220207 return lang
221208}
209+ func getLanguageFrom1pctl () string {
210+ cmd := exec .Command ("bash" , "-c" , "grep '^LANGUAGE=' /usr/local/bin/1pctl | cut -d'=' -f2" )
211+ stdout , err := cmd .CombinedOutput ()
212+ if err != nil {
213+ panic (err )
214+ }
215+ info := strings .ReplaceAll (string (stdout ), "\n " , "" )
216+ if len (info ) == 0 || info == `""` {
217+ panic ("error `LANGUAGE` find in /usr/local/bin/1pctl" )
218+ }
219+ return info
220+ }
222221
223222var cachedDBLang atomic.Value
224- var initOnce sync.Once
225223
226224func GetLanguage () string {
227225 if v := cachedDBLang .Load (); v != nil {
@@ -236,3 +234,20 @@ func SetCachedDBLanguage(lang string) {
236234 }
237235 cachedDBLang .Store (lang )
238236}
237+
238+ func initBundle () {
239+ bundle = i18n .NewBundle (language .Chinese )
240+ bundle .RegisterUnmarshalFunc ("yaml" , yaml .Unmarshal )
241+
242+ isSuccess := true
243+ for _ , file := range langFiles {
244+ if _ , err := bundle .LoadMessageFileFS (fs , file ); err != nil {
245+ fmt .Printf ("[i18n] load language file %s failed: %v\n " , file , err )
246+ isSuccess = false
247+ }
248+ }
249+
250+ if ! isSuccess {
251+ panic ("[i18n] failed to init language files, See log above for details" )
252+ }
253+ }
0 commit comments