Replaced the `i18n` and `toml` dependencies with Fyne's built-in language system for localization management. Updated the `Localizer` implementation to handle translations using JSON files and embed functionality. Simplified language selection and persisted settings via Fyne's preferences API.
70 lines
1.9 KiB
Go
70 lines
1.9 KiB
Go
package localizer
|
|
|
|
import (
|
|
"fyne.io/fyne/v2"
|
|
"fyne.io/fyne/v2/widget"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
|
|
)
|
|
|
|
type ViewContract interface {
|
|
LanguageSelection(funcSelected func(lang kernel.Lang))
|
|
}
|
|
|
|
type View struct {
|
|
app kernel.AppContract
|
|
}
|
|
|
|
func NewView(app kernel.AppContract) *View {
|
|
return &View{
|
|
app: app,
|
|
}
|
|
}
|
|
|
|
func (v View) LanguageSelection(funcSelected func(lang kernel.Lang)) {
|
|
languages := v.app.GetLocalizerService().GetLanguages()
|
|
listView := widget.NewList(
|
|
func() int {
|
|
return len(languages)
|
|
},
|
|
func() fyne.CanvasObject {
|
|
return widget.NewLabel("template")
|
|
},
|
|
func(i widget.ListItemID, o fyne.CanvasObject) {
|
|
block := o.(*widget.Label)
|
|
block.SetText(languages[i].Title)
|
|
})
|
|
listView.OnSelected = func(id widget.ListItemID) {
|
|
_ = v.app.GetLocalizerService().SetCurrentLanguage(languages[id], true)
|
|
funcSelected(languages[id])
|
|
}
|
|
|
|
messageHead := v.app.GetLocalizerService().GetMessage("languageSelectionHead")
|
|
v.app.GetWindow().SetContent(widget.NewCard(messageHead, "", listView))
|
|
}
|
|
|
|
func LanguageSelectionForm(localizerService kernel.LocalizerContract, funcSelected func(lang kernel.Lang)) fyne.CanvasObject {
|
|
languages := localizerService.GetLanguages()
|
|
currentLanguage := localizerService.GetCurrentLanguage()
|
|
listView := widget.NewList(
|
|
func() int {
|
|
return len(languages)
|
|
},
|
|
func() fyne.CanvasObject {
|
|
return widget.NewLabel("template")
|
|
},
|
|
func(i widget.ListItemID, o fyne.CanvasObject) {
|
|
block := o.(*widget.Label)
|
|
block.SetText(languages[i].Title)
|
|
if languages[i].Code == currentLanguage.Code {
|
|
block.TextStyle = fyne.TextStyle{Bold: true}
|
|
}
|
|
})
|
|
listView.OnSelected = func(id widget.ListItemID) {
|
|
_ = localizerService.SetCurrentLanguage(languages[id], true)
|
|
funcSelected(languages[id])
|
|
}
|
|
|
|
messageHead := localizerService.GetMessage("languageSelectionFormHead")
|
|
return widget.NewCard(messageHead, "", listView)
|
|
}
|