diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index f9a9e059b..697d4a63d 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -1,40 +1,40 @@ { "action": { - "addToFavorites": "add to $t(entity.favorite, {\"count\": 2})", - "addToPlaylist": "add to $t(entity.playlist, {\"count\": 1})", - "addOrRemoveFromSelection": "add or remove from selection", - "selectRangeOfItems": "select a range of items", - "clearQueue": "clear queue", - "goToCurrent": "go to current item", - "createPlaylist": "create $t(entity.playlist, {\"count\": 1})", - "createRadioStation": "create $t(entity.radioStation, {\"count\": 1})", - "deletePlaylist": "delete $t(entity.playlist, {\"count\": 1})", - "deleteRadioStation": "delete $t(entity.radioStation, {\"count\": 1})", - "selectAll": "select all", - "deselectAll": "deselect all", - "downloadStarted": "started download of {{count}} items", - "editPlaylist": "edit $t(entity.playlist, {\"count\": 1})", - "goToPage": "go to page", - "moveToNext": "move to next", - "moveToBottom": "move to bottom", - "moveToTop": "move to top", - "moveUp": "move up", - "moveDown": "move down", - "holdToMoveToTop": "hold to move to top", - "holdToMoveToBottom": "hold to move to bottom", - "moveItems": "move items", - "shuffle": "shuffle", - "shuffleAll": "shuffle all", - "shuffleSelected": "shuffle selected", + "addToFavorites": "Add To $t(entity.favorite, {\"count\": 2})", + "addToPlaylist": "Add To $t(entity.playlist, {\"count\": 1})", + "addOrRemoveFromSelection": "Add Or Remove From Selection", + "selectRangeOfItems": "Select A Range Of Items", + "clearQueue": "Clear Queue", + "goToCurrent": "Go To Current Item", + "createPlaylist": "Create $t(entity.playlist, {\"count\": 1})", + "createRadioStation": "Create $t(entity.radioStation, {\"count\": 1})", + "deletePlaylist": "Delete $t(entity.playlist, {\"count\": 1})", + "deleteRadioStation": "Delete $t(entity.radioStation, {\"count\": 1})", + "selectAll": "Select All", + "deselectAll": "Deselect All", + "downloadStarted": "Started Download Of {{count}} Items", + "editPlaylist": "Edit $t(entity.playlist, {\"count\": 1})", + "goToPage": "Go To Page", + "moveToNext": "Move To Next", + "moveToBottom": "Move To Bottom", + "moveToTop": "Move To Top", + "moveUp": "Move Up", + "moveDown": "Move Down", + "holdToMoveToTop": "Hold To Move To Top", + "holdToMoveToBottom": "Hold To Move To Bottom", + "moveItems": "Move Items", + "shuffle": "Shuffle", + "shuffleAll": "Shuffle All", + "shuffleSelected": "Shuffle Selected", "refresh": "$t(common.refresh)", - "removeFromFavorites": "remove from $t(entity.favorite, {\"count\": 2})", - "removeFromPlaylist": "remove from $t(entity.playlist, {\"count\": 1})", - "removeFromQueue": "remove from queue", - "setRating": "set rating", - "toggleSmartPlaylistEditor": "toggle $t(entity.smartPlaylist) editor", - "viewPlaylists": "view $t(entity.playlist, {\"count\": 2})", - "viewMore": "view more", - "openApplicationDirectory": "open application directory", + "removeFromFavorites": "Remove From $t(entity.favorite, {\"count\": 2})", + "removeFromPlaylist": "Remove From $t(entity.playlist, {\"count\": 1})", + "removeFromQueue": "Remove From Queue", + "setRating": "Set Rating", + "toggleSmartPlaylistEditor": "Toggle $t(entity.smartPlaylist) Editor", + "viewPlaylists": "View $t(entity.playlist, {\"count\": 2})", + "viewMore": "View More", + "openApplicationDirectory": "Open Application Directory", "openIn": { "lastfm": "Open in Last.fm", "listenbrainz": "Open in ListenBrainz", @@ -44,251 +44,251 @@ } }, "common": { - "countSelected": "{{count}} selected", - "explicitStatus": "explicit status", - "action_one": "action", - "action_other": "actions", - "add": "add", - "additionalParticipants": "additional participants", - "newVersion": "a new version has been installed ({{version}})", - "viewReleaseNotes": "view release notes", - "albumGain": "album gain", - "albumPeak": "album peak", - "areYouSure": "are you sure?", - "ascending": "ascending", - "backward": "backward", - "biography": "biography", - "bitDepth": "bit depth", - "bitrate": "bitrate", - "bpm": "bpm", - "cancel": "cancel", - "center": "center", - "channel_one": "channel", - "channel_other": "channels", - "clear": "clear", - "close": "close", - "codec": "codec", - "collapse": "collapse", - "comingSoon": "coming soon…", - "configure": "configure", - "confirm": "confirm", - "create": "create", - "currentSong": "current $t(entity.track, {\"count\": 1})", - "decrease": "decrease", - "delete": "delete", - "descending": "descending", - "description": "description", - "disable": "disable", - "disc": "disc", - "dismiss": "dismiss", - "doNotShowAgain": "do not show this again", - "duration": "duration", - "view": "view", - "edit": "edit", - "enable": "enable", - "expand": "expand", - "example": "example", - "externalLinks": "external links", - "faster": "faster", - "favorite": "favorite", - "filter_one": "filter", - "filter_other": "filters", - "filters": "filters", - "filter_single": "single", - "filter_multiple": "multi", - "forceRestartRequired": "restart to apply changes… close the notification to restart", - "forward": "forward", - "gap": "gap", - "home": "home", - "increase": "increase", - "left": "left", - "limit": "limit", - "manage": "manage", - "maximize": "maximize", - "menu": "menu", - "minimize": "minimize", - "modified": "modified", + "countSelected": "{{count}} Selected", + "explicitStatus": "Explicit Status", + "action_one": "Action", + "action_other": "Actions", + "add": "Add", + "additionalParticipants": "Additional Participants", + "newVersion": "A New Version Has Been Installed ({{version}})", + "viewReleaseNotes": "View Release Notes", + "albumGain": "Album Gain", + "albumPeak": "Album Peak", + "areYouSure": "Are you sure?", + "ascending": "Ascending", + "backward": "Backward", + "biography": "Biography", + "bitDepth": "Bit Depth", + "bitrate": "Bitrate", + "bpm": "BPM", + "cancel": "Cancel", + "center": "Center", + "channel_one": "Channel", + "channel_other": "Channels", + "clear": "Clear", + "close": "Close", + "codec": "Codec", + "collapse": "Collapse", + "comingSoon": "Coming Soon…", + "configure": "Configure", + "confirm": "Confirm", + "create": "Create", + "currentSong": "Current $t(entity.track, {\"count\": 1})", + "decrease": "Decrease", + "delete": "Delete", + "descending": "Descending", + "description": "Description", + "disable": "Disable", + "disc": "Disc", + "dismiss": "Dismiss", + "doNotShowAgain": "Do Not Show This Again", + "duration": "Duration", + "view": "View", + "edit": "Edit", + "enable": "Enable", + "expand": "Expand", + "example": "Example", + "externalLinks": "External Links", + "faster": "Faster", + "favorite": "Favorite", + "filter_one": "Filter", + "filter_other": "Filters", + "filters": "Filters", + "filter_single": "Single", + "filter_multiple": "Multi", + "forceRestartRequired": "Restart To Apply Changes… Close The Notification To Restart", + "forward": "Forward", + "gap": "Gap", + "home": "Home", + "increase": "Increase", + "left": "Left", + "limit": "Limit", + "manage": "Manage", + "maximize": "Maximize", + "menu": "Menu", + "minimize": "Minimize", + "modified": "Modified", "mbid": "MusicBrainz ID", - "grouping": "grouping", - "mood": "mood", - "name": "name", - "no": "no", - "none": "none", - "noResultsFromQuery": "the query returned no results", - "numberOfResults": "{{numberOfResults}} results", - "noFilters": "no filters configured", - "note": "note", - "ok": "ok", - "owner": "owner", - "path": "path", - "playerMustBePaused": "player must be paused", - "preview": "preview", - "previousSong": "previous $t(entity.track, {\"count\": 1})", - "private": "private", - "public": "public", - "quit": "quit", - "random": "random", - "rating": "rating", - "retry": "retry", - "recordLabel": "record label", - "releaseType": "release type", - "refresh": "refresh", - "reload": "reload", - "rename": "rename", - "reset": "reset", - "resetToDefault": "reset to default", - "restartRequired": "restart required", - "right": "right", - "sampleRate": "sample rate", - "save": "save", - "saveAndReplace": "save and replace", - "saveAs": "save as", - "search": "search", - "setting_one": "setting", - "setting_other": "settings", - "slower": "slower", - "share": "share", - "size": "size", - "sort": "sort", - "sortOrder": "order", - "tags": "tags", - "title": "title", - "trackNumber": "track", - "trackGain": "track gain", - "trackPeak": "track peak", - "translation": "translation", - "unknown": "unknown", - "version": "version", - "year": "year", - "yes": "yes", - "explicit": "explicit", - "clean": "clean", - "gridRows": "grid rows", - "tableColumns": "table columns", - "itemsMore": "{{count}} more", - "newVersionAvailable": "a new version is available" + "grouping": "Grouping", + "mood": "Mood", + "name": "Name", + "no": "No", + "none": "None", + "noResultsFromQuery": "The Query Returned No Results", + "numberOfResults": "{{numberOfResults}} Results", + "noFilters": "No Filters Configured", + "note": "Note", + "ok": "Ok", + "owner": "Owner", + "path": "Path", + "playerMustBePaused": "Player Must Be Paused", + "preview": "Preview", + "previousSong": "Previous $t(entity.track, {\"count\": 1})", + "private": "Private", + "public": "Public", + "quit": "Quit", + "random": "Random", + "rating": "Rating", + "retry": "Retry", + "recordLabel": "Record Label", + "releaseType": "Release Type", + "refresh": "Refresh", + "reload": "Reload", + "rename": "Rename", + "reset": "Reset", + "resetToDefault": "Reset To Default", + "restartRequired": "Restart Required", + "right": "Right", + "sampleRate": "Sample Rate", + "save": "Save", + "saveAndReplace": "Save And Replace", + "saveAs": "Save As", + "search": "Search", + "setting_one": "Setting", + "setting_other": "Settings", + "slower": "Slower", + "share": "Share", + "size": "Size", + "sort": "Sort", + "sortOrder": "Order", + "tags": "Tags", + "title": "Title", + "trackNumber": "Track", + "trackGain": "Track Gain", + "trackPeak": "Track Peak", + "translation": "Translation", + "unknown": "Unknown", + "version": "Version", + "year": "Year", + "yes": "Yes", + "explicit": "Explicit", + "clean": "Clean", + "gridRows": "Grid Rows", + "tableColumns": "Table Columns", + "itemsMore": "{{count}} More", + "newVersionAvailable": "A New Version Is Available" }, "entity": { - "album_one": "album", - "album_other": "albums", - "albumArtist_one": "album artist", - "albumArtist_other": "album artists", - "albumArtistCount_one": "{{count}} album artist", - "albumArtistCount_other": "{{count}} album artists", - "albumWithCount_one": "{{count}} album", - "albumWithCount_other": "{{count}} albums", - "radioStation_one": "radio station", - "radioStation_other": "radio stations", - "radioStationWithCount_one": "{{count}} radio station", - "radioStationWithCount_other": "{{count}} radio stations", - "artist_one": "artist", - "artist_other": "artists", - "artistWithCount_one": "{{count}} artist", - "artistWithCount_other": "{{count}} artists", - "favorite_one": "favorite", - "favorite_other": "favorites", - "folder_one": "folder", - "folder_other": "folders", - "folderWithCount_one": "{{count}} folder", - "folderWithCount_other": "{{count}} folders", - "genre_one": "genre", - "genre_other": "genres", - "genreWithCount_one": "{{count}} genre", - "genreWithCount_other": "{{count}} genres", - "playlist_one": "playlist", - "playlist_other": "playlists", - "play_one": "{{count}} play", - "play_other": "{{count}} plays", - "playlistWithCount_one": "{{count}} playlist", - "playlistWithCount_other": "{{count}} playlists", - "smartPlaylist": "smart $t(entity.playlist, {\"count\": 1})", - "track_one": "track", - "track_other": "tracks", - "song_one": "song", - "song_other": "songs", - "trackWithCount_one": "{{count}} track", - "trackWithCount_other": "{{count}} tracks" + "album_one": "Album", + "album_other": "Albums", + "albumArtist_one": "Album Artist", + "albumArtist_other": "Album Artists", + "albumArtistCount_one": "{{count}} Album Artist", + "albumArtistCount_other": "{{count}} Album Artists", + "albumWithCount_one": "{{count}} Album", + "albumWithCount_other": "{{count}} Albums", + "radioStation_one": "Radio Station", + "radioStation_other": "Radio Stations", + "radioStationWithCount_one": "{{count}} Radio Station", + "radioStationWithCount_other": "{{count}} Radio Stations", + "artist_one": "Artist", + "artist_other": "Artists", + "artistWithCount_one": "{{count}} Artist", + "artistWithCount_other": "{{count}} Artists", + "favorite_one": "Favorite", + "favorite_other": "Favorites", + "folder_one": "Folder", + "folder_other": "Folders", + "folderWithCount_one": "{{count}} Folder", + "folderWithCount_other": "{{count}} Folders", + "genre_one": "Genre", + "genre_other": "Genres", + "genreWithCount_one": "{{count}} Genre", + "genreWithCount_other": "{{count}} Genres", + "playlist_one": "Playlist", + "playlist_other": "Playlists", + "play_one": "{{count}} Play", + "play_other": "{{count}} Plays", + "playlistWithCount_one": "{{count}} Playlist", + "playlistWithCount_other": "{{count}} Playlists", + "smartPlaylist": "Smart $t(entity.playlist, {\"count\": 1})", + "track_one": "Track", + "track_other": "Tracks", + "song_one": "Song", + "song_other": "Songs", + "trackWithCount_one": "{{count}} Track", + "trackWithCount_other": "{{count}} Tracks" }, "error": { - "apiRouteError": "unable to route request", - "audioDeviceFetchError": "an error occurred when trying to get audio devices", - "authenticationFailed": "authentication failed", - "badAlbum": "you are seeing this page because this song is not part of an album. you are most likely seeing this issue if you have a song at the top level of your music folder. Jellyfin only groups tracks if they are in a folder", - "badValue": "invalid option \"{{value}}\". this value no longer exists", - "credentialsRequired": "credentials required", - "endpointNotImplementedError": "endpoint {{endpoint}} is not implemented for {{serverType}}", - "genericError": "an error occurred", - "invalidJson": "invalid JSON", - "invalidServer": "invalid server", - "localFontAccessDenied": "access denied to local fonts", - "loginRateError": "too many login attempts, please try again in a few seconds", + "apiRouteError": "Unable to route request", + "audioDeviceFetchError": "An error occurred when trying to get audio devices", + "authenticationFailed": "Authentication failed", + "badAlbum": "You are seeing this page because this song is not part of an album. You are most likely seeing this issue if you have a song at the top level of your music folder. Jellyfin only groups tracks if they are in a folder", + "badValue": "Invalid option \"{{value}}\". This value no longer exists", + "credentialsRequired": "Credentials required", + "endpointNotImplementedError": "Endpoint {{endpoint}} is not implemented for {{serverType}}", + "genericError": "An error occurred", + "invalidJson": "Invalid JSON", + "invalidServer": "Invalid server", + "localFontAccessDenied": "Access denied to local fonts", + "loginRateError": "Too many login attempts, please try again in a few seconds", "mpvRequired": "MPV required", - "multipleServerSaveQueueError": "the play queue has one or more songs which are not from the current server. this is not supported", - "networkError": "a network error occurred", - "noNetwork": "server unavailable", - "noNetworkDescription": "couldn't connect to this server", - "notificationDenied": "permissions for notifications were denied. this setting has no effect", - "openError": "could not open file", - "playbackError": "an error occurred when trying to play the media", - "playbackPausedDueToError": "playback was paused due to an error", - "remoteDisableError": "an error occurred when trying to $t(common.disable) the remote server", - "remoteEnableError": "an error occurred when trying to $t(common.enable) the remote server", - "remotePortError": "an error occurred when trying to set the remote server port", - "remotePortWarning": "restart the server to apply the new port", - "saveQueueFailed": "failed to save queue", - "serverLockSingleServer": "only one server is allowed when server is locked", - "serverNotSelectedError": "no server selected", - "serverRequired": "server required", - "sessionExpiredError": "your session has expired", - "systemFontError": "an error occurred when trying to get system fonts", - "settingsSyncError": "discrepancies were found between the settings in the renderer and the main process. restart the application to apply the changes" + "multipleServerSaveQueueError": "The play queue has one or more songs which are not from the current server. This is not supported", + "networkError": "A network error occurred", + "noNetwork": "Server unavailable", + "noNetworkDescription": "Couldn't connect to this server", + "notificationDenied": "Permissions for notifications were denied. This setting has no effect", + "openError": "Could not open file", + "playbackError": "An error occurred when trying to play the media", + "playbackPausedDueToError": "Playback was paused due to an error", + "remoteDisableError": "An error occurred when trying to $t(common.disable) the remote server", + "remoteEnableError": "An error occurred when trying to $t(common.enable) the remote server", + "remotePortError": "An error occurred when trying to set the remote server port", + "remotePortWarning": "Restart the server to apply the new port", + "saveQueueFailed": "Failed to save queue", + "serverLockSingleServer": "Only one server is allowed when server is locked", + "serverNotSelectedError": "No server selected", + "serverRequired": "Server required", + "sessionExpiredError": "Your session has expired", + "systemFontError": "An error occurred when trying to get system fonts", + "settingsSyncError": "Discrepancies were found between the settings in the renderer and the main process. Restart the application to apply the changes" }, "filter": { "album": "$t(entity.album, {\"count\": 1})", "albumArtist": "$t(entity.albumArtist, {\"count\": 1})", - "matchAnd": "and", - "matchOr": "or", - "albumCount": "$t(entity.album, {\"count\": 2}) count", + "matchAnd": "And", + "matchOr": "Or", + "albumCount": "$t(entity.album, {\"count\": 2}) Count", "artist": "$t(entity.artist, {\"count\": 1})", - "biography": "biography", - "bitrate": "bitrate", - "bpm": "bpm", + "biography": "Biography", + "bitrate": "Bitrate", + "bpm": "BPM", "channels": "$t(common.channel, {\"count\": 2})", - "comment": "comment", - "communityRating": "community rating", - "criticRating": "critic rating", - "dateAdded": "date added", - "disc": "disc", - "duration": "duration", - "favorited": "favorited", - "fromYear": "from year", + "comment": "Comment", + "communityRating": "Community Rating", + "criticRating": "Critic Rating", + "dateAdded": "Date Added", + "disc": "Disc", + "duration": "Duration", + "favorited": "Favorited", + "fromYear": "From Year", "genre": "$t(entity.genre, {\"count\": 1})", - "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", + "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", - "songCount": "song count", - "sortName": "sort name", - "title": "title", - "toYear": "to year", - "trackNumber": "track", + "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", + "songCount": "Song Count", + "sortName": "Sort Name", + "title": "Title", + "toYear": "To Year", + "trackNumber": "Track", "explicitStatus": "$t(common.explicitStatus)" }, "datetime": { @@ -298,210 +298,210 @@ "dayShort": "d" }, "filterOperator": { - "after": "is after", - "afterDate": "is after (date)", - "before": "is before", - "beforeDate": "is before (date)", - "contains": "contains", - "endsWith": "ends with", - "inPlaylist": "is in", - "inTheLast": "is in the last", - "inTheRange": "is in the range", - "inTheRangeDate": "is in the range (date)", - "is": "is", - "isNot": "is not", - "isGreaterThan": "is greater than", - "isLessThan": "is less than", - "matchesRegex": "matches regex", - "notContains": "does not contain", - "notInPlaylist": "is not in", - "notInTheLast": "is not in the last", - "startsWith": "starts with" + "after": "Is After", + "afterDate": "Is After (date)", + "before": "Is Before", + "beforeDate": "Is Before (date)", + "contains": "Contains", + "endsWith": "Ends With", + "inPlaylist": "Is In", + "inTheLast": "Is In The Last", + "inTheRange": "Is In The Range", + "inTheRangeDate": "Is In The Range (date)", + "is": "Is", + "isNot": "Is Not", + "isGreaterThan": "Is Greater Than", + "isLessThan": "Is Less Than", + "matchesRegex": "Matches Regex", + "notContains": "Does Not Contain", + "notInPlaylist": "Is Not In", + "notInTheLast": "Is Not In The Last", + "startsWith": "Starts With" }, "form": { "addServer": { - "error_savePassword": "an error occurred when trying to save the password", - "ignoreCors": "ignore cors ($t(common.restartRequired))", - "ignoreSsl": "ignore ssl ($t(common.restartRequired))", - "input_legacyAuthentication": "enable legacy authentication", - "input_name": "server name", - "input_password": "password", - "input_preferInstantMix": "prefer instant mix", - "input_preferInstantMixDescription": "only use instant mix to get similar songs. useful if you have plugins that modify this behavior", - "input_preferRemoteUrl": "prefer public url", - "input_remoteUrl": "public url", - "input_remoteUrlPlaceholder": "optional: public url for external features", - "input_savePassword": "save password", - "input_url": "url", - "input_username": "username", - "success": "server added successfully", - "title": "add server" + "error_savePassword": "An error occurred when trying to save the password", + "ignoreCors": "Ignore CORS ($t(common.restartRequired))", + "ignoreSsl": "Ignore SSL ($t(common.restartRequired))", + "input_legacyAuthentication": "Enable Legacy Authentication", + "input_name": "Server Name", + "input_password": "Password", + "input_preferInstantMix": "Prefer Instant Mix", + "input_preferInstantMixDescription": "Only use instant mix to get similar songs. Useful if you have plugins that modify this behavior", + "input_preferRemoteUrl": "Prefer Public URL", + "input_remoteUrl": "Public URL", + "input_remoteUrlPlaceholder": "Optional: public URL for external features", + "input_savePassword": "Save Password", + "input_url": "URL", + "input_username": "Username", + "success": "Server Added Successfully", + "title": "Add Server" }, "largeFetchConfirmation": { - "title": "add items to the queue", + "title": "Add Items To The Queue", "description": "This action will add all items in the current filtered view" }, "addToPlaylist": { - "create": "create $t(entity.playlist, {\"count\": 1}) {{playlist}}", + "create": "Create $t(entity.playlist, {\"count\": 1}) {{playlist}}", "input_playlists": "$t(entity.playlist, {\"count\": 2})", - "input_skipDuplicates": "skip duplicates", - "searchOrCreate": "search $t(entity.playlist, {\"count\": 2}) or type to create a new one", - "success": "added $t(entity.trackWithCount, {\"count\": {{message}} }) to $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })", - "noneAdded": "no tracks were added to $t(entity.playlist, {\"count\": 1}) '{{playlist}}'", - "title": "add to $t(entity.playlist, {\"count\": 1})" + "noneAdded": "No tracks were added to $t(entity.playlist, {\"count\": 1}) '{{playlist}}'", + "input_skipDuplicates": "Skip Duplicates", + "searchOrCreate": "Search $t(entity.playlist, {\"count\": 2}) Or Type To Create A New One", + "success": "Added $t(entity.trackWithCount, {\"count\": {{message}} }) To $t(entity.playlistWithCount, {\"count\": {{numOfPlaylists}} })", + "title": "Add To $t(entity.playlist, {\"count\": 1})" }, "createPlaylist": { "input_description": "$t(common.description)", "input_name": "$t(common.name)", "input_owner": "$t(common.owner)", - "input_public": "public", - "success": "$t(entity.playlist, {\"count\": 1}) created successfully", - "title": "create $t(entity.playlist, {\"count\": 1})" + "input_public": "Public", + "success": "$t(entity.playlist, {\"count\": 1}) Created Successfully", + "title": "Create $t(entity.playlist, {\"count\": 1})" }, "createRadioStation": { - "success": "radio station created successfully", - "title": "create radio station", - "input_homepageUrl": "homepage url", - "input_name": "name", - "input_streamUrl": "stream url" + "success": "Radio Station Created Successfully", + "title": "Create Radio Station", + "input_homepageUrl": "Homepage URL", + "input_name": "Name", + "input_streamUrl": "Stream URL" }, "editRadioStation": { - "success": "radio station updated successfully" + "success": "Radio Station Updated Successfully" }, "deletePlaylist": { - "input_confirm": "type the name of the $t(entity.playlist, {\"count\": 1}) to confirm", - "success": "$t(entity.playlist, {\"count\": 1}) deleted successfully", - "title": "delete $t(entity.playlist, {\"count\": 1})" + "input_confirm": "Type The Name Of The $t(entity.playlist, {\"count\": 1}) To Confirm", + "success": "$t(entity.playlist, {\"count\": 1}) Deleted Successfully", + "title": "Delete $t(entity.playlist, {\"count\": 1})" }, "editPlaylist": { "publicJellyfinNote": "Jellyfin for some reason does not expose whether a playlist is public or not. If you wish for this to remain public, please have the following input selected", - "success": "$t(entity.playlist, {\"count\": 1}) updated successfully", - "title": "edit $t(entity.playlist, {\"count\": 1})" + "success": "$t(entity.playlist, {\"count\": 1}) Updated Successfully", + "title": "Edit $t(entity.playlist, {\"count\": 1})" }, "lyricsExport": { - "export": "export lyrics", - "input_synced": "export synced lyrics", + "export": "Export Lyrics", + "input_synced": "Export Synced Lyrics", "input_offset": "$t(setting.lyricOffset)" }, "lyricSearch": { "input_artist": "$t(entity.artist, {\"count\": 1})", "input_name": "$t(common.name)", - "title": "lyric search" + "title": "Lyric Search" }, "queryEditor": { - "title": "query editor", - "input_optionMatchAll": "match all", - "input_optionMatchAny": "match any", - "addRuleGroup": "add rule group", - "removeRuleGroup": "remove rule group", - "resetToDefault": "reset to default", - "clearFilters": "clear filters" + "title": "Query Editor", + "input_optionMatchAll": "Match All", + "input_optionMatchAny": "Match Any", + "addRuleGroup": "Add Rule Group", + "removeRuleGroup": "Remove Rule Group", + "resetToDefault": "Reset To Default", + "clearFilters": "Clear Filters" }, "saveQueue": { - "success": "saved play queue to server" + "success": "Saved Play Queue To Server" }, "shareItem": { - "allowDownloading": "allow downloading", - "copyToClipboard": "Copy to clipboard: Ctrl+C, Enter", - "description": "description", - "setExpiration": "set expiration", - "success": "share link copied to clipboard (or click here to open)", - "successMustClick": "share created successfully. click here to open", - "expireInvalid": "expiration must be in the future", - "createFailed": "failed to create share (is sharing enabled?)" + "allowDownloading": "Allow Downloading", + "copyToClipboard": "Copy To Clipboard: Ctrl+C, Enter", + "description": "Description", + "setExpiration": "Set Expiration", + "success": "Share Link Copied To Clipboard (or Click Here To Open)", + "successMustClick": "Share created successfully. Click here to open", + "expireInvalid": "Expiration must be in the future", + "createFailed": "Failed to create share (is sharing enabled?)" }, "shuffleAll": { - "title": "play random", + "title": "Play Random", "input_genre": "$t(entity.genre, {\"count\": 1})", - "input_limit": "how many songs?", - "input_minYear": "from year", - "input_maxYear": "to year", - "input_played": "play filter", - "input_played_optionAll": "all tracks", - "input_played_optionUnplayed": "only unplayed tracks", - "input_played_optionPlayed": "only played tracks" + "input_limit": "How Many Songs?", + "input_minYear": "From Year", + "input_maxYear": "To Year", + "input_played": "Play Filter", + "input_played_optionAll": "All Tracks", + "input_played_optionUnplayed": "Only Unplayed Tracks", + "input_played_optionPlayed": "Only Played Tracks" }, "updateServer": { - "success": "server updated successfully", - "title": "update server" + "success": "Server Updated Successfully", + "title": "Update Server" }, "privateMode": { - "enabled": "private mode enabled, playback status is now hidden from external integrations", - "disabled": "private mode disabled, playback status is now visible to enabled external integrations", - "title": "private mode" + "enabled": "Private mode enabled, playback status is now hidden from external integrations", + "disabled": "Private mode disabled, playback status is now visible to enabled external integrations", + "title": "Private Mode" } }, "page": { "albumArtistDetail": { "about": "About {{artist}}", - "appearsOn": "appears on", - "favoriteSongs": "favorite songs", - "groupingTypeAll": "all release types", - "groupingTypePrimary": "primary release types", - "recentReleases": "recent releases", - "viewDiscography": "view discography", - "relatedArtists": "related $t(entity.artist, {\"count\": 2})", - "topSongs": "top songs", - "topSongsCommunity": "community", - "topSongsFrom": "top songs from {{title}}", - "topSongsPersonal": "personal", - "favoriteSongsFrom": "favorite songs from {{title}}", - "viewAll": "view all", - "viewAllTracks": "view all $t(entity.track, {\"count\": 2})" + "appearsOn": "Appears On", + "favoriteSongs": "Favorite Songs", + "groupingTypeAll": "All Release Types", + "groupingTypePrimary": "Primary Release Types", + "recentReleases": "Recent Releases", + "viewDiscography": "View Discography", + "relatedArtists": "Related $t(entity.artist, {\"count\": 2})", + "topSongs": "Top Songs", + "topSongsCommunity": "Community", + "topSongsFrom": "Top Songs From {{title}}", + "topSongsPersonal": "Personal", + "favoriteSongsFrom": "Favorite Songs From {{title}}", + "viewAll": "View All", + "viewAllTracks": "View All $t(entity.track, {\"count\": 2})" }, "albumArtistList": { "title": "$t(entity.albumArtist, {\"count\": 2})" }, "albumDetail": { - "moreFromArtist": "more from this $t(entity.artist, {\"count\": 1})", - "moreFromGeneric": "more from {{item}}", - "released": "released" + "moreFromArtist": "More From This $t(entity.artist, {\"count\": 1})", + "moreFromGeneric": "More From {{item}}", + "released": "Released" }, "albumList": { - "artistAlbums": "albums by {{artist}}", + "artistAlbums": "Albums By {{artist}}", "genreAlbums": "\"{{genre}}\" $t(entity.album, {\"count\": 2})", "title": "$t(entity.album, {\"count\": 2})" }, "radioList": { - "title": "radio stations" + "title": "Radio Stations" }, "releasenotes": { - "commitsSinceStable": "commits since {{stable}}", - "noNewCommits": "no new commits in this range", - "noStableReleaseToCompare": "no stable release available to compare with" + "commitsSinceStable": "Commits since {{stable}}", + "noNewCommits": "No New Commits In This Range", + "noStableReleaseToCompare": "No Stable Release Available To Compare With" }, "favorites": { "title": "$t(entity.favorite, {\"count\": 2})" }, "windowBar": { "paused": "(Paused) ", - "privateMode": "(Private mode)" + "privateMode": "(Private Mode)" }, "appMenu": { - "collapseSidebar": "collapse sidebar", - "commandPalette": "open command palette", - "expandSidebar": "expand sidebar", - "goBack": "go back", - "goForward": "go forward", - "manageServers": "manage servers", - "privateModeOff": "turn off private mode", - "privateModeOn": "turn on private mode", - "openBrowserDevtools": "open browser devtools", + "collapseSidebar": "Collapse Sidebar", + "commandPalette": "Open Command Palette", + "expandSidebar": "Expand Sidebar", + "goBack": "Go Back", + "goForward": "Go Forward", + "manageServers": "Manage Servers", + "privateModeOff": "Turn Off Private Mode", + "privateModeOn": "Turn On Private Mode", + "openBrowserDevtools": "Open Browser Devtools", "quit": "$t(common.quit)", - "selectServer": "select server", - "selectMusicFolder": "select music folder", - "noMusicFolder": "no music folder selected", - "multipleMusicFolders": "{{count}} music folders selected", + "selectServer": "Select Server", + "selectMusicFolder": "Select Music Folder", + "noMusicFolder": "No Music Folder Selected", + "multipleMusicFolders": "{{count}} Music Folders Selected", "settings": "$t(common.setting, {\"count\": 2})", - "version": "version {{version}}" + "version": "Version {{version}}" }, "manageServers": { - "title": "manage servers", - "serverDetails": "server details", + "title": "Manage Servers", + "serverDetails": "Server Details", "url": "URL", - "username": "username", - "editServerDetailsTooltip": "edit server details", - "removeServer": "remove server" + "username": "Username", + "editServerDetailsTooltip": "Edit Server Details", + "removeServer": "Remove Server" }, "contextMenu": { "addFavorite": "$t(action.addToFavorites)", @@ -512,12 +512,12 @@ "createPlaylist": "$t(action.createPlaylist)", "deletePlaylist": "$t(action.deletePlaylist)", "deselectAll": "$t(action.deselectAll)", - "download": "download", + "download": "Download", "moveItems": "$t(action.moveItems)", "moveToNext": "$t(action.moveToNext)", "moveToBottom": "$t(action.moveToBottom)", "moveToTop": "$t(action.moveToTop)", - "numberSelected": "{{count}} selected", + "numberSelected": "{{count}} Selected", "play": "$t(player.play)", "playSimilarSongs": "$t(player.playSimilarSongs)", "removeFromFavorites": "$t(action.removeFromFavorites)", @@ -525,40 +525,40 @@ "removeFromQueue": "$t(action.removeFromQueue)", "setRating": "$t(action.setRating)", "playShuffled": "$t(player.shuffle)", - "shareItem": "share item", - "goTo": "go to", - "goToAlbum": "go to $t(entity.album, {\"count\": 1})", - "goToAlbumArtist": "go to $t(entity.albumArtist, {\"count\": 1})", - "showDetails": "get info" + "shareItem": "Share Item", + "goTo": "Go To", + "goToAlbum": "Go To $t(entity.album, {\"count\": 1})", + "goToAlbumArtist": "Go To $t(entity.albumArtist, {\"count\": 1})", + "showDetails": "Get Info" }, "fullscreenPlayer": { "config": { - "dynamicBackground": "dynamic background", - "dynamicImageBlur": "image blur size", - "dynamicIsImage": "enable background image", - "followCurrentLyric": "follow current lyric", - "lyricAlignment": "lyric alignment", - "lyricOffset": "lyrics offset (ms)", - "lyricGap": "lyric gap", - "lyricSize": "lyric size", - "lyricOpacityNonActive": "non-active lyric opacity", - "lyricScaleNonActive": "non-active lyric scale", - "opacity": "opacity", - "showLyricMatch": "show lyric match", - "showLyricProvider": "show lyric provider", - "synchronized": "synchronized", - "unsynchronized": "unsynchronized", - "useImageAspectRatio": "use image aspect ratio" + "dynamicBackground": "Dynamic Background", + "dynamicImageBlur": "Image Blur Size", + "dynamicIsImage": "Enable Background Image", + "followCurrentLyric": "Follow Current Lyric", + "lyricAlignment": "Lyric Alignment", + "lyricOffset": "Lyrics Offset (ms)", + "lyricGap": "Lyric Gap", + "lyricSize": "Lyric Size", + "lyricOpacityNonActive": "Non-active Lyric Opacity", + "lyricScaleNonActive": "Non-active Lyric Scale", + "opacity": "Opacity", + "showLyricMatch": "Show Lyric Match", + "showLyricProvider": "Show Lyric Provider", + "synchronized": "Synchronized", + "unsynchronized": "Unsynchronized", + "useImageAspectRatio": "Use Image Aspect Ratio" }, - "lyrics": "lyrics", - "related": "related", - "upNext": "up next", - "visualizer": "visualizer", - "noLyrics": "no lyrics found" + "lyrics": "Lyrics", + "related": "Related", + "upNext": "Up Next", + "visualizer": "Visualizer", + "noLyrics": "No Lyrics Found" }, "genreList": { - "showAlbums": "show $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})", - "showTracks": "show $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})", + "showAlbums": "Show $t(entity.genre, {\"count\": 1}) $t(entity.album, {\"count\": 2})", + "showTracks": "Show $t(entity.genre, {\"count\": 1}) $t(entity.track, {\"count\": 2})", "title": "$t(entity.genre, {\"count\": 2})" }, "folderList": { @@ -566,543 +566,543 @@ }, "globalSearch": { "commands": { - "goToPage": "go to page", - "searchFor": "search for {{query}}", - "serverCommands": "server commands" + "goToPage": "Go To Page", + "searchFor": "Search For {{query}}", + "serverCommands": "Server Commands" }, - "title": "commands" + "title": "Commands" }, "home": { - "explore": "explore from your library", + "explore": "Explore From Your Library", "genres": "$t(entity.genre, {\"count\": 2})", - "mostPlayed": "most played", - "newlyAdded": "newly added releases", - "recentlyPlayed": "recently played", - "recentlyReleased": "recently released", + "mostPlayed": "Most Played", + "newlyAdded": "Newly Added Releases", + "recentlyPlayed": "Recently Played", + "recentlyReleased": "Recently Released", "title": "$t(common.home)" }, "itemDetail": { - "copyPath": "copy path to clipboard", - "copiedPath": "path copied successfully", - "openFile": "show track in file manager" + "copyPath": "Copy Path To Clipboard", + "copiedPath": "Path Copied Successfully", + "openFile": "Show Track In File Manager" }, "playlist": { - "reorder": "reordering only enabled when sorting by id" + "reorder": "Reordering Only Enabled When Sorting By Id" }, "playlistList": { "title": "$t(entity.playlist, {\"count\": 2})" }, "collections": { - "overrideExisting": "override existing", - "saveAsCollection": "save as collection" + "overrideExisting": "Override Existing", + "saveAsCollection": "Save As Collection" }, "setting": { - "advanced": "advanced", - "analytics": "analytics", - "generalTab": "general", - "hotkeysTab": "hotkeys", - "playbackTab": "playback", - "windowTab": "window", - "updates": "update", - "cache": "cache", - "application": "application", - "queryBuilder": "query builder", - "theme": "theme", - "controls": "controls", - "sidebar": "sidebar", - "remote": "remote", - "exportImport": "import/export", - "scrobble": "scrobble", - "audio": "audio", - "lyrics": "lyrics", - "lyricsDisplay": "lyrics display", - "transcoding": "transcoding", - "discord": "discord", - "logger": "logger", - "playerFilters": "player filters" + "advanced": "Advanced", + "analytics": "Analytics", + "generalTab": "General", + "hotkeysTab": "Hotkeys", + "playbackTab": "Playback", + "windowTab": "Window", + "updates": "Update", + "cache": "Cache", + "application": "Application", + "queryBuilder": "Query Builder", + "theme": "Theme", + "controls": "Controls", + "sidebar": "Sidebar", + "remote": "Remote", + "exportImport": "Import/export", + "scrobble": "Scrobble", + "audio": "Audio", + "lyrics": "Lyrics", + "lyricsDisplay": "Lyrics Display", + "transcoding": "Transcoding", + "discord": "Discord", + "logger": "Logger", + "playerFilters": "Player Filters" }, "sidebar": { "albumArtists": "$t(entity.albumArtist, {\"count\": 2})", "albums": "$t(entity.album, {\"count\": 2})", - "collections": "collections", + "collections": "Collections", "artists": "$t(entity.artist, {\"count\": 2})", "favorites": "$t(entity.favorite, {\"count\": 2})", "folders": "$t(entity.folder, {\"count\": 2})", "genres": "$t(entity.genre, {\"count\": 2})", "home": "$t(common.home)", "radio": "$t(entity.radioStation, {\"count\": 2})", - "myLibrary": "my library", - "nowPlaying": "now playing", + "myLibrary": "My Library", + "nowPlaying": "Now Playing", "playlists": "$t(entity.playlist, {\"count\": 2})", "search": "$t(common.search)", "settings": "$t(common.setting, {\"count\": 2})", - "shared": "shared $t(entity.playlist, {\"count\": 2})", + "shared": "Shared $t(entity.playlist, {\"count\": 2})", "tracks": "$t(entity.track, {\"count\": 2})" }, "trackList": { - "artistTracks": "tracks by {{artist}}", + "artistTracks": "Tracks By {{artist}}", "genreTracks": "\"{{genre}}\" $t(entity.track, {\"count\": 2})", "title": "$t(entity.track, {\"count\": 2})" } }, "player": { - "addLast": "last", - "addNext": "next", - "addLastShuffled": "last (shuffled)", - "addNextShuffled": "next (shuffled)", - "albumRadio": "album radio", - "artistRadio": "artist radio", - "holdToShuffle": "hold to shuffle", - "favorite": "favorite", - "lyrics": "lyrics", - "mute": "mute", - "muted": "muted", - "next": "next", - "play": "play", - "playbackFetchCancel": "this is taking a while… close the notification to cancel", - "playbackFetchInProgress": "loading songs…", - "playbackFetchNoResults": "no songs found", - "playbackSpeed": "playback speed", - "playRandom": "play random", - "playSimilarSongs": "play similar songs", - "previous": "previous", - "queue_clear": "clear queue", - "queue_moveToBottom": "move selected to top", - "queue_moveToTop": "move selected to bottom", - "queue_remove": "remove selected", - "repeat": "repeat", - "repeat_all": "repeat all", - "repeat_off": "repeat disabled", - "repeat_one": "repeat one", + "addLast": "Last", + "addNext": "Next", + "addLastShuffled": "Last (shuffled)", + "addNextShuffled": "Next (shuffled)", + "albumRadio": "Album Radio", + "artistRadio": "Artist Radio", + "holdToShuffle": "Hold To Shuffle", + "favorite": "Favorite", + "lyrics": "Lyrics", + "mute": "Mute", + "muted": "Muted", + "next": "Next", + "play": "Play", + "playbackFetchCancel": "This is taking a while… close the notification to cancel", + "playbackFetchInProgress": "Loading songs…", + "playbackFetchNoResults": "No Songs Found", + "playbackSpeed": "Playback Speed", + "playRandom": "Play Random", + "playSimilarSongs": "Play Similar Songs", + "previous": "Previous", + "queue_clear": "Clear Queue", + "queue_moveToBottom": "Move Selected To Top", + "queue_moveToTop": "Move Selected To Bottom", + "queue_remove": "Remove Selected", + "repeat": "Repeat", + "repeat_all": "Repeat All", + "repeat_off": "Repeat Disabled", + "repeat_one": "Repeat One", "repeat_other": "", - "restoreQueueFromServer": "restore queue from server", - "saveQueueToServer": "save queue to server", - "shuffle": "play (shuffled)", - "shuffle_off": "shuffle disabled", - "skip": "skip", - "skip_back": "skip backwards", - "skip_forward": "skip forwards", - "stop": "stop", - "toggleFullscreenPlayer": "toggle fullscreen player", - "trackRadio": "track radio", - "unfavorite": "unfavorite", - "pause": "pause", - "viewQueue": "view queue", - "sleepTimer": "sleep timer", - "sleepTimer_endOfSong": "end of current song", - "sleepTimer_minutes": "{{count}} min", - "sleepTimer_hours": "{{count}} hr", - "sleepTimer_custom": "custom", - "sleepTimer_off": "off", - "sleepTimer_timeRemaining": "{{time}} remaining", - "sleepTimer_setCustom": "set timer", - "sleepTimer_cancel": "cancel timer" + "restoreQueueFromServer": "Restore Queue From Server", + "saveQueueToServer": "Save Queue To Server", + "shuffle": "Play (shuffled)", + "shuffle_off": "Shuffle Disabled", + "skip": "Skip", + "skip_back": "Skip Backwards", + "skip_forward": "Skip Forwards", + "stop": "Stop", + "toggleFullscreenPlayer": "Toggle Fullscreen Player", + "trackRadio": "Track Radio", + "unfavorite": "Unfavorite", + "pause": "Pause", + "viewQueue": "View Queue", + "sleepTimer": "Sleep Timer", + "sleepTimer_endOfSong": "End Of Current Song", + "sleepTimer_minutes": "{{count}} Min", + "sleepTimer_hours": "{{count}} Hr", + "sleepTimer_custom": "Custom", + "sleepTimer_off": "Off", + "sleepTimer_timeRemaining": "{{time}} Remaining", + "sleepTimer_setCustom": "Set Timer", + "sleepTimer_cancel": "Cancel Timer" }, "queryBuilder": { - "standardTags": "standard tags", - "customTags": "custom tags" + "standardTags": "Standard Tags", + "customTags": "Custom Tags" }, "releaseType": { "primary": { "album": "$t(entity.album, {\"count\": 1})", - "broadcast": "broadcast", - "ep": "ep", - "other": "other", - "single": "single" + "broadcast": "Broadcast", + "ep": "Ep", + "other": "Other", + "single": "Single" }, "secondary": { - "audiobook": "audiobook", - "audioDrama": "audio drama", - "compilation": "compilation", - "djMix": "dj mix", - "demo": "demo", - "fieldRecording": "field recording", - "interview": "interview", - "live": "live", - "mixtape": "mixtape", - "remix": "remix", - "soundtrack": "soundtrack", - "spokenWord": "spoken word" + "audiobook": "Audiobook", + "audioDrama": "Audio Drama", + "compilation": "Compilation", + "djMix": "Dj Mix", + "demo": "Demo", + "fieldRecording": "Field Recording", + "interview": "Interview", + "live": "Live", + "mixtape": "Mixtape", + "remix": "Remix", + "soundtrack": "Soundtrack", + "spokenWord": "Spoken Word" } }, "setting": { - "autoDJ": "auto DJ", - "autoDJ_description": "automatically add similar songs to the queue", - "autoDJ_itemCount": "item count", - "autoDJ_itemCount_description": "the number of items attempted to be added to the queue when auto DJ is enabled", - "autoDJ_timing": "timing", - "autoDJ_timing_description": "the number of songs remaining in the queue before auto DJ is triggered", - "autosave": "automatically save play queue", - "autosave_description": "enable automatically saving the play queue to your server. this is only possible when using Navidrome/Subsonic, and you cannot have a mixed play queue.", - "autosaveCount": "automatic play queue save frequency", - "autosaveCount_description": "how many track changes before the queue is saved. 1 (minimum) means every song change", - "accentColor_description": "sets the accent color for the application", - "accentColor": "accent color", - "useThemeAccentColor": "use theme accent color", - "useThemeAccentColor_description": "use the primary color defined in the selected theme instead of the custom accent color", - "useThemePrimaryShade": "use theme primary shade", - "useThemePrimaryShade_description": "use the primary shade defined in the selected theme for primary color variants", - "primaryShade": "primary shade", - "primaryShade_description": "override the primary shade (0–9) used for buttons, links, and other primary-colored elements", - "albumBackground_description": "adds a background image for album pages containing the album art", - "albumBackground": "album background image", - "albumBackgroundBlur_description": "adjusts the amount of blur applied to the album background image", - "albumBackgroundBlur": "album background image blur size", - "analyticsDisable": "Opt-out of usage based analytics", + "autoDJ": "Auto DJ", + "autoDJ_description": "Automatically add similar songs to the queue", + "autoDJ_itemCount": "Item Count", + "autoDJ_itemCount_description": "The number of items attempted to be added to the queue when auto dj is enabled", + "autoDJ_timing": "Timing", + "autoDJ_timing_description": "The number of songs remaining in the queue before auto dj is triggered", + "autosave": "Automatically Save Play Queue", + "autosave_description": "Enable automatically saving the play queue to your server. This is only possible when using navidrome/subsonic, and you cannot have a mixed play queue.", + "autosaveCount": "Automatic Play Queue Save Frequency", + "autosaveCount_description": "How many track changes before the queue is saved. 1 (minimum) means every song change", + "accentColor_description": "Sets the accent color for the application", + "accentColor": "Accent Color", + "useThemeAccentColor": "Use Theme Accent Color", + "useThemeAccentColor_description": "Use the primary color defined in the selected theme instead of the custom accent color", + "useThemePrimaryShade": "Use Theme Primary Shade", + "useThemePrimaryShade_description": "Use the primary shade defined in the selected theme for primary color variants", + "primaryShade": "Primary Shade", + "primaryShade_description": "Override the primary shade (0–9) used for buttons, links, and other primary-colored elements", + "albumBackground_description": "Adds a background image for album pages containing the album art", + "albumBackground": "Album Background Image", + "albumBackgroundBlur_description": "Adjusts the amount of blur applied to the album background image", + "albumBackgroundBlur": "Album Background Image Blur Size", + "analyticsDisable": "Opt-out Of Usage Based Analytics", "analyticsDisable_description": "Anonymized usage data is sent to the developer to help improve the application", - "analyticsEnable": "Send usage-based analytics", + "analyticsEnable": "Send Usage-based Analytics", "analyticsEnable_description": "Anonymized usage data is sent to the developer to help improve the application", - "applicationHotkeys_description": "configure application hotkeys. toggle the checkbox to set as a global hotkey (desktop only)", - "applicationHotkeys": "application hotkeys", - "artistBackground": "artist background image", - "artistBackground_description": "adds a background image for artist pages containing the artist art", - "artistBackgroundBlur": "artist background image blur size", - "artistBackgroundBlur_description": "adjusts the amount of blur applied to the artist background image", - "artistConfiguration": "album artist page configuration", - "artistConfiguration_description": "configure what items are shown, and in what order, on the album artist page", - "artistReleaseTypeConfiguration": "artist release type configuration", - "artistReleaseTypeConfiguration_description": "configure what release types are shown, and in what order, on the album artist page", - "audioDevice_description": "select the audio device to use for playback", - "audioDevice": "audio device", - "audioExclusiveMode_description": "enable exclusive output mode. in this mode, the system is usually locked out, and only mpv will be able to output audio. visualizer system audio capture will not work while this is enabled", - "audioExclusiveMode": "audio exclusive mode", - "audioPlayer_description": "select the audio player to use for playback", - "audioPlayer": "audio player", - "buttonSize_description": "the size of the player bar buttons", - "buttonSize": "player bar button size", - "clearCache_description": "a 'hard clear' of feishin. in addition to clearing feishin's cache, empty the browser cache (saved images and other assets). server credentials and settings are preserved", - "clearCache": "clear browser cache", - "clearCacheSuccess": "cache cleared successfully", - "clearQueryCache_description": "a 'soft clear' of feishin. this will refresh playlists, track metadata, and reset saved lyrics. settings, server credentials and cached images are preserved", - "clearQueryCache": "clear feishin cache", - "contextMenu_description": "allows you to hide items that are shown in the menu when you right click on an item. items that are unchecked will be hidden", - "contextMenu": "context menu (right click) configuration", - "crossfadeDuration_description": "sets the duration of the crossfade effect", - "crossfadeDuration": "crossfade duration", - "crossfadeStyle": "crossfade style", - "crossfadeStyle_description": "select the crossfade style to use for the audio player", - "customCss_description": "custom css content. Note: content and remote urls are disallowed properties. A preview of your content is shown below. Additional fields you didn't set are present due to sanitization", - "customCss": "custom css", - "customCssEnable_description": "allow for writing custom css", - "customCssEnable": "enable custom css", + "applicationHotkeys_description": "Configure application hotkeys. Toggle the checkbox to set as a global hotkey (desktop only)", + "applicationHotkeys": "Application Hotkeys", + "artistBackground": "Artist Background Image", + "artistBackground_description": "Adds a background image for artist pages containing the artist art", + "artistBackgroundBlur": "Artist Background Image Blur Size", + "artistBackgroundBlur_description": "Adjusts the amount of blur applied to the artist background image", + "artistConfiguration": "Album Artist Page Configuration", + "artistConfiguration_description": "Configure what items are shown, and in what order, on the album artist page", + "artistReleaseTypeConfiguration": "Artist Release Type Configuration", + "artistReleaseTypeConfiguration_description": "Configure what release types are shown, and in what order, on the album artist page", + "audioDevice_description": "Select the audio device to use for playback", + "audioDevice": "Audio Device", + "audioExclusiveMode_description": "Enable exclusive output mode. In this mode, the system is usually locked out, and only mpv will be able to output audio. Visualizer system audio capture will not work while this is enabled", + "audioExclusiveMode": "Audio Exclusive Mode", + "audioPlayer_description": "Select the audio player to use for playback", + "audioPlayer": "Audio Player", + "buttonSize_description": "The size of the player bar buttons", + "buttonSize": "Player Bar Button Size", + "clearCache_description": "A 'hard clear' of feishin. In addition to clearing feishin's cache, empty the browser cache (saved images and other assets). Server credentials and settings are preserved", + "clearCache": "Clear Browser Cache", + "clearCacheSuccess": "Cache Cleared Successfully", + "clearQueryCache_description": "A 'soft clear' of feishin. This will refresh playlists, track metadata, and reset saved lyrics. Settings, server credentials and cached images are preserved", + "clearQueryCache": "Clear Feishin Cache", + "contextMenu_description": "Allows you to hide items that are shown in the menu when you right click on an item. Items that are unchecked will be hidden", + "contextMenu": "Context Menu (right Click) Configuration", + "crossfadeDuration_description": "Sets the duration of the crossfade effect", + "crossfadeDuration": "Crossfade Duration", + "crossfadeStyle": "Crossfade Style", + "crossfadeStyle_description": "Select the crossfade style to use for the audio player", + "customCss_description": "Custom css content. Note: content and remote urls are disallowed properties. A preview of your content is shown below. Additional fields you didn't set are present due to sanitization", + "customCss": "Custom CSS", + "customCssEnable_description": "Allow for writing custom css", + "customCssEnable": "Enable Custom CSS", "customCssNotice": "Warning: while there is some sanitization (disallowing url() and content:), using custom css can still pose risks by changing the interface", - "customFontPath_description": "sets the path to the custom font to use for the application", - "customFontPath": "custom font path", - "automaticUpdates": "Automatic updates", + "customFontPath_description": "Sets the path to the custom font to use for the application", + "customFontPath": "Custom Font Path", + "automaticUpdates": "Automatic Updates", "automaticUpdates_description": "Check for and install updates automatically", - "releaseChannel_optionAlpha": "alpha (nightly)", - "releaseChannel_optionBeta": "beta", - "releaseChannel_optionLatest": "latest", - "releaseChannel": "release channel", - "releaseChannel_description": "choose between stable, beta, or alpha (nightly) releases for automatic updates", - "disableLibraryUpdateOnStartup": "disable checking for new versions on startup", - "discordApplicationId_description": "the application id for {{discord}} rich presence (defaults to {{defaultId}})", - "discordApplicationId": "{{discord}} application id", - "discordDisplayType_artistname": "artist name(s)", - "discordDisplayType_description": "changes what you are listening to in your status", - "discordDisplayType_songname": "song name", - "discordDisplayType": "{{discord}} presence display type", - "discordIdleStatus_description": "when enabled, update status while player is idle", - "discordIdleStatus": "show rich presence idle status", - "discordLinkType_description": "adds external links to {{lastfm}} or {{musicbrainz}} to the song and artist fields in {{discord}} rich presence. {{musicbrainz}} is the most accurate but requires tags and doesn't provide artist links while {{lastfm}} should always provide a link. makes no extra network requests", - "discordLinkType_mbz_lastfm": "{{musicbrainz}} with {{lastfm}} fallback", + "releaseChannel_optionAlpha": "Alpha (nightly)", + "releaseChannel_optionBeta": "Beta", + "releaseChannel_optionLatest": "Latest", + "releaseChannel": "Release Channel", + "releaseChannel_description": "Choose between stable, beta, or alpha (nightly) releases for automatic updates", + "disableLibraryUpdateOnStartup": "Disable Checking For New Versions On Startup", + "discordApplicationId_description": "The application id for {{discord}} rich presence (defaults to {{defaultId}})", + "discordApplicationId": "{{discord}} Application Id", + "discordDisplayType_artistname": "Artist Name(s)", + "discordDisplayType_description": "Changes what you are listening to in your status", + "discordDisplayType_songname": "Song Name", + "discordDisplayType": "{{discord}} Presence Display Type", + "discordIdleStatus_description": "When enabled, update status while player is idle", + "discordIdleStatus": "Show Rich Presence Idle Status", + "discordLinkType_description": "Adds external links to {{lastfm}} or {{musicbrainz}} to the song and artist fields in {{discord}} rich presence. {{musicbrainz}} is the most accurate but requires tags and doesn't provide artist links while {{lastfm}} should always provide a link. Makes no extra network requests", + "discordLinkType_mbz_lastfm": "{{musicbrainz}} With {{lastfm}} Fallback", "discordLinkType_none": "$t(common.none)", - "discordLinkType": "{{discord}} presence links", - "discordListening_description": "show status as listening instead of playing", - "discordListening": "show status as listening", - "discordPausedStatus_description": "when enabled, status will show when player is paused", - "discordPausedStatus": "show rich presence when paused", - "discordRichPresence": "{{discord}} rich presence", - "discordRichPresence_description": "enable playback status in {{discord}} rich presence. Image keys are: {{icon}}, {{playing}}, and {{paused}}", - "discordServeImage": "serve {{discord}} images from server", - "discordServeImage_description": "share cover art for {{discord}} rich presence from server itself, only available for Jellyfin and Navidrome. {{discord}} uses a bot to fetch images, so your server must be reachable from the public internet", - "discordStateIcon": "show playing icon", - "discordStateIcon_description": "show a small playing icon in the rich presence status. the paused icon is always shown when \"Show rich presence when paused\" is enabled", - "discordUpdateInterval": "{{discord}} rich presence update interval", - "discordUpdateInterval_description": "the time in seconds between each update (minimum 15 seconds)", - "enableAutoTranslation_description": "enable translation automatically when lyrics are loaded", - "enableAutoTranslation": "enable auto translation", - "enableRemote_description": "enables the remote control server to allow other devices to control the application", - "enableRemote": "enable remote control server", - "exitToTray_description": "exit the application to the system tray", - "exitToTray": "exit to tray", - "exportImportSettings_control_description": "export and import settings via JSON", - "exportImportSettings_control_exportText": "export settings", - "exportImportSettings_control_importText": "import settings", - "exportImportSettings_control_title": "import / export settings", - "exportImportSettings_destructiveWarning": "importing settings is destructive, please review the above before clicking \"import\" below!", - "exportImportSettings_importBtn": "import settings", - "exportImportSettings_importModalTitle": "import feishin settings", - "exportImportSettings_importSuccess": "settings have been imported successfully!", - "exportImportSettings_notValidJSON": "the file passed is not valid JSON", - "exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" is incorrect - {{reason}}", - "externalLinks_description": "enables showing external links (Last.fm, MusicBrainz) on artist/album pages", - "externalLinks": "show external links", - "followCurrentSong_description": "automatically scroll the play queue to the current playing song", - "followCurrentSong": "follow current song", - "followLyric_description": "scroll the lyric to the current playing position", - "followLyric": "follow current lyric", - "font_description": "sets the font to use for the application", - "font": "font", - "fontType_description": "built-in font selects one of the fonts provided by feishin. system font allows you to select any font provided by your operating system. custom allows you to provide your own font", - "fontType_optionBuiltIn": "built-in font", - "fontType_optionCustom": "custom font", - "fontType_optionSystem": "system font", - "fontType": "font type", - "gaplessAudio_description": "sets the gapless audio setting for mpv", - "gaplessAudio_optionWeak": "weak (recommended)", - "gaplessAudio": "gapless audio", - "globalMediaHotkeys_description": "enable or disable the usage of your system media hotkeys to control playback", - "globalMediaHotkeys": "global media hotkeys", - "homeConfiguration_description": "configure what items are shown, and in what order, on the home page", - "homeConfiguration": "home page configuration", - "homeFeature_description": "controls whether to show the large featured carousel on the home page", - "homeFeature": "home featured carousel", - "homeFeatureStyle_description": "controls the style of the home featured carousel", - "homeFeatureStyle": "home featured carousel style", - "homeFeatureStyle_optionMultiple": "multiple", - "homeFeatureStyle_optionSingle": "single", - "hotkey_browserBack": "browser back", - "hotkey_browserForward": "browser forward", - "hotkey_favoriteCurrentSong": "favorite $t(common.currentSong)", - "hotkey_favoritePreviousSong": "favorite $t(common.previousSong)", - "hotkey_globalSearch": "global search", - "hotkey_localSearch": "in-page search", - "hotkey_listNavigateToPage": "list navigate to item page", - "hotkey_listPlayDefault": "list play", - "hotkey_listPlayLast": "list play last", - "hotkey_listPlayNext": "list play next", - "hotkey_listPlayNow": "list play now", - "hotkey_navigateHome": "navigate to home", - "hotkey_playbackNext": "next track", - "hotkey_playbackPause": "pause", - "hotkey_playbackPlay": "play", - "hotkey_playbackPlayPause": "play / pause", - "hotkey_playbackPrevious": "previous track", - "hotkey_playbackStop": "stop", - "hotkey_rate0": "rating clear", - "hotkey_rate1": "rating 1 star", - "hotkey_rate2": "rating 2 stars", - "hotkey_rate3": "rating 3 stars", - "hotkey_rate4": "rating 4 stars", - "hotkey_rate5": "rating 5 stars", - "hotkey_skipBackward": "skip backward", - "hotkey_skipForward": "skip forward", - "hotkey_toggleCurrentSongFavorite": "toggle $t(common.currentSong) favorite", - "hotkey_toggleFullScreenPlayer": "toggle full screen player", - "hotkey_togglePreviousSongFavorite": "toggle $t(common.previousSong) favorite", - "hotkey_toggleQueue": "toggle queue", - "hotkey_toggleRepeat": "toggle repeat", - "hotkey_toggleShuffle": "toggle shuffle", - "hotkey_unfavoriteCurrentSong": "unfavorite $t(common.currentSong)", - "hotkey_unfavoritePreviousSong": "unfavorite $t(common.previousSong)", - "hotkey_volumeDown": "volume down", - "hotkey_volumeMute": "volume mute", - "hotkey_volumeUp": "volume up", - "hotkey_zoomIn": "zoom in", - "hotkey_zoomOut": "zoom out", - "imageAspectRatio_description": "if enabled, cover art will be shown using their native aspect ratio. for art that is not 1:1, the remaining space will be empty", - "imageAspectRatio": "use native cover art aspect ratio", - "language": "language", - "language_description": "sets the language for the application ($t(common.restartRequired))", - "lastfm_description": "show links to Last.fm on artist/album pages", - "lastfm": "show last.fm links", - "listenbrainz_description": "show links to ListenBrainz on artist/album pages", - "listenbrainz": "show ListenBrainz links", - "lastfmApiKey_description": "the API key for {{lastfm}}. required for cover art", - "lastfmApiKey": "{{lastfm}} API key", - "lyricFetch_description": "fetch lyrics from various internet sources", - "lyricFetch": "fetch lyrics from the internet", - "lyricFetchProvider_description": "select the providers to fetch lyrics from", - "lyricFetchProvider": "providers to fetch lyrics from", - "lyricOffset_description": "offset the lyric by the specified amount of milliseconds", - "lyricOffset": "lyric offset (ms)", - "logLevel": "log level", - "logLevel_description": "sets the minimum log level to display. debug shows all logs, error only shows errors", - "logLevel_optionDebug": "debug", - "logLevel_optionError": "error", - "logLevel_optionInfo": "info", - "logLevel_optionWarn": "warn", - "minimizeToTray_description": "minimize the application to the system tray", - "minimizeToTray": "minimize to tray", - "minimumScrobblePercentage_description": "the minimum percentage of the song that must be played before it is scrobbled", - "minimumScrobblePercentage": "minimum scrobble duration (percentage)", - "minimumScrobbleSeconds_description": "the minimum duration in seconds of the song that must be played before it is scrobbled", - "minimumScrobbleSeconds": "minimum scrobble (seconds)", - "mpvExecutablePath_description": "sets the path to the mpv executable. if left empty, the default path will be used", - "mpvExecutablePath": "mpv executable path", - "mpvExtraParameters": "mpv extra parameters", - "mpvExtraParameters_description": "extra arguments to pass to mpv", - "mpvExtraParameters_help": "one per line", - "musicbrainz_description": "show links to MusicBrainz on artist/album pages, where MusicBrainz ID exists", - "musicbrainz": "show MusicBrainz links", - "qobuz_description": "show links to Qobuz on artist/album pages", - "qobuz": "show Qobuz links", - "spotify_description": "show links to Spotify on artist/album pages", - "spotify": "show Spotify links", - "nativeSpotify_description": "open in the Spotify app instead of your browser", - "nativeSpotify": "use Spotify app", - "neteaseTranslation_description": "When enabled, fetches and displays translated lyrics from NetEase if available", + "discordLinkType": "{{discord}} Presence Links", + "discordListening_description": "Show status as listening instead of playing", + "discordListening": "Show Status As Listening", + "discordPausedStatus_description": "When enabled, status will show when player is paused", + "discordPausedStatus": "Show Rich Presence When Paused", + "discordRichPresence": "{{discord}} Rich Presence", + "discordRichPresence_description": "Enable playback status in {{discord}} rich presence. Image keys are: {{icon}}, {{playing}}, and {{paused}}", + "discordServeImage": "Serve {{discord}} Images From Server", + "discordServeImage_description": "Share cover art for {{discord}} rich presence from server itself, only available for jellyfin and navidrome. {{discord}} uses a bot to fetch images, so your server must be reachable from the public internet", + "discordStateIcon": "Show Playing Icon", + "discordStateIcon_description": "Show a small playing icon in the rich presence status. The paused icon is always shown when \"show rich presence when paused\" is enabled", + "discordUpdateInterval": "{{discord}} Rich Presence Update Interval", + "discordUpdateInterval_description": "The time in seconds between each update (minimum 15 seconds)", + "enableAutoTranslation_description": "Enable translation automatically when lyrics are loaded", + "enableAutoTranslation": "Enable Auto Translation", + "enableRemote_description": "Enables the remote control server to allow other devices to control the application", + "enableRemote": "Enable Remote Control Server", + "exitToTray_description": "Exit the application to the system tray", + "exitToTray": "Exit To Tray", + "exportImportSettings_control_description": "Export and import settings via json", + "exportImportSettings_control_exportText": "Export Settings", + "exportImportSettings_control_importText": "Import Settings", + "exportImportSettings_control_title": "Import / Export Settings", + "exportImportSettings_destructiveWarning": "Importing Settings Is Destructive, Please Review The Above Before Clicking \"import\" Below!", + "exportImportSettings_importBtn": "Import Settings", + "exportImportSettings_importModalTitle": "Import Feishin Settings", + "exportImportSettings_importSuccess": "Settings Have Been Imported Successfully!", + "exportImportSettings_notValidJSON": "The file passed is not valid json", + "exportImportSettings_offendingKeyError": "\"{{offendingKey}}\" Is Incorrect - {{reason}}", + "externalLinks_description": "Enables showing external links (last.fm, musicbrainz) on artist/album pages", + "externalLinks": "Show External Links", + "followCurrentSong_description": "Automatically scroll the play queue to the current playing song", + "followCurrentSong": "Follow Current Song", + "followLyric_description": "Scroll the lyric to the current playing position", + "followLyric": "Follow Current Lyric", + "font_description": "Sets the font to use for the application", + "font": "Font", + "fontType_description": "Built-in font selects one of the fonts provided by feishin. System font allows you to select any font provided by your operating system. Custom allows you to provide your own font", + "fontType_optionBuiltIn": "Built-in Font", + "fontType_optionCustom": "Custom Font", + "fontType_optionSystem": "System Font", + "fontType": "Font Type", + "gaplessAudio_description": "Sets the gapless audio setting for mpv", + "gaplessAudio_optionWeak": "Weak (recommended)", + "gaplessAudio": "Gapless Audio", + "globalMediaHotkeys_description": "Enable or disable the usage of your system media hotkeys to control playback", + "globalMediaHotkeys": "Global Media Hotkeys", + "homeConfiguration_description": "Configure what items are shown, and in what order, on the home page", + "homeConfiguration": "Home Page Configuration", + "homeFeature_description": "Controls whether to show the large featured carousel on the home page", + "homeFeature": "Home Featured Carousel", + "homeFeatureStyle_description": "Controls the style of the home featured carousel", + "homeFeatureStyle": "Home Featured Carousel Style", + "homeFeatureStyle_optionMultiple": "Multiple", + "homeFeatureStyle_optionSingle": "Single", + "hotkey_browserBack": "Browser Back", + "hotkey_browserForward": "Browser Forward", + "hotkey_favoriteCurrentSong": "Favorite $t(common.currentSong)", + "hotkey_favoritePreviousSong": "Favorite $t(common.previousSong)", + "hotkey_globalSearch": "Global Search", + "hotkey_localSearch": "In-page Search", + "hotkey_listNavigateToPage": "List Navigate To Item Page", + "hotkey_listPlayDefault": "List Play", + "hotkey_listPlayLast": "List Play Last", + "hotkey_listPlayNext": "List Play Next", + "hotkey_listPlayNow": "List Play Now", + "hotkey_navigateHome": "Navigate To Home", + "hotkey_playbackNext": "Next Track", + "hotkey_playbackPause": "Pause", + "hotkey_playbackPlay": "Play", + "hotkey_playbackPlayPause": "Play / Pause", + "hotkey_playbackPrevious": "Previous Track", + "hotkey_playbackStop": "Stop", + "hotkey_rate0": "Rating Clear", + "hotkey_rate1": "Rating 1 Star", + "hotkey_rate2": "Rating 2 Stars", + "hotkey_rate3": "Rating 3 Stars", + "hotkey_rate4": "Rating 4 Stars", + "hotkey_rate5": "Rating 5 Stars", + "hotkey_skipBackward": "Skip Backward", + "hotkey_skipForward": "Skip Forward", + "hotkey_toggleCurrentSongFavorite": "Toggle $t(common.currentSong) Favorite", + "hotkey_toggleFullScreenPlayer": "Toggle Full Screen Player", + "hotkey_togglePreviousSongFavorite": "Toggle $t(common.previousSong) Favorite", + "hotkey_toggleQueue": "Toggle Queue", + "hotkey_toggleRepeat": "Toggle Repeat", + "hotkey_toggleShuffle": "Toggle Shuffle", + "hotkey_unfavoriteCurrentSong": "Unfavorite $t(common.currentSong)", + "hotkey_unfavoritePreviousSong": "Unfavorite $t(common.previousSong)", + "hotkey_volumeDown": "Volume Down", + "hotkey_volumeMute": "Volume Mute", + "hotkey_volumeUp": "Volume Up", + "hotkey_zoomIn": "Zoom In", + "hotkey_zoomOut": "Zoom Out", + "imageAspectRatio_description": "If enabled, cover art will be shown using their native aspect ratio. For art that is not 1:1, the remaining space will be empty", + "imageAspectRatio": "Use Native Cover Art Aspect Ratio", + "language": "Language", + "language_description": "Sets the language for the application ($t(common.restartRequired))", + "lastfm_description": "Show links to Last.fm on artist/album pages", + "lastfm": "Show Last.fm links", + "listenbrainz_description": "Show links to ListenBrainz on artist/album pages", + "listenbrainz": "Show ListenBrainz links", + "lastfmApiKey_description": "The api key for {{lastfm}}. Required for cover art", + "lastfmApiKey": "{{lastfm}} API Key", + "lyricFetch_description": "Fetch lyrics from various internet sources", + "lyricFetch": "Fetch Lyrics From The Internet", + "lyricFetchProvider_description": "Select the providers to fetch lyrics from", + "lyricFetchProvider": "Providers To Fetch Lyrics From", + "lyricOffset_description": "Offset the lyric by the specified amount of milliseconds", + "lyricOffset": "Lyric Offset (ms)", + "logLevel": "Log Level", + "logLevel_description": "Sets the minimum log level to display. Debug shows all logs, error only shows errors", + "logLevel_optionDebug": "Debug", + "logLevel_optionError": "Error", + "logLevel_optionInfo": "Info", + "logLevel_optionWarn": "Warn", + "minimizeToTray_description": "Minimize the application to the system tray", + "minimizeToTray": "Minimize To Tray", + "minimumScrobblePercentage_description": "The minimum percentage of the song that must be played before it is scrobbled", + "minimumScrobblePercentage": "Minimum Scrobble Duration (percentage)", + "minimumScrobbleSeconds_description": "The minimum duration in seconds of the song that must be played before it is scrobbled", + "minimumScrobbleSeconds": "Minimum Scrobble (seconds)", + "mpvExecutablePath_description": "Sets the path to the mpv executable. If left empty, the default path will be used", + "mpvExecutablePath": "MPV executable path", + "mpvExtraParameters": "MPV extra parameters", + "mpvExtraParameters_description": "Extra arguments to pass to mpv", + "mpvExtraParameters_help": "One per line", + "musicbrainz_description": "Show links to MusicBrainz on artist/album pages, where MusicBrainz ID exists", + "musicbrainz": "Show MusicBrainz links", + "qobuz_description": "Show links to qobuz on artist/album pages", + "qobuz": "Show Qobuz Links", + "spotify_description": "Show links to spotify on artist/album pages", + "spotify": "Show Spotify Links", + "nativeSpotify_description": "Open in the spotify app instead of your browser", + "nativeSpotify": "Use Spotify App", + "neteaseTranslation_description": "When enabled, fetches and displays translated lyrics from netease if available", "neteaseTranslation": "Enable NetEase translations", - "notify": "enable song notifications", - "notify_description": "show notifications when changing the current song", - "pathReplace": "file path replacement", - "pathReplace_description": "replace your server's default filepath", - "pathReplace_optionRemovePrefix": "remove prefix", - "pathReplace_optionAddPrefix": "add prefix", - "passwordStore_description": "what password/secret store to use. change this if you are having issues storing passwords", - "passwordStore": "passwords/secret store", - "playerFilters": "Filter songs from the queue", - "playerFilters_description": "omit songs from being added to the queue based on the following criteria", - "playbackStyle_description": "select the playback style to use for the audio player", - "playbackStyle_optionCrossFade": "crossfade", - "playbackStyle_optionNormal": "normal", - "playbackStyle": "playback style", - "playButtonBehavior_description": "sets the default behavior of the play button when adding songs to the queue", + "notify": "Enable Song Notifications", + "notify_description": "Show notifications when changing the current song", + "pathReplace": "File Path Replacement", + "pathReplace_description": "Replace your server's default filepath", + "pathReplace_optionRemovePrefix": "Remove Prefix", + "pathReplace_optionAddPrefix": "Add Prefix", + "passwordStore_description": "What password/secret store to use. Change this if you are having issues storing passwords", + "passwordStore": "Passwords/secret Store", + "playerFilters": "Filter Songs From The Queue", + "playerFilters_description": "Omit songs from being added to the queue based on the following criteria", + "playbackStyle_description": "Select the playback style to use for the audio player", + "playbackStyle_optionCrossFade": "Crossfade", + "playbackStyle_optionNormal": "Normal", + "playbackStyle": "Playback Style", + "playButtonBehavior_description": "Sets the default behavior of the play button when adding songs to the queue", "playButtonBehavior_optionAddLast": "$t(player.addLast)", "playButtonBehavior_optionAddNext": "$t(player.addNext)", "playButtonBehavior_optionPlay": "$t(player.play)", "playButtonBehavior_optionPlayShuffled": "$t(player.shuffle)", - "playButtonBehavior": "play button behavior", - "artistRadioCount_description": "sets the number of songs to fetch for artist radio and track radio", - "artistRadioCount": "artist/track radio count", - "imageResolution": "image resolution", - "imageResolution_description": "the resolution for the images used around the app. using a value of 0 will default to the native image resolution", - "imageResolution_optionTable": "table", - "imageResolution_optionItemCard": "item card", - "imageResolution_optionSidebar": "sidebar", - "imageResolution_optionHeader": "header", - "imageResolution_optionFullScreenPlayer": "fullscreen player", - "playerbarOpenDrawer_description": "allows clicking of the playerbar to open the full screen player", - "playerbarOpenDrawer": "playerbar fullscreen toggle", - "playerbarSlider": "playerbar slider", - "playerbarSlider_description": "the waveform is not recommended if on a slow or metered internet connection", - "playerbarSliderType_optionSlider": "slider", - "playerbarSliderType_optionWaveform": "waveform", - "playerbarWaveformAlign": "waveform align", - "playerbarWaveformAlign_optionTop": "top", - "playerbarWaveformAlign_optionCenter": "center", - "playerbarWaveformAlign_optionBottom": "bottom", - "playerbarWaveformBarWidth": "waveform bar width", - "playerbarWaveformGap": "waveform gap", - "playerbarWaveformRadius": "waveform radius", - "playerbarWaveformStretch": "waveform stretch", - "playerbarWaveformStretch_description": "stretches the waveform to fill the available space", - "preferLocalLyrics_description": "prefer local lyrics over remote lyrics when available", - "preferLocalLyrics": "prefer local lyrics", - "showLyricsInSidebar_description": "a panel will be added to the attached play queue that displays the lyrics", - "showLyricsInSidebar": "show lyrics in player sidebar", - "showRatings_description": "controls if the star ratings feature shows up in the interface", - "showRatings": "show star ratings", - "blurExplicitImages": "blur explicit images", - "blurExplicitImages_description": "album and song artwork tagged as explicit will be blurred", - "enableGridMultiSelect": "enable grid multi-select", - "enableGridMultiSelect_description": "when enabled, allows selecting multiple items in grid views. when disabled, clicking grid item images will navigate to the item page", - "showVisualizerInSidebar_description": "a panel will be added to the player sidebar that displays the visualizer", - "showVisualizerInSidebar": "show visualizer in player sidebar", - "combinedLyricsAndVisualizer_description": "combine lyrics and visualizer into the same panel", - "combinedLyricsAndVisualizer": "combine lyrics and visualizer in player sidebar", - "preservePitch_description": "preserves pitch when modifying playback speed", - "preservePitch": "preserve pitch", - "audioFadeOnStatusChange": "audio fade on status change", - "audioFadeOnStatusChange_description": "enables fade out and fade in when play/pause status changes", - "preventSleepOnPlayback_description": "prevent the display from sleeping while music is playing", - "preventSleepOnPlayback": "prevent sleep on playback", - "remotePassword_description": "sets the password for the remote control server. These credentials are by default transferred insecurely, so you should use a unique password that you do not care about", - "remotePassword": "remote control server password", - "remotePort_description": "sets the port for the remote control server", - "remotePort": "remote control server port", - "remoteUsername_description": "sets the username for the remote control server. if both username and password are empty, authentication will be disabled", - "remoteUsername": "remote control server username", + "playButtonBehavior": "Play Button Behavior", + "artistRadioCount_description": "Sets the number of songs to fetch for artist radio and track radio", + "artistRadioCount": "Artist/track Radio Count", + "imageResolution": "Image Resolution", + "imageResolution_description": "The resolution for the images used around the app. Using a value of 0 will default to the native image resolution", + "imageResolution_optionTable": "Table", + "imageResolution_optionItemCard": "Item Card", + "imageResolution_optionSidebar": "Sidebar", + "imageResolution_optionHeader": "Header", + "imageResolution_optionFullScreenPlayer": "Fullscreen Player", + "playerbarOpenDrawer_description": "Allows clicking of the playerbar to open the full screen player", + "playerbarOpenDrawer": "Playerbar Fullscreen Toggle", + "playerbarSlider": "Playerbar Slider", + "playerbarSlider_description": "The waveform is not recommended if on a slow or metered internet connection", + "playerbarSliderType_optionSlider": "Slider", + "playerbarSliderType_optionWaveform": "Waveform", + "playerbarWaveformAlign": "Waveform Align", + "playerbarWaveformAlign_optionTop": "Top", + "playerbarWaveformAlign_optionCenter": "Center", + "playerbarWaveformAlign_optionBottom": "Bottom", + "playerbarWaveformBarWidth": "Waveform Bar Width", + "playerbarWaveformGap": "Waveform Gap", + "playerbarWaveformRadius": "Waveform Radius", + "playerbarWaveformStretch": "Waveform Stretch", + "playerbarWaveformStretch_description": "Stretches the waveform to fill the available space", + "preferLocalLyrics_description": "Prefer local lyrics over remote lyrics when available", + "preferLocalLyrics": "Prefer Local Lyrics", + "showLyricsInSidebar_description": "A panel will be added to the attached play queue that displays the lyrics", + "showLyricsInSidebar": "Show Lyrics In Player Sidebar", + "showRatings_description": "Controls if the star ratings feature shows up in the interface", + "showRatings": "Show Star Ratings", + "blurExplicitImages": "Blur Explicit Images", + "blurExplicitImages_description": "Album and song artwork tagged as explicit will be blurred", + "enableGridMultiSelect": "Enable Grid Multi-select", + "enableGridMultiSelect_description": "When enabled, allows selecting multiple items in grid views. When disabled, clicking grid item images will navigate to the item page", + "showVisualizerInSidebar_description": "A panel will be added to the player sidebar that displays the visualizer", + "showVisualizerInSidebar": "Show Visualizer In Player Sidebar", + "combinedLyricsAndVisualizer_description": "Combine lyrics and visualizer into the same panel", + "combinedLyricsAndVisualizer": "Combine Lyrics And Visualizer In Player Sidebar", + "preservePitch_description": "Preserves pitch when modifying playback speed", + "preservePitch": "Preserve Pitch", + "audioFadeOnStatusChange": "Audio Fade On Status Change", + "audioFadeOnStatusChange_description": "Enables fade out and fade in when play/pause status changes", + "preventSleepOnPlayback_description": "Prevent the display from sleeping while music is playing", + "preventSleepOnPlayback": "Prevent Sleep On Playback", + "remotePassword_description": "Sets the password for the remote control server. These credentials are by default transferred insecurely, so you should use a unique password that you do not care about", + "remotePassword": "Remote Control Server Password", + "remotePort_description": "Sets the port for the remote control server", + "remotePort": "Remote Control Server Port", + "remoteUsername_description": "Sets the username for the remote control server. If both username and password are empty, authentication will be disabled", + "remoteUsername": "Remote Control Server Username", "replayGainClipping_description": "Prevent clipping caused by {{ReplayGain}} by automatically lowering the gain", - "replayGainClipping": "{{ReplayGain}} clipping", - "replayGainFallback_description": "gain in db to apply if the file has no {{ReplayGain}} tags", - "replayGainFallback": "{{ReplayGain}} fallback", - "replayGainMode_description": "adjust volume gain according to {{ReplayGain}} values stored in the file metadata", + "replayGainClipping": "{{ReplayGain}} Clipping", + "replayGainFallback_description": "Gain in db to apply if the file has no {{ReplayGain}} tags", + "replayGainFallback": "{{ReplayGain}} Fallback", + "replayGainMode_description": "Adjust volume gain according to {{ReplayGain}} values stored in the file metadata", "replayGainMode_optionAlbum": "$t(entity.album, {\"count\": 1})", "replayGainMode_optionNone": "$t(common.none)", "replayGainMode_optionTrack": "$t(entity.track, {\"count\": 1})", - "replayGainMode": "{{ReplayGain}} mode", - "replayGainPreamp_description": "adjust the preamp gain applied to the {{ReplayGain}} values", - "replayGainPreamp": "{{ReplayGain}} preamp (dB)", - "sampleRate_description": "select the output sample rate to be used if the sample frequency selected is different from that of the current media. a value less than 8000 will use the default frequency", - "sampleRate": "sample rate", - "savePlayQueue_description": "save the play queue when the application is closed and restore it when the application is opened", - "savePlayQueue": "save play queue", - "scrobble_description": "scrobble plays to your media server", - "scrobble": "scrobble", - "showSkipButton_description": "show or hide the skip buttons on the player bar", - "showSkipButton": "show skip buttons", - "showSkipButtons_description": "show or hide the skip buttons on the player bar", - "showSkipButtons": "show skip buttons", - "sidebarCollapsedNavigation_description": "show or hide the navigation in the collapsed sidebar", - "sidebarCollapsedNavigation": "sidebar (collapsed) navigation", - "sidebarConfiguration_description": "select the items and order in which they appear in the sidebar", - "sidebarConfiguration": "sidebar configuration", - "playerItemConfiguration_description": "configure what items are shown, and in what order, on the fullscreen player", - "playerItemConfiguration": "player item configuration", - "sidebarPlaylistList_description": "show or hide the playlist list in the sidebar", - "sidebarPlaylistList": "sidebar playlist list", - "sidebarPlaylistSorting_description": "allows manual playlist sorting in the sidebar using drag and drop instead of the default server order", - "sidebarPlaylistSorting": "sidebar playlist sorting", - "sidebarPlaylistListFilterRegex_description": "hide playlists in the sidebar that match this regular expression", - "sidebarPlaylistListFilterRegex_placeholder": "e.g. ^Daily Mix.*", - "sidebarPlaylistListFilterRegex": "playlist filter regex", - "sidePlayQueueStyle_description": "sets the style of the side play queue", - "sidePlayQueueStyle_optionAttached": "attached", - "sidePlayQueueStyle_optionDetached": "detached", - "sidePlayQueueLayout": "side play queue layout", - "sidePlayQueueLayout_description": "sets the layout of the attached side play queue", - "sidePlayQueueLayout_optionHorizontal": "horizontal", - "sidePlayQueueLayout_optionVertical": "vertical", - "mediaSession_description": "enables Media Session integration, displaying media controls and metadata in the system volume overlay and lock screen", - "mediaSession": "enable media session", - "sidePlayQueueStyle": "side play queue style", - "skipDuration_description": "sets the duration to skip when using the skip buttons on the player bar", - "skipDuration": "skip duration", - "skipPlaylistPage_description": "when navigating to a playlist, go to the playlist song list page instead of the default page", - "skipPlaylistPage": "skip playlist page", - "startMinimized_description": "start the application in system tray", - "startMinimized": "start minimized", - "theme_description": "sets the theme to use for the application", - "theme": "theme", - "themeDark_description": "sets the dark theme to use for the application", - "themeDark": "theme (dark)", - "themeLight_description": "sets the light theme to use for the application", - "themeLight": "theme (light)", - "transcode": "enable transcoding", - "transcode_description": "enables transcoding to different formats", - "transcodeBitrate_description": "selects the bitrate to transcode. 0 means let the server pick", - "transcodeBitrate": "bitrate to transcode", - "transcodeFormat_description": "selects the format to transcode. leave empty to let the server decide", - "transcodeFormat": "format to transcode", - "translationApiKey_description": "api key for translation (global service endpoint only)", - "translationApiKey": "translation api key", - "translationApiProvider_description": "api provider for translation", - "translationApiProvider": "translation api provider", - "translationTargetLanguage_description": "target language for translation", - "translationTargetLanguage": "translation target language", - "trayEnabled_description": "show/hide tray icon/menu. if disabled, also disables minimize/exit to tray", - "trayEnabled": "show tray", - "useSystemTheme_description": "follow the system-defined light or dark preference", - "useSystemTheme": "use system theme", - "volumeWheelStep_description": "the amount of volume to change when scrolling the mouse wheel on the volume slider", - "volumeWheelStep": "volume wheel step", - "volumeWidth_description": "the width of the volume slider", - "volumeWidth": "volume slider width", - "waveformLoadingDelay": "waveform loading delay", - "waveformLoadingDelay_description": "delay in seconds before loading waveform. increase this value if you are experiencing stutters when using the web player.", - "webAudio_description": "use web audio. this enables advanced features like replaygain. disable if you experience otherwise", - "webAudio": "use web audio", - "windowBarStyle_description": "select the style of the window bar", - "windowBarStyle": "window bar style", - "zoom_description": "sets the zoom percentage for the application", - "zoom": "zoom percentage", - "queryBuilder": "query builder", - "queryBuilderCustomFields_inputLabel": "label", - "queryBuilderCustomFields_inputTag": "tag", - "queryBuilderCustomFields": "custom fields", - "queryBuilderCustomFields_description": "add custom fields to use in query builders" + "replayGainMode": "{{ReplayGain}} Mode", + "replayGainPreamp_description": "Adjust the preamp gain applied to the {{ReplayGain}} values", + "replayGainPreamp": "{{ReplayGain}} Preamp (db)", + "sampleRate_description": "Select the output sample rate to be used if the sample frequency selected is different from that of the current media. A value less than 8000 will use the default frequency", + "sampleRate": "Sample Rate", + "savePlayQueue_description": "Save the play queue when the application is closed and restore it when the application is opened", + "savePlayQueue": "Save Play Queue", + "scrobble_description": "Scrobble plays to your media server", + "scrobble": "Scrobble", + "showSkipButton_description": "Show or hide the skip buttons on the player bar", + "showSkipButton": "Show Skip Buttons", + "showSkipButtons_description": "Show or hide the skip buttons on the player bar", + "showSkipButtons": "Show Skip Buttons", + "sidebarCollapsedNavigation_description": "Show or hide the navigation in the collapsed sidebar", + "sidebarCollapsedNavigation": "Sidebar (collapsed) Navigation", + "sidebarConfiguration_description": "Select the items and order in which they appear in the sidebar", + "sidebarConfiguration": "Sidebar Configuration", + "playerItemConfiguration_description": "Configure what items are shown, and in what order, on the fullscreen player", + "playerItemConfiguration": "Player Item Configuration", + "sidebarPlaylistList_description": "Show or hide the playlist list in the sidebar", + "sidebarPlaylistList": "Sidebar Playlist List", + "sidebarPlaylistSorting_description": "Allows manual playlist sorting in the sidebar using drag and drop instead of the default server order", + "sidebarPlaylistSorting": "Sidebar Playlist Sorting", + "sidebarPlaylistListFilterRegex_description": "Hide playlists in the sidebar that match this regular expression", + "sidebarPlaylistListFilterRegex_placeholder": "E.g. ^daily Mix.*", + "sidebarPlaylistListFilterRegex": "Playlist Filter Regex", + "sidePlayQueueStyle_description": "Sets the style of the side play queue", + "sidePlayQueueStyle_optionAttached": "Attached", + "sidePlayQueueStyle_optionDetached": "Detached", + "sidePlayQueueLayout": "Side Play Queue Layout", + "sidePlayQueueLayout_description": "Sets the layout of the attached side play queue", + "sidePlayQueueLayout_optionHorizontal": "Horizontal", + "sidePlayQueueLayout_optionVertical": "Vertical", + "mediaSession_description": "Enables media session integration, displaying media controls and metadata in the system volume overlay and lock screen", + "mediaSession": "Enable Media Session", + "sidePlayQueueStyle": "Side Play Queue Style", + "skipDuration_description": "Sets the duration to skip when using the skip buttons on the player bar", + "skipDuration": "Skip Duration", + "skipPlaylistPage_description": "When navigating to a playlist, go to the playlist song list page instead of the default page", + "skipPlaylistPage": "Skip Playlist Page", + "startMinimized_description": "Start the application in system tray", + "startMinimized": "Start Minimized", + "theme_description": "Sets the theme to use for the application", + "theme": "Theme", + "themeDark_description": "Sets the dark theme to use for the application", + "themeDark": "Theme (dark)", + "themeLight_description": "Sets the light theme to use for the application", + "themeLight": "Theme (light)", + "transcode": "Enable Transcoding", + "transcode_description": "Enables transcoding to different formats", + "transcodeBitrate_description": "Selects the bitrate to transcode. 0 means let the server pick", + "transcodeBitrate": "Bitrate To Transcode", + "transcodeFormat_description": "Selects the format to transcode. Leave empty to let the server decide", + "transcodeFormat": "Format To Transcode", + "translationApiKey_description": "Api key for translation (global service endpoint only)", + "translationApiKey": "Translation API Key", + "translationApiProvider_description": "Api provider for translation", + "translationApiProvider": "Translation API provider", + "translationTargetLanguage_description": "Target language for translation", + "translationTargetLanguage": "Translation Target Language", + "trayEnabled_description": "Show/hide tray icon/menu. If disabled, also disables minimize/exit to tray", + "trayEnabled": "Show Tray", + "useSystemTheme_description": "Follow the system-defined light or dark preference", + "useSystemTheme": "Use System Theme", + "volumeWheelStep_description": "The amount of volume to change when scrolling the mouse wheel on the volume slider", + "volumeWheelStep": "Volume Wheel Step", + "volumeWidth_description": "The width of the volume slider", + "volumeWidth": "Volume Slider Width", + "waveformLoadingDelay": "Waveform Loading Delay", + "waveformLoadingDelay_description": "Delay in seconds before loading waveform. Increase this value if you are experiencing stutters when using the web player.", + "webAudio_description": "Use web audio. This enables advanced features like replaygain. Disable if you experience otherwise", + "webAudio": "Use Web Audio", + "windowBarStyle_description": "Select the style of the window bar", + "windowBarStyle": "Window Bar Style", + "zoom_description": "Sets the zoom percentage for the application", + "zoom": "Zoom Percentage", + "queryBuilder": "Query Builder", + "queryBuilderCustomFields_inputLabel": "Label", + "queryBuilderCustomFields_inputTag": "Tag", + "queryBuilderCustomFields": "Custom Fields", + "queryBuilderCustomFields_description": "Add custom fields to use in query builders" }, "table": { "column": { @@ -1136,41 +1136,41 @@ }, "config": { "general": { - "advancedSettings": "advanced settings", - "autoFitColumns": "auto fit columns", - "autosize": "autosize", - "moveUp": "move up", - "moveDown": "move down", - "pinToLeft": "pin to left", - "pinToRight": "pin to right", - "alignLeft": "align left", - "alignCenter": "align center", - "alignRight": "align right", - "followCurrentSong": "follow current song", - "displayType": "display type", + "advancedSettings": "Advanced Settings", + "autoFitColumns": "Auto Fit Columns", + "autosize": "Autosize", + "moveUp": "Move Up", + "moveDown": "Move Down", + "pinToLeft": "Pin To Left", + "pinToRight": "Pin To Right", + "alignLeft": "Align Left", + "alignCenter": "Align Center", + "alignRight": "Align Right", + "followCurrentSong": "Follow Current Song", + "displayType": "Display Type", "gap": "$t(common.gap)", - "itemGap": "item gap (px)", - "itemSize": "item size (px)", - "itemsPerRow": "items per row", + "itemGap": "Item Gap (px)", + "itemSize": "Item Size (px)", + "itemsPerRow": "Items Per Row", "size": "$t(common.size)", - "size_default": "default", - "size_compact": "compact", - "size_large": "large", - "tableColumns": "table columns", - "pagination": "pagination", - "pagination_itemsPerPage": "items per page", - "pagination_infinite": "infinite", - "pagination_paginate": "paginated", - "alternateRowColors": "alternate row colors", - "horizontalBorders": "row borders", - "rowHoverHighlight": "row hover highlight", - "showHeader": "show header", - "verticalBorders": "column borders" + "size_default": "Default", + "size_compact": "Compact", + "size_large": "Large", + "tableColumns": "Table Columns", + "pagination": "Pagination", + "pagination_itemsPerPage": "Items Per Page", + "pagination_infinite": "Infinite", + "pagination_paginate": "Paginated", + "alternateRowColors": "Alternate Row Colors", + "horizontalBorders": "Row Borders", + "rowHoverHighlight": "Row Hover Highlight", + "showHeader": "Show Header", + "verticalBorders": "Column Borders" }, "label": { "actions": "$t(common.action, {\"count\": 2})", "album": "$t(entity.album, {\"count\": 1})", - "albumGroup": "album group", + "albumGroup": "Album Group", "albumCount": "$t(entity.album, {\"count\": 2})", "albumArtist": "$t(entity.albumArtist, {\"count\": 1})", "artist": "$t(entity.artist, {\"count\": 1})", @@ -1180,43 +1180,43 @@ "bpm": "$t(common.bpm)", "channels": "$t(common.channel, {\"count\": 2})", "codec": "$t(common.codec)", - "composer": "composer", - "dateAdded": "date added", - "discNumber": "disc number", + "composer": "Composer", + "dateAdded": "Date Added", + "discNumber": "Disc Number", "duration": "$t(common.duration)", "favorite": "$t(common.favorite)", "genre": "$t(entity.genre, {\"count\": 1})", "genreBadge": "$t(entity.genre, {\"count\": 1}) (badges)", - "image": "image", - "lastPlayed": "last played", + "image": "Image", + "lastPlayed": "Last Played", "note": "$t(common.note)", "owner": "$t(common.owner)", "path": "$t(common.path)", - "playCount": "play count", + "playCount": "Play Count", "rating": "$t(common.rating)", - "releaseDate": "release date", - "rowIndex": "row index", + "releaseDate": "Release Date", + "rowIndex": "Row Index", "sampleRate": "$t(common.sampleRate)", "size": "$t(common.size)", "songCount": "$t(entity.track, {\"count\": 2})", "title": "$t(common.title)", "titleArtist": "$t(common.title) (artist)", "titleCombined": "$t(common.title) (combined)", - "trackNumber": "track number", + "trackNumber": "Track Number", "year": "$t(common.year)" }, "view": { - "detail": "detail", - "grid": "grid", - "list": "list", - "table": "table" + "detail": "Detail", + "grid": "Grid", + "list": "List", + "table": "Table" } } }, "dragDropZone": { "error_oneFileOnly": "Please only select 1 file", - "error_readingFile": "there has been an issue reading the file: {{errorMessage}}", - "mainText": "drop a file here" + "error_readingFile": "There has been an issue reading the file: {{errorMessage}}", + "mainText": "Drop A File Here" }, "visualizer": { "systemAudioConsentAllow": "Allow", diff --git a/src/renderer/api/controller.ts b/src/renderer/api/controller.ts index 14d290620..b735d5272 100644 --- a/src/renderer/api/controller.ts +++ b/src/renderer/api/controller.ts @@ -34,10 +34,8 @@ const apiController = ( if (!serverType) { toast.error({ - message: i18n.t('error.serverNotSelectedError', { - postProcess: 'sentenceCase', - }) as string, - title: i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' }) as string, + message: i18n.t('error.serverNotSelectedError') as string, + title: i18n.t('error.apiRouteError') as string, }); throw new Error(`No server selected`); } @@ -47,13 +45,13 @@ const apiController = ( if (typeof controllerFn !== 'function') { toast.error({ message: `Endpoint ${endpoint} is not implemented for ${serverType}`, - title: i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' }) as string, + title: i18n.t('error.apiRouteError') as string, }); throw new Error( i18n.t('error.endpointNotImplementedError', { endpoint, - postProcess: 'sentenceCase', + serverType, }) as string, ); @@ -92,9 +90,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: addToPlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: addToPlaylist`); } return apiController( @@ -109,9 +105,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: createFavorite`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: createFavorite`); } return apiController( @@ -123,9 +117,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: createInternetRadioStation`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: createInternetRadioStation`); } return apiController( @@ -137,9 +129,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: createPlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: createPlaylist`); } return apiController( @@ -151,9 +141,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deleteArtistImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deleteArtistImage`); } return apiController( @@ -165,9 +153,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deleteFavorite`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deleteFavorite`); } return apiController( @@ -179,9 +165,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deleteInternetRadioStation`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deleteInternetRadioStation`); } return apiController( @@ -193,9 +177,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deleteInternetRadioStationImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deleteInternetRadioStationImage`); } return apiController( @@ -207,9 +189,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deletePlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deletePlaylist`); } return apiController( @@ -221,9 +201,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: deletePlaylistImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: deletePlaylistImage`); } return apiController( @@ -235,9 +213,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumArtistDetail`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumArtistDetail`); } return apiController( @@ -261,9 +237,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumArtistList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumArtistList`); } return apiController( @@ -281,9 +255,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumArtistListCount`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumArtistListCount`); } return apiController( @@ -301,9 +273,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumDetail`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumDetail`); } return apiController( @@ -315,9 +285,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumInfo`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumInfo`); } return apiController( @@ -329,9 +297,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumList`); } return apiController( @@ -349,9 +315,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumListCount`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumListCount`); } return apiController( @@ -369,9 +333,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getAlbumRadio`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getAlbumRadio`); } return apiController( @@ -383,9 +345,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getArtistList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getArtistList`); } return apiController( @@ -403,9 +363,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getArtistListCount`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getArtistListCount`); } return apiController( @@ -423,9 +381,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getArtistRadio`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getArtistRadio`); } return apiController( @@ -437,9 +393,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getDownloadUrl`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getDownloadUrl`); } return apiController( @@ -451,9 +405,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getFolder`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getFolder`); } return apiController( @@ -471,9 +423,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getGenreList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getGenreList`); } return apiController( @@ -529,9 +479,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getInternetRadioStations`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getInternetRadioStations`); } return apiController( 'getInternetRadioStations', @@ -542,9 +490,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getLyrics`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getLyrics`); } return apiController( @@ -556,9 +502,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getMusicFolderList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getMusicFolderList`); } return apiController( @@ -570,9 +514,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getPlaylistDetail`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getPlaylistDetail`); } return apiController( @@ -584,9 +526,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getPlaylistList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getPlaylistList`); } return apiController( @@ -598,9 +538,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getPlaylistListCount`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getPlaylistListCount`); } return apiController( @@ -612,9 +550,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getPlaylistSongList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getPlaylistSongList`); } return apiController( @@ -626,9 +562,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getPlayQueue`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getPlayQueue`); } return apiController( @@ -640,9 +574,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getRandomSongList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getRandomSongList`); } return apiController( @@ -660,9 +592,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getRoles`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getRoles`); } return apiController( @@ -674,9 +604,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getServerInfo`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getServerInfo`); } return apiController( @@ -688,9 +616,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getSimilarSongs`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getSimilarSongs`); } return apiController( @@ -708,9 +634,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getSongDetail`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getSongDetail`); } return apiController( @@ -722,9 +646,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getSongList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getSongList`); } return apiController( @@ -742,9 +664,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getSongListCount`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getSongListCount`); } return apiController( @@ -762,9 +682,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getStreamUrl`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getStreamUrl`); } return apiController( @@ -776,9 +694,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getStructuredLyrics`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getStructuredLyrics`); } return apiController( @@ -790,9 +706,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getTags`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getTags`); } return apiController( @@ -804,9 +718,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getTopSongs`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getTopSongs`); } return apiController( @@ -818,9 +730,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getUserInfo`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getUserInfo`); } return apiController( @@ -832,9 +742,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: getUserList`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: getUserList`); } return apiController( @@ -846,9 +754,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: movePlaylistItem`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: movePlaylistItem`); } return apiController( @@ -860,9 +766,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: removeFromPlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: removeFromPlaylist`); } return apiController( @@ -874,9 +778,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: replacePlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: replacePlaylist`); } return apiController( @@ -888,9 +790,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: savePlayQueue`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: savePlayQueue`); } return apiController( @@ -902,9 +802,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: scrobble`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: scrobble`); } return apiController( @@ -916,9 +814,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: search`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: search`); } return apiController( @@ -936,9 +832,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: setPlaylistSongs`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: setPlaylistSongs`); } return apiController( @@ -950,9 +844,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: setRating`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: setRating`); } return apiController( @@ -964,9 +856,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: shareItem`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: shareItem`); } return apiController( @@ -978,9 +868,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: updateInternetRadioStation`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: updateInternetRadioStation`); } return apiController( @@ -992,9 +880,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: updatePlaylist`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: updatePlaylist`); } return apiController( @@ -1006,9 +892,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: uploadArtistImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: uploadArtistImage`); } return apiController( @@ -1020,9 +904,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: uploadInternetRadioStationImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: uploadInternetRadioStationImage`); } return apiController( @@ -1034,9 +916,7 @@ export const controller: GeneralController = { const server = getServerById(args.apiClientProps.serverId); if (!server) { - throw new Error( - `${i18n.t('error.apiRouteError', { postProcess: 'sentenceCase' })}: uploadPlaylistImage`, - ); + throw new Error(`${i18n.t('error.apiRouteError')}: uploadPlaylistImage`); } return apiController( diff --git a/src/renderer/api/jellyfin/jellyfin-api.ts b/src/renderer/api/jellyfin/jellyfin-api.ts index 4d1d2f5a0..04ba25041 100644 --- a/src/renderer/api/jellyfin/jellyfin-api.ts +++ b/src/renderer/api/jellyfin/jellyfin-api.ts @@ -447,11 +447,7 @@ export const jfApiClient = (args: { } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { - throw new Error( - i18n.t('error.networkError', { - postProcess: 'sentenceCase', - }) as string, - ); + throw new Error(i18n.t('error.networkError') as string); } const error = e as AxiosError; diff --git a/src/renderer/api/navidrome/navidrome-api.ts b/src/renderer/api/navidrome/navidrome-api.ts index 2bbdf7cc1..4fe06d0f7 100644 --- a/src/renderer/api/navidrome/navidrome-api.ts +++ b/src/renderer/api/navidrome/navidrome-api.ts @@ -405,12 +405,8 @@ axiosClient.interceptors.response.use( if (res.status === 429) { toast.error({ - message: i18n.t('error.loginRateError', { - postProcess: 'sentenceCase', - }) as string, - title: i18n.t('error.sessionExpiredError', { - postProcess: 'sentenceCase', - }) as string, + message: i18n.t('error.loginRateError') as string, + title: i18n.t('error.sessionExpiredError') as string, }); const serverId = currentServer.id; @@ -425,11 +421,7 @@ axiosClient.interceptors.response.use( throw TIMEOUT_ERROR; } if (res.status !== 200) { - throw new Error( - i18n.t('error.authenticatedFailed', { - postProcess: 'sentenceCase', - }) as string, - ); + throw new Error(i18n.t('error.authenticatedFailed') as string); } const newCredential = res.data.token; @@ -522,11 +514,7 @@ export const ndApiClient = (args: { } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { - throw new Error( - i18n.t('error.networkError', { - postProcess: 'sentenceCase', - }) as string, - ); + throw new Error(i18n.t('error.networkError') as string); } const error = e as AxiosError; diff --git a/src/renderer/api/subsonic/subsonic-api.ts b/src/renderer/api/subsonic/subsonic-api.ts index 256f3c4f3..7948a9861 100644 --- a/src/renderer/api/subsonic/subsonic-api.ts +++ b/src/renderer/api/subsonic/subsonic-api.ts @@ -361,7 +361,7 @@ axiosClient.interceptors.response.use( if (data['subsonic-response'].error.code !== 0) { toast.error({ message: data['subsonic-response'].error.message, - title: i18n.t('error.genericError', { postProcess: 'sentenceCase' }) as string, + title: i18n.t('error.genericError') as string, }); // Since we do status === 200, override this value with the error code @@ -523,11 +523,7 @@ export const ssApiClient = (args: { } catch (e: any | AxiosError | Error) { if (isAxiosError(e)) { if (e.code === 'ERR_NETWORK') { - throw new Error( - i18n.t('error.networkError', { - postProcess: 'sentenceCase', - }) as string, - ); + throw new Error(i18n.t('error.networkError') as string); } const error = e as AxiosError; diff --git a/src/renderer/components/item-list/item-table-list/columns/playlist-reorder-column.tsx b/src/renderer/components/item-list/item-table-list/columns/playlist-reorder-column.tsx index cf01ccc52..aa6454b37 100644 --- a/src/renderer/components/item-list/item-table-list/columns/playlist-reorder-column.tsx +++ b/src/renderer/components/item-list/item-table-list/columns/playlist-reorder-column.tsx @@ -313,12 +313,10 @@ const PlaylistReorderColumnBase = (props: ItemTableListInnerColumn) => { <> - {t('action.moveUp', { postProcess: 'sentenceCase' })} + {t('action.moveUp')} - {t('action.holdToMoveToTop', { - postProcess: 'sentenceCase', - })} + {t('action.holdToMoveToTop')} @@ -336,12 +334,10 @@ const PlaylistReorderColumnBase = (props: ItemTableListInnerColumn) => { <> - {t('action.moveDown', { postProcess: 'sentenceCase' })} + {t('action.moveDown')} - {t('action.holdToMoveToBottom', { - postProcess: 'sentenceCase', - })} + {t('action.holdToMoveToBottom')} diff --git a/src/renderer/components/item-list/item-table-list/default-columns.ts b/src/renderer/components/item-list/item-table-list/default-columns.ts index 7cbc7ca6e..cad4cd720 100644 --- a/src/renderer/components/item-list/item-table-list/default-columns.ts +++ b/src/renderer/components/item-list/item-table-list/default-columns.ts @@ -17,7 +17,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.albumGroup', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.albumGroup'), pinned: 'left', value: TableColumn.ALBUM_GROUP, width: 200, @@ -26,7 +26,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.rowIndex', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rowIndex'), pinned: null, value: TableColumn.ROW_INDEX, width: 60, @@ -35,7 +35,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.image', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.image'), pinned: null, value: TableColumn.IMAGE, width: 70, @@ -44,7 +44,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.title', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.title'), pinned: null, value: TableColumn.TITLE, width: 300, @@ -53,7 +53,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.titleCombined', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.titleCombined'), pinned: null, value: TableColumn.TITLE_COMBINED, width: 300, @@ -62,7 +62,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.titleArtist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.titleArtist'), pinned: null, value: TableColumn.TITLE_ARTIST, width: 300, @@ -71,7 +71,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.duration', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.duration'), pinned: null, value: TableColumn.DURATION, width: 100, @@ -80,7 +80,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.album', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.album'), pinned: null, value: TableColumn.ALBUM, width: 300, @@ -89,7 +89,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: true, isEnabled: false, - label: i18n.t('table.config.label.albumArtist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.albumArtist'), pinned: null, value: TableColumn.ALBUM_ARTIST, width: 300, @@ -98,7 +98,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.artist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.artist'), pinned: null, value: TableColumn.ARTIST, width: 300, @@ -107,7 +107,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.composer', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.composer'), pinned: null, value: TableColumn.COMPOSER, width: 300, @@ -116,7 +116,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.genre', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.genre'), pinned: null, value: TableColumn.GENRE, width: 300, @@ -125,7 +125,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.genreBadge', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.genreBadge'), pinned: null, value: TableColumn.GENRE_BADGE, width: 300, @@ -134,7 +134,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.year', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.year'), pinned: null, value: TableColumn.YEAR, width: 200, @@ -143,7 +143,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.releaseDate', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.releaseDate'), pinned: null, value: TableColumn.RELEASE_DATE, width: 240, @@ -152,7 +152,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.discNumber', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.discNumber'), pinned: null, value: TableColumn.DISC_NUMBER, width: 100, @@ -161,7 +161,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.trackNumber', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.trackNumber'), pinned: null, value: TableColumn.TRACK_NUMBER, width: 100, @@ -170,7 +170,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.bitDepth', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.bitDepth'), pinned: null, value: TableColumn.BIT_DEPTH, width: 100, @@ -179,7 +179,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.bitrate', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.bitrate'), pinned: null, value: TableColumn.BIT_RATE, width: 100, @@ -188,7 +188,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.codec', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.codec'), pinned: null, value: TableColumn.CODEC, width: 100, @@ -197,7 +197,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.sampleRate', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.sampleRate'), pinned: null, value: TableColumn.SAMPLE_RATE, width: 100, @@ -206,7 +206,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.lastPlayed', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.lastPlayed'), pinned: null, value: TableColumn.LAST_PLAYED, width: 150, @@ -215,7 +215,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.note', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.note'), pinned: null, value: TableColumn.COMMENT, width: 300, @@ -224,7 +224,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.channels', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.channels'), pinned: null, value: TableColumn.CHANNELS, width: 100, @@ -233,7 +233,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.bpm', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.bpm'), pinned: null, value: TableColumn.BPM, width: 100, @@ -242,7 +242,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.dateAdded', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.dateAdded'), pinned: null, value: TableColumn.DATE_ADDED, width: 120, @@ -251,7 +251,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.path', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.path'), pinned: null, value: TableColumn.PATH, width: 300, @@ -260,7 +260,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.playCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.playCount'), pinned: null, value: TableColumn.PLAY_COUNT, width: 100, @@ -269,7 +269,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.size', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.size'), pinned: null, value: TableColumn.SIZE, width: 100, @@ -278,7 +278,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.favorite', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.favorite'), pinned: null, value: TableColumn.USER_FAVORITE, width: 60, @@ -287,7 +287,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.rating', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rating'), pinned: null, value: TableColumn.USER_RATING, width: 100, @@ -296,7 +296,7 @@ export const SONG_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.actions', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.actions'), pinned: null, value: TableColumn.ACTIONS, width: 60, @@ -310,7 +310,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.rowIndex', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rowIndex'), pinned: null, value: TableColumn.ROW_INDEX, width: 60, @@ -319,7 +319,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.image', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.image'), pinned: null, value: TableColumn.IMAGE, width: 70, @@ -328,7 +328,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.title', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.title'), pinned: null, value: TableColumn.TITLE, width: 300, @@ -337,7 +337,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.titleCombined', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.titleCombined'), pinned: null, value: TableColumn.TITLE_COMBINED, width: 300, @@ -346,7 +346,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.titleArtist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.titleArtist'), pinned: null, value: TableColumn.TITLE_ARTIST, width: 300, @@ -355,7 +355,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.duration', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.duration'), pinned: null, value: TableColumn.DURATION, width: 100, @@ -364,7 +364,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: true, isEnabled: false, - label: i18n.t('table.config.label.albumArtist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.albumArtist'), pinned: null, value: TableColumn.ALBUM_ARTIST, width: 300, @@ -373,7 +373,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.artist', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.artist'), pinned: null, value: TableColumn.ARTIST, width: 300, @@ -382,7 +382,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.composer', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.composer'), pinned: null, value: TableColumn.COMPOSER, width: 300, @@ -391,7 +391,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.songCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.songCount'), pinned: null, value: TableColumn.SONG_COUNT, width: 100, @@ -400,7 +400,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.genre', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.genre'), pinned: null, value: TableColumn.GENRE, width: 300, @@ -409,7 +409,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.genreBadge', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.genreBadge'), pinned: null, value: TableColumn.GENRE_BADGE, width: 300, @@ -418,7 +418,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.year', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.year'), pinned: null, value: TableColumn.YEAR, width: 200, @@ -427,7 +427,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.releaseDate', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.releaseDate'), pinned: null, value: TableColumn.RELEASE_DATE, width: 240, @@ -436,7 +436,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.lastPlayed', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.lastPlayed'), pinned: null, value: TableColumn.LAST_PLAYED, width: 150, @@ -445,7 +445,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.dateAdded', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.dateAdded'), pinned: null, value: TableColumn.DATE_ADDED, width: 120, @@ -454,7 +454,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.playCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.playCount'), pinned: null, value: TableColumn.PLAY_COUNT, width: 100, @@ -463,7 +463,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.favorite', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.favorite'), pinned: null, value: TableColumn.USER_FAVORITE, width: 60, @@ -472,7 +472,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.rating', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rating'), pinned: null, value: TableColumn.USER_RATING, width: 100, @@ -481,7 +481,7 @@ export const ALBUM_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.actions', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.actions'), pinned: null, value: TableColumn.ACTIONS, width: 60, @@ -493,7 +493,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.rowIndex', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rowIndex'), pinned: null, value: TableColumn.ROW_INDEX, width: 60, @@ -502,7 +502,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.image', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.image'), pinned: null, value: TableColumn.IMAGE, width: 70, @@ -511,7 +511,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.title', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.title'), pinned: null, value: TableColumn.TITLE, width: 300, @@ -520,7 +520,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.duration', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.duration'), pinned: null, value: TableColumn.DURATION, width: 100, @@ -529,7 +529,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.biography', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.biography'), pinned: null, value: TableColumn.BIOGRAPHY, width: 300, @@ -538,7 +538,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.genre', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.genre'), pinned: null, value: TableColumn.GENRE, width: 300, @@ -547,7 +547,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.lastPlayed', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.lastPlayed'), pinned: null, value: TableColumn.LAST_PLAYED, width: 150, @@ -556,7 +556,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.playCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.playCount'), pinned: null, value: TableColumn.PLAY_COUNT, width: 100, @@ -565,7 +565,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('filter.albumCount', { postProcess: 'titleCase' }), + label: i18n.t('filter.albumCount'), pinned: null, value: TableColumn.ALBUM_COUNT, width: 100, @@ -574,7 +574,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.songCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.songCount'), pinned: null, value: TableColumn.SONG_COUNT, width: 100, @@ -583,7 +583,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.favorite', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.favorite'), pinned: null, value: TableColumn.USER_FAVORITE, width: 60, @@ -592,7 +592,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.rating', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rating'), pinned: null, value: TableColumn.USER_RATING, width: 100, @@ -601,7 +601,7 @@ export const ALBUM_ARTIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.actions', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.actions'), pinned: null, value: TableColumn.ACTIONS, width: 60, @@ -613,7 +613,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.rowIndex', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rowIndex'), pinned: null, value: TableColumn.ROW_INDEX, width: 60, @@ -622,7 +622,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.image', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.image'), pinned: null, value: TableColumn.IMAGE, width: 70, @@ -631,7 +631,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.title', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.title'), pinned: null, value: TableColumn.TITLE, width: 300, @@ -640,7 +640,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.titleCombined', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.titleCombined'), pinned: null, value: TableColumn.TITLE_COMBINED, width: 300, @@ -649,7 +649,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.duration', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.duration'), pinned: null, value: TableColumn.DURATION, width: 100, @@ -658,7 +658,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.owner', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.owner'), pinned: null, value: TableColumn.OWNER, width: 150, @@ -667,7 +667,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.songCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.songCount'), pinned: null, value: TableColumn.SONG_COUNT, width: 100, @@ -676,7 +676,7 @@ export const PLAYLIST_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.actions', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.actions'), pinned: null, value: TableColumn.ACTIONS, width: 60, @@ -688,7 +688,7 @@ export const GENRE_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.rowIndex', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.rowIndex'), pinned: null, value: TableColumn.ROW_INDEX, width: 60, @@ -697,7 +697,7 @@ export const GENRE_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'start', autoSize: true, isEnabled: true, - label: i18n.t('table.config.label.title', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.title'), pinned: null, value: TableColumn.TITLE, width: 300, @@ -706,7 +706,7 @@ export const GENRE_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.songCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.songCount'), pinned: null, value: TableColumn.SONG_COUNT, width: 100, @@ -715,7 +715,7 @@ export const GENRE_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: true, - label: i18n.t('table.config.label.albumCount', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.albumCount'), pinned: null, value: TableColumn.ALBUM_COUNT, width: 100, @@ -724,7 +724,7 @@ export const GENRE_TABLE_COLUMNS: DefaultTableColumn[] = [ align: 'center', autoSize: false, isEnabled: false, - label: i18n.t('table.config.label.actions', { postProcess: 'titleCase' }), + label: i18n.t('table.config.label.actions'), pinned: null, value: TableColumn.ACTIONS, width: 60, diff --git a/src/renderer/components/item-list/selection-dialog.tsx b/src/renderer/components/item-list/selection-dialog.tsx index 203fd0ac7..3ccce7291 100644 --- a/src/renderer/components/item-list/selection-dialog.tsx +++ b/src/renderer/components/item-list/selection-dialog.tsx @@ -22,17 +22,17 @@ const controls = [ { control1: CTRL, control2: A, - label: i18n.t('action.selectAll', { postProcess: 'sentenceCase' }), + label: i18n.t('action.selectAll'), }, { control1: CTRL, control2: , - label: i18n.t('action.addOrRemoveFromSelection', { postProcess: 'sentenceCase' }), + label: i18n.t('action.addOrRemoveFromSelection'), }, { control1: SHIFT, control2: , - label: i18n.t('action.selectRangeOfItems', { postProcess: 'sentenceCase' }), + label: i18n.t('action.selectRangeOfItems'), }, ]; diff --git a/src/renderer/components/query-builder/index.tsx b/src/renderer/components/query-builder/index.tsx index cb0684605..5097300e0 100644 --- a/src/renderer/components/query-builder/index.tsx +++ b/src/renderer/components/query-builder/index.tsx @@ -79,14 +79,12 @@ export const QueryBuilder = ({ { label: t('form.queryEditor.input', { context: 'optionMatchAll', - postProcess: 'sentenceCase', }), value: 'all', }, { label: t('form.queryEditor.input', { context: 'optionMatchAny', - postProcess: 'sentenceCase', }), value: 'any', }, @@ -146,9 +144,7 @@ export const QueryBuilder = ({ leftSection={} onClick={handleAddRuleGroup} > - {t('form.queryEditor.addRuleGroup', { - postProcess: 'sentenceCase', - })} + {t('form.queryEditor.addRuleGroup')} {level > 0 && ( @@ -156,9 +152,7 @@ export const QueryBuilder = ({ leftSection={} onClick={handleDeleteRuleGroup} > - {t('form.queryEditor.removeRuleGroup', { - postProcess: 'sentenceCase', - })} + {t('form.queryEditor.removeRuleGroup')} )} {level === 0 && ( @@ -169,18 +163,14 @@ export const QueryBuilder = ({ leftSection={} onClick={onResetFilters} > - {t('form.queryEditor.resetToDefault', { - postProcess: 'sentenceCase', - })} + {t('form.queryEditor.resetToDefault')} } onClick={onClearFilters} > - {t('form.queryEditor.clearFilters', { - postProcess: 'sentenceCase', - })} + {t('form.queryEditor.clearFilters')} )} diff --git a/src/renderer/components/select-with-invalid-data/index.tsx b/src/renderer/components/select-with-invalid-data/index.tsx index 9149cf8c4..4bb4cb07a 100644 --- a/src/renderer/components/select-with-invalid-data/index.tsx +++ b/src/renderer/components/select-with-invalid-data/index.tsx @@ -28,11 +28,7 @@ export const SelectWithInvalidData = ({ data, defaultValue, ...props }: SelectPr { setStore({ played: e as Played }); }} @@ -191,7 +191,7 @@ export const openShuffleAllModal = async () => { innerProps: {}, modal: 'shuffleAll', size: 'sm', - title: i18n.t('player.playRandom', { postProcess: 'sentenceCase' }) as string, + title: i18n.t('player.playRandom') as string, }); }; @@ -221,7 +221,7 @@ const GenreSelect = () => { handleSortFieldChange(index, value || '') } @@ -588,13 +580,7 @@ export const PlaylistQueryBuilder = forwardRef( /> { ), description: t('setting.gaplessAudio', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: settings.type !== PlayerType.LOCAL, - title: t('setting.gaplessAudio', { postProcess: 'sentenceCase' }), + title: t('setting.gaplessAudio'), }, { control: ( @@ -234,10 +225,9 @@ export const MpvSettings = memo(() => { ), description: t('setting.sampleRate', { context: 'description', - postProcess: 'sentenceCase', }), note: 'Page refresh required for web player', - title: t('setting.sampleRate', { postProcess: 'sentenceCase' }), + title: t('setting.sampleRate'), }, { control: ( @@ -254,10 +244,9 @@ export const MpvSettings = memo(() => { description: t('setting.audioExclusiveMode', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: settings.type !== PlayerType.LOCAL, - title: t('setting.audioExclusiveMode', { postProcess: 'sentenceCase' }), + title: t('setting.audioExclusiveMode'), }, ]; @@ -269,21 +258,18 @@ export const MpvSettings = memo(() => { { label: t('setting.replayGainMode', { context: 'optionNone', - postProcess: 'titleCase', }), value: 'no', }, { label: t('setting.replayGainMode', { context: 'optionTrack', - postProcess: 'titleCase', }), value: 'track', }, { label: t('setting.replayGainMode', { context: 'optionAlbum', - postProcess: 'titleCase', }), value: 'album', }, @@ -294,14 +280,11 @@ export const MpvSettings = memo(() => { ), description: t('setting.replayGainMode', { context: 'description', - postProcess: 'sentenceCase', - ReplayGain: 'ReplayGain', - }), - note: t('common.restartRequired', { postProcess: 'sentenceCase' }), - title: t('setting.replayGainMode', { - postProcess: 'sentenceCase', + ReplayGain: 'ReplayGain', }), + note: t('common.restartRequired'), + title: t('setting.replayGainMode', { ReplayGain: 'ReplayGain' }), }, { control: ( @@ -313,13 +296,10 @@ export const MpvSettings = memo(() => { ), description: t('setting.replayGainMode', { context: 'description', - postProcess: 'sentenceCase', - ReplayGain: 'ReplayGain', - }), - title: t('setting.replayGainPreamp', { - postProcess: 'sentenceCase', + ReplayGain: 'ReplayGain', }), + title: t('setting.replayGainPreamp', { ReplayGain: 'ReplayGain' }), }, { control: ( @@ -332,13 +312,10 @@ export const MpvSettings = memo(() => { ), description: t('setting.replayGainClipping', { context: 'description', - postProcess: 'sentenceCase', - ReplayGain: 'ReplayGain', - }), - title: t('setting.replayGainClipping', { - postProcess: 'sentenceCase', + ReplayGain: 'ReplayGain', }), + title: t('setting.replayGainClipping', { ReplayGain: 'ReplayGain' }), }, { control: ( @@ -350,14 +327,8 @@ export const MpvSettings = memo(() => { width={75} /> ), - description: t('setting.replayGainFallback', { - postProcess: 'sentenceCase', - ReplayGain: 'ReplayGain', - }), - title: t('setting.replayGainFallback', { - postProcess: 'sentenceCase', - ReplayGain: 'ReplayGain', - }), + description: t('setting.replayGainFallback', { ReplayGain: 'ReplayGain' }), + title: t('setting.replayGainFallback', { ReplayGain: 'ReplayGain' }), }, ]; diff --git a/src/renderer/features/settings/components/playback/player-filter-settings.tsx b/src/renderer/features/settings/components/playback/player-filter-settings.tsx index 15243ed56..578a8a631 100644 --- a/src/renderer/features/settings/components/playback/player-filter-settings.tsx +++ b/src/renderer/features/settings/components/playback/player-filter-settings.tsx @@ -37,57 +37,57 @@ type FilterFieldConfig = { const getFilterFields = (t: (key: string, options?: any) => string): FilterFieldConfig[] => [ { - label: t('table.config.label.title', { postProcess: 'titleCase' }), + label: t('table.config.label.title'), type: 'string', value: 'name', }, { - label: t('table.config.label.albumArtist', { postProcess: 'titleCase' }), + label: t('table.config.label.albumArtist'), type: 'string', value: 'albumArtist', }, { - label: t('table.config.label.artist', { postProcess: 'titleCase' }), + label: t('table.config.label.artist'), type: 'string', value: 'artist', }, { - label: t('table.config.label.duration', { postProcess: 'titleCase' }), + label: t('table.config.label.duration'), type: 'number', value: 'duration', }, { - label: t('table.config.label.genre', { postProcess: 'titleCase' }), + label: t('table.config.label.genre'), type: 'string', value: 'genre', }, { - label: t('table.config.label.year', { postProcess: 'titleCase' }), + label: t('table.config.label.year'), type: 'number', value: 'year', }, { - label: t('table.config.label.note', { postProcess: 'titleCase' }), + label: t('table.config.label.note'), type: 'string', value: 'note', }, { - label: t('table.config.label.path', { postProcess: 'titleCase' }), + label: t('table.config.label.path'), type: 'string', value: 'path', }, { - label: t('table.config.label.playCount', { postProcess: 'titleCase' }), + label: t('table.config.label.playCount'), type: 'number', value: 'playCount', }, { - label: t('table.config.label.favorite', { postProcess: 'titleCase' }), + label: t('table.config.label.favorite'), type: 'boolean', value: 'favorite', }, { - label: t('table.config.label.rating', { postProcess: 'titleCase' }), + label: t('table.config.label.rating'), type: 'number', value: 'rating', }, @@ -118,7 +118,7 @@ const getOperatorsForFieldType = ( startsWith: 'filterOperator.startsWith', }; - return t(operatorKeyMap[operator] || operator, { postProcess: 'titleCase' }); + return t(operatorKeyMap[operator] || operator); }; switch (type) { @@ -413,23 +413,17 @@ export const PlayerFilterSettings = memo(() => { )} ), description: t('setting.playerFilters', { context: 'description', - postProcess: 'sentenceCase', }), - title: t('setting.playerFilters', { postProcess: 'sentenceCase' }), + title: t('setting.playerFilters'), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/components/playback/transcode-settings.tsx b/src/renderer/features/settings/components/playback/transcode-settings.tsx index eba5ffb37..6a1456d6a 100644 --- a/src/renderer/features/settings/components/playback/transcode-settings.tsx +++ b/src/renderer/features/settings/components/playback/transcode-settings.tsx @@ -14,7 +14,7 @@ export const TranscodeSettings = memo(() => { const { t } = useTranslation(); const { transcode } = usePlaybackSettings(); const { setTranscodingConfig } = useSettingsStoreActions(); - const note = t('setting.transcodeNote', { postProcess: 'sentenceCase' }); + const note = t('setting.transcodeNote'); const transcodeOptions: SettingOption[] = [ { @@ -32,10 +32,9 @@ export const TranscodeSettings = memo(() => { ), description: t('setting.transcode', { context: 'description', - postProcess: 'sentenceCase', }), note, - title: t('setting.transcode', { postProcess: 'sentenceCase' }), + title: t('setting.transcode'), }, { control: ( @@ -56,11 +55,10 @@ export const TranscodeSettings = memo(() => { ), description: t('setting.transcodeBitrate', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !transcode.enabled, note, - title: t('setting.transcodeBitrate', { postProcess: 'sentenceCase' }), + title: t('setting.transcodeBitrate'), }, { control: ( @@ -79,18 +77,12 @@ export const TranscodeSettings = memo(() => { ), description: t('setting.transcodeFormat', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !transcode.enabled, note, - title: t('setting.transcodeFormat', { postProcess: 'sentenceCase' }), + title: t('setting.transcodeFormat'), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/components/settings-content.tsx b/src/renderer/features/settings/components/settings-content.tsx index 8654a2fc3..b23ec4867 100644 --- a/src/renderer/features/settings/components/settings-content.tsx +++ b/src/renderer/features/settings/components/settings-content.tsx @@ -53,23 +53,13 @@ export const SettingsContent = () => { variant="default" > - - {t('page.setting.generalTab', { postProcess: 'sentenceCase' })} - - - {t('page.setting.playbackTab', { postProcess: 'sentenceCase' })} - - - {t('page.setting.hotkeysTab', { postProcess: 'sentenceCase' })} - + {t('page.setting.generalTab')} + {t('page.setting.playbackTab')} + {t('page.setting.hotkeysTab')} {isElectron() && ( - - {t('page.setting.windowTab', { postProcess: 'sentenceCase' })} - + {t('page.setting.windowTab')} )} - - {t('page.setting.advanced', { postProcess: 'sentenceCase' })} - + {t('page.setting.advanced')} }> diff --git a/src/renderer/features/settings/components/settings-header.tsx b/src/renderer/features/settings/components/settings-header.tsx index 0a3f5e90b..adb00d3ad 100644 --- a/src/renderer/features/settings/components/settings-header.tsx +++ b/src/renderer/features/settings/components/settings-header.tsx @@ -30,10 +30,10 @@ export const SettingsHeader = ({ setSearch }: SettingsHeaderProps) => { openModal({ children: ( - {t('common.areYouSure', { postProcess: 'sentenceCase' })} + {t('common.areYouSure')} ), - title: t('common.resetToDefault', { postProcess: 'sentenceCase' }), + title: t('common.resetToDefault'), }); }; @@ -44,7 +44,7 @@ export const SettingsHeader = ({ setSearch }: SettingsHeaderProps) => { - {t('common.setting', { count: 2, postProcess: 'titleCase' })} + {t('common.setting', { count: 2 })} @@ -53,7 +53,7 @@ export const SettingsHeader = ({ setSearch }: SettingsHeaderProps) => { onChange={(event) => setSearch(event.target.value.toLocaleLowerCase())} /> diff --git a/src/renderer/features/settings/components/window/cache-settngs.tsx b/src/renderer/features/settings/components/window/cache-settngs.tsx index 491e9e8d4..b7927a878 100644 --- a/src/renderer/features/settings/components/window/cache-settngs.tsx +++ b/src/renderer/features/settings/components/window/cache-settngs.tsx @@ -31,7 +31,7 @@ export const CacheSettings = memo(() => { } toast.success({ - message: t('setting.clearCacheSuccess', { postProcess: 'sentenceCase' }), + message: t('setting.clearCacheSuccess'), }); } catch (error) { console.error(error); @@ -49,10 +49,10 @@ export const CacheSettings = memo(() => { openModal({ children: ( clearCache(full)}> - {t(`common.areYouSure`, { postProcess: 'sentenceCase' })} + {t(`common.areYouSure`)} ), - title: t(`setting.${key}`, { postProcess: 'sentenceCase' }), + title: t(`setting.${key}`), }); }; @@ -65,14 +65,13 @@ export const CacheSettings = memo(() => { size="compact-md" variant="filled" > - {t('common.clear', { postProcess: 'sentenceCase' })} + {t('common.clear')} ), description: t('setting.clearQueryCache', { context: 'description', - postProcess: 'sentenceCase', }), - title: t('setting.clearQueryCache', { postProcess: 'sentenceCase' }), + title: t('setting.clearQueryCache'), }, { control: ( @@ -82,15 +81,14 @@ export const CacheSettings = memo(() => { size="compact-md" variant="filled" > - {t('common.clear', { postProcess: 'sentenceCase' })} + {t('common.clear')} ), description: t('setting.clearCache', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !browser, - title: t('setting.clearCache', { postProcess: 'sentenceCase' }), + title: t('setting.clearCache'), }, ]; @@ -102,15 +100,10 @@ export const CacheSettings = memo(() => { return ( <> - + {isElectron() && ( )} diff --git a/src/renderer/features/settings/components/window/discord-settings.tsx b/src/renderer/features/settings/components/window/discord-settings.tsx index 29b0f39d4..26b42e0b3 100644 --- a/src/renderer/features/settings/components/window/discord-settings.tsx +++ b/src/renderer/features/settings/components/window/discord-settings.tsx @@ -43,12 +43,10 @@ export const DiscordSettings = memo(() => { icon: 'icon', paused: 'paused', playing: 'playing', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.discordRichPresence', { discord: 'Discord', - postProcess: 'sentenceCase', }), }, { @@ -68,12 +66,10 @@ export const DiscordSettings = memo(() => { context: 'description', defaultId: '1165957668758900787', discord: 'Discord', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.discordApplicationId', { discord: 'Discord', - postProcess: 'sentenceCase', }), }, { @@ -91,12 +87,9 @@ export const DiscordSettings = memo(() => { ), description: t('setting.discordPausedStatus', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.discordPausedStatus', { - postProcess: 'sentenceCase', - }), + title: t('setting.discordPausedStatus'), }, { control: ( @@ -113,12 +106,9 @@ export const DiscordSettings = memo(() => { ), description: t('setting.discordStateIcon', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.discordStateIcon', { - postProcess: 'sentenceCase', - }), + title: t('setting.discordStateIcon'), }, { control: ( @@ -135,12 +125,9 @@ export const DiscordSettings = memo(() => { ), description: t('setting.discordListening', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.discordListening', { - postProcess: 'sentenceCase', - }), + title: t('setting.discordListening'), }, { control: ( @@ -152,14 +139,12 @@ export const DiscordSettings = memo(() => { { label: t('setting.discordDisplayType', { context: 'songname', - postProcess: 'sentenceCase', }), value: DiscordDisplayType.SONG_NAME, }, { label: t('setting.discordDisplayType_artistname', { context: 'artistname', - postProcess: 'sentenceCase', }), value: DiscordDisplayType.ARTIST_NAME, }, @@ -177,13 +162,11 @@ export const DiscordSettings = memo(() => { ), description: t('setting.discordDisplayType', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.discordDisplayType', { discord: 'Discord', musicbrainz: 'musicbrainz', - postProcess: 'sentenceCase', }), }, { @@ -193,9 +176,7 @@ export const DiscordSettings = memo(() => { clearable={false} data={[ { - label: t('setting.discordLinkType_none', { - postProcess: 'sentenceCase', - }), + label: t('setting.discordLinkType_none'), value: DiscordLinkType.NONE, }, { label: 'last.fm', value: DiscordLinkType.LAST_FM }, @@ -224,12 +205,10 @@ export const DiscordSettings = memo(() => { discord: 'Discord', lastfm: 'last.fm', musicbrainz: 'musicbrainz', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.discordLinkType', { discord: 'Discord', - postProcess: 'sentenceCase', }), }, { @@ -249,12 +228,10 @@ export const DiscordSettings = memo(() => { context: 'description', discord: 'Discord', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.discordServeImage', { discord: 'Discord', - postProcess: 'sentenceCase', }), }, { @@ -273,20 +250,13 @@ export const DiscordSettings = memo(() => { description: t('setting.lastfmApiKey', { context: 'description', lastfm: 'Last.fm', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), title: t('setting.lastfmApiKey', { lastfm: 'Last.fm', - postProcess: 'sentenceCase', }), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/components/window/password-settings.tsx b/src/renderer/features/settings/components/window/password-settings.tsx index bf05dfe96..a195d9a35 100644 --- a/src/renderer/features/settings/components/window/password-settings.tsx +++ b/src/renderer/features/settings/components/window/password-settings.tsx @@ -46,10 +46,9 @@ export const PasswordSettings = memo(() => { ), description: t('setting.passwordStore', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.passwordStore', { postProcess: 'sentenceCase' }), + title: t('setting.passwordStore'), }, ]; diff --git a/src/renderer/features/settings/components/window/remote-settings.tsx b/src/renderer/features/settings/components/window/remote-settings.tsx index 28b185526..27c9fc6d8 100644 --- a/src/renderer/features/settings/components/window/remote-settings.tsx +++ b/src/renderer/features/settings/components/window/remote-settings.tsx @@ -32,9 +32,7 @@ export const RemoteSettings = memo(() => { } else { toast.error({ message: errorMsg, - title: enabled - ? t('error.remoteEnableError', { postProcess: 'sentenceCase' }) - : t('error.remoteDisableError', { postProcess: 'sentenceCase' }), + title: enabled ? t('error.remoteEnableError') : t('error.remoteDisableError'), }); } }, 50); @@ -48,12 +46,12 @@ export const RemoteSettings = memo(() => { }, }); toast.warn({ - message: t('error.remotePortWarning', { postProcess: 'sentenceCase' }), + message: t('error.remotePortWarning'), }); } else { toast.error({ message: errorMsg, - title: t('error.remotePortError', { postProcess: 'sentenceCase' }), + title: t('error.remotePortError'), }); } }, 100); @@ -75,7 +73,6 @@ export const RemoteSettings = memo(() => { {t('setting.enableRemote', { context: 'description', - postProcess: 'sentenceCase', })}{' '} {url} @@ -83,7 +80,7 @@ export const RemoteSettings = memo(() => { ), isHidden, - title: t('setting.enableRemote', { postProcess: 'sentenceCase' }), + title: t('setting.enableRemote'), }, { control: ( @@ -99,10 +96,9 @@ export const RemoteSettings = memo(() => { ), description: t('setting.remotePort', { context: 'description', - postProcess: 'sentenceCase', }), isHidden, - title: t('setting.remotePort', { postProcess: 'sentenceCase' }), + title: t('setting.remotePort'), }, { control: ( @@ -122,10 +118,9 @@ export const RemoteSettings = memo(() => { ), description: t('setting.remoteUsername', { context: 'description', - postProcess: 'sentenceCase', }), isHidden, - title: t('setting.remoteUsername', { postProcess: 'sentenceCase' }), + title: t('setting.remoteUsername'), }, { control: ( @@ -145,17 +140,11 @@ export const RemoteSettings = memo(() => { ), description: t('setting.remotePassword', { context: 'description', - postProcess: 'sentenceCase', }), isHidden, - title: t('setting.remotePassword', { postProcess: 'sentenceCase' }), + title: t('setting.remotePassword'), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/components/window/update-settings.tsx b/src/renderer/features/settings/components/window/update-settings.tsx index 3badac7cf..d44c53bec 100644 --- a/src/renderer/features/settings/components/window/update-settings.tsx +++ b/src/renderer/features/settings/components/window/update-settings.tsx @@ -30,21 +30,18 @@ export const UpdateSettings = memo(() => { { label: t('setting.releaseChannel', { context: 'optionLatest', - postProcess: 'titleCase', }), value: 'latest', }, { label: t('setting.releaseChannel', { context: 'optionBeta', - postProcess: 'titleCase', }), value: 'beta', }, { label: t('setting.releaseChannel', { context: 'optionAlpha', - postProcess: 'titleCase', }), value: 'alpha', }, @@ -63,15 +60,14 @@ export const UpdateSettings = memo(() => { ), description: t('setting.releaseChannel', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: disableAutoUpdates(), - title: t('setting.releaseChannel', { postProcess: 'sentenceCase' }), + title: t('setting.releaseChannel'), }, { control: ( { @@ -88,17 +84,11 @@ export const UpdateSettings = memo(() => { ), description: t('setting.automaticUpdates', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: disableAutoUpdates(), - title: t('setting.automaticUpdates', { postProcess: 'sentenceCase' }), + title: t('setting.automaticUpdates'), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/components/window/window-settings.tsx b/src/renderer/features/settings/components/window/window-settings.tsx index cdfb0923a..fae725815 100644 --- a/src/renderer/features/settings/components/window/window-settings.tsx +++ b/src/renderer/features/settings/components/window/window-settings.tsx @@ -60,10 +60,9 @@ export const WindowSettings = memo(() => { ), description: t('setting.windowBarStyle', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.windowBarStyle', { postProcess: 'sentenceCase' }), + title: t('setting.windowBarStyle'), }, { control: ( @@ -99,13 +98,10 @@ export const WindowSettings = memo(() => { ), description: t('setting.trayEnabled', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - note: t('common.restartRequired', { - postProcess: 'sentenceCase', - }), - title: t('setting.trayEnabled', { postProcess: 'sentenceCase' }), + note: t('common.restartRequired'), + title: t('setting.trayEnabled'), }, { control: ( @@ -126,10 +122,9 @@ export const WindowSettings = memo(() => { ), description: t('setting.minimizeToTray', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron() || !settings.tray, - title: t('setting.minimizeToTray', { postProcess: 'sentenceCase' }), + title: t('setting.minimizeToTray'), }, { control: ( @@ -150,10 +145,9 @@ export const WindowSettings = memo(() => { ), description: t('setting.exitToTray', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron() || !settings.tray, - title: t('setting.exitToTray', { postProcess: 'sentenceCase' }), + title: t('setting.exitToTray'), }, { control: ( @@ -174,10 +168,9 @@ export const WindowSettings = memo(() => { ), description: t('setting.startMinimized', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron() || !settings.tray, - title: t('setting.startMinimized', { postProcess: 'sentenceCase' }), + title: t('setting.startMinimized'), }, { control: ( @@ -201,17 +194,11 @@ export const WindowSettings = memo(() => { ), description: t('setting.preventSleepOnPlayback', { context: 'description', - postProcess: 'sentenceCase', }), isHidden: !isElectron(), - title: t('setting.preventSleepOnPlayback', { postProcess: 'sentenceCase' }), + title: t('setting.preventSleepOnPlayback'), }, ]; - return ( - - ); + return ; }); diff --git a/src/renderer/features/settings/restart-toast.ts b/src/renderer/features/settings/restart-toast.ts index 09379b3fd..f962688e5 100644 --- a/src/renderer/features/settings/restart-toast.ts +++ b/src/renderer/features/settings/restart-toast.ts @@ -9,16 +9,10 @@ export const openRestartRequiredToast = (message?: string) => { return toast.warn({ autoClose: false, id: 'restart-toast', - message: - message || - t('common.forceRestartRequired', { - postProcess: 'sentenceCase', - }), + message: message || t('common.forceRestartRequired'), onClose: () => { ipc?.send('app-restart'); }, - title: t('common.restartRequired', { - postProcess: 'sentenceCase', - }), + title: t('common.restartRequired'), }); }; diff --git a/src/renderer/features/shared/components/component-error-boundary.tsx b/src/renderer/features/shared/components/component-error-boundary.tsx index 4d48fc19b..2a86bb76c 100644 --- a/src/renderer/features/shared/components/component-error-boundary.tsx +++ b/src/renderer/features/shared/components/component-error-boundary.tsx @@ -24,12 +24,12 @@ const ComponentErrorFallback = ({ resetErrorBoundary }: ComponentErrorFallbackPr - {t('error.genericError', { postProcess: 'sentenceCase' })} + {t('error.genericError')} diff --git a/src/renderer/features/shared/components/display-type-toggle-button.tsx b/src/renderer/features/shared/components/display-type-toggle-button.tsx index fa02e49fb..05321576e 100644 --- a/src/renderer/features/shared/components/display-type-toggle-button.tsx +++ b/src/renderer/features/shared/components/display-type-toggle-button.tsx @@ -27,10 +27,10 @@ export const DisplayTypeToggleButton = ({ onClick={onToggle} tooltip={{ label: isGrid - ? t('table.config.view.grid', { postProcess: 'sentenceCase' }) + ? t('table.config.view.grid') : isDetail - ? t('table.config.view.detail', { postProcess: 'sentenceCase' }) - : t('table.config.view.table', { postProcess: 'sentenceCase' }), + ? t('table.config.view.detail') + : t('table.config.view.table'), }} variant="subtle" {...buttonProps} diff --git a/src/renderer/features/shared/components/filter-button.tsx b/src/renderer/features/shared/components/filter-button.tsx index 82023c28d..ac2060e5b 100644 --- a/src/renderer/features/shared/components/filter-button.tsx +++ b/src/renderer/features/shared/components/filter-button.tsx @@ -19,7 +19,7 @@ export const FilterButton = ({ isActive, onClick, ...props }: FilterButtonProps) }} onClick={onClick} tooltip={{ - label: t('common.filters', { count: 2, postProcess: 'sentenceCase' }), + label: t('common.filters', { count: 2 }), ...props.tooltip, }} variant="subtle" diff --git a/src/renderer/features/shared/components/folder-button.tsx b/src/renderer/features/shared/components/folder-button.tsx index 2391a1f01..942c17b80 100644 --- a/src/renderer/features/shared/components/folder-button.tsx +++ b/src/renderer/features/shared/components/folder-button.tsx @@ -18,7 +18,7 @@ export const FolderButton = ({ isActive, ...props }: FolderButtonProps) => { ...props.iconProps, }} tooltip={{ - label: t('entity.folder', { count: 1, postProcess: 'sentenceCase' }), + label: t('entity.folder', { count: 1 }), ...props.tooltip, }} variant="subtle" diff --git a/src/renderer/features/shared/components/grid-config.tsx b/src/renderer/features/shared/components/grid-config.tsx index 605d7afd3..41de91bed 100644 --- a/src/renderer/features/shared/components/grid-config.tsx +++ b/src/renderer/features/shared/components/grid-config.tsx @@ -73,15 +73,11 @@ export const GridConfig = ({ ), id: 'pagination', - label: t('table.config.general.pagination', { postProcess: 'sentenceCase' }), + label: t('table.config.general.pagination'), size: 'sm', }, { @@ -125,9 +121,7 @@ export const GridConfig = ({ id: 'itemsPerPage', label: ( - {t('table.config.general.pagination_itemsPerPage', { - postProcess: 'sentenceCase', - })} + {t('table.config.general.pagination_itemsPerPage')} {list.itemsPerPage} ), @@ -186,7 +180,7 @@ export const GridConfig = ({ id: 'itemGap', label: ( - {t('table.config.general.gap', { postProcess: 'sentenceCase' })} + {t('table.config.general.gap')} {grid.itemGap} ), @@ -205,12 +199,12 @@ export const GridConfig = ({ label: ( - {t('table.config.general.itemsPerRow', { postProcess: 'sentenceCase' })} + {t('table.config.general.itemsPerRow')} {grid.itemsPerRow} setList(listKey, { grid: { itemsPerRowEnabled: e.target.checked }, @@ -227,21 +221,15 @@ export const GridConfig = ({ ), id: 'size', - label: t('table.config.general.size', { postProcess: 'sentenceCase' }), + label: t('table.config.general.size'), size: 'sm', }, @@ -419,12 +407,10 @@ const GridRowConfig = ({ return ( - {t('common.gridRows', { postProcess: 'sentenceCase' })} + {t('common.gridRows')} setSearchRows(e.currentTarget.value)} - placeholder={t('common.search', { - postProcess: 'sentenceCase', - })} + placeholder={t('common.search')} size="xs" /> @@ -592,9 +578,7 @@ const GridRowItem = memo( onClick={() => handleMoveUp(item)} size="xs" tooltip={{ - label: t('table.config.general.moveUp', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.moveUp'), }} variant="subtle" /> @@ -604,9 +588,7 @@ const GridRowItem = memo( onClick={() => handleMoveDown(item)} size="xs" tooltip={{ - label: t('table.config.general.moveDown', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.moveDown'), }} variant="subtle" /> @@ -618,9 +600,7 @@ const GridRowItem = memo( onClick={() => handleAlignLeft(item)} size="xs" tooltip={{ - label: t('table.config.general.alignLeft', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignLeft'), }} variant={item.align === 'start' ? 'filled' : 'subtle'} /> @@ -630,9 +610,7 @@ const GridRowItem = memo( onClick={() => handleAlignCenter(item)} size="xs" tooltip={{ - label: t('table.config.general.alignCenter', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignCenter'), }} variant={item.align === 'center' ? 'filled' : 'subtle'} /> @@ -642,9 +620,7 @@ const GridRowItem = memo( onClick={() => handleAlignRight(item)} size="xs" tooltip={{ - label: t('table.config.general.alignRight', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignRight'), }} variant={item.align === 'end' ? 'filled' : 'subtle'} /> diff --git a/src/renderer/features/shared/components/library-header.tsx b/src/renderer/features/shared/components/library-header.tsx index 5b3962218..05f8e8b97 100644 --- a/src/renderer/features/shared/components/library-header.tsx +++ b/src/renderer/features/shared/components/library-header.tsx @@ -407,7 +407,7 @@ export const LibraryHeaderMenu = ({ size="md" variant="transparent" > - {t('player.albumRadio', { postProcess: 'sentenceCase' })} + {t('player.albumRadio')} )} {onArtistRadio && ( @@ -424,7 +424,7 @@ export const LibraryHeaderMenu = ({ size="md" variant="transparent" > - {t('player.artistRadio', { postProcess: 'sentenceCase' })} + {t('player.artistRadio')} )} diff --git a/src/renderer/features/shared/components/list-config-menu.tsx b/src/renderer/features/shared/components/list-config-menu.tsx index 347a089a4..e3ee35486 100644 --- a/src/renderer/features/shared/components/list-config-menu.tsx +++ b/src/renderer/features/shared/components/list-config-menu.tsx @@ -27,7 +27,7 @@ const DISPLAY_TYPES = [ label: ( - {i18n.t('table.config.view.table', { postProcess: 'sentenceCase' }) as string} + {i18n.t('table.config.view.table') as string} ), value: ListDisplayType.TABLE, @@ -36,7 +36,7 @@ const DISPLAY_TYPES = [ label: ( - {i18n.t('table.config.view.grid', { postProcess: 'sentenceCase' }) as string} + {i18n.t('table.config.view.grid') as string} ), value: ListDisplayType.GRID, @@ -45,7 +45,7 @@ const DISPLAY_TYPES = [ label: ( - {i18n.t('table.config.view.detail', { postProcess: 'sentenceCase' }) as string} + {i18n.t('table.config.view.detail') as string} ), value: ListDisplayType.DETAIL, @@ -55,7 +55,7 @@ const DISPLAY_TYPES = [ // label: ( // // - // {i18n.t('table.config.view.list', { postProcess: 'sentenceCase' }) as string} + // {i18n.t('table.config.view.list') as string} // // ), // value: ListDisplayType.LIST, @@ -148,12 +148,7 @@ export const ListConfigMenu = (props: ListConfigMenuProps) => { return ( <> - + {availableDisplayTypes.length > 1 && ( { /> ), id: 'displayType', - label: t('table.config.general.displayType', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.displayType'), }, ]} /> diff --git a/src/renderer/features/shared/components/list-filters.tsx b/src/renderer/features/shared/components/list-filters.tsx index 58533d1c6..a829e5b05 100644 --- a/src/renderer/features/shared/components/list-filters.tsx +++ b/src/renderer/features/shared/components/list-filters.tsx @@ -93,10 +93,10 @@ export const ListFiltersModal = ({ isActive, itemType }: ListFiltersProps) => { /> )} - {t('common.filters', { postProcess: 'sentenceCase' })} + {t('common.filters')} } @@ -159,11 +159,11 @@ export const ListFiltersTitle = ({ itemType }: ListFiltersTitleProps) => { return ( - {t('common.filters', { postProcess: 'sentenceCase' })} + {t('common.filters')} {canUnpin && ( - {t('error.genericError', { postProcess: 'sentenceCase' })} + {t('error.genericError')} - {error?.message || t('error.genericError', { postProcess: 'sentenceCase' })} + {error?.message || t('error.genericError')} {process.env.NODE_ENV === 'development' && error?.stack && ( diff --git a/src/renderer/features/shared/components/play-button-group.tsx b/src/renderer/features/shared/components/play-button-group.tsx index 0a2bd7ba1..1a4469ce4 100644 --- a/src/renderer/features/shared/components/play-button-group.tsx +++ b/src/renderer/features/shared/components/play-button-group.tsx @@ -24,10 +24,10 @@ const playButtons: { label: ( - {i18n.t('player.addNext', { postProcess: 'sentenceCase' })} + {i18n.t('player.addNext')} - {i18n.t('player.holdToShuffle', { postProcess: 'sentenceCase' })} + {i18n.t('player.holdToShuffle')} ), @@ -40,10 +40,10 @@ const playButtons: { label: ( - {i18n.t('player.play', { postProcess: 'sentenceCase' })} + {i18n.t('player.play')} - {i18n.t('player.holdToShuffle', { postProcess: 'sentenceCase' })} + {i18n.t('player.holdToShuffle')} ), @@ -55,10 +55,10 @@ const playButtons: { label: ( - {i18n.t('player.addLast', { postProcess: 'sentenceCase' })} + {i18n.t('player.addLast')} - {i18n.t('player.holdToShuffle', { postProcess: 'sentenceCase' })} + {i18n.t('player.holdToShuffle')} ), @@ -74,9 +74,9 @@ export const LONG_PRESS_PLAY_BEHAVIOR = { }; const PLAY_BEHAVIOR_TO_LABEL = { - [Play.LAST]: i18n.t('player.addLast', { postProcess: 'sentenceCase' }), - [Play.NEXT]: i18n.t('player.addNext', { postProcess: 'sentenceCase' }), - [Play.NOW]: i18n.t('player.play', { postProcess: 'sentenceCase' }), + [Play.LAST]: i18n.t('player.addLast'), + [Play.NEXT]: i18n.t('player.addNext'), + [Play.NOW]: i18n.t('player.play'), }; const TooltipLabel = ({ label }: { label: React.ReactNode | string; type: Play }) => { @@ -86,7 +86,7 @@ const TooltipLabel = ({ label }: { label: React.ReactNode | string; type: Play } {label} - {i18n.t('player.holdToShuffle', { postProcess: 'sentenceCase' })} + {i18n.t('player.holdToShuffle')} ); diff --git a/src/renderer/features/shared/components/play-button.tsx b/src/renderer/features/shared/components/play-button.tsx index a153eaa7f..689949458 100644 --- a/src/renderer/features/shared/components/play-button.tsx +++ b/src/renderer/features/shared/components/play-button.tsx @@ -64,7 +64,7 @@ export const PlayTextButton = ({ {props.children || ( - {t('player.play', { postProcess: 'sentenceCase' })} + {t('player.play')} )} @@ -86,7 +86,7 @@ export const PlayNextTextButton = ({ ...props }: TextPlayButtonProps) => { - {t('player.addNext', { postProcess: 'sentenceCase' })} + {t('player.addNext')} ); @@ -107,7 +107,7 @@ export const PlayLastTextButton = ({ ...props }: TextPlayButtonProps) => { - {t('player.addLast', { postProcess: 'sentenceCase' })} + {t('player.addLast')} ); @@ -128,7 +128,7 @@ export const WideShuffleButton = ({ ...props }: TextPlayButtonProps) => { - {t('action.shuffle', { postProcess: 'sentenceCase' })} + {t('action.shuffle')} ); diff --git a/src/renderer/features/shared/components/refresh-button.tsx b/src/renderer/features/shared/components/refresh-button.tsx index 9076b555a..783fe5790 100644 --- a/src/renderer/features/shared/components/refresh-button.tsx +++ b/src/renderer/features/shared/components/refresh-button.tsx @@ -19,7 +19,7 @@ export const RefreshButton = ({ loading, onClick, ...props }: RefreshButtonProps loading={loading} onClick={onClick} tooltip={{ - label: t('common.refresh', { postProcess: 'sentenceCase' }), + label: t('common.refresh'), ...props.tooltip, }} variant="subtle" diff --git a/src/renderer/features/shared/components/router-error-boundary.tsx b/src/renderer/features/shared/components/router-error-boundary.tsx index 770b8259a..9247316be 100644 --- a/src/renderer/features/shared/components/router-error-boundary.tsx +++ b/src/renderer/features/shared/components/router-error-boundary.tsx @@ -48,11 +48,11 @@ const RouterErrorFallback = ({ error, resetErrorBoundary }: RouterErrorFallbackP - {t('error.genericError', { postProcess: 'sentenceCase' })} + {t('error.genericError')} - {error?.message || t('error.genericError', { postProcess: 'sentenceCase' })} + {error?.message || t('error.genericError')} {process.env.NODE_ENV === 'development' && error?.stack && ( diff --git a/src/renderer/features/shared/components/save-as-collection-button.tsx b/src/renderer/features/shared/components/save-as-collection-button.tsx index 218e9801b..3cf2dfb28 100644 --- a/src/renderer/features/shared/components/save-as-collection-button.tsx +++ b/src/renderer/features/shared/components/save-as-collection-button.tsx @@ -98,9 +98,7 @@ export const SaveAsCollectionButton = ({ fullWidth, itemType }: SaveAsCollection {fullWidth ? ( ) : ( @@ -120,9 +116,7 @@ export const SaveAsCollectionButton = ({ fullWidth, itemType }: SaveAsCollection
- {t('page.collections.overrideExisting', { - postProcess: 'sentenceCase', - })} + {t('page.collections.overrideExisting')}
@@ -146,10 +140,10 @@ export const SaveAsCollectionButton = ({ fullWidth, itemType }: SaveAsCollection diff --git a/src/renderer/features/shared/components/settings-button.tsx b/src/renderer/features/shared/components/settings-button.tsx index 9b1ad524a..7bc448da6 100644 --- a/src/renderer/features/shared/components/settings-button.tsx +++ b/src/renderer/features/shared/components/settings-button.tsx @@ -15,7 +15,7 @@ export const SettingsButton = ({ ...props }: SettingsButtonProps) => { ...props.iconProps, }} tooltip={{ - label: t('common.configure', { postProcess: 'sentenceCase' }), + label: t('common.configure'), ...props.tooltip, }} variant="subtle" diff --git a/src/renderer/features/shared/components/table-config.tsx b/src/renderer/features/shared/components/table-config.tsx index 1bf4bdbf6..8605dcf49 100644 --- a/src/renderer/features/shared/components/table-config.tsx +++ b/src/renderer/features/shared/components/table-config.tsx @@ -96,15 +96,11 @@ export const TableConfig = ({ ), id: 'pagination', - label: t('table.config.general.pagination', { postProcess: 'sentenceCase' }), + label: t('table.config.general.pagination'), size: 'sm', }, { @@ -145,9 +141,7 @@ export const TableConfig = ({ id: 'itemsPerPage', label: ( - {t('table.config.general.pagination_itemsPerPage', { - postProcess: 'sentenceCase', - })} + {t('table.config.general.pagination_itemsPerPage')} {list.itemsPerPage} ), @@ -157,21 +151,15 @@ export const TableConfig = ({ ), id: 'size', - label: t('table.config.general.size', { - postProcess: 'titleCase', - }), + label: t('table.config.general.size'), }, { component: ( @@ -198,9 +184,7 @@ export const TableConfig = ({ /> ), id: 'enableHeader', - label: t('table.config.general.showHeader', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.showHeader'), }, { component: ( @@ -210,9 +194,7 @@ export const TableConfig = ({ /> ), id: 'enableRowHoverHighlight', - label: t('table.config.general.rowHoverHighlight', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.rowHoverHighlight'), }, { component: ( @@ -222,9 +204,7 @@ export const TableConfig = ({ /> ), id: 'enableAlternateRowColors', - label: t('table.config.general.alternateRowColors', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alternateRowColors'), }, { component: ( @@ -234,9 +214,7 @@ export const TableConfig = ({ /> ), id: 'enableHorizontalBorders', - label: t('table.config.general.horizontalBorders', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.horizontalBorders'), }, { component: ( @@ -246,9 +224,7 @@ export const TableConfig = ({ /> ), id: 'enableVerticalBorders', - label: t('table.config.general.verticalBorders', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.verticalBorders'), }, { component: ( @@ -260,7 +236,7 @@ export const TableConfig = ({ /> ), id: 'autoFitColumns', - label: t('table.config.general.autoFitColumns', { postProcess: 'sentenceCase' }), + label: t('table.config.general.autoFitColumns'), }, ...(extraOptions || []), ]; @@ -494,12 +470,10 @@ const TableColumnConfig = ({ return ( - {t('common.tableColumns', { postProcess: 'sentenceCase' })} + {t('common.tableColumns')} setSearchColumns(e.currentTarget.value)} - placeholder={t('common.search', { - postProcess: 'sentenceCase', - })} + placeholder={t('common.search')} size="xs" /> @@ -684,9 +658,7 @@ const TableColumnItem = memo( onClick={() => handleMoveUp(item)} size="xs" tooltip={{ - label: t('table.config.general.moveUp', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.moveUp'), }} variant="subtle" /> @@ -696,9 +668,7 @@ const TableColumnItem = memo( onClick={() => handleMoveDown(item)} size="xs" tooltip={{ - label: t('table.config.general.moveDown', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.moveDown'), }} variant="subtle" /> @@ -711,9 +681,7 @@ const TableColumnItem = memo( onClick={() => handlePinToLeft(item)} size="xs" tooltip={{ - label: t('table.config.general.pinToLeft', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.pinToLeft'), }} variant={item.pinned === 'left' ? 'filled' : 'subtle'} /> @@ -723,9 +691,7 @@ const TableColumnItem = memo( onClick={() => handlePinToRight(item)} size="xs" tooltip={{ - label: t('table.config.general.pinToRight', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.pinToRight'), }} variant={item.pinned === 'right' ? 'filled' : 'subtle'} /> @@ -738,9 +704,7 @@ const TableColumnItem = memo( onClick={() => handleAlignLeft(item)} size="xs" tooltip={{ - label: t('table.config.general.alignLeft', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignLeft'), }} variant={item.align === 'start' ? 'filled' : 'subtle'} /> @@ -750,9 +714,7 @@ const TableColumnItem = memo( onClick={() => handleAlignCenter(item)} size="xs" tooltip={{ - label: t('table.config.general.alignCenter', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignCenter'), }} variant={item.align === 'center' ? 'filled' : 'subtle'} /> @@ -762,9 +724,7 @@ const TableColumnItem = memo( onClick={() => handleAlignRight(item)} size="xs" tooltip={{ - label: t('table.config.general.alignRight', { - postProcess: 'sentenceCase', - }), + label: t('table.config.general.alignRight'), }} variant={item.align === 'end' ? 'filled' : 'subtle'} /> @@ -773,11 +733,7 @@ const TableColumnItem = memo( className={clsx(styles.group, styles.numberInput)} hideControls={false} leftSection={ - + { toast.show({ message: _error.message, - title: t('error.genericError', { postProcess: 'sentenceCase' }) as string, + title: t('error.genericError') as string, type: 'error', }); diff --git a/src/renderer/features/shared/mutations/delete-favorite-mutation.ts b/src/renderer/features/shared/mutations/delete-favorite-mutation.ts index 909f23ee8..a9e2b1fa1 100644 --- a/src/renderer/features/shared/mutations/delete-favorite-mutation.ts +++ b/src/renderer/features/shared/mutations/delete-favorite-mutation.ts @@ -39,7 +39,7 @@ export const useDeleteFavorite = (args: MutationHookArgs) => { toast.show({ message: _error.message, - title: t('error.genericError', { postProcess: 'sentenceCase' }) as string, + title: t('error.genericError') as string, type: 'error', }); diff --git a/src/renderer/features/shared/mutations/set-rating-mutation.ts b/src/renderer/features/shared/mutations/set-rating-mutation.ts index 6f50e07b6..90f95164e 100644 --- a/src/renderer/features/shared/mutations/set-rating-mutation.ts +++ b/src/renderer/features/shared/mutations/set-rating-mutation.ts @@ -36,7 +36,7 @@ export const useSetRatingMutation = (args: MutationHookArgs) => { toast.show({ message: _error.message, - title: t('error.genericError', { postProcess: 'sentenceCase' }) as string, + title: t('error.genericError') as string, type: 'error', }); diff --git a/src/renderer/features/shared/utils.ts b/src/renderer/features/shared/utils.ts index 49b07cb63..7999b6ad0 100644 --- a/src/renderer/features/shared/utils.ts +++ b/src/renderer/features/shared/utils.ts @@ -17,19 +17,19 @@ import { Play } from '/@/shared/types/types'; export const PLAY_TYPES = [ { - label: i18n.t('player.play', { postProcess: 'sentenceCase' }), + label: i18n.t('player.play'), play: Play.NOW, }, { - label: i18n.t('player.shuffle', { postProcess: 'sentenceCase' }), + label: i18n.t('player.shuffle'), play: Play.SHUFFLE, }, { - label: i18n.t('player.addLast', { postProcess: 'sentenceCase' }), + label: i18n.t('player.addLast'), play: Play.LAST, }, { - label: i18n.t('player.addNext', { postProcess: 'sentenceCase' }), + label: i18n.t('player.addNext'), play: Play.NEXT, }, ]; diff --git a/src/renderer/features/sharing/components/share-item-context-modal.tsx b/src/renderer/features/sharing/components/share-item-context-modal.tsx index 74d3be4a1..3075b8ed0 100644 --- a/src/renderer/features/sharing/components/share-item-context-modal.tsx +++ b/src/renderer/features/sharing/components/share-item-context-modal.tsx @@ -38,11 +38,7 @@ export const ShareItemContextModal = ({ }, validate: { expires: (value) => - dayjs(value).isAfter(dayjs()) - ? null - : t('form.shareItem.expireInvalid', { - postProcess: 'sentenceCase', - }), + dayjs(value).isAfter(dayjs()) ? null : t('form.shareItem.expireInvalid'), }, }); @@ -61,9 +57,7 @@ export const ShareItemContextModal = ({ { onError: () => { toast.error({ - message: t('form.shareItem.createFailed', { - postProcess: 'sentenceCase', - }), + message: t('form.shareItem.createFailed'), }); }, onSuccess: (_data) => { @@ -86,9 +80,7 @@ export const ShareItemContextModal = ({ canUseClipboard ? 'form.shareItem.success' : 'form.shareItem.successMustClick', - { - postProcess: 'sentenceCase', - }, + {}, ), onClick: (a) => { if (!(a.target instanceof HTMLElement)) return; @@ -113,9 +105,7 @@ export const ShareItemContextModal = ({