From 1096e4434bbe5b85597933633af8f154e656965a Mon Sep 17 00:00:00 2001 From: Drew Weymouth Date: Sun, 21 Jul 2024 08:45:46 -0700 Subject: [PATCH] add more translation entries --- res/translations/en.json | 34 ++++++++++++++++++++++---- ui/dialogs/selectplaylist.go | 6 ++--- ui/dialogs/settingsdialog.go | 27 +++++++++++---------- ui/dialogs/trackinfodialog.go | 45 ++++++++++++++++++----------------- 4 files changed, 70 insertions(+), 42 deletions(-) diff --git a/res/translations/en.json b/res/translations/en.json index 9169def..494fd70 100644 --- a/res/translations/en.json +++ b/res/translations/en.json @@ -6,27 +6,43 @@ "Album gain": "Album gain", "Album info not available": "Album info not available", "Album peak": "Album peak", + "Albums": "Albums", "All Tracks": "All Tracks", "Alt. URL": "Alt. URL", "Artist": "Artist", "Artists": "Artists", "Artist biography not available.": "Artist biography not available.", + "Bit rate": "Bit rate", + "BPM": "BPM", "Cancel": "Cancel", "Close": "Close", + "Close to system tray": "Close to system tray", + "Comment": "Comment", + "Composer": "Composer", "Configure your music server to add radio stations": "Configure your music server to add radio stations", + "Content type": "Content type", "Create new playlist": "Create new playlist", "Delete Playlist": "Delete Playlist", "Description": "Description", + "Disable server transcoding": "Disable server transcoding", + "Disc number": "Disc number", "Discography": "Discography", "Download": "Download", "Duration": "Duration", "Edit": "Edit", "Edit Playlist": "Edit Playlist", + "Enable system tray": "Enable system tray", + "Enabled": "Enabled", "Enter": "Enter", + "Equalizer": "Equalizer", "Favorites": "Favorites", + "File path": "File path", + "File size": "File size", + "General": "General", "Genre": "Genre", "Genres": "Genres", "Internet Radio Stations": "Internet Radio Stations", + "Last played": "Last played", "Login to Server": "Login to Server", "Lyrics": "Lyrics", "My Server": "My Server", @@ -37,33 +53,43 @@ "(optional)": "(optional)", "Password": "Password", "Play": "Play", - "Playlist": "Playlist", - "Playlists": "Playlists", - "playlist by": "playlist by", + "Play count": "Play count", "Play next": "Play next", "Play Queue": "Play Queue", "Play random": "Play random", + "Playlist": "Playlist", + "Playlists": "Playlists", + "playlist by": "playlist by", "Private": "Private", "Public": "Public", "Related": "Related", "Remove from playlist": "Remove from playlist", + "Restart required": "Restart required", + "Save play queue on exit": "Save play queue on exit", "Search page": "Search page", "Search playlists or new playlist name": "Search playlists or new playlist name", + "Send playback statistics to server": "Send playback statistics to server", "Server": "Server", "Server Type": "Server Type", "Share": "Share", "Show info": "Show info", + "Show notification on track change": "Show notification on track change", + "Show year in album grid cards": "Show year in album grid cards", "Shuffle": "Shuffle", "Similar artists": "Similar artists", "Skip duplicate tracks": "Skip duplicate tracks", + "Startup page": "Startup page", + "Theme": "Theme", "Title": "Title", "Top Tracks": "Top Tracks", "Track": "Track", "track": "track", - "tracks": "tracks", "Track count": "Track count", "Track gain": "Track gain", + "Track Info": "Track Info", + "Track number": "Track number", "Track peak": "Track peak", + "tracks": "tracks", "URL": "URL", "Use legacy authentication": "Use legacy authentication", "Username": "Username", diff --git a/ui/dialogs/selectplaylist.go b/ui/dialogs/selectplaylist.go index e294e3b..c2957ce 100644 --- a/ui/dialogs/selectplaylist.go +++ b/ui/dialogs/selectplaylist.go @@ -32,12 +32,12 @@ func NewSelectPlaylistDialog(mp mediaprovider.MediaProvider, im util.ImageFetche } sd := NewSearchDialog( im, - "Add to playlist", - "Cancel", + lang.L("Add to playlist"), + lang.L("Cancel"), sp.onSearched, ) sd.ActionItem = widget.NewCheckWithData(lang.L("Skip duplicate tracks"), binding.BindBool(&sp.SkipDuplicates)) - sd.PlaceholderText = "Search playlists or new playlist name" + sd.PlaceholderText = lang.L("Search playlists or new playlist name") sp.SearchDialog = sd return sp } diff --git a/ui/dialogs/settingsdialog.go b/ui/dialogs/settingsdialog.go index fb33ed6..88d3880 100644 --- a/ui/dialogs/settingsdialog.go +++ b/ui/dialogs/settingsdialog.go @@ -19,6 +19,7 @@ import ( "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/data/binding" "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/storage" "fyne.io/fyne/v2/theme" @@ -138,12 +139,12 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. if startupPage.Selected == "" { startupPage.SetSelectedIndex(0) } - closeToTray := widget.NewCheckWithData("Close to system tray", + closeToTray := widget.NewCheckWithData(lang.L("Close to system tray"), binding.BindBool(&s.config.Application.CloseToSystemTray)) if !s.config.Application.EnableSystemTray { closeToTray.Disable() } - systemTrayEnable := widget.NewCheck("Enable system tray", func(val bool) { + systemTrayEnable := widget.NewCheck(lang.L("Enable system tray"), func(val bool) { s.config.Application.EnableSystemTray = val // TODO: see https://github.com/fyne-io/fyne/issues/3788 // Once Fyne supports removing/hiding an existing system tray menu, @@ -170,7 +171,7 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. if s.config.Application.SaveQueueToServer { saveToServer.Selected = "To server" } - saveQueue := widget.NewCheck("Save play queue on exit", func(save bool) { + saveQueue := widget.NewCheck(lang.L("Save play queue on exit"), func(save bool) { s.config.Application.SavePlayQueue = save if save && canSaveQueueToServer { saveToServer.Enable() @@ -184,9 +185,9 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. saveQueueHBox.Add(saveToServer) } - trackNotif := widget.NewCheckWithData("Show notification on track change", + trackNotif := widget.NewCheckWithData(lang.L("Show notification on track change"), binding.BindBool(&s.config.Application.ShowTrackChangeNotification)) - albumGridYears := widget.NewCheck("Show year in album grid cards", func(b bool) { + albumGridYears := widget.NewCheck(lang.L("Show year in album grid cards"), func(b bool) { s.config.AlbumsPage.ShowYears = b s.config.FavoritesPage.ShowAlbumYears = b if s.OnPageNeedsRefresh != nil { @@ -256,7 +257,7 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. durationEnabled.Disable() } - scrobbleEnabled := widget.NewCheck("Send playback statistics to server", func(checked bool) { + scrobbleEnabled := widget.NewCheck(lang.L("Send playback statistics to server"), func(checked bool) { s.config.Scrobbling.Enabled = checked if !checked { percentEntry.Disable() @@ -274,13 +275,13 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. }) scrobbleEnabled.Checked = s.config.Scrobbling.Enabled - return container.NewTabItem("General", container.NewVBox( - container.NewBorder(nil, nil, widget.NewLabel("Theme"), /*left*/ + return container.NewTabItem(lang.L("General"), container.NewVBox( + container.NewBorder(nil, nil, widget.NewLabel(lang.L("Theme")), /*left*/ container.NewHBox(widget.NewLabel("Mode"), themeModeSelect, util.NewHSpace(5)), // right themeFileSelect, // center ), container.NewHBox( - widget.NewLabel("Startup page"), container.NewGridWithColumns(2, startupPage), + widget.NewLabel(lang.L("Startup page")), container.NewGridWithColumns(2, startupPage), ), container.NewHBox(systemTrayEnable, closeToTray), saveQueueHBox, @@ -304,7 +305,7 @@ func (s *SettingsDialog) createGeneralTab(canSaveQueueToServer bool) *container. } func (s *SettingsDialog) createPlaybackTab(isLocalPlayer, isReplayGainPlayer bool) *container.TabItem { - disableTranscode := widget.NewCheckWithData("Disable server transcoding", binding.BindBool(&s.config.Transcoding.ForceRawFile)) + disableTranscode := widget.NewCheckWithData(lang.L("Disable server transcoding"), binding.BindBool(&s.config.Transcoding.ForceRawFile)) deviceList := make([]string, len(s.audioDevices)) var selIndex int for i, dev := range s.audioDevices { @@ -411,7 +412,7 @@ func (s *SettingsDialog) createPlaybackTab(isLocalPlayer, isReplayGainPlayer boo } func (s *SettingsDialog) createEqualizerTab(eqBands []string) *container.TabItem { - enabled := widget.NewCheck("Enabled", func(b bool) { + enabled := widget.NewCheck(lang.L("Enabled"), func(b bool) { s.config.LocalPlayback.EqualizerEnabled = b if s.OnEqualizerSettingsChanged != nil { s.OnEqualizerSettingsChanged() @@ -435,7 +436,7 @@ func (s *SettingsDialog) createEqualizerTab(eqBands []string) *container.TabItem debouncer() } cont := container.NewBorder(enabled, nil, nil, nil, geq) - return container.NewTabItem("Equalizer", cont) + return container.NewTabItem(lang.L("Equalizer"), cont) } func (s *SettingsDialog) createExperimentalTab(window fyne.Window) *container.TabItem { @@ -524,7 +525,7 @@ func (s *SettingsDialog) setRestartRequired() { if ts.Text != "" { return } - ts.Text = "Restart required" + ts.Text = lang.L("Restart required") ts.Style.ColorName = theme.ColorNameError s.promptText.Refresh() } diff --git a/ui/dialogs/trackinfodialog.go b/ui/dialogs/trackinfodialog.go index 156165b..49f390f 100644 --- a/ui/dialogs/trackinfodialog.go +++ b/ui/dialogs/trackinfodialog.go @@ -7,6 +7,7 @@ import ( "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/lang" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" @@ -36,7 +37,7 @@ func NewTrackInfoDialog(track *mediaprovider.Track) *TrackInfoDialog { func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { c := container.New(layout.NewFormLayout()) - addFormRow(c, "Title", t.track.Title) + addFormRow(c, lang.L("Title"), t.track.Title) c.Add(newFormText("Album", true)) album := widget.NewHyperlink(t.track.Album, nil) @@ -47,7 +48,7 @@ func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { } c.Add(album) - c.Add(newFormText("Artists", true)) + c.Add(newFormText(lang.L("Artists"), true)) artists := widgets.NewMultiHyperlink() artists.BuildSegments(t.track.ArtistNames, t.track.ArtistIDs) artists.OnTapped = func(id string) { @@ -58,7 +59,7 @@ func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { c.Add(artists) if len(t.track.ComposerNames) > 0 { - c.Add(newFormText("Composers", true)) + c.Add(newFormText(lang.L("Composers"), true)) composers := widgets.NewMultiHyperlink() composers.BuildSegments(t.track.ComposerNames, t.track.ComposerIDs) artists.OnTapped = func(id string) { @@ -70,7 +71,7 @@ func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { } if len(t.track.Genres) > 0 { - c.Add(newFormText("Genres", true)) + c.Add(newFormText(lang.L("Genres"), true)) genres := widgets.NewMultiHyperlink() genres.BuildSegments(t.track.Genres, t.track.Genres) genres.OnTapped = func(g string) { @@ -81,7 +82,7 @@ func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { c.Add(genres) } - addFormRow(c, "Duration", util.SecondsToTimeString(float64(t.track.Duration))) + addFormRow(c, lang.L("Duration"), util.SecondsToTimeString(float64(t.track.Duration))) copyBtn := widgets.NewIconButton(theme.ContentCopyIcon(), func() { if t.OnCopyFilePath != nil { @@ -91,39 +92,39 @@ func (t *TrackInfoDialog) CreateRenderer() fyne.WidgetRenderer { copyBtn.IconSize = widgets.IconButtonSizeSmaller btnCtr := container.New(layout.NewCustomPaddedLayout(8, 0, 10, 0), container.NewVBox(copyBtn, layout.NewSpacer())) - c.Add(container.NewHBox(btnCtr, newFormText("File path", true))) + c.Add(container.NewHBox(btnCtr, newFormText(lang.L("File path"), true))) c.Add(newFormText(t.track.FilePath, false)) - addFormRow(c, "Comment", t.track.Comment) - addFormRow(c, "Year", strconv.Itoa(t.track.Year)) - addFormRow(c, "Track number", strconv.Itoa(t.track.TrackNumber)) - addFormRow(c, "Disc number", strconv.Itoa(t.track.DiscNumber)) + addFormRow(c, lang.L("Comment"), t.track.Comment) + addFormRow(c, lang.L("Year"), strconv.Itoa(t.track.Year)) + addFormRow(c, lang.L("Track number"), strconv.Itoa(t.track.TrackNumber)) + addFormRow(c, lang.L("Disc number"), strconv.Itoa(t.track.DiscNumber)) if t.track.BPM > 0 { - addFormRow(c, "BPM", strconv.Itoa(t.track.BPM)) + addFormRow(c, lang.L("BPM"), strconv.Itoa(t.track.BPM)) } - addFormRow(c, "Content type", t.track.ContentType) - addFormRow(c, "Bit rate", fmt.Sprintf("%d kbps", t.track.BitRate)) - addFormRow(c, "File size", util.BytesToSizeString(t.track.Size)) - addFormRow(c, "Play count", strconv.Itoa(t.track.PlayCount)) + addFormRow(c, lang.L("Content type"), t.track.ContentType) + addFormRow(c, lang.L("Bit rate"), fmt.Sprintf("%d kbps", t.track.BitRate)) + addFormRow(c, lang.L("File size"), util.BytesToSizeString(t.track.Size)) + addFormRow(c, lang.L("Play count"), strconv.Itoa(t.track.PlayCount)) if !t.track.LastPlayed.IsZero() { - addFormRow(c, "Last played", t.track.LastPlayed.Format(time.RFC1123)) + addFormRow(c, lang.L("Last played"), t.track.LastPlayed.Format(time.RFC1123)) } if t.track.ReplayGain.TrackPeak > 0 { - addFormRow(c, "Track gain", fmt.Sprintf("%0.2f dB", t.track.ReplayGain.TrackGain)) - addFormRow(c, "Track peak", fmt.Sprintf("%0.6f", t.track.ReplayGain.TrackPeak)) + addFormRow(c, lang.L("Track gain"), fmt.Sprintf("%0.2f dB", t.track.ReplayGain.TrackGain)) + addFormRow(c, lang.L("Track peak"), fmt.Sprintf("%0.6f", t.track.ReplayGain.TrackPeak)) } if t.track.ReplayGain.AlbumPeak > 0 { - addFormRow(c, "Album gain", fmt.Sprintf("%0.2f dB", t.track.ReplayGain.AlbumGain)) - addFormRow(c, "Album peak", fmt.Sprintf("%0.6f", t.track.ReplayGain.AlbumPeak)) + addFormRow(c, lang.L("Album gain"), fmt.Sprintf("%0.2f dB", t.track.ReplayGain.AlbumGain)) + addFormRow(c, lang.L("Album peak"), fmt.Sprintf("%0.6f", t.track.ReplayGain.AlbumPeak)) } - title := widget.NewRichTextWithText("Track Info") + title := widget.NewRichTextWithText(lang.L("Track Info")) title.Segments[0].(*widget.TextSegment).Style.TextStyle.Bold = true - dismissBtn := widget.NewButton("Close", func() { + dismissBtn := widget.NewButton(lang.L("Close"), func() { if t.OnDismiss != nil { t.OnDismiss() }