Refactor localization system and migrate to Fyne's built-in support
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.
This commit is contained in:
218
menu/view.go
218
menu/view.go
@@ -7,7 +7,6 @@ import (
|
||||
"fyne.io/fyne/v2/theme"
|
||||
"fyne.io/fyne/v2/widget"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"golang.org/x/image/colornames"
|
||||
"net/url"
|
||||
)
|
||||
@@ -29,9 +28,7 @@ func NewView(app kernel.AppContract) *View {
|
||||
}
|
||||
|
||||
func (v View) Gratitude() {
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "gratitude",
|
||||
}))
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage("gratitude"))
|
||||
view.Resize(fyne.Size{Width: 500, Height: 400})
|
||||
view.SetFixedSize(true)
|
||||
|
||||
@@ -39,9 +36,7 @@ func (v View) Gratitude() {
|
||||
image.SetMinSize(fyne.Size{Width: 100, Height: 100})
|
||||
image.FillMode = canvas.ImageFillContain
|
||||
|
||||
gratitude := canvas.NewText(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "gratitude",
|
||||
}), colornames.Darkgreen)
|
||||
gratitude := canvas.NewText(v.app.GetLocalizerService().GetMessage("gratitude"), colornames.Darkgreen)
|
||||
gratitude.TextStyle = fyne.TextStyle{Bold: true}
|
||||
gratitude.TextSize = 20
|
||||
|
||||
@@ -49,13 +44,11 @@ func (v View) Gratitude() {
|
||||
container.NewScroll(container.NewVBox(
|
||||
container.NewBorder(nil, nil, container.NewVBox(image), nil, container.NewVBox(
|
||||
gratitude,
|
||||
widget.NewLabel(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "gratitudeText",
|
||||
})),
|
||||
widget.NewLabel(v.app.GetLocalizerService().GetMessage("gratitudeText")),
|
||||
widget.NewLabel("Екатерина"),
|
||||
widget.NewLabel("Евгений"),
|
||||
),
|
||||
))),
|
||||
)),
|
||||
)),
|
||||
)
|
||||
|
||||
view.CenterOnScreen()
|
||||
@@ -63,9 +56,7 @@ func (v View) Gratitude() {
|
||||
}
|
||||
|
||||
func (v View) About(ffmpegVersion string, ffprobeVersion string, ffplayVersion string) {
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "about",
|
||||
}))
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage("about"))
|
||||
view.Resize(fyne.Size{Width: 793, Height: 550})
|
||||
view.SetFixedSize(true)
|
||||
|
||||
@@ -73,54 +64,51 @@ func (v View) About(ffmpegVersion string, ffprobeVersion string, ffplayVersion s
|
||||
programmName.TextStyle = fyne.TextStyle{Bold: true}
|
||||
programmName.TextSize = 20
|
||||
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "programmLink",
|
||||
}), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "gui-for-ffmpeg.projects.kor-elf.net",
|
||||
Path: "/",
|
||||
})
|
||||
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "licenseLink",
|
||||
}), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "git.kor-elf.net",
|
||||
Path: "kor-elf/gui-for-ffmpeg/src/branch/main/LICENSE",
|
||||
})
|
||||
|
||||
licenseLinkOther := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "licenseLinkOther",
|
||||
}), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "git.kor-elf.net",
|
||||
Path: "kor-elf/gui-for-ffmpeg/src/branch/main/LICENSE-3RD-PARTY.txt",
|
||||
})
|
||||
|
||||
programmVersion := widget.NewRichTextFromMarkdown(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "programmVersion",
|
||||
TemplateData: map[string]string{
|
||||
"Version": v.app.GetAppFyne().Metadata().Version,
|
||||
programmLink := widget.NewHyperlink(
|
||||
v.app.GetLocalizerService().GetMessage("programmLink"),
|
||||
&url.URL{
|
||||
Scheme: "https",
|
||||
Host: "gui-for-ffmpeg.projects.kor-elf.net",
|
||||
Path: "/",
|
||||
},
|
||||
}))
|
||||
)
|
||||
|
||||
licenseLink := widget.NewHyperlink(
|
||||
v.app.GetLocalizerService().GetMessage("licenseLink"),
|
||||
&url.URL{
|
||||
Scheme: "https",
|
||||
Host: "git.kor-elf.net",
|
||||
Path: "kor-elf/gui-for-ffmpeg/src/branch/main/LICENSE",
|
||||
},
|
||||
)
|
||||
|
||||
licenseLinkOther := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(
|
||||
"licenseLinkOther"),
|
||||
&url.URL{
|
||||
Scheme: "https",
|
||||
Host: "git.kor-elf.net",
|
||||
Path: "kor-elf/gui-for-ffmpeg/src/branch/main/LICENSE-3RD-PARTY.txt",
|
||||
},
|
||||
)
|
||||
|
||||
programmVersion := widget.NewRichTextFromMarkdown(
|
||||
v.app.GetLocalizerService().GetMessage(
|
||||
"programmVersion",
|
||||
map[string]any{"Version": v.app.GetAppFyne().Metadata().Version},
|
||||
),
|
||||
)
|
||||
|
||||
aboutText := widget.NewRichText(
|
||||
&widget.TextSegment{
|
||||
Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "aboutText",
|
||||
}),
|
||||
Text: v.app.GetLocalizerService().GetMessage("aboutText"),
|
||||
},
|
||||
)
|
||||
image := canvas.NewImageFromFile("icon.png")
|
||||
image.SetMinSize(fyne.Size{Width: 100, Height: 100})
|
||||
image.FillMode = canvas.ImageFillContain
|
||||
|
||||
ffmpegTrademark := widget.NewRichTextFromMarkdown(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "ffmpegTrademark",
|
||||
}))
|
||||
ffmpegLGPL := widget.NewRichTextFromMarkdown(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "ffmpegLGPL",
|
||||
}))
|
||||
ffmpegTrademark := widget.NewRichTextFromMarkdown(v.app.GetLocalizerService().GetMessage("ffmpegTrademark"))
|
||||
ffmpegLGPL := widget.NewRichTextFromMarkdown(v.app.GetLocalizerService().GetMessage("ffmpegLGPL"))
|
||||
|
||||
view.SetContent(
|
||||
container.NewScroll(container.NewVBox(
|
||||
@@ -137,9 +125,7 @@ func (v View) About(ffmpegVersion string, ffprobeVersion string, ffplayVersion s
|
||||
v.getAboutFfmpeg(ffmpegVersion),
|
||||
v.getAboutFfprobe(ffprobeVersion),
|
||||
v.getAboutFfplay(ffplayVersion),
|
||||
widget.NewCard(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "AlsoUsedProgram",
|
||||
}), "", v.getOther()),
|
||||
widget.NewCard(v.app.GetLocalizerService().GetMessage("AlsoUsedProgram"), "", v.getOther()),
|
||||
)),
|
||||
)
|
||||
view.CenterOnScreen()
|
||||
@@ -147,119 +133,71 @@ func (v View) About(ffmpegVersion string, ffprobeVersion string, ffplayVersion s
|
||||
}
|
||||
|
||||
func (v View) HelpFFplay() {
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplay",
|
||||
}))
|
||||
view := v.app.GetAppFyne().NewWindow(v.app.GetLocalizerService().GetMessage("helpFFplay"))
|
||||
view.Resize(fyne.Size{Width: 800, Height: 550})
|
||||
view.SetFixedSize(true)
|
||||
|
||||
data := [][]string{
|
||||
[]string{
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeys",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayDescription",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeys"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayDescription"),
|
||||
},
|
||||
[]string{
|
||||
"Q, ESC",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayQuit",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayQuit"),
|
||||
},
|
||||
[]string{
|
||||
"F, " + v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayDoubleClickLeftMouseButton",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayToggleFullScreen",
|
||||
}),
|
||||
"F, " + v.app.GetLocalizerService().GetMessage("helpFFplayDoubleClickLeftMouseButton"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayToggleFullScreen"),
|
||||
},
|
||||
[]string{
|
||||
"P, " +
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeySpace",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayPause",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeySpace"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayPause"),
|
||||
},
|
||||
[]string{
|
||||
"M",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayToggleMute",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayToggleMute"),
|
||||
},
|
||||
[]string{
|
||||
"9, /",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayDecreaseVolume",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayDecreaseVolume"),
|
||||
},
|
||||
[]string{
|
||||
"0, *",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayIncreaseVolume",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayIncreaseVolume"),
|
||||
},
|
||||
[]string{
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeyLeft",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekBackward10Seconds",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeyLeft"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekBackward10Seconds"),
|
||||
},
|
||||
[]string{
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeyRight",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekForward10Seconds",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeyRight"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekForward10Seconds"),
|
||||
},
|
||||
[]string{
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeyDown",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekBackward1Minute",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeyDown"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekBackward1Minute"),
|
||||
},
|
||||
[]string{
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeyUp",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekBForward1Minute",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayKeyUp"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekBForward1Minute"),
|
||||
},
|
||||
[]string{
|
||||
"Page Down",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekBackward10Minutes",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekBackward10Minutes"),
|
||||
},
|
||||
[]string{
|
||||
"Page Up",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplaySeekBForward10Minutes",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplaySeekBForward10Minutes"),
|
||||
},
|
||||
[]string{
|
||||
"S, " + v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayKeyHoldS",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayActivateFrameStepMode",
|
||||
}),
|
||||
"S, " + v.app.GetLocalizerService().GetMessage("helpFFplayKeyHoldS"),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayActivateFrameStepMode"),
|
||||
},
|
||||
[]string{
|
||||
"W",
|
||||
v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "helpFFplayCycleVideoFiltersOrShowModes",
|
||||
}),
|
||||
v.app.GetLocalizerService().GetMessage("helpFFplayCycleVideoFiltersOrShowModes"),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -300,17 +238,13 @@ func (v View) getAboutFfmpeg(version string) *fyne.Container {
|
||||
programmName.TextStyle = fyne.TextStyle{Bold: true}
|
||||
programmName.TextSize = 20
|
||||
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "programmLink",
|
||||
}), &url.URL{
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("programmLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "",
|
||||
})
|
||||
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "licenseLink",
|
||||
}), &url.URL{
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("licenseLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "legal.html",
|
||||
@@ -330,17 +264,13 @@ func (v View) getAboutFfprobe(version string) *fyne.Container {
|
||||
programmName.TextStyle = fyne.TextStyle{Bold: true}
|
||||
programmName.TextSize = 20
|
||||
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "programmLink",
|
||||
}), &url.URL{
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("programmLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "ffprobe.html",
|
||||
})
|
||||
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "licenseLink",
|
||||
}), &url.URL{
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("licenseLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "legal.html",
|
||||
@@ -360,17 +290,13 @@ func (v View) getAboutFfplay(version string) *fyne.Container {
|
||||
programmName.TextStyle = fyne.TextStyle{Bold: true}
|
||||
programmName.TextSize = 20
|
||||
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "programmLink",
|
||||
}), &url.URL{
|
||||
programmLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("programmLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "ffplay.html",
|
||||
})
|
||||
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "licenseLink",
|
||||
}), &url.URL{
|
||||
licenseLink := widget.NewHyperlink(v.app.GetLocalizerService().GetMessage("licenseLink"), &url.URL{
|
||||
Scheme: "https",
|
||||
Host: "ffmpeg.org",
|
||||
Path: "legal.html",
|
||||
|
@@ -6,7 +6,6 @@ import (
|
||||
"fyne.io/fyne/v2/widget"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/theme"
|
||||
"github.com/nicksnyder/go-i18n/v2/i18n"
|
||||
"image/color"
|
||||
)
|
||||
|
||||
@@ -40,7 +39,7 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
|
||||
errorMessage.TextStyle = fyne.TextStyle{Bold: true}
|
||||
|
||||
viewSettingForm := &SettingForm{
|
||||
Language: v.app.GetLocalizerService().GetCurrentLanguage().Lang,
|
||||
Language: v.app.GetLocalizerService().GetCurrentLanguage(),
|
||||
ThemeInfo: v.themeService.GetCurrentThemeInfo(),
|
||||
}
|
||||
|
||||
@@ -55,7 +54,7 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
|
||||
viewSettingForm.Language = lang
|
||||
}
|
||||
})
|
||||
selectLanguage.Selected = v.app.GetLocalizerService().GetCurrentLanguage().Lang.Title
|
||||
selectLanguage.Selected = v.app.GetLocalizerService().GetCurrentLanguage().Title
|
||||
|
||||
themeItems := []string{}
|
||||
themeByTitle := map[string]theme.ThemeInfoContract{}
|
||||
@@ -73,24 +72,18 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
|
||||
form := &widget.Form{
|
||||
Items: []*widget.FormItem{
|
||||
{
|
||||
Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "menuSettingsLanguage",
|
||||
}),
|
||||
Text: v.app.GetLocalizerService().GetMessage("menuSettingsLanguage"),
|
||||
Widget: selectLanguage,
|
||||
},
|
||||
{
|
||||
Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "menuSettingsTheme",
|
||||
}),
|
||||
Text: v.app.GetLocalizerService().GetMessage("menuSettingsTheme"),
|
||||
Widget: selectTheme,
|
||||
},
|
||||
{
|
||||
Widget: errorMessage,
|
||||
},
|
||||
},
|
||||
SubmitText: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "save",
|
||||
}),
|
||||
SubmitText: v.app.GetLocalizerService().GetMessage("save"),
|
||||
OnSubmit: func() {
|
||||
err := save(viewSettingForm)
|
||||
if err != nil {
|
||||
@@ -100,13 +93,9 @@ func (v ViewSetting) Main(save func(*SettingForm) error, cancel func()) {
|
||||
}
|
||||
if cancel != nil {
|
||||
form.OnCancel = cancel
|
||||
form.CancelText = v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "cancel",
|
||||
})
|
||||
form.CancelText = v.app.GetLocalizerService().GetMessage("cancel")
|
||||
}
|
||||
|
||||
messageHead := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{
|
||||
MessageID: "settings",
|
||||
})
|
||||
messageHead := v.app.GetLocalizerService().GetMessage("settings")
|
||||
v.app.GetWindow().SetContent(widget.NewCard(messageHead, "", form))
|
||||
}
|
||||
|
Reference in New Issue
Block a user