package setting import ( "encoding/json" "fyne.io/fyne/v2" fyneLang "fyne.io/fyne/v2/lang" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/resources" ) var supportedLanguages = map[string]Lang{ "ru": {Code: "ru", Title: "Русский"}, "kk": {Code: "kk", Title: "Қазақ Тілі"}, "en": {Code: "en", Title: "English"}, } type Lang struct { Code string Title string } func ChangeLang(lang Lang) error { translationsData, err := getTranslations(lang) if err != nil { return err } name := fyneLang.SystemLocale().LanguageString() return fyneLang.AddTranslations(fyne.NewStaticResource(name+".json", translationsData)) } func defaultLang() Lang { return supportedLanguages["ru"] } func getTranslations(language Lang) ([]byte, error) { translations := resources.GetTranslations() baseJson, err := translations.ReadFile("translations/base." + language.Code + ".json") if err != nil { return nil, err } appJson, err := translations.ReadFile("translations/app." + language.Code + ".json") if err != nil { return nil, err } return mergeTranslations(baseJson, appJson) } func mergeTranslations(baseJson []byte, appJson []byte) ([]byte, error) { base := map[string]interface{}{} custom := map[string]interface{}{} err := json.Unmarshal(baseJson, &base) if err != nil { return nil, err } err = json.Unmarshal(appJson, &custom) if err != nil { return nil, err } for k, v := range custom { base[k] = v } return json.Marshal(base) }