From fd851714ae81b8b24f0e4cbb4a4e8d7063c4f431 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Wed, 1 Nov 2023 03:32:28 -0700 Subject: [PATCH] Add missing translation keys to list filters --- src/i18n/locales/en.json | 9 ++ .../album-artist-list-header-filters.tsx | 55 +++++-- .../components/genre-list-header-filters.tsx | 17 +- ...aylist-detail-song-list-header-filters.tsx | 145 ++++++++++++++---- .../playlist-list-header-filters.tsx | 55 +++++-- .../components/song-list-header-filters.tsx | 139 ++++++++++++++--- 6 files changed, 347 insertions(+), 73 deletions(-) diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 0131a713..1d1dc3ad 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -155,11 +155,15 @@ "systemFontError": "an error occurred when trying to get system fonts" }, "filter": { + "album": "$t(entity.album_one)", "albumArtist": "$t(entity.albumArtist_one)", + "albumCount": "$t(entity.album_other) count", "artist": "$t(entity.artist_one)", "biography": "biography", "bitrate": "bitrate", "bpm": "bpm", + "channels": "$t(common.channel_other)", + "comment": "comment", "communityRating": "community rating", "criticRating": "critic rating", "dateAdded": "date added", @@ -167,20 +171,25 @@ "duration": "duration", "favorited": "favorited", "fromYear": "from year", + "genre": "$t(entity.genre_one)", + "id": "id", "isCompilation": "is compilation", "isFavorited": "is favorited", + "isPublic": "is public", "isRated": "is rated", "isRecentlyPlayed": "is recently played", "lastPlayed": "last played", "mostPlayed": "most played", "name": "name", "note": "note", + "owner": "$t(common.owner)", "path": "path", "playCount": "play count", "random": "random", "rating": "rating", "recentlyAdded": "recently added", "recentlyPlayed": "recently played", + "recentlyUpdated": "recently updated", "releaseDate": "release date", "releaseYear": "release year", "search": "search", diff --git a/src/renderer/features/artists/components/album-artist-list-header-filters.tsx b/src/renderer/features/artists/components/album-artist-list-header-filters.tsx index 6b551f29..5d93d862 100644 --- a/src/renderer/features/artists/components/album-artist-list-header-filters.tsx +++ b/src/renderer/features/artists/components/album-artist-list-header-filters.tsx @@ -22,16 +22,33 @@ import { useListStoreByKey, } from '/@/renderer/store'; import { ListDisplayType, ServerType, TableColumn } from '/@/renderer/types'; +import i18n from '/@/i18n/i18n'; const FILTERS = { jellyfin: [ - { defaultOrder: SortOrder.ASC, name: 'Album', value: AlbumArtistListSort.ALBUM }, - { defaultOrder: SortOrder.DESC, name: 'Duration', value: AlbumArtistListSort.DURATION }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: AlbumArtistListSort.NAME }, - { defaultOrder: SortOrder.ASC, name: 'Random', value: AlbumArtistListSort.RANDOM }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.album', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.ALBUM, + }, { defaultOrder: SortOrder.DESC, - name: 'Recently Added', + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.DURATION, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.NAME, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.random', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.RANDOM, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.recentlyAdded', { postProcess: 'titleCase' }), value: AlbumArtistListSort.RECENTLY_ADDED, }, // { defaultOrder: SortOrder.DESC, name: 'Release Date', value: AlbumArtistListSort.RELEASE_DATE }, @@ -39,18 +56,34 @@ const FILTERS = { navidrome: [ { defaultOrder: SortOrder.DESC, - name: 'Album Count', + name: i18n.t('filter.albumCount', { postProcess: 'titleCase' }), value: AlbumArtistListSort.ALBUM_COUNT, }, - { defaultOrder: SortOrder.DESC, name: 'Favorited', value: AlbumArtistListSort.FAVORITED }, { defaultOrder: SortOrder.DESC, - name: 'Most Played', + name: i18n.t('filter.isFavorited', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.FAVORITED, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.mostPlayed', { postProcess: 'titleCase' }), value: AlbumArtistListSort.PLAY_COUNT, }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: AlbumArtistListSort.NAME }, - { defaultOrder: SortOrder.DESC, name: 'Rating', value: AlbumArtistListSort.RATING }, - { defaultOrder: SortOrder.DESC, name: 'Song Count', value: AlbumArtistListSort.SONG_COUNT }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.NAME, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.rating', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.RATING, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.songCount', { postProcess: 'titleCase' }), + value: AlbumArtistListSort.SONG_COUNT, + }, ], }; diff --git a/src/renderer/features/genres/components/genre-list-header-filters.tsx b/src/renderer/features/genres/components/genre-list-header-filters.tsx index 96c5bccd..1bf92863 100644 --- a/src/renderer/features/genres/components/genre-list-header-filters.tsx +++ b/src/renderer/features/genres/components/genre-list-header-filters.tsx @@ -20,10 +20,23 @@ import { useListStoreByKey, } from '/@/renderer/store'; import { ListDisplayType, ServerType, TableColumn } from '/@/renderer/types'; +import i18n from '/@/i18n/i18n'; const FILTERS = { - jellyfin: [{ defaultOrder: SortOrder.ASC, name: 'Name', value: GenreListSort.NAME }], - navidrome: [{ defaultOrder: SortOrder.ASC, name: 'Name', value: GenreListSort.NAME }], + jellyfin: [ + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: GenreListSort.NAME, + }, + ], + navidrome: [ + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: GenreListSort.NAME, + }, + ], }; interface GenreListHeaderFiltersProps { diff --git a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx index c438a038..83d4311a 100644 --- a/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx +++ b/src/renderer/features/playlists/components/playlist-detail-song-list-header-filters.tsx @@ -47,49 +47,142 @@ import { openUpdatePlaylistModal } from '/@/renderer/features/playlists/componen import { useDeletePlaylist } from '/@/renderer/features/playlists/mutations/delete-playlist-mutation'; import { AppRoute } from '/@/renderer/router/routes'; import { OrderToggleButton } from '/@/renderer/features/shared'; +import i18n from '/@/i18n/i18n'; const FILTERS = { jellyfin: [ - { defaultOrder: SortOrder.ASC, name: 'Album', value: SongListSort.ALBUM }, - { defaultOrder: SortOrder.ASC, name: 'Album Artist', value: SongListSort.ALBUM_ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Artist', value: SongListSort.ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Duration', value: SongListSort.DURATION }, - { defaultOrder: SortOrder.ASC, name: 'Most Played', value: SongListSort.PLAY_COUNT }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: SongListSort.NAME }, - { defaultOrder: SortOrder.ASC, name: 'Random', value: SongListSort.RANDOM }, - { defaultOrder: SortOrder.ASC, name: 'Recently Added', value: SongListSort.RECENTLY_ADDED }, { defaultOrder: SortOrder.ASC, - name: 'Recently Played', + name: i18n.t('filter.album', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.albumArtist', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM_ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.artist', { postProcess: 'titleCase' }), + value: SongListSort.ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: SongListSort.DURATION, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.PLAY_COUNT, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: SongListSort.NAME, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.random', { postProcess: 'titleCase' }), + value: SongListSort.RANDOM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.recentlyAdded', { postProcess: 'titleCase' }), + value: SongListSort.RECENTLY_ADDED, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.recentlyPlayed', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_PLAYED, }, - { defaultOrder: SortOrder.ASC, name: 'Release Date', value: SongListSort.RELEASE_DATE }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.releaseDate', { postProcess: 'titleCase' }), + value: SongListSort.RELEASE_DATE, + }, ], navidrome: [ - { defaultOrder: SortOrder.ASC, name: 'Album', value: SongListSort.ALBUM }, - { defaultOrder: SortOrder.ASC, name: 'Album Artist', value: SongListSort.ALBUM_ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Artist', value: SongListSort.ARTIST }, - { defaultOrder: SortOrder.DESC, name: 'BPM', value: SongListSort.BPM }, - { defaultOrder: SortOrder.ASC, name: 'Channels', value: SongListSort.CHANNELS }, - { defaultOrder: SortOrder.ASC, name: 'Comment', value: SongListSort.COMMENT }, - { defaultOrder: SortOrder.DESC, name: 'Duration', value: SongListSort.DURATION }, - { defaultOrder: SortOrder.DESC, name: 'Favorited', value: SongListSort.FAVORITED }, - { defaultOrder: SortOrder.ASC, name: 'Genre', value: SongListSort.GENRE }, - { defaultOrder: SortOrder.ASC, name: 'Id', value: SongListSort.ID }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: SongListSort.NAME }, - { defaultOrder: SortOrder.DESC, name: 'Play Count', value: SongListSort.PLAY_COUNT }, - { defaultOrder: SortOrder.DESC, name: 'Rating', value: SongListSort.RATING }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.id', { postProcess: 'titleCase' }), + value: SongListSort.ID, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.album', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.albumArtist', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM_ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.artist', { postProcess: 'titleCase' }), + value: SongListSort.ARTIST, + }, { defaultOrder: SortOrder.DESC, - name: 'Recently Added', + name: i18n.t('filter.bpm', { postProcess: 'titleCase' }), + value: SongListSort.BPM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('common.channel', { count: 2, postProcess: 'titleCase' }), + value: SongListSort.CHANNELS, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.comment', { postProcess: 'titleCase' }), + value: SongListSort.COMMENT, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: SongListSort.DURATION, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.isFavorited', { postProcess: 'titleCase' }), + value: SongListSort.FAVORITED, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.GENRE, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: SongListSort.NAME, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.PLAY_COUNT, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.rating', { postProcess: 'titleCase' }), + value: SongListSort.RATING, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.recentlyAdded', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_ADDED, }, { defaultOrder: SortOrder.DESC, - name: 'Recently Played', + name: i18n.t('filter.recentlyPlayed', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_PLAYED, }, - { defaultOrder: SortOrder.DESC, name: 'Year', value: SongListSort.YEAR }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.releaseYear', { postProcess: 'titleCase' }), + value: SongListSort.YEAR, + }, ], }; diff --git a/src/renderer/features/playlists/components/playlist-list-header-filters.tsx b/src/renderer/features/playlists/components/playlist-list-header-filters.tsx index 1cbd23b2..cb0c51c3 100644 --- a/src/renderer/features/playlists/components/playlist-list-header-filters.tsx +++ b/src/renderer/features/playlists/components/playlist-list-header-filters.tsx @@ -17,20 +17,57 @@ import { OrderToggleButton } from '/@/renderer/features/shared'; import { useContainerQuery } from '/@/renderer/hooks'; import { PlaylistListFilter, useCurrentServer, useListStoreActions } from '/@/renderer/store'; import { ListDisplayType, TableColumn } from '/@/renderer/types'; +import i18n from '/@/i18n/i18n'; const FILTERS = { jellyfin: [ - { defaultOrder: SortOrder.DESC, name: 'Duration', value: PlaylistListSort.DURATION }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: PlaylistListSort.NAME }, - { defaultOrder: SortOrder.DESC, name: 'Song Count', value: PlaylistListSort.SONG_COUNT }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: PlaylistListSort.DURATION, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: PlaylistListSort.NAME, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.songCount', { postProcess: 'titleCase' }), + value: PlaylistListSort.SONG_COUNT, + }, ], navidrome: [ - { defaultOrder: SortOrder.DESC, name: 'Duration', value: PlaylistListSort.DURATION }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: PlaylistListSort.NAME }, - { defaultOrder: SortOrder.ASC, name: 'Owner', value: PlaylistListSort.OWNER }, - { defaultOrder: SortOrder.DESC, name: 'Public', value: PlaylistListSort.PUBLIC }, - { defaultOrder: SortOrder.DESC, name: 'Song Count', value: PlaylistListSort.SONG_COUNT }, - { defaultOrder: SortOrder.DESC, name: 'Updated At', value: PlaylistListSort.UPDATED_AT }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: PlaylistListSort.DURATION, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: PlaylistListSort.NAME, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.owner', { postProcess: 'titleCase' }), + value: PlaylistListSort.OWNER, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.isPublic', { postProcess: 'titleCase' }), + value: PlaylistListSort.PUBLIC, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.songCount', { postProcess: 'titleCase' }), + value: PlaylistListSort.SONG_COUNT, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.recentlyUpdated', { postProcess: 'titleCase' }), + value: PlaylistListSort.UPDATED_AT, + }, ], }; diff --git a/src/renderer/features/songs/components/song-list-header-filters.tsx b/src/renderer/features/songs/components/song-list-header-filters.tsx index 64b953c8..97a6365b 100644 --- a/src/renderer/features/songs/components/song-list-header-filters.tsx +++ b/src/renderer/features/songs/components/song-list-header-filters.tsx @@ -28,48 +28,137 @@ import { useListFilterRefresh } from '/@/renderer/hooks/use-list-filter-refresh' import { queryClient } from '/@/renderer/lib/react-query'; import { SongListFilter, useCurrentServer, useListStoreActions } from '/@/renderer/store'; import { ListDisplayType, Play, ServerType, TableColumn } from '/@/renderer/types'; +import i18n from '/@/i18n/i18n'; const FILTERS = { jellyfin: [ - { defaultOrder: SortOrder.ASC, name: 'Album', value: SongListSort.ALBUM }, - { defaultOrder: SortOrder.ASC, name: 'Album Artist', value: SongListSort.ALBUM_ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Artist', value: SongListSort.ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Duration', value: SongListSort.DURATION }, - { defaultOrder: SortOrder.ASC, name: 'Most Played', value: SongListSort.PLAY_COUNT }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: SongListSort.NAME }, - { defaultOrder: SortOrder.ASC, name: 'Random', value: SongListSort.RANDOM }, - { defaultOrder: SortOrder.ASC, name: 'Recently Added', value: SongListSort.RECENTLY_ADDED }, { defaultOrder: SortOrder.ASC, - name: 'Recently Played', + name: i18n.t('filter.album', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.albumArtist', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM_ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.artist', { postProcess: 'titleCase' }), + value: SongListSort.ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: SongListSort.DURATION, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.PLAY_COUNT, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: SongListSort.NAME, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.random', { postProcess: 'titleCase' }), + value: SongListSort.RANDOM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.recentlyAdded', { postProcess: 'titleCase' }), + value: SongListSort.RECENTLY_ADDED, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.recentlyPlayed', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_PLAYED, }, - { defaultOrder: SortOrder.ASC, name: 'Release Date', value: SongListSort.RELEASE_DATE }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.releaseDate', { postProcess: 'titleCase' }), + value: SongListSort.RELEASE_DATE, + }, ], navidrome: [ - { defaultOrder: SortOrder.ASC, name: 'Album', value: SongListSort.ALBUM }, - { defaultOrder: SortOrder.ASC, name: 'Album Artist', value: SongListSort.ALBUM_ARTIST }, - { defaultOrder: SortOrder.ASC, name: 'Artist', value: SongListSort.ARTIST }, - { defaultOrder: SortOrder.DESC, name: 'BPM', value: SongListSort.BPM }, - { defaultOrder: SortOrder.ASC, name: 'Channels', value: SongListSort.CHANNELS }, - { defaultOrder: SortOrder.ASC, name: 'Comment', value: SongListSort.COMMENT }, - { defaultOrder: SortOrder.DESC, name: 'Duration', value: SongListSort.DURATION }, - { defaultOrder: SortOrder.DESC, name: 'Favorited', value: SongListSort.FAVORITED }, - { defaultOrder: SortOrder.ASC, name: 'Genre', value: SongListSort.GENRE }, - { defaultOrder: SortOrder.ASC, name: 'Name', value: SongListSort.NAME }, - { defaultOrder: SortOrder.DESC, name: 'Play Count', value: SongListSort.PLAY_COUNT }, - { defaultOrder: SortOrder.DESC, name: 'Rating', value: SongListSort.RATING }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.album', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.albumArtist', { postProcess: 'titleCase' }), + value: SongListSort.ALBUM_ARTIST, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.artist', { postProcess: 'titleCase' }), + value: SongListSort.ARTIST, + }, { defaultOrder: SortOrder.DESC, - name: 'Recently Added', + name: i18n.t('filter.bpm', { postProcess: 'titleCase' }), + value: SongListSort.BPM, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('common.channel', { count: 2, postProcess: 'titleCase' }), + value: SongListSort.CHANNELS, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.comment', { postProcess: 'titleCase' }), + value: SongListSort.COMMENT, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.duration', { postProcess: 'titleCase' }), + value: SongListSort.DURATION, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.isFavorited', { postProcess: 'titleCase' }), + value: SongListSort.FAVORITED, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.GENRE, + }, + { + defaultOrder: SortOrder.ASC, + name: i18n.t('filter.name', { postProcess: 'titleCase' }), + value: SongListSort.NAME, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.playCount', { postProcess: 'titleCase' }), + value: SongListSort.PLAY_COUNT, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.rating', { postProcess: 'titleCase' }), + value: SongListSort.RATING, + }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.recentlyAdded', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_ADDED, }, { defaultOrder: SortOrder.DESC, - name: 'Recently Played', + name: i18n.t('filter.recentlyPlayed', { postProcess: 'titleCase' }), value: SongListSort.RECENTLY_PLAYED, }, - { defaultOrder: SortOrder.DESC, name: 'Year', value: SongListSort.YEAR }, + { + defaultOrder: SortOrder.DESC, + name: i18n.t('filter.releaseYear', { postProcess: 'titleCase' }), + value: SongListSort.YEAR, + }, ], };