Leonid Nikitin b24155caf6
Refactor application structure and initialize core components
I decided to rewrite the program taking into account the experience gained.
2025-06-06 14:50:16 +05:00

67 lines
1.5 KiB
Go

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)
}