App Translations
Implement multilingual support in your Fyne applications using JSON translation files and dynamic switching between languages.
Show Code
package main
import ( "encoding/json" "log" "os"
"fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget")
/*translations.json{ "en": { "hello": "Hello", "welcome": "Welcome to my app" }, "fr": { "hello": "Bonjour", "welcome": "Bienvenue dans mon application" }, "sw": { "hello": "Hujambo", "welcome": "Karibu kwenye programu yangu" }}
*/
// Translator struct for JSONtype Translator struct { Translations map[string]map[string]string}
// Load from filefunc LoadTranslations(filename string) (*Translator, error) { data, err := os.ReadFile(filename) if err != nil { return nil, err }
var t Translator err = json.Unmarshal(data, &t.Translations) if err != nil { return nil, err }
return &t, nil}
// Get translationfunc (t *Translator) Translate(lang, key string) string { if val, ok := t.Translations[lang][key]; ok { return val } return key // fallback}
func main() { a := app.New() w := a.NewWindow("App Translations")
// Load JSON translations translator, err := LoadTranslations("translations.json") if err != nil { log.Fatal("Error loading translations:", err) }
// Default language lang := "en"
helloLabel := widget.NewLabel(translator.Translate(lang, "hello")) welcomeLabel := widget.NewLabel(translator.Translate(lang, "welcome"))
// Language selector langSelect := widget.NewSelect([]string{"en", "fr", "sw"}, func(selected string) { lang = selected helloLabel.SetText(translator.Translate(lang, "hello")) welcomeLabel.SetText(translator.Translate(lang, "welcome")) })
langSelect.SetSelected("en") // default English
w.SetContent(container.NewVBox( widget.NewLabel("🌍 Select Language:"), langSelect, helloLabel, welcomeLabel, ))
w.Resize(fyne.NewSize(350, 200)) w.ShowAndRun()}