diff --git a/README.md b/README.md index 1d3cc54..38031b4 100644 --- a/README.md +++ b/README.md @@ -26,19 +26,7 @@ 7. Создаться папка **fyne-cross/bin** и там будет созданна папка с тем названием под которую Вы компилировали приложения (linux-amd64 или windows-amd64). 8. В папку **fyne-cross/bin/linux-amd64** или **fyne-cross/bin/windows-amd64** копируете: * icon.png - * languages * LICENSE * LICENSE-3RD-PARTY.txt

Структура должна получиться такая:

- -## Работа с переводами: -1. go install -v github.com/nicksnyder/go-i18n/v2/goi18n@latest -3. Создаём файл languages/translate.\*.toml -4. goi18n merge -sourceLanguage ru -outdir languages languages/active.\*.toml languages/translate.\*.toml -5. В файлах **languages/translate.\*.toml** переводим текст на нужный язык -6. goi18n merge -sourceLanguage ru -outdir languages languages/active.\*.toml languages/translate.\*.toml - -___где * подставляем нужный язык___ - -Более подробно можно почитать тут: https://github.com/nicksnyder/go-i18n \ No newline at end of file diff --git a/convertor/view.go b/convertor/view.go index 58e6a3f..e3dcb14 100644 --- a/convertor/view.go +++ b/convertor/view.go @@ -7,7 +7,6 @@ import ( "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/convertor/view" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" ) @@ -45,9 +44,7 @@ func NewView(app kernel.AppContract) *View { } func (v View) Main(formConversion view.ConversionContract) { - converterVideoFilesTitle := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "converterVideoFilesTitle", - }) + converterVideoFilesTitle := v.app.GetLocalizerService().GetMessage("converterVideoFilesTitle") v.app.GetWindow().SetContent(widget.NewCard(converterVideoFilesTitle, "", container.NewVScroll(formConversion.GetContent()))) formConversion.AfterViewContent() } diff --git a/convertor/view/conversion.go b/convertor/view/conversion.go index 7959bd9..1ceeafa 100644 --- a/convertor/view/conversion.go +++ b/convertor/view/conversion.go @@ -12,7 +12,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel/encoder" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/setting" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" "os" "path/filepath" @@ -54,14 +53,14 @@ func NewConversion(app kernel.AppContract, formats encoder.ConvertorFormatsContr items := []*widget.FormItem{ { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "fileForConversionTitle"}), + Text: app.GetLocalizerService().GetMessage("fileForConversionTitle"), Widget: fileForConversion.button, }, { Widget: container.NewHScroll(fileForConversion.message), }, { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "buttonForSelectedDirTitle"}), + Text: app.GetLocalizerService().GetMessage("buttonForSelectedDirTitle"), Widget: directoryForSaving.button, }, { @@ -74,11 +73,11 @@ func NewConversion(app kernel.AppContract, formats encoder.ConvertorFormatsContr Widget: selectEncoder.SelectFileType, }, { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "selectFormat"}), + Text: app.GetLocalizerService().GetMessage("selectFormat"), Widget: selectEncoder.SelectFormat, }, { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "selectEncoder"}), + Text: app.GetLocalizerService().GetMessage("selectEncoder"), Widget: selectEncoder.SelectEncoder, }, } @@ -141,30 +140,22 @@ func (c Conversion) selectFileForConversion(err error) { func (c Conversion) submit() { if len(c.itemsToConvertService.GetItems()) == 0 { - showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorNoFilesAddedForConversion", - }))) + showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage("errorNoFilesAddedForConversion"))) c.enableFormConversion() return } if len(c.directoryForSaving.path) == 0 { - showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorSelectedFolderSave", - }))) + showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage("errorSelectedFolderSave"))) c.enableFormConversion() return } if len(c.selectEncoder.SelectFormat.Selected) == 0 { - showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorSelectedFormat", - }))) + showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage("errorSelectedFormat"))) return } if c.selectEncoder.Encoder == nil { - showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorSelectedEncoder", - }))) + showConversionMessage(c.conversionMessage, errors.New(c.app.GetLocalizerService().GetMessage("errorSelectedEncoder"))) return } c.conversionMessage.Text = "" @@ -208,13 +199,9 @@ func newFileForConversion(app kernel.AppContract, itemsToConvertService kernel.I changeCallbacks: map[int]func(err error){}, } - buttonTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "choose", - }) + "\n" + app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "or", - }) + "\n" + app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "dragAndDropFiles", - }) + buttonTitle := app.GetLocalizerService().GetMessage("choose") + "\n" + + app.GetLocalizerService().GetMessage("or") + "\n" + + app.GetLocalizerService().GetMessage("dragAndDropFiles") var locationURI fyne.ListableURI @@ -281,9 +268,7 @@ func newFileForConversion(app kernel.AppContract, itemsToConvertService kernel.I } app.GetWindow().GetLayout().GetRightTabs().SelectAddedFilesTab() if isError { - fileForConversion.message.Text = app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorDragAndDropFile", - }) + fileForConversion.message.Text = app.GetLocalizerService().GetMessage("errorDragAndDropFile") setStringErrorStyle(fileForConversion.message) fileForConversion.eventSelectFile(errors.New(fileForConversion.message.Text)) } else { @@ -322,9 +307,7 @@ func newDirectoryForSaving(app kernel.AppContract, settingDirectoryForSaving set directoryForSaving.message.TextSize = 16 directoryForSaving.message.TextStyle = fyne.TextStyle{Bold: true} - buttonTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "choose", - }) + buttonTitle := app.GetLocalizerService().GetMessage("choose") var locationURI fyne.ListableURI @@ -386,9 +369,7 @@ func newOverwriteOutputFiles(app kernel.AppContract) *overwriteOutputFiles { overwriteOutputFiles := &overwriteOutputFiles{ isChecked: false, } - checkboxOverwriteOutputFilesTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "checkboxOverwriteOutputFilesTitle", - }) + checkboxOverwriteOutputFilesTitle := app.GetLocalizerService().GetMessage("checkboxOverwriteOutputFilesTitle") overwriteOutputFiles.checkbox = widget.NewCheck(checkboxOverwriteOutputFilesTitle, func(b bool) { overwriteOutputFiles.isChecked = b }) @@ -437,7 +418,7 @@ func newSelectEncoder(app kernel.AppContract, formats encoder.ConvertorFormatsCo encoders = map[int]encoder2.EncoderDataContract{} for _, e := range format.GetEncoders() { encoders[len(encoders)] = e - encoderOptions = append(encoderOptions, app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "encoder_" + e.GetTitle()})) + encoderOptions = append(encoderOptions, app.GetLocalizerService().GetMessage("encoder_"+e.GetTitle())) } selectEncoder.SelectEncoder.SetOptions(encoderOptions) selectEncoder.SelectEncoder.SetSelectedIndex(0) @@ -448,9 +429,9 @@ func newSelectEncoder(app kernel.AppContract, formats encoder.ConvertorFormatsCo fileTypeOptions = append(fileTypeOptions, fileType.Name()) } - encoderGroupVideo := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "encoderGroupVideo"}) - encoderGroupAudio := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "encoderGroupAudio"}) - encoderGroupImage := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "encoderGroupImage"}) + encoderGroupVideo := app.GetLocalizerService().GetMessage("encoderGroupVideo") + encoderGroupAudio := app.GetLocalizerService().GetMessage("encoderGroupAudio") + encoderGroupImage := app.GetLocalizerService().GetMessage("encoderGroupImage") encoderGroup := map[string]string{ encoderGroupVideo: "video", encoderGroupAudio: "audio", @@ -517,9 +498,7 @@ type form struct { func newForm(app kernel.AppContract, items []*widget.FormItem) *form { f := widget.NewForm() - f.SubmitText = app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "converterVideoFilesSubmitTitle", - }) + f.SubmitText = app.GetLocalizerService().GetMessage("converterVideoFilesSubmitTitle") f.Items = items return &form{ diff --git a/convertor/view/form_items/h264_nvenc/view.go b/convertor/view/form_items/h264_nvenc/view.go index 81b3c15..2f92333 100644 --- a/convertor/view/form_items/h264_nvenc/view.go +++ b/convertor/view/form_items/h264_nvenc/view.go @@ -6,7 +6,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder/h264_nvenc" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" ) func View(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem { @@ -45,7 +44,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] elementSelect.SetSelected(presetDefault) elementSelect.Hide() - checkboxTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "parameterCheckbox"}) + checkboxTitle := app.GetLocalizerService().GetMessage("parameterCheckbox") elementCheckbox := widget.NewCheck(checkboxTitle, func(b bool) { if b == true { parameter.SetEnable() @@ -58,7 +57,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] return []*widget.FormItem{ { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "formPreset"}), + Text: app.GetLocalizerService().GetMessage("formPreset"), Widget: container.NewVBox(elementCheckbox, elementSelect), }, } diff --git a/convertor/view/form_items/libx264/view.go b/convertor/view/form_items/libx264/view.go index f552c66..dd8ae34 100644 --- a/convertor/view/form_items/libx264/view.go +++ b/convertor/view/form_items/libx264/view.go @@ -6,7 +6,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder/libx264" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" ) func View(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem { @@ -28,7 +27,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] presetDefault := "" for _, name := range libx264.Presets { - title := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "preset_" + name}) + title := app.GetLocalizerService().GetMessage("preset_" + name) presetsForSelect = append(presetsForSelect, title) presets[title] = name if name == parameter.Get() { @@ -45,7 +44,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] elementSelect.SetSelected(presetDefault) elementSelect.Hide() - checkboxTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "parameterCheckbox"}) + checkboxTitle := app.GetLocalizerService().GetMessage("parameterCheckbox") elementCheckbox := widget.NewCheck(checkboxTitle, func(b bool) { if b == true { parameter.SetEnable() @@ -58,7 +57,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] return []*widget.FormItem{ { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "formPreset"}), + Text: app.GetLocalizerService().GetMessage("formPreset"), Widget: container.NewVBox(elementCheckbox, elementSelect), }, } diff --git a/convertor/view/form_items/libx265/view.go b/convertor/view/form_items/libx265/view.go index 434defd..ae71d4d 100644 --- a/convertor/view/form_items/libx265/view.go +++ b/convertor/view/form_items/libx265/view.go @@ -6,7 +6,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder/libx265" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" ) func View(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem { @@ -28,7 +27,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] presetDefault := "" for _, name := range libx265.Presets { - title := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "preset_" + name}) + title := app.GetLocalizerService().GetMessage("preset_" + name) presetsForSelect = append(presetsForSelect, title) presets[title] = name if name == parameter.Get() { @@ -45,7 +44,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] elementSelect.SetSelected(presetDefault) elementSelect.Hide() - checkboxTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "parameterCheckbox"}) + checkboxTitle := app.GetLocalizerService().GetMessage("parameterCheckbox") elementCheckbox := widget.NewCheck(checkboxTitle, func(b bool) { if b == true { parameter.SetEnable() @@ -58,7 +57,7 @@ func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) [] return []*widget.FormItem{ { - Text: app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "formPreset"}), + Text: app.GetLocalizerService().GetMessage("formPreset"), Widget: container.NewVBox(elementCheckbox, elementSelect), }, } diff --git a/convertor/view_setting.go b/convertor/view_setting.go index ca5e3f4..b18a070 100644 --- a/convertor/view_setting.go +++ b/convertor/view_setting.go @@ -6,7 +6,6 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/storage" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" "net/url" "path/filepath" @@ -37,33 +36,25 @@ func (v View) SelectFFPath( form := &widget.Form{ Items: []*widget.FormItem{ { - Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "titleDownloadLink", - }), + Text: v.app.GetLocalizerService().GetMessage("titleDownloadLink"), Widget: link, }, { - Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "pathToFfmpeg", - }), + Text: v.app.GetLocalizerService().GetMessage("pathToFfmpeg"), Widget: buttonFFmpeg, }, { Widget: container.NewHScroll(buttonFFmpegMessage), }, { - Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "pathToFfprobe", - }), + Text: v.app.GetLocalizerService().GetMessage("pathToFfprobe"), Widget: buttonFFprobe, }, { Widget: container.NewHScroll(buttonFFprobeMessage), }, { - Text: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "pathToFfplay", - }), + Text: v.app.GetLocalizerService().GetMessage("pathToFfplay"), Widget: buttonFFplay, }, { @@ -73,9 +64,7 @@ func (v View) SelectFFPath( Widget: errorMessage, }, }, - SubmitText: v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "save", - }), + SubmitText: v.app.GetLocalizerService().GetMessage("save"), OnSubmit: func() { err := save(*ffmpegPath, *ffprobePath, *ffplayPath) if err != nil { @@ -85,13 +74,9 @@ func (v View) SelectFFPath( } if cancel != nil { form.OnCancel = cancel - form.CancelText = v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "cancel", - }) + form.CancelText = v.app.GetLocalizerService().GetMessage("cancel") } - selectFFPathTitle := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "selectFFPathTitle", - }) + selectFFPathTitle := v.app.GetLocalizerService().GetMessage("selectFFPathTitle") if v.downloadFFmpeg.blockDownloadFFmpegContainer == nil { v.downloadFFmpeg.blockDownloadFFmpegContainer = v.blockDownloadFFmpeg(donwloadFFmpeg) @@ -110,9 +95,7 @@ func (v View) getButtonSelectFile(path string) (filePath *string, button *widget buttonMessage.TextSize = 16 buttonMessage.TextStyle = fyne.TextStyle{Bold: true} - buttonTitle := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "choose", - }) + buttonTitle := v.app.GetLocalizerService().GetMessage("choose") var locationURI fyne.ListableURI if len(path) > 0 { diff --git a/convertor/view_setting_button_download_ffmpeg_linux.go b/convertor/view_setting_button_download_ffmpeg_linux.go index aa462d3..d08900c 100644 --- a/convertor/view_setting_button_download_ffmpeg_linux.go +++ b/convertor/view_setting_button_download_ffmpeg_linux.go @@ -8,7 +8,6 @@ import ( "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" "golang.org/x/image/colornames" "image/color" ) @@ -29,9 +28,7 @@ func (v View) blockDownloadFFmpeg( var buttonDownloadFFmpeg *widget.Button - buttonDownloadFFmpeg = widget.NewButton(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "download", - }), func() { + buttonDownloadFFmpeg = widget.NewButton(v.app.GetLocalizerService().GetMessage("download"), func() { fyne.Do(func() { buttonDownloadFFmpeg.Disable() }) @@ -47,15 +44,11 @@ func (v View) blockDownloadFFmpeg( }) - downloadFFmpegFromSiteMessage := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "downloadFFmpegFromSite", - }) + downloadFFmpegFromSiteMessage := v.app.GetLocalizerService().GetMessage("downloadFFmpegFromSite") return container.NewVBox( canvas.NewLine(colornames.Darkgreen), - widget.NewCard(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "buttonDownloadFFmpeg", - }), "", container.NewVBox( + widget.NewCard(v.app.GetLocalizerService().GetMessage("buttonDownloadFFmpeg"), "", container.NewVBox( widget.NewRichTextFromMarkdown( downloadFFmpegFromSiteMessage+" [https://github.com/BtbN/FFmpeg-Builds/releases](https://github.com/BtbN/FFmpeg-Builds/releases)", ), diff --git a/convertor/view_setting_button_download_ffmpeg_windows.go b/convertor/view_setting_button_download_ffmpeg_windows.go index 5b706b6..b71deef 100644 --- a/convertor/view_setting_button_download_ffmpeg_windows.go +++ b/convertor/view_setting_button_download_ffmpeg_windows.go @@ -8,7 +8,6 @@ import ( "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" "golang.org/x/image/colornames" "image/color" ) @@ -29,9 +28,7 @@ func (v View) blockDownloadFFmpeg( var buttonDownloadFFmpeg *widget.Button - buttonDownloadFFmpeg = widget.NewButton(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "download", - }), func() { + buttonDownloadFFmpeg = widget.NewButton(v.app.GetLocalizerService().GetMessage("download"), func() { go func() { fyne.Do(func() { @@ -47,15 +44,11 @@ func (v View) blockDownloadFFmpeg( }() }) - downloadFFmpegFromSiteMessage := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "downloadFFmpegFromSite", - }) + downloadFFmpegFromSiteMessage := v.app.GetLocalizerService().GetMessage("downloadFFmpegFromSite") return container.NewVBox( canvas.NewLine(colornames.Darkgreen), - widget.NewCard(v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "buttonDownloadFFmpeg", - }), "", container.NewVBox( + widget.NewCard(v.app.GetLocalizerService().GetMessage("buttonDownloadFFmpeg"), "", container.NewVBox( widget.NewRichTextFromMarkdown( downloadFFmpegFromSiteMessage+" [https://github.com/BtbN/FFmpeg-Builds/releases](https://github.com/BtbN/FFmpeg-Builds/releases)", ), diff --git a/error/view.go b/error/view.go index 50182e6..f2becd4 100644 --- a/error/view.go +++ b/error/view.go @@ -2,11 +2,9 @@ package error import ( "fyne.io/fyne/v2/container" - "fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type ViewContract interface { @@ -14,26 +12,17 @@ type ViewContract interface { } type View struct { - app kernel.AppContract - isSetLanguage bool + app kernel.AppContract } func NewView(app kernel.AppContract) *View { return &View{ - app: app, - isSetLanguage: true, + app: app, } } func (v View) PanicError(err error) { - if v.isSetLanguage { - v.isSetLanguage = false - _ = v.app.GetLocalizerService().SetCurrentLanguageByCode(lang.SystemLocale().LanguageString()) - } - - messageHead := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "error", - }) + messageHead := v.app.GetLocalizerService().GetMessage("error") v.app.GetWindow().SetContent(container.NewBorder( container.NewVBox( diff --git a/go.mod b/go.mod index 1bbe1ff..2c96e56 100644 --- a/go.mod +++ b/go.mod @@ -6,15 +6,13 @@ toolchain go1.23.9 require ( fyne.io/fyne/v2 v2.6.1 - github.com/BurntSushi/toml v1.5.0 - github.com/nicksnyder/go-i18n/v2 v2.6.0 github.com/ulikunitz/xz v0.5.12 golang.org/x/image v0.27.0 - golang.org/x/text v0.25.0 ) require ( fyne.io/systray v1.11.0 // indirect + github.com/BurntSushi/toml v1.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/fredbi/uri v1.1.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect @@ -33,6 +31,7 @@ require ( github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25 // indirect github.com/kr/text v0.2.0 // indirect github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect + github.com/nicksnyder/go-i18n/v2 v2.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/rymdport/portal v0.4.1 // indirect github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect @@ -41,5 +40,6 @@ require ( github.com/yuin/goldmark v1.7.11 // indirect golang.org/x/net v0.40.0 // indirect golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/handler/convertor.go b/handler/convertor.go index 8643d35..2bc81fe 100644 --- a/handler/convertor.go +++ b/handler/convertor.go @@ -8,7 +8,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/helper" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/setting" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type ConvertorHandlerContract interface { @@ -134,25 +133,19 @@ func (h ConvertorHandler) checkingFFPathUtilities() bool { func (h ConvertorHandler) saveSettingFFPath(ffmpegPath string, ffprobePath string, ffplayPath string) error { ffmpegChecking, _ := h.app.GetConvertorService().ChangeFFmpegPath(ffmpegPath) if ffmpegChecking == false { - errorText := h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFmpeg", - }) + errorText := h.app.GetLocalizerService().GetMessage("errorFFmpeg") return errors.New(errorText) } ffprobeChecking, _ := h.app.GetConvertorService().ChangeFFprobePath(ffprobePath) if ffprobeChecking == false { - errorText := h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFprobe", - }) + errorText := h.app.GetLocalizerService().GetMessage("errorFFprobe") return errors.New(errorText) } ffplayChecking, _ := h.app.GetConvertorService().ChangeFFplayPath(ffplayPath) if ffplayChecking == false { - errorText := h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFplay", - }) + errorText := h.app.GetLocalizerService().GetMessage("errorFFplay") return errors.New(errorText) } diff --git a/handler/convertor_linux.go b/handler/convertor_linux.go index c1a032a..1c87a3c 100644 --- a/handler/convertor_linux.go +++ b/handler/convertor_linux.go @@ -10,7 +10,6 @@ import ( "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" "github.com/ulikunitz/xz" "io" "net/http" @@ -30,9 +29,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "downloadRun", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("downloadRun") fyne.Do(func() { progressMessage.Refresh() }) @@ -41,9 +38,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "unzipRun", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("unzipRun") fyne.Do(func() { progressMessage.Refresh() }) @@ -53,9 +48,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre } _ = os.Remove("ffmpeg/ffmpeg.tar.xz") - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "testFF", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("testFF") fyne.Do(func() { progressMessage.Refresh() }) @@ -69,9 +62,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "completedQueue", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("completedQueue") fyne.Do(func() { progressMessage.Refresh() }) diff --git a/handler/convertor_windows.go b/handler/convertor_windows.go index fb08d87..206aa57 100644 --- a/handler/convertor_windows.go +++ b/handler/convertor_windows.go @@ -10,7 +10,6 @@ import ( "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" "io" "net/http" "os" @@ -30,9 +29,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "downloadRun", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("downloadRun") fyne.Do(func() { progressMessage.Refresh() }) @@ -41,9 +38,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "unzipRun", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("unzipRun") fyne.Do(func() { progressMessage.Refresh() }) @@ -53,9 +48,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre } _ = os.Remove("ffmpeg/ffmpeg.zip") - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "testFF", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("testFF") fyne.Do(func() { progressMessage.Refresh() }) @@ -68,9 +61,7 @@ func (h ConvertorHandler) downloadFFmpeg(progressBar *widget.ProgressBar, progre return err } - progressMessage.Text = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "completedQueue", - }) + progressMessage.Text = h.app.GetLocalizerService().GetMessage("completedQueue") fyne.Do(func() { progressMessage.Refresh() }) diff --git a/handler/main.go b/handler/main.go index e8a669b..09d4fa8 100644 --- a/handler/main.go +++ b/handler/main.go @@ -1,42 +1,32 @@ package handler import ( - "fyne.io/fyne/v2/lang" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer" ) type MainHandler struct { - app kernel.AppContract - convertorHandler ConvertorHandlerContract - menuHandler MenuHandlerContract - localizerRepository localizer.RepositoryContract + app kernel.AppContract + convertorHandler ConvertorHandlerContract + menuHandler MenuHandlerContract } func NewMainHandler( app kernel.AppContract, convertorHandler ConvertorHandlerContract, menuHandler MenuHandlerContract, - localizerRepository localizer.RepositoryContract, ) *MainHandler { return &MainHandler{ - app: app, - convertorHandler: convertorHandler, - menuHandler: menuHandler, - localizerRepository: localizerRepository, + app: app, + convertorHandler: convertorHandler, + menuHandler: menuHandler, } } func (h MainHandler) Start() { - language := h.localizerRepository.GetCode() - if len(language) == 0 { - err := h.app.GetLocalizerService().SetCurrentLanguageByCode(lang.SystemLocale().LanguageString()) - if err != nil { - h.menuHandler.LanguageSelection() - return - } + if h.app.GetLocalizerService().IsStartWithLanguageSelection() { + h.menuHandler.LanguageSelection() + return } - _ = h.app.GetLocalizerService().SetCurrentLanguageByCode(language) h.convertorHandler.MainConvertor() } diff --git a/handler/menu.go b/handler/menu.go index 7bc8b87..932a0ed 100644 --- a/handler/menu.go +++ b/handler/menu.go @@ -6,7 +6,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/localizer" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/menu" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/theme" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type MenuHandlerContract interface { @@ -15,13 +14,12 @@ type MenuHandlerContract interface { } type MenuHandler struct { - app kernel.AppContract - convertorHandler ConvertorHandlerContract - menuView menu.ViewContract - menuViewSetting menu.ViewSettingContract - localizerView localizer.ViewContract - localizerRepository localizer.RepositoryContract - themeService theme.ThemeContract + app kernel.AppContract + convertorHandler ConvertorHandlerContract + menuView menu.ViewContract + menuViewSetting menu.ViewSettingContract + localizerView localizer.ViewContract + themeService theme.ThemeContract } func NewMenuHandler( @@ -30,17 +28,15 @@ func NewMenuHandler( menuView menu.ViewContract, menuViewSetting menu.ViewSettingContract, localizerView localizer.ViewContract, - localizerRepository localizer.RepositoryContract, themeService theme.ThemeContract, ) *MenuHandler { return &MenuHandler{ - app: app, - convertorHandler: convertorHandler, - menuView: menuView, - menuViewSetting: menuViewSetting, - localizerView: localizerView, - localizerRepository: localizerRepository, - themeService: themeService, + app: app, + convertorHandler: convertorHandler, + menuView: menuView, + menuViewSetting: menuViewSetting, + localizerView: localizerView, + themeService: themeService, } } @@ -52,31 +48,23 @@ func (h MenuHandler) GetMainMenu() *fyne.MainMenu { } func (h MenuHandler) getMenuSettings() *fyne.Menu { - quit := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "exit", - }), nil) + quit := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("exit"), nil) quit.IsQuit = true h.app.GetLocalizerService().AddChangeCallback("exit", func(text string) { quit.Label = text }) - settingsSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "settings", - }), h.settingsSelection) + settingsSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("settings"), h.settingsSelection) h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) { settingsSelection.Label = text }) - ffPathSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "changeFFPath", - }), h.convertorHandler.FfPathSelection) + ffPathSelection := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("changeFFPath"), h.convertorHandler.FfPathSelection) h.app.GetLocalizerService().AddChangeCallback("changeFFPath", func(text string) { ffPathSelection.Label = text }) - settings := fyne.NewMenu(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "settings", - }), settingsSelection, ffPathSelection, quit) + settings := fyne.NewMenu(h.app.GetLocalizerService().GetMessage("settings"), settingsSelection, ffPathSelection, quit) h.app.GetLocalizerService().AddChangeCallback("settings", func(text string) { settings.Label = text settings.Refresh() @@ -86,30 +74,22 @@ func (h MenuHandler) getMenuSettings() *fyne.Menu { } func (h MenuHandler) getMenuHelp() *fyne.Menu { - about := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "about", - }), h.openAbout) + about := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("about"), h.openAbout) h.app.GetLocalizerService().AddChangeCallback("about", func(text string) { about.Label = text }) - gratitude := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "gratitude", - }), h.menuView.Gratitude) + gratitude := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("gratitude"), h.menuView.Gratitude) h.app.GetLocalizerService().AddChangeCallback("gratitude", func(text string) { gratitude.Label = text }) - helpFFplay := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "helpFFplay", - }), h.menuView.HelpFFplay) + helpFFplay := fyne.NewMenuItem(h.app.GetLocalizerService().GetMessage("helpFFplay"), h.menuView.HelpFFplay) h.app.GetLocalizerService().AddChangeCallback("helpFFplay", func(text string) { helpFFplay.Label = text }) - help := fyne.NewMenu(h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "help", - }), helpFFplay, about, gratitude) + help := fyne.NewMenu(h.app.GetLocalizerService().GetMessage("help"), helpFFplay, about, gratitude) h.app.GetLocalizerService().AddChangeCallback("help", func(text string) { help.Label = text help.Refresh() @@ -121,21 +101,15 @@ func (h MenuHandler) getMenuHelp() *fyne.Menu { func (h MenuHandler) openAbout() { ffmpeg, err := h.convertorHandler.GetFfmpegVersion() if err != nil { - ffmpeg = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFmpegVersion", - }) + ffmpeg = h.app.GetLocalizerService().GetMessage("errorFFmpegVersion") } ffprobe, err := h.convertorHandler.GetFfprobeVersion() if err != nil { - ffprobe = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFprobeVersion", - }) + ffprobe = h.app.GetLocalizerService().GetMessage("errorFFprobeVersion") } ffplay, err := h.convertorHandler.GetFfplayVersion() if err != nil { - ffplay = h.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorFFplayVersion", - }) + ffplay = h.app.GetLocalizerService().GetMessage("errorFFplayVersion") } h.menuView.About(ffmpeg, ffprobe, ffplay) @@ -143,18 +117,16 @@ func (h MenuHandler) openAbout() { func (h MenuHandler) LanguageSelection() { h.localizerView.LanguageSelection(func(lang kernel.Lang) { - _ = h.localizerRepository.Save(lang.Code) h.convertorHandler.MainConvertor() }) } func (h MenuHandler) settingsSelection() { save := func(setting *menu.SettingForm) error { - err := h.app.GetLocalizerService().SetCurrentLanguage(setting.Language) + err := h.app.GetLocalizerService().SetCurrentLanguage(setting.Language, true) if err != nil { return err } - _ = h.localizerRepository.Save(setting.Language.Code) err = h.themeService.SetCurrentTheme(setting.ThemeInfo) if err != nil { diff --git a/images/screenshot-folder-structure.png b/images/screenshot-folder-structure.png index 1e29071..58b4406 100644 Binary files a/images/screenshot-folder-structure.png and b/images/screenshot-folder-structure.png differ diff --git a/kernel/app.go b/kernel/app.go index 3babb14..242ea8c 100644 --- a/kernel/app.go +++ b/kernel/app.go @@ -30,7 +30,6 @@ type App struct { func NewApp( metadata *fyne.AppMetadata, - localizerService LocalizerContract, queue QueueListContract, ffplayService FFplayContract, convertorService ConvertorContract, @@ -38,6 +37,12 @@ func NewApp( app.SetMetadata(*metadata) a := app.New() + localizerService, err := newLocalizer(a) + if err != nil { + panicErrorLang(a, err) + return nil + } + statusesText := GetBlockProgressbarStatusesText(localizerService) blockProgressbarService := NewBlockProgressbar(statusesText, ffplayService) rightTabsService := NewRightTabs(localizerService) diff --git a/kernel/error.go b/kernel/error.go index 7f03ea1..cd26e13 100644 --- a/kernel/error.go +++ b/kernel/error.go @@ -2,14 +2,11 @@ package kernel import ( "fyne.io/fyne/v2" - "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" ) -func PanicErrorLang(err error, metadata *fyne.AppMetadata) { - app.SetMetadata(*metadata) - a := app.New() +func panicErrorLang(a fyne.App, err error) { window := a.NewWindow("GUI for FFmpeg") window.SetContent(container.NewVBox( widget.NewLabel("Произошла ошибка!"), diff --git a/kernel/items_to_convert.go b/kernel/items_to_convert.go index 0adbc3d..093540c 100644 --- a/kernel/items_to_convert.go +++ b/kernel/items_to_convert.go @@ -6,7 +6,6 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type ItemsToConvertContract interface { @@ -35,21 +34,23 @@ func NewItemsToConvert(itemsContainer *fyne.Container, ffplayService FFplayContr line := canvas.NewLine(theme.Color(theme.ColorNameFocus)) line.StrokeWidth = 5 - checkboxAutoRemove := widget.NewCheck(localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "autoClearAfterAddingToQueue", - }), func(checked bool) { - ItemsToConvert.isAutoRemove = checked - }) + checkboxAutoRemove := widget.NewCheck( + localizerService.GetMessage("autoClearAfterAddingToQueue"), + func(checked bool) { + ItemsToConvert.isAutoRemove = checked + }, + ) checkboxAutoRemove.SetChecked(ItemsToConvert.isAutoRemove) localizerService.AddChangeCallback("autoClearAfterAddingToQueue", func(text string) { checkboxAutoRemove.Text = text }) - buttonClear := widget.NewButton(localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "clearAll", - }), func() { - ItemsToConvert.clear() - }) + buttonClear := widget.NewButton( + localizerService.GetMessage("clearAll"), + func() { + ItemsToConvert.clear() + }, + ) buttonClear.Importance = widget.DangerImportance localizerService.AddChangeCallback("clearAll", func(text string) { buttonClear.Text = text diff --git a/kernel/layout.go b/kernel/layout.go index 3d34179..7953967 100644 --- a/kernel/layout.go +++ b/kernel/layout.go @@ -6,7 +6,6 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" "strconv" "strings" @@ -77,7 +76,7 @@ type QueueLayoutItem struct { } func NewQueueLayoutObject(queue QueueListContract, localizerService LocalizerContract, ffplayService FFplayContract, rightTabsService RightTabsContract, blockProgressbar *fyne.Container) *QueueLayoutObject { - title := widget.NewLabel(localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: "queue"})) + title := widget.NewLabel(localizerService.GetMessage("queue")) title.TextStyle.Bold = true localizerService.AddChangeCallback("queue", func(text string) { @@ -222,7 +221,7 @@ func (o QueueLayoutObject) getStatusColor(status StatusContract) color.Color { } func (o QueueLayoutObject) getStatusTitle(status StatusContract) string { - return o.localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: status.Name() + "Queue"}) + return o.localizerService.GetMessage(status.Name() + "Queue") } type queueStatistics struct { @@ -441,7 +440,7 @@ func newQueueStatistics(messaigeID string, localizerService LocalizerContract) * count := int64(0) - title := localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: messaigeID}) + title := localizerService.GetMessage(messaigeID) queueStatistics := &queueStatistics{ widget: checkbox, title: strings.ToLower(title), diff --git a/kernel/localizer.go b/kernel/localizer.go index 3823c7d..085fb69 100644 --- a/kernel/localizer.go +++ b/kernel/localizer.go @@ -1,21 +1,28 @@ package kernel import ( - "github.com/BurntSushi/toml" - "github.com/nicksnyder/go-i18n/v2/i18n" - "golang.org/x/text/cases" + "embed" + "encoding/json" + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/lang" "golang.org/x/text/language" - "golang.org/x/text/language/display" - "path/filepath" - "sort" ) +//go:embed translations +var translations embed.FS + +var supportedLanguages = map[string]Lang{ + "ru": {Code: "ru", Title: "Русский"}, + "kk": {Code: "kk", Title: "Қазақ Тілі"}, + "en": {Code: "en", Title: "English"}, +} + type LocalizerContract interface { + IsStartWithLanguageSelection() bool + GetMessage(key string, data ...any) string GetLanguages() []Lang - GetMessage(localizeConfig *i18n.LocalizeConfig) string - SetCurrentLanguage(lang Lang) error - SetCurrentLanguageByCode(code string) error - GetCurrentLanguage() *CurrentLanguage + GetCurrentLanguage() Lang + SetCurrentLanguage(selectLang Lang, isSaveSetting bool) error AddChangeCallback(messageID string, callback func(text string)) } @@ -24,135 +31,164 @@ type Lang struct { Title string } -type CurrentLanguage struct { - Lang Lang - localizer *i18n.Localizer - localizerDefault *i18n.Localizer -} - type changeCallback struct { messageID string callback func(text string) } type Localizer struct { - bundle *i18n.Bundle - languages []Lang - currentLanguage *CurrentLanguage - changeCallbacks map[int]*changeCallback + setting SettingLanguageContract + currentLang Lang + changeCallbacks map[int]*changeCallback + isStartWithLanguageSelection bool } -func NewLocalizer(directory string, languageDefault language.Tag) (*Localizer, error) { - bundle := i18n.NewBundle(languageDefault) - bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal) +func newLocalizer(app fyne.App) (*Localizer, error) { + setting := newSettingLanguage(app) + currentLanguage, isLanguageNotSupported := setting.GetLang() - languages, err := initLanguages(directory, bundle) + localizer := &Localizer{ + setting: setting, + changeCallbacks: map[int]*changeCallback{}, + isStartWithLanguageSelection: isLanguageNotSupported, + } + + err := localizer.SetCurrentLanguage(currentLanguage, false) if err != nil { return nil, err } - localizerDefault := i18n.NewLocalizer(bundle, languageDefault.String()) - - return &Localizer{ - bundle: bundle, - languages: languages, - currentLanguage: &CurrentLanguage{ - Lang: Lang{ - Code: languageDefault.String(), - Title: cases.Title(languageDefault).String(display.Self.Name(languageDefault)), - }, - localizer: localizerDefault, - localizerDefault: localizerDefault, - }, - changeCallbacks: map[int]*changeCallback{}, - }, nil + return localizer, nil } -func initLanguages(directory string, bundle *i18n.Bundle) ([]Lang, error) { - var languages []Lang +func (l *Localizer) IsStartWithLanguageSelection() bool { + return l.isStartWithLanguageSelection +} - files, err := filepath.Glob(directory + "/active.*.toml") +func (l *Localizer) GetMessage(key string, data ...any) string { + return lang.L(key, data...) +} + +func (l *Localizer) GetLanguages() []Lang { + return getLanguages() +} + +func (l *Localizer) GetCurrentLanguage() Lang { + return l.currentLang +} + +func (l *Localizer) SetCurrentLanguage(selectLang Lang, isSaveSetting bool) error { + l.currentLang = selectLang + + translationsData, err := l.getTranslations(selectLang) if err != nil { - return nil, err - } - for _, file := range files { - lang, err := bundle.LoadMessageFile(file) - if err != nil { - return nil, err - } - title := cases.Title(lang.Tag).String(display.Self.Name(lang.Tag)) - languages = append(languages, Lang{Code: lang.Tag.String(), Title: title}) + return err } - sort.Sort(languagesSort(languages)) - - return languages, nil -} - -func (l Localizer) GetLanguages() []Lang { - return l.languages -} - -func (l Localizer) GetMessage(localizeConfig *i18n.LocalizeConfig) string { - message, err := l.GetCurrentLanguage().localizer.Localize(localizeConfig) + name := lang.SystemLocale().LanguageString() + err = lang.AddTranslations(fyne.NewStaticResource(name+".json", translationsData)) if err != nil { - message, err = l.GetCurrentLanguage().localizerDefault.Localize(localizeConfig) - if err != nil { - return err.Error() - } + return err + } + + if isSaveSetting { + l.setting.SetLang(selectLang) } - return message -} -func (l Localizer) SetCurrentLanguage(lang Lang) error { - l.currentLanguage.Lang = lang - l.currentLanguage.localizer = i18n.NewLocalizer(l.bundle, lang.Code) l.eventSetCurrentLanguage() return nil } -func (l Localizer) SetCurrentLanguageByCode(code string) error { - lang, err := language.Parse(code) - if err != nil { - return err - } - title := cases.Title(lang).String(display.Self.Name(lang)) - return l.SetCurrentLanguage(Lang{Code: lang.String(), Title: title}) -} - -func (l Localizer) GetCurrentLanguage() *CurrentLanguage { - return l.currentLanguage -} - -func (l Localizer) AddChangeCallback(messageID string, callback func(text string)) { +func (l *Localizer) AddChangeCallback(messageID string, callback func(text string)) { l.changeCallbacks[len(l.changeCallbacks)] = &changeCallback{messageID: messageID, callback: callback} } -func (l Localizer) eventSetCurrentLanguage() { +func (l *Localizer) eventSetCurrentLanguage() { for _, changeCallback := range l.changeCallbacks { - text := l.GetMessage(&i18n.LocalizeConfig{MessageID: changeCallback.messageID}) + text := l.GetMessage(changeCallback.messageID) changeCallback.callback(text) } } -type languagesSort []Lang - -func (l languagesSort) Len() int { return len(l) } -func (l languagesSort) Swap(i, j int) { l[i], l[j] = l[j], l[i] } -func (l languagesSort) Less(i, j int) bool { - return languagePriority(l[i]) < languagePriority(l[j]) -} -func languagePriority(l Lang) int { - priority := 0 - - switch l.Code { - case "ru": - priority = -3 - case "kk": - priority = -2 - case "en": - priority = -1 +func (l *Localizer) getTranslations(language Lang) ([]byte, error) { + 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 priority + return l.mergeTranslations(baseJson, appJson) +} + +func (l *Localizer) 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) +} + +func getLanguages() []Lang { + items := []Lang{} + for _, item := range supportedLanguages { + items = append(items, item) + } + return items +} + +type SettingLanguageContract interface { + GetLang() (currentLang Lang, isLanguageNotSupported bool) + SetLang(language Lang) +} + +type SettingLanguage struct { + app fyne.App +} + +func newSettingLanguage(app fyne.App) *SettingLanguage { + return &SettingLanguage{ + app: app, + } +} + +func (s *SettingLanguage) GetLang() (currentLang Lang, isLanguageNotSupported bool) { + languageCode := s.app.Preferences().String("language") + currentLang = supportedLanguages["ru"] + + if languageCode == "" { + languageTag, err := language.Parse(lang.SystemLocale().LanguageString()) + if err != nil { + return currentLang, true + } + base, _ := languageTag.Base() + languageCode = base.String() + } + + if findLang, ok := findSupportedLanguage(languageCode); ok { + return findLang, false + } + + return currentLang, true +} + +func (s *SettingLanguage) SetLang(language Lang) { + s.app.Preferences().SetString("language", language.Code) +} + +func findSupportedLanguage(code string) (Lang, bool) { + lang, ok := supportedLanguages[code] + return lang, ok } diff --git a/kernel/progressbar.go b/kernel/progressbar.go index 48b8485..95d4ce5 100644 --- a/kernel/progressbar.go +++ b/kernel/progressbar.go @@ -8,7 +8,6 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" "io" "regexp" @@ -209,9 +208,7 @@ func (p Progress) Run(stdOut io.ReadCloser, stdErr io.ReadCloser) error { if isProcessCompleted == false { if len(errorText) == 0 { - errorText = p.localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorConverter", - }) + errorText = p.localizerService.GetMessage("errorConverter") } return errors.New(errorText) } @@ -227,15 +224,9 @@ type BlockProgressbarStatusesText struct { func GetBlockProgressbarStatusesText(localizerService LocalizerContract) *BlockProgressbarStatusesText { statusesText := &BlockProgressbarStatusesText{ - inProgress: localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "inProgressQueue", - }), - completed: localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "completedQueue", - }), - error: localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "errorQueue", - }), + inProgress: localizerService.GetMessage("inProgressQueue"), + completed: localizerService.GetMessage("completedQueue"), + error: localizerService.GetMessage("errorQueue"), } localizerService.AddChangeCallback("inProgressQueue", func(text string) { diff --git a/kernel/right_tabs.go b/kernel/right_tabs.go index 16f8de1..9b41880 100644 --- a/kernel/right_tabs.go +++ b/kernel/right_tabs.go @@ -3,7 +3,6 @@ package kernel import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type RightTabsContract interface { @@ -26,13 +25,13 @@ type RightTabs struct { func NewRightTabs(localizerService LocalizerContract) *RightTabs { addedFilesContainer := container.NewVBox() - addedFilesTab := container.NewTabItem(localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: "addedFilesTitle"}), addedFilesContainer) + addedFilesTab := container.NewTabItem(localizerService.GetMessage("addedFilesTitle"), addedFilesContainer) localizerService.AddChangeCallback("addedFilesTitle", func(text string) { addedFilesTab.Text = text }) fileQueueContainer := container.NewVBox() - fileQueueTab := container.NewTabItem(localizerService.GetMessage(&i18n.LocalizeConfig{MessageID: "fileQueueTitle"}), fileQueueContainer) + fileQueueTab := container.NewTabItem(localizerService.GetMessage("fileQueueTitle"), fileQueueContainer) localizerService.AddChangeCallback("fileQueueTitle", func(text string) { fileQueueTab.Text = text }) diff --git a/kernel/translations/app.en.json b/kernel/translations/app.en.json new file mode 100644 index 0000000..9919f8d --- /dev/null +++ b/kernel/translations/app.en.json @@ -0,0 +1,143 @@ +{ + "AlsoUsedProgram": "The program also uses:", + "about": "About", + "aboutText": "A simple interface for the FFmpeg console utility. \nBut I am not the author of the FFmpeg utility itself.", + "addedFilesTitle": "Added files", + "autoClearAfterAddingToQueue": "Auto-clear after adding to queue", + "buttonDownloadFFmpeg": "Download FFmpeg automatically", + "buttonForSelectedDirTitle": "Save to folder:", + "cancel": "Cancel", + "changeFFPath": "FFmpeg, FFprobe and FFplay", + "changeLanguage": "Change language", + "checkboxOverwriteOutputFilesTitle": "Allow file to be overwritten", + "choose": "choose", + "clearAll": "Clear List", + "completedQueue": "Completed", + "converterVideoFilesSubmitTitle": "Convert", + "converterVideoFilesTitle": "Video, audio and picture converter", + "download": "Download", + "downloadFFmpegFromSite": "Will be downloaded from the site:", + "downloadRun": "Downloading...", + "dragAndDropFiles": "drag and drop files", + "encoderGroupAudio": "Audio", + "encoderGroupImage": "Images", + "encoderGroupVideo": "Video", + "encoder_apng": "APNG image", + "encoder_bmp": "BMP image", + "encoder_flv": "FLV", + "encoder_gif": "GIF image", + "encoder_h264_nvenc": "H.264 with NVIDIA support", + "encoder_libmp3lame": "libmp3lame MP3 (MPEG audio layer 3)", + "encoder_libshine": "libshine MP3 (MPEG audio layer 3)", + "encoder_libtwolame": "libtwolame MP2 (MPEG audio layer 2)", + "encoder_libvpx": "libvpx VP8 (codec vp8)", + "encoder_libvpx-vp9": "libvpx VP9 (codec vp9)", + "encoder_libwebp": "libwebp WebP image", + "encoder_libwebp_anim": "libwebp_anim WebP image", + "encoder_libx264": "H.264 libx264", + "encoder_libx265": "H.265 libx265", + "encoder_libxvid": "libxvidcore MPEG-4 part 2", + "encoder_mjpeg": "MJPEG (Motion JPEG)", + "encoder_mp2": "MP2 (MPEG audio layer 2)", + "encoder_mp2fixed": "MP2 fixed point (MPEG audio layer 2)", + "encoder_mpeg1video": "MPEG-1", + "encoder_mpeg2video": "MPEG-2", + "encoder_mpeg4": "MPEG-4 part 2", + "encoder_msmpeg4": "MPEG-4 part 2 Microsoft variant version 3", + "encoder_msmpeg4v2": "MPEG-4 part 2 Microsoft variant version 2", + "encoder_msvideo1": "Microsoft Video-1", + "encoder_png": "PNG image", + "encoder_qtrle": "QuickTime Animation (RLE) video", + "encoder_sgi": "SGI image", + "encoder_tiff": "TIFF image", + "encoder_wmav1": "Windows Media Audio 1", + "encoder_wmav2": "Windows Media Audio 2", + "encoder_wmv1": "Windows Media Video 7", + "encoder_wmv2": "Windows Media Video 8", + "encoder_xbm": "XBM (X BitMap) image", + "error": "An error has occurred!", + "errorConverter": "Couldn't convert video", + "errorDragAndDropFile": "Not all files were added", + "errorFFmpeg": "this is not FFmpeg", + "errorFFmpegVersion": "Could not determine FFmpeg version", + "errorFFplay": "this is not FFplay", + "errorFFplayVersion": "Could not determine FFplay version", + "errorFFprobe": "this is not FFprobe", + "errorFFprobeVersion": "Failed to determine FFprobe version", + "errorNoFilesAddedForConversion": "There are no files to convert", + "errorQueue": "Error", + "errorSelectedEncoder": "Converter not selected", + "errorSelectedFolderSave": "No save folder selected!", + "errorSelectedFormat": "File extension not selected", + "exit": "Exit", + "ffmpegLGPL": "This software uses libraries from the **FFmpeg** project under the **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**.", + "ffmpegTrademark": "**FFmpeg** is a trademark of **[Fabrice Bellard](http://bellard.org/)**, originator of the **[FFmpeg](https://ffmpeg.org/about.html)** project.", + "fileForConversionTitle": "File:", + "fileQueueTitle": "Queue", + "formPreset": "Preset", + "gratitude": "Gratitude", + "gratitudeText": "I sincerely thank you for your invaluable\n\r and timely assistance:", + "help": "Help", + "helpFFplay": "FFplay Player Keys", + "helpFFplayActivateFrameStepMode": "Activate frame-by-frame mode.", + "helpFFplayCycleVideoFiltersOrShowModes": "A cycle of video filters or display modes.", + "helpFFplayDecreaseVolume": "Decrease the volume.", + "helpFFplayDescription": "Description", + "helpFFplayDoubleClickLeftMouseButton": "double click\nleft mouse button", + "helpFFplayIncreaseVolume": "Increase the volume.", + "helpFFplayKeyDown": "down", + "helpFFplayKeyHoldS": "hold S", + "helpFFplayKeyLeft": "left", + "helpFFplayKeyRight": "right", + "helpFFplayKeySpace": "SPACE", + "helpFFplayKeyUp": "up", + "helpFFplayKeys": "Keys", + "helpFFplayPause": "Pause or continue playing.", + "helpFFplayQuit": "Close the player.", + "helpFFplaySeekBForward10Minutes": "Fast forward 10 minutes.", + "helpFFplaySeekBForward1Minute": "Fast forward 1 minute.", + "helpFFplaySeekBackward10Minutes": "Rewind 10 minutes.", + "helpFFplaySeekBackward10Seconds": "Rewind 10 seconds.", + "helpFFplaySeekBackward1Minute": "Rewind 1 minute.", + "helpFFplaySeekForward10Seconds": "Fast forward 10 seconds.", + "helpFFplayToggleFullScreen": "Switch to full screen or exit full screen.", + "helpFFplayToggleMute": "Mute or unmute.", + "inProgressQueue": "In Progress", + "languageSelectionFormHead": "Switch language", + "languageSelectionHead": "Choose language", + "licenseLink": "License information", + "licenseLinkOther": "Licenses from other products used in the program", + "menuSettingsLanguage": "Language", + "menuSettingsTheme": "Theme", + "or": "or", + "parameterCheckbox": "Enable option", + "pathToFfmpeg": "Path to FFmpeg:", + "pathToFfplay": "Path to FFplay:", + "pathToFfprobe": "Path to FFprobe:", + "preset_fast": "fast (slower than \"faster\", but the file will weigh less)", + "preset_faster": "faster (slower than \"veryfast\", but the file will weigh less)", + "preset_medium": "medium (slower than \"fast\", but the file will weigh less)", + "preset_placebo": "placebo (not recommended)", + "preset_slow": "slow (slower than \"medium\", but the file will weigh less)", + "preset_slower": "slower (slower than \"slow\", but the file will weigh less)", + "preset_superfast": "superfast (slower than \"ultrafast\", but the file will weigh less)", + "preset_ultrafast": "ultrafast (fast, but the file will weigh a lot)", + "preset_veryfast": "veryfast (slower than \"superfast\", but the file will weigh less)", + "preset_veryslow": "veryslow (slower than \"slower\", but the file will weigh less)", + "programmLink": "Project website", + "programmVersion": "**Program version:** {{.Version}}", + "queue": "Queue", + "save": "Save", + "selectEncoder": "Encoder:", + "selectFFPathTitle": "Specify the path to FFmpeg and FFprobe", + "selectFormat": "File extension:", + "settings": "Settings", + "testFF": "Checking FFmpeg for serviceability...", + "themesNameDark": "Dark", + "themesNameDefault": "Default", + "themesNameLight": "Light", + "titleDownloadLink": "You can download it from here", + "total": "Total", + "unzipRun": "Unpacked...", + "waitingQueue": "Waiting" +} \ No newline at end of file diff --git a/kernel/translations/app.kk.json b/kernel/translations/app.kk.json new file mode 100644 index 0000000..6fb1b81 --- /dev/null +++ b/kernel/translations/app.kk.json @@ -0,0 +1,143 @@ +{ + "AlsoUsedProgram": "Бағдарлама сонымен қатар пайдаланады:", + "about": "Бағдарлама туралы", + "aboutText": "FFmpeg консоль утилитасы үшін қарапайым интерфейс. \nБірақ мен FFmpeg утилитасының авторы емеспін.", + "addedFilesTitle": "Қосылған файлдар", + "autoClearAfterAddingToQueue": "Кезекке қосқаннан кейін тазалаңыз", + "buttonDownloadFFmpeg": "FFmpeg автоматты түрде жүктеп алыңыз", + "buttonForSelectedDirTitle": "Қалтаға сақтаңыз:", + "cancel": "Болдырмау", + "changeFFPath": "FFmpeg, FFprobe және FFplay", + "changeLanguage": "Тілді өзгерту", + "checkboxOverwriteOutputFilesTitle": "Файлды қайта жазуға рұқсат беріңіз", + "choose": "таңдау", + "clearAll": "Тізімді өшіру", + "completedQueue": "Дайын", + "converterVideoFilesSubmitTitle": "Файлды түрлендіру", + "converterVideoFilesTitle": "Бейне, аудио және суретті түрлендіргіш", + "download": "Жүктеп алу", + "downloadFFmpegFromSite": "Сайттан жүктеледі:", + "downloadRun": "Жүктеп алынуда...", + "dragAndDropFiles": "файлдарды сүйреп апарыңыз", + "encoderGroupAudio": "Аудио", + "encoderGroupImage": "Суреттер", + "encoderGroupVideo": "Бейне", + "encoder_apng": "APNG image", + "encoder_bmp": "BMP image", + "encoder_flv": "FLV", + "encoder_gif": "GIF image", + "encoder_h264_nvenc": "NVIDIA қолдауымен H.264", + "encoder_libmp3lame": "libmp3lame MP3 (MPEG audio layer 3)", + "encoder_libshine": "libshine MP3 (MPEG audio layer 3)", + "encoder_libtwolame": "libtwolame MP2 (MPEG audio layer 2)", + "encoder_libvpx": "libvpx VP8 (codec vp8)", + "encoder_libvpx-vp9": "libvpx VP9 (codec vp9)", + "encoder_libwebp": "libwebp WebP image", + "encoder_libwebp_anim": "libwebp_anim WebP image", + "encoder_libx264": "H.264 libx264", + "encoder_libx265": "H.265 libx265", + "encoder_libxvid": "libxvidcore MPEG-4 part 2", + "encoder_mjpeg": "MJPEG (Motion JPEG)", + "encoder_mp2": "MP2 (MPEG audio layer 2)", + "encoder_mp2fixed": "MP2 fixed point (MPEG audio layer 2)", + "encoder_mpeg1video": "MPEG-1", + "encoder_mpeg2video": "MPEG-2", + "encoder_mpeg4": "MPEG-4 part 2", + "encoder_msmpeg4": "MPEG-4 part 2 Microsoft variant version 3", + "encoder_msmpeg4v2": "MPEG-4 part 2 Microsoft variant version 2", + "encoder_msvideo1": "Microsoft Video-1", + "encoder_png": "PNG image", + "encoder_qtrle": "QuickTime Animation (RLE) video", + "encoder_sgi": "SGI image", + "encoder_tiff": "TIFF image", + "encoder_wmav1": "Windows Media Audio 1", + "encoder_wmav2": "Windows Media Audio 2", + "encoder_wmv1": "Windows Media Video 7", + "encoder_wmv2": "Windows Media Video 8", + "encoder_xbm": "XBM (X BitMap) image", + "error": "Қате орын алды!", + "errorConverter": "Бейнені түрлендіру мүмкін болмады", + "errorDragAndDropFile": "Барлық файлдар қосылмаған", + "errorFFmpeg": "бұл FFmpeg емес", + "errorFFmpegVersion": "FFmpeg нұсқасын анықтау мүмкін болмады", + "errorFFplay": "бұл FFplay емес", + "errorFFplayVersion": "FFplay нұсқасын анықтау мүмкін болмады", + "errorFFprobe": "бұл FFprobe емес", + "errorFFprobeVersion": "FFprobe нұсқасын анықтау мүмкін болмады", + "errorNoFilesAddedForConversion": "Түрлендіруге арналған файлдар жоқ", + "errorQueue": "Қате", + "errorSelectedEncoder": "Түрлендіргіш таңдалмаған", + "errorSelectedFolderSave": "Сақтау қалтасы таңдалмаған!", + "errorSelectedFormat": "Файл кеңейтімі таңдалмаған", + "exit": "Шығу", + "ffmpegLGPL": "Бұл бағдарламалық құрал **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)** астында **FFmpeg** жобасының кітапханаларын пайдаланады.", + "ffmpegTrademark": "FFmpeg — **[FFmpeg](https://ffmpeg.org/about.html)** жобасын жасаушы **[Fabrice Bellard](http://bellard.org/)** сауда белгісі.", + "fileForConversionTitle": "Файл:", + "fileQueueTitle": "Кезек", + "formPreset": "Алдын ала орнатылған", + "gratitude": "Алғыс", + "gratitudeText": "Сізге баға жетпес және уақтылы көмектескеніңіз\n\r үшін шын жүректен алғыс айтамын:", + "help": "Анықтама", + "helpFFplay": "FFplay ойнатқышының пернелері", + "helpFFplayActivateFrameStepMode": "Уақыт аралығын іске қосыңыз.", + "helpFFplayCycleVideoFiltersOrShowModes": "Бейне сүзгілерінің немесе дисплей режимдерінің циклі.", + "helpFFplayDecreaseVolume": "Дыбыс деңгейін төмендетіңіз.", + "helpFFplayDescription": "Сипаттама", + "helpFFplayDoubleClickLeftMouseButton": "тінтуірдің сол жақ\nбатырмасын екі рет басу", + "helpFFplayIncreaseVolume": "Дыбыс деңгейін арттыру.", + "helpFFplayKeyDown": "төмен", + "helpFFplayKeyHoldS": "ұстау S", + "helpFFplayKeyLeft": "сол", + "helpFFplayKeyRight": "құқық", + "helpFFplayKeySpace": "SPACE (пробел)", + "helpFFplayKeyUp": "жоғары", + "helpFFplayKeys": "Кілттер", + "helpFFplayPause": "Кідіртіңіз немесе жоғалтуды жалғастырыңыз.", + "helpFFplayQuit": "Ойнатқышты жабыңыз.", + "helpFFplaySeekBForward10Minutes": "10 минутқа алға айналдырыңыз.", + "helpFFplaySeekBForward1Minute": "1 минутқа алға айналдырыңыз.", + "helpFFplaySeekBackward10Minutes": "10 минутқа артқа айналдырыңыз.", + "helpFFplaySeekBackward10Seconds": "10 секундқа артқа айналдырыңыз.", + "helpFFplaySeekBackward1Minute": "1 минутқа артқа айналдырыңыз.", + "helpFFplaySeekForward10Seconds": "10 секунд алға айналдырыңыз.", + "helpFFplayToggleFullScreen": "Толық экранға ауысу немесе толық экраннан шығу.", + "helpFFplayToggleMute": "Дыбысты өшіріңіз немесе дыбысты қосыңыз.", + "inProgressQueue": "Орындалуда", + "languageSelectionFormHead": "Тілді ауыстыру", + "languageSelectionHead": "Тілді таңдаңыз", + "licenseLink": "Лицензия туралы ақпарат", + "licenseLinkOther": "Бағдарламада пайдаланылатын басқа өнімдердің лицензиялары", + "menuSettingsLanguage": "Тіл", + "menuSettingsTheme": "Тақырып", + "or": "немесе", + "parameterCheckbox": "Опцияны қосу", + "pathToFfmpeg": "FFmpeg жол:", + "pathToFfplay": "FFplay жол:", + "pathToFfprobe": "FFprobe жол:", + "preset_fast": "fast («faster» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_faster": "faster («veryfast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_medium": "medium («fast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_placebo": "placebo (ұсынылмайды)", + "preset_slow": "slow («medium» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_slower": "slower («slow» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_superfast": "superfast («ultrafast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_ultrafast": "ultrafast (жылдам, бірақ файлдың салмағы көп болады)", + "preset_veryfast": "veryfast («superfast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "preset_veryslow": "veryslow («slower» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)", + "programmLink": "Жобаның веб-сайты", + "programmVersion": "**Бағдарлама нұсқасы:** {{.Version}}", + "queue": "Кезек", + "save": "Сақтау", + "selectEncoder": "Кодировщик:", + "selectFFPathTitle": "FFmpeg және FFprobe жолын көрсетіңіз", + "selectFormat": "Файл кеңейтімі:", + "settings": "Параметрлер", + "testFF": "FFmpeg функционалдығы тексерілуде...", + "themesNameDark": "Қараңғы тақырып", + "themesNameDefault": "Әдепкі бойынша", + "themesNameLight": "Жеңіл тақырып", + "titleDownloadLink": "Сіз оны осы жерден жүктей аласыз", + "total": "Барлығы", + "unzipRun": "Орамнан шығарылуда...", + "waitingQueue": "Күту" +} \ No newline at end of file diff --git a/kernel/translations/app.ru.json b/kernel/translations/app.ru.json new file mode 100644 index 0000000..20a5da8 --- /dev/null +++ b/kernel/translations/app.ru.json @@ -0,0 +1,143 @@ +{ + "AlsoUsedProgram": "Также в программе используется:", + "about": "О программе", + "aboutText": "Простенький интерфейс для консольной утилиты FFmpeg. \nНо я не являюсь автором самой утилиты FFmpeg.", + "addedFilesTitle": "Добавленные файлы", + "autoClearAfterAddingToQueue": "Очищать после добавления в очередь", + "buttonDownloadFFmpeg": "Скачать автоматически FFmpeg", + "buttonForSelectedDirTitle": "Сохранить в папку:", + "cancel": "Отмена", + "changeFFPath": "FFmpeg, FFprobe и FFplay", + "changeLanguage": "Поменять язык", + "checkboxOverwriteOutputFilesTitle": "Разрешить перезаписать файл", + "choose": "выбрать", + "clearAll": "Очистить список", + "completedQueue": "Готово", + "converterVideoFilesSubmitTitle": "Конвертировать", + "converterVideoFilesTitle": "Конвертер видео, аудио и картинок", + "download": "Скачать", + "downloadFFmpegFromSite": "Будет скачано с сайта:", + "downloadRun": "Скачивается...", + "dragAndDropFiles": "перетащить файлы", + "encoderGroupAudio": "Аудио", + "encoderGroupImage": "Картинки", + "encoderGroupVideo": "Видео", + "encoder_apng": "APNG image", + "encoder_bmp": "BMP image", + "encoder_flv": "FLV", + "encoder_gif": "GIF image", + "encoder_h264_nvenc": "H.264 с поддержкой NVIDIA", + "encoder_libmp3lame": "libmp3lame MP3 (MPEG audio layer 3)", + "encoder_libshine": "libshine MP3 (MPEG audio layer 3)", + "encoder_libtwolame": "libtwolame MP2 (MPEG audio layer 2)", + "encoder_libvpx": "libvpx VP8 (codec vp8)", + "encoder_libvpx-vp9": "libvpx VP9 (codec vp9)", + "encoder_libwebp": "libwebp WebP image", + "encoder_libwebp_anim": "libwebp_anim WebP image", + "encoder_libx264": "H.264 libx264", + "encoder_libx265": "H.265 libx265", + "encoder_libxvid": "libxvidcore MPEG-4 part 2", + "encoder_mjpeg": "MJPEG (Motion JPEG)", + "encoder_mp2": "MP2 (MPEG audio layer 2)", + "encoder_mp2fixed": "MP2 fixed point (MPEG audio layer 2)", + "encoder_mpeg1video": "MPEG-1", + "encoder_mpeg2video": "MPEG-2", + "encoder_mpeg4": "MPEG-4 part 2", + "encoder_msmpeg4": "MPEG-4 part 2 Microsoft variant version 3", + "encoder_msmpeg4v2": "MPEG-4 part 2 Microsoft variant version 2", + "encoder_msvideo1": "Microsoft Video-1", + "encoder_png": "PNG image", + "encoder_qtrle": "QuickTime Animation (RLE) video", + "encoder_sgi": "SGI image", + "encoder_tiff": "TIFF image", + "encoder_wmav1": "Windows Media Audio 1", + "encoder_wmav2": "Windows Media Audio 2", + "encoder_wmv1": "Windows Media Video 7", + "encoder_wmv2": "Windows Media Video 8", + "encoder_xbm": "XBM (X BitMap) image", + "error": "Произошла ошибка!", + "errorConverter": "не смогли отконвертировать видео", + "errorDragAndDropFile": "Не все файлы добавились", + "errorFFmpeg": "это не FFmpeg", + "errorFFmpegVersion": "Не смогли определить версию FFmpeg", + "errorFFplay": "это не FFplay", + "errorFFplayVersion": "Не смогли определить версию FFplay", + "errorFFprobe": "это не FFprobe", + "errorFFprobeVersion": "Не смогли определить версию FFprobe", + "errorNoFilesAddedForConversion": "Нет файлов для конвертации", + "errorQueue": "Ошибка", + "errorSelectedEncoder": "Конвертер не выбран", + "errorSelectedFolderSave": "Папка для сохранения не выбрана!", + "errorSelectedFormat": "Расширение файла не выбрана", + "exit": "Выход", + "ffmpegLGPL": "Это программное обеспечение использует библиотеки из проекта **FFmpeg** под **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**.", + "ffmpegTrademark": "**FFmpeg** — торговая марка **[Fabrice Bellard](http://bellard.org/)** , создателя проекта **[FFmpeg](https://ffmpeg.org/about.html)**.", + "fileForConversionTitle": "Файл:", + "fileQueueTitle": "Очередь", + "formPreset": "Предустановка", + "gratitude": "Благодарность", + "gratitudeText": "Я искренне благодарю вас за неоценимую\n\rи своевременную помощь:", + "help": "Справка", + "helpFFplay": "Клавиши проигрывателя FFplay", + "helpFFplayActivateFrameStepMode": "Активировать покадровый режим.", + "helpFFplayCycleVideoFiltersOrShowModes": "Цикл видеофильтров или режимов показа.", + "helpFFplayDecreaseVolume": "Уменьшить громкость.", + "helpFFplayDescription": "Описание", + "helpFFplayDoubleClickLeftMouseButton": "двойной щелчок\nлевой кнопкой мыши", + "helpFFplayIncreaseVolume": "Увеличить громкость.", + "helpFFplayKeyDown": "вниз", + "helpFFplayKeyHoldS": "держать S", + "helpFFplayKeyLeft": "лево", + "helpFFplayKeyRight": "право", + "helpFFplayKeySpace": "SPACE (пробел)", + "helpFFplayKeyUp": "вверх", + "helpFFplayKeys": "Клавиши", + "helpFFplayPause": "Поставить на паузу или продолжить проигрывать.", + "helpFFplayQuit": "Закрыть проигрыватель.", + "helpFFplaySeekBForward10Minutes": "Перемотать вперёд на 10 минут.", + "helpFFplaySeekBForward1Minute": "Перемотать вперёд на 1 минуту.", + "helpFFplaySeekBackward10Minutes": "Перемотать назад на 10 минут.", + "helpFFplaySeekBackward10Seconds": "Перемотать назад на 10 секунд.", + "helpFFplaySeekBackward1Minute": "Перемотать назад на 1 минуту.", + "helpFFplaySeekForward10Seconds": "Перемотать вперёд на 10 секунд.", + "helpFFplayToggleFullScreen": "Переключиться на полный экран или выйти с полного экрана.", + "helpFFplayToggleMute": "Отключить звук или включить звук.", + "inProgressQueue": "Выполняется", + "languageSelectionFormHead": "Переключить язык", + "languageSelectionHead": "Выберите язык", + "licenseLink": "Сведения о лицензии", + "licenseLinkOther": "Лицензии от других продуктов, которые используются в программе", + "menuSettingsLanguage": "Язык", + "menuSettingsTheme": "Тема", + "or": "или", + "parameterCheckbox": "Включить параметр", + "pathToFfmpeg": "Путь к FFmpeg:", + "pathToFfplay": "Путь к FFplay:", + "pathToFfprobe": "Путь к FFprobe:", + "preset_fast": "fast (медленней чем faster, но будет файл и меньше весить)", + "preset_faster": "faster (медленней чем veryfast, но будет файл и меньше весить)", + "preset_medium": "medium (медленней чем fast, но будет файл и меньше весить)", + "preset_placebo": "placebo (не рекомендуется)", + "preset_slow": "slow (медленней чем medium, но будет файл и меньше весить)", + "preset_slower": "slower (медленней чем slow, но будет файл и меньше весить)", + "preset_superfast": "superfast (медленней чем ultrafast, но будет файл и меньше весить)", + "preset_ultrafast": "ultrafast (быстро, но файл будет много весить)", + "preset_veryfast": "veryfast (медленней чем superfast, но будет файл и меньше весить)", + "preset_veryslow": "veryslow (медленней чем slower, но будет файл и меньше весить)", + "programmLink": "Сайт проекта", + "programmVersion": "**Версия программы:** {{.Version}}", + "queue": "Очередь", + "save": "Сохранить", + "selectEncoder": "Кодировщик:", + "selectFFPathTitle": "Укажите путь к FFmpeg и к FFprobe", + "selectFormat": "Расширение файла:", + "settings": "Настройки", + "testFF": "Проверка FFmpeg на работоспособность...", + "themesNameDark": "Тёмная", + "themesNameDefault": "По умолчанию", + "themesNameLight": "Светлая", + "titleDownloadLink": "Скачать можно от сюда", + "total": "Всего", + "unzipRun": "Распаковывается...", + "waitingQueue": "В очереди" +} \ No newline at end of file diff --git a/kernel/translations/base.en.json b/kernel/translations/base.en.json new file mode 100644 index 0000000..3f5dd3d --- /dev/null +++ b/kernel/translations/base.en.json @@ -0,0 +1,45 @@ +{ + "Advanced": "Advanced", + "Cancel": "Cancel", + "Confirm": "Confirm", + "Copy": "Copy", + "Create Folder": "Create Folder", + "Cut": "Cut", + "Enter filename": "Enter filename", + "Error": "Error", + "Favourites": "Favourites", + "File": "File", + "Folder": "Folder", + "New Folder": "New Folder", + "No": "No", + "OK": "OK", + "Open": "Open", + "Paste": "Paste", + "Quit": "Quit", + "Redo": "Redo", + "Save": "Save", + "Select all": "Select all", + "Show Hidden Files": "Show Hidden Files", + "Undo": "Undo", + "Yes": "Yes", + "file.name": { + "other": "Name" + }, + "file.parent": { + "other": "Parent" + }, + "friday": "Friday", + "friday.short": "Fri", + "monday": "Monday", + "monday.short": "Mon", + "saturday": "Saturday", + "saturday.short": "Sat", + "sunday": "Sunday", + "sunday.short": "Sun", + "thursday": "Thursday", + "thursday.short": "Thu", + "tuesday": "Tuesday", + "tuesday.short": "Tue", + "wednesday": "Wednesday", + "wednesday.short": "Wed" +} \ No newline at end of file diff --git a/kernel/translations/base.kk.json b/kernel/translations/base.kk.json new file mode 100644 index 0000000..469566b --- /dev/null +++ b/kernel/translations/base.kk.json @@ -0,0 +1,45 @@ +{ + "Advanced": "Кеңейтілген", + "Cancel": "Бас тарту", + "Confirm": "Растау", + "Copy": "Көшіру", + "Create Folder": "Қалта жасау", + "Cut": "Кесу", + "Enter filename": "Файл атауын енгізіңіз", + "Error": "Қате", + "Favourites": "Таңдаулылар", + "File": "Файл", + "Folder": "Қалта", + "New Folder": "Жаңа қалта", + "No": "Жоқ", + "OK": "ОК", + "Open": "Ашу", + "Paste": "Кірістіру", + "Quit": "Шығу", + "Redo": "Қайталау", + "Save": "Сақтау", + "Select all": "Барлығын таңдаңыз", + "Show Hidden Files": "Жасырын файлдарды көрсету", + "Undo": "Бас тарту", + "Yes": "Иә", + "file.name": { + "other": "Аты" + }, + "file.parent": { + "other": "Жоғары" + }, + "friday": "Жұма", + "friday.short": "Жұ", + "monday": "Дүйсенбі", + "monday.short": "Дү", + "saturday": "Сенбі", + "saturday.short": "Сен", + "sunday": "Жексенбі", + "sunday.short": "Же", + "thursday": "Сейсенбі", + "thursday.short": "Се", + "tuesday": "Бейсенбі", + "tuesday.short": "Бе", + "wednesday": "Сәрсенбі", + "wednesday.short": "Сә" +} \ No newline at end of file diff --git a/kernel/translations/base.ru.json b/kernel/translations/base.ru.json new file mode 100644 index 0000000..ac22058 --- /dev/null +++ b/kernel/translations/base.ru.json @@ -0,0 +1,45 @@ +{ + "Advanced": "Расширенные", + "Cancel": "Отмена", + "Confirm": "Подтвердить", + "Copy": "Копировать", + "Create Folder": "Создать папку", + "Cut": "Вырезать", + "Enter filename": "Введите имя файла", + "Error": "Ошибка", + "Favourites": "Избранное", + "File": "Файл", + "Folder": "Папка", + "New Folder": "Новая папка", + "No": "Нет", + "OK": "ОК", + "Open": "Открыть", + "Paste": "Вставить", + "Quit": "Выйти", + "Redo": "Повторить", + "Save": "Сохранить", + "Select all": "Выбрать всё", + "Show Hidden Files": "Показать скрытые файлы", + "Undo": "Отменить", + "Yes": "Да", + "file.name": { + "other": "Имя" + }, + "file.parent": { + "other": "Вверх" + }, + "friday": "Пятница", + "friday.short": "Пт", + "monday": "Понедельник", + "monday.short": "Пн", + "saturday": "Суббота", + "saturday.short": "Сб", + "sunday": "Воскресенье", + "sunday.short": "Вс", + "thursday": "Вторник", + "thursday.short": "Вт", + "tuesday": "Четверг", + "tuesday.short": "Чт", + "wednesday": "Среда", + "wednesday.short": "Ср" +} \ No newline at end of file diff --git a/languages/.gitignore b/languages/.gitignore deleted file mode 100644 index bc8acef..0000000 --- a/languages/.gitignore +++ /dev/null @@ -1 +0,0 @@ -translate.*.toml diff --git a/languages/active.en.toml b/languages/active.en.toml deleted file mode 100644 index a9ab0bc..0000000 --- a/languages/active.en.toml +++ /dev/null @@ -1,563 +0,0 @@ -[AlsoUsedProgram] -hash = "sha1-a72be72e7808bb8a0144ed7a93acb29c568b1ed4" -other = "The program also uses:" - -[about] -hash = "sha1-3da0b9ef719fd707f443ac00404447f29445976f" -other = "About" - -[aboutText] -hash = "sha1-8bd565814118ba8b90c40eb5b62acf8d2676e7d6" -other = "A simple interface for the FFmpeg console utility. \nBut I am not the author of the FFmpeg utility itself." - -[addedFilesTitle] -hash = "sha1-8ba0f6e477b0d78df2cc06f1d8b41b888623b851" -other = "Added files" - -[autoClearAfterAddingToQueue] -hash = "sha1-b3781695a4c35380d2cd075bb52f27a2a6d8f19c" -other = "Auto-clear after adding to queue" - -[buttonDownloadFFmpeg] -hash = "sha1-c223c2e15171156192bc3146aee91e6094bb475b" -other = "Download FFmpeg automatically" - -[buttonForSelectedDirTitle] -hash = "sha1-8cbe5c67bcf89e4624635a79cbea104227faedda" -other = "Save to folder:" - -[cancel] -hash = "sha1-0ec753be8df955a117404fb634b01b45eb386e2a" -other = "Cancel" - -[changeFFPath] -hash = "sha1-1f704de0560f8135eb6924cd232ed919ca2e5af0" -other = "FFmpeg, FFprobe and FFplay" - -[changeLanguage] -hash = "sha1-8b276eaf378d485c769fb3d5dcc06dfc25b0c01b" -other = "Change language" - -[checkboxOverwriteOutputFilesTitle] -hash = "sha1-5860124bb781e7ef680f573fa93977e96328d4e7" -other = "Allow file to be overwritten" - -[choose] -hash = "sha1-f60bb5f761024d973834b5e9d25ceebce2c85f94" -other = "choose" - -[clearAll] -hash = "sha1-f32702d79ac206432400ac6b041695d020f6fa77" -other = "Clear List" - -[completedQueue] -hash = "sha1-398c7d4f7b0d522afb930769c0fbb1a9f4b61fbe" -other = "Completed" - -[converterVideoFilesSubmitTitle] -hash = "sha1-7ac460f3c24c9952082f2db6e4d62f752598709c" -other = "Convert" - -[converterVideoFilesTitle] -hash = "sha1-1ab29597cc9dfefab08e54ea5442e7ffa15f0394" -other = "Video, audio and picture converter" - -[download] -hash = "sha1-fe8f79f29da457de2f6bc9531de6e536e0c426ad" -other = "Download" - -[downloadFFmpegFromSite] -hash = "sha1-0889c95aa3a8659d8d903b4dab7097699c4d8aa4" -other = "Will be downloaded from the site:" - -[downloadRun] -hash = "sha1-55f87f114628fa2d5d8e67d1e1cda22c0e4f9271" -other = "Downloading..." - -[dragAndDropFiles] -hash = "sha1-07bb747cc7590d7a51cdf96dff49a74139097766" -other = "drag and drop files" - -[encoderGroupAudio] -hash = "sha1-24321cb5400df96be8f3e2131918bebdb3a01bba" -other = "Audio" - -[encoderGroupImage] -hash = "sha1-a7e528bc7ac9538aec87d1593c38b80be95d4745" -other = "Images" - -[encoderGroupVideo] -hash = "sha1-8e7b9894c7ef0f57ac0bf910f6a8aac1c8a53683" -other = "Video" - -[encoder_apng] -hash = "sha1-1cbd9abfef96d5614a7e569161b41bd6ad87bbaf" -other = "APNG image" - -[encoder_bmp] -hash = "sha1-e0b9c16b016961a5abdc2217e8ffd1ba7ddebc40" -other = "BMP image" - -[encoder_flv] -hash = "sha1-3602bbf1cc90e48254f81975c7879b5fc0c4d602" -other = "FLV" - -[encoder_gif] -hash = "sha1-d092a779172291b5215aa095390a5b11659128a4" -other = "GIF image" - -[encoder_h264_nvenc] -hash = "sha1-169389f8c4a2518410159c363378ab5c978c32e5" -other = "H.264 with NVIDIA support" - -[encoder_libmp3lame] -hash = "sha1-cd2c8d6f246c8bc18554b7105cb50b78d3cb2b98" -other = "libmp3lame MP3 (MPEG audio layer 3)" - -[encoder_libshine] -hash = "sha1-891d56c85857e5d83ef5a1fe077c1f1540788f49" -other = "libshine MP3 (MPEG audio layer 3)" - -[encoder_libtwolame] -hash = "sha1-b2f53be810b74edc3c454ac75de7ddecfee322ca" -other = "libtwolame MP2 (MPEG audio layer 2)" - -[encoder_libvpx] -hash = "sha1-b85c923aecfb48de0e87e71b6a21bfc2c547c70e" -other = "libvpx VP8 (codec vp8)" - -[encoder_libvpx-vp9] -hash = "sha1-3106417bd89bee87daa691e87614caf78cb934fe" -other = "libvpx VP9 (codec vp9)" - -[encoder_libwebp] -hash = "sha1-1d590d47d46f7880246061fce0e0de6d743db39e" -other = "libwebp WebP image" - -[encoder_libwebp_anim] -hash = "sha1-f141a9c8f23d79c13d44c30d8f34e05b363771ad" -other = "libwebp_anim WebP image" - -[encoder_libx264] -hash = "sha1-6d764ac459c0bf3c819d76618418cdfbb7a749eb" -other = "H.264 libx264" - -[encoder_libx265] -hash = "sha1-55544c166b1e15fd71a58096518e528109599eea" -other = "H.265 libx265" - -[encoder_libxvid] -hash = "sha1-d4bed46d6cdd2bfa8fd1689801164a83ab10c3f5" -other = "libxvidcore MPEG-4 part 2" - -[encoder_mjpeg] -hash = "sha1-94ba63a322b493a04da65e566781fe1cf8bb0d50" -other = "MJPEG (Motion JPEG)" - -[encoder_mp2] -hash = "sha1-a9154b7203349e5d6fbfd67d1ea97715f54b2065" -other = "MP2 (MPEG audio layer 2)" - -[encoder_mp2fixed] -hash = "sha1-dd2ee670d8bc8a60a96a717ebd26f16b5748cf3f" -other = "MP2 fixed point (MPEG audio layer 2)" - -[encoder_mpeg1video] -hash = "sha1-30043660719a3cb19dab5c33450665a8a9cc1c01" -other = "MPEG-1" - -[encoder_mpeg2video] -hash = "sha1-ccb2dcd8510cfdc9d52e5258af1863e5f2c51e77" -other = "MPEG-2" - -[encoder_mpeg4] -hash = "sha1-67fe42f18421b2f6c90fcdc579f9199bfca4b182" -other = "MPEG-4 part 2" - -[encoder_msmpeg4] -hash = "sha1-313ee597e4f0d9bd63a2bc6ac1618f028aef76f4" -other = "MPEG-4 part 2 Microsoft variant version 3" - -[encoder_msmpeg4v2] -hash = "sha1-adc442ce88f2717693b2da3010a1937d77ee522f" -other = "MPEG-4 part 2 Microsoft variant version 2" - -[encoder_msvideo1] -hash = "sha1-00f43ac0dc162bca10e0d98d6b70c0c6a902f66f" -other = "Microsoft Video-1" - -[encoder_png] -hash = "sha1-6715d4b82f5d9dfe3e53e30b402ffa1a6fbf30a5" -other = "PNG image" - -[encoder_qtrle] -hash = "sha1-31bf155cffaf6842ebc54084e4337ca08fdd9848" -other = "QuickTime Animation (RLE) video" - -[encoder_sgi] -hash = "sha1-f4510e237f7fc3c02caa728f9e500f4b069f9c11" -other = "SGI image" - -[encoder_tiff] -hash = "sha1-ed09d78c38e0b17ed695f35740c756dd7340eeac" -other = "TIFF image" - -[encoder_wmav1] -hash = "sha1-cd4a4c5eeac694b6699d55d0f9b477b3b50f18c7" -other = "Windows Media Audio 1" - -[encoder_wmav2] -hash = "sha1-eb2e5306cb33a702577ecfbdca0461862c66c053" -other = "Windows Media Audio 2" - -[encoder_wmv1] -hash = "sha1-f9b748554c590c36a56bcba2cd317196b7bdeddb" -other = "Windows Media Video 7" - -[encoder_wmv2] -hash = "sha1-5b21c87f5c6104797ead60b488b2948428f6b1b7" -other = "Windows Media Video 8" - -[encoder_xbm] -hash = "sha1-2dfc35881da62e9a1379d8238cf7839b24f79566" -other = "XBM (X BitMap) image" - -[error] -hash = "sha1-a7df8f8b5d754f226ac4cb320577fe692b33e483" -other = "An error has occurred!" - -[errorConverter] -hash = "sha1-55ebddceddb8b044e33cc3893ec2eba7bbd9fcf9" -other = "Couldn't convert video" - -[errorDragAndDropFile] -hash = "sha1-863cf1ad9c820d5b0c2006ceeaa29e25f81c1714" -other = "Not all files were added" - -[errorFFmpeg] -hash = "sha1-ccf0b95c0d1b392dc215258d917eb4e5d0b88ed0" -other = "this is not FFmpeg" - -[errorFFmpegVersion] -hash = "sha1-9a4148d42186b6b32cf83bef726e23022c53283f" -other = "Could not determine FFmpeg version" - -[errorFFplay] -hash = "sha1-988122112ac6002094e25518cfb5f0d606217298" -other = "this is not FFplay" - -[errorFFplayVersion] -hash = "sha1-cd60928d20d93210e103dd464306ab138bf1b184" -other = "Could not determine FFplay version" - -[errorFFprobe] -hash = "sha1-86d1b0b4c4ccd6a4f71e758fc67ce11aff4ba9b8" -other = "this is not FFprobe" - -[errorFFprobeVersion] -hash = "sha1-da7b37d7df3fafbd153665b13888413d52b24c17" -other = "Failed to determine FFprobe version" - -[errorNoFilesAddedForConversion] -hash = "sha1-5cf1f65bef15cb0382e56be98f44c6abde56a314" -other = "There are no files to convert" - -[errorQueue] -hash = "sha1-72aecd9ad85642d84d62dbbf3cf70953c5f696c7" -other = "Error" - -[errorSelectedEncoder] -hash = "sha1-33ed1aaf4cb3c2ee9d8f8c325b9b75d16ddf9979" -other = "Converter not selected" - -[errorSelectedFolderSave] -hash = "sha1-16f3ef93ee36813fdd79d8fb9bb7fc02acbb94a8" -other = "No save folder selected!" - -[errorSelectedFormat] -hash = "sha1-cda92c56a1ef1aabc92bbfc405ede8ab13087e66" -other = "File extension not selected" - -[exit] -hash = "sha1-c42457057d1ab7950cea00719cbe0b078891775f" -other = "Exit" - -[ffmpegLGPL] -hash = "sha1-d395b16cc8f8eab98a8a970307c5b010ba22dde6" -other = "This software uses libraries from the **FFmpeg** project under the **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**." - -[ffmpegTrademark] -hash = "sha1-45f772b2eca5098cd6d31f2d1dc6edec1987a617" -other = "**FFmpeg** is a trademark of **[Fabrice Bellard](http://bellard.org/)**, originator of the **[FFmpeg](https://ffmpeg.org/about.html)** project." - -[fileForConversionTitle] -hash = "sha1-96ac799e1086b31fd8f5f8d4c801829d6c853f08" -other = "File:" - -[fileQueueTitle] -hash = "sha1-aec93b16baeaf55fed871075c9494a460e4a91b8" -other = "Queue" - -[formPreset] -hash = "sha1-7759891ba1ef9f7adc70defc7ac18fbf149c1a68" -other = "Preset" - -[gratitude] -hash = "sha1-51968fc38e53a9a11c861126c62404674fd6096f" -other = "Gratitude" - -[gratitudeText] -hash = "sha1-cb343e4d39ca31e6da6f72b9394cc915cb7d1258" -other = "I sincerely thank you for your invaluable\n\r and timely assistance:" - -[help] -hash = "sha1-6a45cef900c668effcb2ab10da05855c1fd10f6f" -other = "Help" - -[helpFFplay] -hash = "sha1-ecc294b8b3d217ee1c2d63dc2f0253c3d1b3712c" -other = "FFplay Player Keys" - -[helpFFplayActivateFrameStepMode] -hash = "sha1-f47ede90932d69465f6197cb2a7cc4d1e3ab150e" -other = "Activate frame-by-frame mode." - -[helpFFplayCycleVideoFiltersOrShowModes] -hash = "sha1-83bb702c777e4768cdc326a668d541c23ab759b7" -other = "A cycle of video filters or display modes." - -[helpFFplayDecreaseVolume] -hash = "sha1-de28db96a9c22be885ec5067a13f8f17fd3954bc" -other = "Decrease the volume." - -[helpFFplayDescription] -hash = "sha1-f5441f6aee76222c4120066575e80c2d177ac3c0" -other = "Description" - -[helpFFplayDoubleClickLeftMouseButton] -hash = "sha1-2657aa576055769952dfcde570fc9b4765d594ad" -other = "double click\nleft mouse button" - -[helpFFplayIncreaseVolume] -hash = "sha1-8ba7bde2d9a80f4a7cd122cf4973975698d3bd34" -other = "Increase the volume." - -[helpFFplayKeyDown] -hash = "sha1-c5aefd2f8c6908a69b08fe4a2d235b1ae0113470" -other = "down" - -[helpFFplayKeyHoldS] -hash = "sha1-89c5dd8287c15b3f40db66e06b038c34a715f02f" -other = "hold S" - -[helpFFplayKeyLeft] -hash = "sha1-feb671890703fb0300a436744d34018bbc7ba13a" -other = "left" - -[helpFFplayKeyRight] -hash = "sha1-a4f025d4bf7f90ee5bec6c48b2710bc9c5bbb267" -other = "right" - -[helpFFplayKeySpace] -hash = "sha1-a367ad00358ec44edc1d54a96df6f9114b0f8697" -other = "SPACE" - -[helpFFplayKeyUp] -hash = "sha1-e4845aa8c0e100a80eaf65446c59085236fd2098" -other = "up" - -[helpFFplayKeys] -hash = "sha1-0ad272ade8c568f394499f1492ecfab56e701e5d" -other = "Keys" - -[helpFFplayPause] -hash = "sha1-e83e107900fde0c39295f599c2cf8fba8d8cb604" -other = "Pause or continue playing." - -[helpFFplayQuit] -hash = "sha1-70785a2fd5d5a6519b7439f0d8cfcd7d54c5771d" -other = "Close the player." - -[helpFFplaySeekBForward10Minutes] -hash = "sha1-58ed63343376240f2596e447b5245c1805f35234" -other = "Fast forward 10 minutes." - -[helpFFplaySeekBForward1Minute] -hash = "sha1-3fe46b8d5413b7fdc53ae9ed9427bcb1769ec74c" -other = "Fast forward 1 minute." - -[helpFFplaySeekBackward10Minutes] -hash = "sha1-927dffe9af72ffd40f46873b452a4c90627bccf8" -other = "Rewind 10 minutes." - -[helpFFplaySeekBackward10Seconds] -hash = "sha1-e97615ecec0f8cf5647e8802bdda38dc2b0d809f" -other = "Rewind 10 seconds." - -[helpFFplaySeekBackward1Minute] -hash = "sha1-5b19e280a0850122c8ebc80c622491bb09520e1a" -other = "Rewind 1 minute." - -[helpFFplaySeekForward10Seconds] -hash = "sha1-8d840251d4a1668edaea3515df197a8a79031ec3" -other = "Fast forward 10 seconds." - -[helpFFplayToggleFullScreen] -hash = "sha1-d32df02849258c5b02f15e5711f54ee6a8a75fd4" -other = "Switch to full screen or exit full screen." - -[helpFFplayToggleMute] -hash = "sha1-4bdbb124fe8de3a8037c1e74719e9600b21b25ab" -other = "Mute or unmute." - -[inProgressQueue] -hash = "sha1-eff79c40e2100ae5fadf3a7d99336025edcca8b5" -other = "In Progress" - -[languageSelectionFormHead] -hash = "sha1-0ff5fa82cf684112660128cba1711297acf11003" -other = "Switch language" - -[languageSelectionHead] -hash = "sha1-daf1108fc10d3b1a908288d611f749b3cc651e4b" -other = "Choose language" - -[licenseLink] -hash = "sha1-ea18ab849f0eea030d770da82c2a6b3484a7bd13" -other = "License information" - -[licenseLinkOther] -hash = "sha1-359fff328717c05104e51a2d29f05bf1875d26b7" -other = "Licenses from other products used in the program" - -[menuSettingsLanguage] -hash = "sha1-ed3f0e507a5b4ed0649d7c768fe0d47413d839ba" -other = "Language" - -[menuSettingsTheme] -hash = "sha1-553c45f1b84a92b08dc1f088c13f924cde95765e" -other = "Theme" - -[or] -hash = "sha1-30bb0333ca1583110e4ced513b5d2455b86f529b" -other = "or" - -[parameterCheckbox] -hash = "sha1-9e35221d454870996fd51d576249cf47d1784a3c" -other = "Enable option" - -[pathToFfmpeg] -hash = "sha1-fafc50f1db0f720fe83a96cd70a9e1ad824e96b6" -other = "Path to FFmpeg:" - -[pathToFfplay] -hash = "sha1-5389830dd75a63aa8a5e41e8f07c5fadd8385398" -other = "Path to FFplay:" - -[pathToFfprobe] -hash = "sha1-b872edc9633a2e81ef678dc46fe46a7e91732024" -other = "Path to FFprobe:" - -[preset_fast] -hash = "sha1-935e1ac9d3c8ba4478326c909ba66662acb0540e" -other = "fast (slower than \"faster\", but the file will weigh less)" - -[preset_faster] -hash = "sha1-98620b73c896440c39ea6ec4b9b19d41301c9a7e" -other = "faster (slower than \"veryfast\", but the file will weigh less)" - -[preset_medium] -hash = "sha1-f7d1c30135c22c2f07c247075c0df103bb3c3ea5" -other = "medium (slower than \"fast\", but the file will weigh less)" - -[preset_placebo] -hash = "sha1-7bcff099104bb192881139e6404981bd426b3f91" -other = "placebo (not recommended)" - -[preset_slow] -hash = "sha1-681bf587275a45b48af49bb2ad8f0947919530e7" -other = "slow (slower than \"medium\", but the file will weigh less)" - -[preset_slower] -hash = "sha1-d1c692ee2b7643ae2c71a48bea880327a3c6b1e3" -other = "slower (slower than \"slow\", but the file will weigh less)" - -[preset_superfast] -hash = "sha1-41c39959e8f1547cc9259a5b459c4ccbf368cc23" -other = "superfast (slower than \"ultrafast\", but the file will weigh less)" - -[preset_ultrafast] -hash = "sha1-dfed981573ac2046832f9a9450bc9388958753fa" -other = "ultrafast (fast, but the file will weigh a lot)" - -[preset_veryfast] -hash = "sha1-370b82509887d02d7a2ef9b110df4616b16123ce" -other = "veryfast (slower than \"superfast\", but the file will weigh less)" - -[preset_veryslow] -hash = "sha1-d428bfa6deea9dd5c7c1f80ceba24e123ae96d0d" -other = "veryslow (slower than \"slower\", but the file will weigh less)" - -[programmLink] -hash = "sha1-18f9a3fad6aacefe1b05eed23122800b391ff5ca" -other = "Project website" - -[programmVersion] -hash = "sha1-fa2e4994a301bb24bc2a8fa166e5486ea95a7475" -other = "**Program version:** {{.Version}}" - -[queue] -hash = "sha1-aec93b16baeaf55fed871075c9494a460e4a91b8" -other = "Queue" - -[save] -hash = "sha1-4864057d626a868fa60f999bed3191d61d045ddc" -other = "Save" - -[selectEncoder] -hash = "sha1-88f3670b09758a3336057520a215058d61006abd" -other = "Encoder:" - -[selectFFPathTitle] -hash = "sha1-95581446a28d968ff1a027c623159a7eb08654cf" -other = "Specify the path to FFmpeg and FFprobe" - -[selectFormat] -hash = "sha1-f3809b0b48886570cd4cf1d7099de6da5b6d4524" -other = "File extension:" - -[settings] -hash = "sha1-7f17c7c62a7fd8d1a508481f4778688927734c2f" -other = "Settings" - -[testFF] -hash = "sha1-f5b8ed88e9609963035d2235be0a79bbec619976" -other = "Checking FFmpeg for serviceability..." - -[themesNameDark] -hash = "sha1-bd16b234708a2515a9f2d0ca41fb11e7fe8a38a2" -other = "Dark" - -[themesNameDefault] -hash = "sha1-469631cb165dcbbfea9e747056c25fbccb28c481" -other = "Default" - -[themesNameLight] -hash = "sha1-8080010c5e7d7edf56e89a99d8a2422898417845" -other = "Light" - -[titleDownloadLink] -hash = "sha1-92df86371f6c3a06ca1e4754f113142776a32d49" -other = "You can download it from here" - -[total] -hash = "sha1-3b5143902e0c5c84459aedf918e17604d9735b94" -other = "Total" - -[unzipRun] -hash = "sha1-c554dad13026668a1f6adf3171837c5d51bbac36" -other = "Unpacked..." - -[waitingQueue] -hash = "sha1-307429dd84150877080c4bbff2b340d1e7dadff2" -other = "Waiting" diff --git a/languages/active.kk.toml b/languages/active.kk.toml deleted file mode 100644 index 100be4c..0000000 --- a/languages/active.kk.toml +++ /dev/null @@ -1,563 +0,0 @@ -[AlsoUsedProgram] -hash = "sha1-a72be72e7808bb8a0144ed7a93acb29c568b1ed4" -other = "Бағдарлама сонымен қатар пайдаланады:" - -[about] -hash = "sha1-3da0b9ef719fd707f443ac00404447f29445976f" -other = "Бағдарлама туралы" - -[aboutText] -hash = "sha1-8bd565814118ba8b90c40eb5b62acf8d2676e7d6" -other = "FFmpeg консоль утилитасы үшін қарапайым интерфейс. \nБірақ мен FFmpeg утилитасының авторы емеспін." - -[addedFilesTitle] -hash = "sha1-8ba0f6e477b0d78df2cc06f1d8b41b888623b851" -other = "Қосылған файлдар" - -[autoClearAfterAddingToQueue] -hash = "sha1-b3781695a4c35380d2cd075bb52f27a2a6d8f19c" -other = "Кезекке қосқаннан кейін тазалаңыз" - -[buttonDownloadFFmpeg] -hash = "sha1-c223c2e15171156192bc3146aee91e6094bb475b" -other = "FFmpeg автоматты түрде жүктеп алыңыз" - -[buttonForSelectedDirTitle] -hash = "sha1-8cbe5c67bcf89e4624635a79cbea104227faedda" -other = "Қалтаға сақтаңыз:" - -[cancel] -hash = "sha1-0ec753be8df955a117404fb634b01b45eb386e2a" -other = "Болдырмау" - -[changeFFPath] -hash = "sha1-1f704de0560f8135eb6924cd232ed919ca2e5af0" -other = "FFmpeg, FFprobe және FFplay" - -[changeLanguage] -hash = "sha1-8b276eaf378d485c769fb3d5dcc06dfc25b0c01b" -other = "Тілді өзгерту" - -[checkboxOverwriteOutputFilesTitle] -hash = "sha1-5860124bb781e7ef680f573fa93977e96328d4e7" -other = "Файлды қайта жазуға рұқсат беріңіз" - -[choose] -hash = "sha1-f60bb5f761024d973834b5e9d25ceebce2c85f94" -other = "таңдау" - -[clearAll] -hash = "sha1-f32702d79ac206432400ac6b041695d020f6fa77" -other = "Тізімді өшіру" - -[completedQueue] -hash = "sha1-398c7d4f7b0d522afb930769c0fbb1a9f4b61fbe" -other = "Дайын" - -[converterVideoFilesSubmitTitle] -hash = "sha1-7ac460f3c24c9952082f2db6e4d62f752598709c" -other = "Файлды түрлендіру" - -[converterVideoFilesTitle] -hash = "sha1-1ab29597cc9dfefab08e54ea5442e7ffa15f0394" -other = "Бейне, аудио және суретті түрлендіргіш" - -[download] -hash = "sha1-fe8f79f29da457de2f6bc9531de6e536e0c426ad" -other = "Жүктеп алу" - -[downloadFFmpegFromSite] -hash = "sha1-0889c95aa3a8659d8d903b4dab7097699c4d8aa4" -other = "Сайттан жүктеледі:" - -[downloadRun] -hash = "sha1-55f87f114628fa2d5d8e67d1e1cda22c0e4f9271" -other = "Жүктеп алынуда..." - -[dragAndDropFiles] -hash = "sha1-07bb747cc7590d7a51cdf96dff49a74139097766" -other = "файлдарды сүйреп апарыңыз" - -[encoderGroupAudio] -hash = "sha1-24321cb5400df96be8f3e2131918bebdb3a01bba" -other = "Аудио" - -[encoderGroupImage] -hash = "sha1-a7e528bc7ac9538aec87d1593c38b80be95d4745" -other = "Суреттер" - -[encoderGroupVideo] -hash = "sha1-8e7b9894c7ef0f57ac0bf910f6a8aac1c8a53683" -other = "Бейне" - -[encoder_apng] -hash = "sha1-1cbd9abfef96d5614a7e569161b41bd6ad87bbaf" -other = "APNG image" - -[encoder_bmp] -hash = "sha1-e0b9c16b016961a5abdc2217e8ffd1ba7ddebc40" -other = "BMP image" - -[encoder_flv] -hash = "sha1-3602bbf1cc90e48254f81975c7879b5fc0c4d602" -other = "FLV" - -[encoder_gif] -hash = "sha1-d092a779172291b5215aa095390a5b11659128a4" -other = "GIF image" - -[encoder_h264_nvenc] -hash = "sha1-169389f8c4a2518410159c363378ab5c978c32e5" -other = "NVIDIA қолдауымен H.264" - -[encoder_libmp3lame] -hash = "sha1-cd2c8d6f246c8bc18554b7105cb50b78d3cb2b98" -other = "libmp3lame MP3 (MPEG audio layer 3)" - -[encoder_libshine] -hash = "sha1-891d56c85857e5d83ef5a1fe077c1f1540788f49" -other = "libshine MP3 (MPEG audio layer 3)" - -[encoder_libtwolame] -hash = "sha1-b2f53be810b74edc3c454ac75de7ddecfee322ca" -other = "libtwolame MP2 (MPEG audio layer 2)" - -[encoder_libvpx] -hash = "sha1-b85c923aecfb48de0e87e71b6a21bfc2c547c70e" -other = "libvpx VP8 (codec vp8)" - -[encoder_libvpx-vp9] -hash = "sha1-3106417bd89bee87daa691e87614caf78cb934fe" -other = "libvpx VP9 (codec vp9)" - -[encoder_libwebp] -hash = "sha1-1d590d47d46f7880246061fce0e0de6d743db39e" -other = "libwebp WebP image" - -[encoder_libwebp_anim] -hash = "sha1-f141a9c8f23d79c13d44c30d8f34e05b363771ad" -other = "libwebp_anim WebP image" - -[encoder_libx264] -hash = "sha1-6d764ac459c0bf3c819d76618418cdfbb7a749eb" -other = "H.264 libx264" - -[encoder_libx265] -hash = "sha1-55544c166b1e15fd71a58096518e528109599eea" -other = "H.265 libx265" - -[encoder_libxvid] -hash = "sha1-d4bed46d6cdd2bfa8fd1689801164a83ab10c3f5" -other = "libxvidcore MPEG-4 part 2" - -[encoder_mjpeg] -hash = "sha1-94ba63a322b493a04da65e566781fe1cf8bb0d50" -other = "MJPEG (Motion JPEG)" - -[encoder_mp2] -hash = "sha1-a9154b7203349e5d6fbfd67d1ea97715f54b2065" -other = "MP2 (MPEG audio layer 2)" - -[encoder_mp2fixed] -hash = "sha1-dd2ee670d8bc8a60a96a717ebd26f16b5748cf3f" -other = "MP2 fixed point (MPEG audio layer 2)" - -[encoder_mpeg1video] -hash = "sha1-30043660719a3cb19dab5c33450665a8a9cc1c01" -other = "MPEG-1" - -[encoder_mpeg2video] -hash = "sha1-ccb2dcd8510cfdc9d52e5258af1863e5f2c51e77" -other = "MPEG-2" - -[encoder_mpeg4] -hash = "sha1-67fe42f18421b2f6c90fcdc579f9199bfca4b182" -other = "MPEG-4 part 2" - -[encoder_msmpeg4] -hash = "sha1-313ee597e4f0d9bd63a2bc6ac1618f028aef76f4" -other = "MPEG-4 part 2 Microsoft variant version 3" - -[encoder_msmpeg4v2] -hash = "sha1-adc442ce88f2717693b2da3010a1937d77ee522f" -other = "MPEG-4 part 2 Microsoft variant version 2" - -[encoder_msvideo1] -hash = "sha1-00f43ac0dc162bca10e0d98d6b70c0c6a902f66f" -other = "Microsoft Video-1" - -[encoder_png] -hash = "sha1-6715d4b82f5d9dfe3e53e30b402ffa1a6fbf30a5" -other = "PNG image" - -[encoder_qtrle] -hash = "sha1-31bf155cffaf6842ebc54084e4337ca08fdd9848" -other = "QuickTime Animation (RLE) video" - -[encoder_sgi] -hash = "sha1-f4510e237f7fc3c02caa728f9e500f4b069f9c11" -other = "SGI image" - -[encoder_tiff] -hash = "sha1-ed09d78c38e0b17ed695f35740c756dd7340eeac" -other = "TIFF image" - -[encoder_wmav1] -hash = "sha1-cd4a4c5eeac694b6699d55d0f9b477b3b50f18c7" -other = "Windows Media Audio 1" - -[encoder_wmav2] -hash = "sha1-eb2e5306cb33a702577ecfbdca0461862c66c053" -other = "Windows Media Audio 2" - -[encoder_wmv1] -hash = "sha1-f9b748554c590c36a56bcba2cd317196b7bdeddb" -other = "Windows Media Video 7" - -[encoder_wmv2] -hash = "sha1-5b21c87f5c6104797ead60b488b2948428f6b1b7" -other = "Windows Media Video 8" - -[encoder_xbm] -hash = "sha1-2dfc35881da62e9a1379d8238cf7839b24f79566" -other = "XBM (X BitMap) image" - -[error] -hash = "sha1-a7df8f8b5d754f226ac4cb320577fe692b33e483" -other = "Қате орын алды!" - -[errorConverter] -hash = "sha1-55ebddceddb8b044e33cc3893ec2eba7bbd9fcf9" -other = "Бейнені түрлендіру мүмкін болмады" - -[errorDragAndDropFile] -hash = "sha1-863cf1ad9c820d5b0c2006ceeaa29e25f81c1714" -other = "Барлық файлдар қосылмаған" - -[errorFFmpeg] -hash = "sha1-ccf0b95c0d1b392dc215258d917eb4e5d0b88ed0" -other = "бұл FFmpeg емес" - -[errorFFmpegVersion] -hash = "sha1-9a4148d42186b6b32cf83bef726e23022c53283f" -other = "FFmpeg нұсқасын анықтау мүмкін болмады" - -[errorFFplay] -hash = "sha1-988122112ac6002094e25518cfb5f0d606217298" -other = "бұл FFplay емес" - -[errorFFplayVersion] -hash = "sha1-cd60928d20d93210e103dd464306ab138bf1b184" -other = "FFplay нұсқасын анықтау мүмкін болмады" - -[errorFFprobe] -hash = "sha1-86d1b0b4c4ccd6a4f71e758fc67ce11aff4ba9b8" -other = "бұл FFprobe емес" - -[errorFFprobeVersion] -hash = "sha1-da7b37d7df3fafbd153665b13888413d52b24c17" -other = "FFprobe нұсқасын анықтау мүмкін болмады" - -[errorNoFilesAddedForConversion] -hash = "sha1-5cf1f65bef15cb0382e56be98f44c6abde56a314" -other = "Түрлендіруге арналған файлдар жоқ" - -[errorQueue] -hash = "sha1-72aecd9ad85642d84d62dbbf3cf70953c5f696c7" -other = "Қате" - -[errorSelectedEncoder] -hash = "sha1-33ed1aaf4cb3c2ee9d8f8c325b9b75d16ddf9979" -other = "Түрлендіргіш таңдалмаған" - -[errorSelectedFolderSave] -hash = "sha1-16f3ef93ee36813fdd79d8fb9bb7fc02acbb94a8" -other = "Сақтау қалтасы таңдалмаған!" - -[errorSelectedFormat] -hash = "sha1-cda92c56a1ef1aabc92bbfc405ede8ab13087e66" -other = "Файл кеңейтімі таңдалмаған" - -[exit] -hash = "sha1-c42457057d1ab7950cea00719cbe0b078891775f" -other = "Шығу" - -[ffmpegLGPL] -hash = "sha1-d395b16cc8f8eab98a8a970307c5b010ba22dde6" -other = "Бұл бағдарламалық құрал **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)** астында **FFmpeg** жобасының кітапханаларын пайдаланады." - -[ffmpegTrademark] -hash = "sha1-45f772b2eca5098cd6d31f2d1dc6edec1987a617" -other = "FFmpeg — **[FFmpeg](https://ffmpeg.org/about.html)** жобасын жасаушы **[Fabrice Bellard](http://bellard.org/)** сауда белгісі." - -[fileForConversionTitle] -hash = "sha1-96ac799e1086b31fd8f5f8d4c801829d6c853f08" -other = "Файл:" - -[fileQueueTitle] -hash = "sha1-aec93b16baeaf55fed871075c9494a460e4a91b8" -other = "Кезек" - -[formPreset] -hash = "sha1-7759891ba1ef9f7adc70defc7ac18fbf149c1a68" -other = "Алдын ала орнатылған" - -[gratitude] -hash = "sha1-51968fc38e53a9a11c861126c62404674fd6096f" -other = "Алғыс" - -[gratitudeText] -hash = "sha1-cb343e4d39ca31e6da6f72b9394cc915cb7d1258" -other = "Сізге баға жетпес және уақтылы көмектескеніңіз\n\r үшін шын жүректен алғыс айтамын:" - -[help] -hash = "sha1-6a45cef900c668effcb2ab10da05855c1fd10f6f" -other = "Анықтама" - -[helpFFplay] -hash = "sha1-ecc294b8b3d217ee1c2d63dc2f0253c3d1b3712c" -other = "FFplay ойнатқышының пернелері" - -[helpFFplayActivateFrameStepMode] -hash = "sha1-f47ede90932d69465f6197cb2a7cc4d1e3ab150e" -other = "Уақыт аралығын іске қосыңыз." - -[helpFFplayCycleVideoFiltersOrShowModes] -hash = "sha1-83bb702c777e4768cdc326a668d541c23ab759b7" -other = "Бейне сүзгілерінің немесе дисплей режимдерінің циклі." - -[helpFFplayDecreaseVolume] -hash = "sha1-de28db96a9c22be885ec5067a13f8f17fd3954bc" -other = "Дыбыс деңгейін төмендетіңіз." - -[helpFFplayDescription] -hash = "sha1-f5441f6aee76222c4120066575e80c2d177ac3c0" -other = "Сипаттама" - -[helpFFplayDoubleClickLeftMouseButton] -hash = "sha1-2657aa576055769952dfcde570fc9b4765d594ad" -other = "тінтуірдің сол жақ\nбатырмасын екі рет басу" - -[helpFFplayIncreaseVolume] -hash = "sha1-8ba7bde2d9a80f4a7cd122cf4973975698d3bd34" -other = "Дыбыс деңгейін арттыру." - -[helpFFplayKeyDown] -hash = "sha1-c5aefd2f8c6908a69b08fe4a2d235b1ae0113470" -other = "төмен" - -[helpFFplayKeyHoldS] -hash = "sha1-89c5dd8287c15b3f40db66e06b038c34a715f02f" -other = "ұстау S" - -[helpFFplayKeyLeft] -hash = "sha1-feb671890703fb0300a436744d34018bbc7ba13a" -other = "сол" - -[helpFFplayKeyRight] -hash = "sha1-a4f025d4bf7f90ee5bec6c48b2710bc9c5bbb267" -other = "құқық" - -[helpFFplayKeySpace] -hash = "sha1-a367ad00358ec44edc1d54a96df6f9114b0f8697" -other = "SPACE (пробел)" - -[helpFFplayKeyUp] -hash = "sha1-e4845aa8c0e100a80eaf65446c59085236fd2098" -other = "жоғары" - -[helpFFplayKeys] -hash = "sha1-0ad272ade8c568f394499f1492ecfab56e701e5d" -other = "Кілттер" - -[helpFFplayPause] -hash = "sha1-e83e107900fde0c39295f599c2cf8fba8d8cb604" -other = "Кідіртіңіз немесе жоғалтуды жалғастырыңыз." - -[helpFFplayQuit] -hash = "sha1-70785a2fd5d5a6519b7439f0d8cfcd7d54c5771d" -other = "Ойнатқышты жабыңыз." - -[helpFFplaySeekBForward10Minutes] -hash = "sha1-58ed63343376240f2596e447b5245c1805f35234" -other = "10 минутқа алға айналдырыңыз." - -[helpFFplaySeekBForward1Minute] -hash = "sha1-3fe46b8d5413b7fdc53ae9ed9427bcb1769ec74c" -other = "1 минутқа алға айналдырыңыз." - -[helpFFplaySeekBackward10Minutes] -hash = "sha1-927dffe9af72ffd40f46873b452a4c90627bccf8" -other = "10 минутқа артқа айналдырыңыз." - -[helpFFplaySeekBackward10Seconds] -hash = "sha1-e97615ecec0f8cf5647e8802bdda38dc2b0d809f" -other = "10 секундқа артқа айналдырыңыз." - -[helpFFplaySeekBackward1Minute] -hash = "sha1-5b19e280a0850122c8ebc80c622491bb09520e1a" -other = "1 минутқа артқа айналдырыңыз." - -[helpFFplaySeekForward10Seconds] -hash = "sha1-8d840251d4a1668edaea3515df197a8a79031ec3" -other = "10 секунд алға айналдырыңыз." - -[helpFFplayToggleFullScreen] -hash = "sha1-d32df02849258c5b02f15e5711f54ee6a8a75fd4" -other = "Толық экранға ауысу немесе толық экраннан шығу." - -[helpFFplayToggleMute] -hash = "sha1-4bdbb124fe8de3a8037c1e74719e9600b21b25ab" -other = "Дыбысты өшіріңіз немесе дыбысты қосыңыз." - -[inProgressQueue] -hash = "sha1-eff79c40e2100ae5fadf3a7d99336025edcca8b5" -other = "Орындалуда" - -[languageSelectionFormHead] -hash = "sha1-0ff5fa82cf684112660128cba1711297acf11003" -other = "Тілді ауыстыру" - -[languageSelectionHead] -hash = "sha1-daf1108fc10d3b1a908288d611f749b3cc651e4b" -other = "Тілді таңдаңыз" - -[licenseLink] -hash = "sha1-ea18ab849f0eea030d770da82c2a6b3484a7bd13" -other = "Лицензия туралы ақпарат" - -[licenseLinkOther] -hash = "sha1-359fff328717c05104e51a2d29f05bf1875d26b7" -other = "Бағдарламада пайдаланылатын басқа өнімдердің лицензиялары" - -[menuSettingsLanguage] -hash = "sha1-ed3f0e507a5b4ed0649d7c768fe0d47413d839ba" -other = "Тіл" - -[menuSettingsTheme] -hash = "sha1-553c45f1b84a92b08dc1f088c13f924cde95765e" -other = "Тақырып" - -[or] -hash = "sha1-30bb0333ca1583110e4ced513b5d2455b86f529b" -other = "немесе" - -[parameterCheckbox] -hash = "sha1-9e35221d454870996fd51d576249cf47d1784a3c" -other = "Опцияны қосу" - -[pathToFfmpeg] -hash = "sha1-fafc50f1db0f720fe83a96cd70a9e1ad824e96b6" -other = "FFmpeg жол:" - -[pathToFfplay] -hash = "sha1-5389830dd75a63aa8a5e41e8f07c5fadd8385398" -other = "FFplay жол:" - -[pathToFfprobe] -hash = "sha1-b872edc9633a2e81ef678dc46fe46a7e91732024" -other = "FFprobe жол:" - -[preset_fast] -hash = "sha1-935e1ac9d3c8ba4478326c909ba66662acb0540e" -other = "fast («faster» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_faster] -hash = "sha1-98620b73c896440c39ea6ec4b9b19d41301c9a7e" -other = "faster («veryfast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_medium] -hash = "sha1-f7d1c30135c22c2f07c247075c0df103bb3c3ea5" -other = "medium («fast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_placebo] -hash = "sha1-7bcff099104bb192881139e6404981bd426b3f91" -other = "placebo (ұсынылмайды)" - -[preset_slow] -hash = "sha1-681bf587275a45b48af49bb2ad8f0947919530e7" -other = "slow («medium» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_slower] -hash = "sha1-d1c692ee2b7643ae2c71a48bea880327a3c6b1e3" -other = "slower («slow» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_superfast] -hash = "sha1-41c39959e8f1547cc9259a5b459c4ccbf368cc23" -other = "superfast («ultrafast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_ultrafast] -hash = "sha1-dfed981573ac2046832f9a9450bc9388958753fa" -other = "ultrafast (жылдам, бірақ файлдың салмағы көп болады)" - -[preset_veryfast] -hash = "sha1-370b82509887d02d7a2ef9b110df4616b16123ce" -other = "veryfast («superfast» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[preset_veryslow] -hash = "sha1-d428bfa6deea9dd5c7c1f80ceba24e123ae96d0d" -other = "veryslow («slower» қарағанда баяуырақ, бірақ файлдың салмағы аз болады)" - -[programmLink] -hash = "sha1-18f9a3fad6aacefe1b05eed23122800b391ff5ca" -other = "Жобаның веб-сайты" - -[programmVersion] -hash = "sha1-fa2e4994a301bb24bc2a8fa166e5486ea95a7475" -other = "**Бағдарлама нұсқасы:** {{.Version}}" - -[queue] -hash = "sha1-aec93b16baeaf55fed871075c9494a460e4a91b8" -other = "Кезек" - -[save] -hash = "sha1-4864057d626a868fa60f999bed3191d61d045ddc" -other = "Сақтау" - -[selectEncoder] -hash = "sha1-88f3670b09758a3336057520a215058d61006abd" -other = "Кодировщик:" - -[selectFFPathTitle] -hash = "sha1-95581446a28d968ff1a027c623159a7eb08654cf" -other = "FFmpeg және FFprobe жолын көрсетіңіз" - -[selectFormat] -hash = "sha1-f3809b0b48886570cd4cf1d7099de6da5b6d4524" -other = "Файл кеңейтімі:" - -[settings] -hash = "sha1-7f17c7c62a7fd8d1a508481f4778688927734c2f" -other = "Параметрлер" - -[testFF] -hash = "sha1-f5b8ed88e9609963035d2235be0a79bbec619976" -other = "FFmpeg функционалдығы тексерілуде..." - -[themesNameDark] -hash = "sha1-bd16b234708a2515a9f2d0ca41fb11e7fe8a38a2" -other = "Қараңғы тақырып" - -[themesNameDefault] -hash = "sha1-469631cb165dcbbfea9e747056c25fbccb28c481" -other = "Әдепкі бойынша" - -[themesNameLight] -hash = "sha1-8080010c5e7d7edf56e89a99d8a2422898417845" -other = "Жеңіл тақырып" - -[titleDownloadLink] -hash = "sha1-92df86371f6c3a06ca1e4754f113142776a32d49" -other = "Сіз оны осы жерден жүктей аласыз" - -[total] -hash = "sha1-3b5143902e0c5c84459aedf918e17604d9735b94" -other = "Барлығы" - -[unzipRun] -hash = "sha1-c554dad13026668a1f6adf3171837c5d51bbac36" -other = "Орамнан шығарылуда..." - -[waitingQueue] -hash = "sha1-307429dd84150877080c4bbff2b340d1e7dadff2" -other = "Күту" diff --git a/languages/active.ru.toml b/languages/active.ru.toml deleted file mode 100644 index 0609a33..0000000 --- a/languages/active.ru.toml +++ /dev/null @@ -1,141 +0,0 @@ -AlsoUsedProgram = "Также в программе используется:" -about = "О программе" -aboutText = "Простенький интерфейс для консольной утилиты FFmpeg. \nНо я не являюсь автором самой утилиты FFmpeg." -addedFilesTitle = "Добавленные файлы" -autoClearAfterAddingToQueue = "Очищать после добавления в очередь" -buttonDownloadFFmpeg = "Скачать автоматически FFmpeg" -buttonForSelectedDirTitle = "Сохранить в папку:" -cancel = "Отмена" -changeFFPath = "FFmpeg, FFprobe и FFplay" -changeLanguage = "Поменять язык" -checkboxOverwriteOutputFilesTitle = "Разрешить перезаписать файл" -choose = "выбрать" -clearAll = "Очистить список" -completedQueue = "Готово" -converterVideoFilesSubmitTitle = "Конвертировать" -converterVideoFilesTitle = "Конвертер видео, аудио и картинок" -download = "Скачать" -downloadFFmpegFromSite = "Будет скачано с сайта:" -downloadRun = "Скачивается..." -dragAndDropFiles = "перетащить файлы" -encoderGroupAudio = "Аудио" -encoderGroupImage = "Картинки" -encoderGroupVideo = "Видео" -encoder_apng = "APNG image" -encoder_bmp = "BMP image" -encoder_flv = "FLV" -encoder_gif = "GIF image" -encoder_h264_nvenc = "H.264 с поддержкой NVIDIA" -encoder_libmp3lame = "libmp3lame MP3 (MPEG audio layer 3)" -encoder_libshine = "libshine MP3 (MPEG audio layer 3)" -encoder_libtwolame = "libtwolame MP2 (MPEG audio layer 2)" -encoder_libvpx = "libvpx VP8 (codec vp8)" -encoder_libvpx-vp9 = "libvpx VP9 (codec vp9)" -encoder_libwebp = "libwebp WebP image" -encoder_libwebp_anim = "libwebp_anim WebP image" -encoder_libx264 = "H.264 libx264" -encoder_libx265 = "H.265 libx265" -encoder_libxvid = "libxvidcore MPEG-4 part 2" -encoder_mjpeg = "MJPEG (Motion JPEG)" -encoder_mp2 = "MP2 (MPEG audio layer 2)" -encoder_mp2fixed = "MP2 fixed point (MPEG audio layer 2)" -encoder_mpeg1video = "MPEG-1" -encoder_mpeg2video = "MPEG-2" -encoder_mpeg4 = "MPEG-4 part 2" -encoder_msmpeg4 = "MPEG-4 part 2 Microsoft variant version 3" -encoder_msmpeg4v2 = "MPEG-4 part 2 Microsoft variant version 2" -encoder_msvideo1 = "Microsoft Video-1" -encoder_png = "PNG image" -encoder_qtrle = "QuickTime Animation (RLE) video" -encoder_sgi = "SGI image" -encoder_tiff = "TIFF image" -encoder_wmav1 = "Windows Media Audio 1" -encoder_wmav2 = "Windows Media Audio 2" -encoder_wmv1 = "Windows Media Video 7" -encoder_wmv2 = "Windows Media Video 8" -encoder_xbm = "XBM (X BitMap) image" -error = "Произошла ошибка!" -errorConverter = "не смогли отконвертировать видео" -errorDragAndDropFile = "Не все файлы добавились" -errorFFmpeg = "это не FFmpeg" -errorFFmpegVersion = "Не смогли определить версию FFmpeg" -errorFFplay = "это не FFplay" -errorFFplayVersion = "Не смогли определить версию FFplay" -errorFFprobe = "это не FFprobe" -errorFFprobeVersion = "Не смогли определить версию FFprobe" -errorNoFilesAddedForConversion = "Нет файлов для конвертации" -errorQueue = "Ошибка" -errorSelectedEncoder = "Конвертер не выбран" -errorSelectedFolderSave = "Папка для сохранения не выбрана!" -errorSelectedFormat = "Расширение файла не выбрана" -exit = "Выход" -ffmpegLGPL = "Это программное обеспечение использует библиотеки из проекта **FFmpeg** под **[LGPLv2.1](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)**." -ffmpegTrademark = "**FFmpeg** — торговая марка **[Fabrice Bellard](http://bellard.org/)** , создателя проекта **[FFmpeg](https://ffmpeg.org/about.html)**." -fileForConversionTitle = "Файл:" -fileQueueTitle = "Очередь" -formPreset = "Предустановка" -gratitude = "Благодарность" -gratitudeText = "Я искренне благодарю вас за неоценимую\n\rи своевременную помощь:" -help = "Справка" -helpFFplay = "Клавиши проигрывателя FFplay" -helpFFplayActivateFrameStepMode = "Активировать покадровый режим." -helpFFplayCycleVideoFiltersOrShowModes = "Цикл видеофильтров или режимов показа." -helpFFplayDecreaseVolume = "Уменьшить громкость." -helpFFplayDescription = "Описание" -helpFFplayDoubleClickLeftMouseButton = "двойной щелчок\nлевой кнопкой мыши" -helpFFplayIncreaseVolume = "Увеличить громкость." -helpFFplayKeyDown = "вниз" -helpFFplayKeyHoldS = "держать S" -helpFFplayKeyLeft = "лево" -helpFFplayKeyRight = "право" -helpFFplayKeySpace = "SPACE (пробел)" -helpFFplayKeyUp = "вверх" -helpFFplayKeys = "Клавиши" -helpFFplayPause = "Поставить на паузу или продолжить проигрывать." -helpFFplayQuit = "Закрыть проигрыватель." -helpFFplaySeekBForward10Minutes = "Перемотать вперёд на 10 минут." -helpFFplaySeekBForward1Minute = "Перемотать вперёд на 1 минуту." -helpFFplaySeekBackward10Minutes = "Перемотать назад на 10 минут." -helpFFplaySeekBackward10Seconds = "Перемотать назад на 10 секунд." -helpFFplaySeekBackward1Minute = "Перемотать назад на 1 минуту." -helpFFplaySeekForward10Seconds = "Перемотать вперёд на 10 секунд." -helpFFplayToggleFullScreen = "Переключиться на полный экран или выйти с полного экрана." -helpFFplayToggleMute = "Отключить звук или включить звук." -inProgressQueue = "Выполняется" -languageSelectionFormHead = "Переключить язык" -languageSelectionHead = "Выберите язык" -licenseLink = "Сведения о лицензии" -licenseLinkOther = "Лицензии от других продуктов, которые используются в программе" -menuSettingsLanguage = "Язык" -menuSettingsTheme = "Тема" -or = "или" -parameterCheckbox = "Включить параметр" -pathToFfmpeg = "Путь к FFmpeg:" -pathToFfplay = "Путь к FFplay:" -pathToFfprobe = "Путь к FFprobe:" -preset_fast = "fast (медленней чем faster, но будет файл и меньше весить)" -preset_faster = "faster (медленней чем veryfast, но будет файл и меньше весить)" -preset_medium = "medium (медленней чем fast, но будет файл и меньше весить)" -preset_placebo = "placebo (не рекомендуется)" -preset_slow = "slow (медленней чем medium, но будет файл и меньше весить)" -preset_slower = "slower (медленней чем slow, но будет файл и меньше весить)" -preset_superfast = "superfast (медленней чем ultrafast, но будет файл и меньше весить)" -preset_ultrafast = "ultrafast (быстро, но файл будет много весить)" -preset_veryfast = "veryfast (медленней чем superfast, но будет файл и меньше весить)" -preset_veryslow = "veryslow (медленней чем slower, но будет файл и меньше весить)" -programmLink = "Сайт проекта" -programmVersion = "**Версия программы:** {{.Version}}" -queue = "Очередь" -save = "Сохранить" -selectEncoder = "Кодировщик:" -selectFFPathTitle = "Укажите путь к FFmpeg и к FFprobe" -selectFormat = "Расширение файла:" -settings = "Настройки" -testFF = "Проверка FFmpeg на работоспособность..." -themesNameDark = "Тёмная" -themesNameDefault = "По умолчанию" -themesNameLight = "Светлая" -titleDownloadLink = "Скачать можно от сюда" -total = "Всего" -unzipRun = "Распаковывается..." -waitingQueue = "В очереди" diff --git a/localizer/repository.go b/localizer/repository.go deleted file mode 100644 index eed9051..0000000 --- a/localizer/repository.go +++ /dev/null @@ -1,26 +0,0 @@ -package localizer - -import ( - "git.kor-elf.net/kor-elf/gui-for-ffmpeg/setting" -) - -type RepositoryContract interface { - GetCode() string - Save(code string) setting.Setting -} - -type Repository struct { - settingRepository setting.RepositoryContract -} - -func NewRepository(settingRepository setting.RepositoryContract) *Repository { - return &Repository{settingRepository: settingRepository} -} - -func (r Repository) GetCode() string { - return r.settingRepository.GetValue("language") -} - -func (r Repository) Save(code string) setting.Setting { - return r.settingRepository.CreateOrUpdate("language", code) -} diff --git a/localizer/view.go b/localizer/view.go index c0e5af6..9233b6d 100644 --- a/localizer/view.go +++ b/localizer/view.go @@ -4,7 +4,6 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" ) type ViewContract interface { @@ -35,13 +34,11 @@ func (v View) LanguageSelection(funcSelected func(lang kernel.Lang)) { block.SetText(languages[i].Title) }) listView.OnSelected = func(id widget.ListItemID) { - _ = v.app.GetLocalizerService().SetCurrentLanguage(languages[id]) + _ = v.app.GetLocalizerService().SetCurrentLanguage(languages[id], true) funcSelected(languages[id]) } - messageHead := v.app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{ - MessageID: "languageSelectionHead", - }) + messageHead := v.app.GetLocalizerService().GetMessage("languageSelectionHead") v.app.GetWindow().SetContent(widget.NewCard(messageHead, "", listView)) } @@ -58,17 +55,15 @@ func LanguageSelectionForm(localizerService kernel.LocalizerContract, funcSelect func(i widget.ListItemID, o fyne.CanvasObject) { block := o.(*widget.Label) block.SetText(languages[i].Title) - if languages[i].Code == currentLanguage.Lang.Code { + if languages[i].Code == currentLanguage.Code { block.TextStyle = fyne.TextStyle{Bold: true} } }) listView.OnSelected = func(id widget.ListItemID) { - _ = localizerService.SetCurrentLanguage(languages[id]) + _ = localizerService.SetCurrentLanguage(languages[id], true) funcSelected(languages[id]) } - messageHead := localizerService.GetMessage(&i18n.LocalizeConfig{ - MessageID: "languageSelectionFormHead", - }) + messageHead := localizerService.GetMessage("languageSelectionFormHead") return widget.NewCard(messageHead, "", listView) } diff --git a/main.go b/main.go index 38c2315..1c67187 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,6 @@ import ( "git.kor-elf.net/kor-elf/gui-for-ffmpeg/menu" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/setting" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/theme" - "golang.org/x/text/language" ) var application kernel.AppContract @@ -25,12 +24,6 @@ func init() { Icon: iconResource, } - localizerService, err := kernel.NewLocalizer("languages", language.Russian) - if err != nil { - kernel.PanicErrorLang(err, appMetadata) - return - } - ffPathUtilities = &kernel.FFPathUtilities{FFmpeg: "", FFprobe: "", FFplay: ""} convertorService := kernel.NewService(ffPathUtilities) ffplayService := kernel.NewFFplay(ffPathUtilities) @@ -38,7 +31,6 @@ func init() { queue := kernel.NewQueueList() application = kernel.NewApp( appMetadata, - localizerService, queue, ffplayService, convertorService, @@ -71,12 +63,11 @@ func main() { themeRepository := theme.NewRepository(settingRepository) themeService := theme.NewTheme(application, themeRepository) - localizerRepository := localizer.NewRepository(settingRepository) menuView := menu.NewView(application) menuSettingView := menu.NewViewSetting(application, themeService) - mainMenu := handler.NewMenuHandler(application, convertorHandler, menuView, menuSettingView, localizerView, localizerRepository, themeService) + mainMenu := handler.NewMenuHandler(application, convertorHandler, menuView, menuSettingView, localizerView, themeService) - mainHandler := handler.NewMainHandler(application, convertorHandler, mainMenu, localizerRepository) + mainHandler := handler.NewMainHandler(application, convertorHandler, mainMenu) mainHandler.Start() application.GetWindow().SetMainMenu(mainMenu.GetMainMenu()) diff --git a/menu/view.go b/menu/view.go index 324b012..29864d8 100644 --- a/menu/view.go +++ b/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", diff --git a/menu/view_setting.go b/menu/view_setting.go index 045662e..02e7fbd 100644 --- a/menu/view_setting.go +++ b/menu/view_setting.go @@ -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)) } diff --git a/theme/theme.go b/theme/theme.go index 2c87899..1b4aa8b 100644 --- a/theme/theme.go +++ b/theme/theme.go @@ -4,7 +4,6 @@ import ( "fyne.io/fyne/v2" fyneTheme "fyne.io/fyne/v2/theme" "git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel" - "github.com/nicksnyder/go-i18n/v2/i18n" "image/color" ) @@ -92,25 +91,19 @@ func (inf themeInfo) GetVariant() fyne.ThemeVariant { func getThemes(localizer kernel.LocalizerContract) map[string]ThemeInfoContract { themesNameDefault := &themeInfo{ - name: "default", - title: localizer.GetMessage(&i18n.LocalizeConfig{ - MessageID: "themesNameDefault", - }), + name: "default", + title: localizer.GetMessage("themesNameDefault"), } themesNameLight := &themeInfo{ - name: "light", - title: localizer.GetMessage(&i18n.LocalizeConfig{ - MessageID: "themesNameLight", - }), + name: "light", + title: localizer.GetMessage("themesNameLight"), variant: fyneTheme.VariantLight, } themesNameDark := &themeInfo{ - name: "dark", - title: localizer.GetMessage(&i18n.LocalizeConfig{ - MessageID: "themesNameDark", - }), + name: "dark", + title: localizer.GetMessage("themesNameDark"), variant: fyneTheme.VariantDark, }