Add plural keys for albums and tracks
This commit is contained in:
committed by
Drew Weymouth
parent
bb8d677aab
commit
097310504c
@@ -277,5 +277,19 @@
|
|||||||
"few": "{{.trackCount}} композиции добавлены в список воспроизведения",
|
"few": "{{.trackCount}} композиции добавлены в список воспроизведения",
|
||||||
"many": "{{.trackCount}} композиций добавлены в список воспроизведения",
|
"many": "{{.trackCount}} композиций добавлены в список воспроизведения",
|
||||||
"other": "{{.trackCount}} композиций добавлены в список воспроизведения"
|
"other": "{{.trackCount}} композиций добавлены в список воспроизведения"
|
||||||
|
},
|
||||||
|
|
||||||
|
"{{.trackCount}} tracks": {
|
||||||
|
"one": "{{.trackCount}} композиция",
|
||||||
|
"few": "{{.trackCount}} композиции",
|
||||||
|
"many": "{{.trackCount}} композиций",
|
||||||
|
"other": "{{.trackCount}} композиций"
|
||||||
|
},
|
||||||
|
|
||||||
|
"{{.albumsCount}} albums": {
|
||||||
|
"one": "{{.albumsCount}} альбом",
|
||||||
|
"few": "{{.albumsCount}} альбома",
|
||||||
|
"many": "{{.albumsCount}} альбомов",
|
||||||
|
"other": "{{.albumsCount}} альбомов"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package browsing
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/dweymouth/supersonic/backend"
|
"github.com/dweymouth/supersonic/backend"
|
||||||
@@ -396,11 +397,14 @@ func formatMiscLabelStr(a *mediaprovider.AlbumWithTracks) string {
|
|||||||
if a.TrackCount == 1 {
|
if a.TrackCount == 1 {
|
||||||
tracks = lang.L("track")
|
tracks = lang.L("track")
|
||||||
}
|
}
|
||||||
|
fallbackTracksMsg := fmt.Sprintf("%d %s", a.TrackCount, tracks)
|
||||||
|
tracksMsg := lang.LocalizePluralKey("{{.trackCount}} tracks",
|
||||||
|
fallbackTracksMsg, a.TrackCount, map[string]string{"trackCount": strconv.Itoa(a.TrackCount)})
|
||||||
yearStr := util.FormatItemDate(a.Date)
|
yearStr := util.FormatItemDate(a.Date)
|
||||||
if y := a.ReissueDate.Year; y != nil && *y > a.YearOrZero() {
|
if y := a.ReissueDate.Year; y != nil && *y > a.YearOrZero() {
|
||||||
yearStr += fmt.Sprintf(" (%s %s)", lang.L("reissued"), util.FormatItemDate(a.ReissueDate))
|
yearStr += fmt.Sprintf(" (%s %s)", lang.L("reissued"), util.FormatItemDate(a.ReissueDate))
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%s · %d %s · %s%s", yearStr, a.TrackCount, tracks, discs, util.SecondsToTimeString(float64(a.Duration)))
|
return fmt.Sprintf("%s · %s · %s%s", yearStr, tracksMsg, discs, util.SecondsToTimeString(float64(a.Duration)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *albumPageState) Restore() Page {
|
func (s *albumPageState) Restore() Page {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package browsing
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/dweymouth/supersonic/backend"
|
"github.com/dweymouth/supersonic/backend"
|
||||||
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
"github.com/dweymouth/supersonic/backend/mediaprovider"
|
||||||
@@ -389,11 +390,14 @@ func buildArtistGridViewModel(artists []*mediaprovider.Artist) []widgets.GridVie
|
|||||||
if ar.AlbumCount == 1 {
|
if ar.AlbumCount == 1 {
|
||||||
albums = lang.L("album")
|
albums = lang.L("album")
|
||||||
}
|
}
|
||||||
|
fallbackAlbumsMsg := fmt.Sprintf("%d %s", ar.AlbumCount, albums)
|
||||||
|
albumsMsg := lang.LocalizePluralKey("{{.albumsCount}} albums",
|
||||||
|
fallbackAlbumsMsg, ar.AlbumCount, map[string]string{"albumsCount": strconv.Itoa(ar.AlbumCount)})
|
||||||
model = append(model, widgets.GridViewItemModel{
|
model = append(model, widgets.GridViewItemModel{
|
||||||
ID: ar.ID,
|
ID: ar.ID,
|
||||||
CoverArtID: ar.CoverArtID,
|
CoverArtID: ar.CoverArtID,
|
||||||
Name: ar.Name,
|
Name: ar.Name,
|
||||||
Secondary: []string{fmt.Sprintf("%d %s", ar.AlbumCount, albums)},
|
Secondary: []string{albumsMsg},
|
||||||
CanFavorite: true,
|
CanFavorite: true,
|
||||||
IsFavorite: ar.Favorite,
|
IsFavorite: ar.Favorite,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package browsing
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/deluan/sanitize"
|
"github.com/deluan/sanitize"
|
||||||
@@ -510,7 +511,10 @@ func (a *PlaylistPageHeader) formatPlaylistTrackTimeStr(p *mediaprovider.Playlis
|
|||||||
} else {
|
} else {
|
||||||
tracks = lang.L("tracks")
|
tracks = lang.L("tracks")
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("%d %s, %s", p.TrackCount, tracks, util.SecondsToTimeString(float64(p.Duration)))
|
fallbackTracksMsg := fmt.Sprintf("%d %s", p.TrackCount, tracks)
|
||||||
|
tracksMsg := lang.LocalizePluralKey("{{.trackCount}} tracks",
|
||||||
|
fallbackTracksMsg, p.TrackCount, map[string]string{"trackCount": strconv.Itoa(p.TrackCount)})
|
||||||
|
return fmt.Sprintf("%s, %s", tracksMsg, util.SecondsToTimeString(float64(p.Duration)))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *playlistPageState) Restore() Page {
|
func (s *playlistPageState) Restore() Page {
|
||||||
|
|||||||
@@ -206,11 +206,14 @@ func createPlaylistGridViewModel(playlists []*mediaprovider.Playlist) []widgets.
|
|||||||
} else {
|
} else {
|
||||||
tracks = lang.L("tracks")
|
tracks = lang.L("tracks")
|
||||||
}
|
}
|
||||||
|
fallbackTracksMsg := fmt.Sprintf("%d %s", pl.TrackCount, tracks)
|
||||||
|
tracksMsg := lang.LocalizePluralKey("{{.trackCount}} tracks",
|
||||||
|
fallbackTracksMsg, pl.TrackCount, map[string]string{"trackCount": strconv.Itoa(pl.TrackCount)})
|
||||||
return widgets.GridViewItemModel{
|
return widgets.GridViewItemModel{
|
||||||
Name: pl.Name,
|
Name: pl.Name,
|
||||||
ID: pl.ID,
|
ID: pl.ID,
|
||||||
CoverArtID: pl.CoverArtID,
|
CoverArtID: pl.CoverArtID,
|
||||||
Secondary: []string{fmt.Sprintf("%d %s", pl.TrackCount, tracks)},
|
Secondary: []string{tracksMsg},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,11 +98,14 @@ func (g gridViewArtistIterator) NextN(n int) []GridViewItemModel {
|
|||||||
if ar.AlbumCount == 1 {
|
if ar.AlbumCount == 1 {
|
||||||
albumsLabel = lang.L("album")
|
albumsLabel = lang.L("album")
|
||||||
}
|
}
|
||||||
|
fallbackAlbumsMsg := fmt.Sprintf("%d %s", ar.AlbumCount, albumsLabel)
|
||||||
|
albumsMsg := lang.LocalizePluralKey("{{.albumsCount}} albums",
|
||||||
|
fallbackAlbumsMsg, ar.AlbumCount, map[string]string{"albumsCount": strconv.Itoa(ar.AlbumCount)})
|
||||||
return GridViewItemModel{
|
return GridViewItemModel{
|
||||||
Name: ar.Name,
|
Name: ar.Name,
|
||||||
ID: ar.ID,
|
ID: ar.ID,
|
||||||
CoverArtID: ar.CoverArtID,
|
CoverArtID: ar.CoverArtID,
|
||||||
Secondary: []string{fmt.Sprintf("%d %s", ar.AlbumCount, albumsLabel)},
|
Secondary: []string{albumsMsg},
|
||||||
CanFavorite: true,
|
CanFavorite: true,
|
||||||
IsFavorite: ar.Favorite,
|
IsFavorite: ar.Favorite,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user