From 5ae46652795e654bb0f329f6f24174d0ccf4b3e8 Mon Sep 17 00:00:00 2001 From: Joe Date: Sun, 26 May 2024 17:47:40 -0600 Subject: [PATCH 1/6] Re-Base on Main --- Translations/en.lproj/Localizable.strings | Bin 19866 -> 19047 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 243dab8a87fe6af2201aa127c156324ae8ea6170..5182646308d3f5dfea4645257a196de7e0e6e481 100644 GIT binary patch literal 19047 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 literal 19866 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 Date: Sun, 26 May 2024 22:04:30 -0600 Subject: [PATCH 2/6] May 26th Work --- Translations/en.lproj/Localizable.strings | 231 ++++++++++++++++------ 1 file changed, 174 insertions(+), 57 deletions(-) diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 518264630..ed3ed6d64 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -1,6 +1,9 @@ -/* MARK: Development */ +/* MARK: Development */ +/* Represents a Settings Section for settings that are not fully ready */ +"experimental" = "Experimental"; + /* Represents media types that are not currently implemented */ "notImplementedYetWithType" = "Type: %@ not implemented yet :("; @@ -14,11 +17,18 @@ /* Go back to the previous screen/form */ "back" = "Back"; +/* Stop the current operation or reset the screen/form */ "cancel" = "Cancel"; +/* Leave/close the current menu */ +"close" = "Close"; + /* Proceed or continue to the next screen as a proceed opposed to an agreement */ "continue" = "Continue"; +/* Dismiss a message or popup */ +"dismiss" = "Dismiss"; + /* Feature/Setting is inactive */ "disabled" = "Disabled"; @@ -43,12 +53,18 @@ /* Proceed with the current values on the screen/form */ "ok" = "Ok"; +/* Refresh the current view */ +"refresh" = "Refresh"; + /* Reload the current view */ "reload" = "Reload"; /* Reset the form/screen back to the default/previous values */ "reset" = "Reset"; +/* Retry an action typical after it failed the first time */ +"retry" = "Retry"; + /* Expand a section to see all items */ "seeAll" = "See All"; @@ -100,6 +116,9 @@ /* MARK: Item - Shows */ +/* Label used to designate an Episode contained within a Show Library */ +"episodes" = "Episodes"; + /* Represents the label that will exist in place of an episode view if there are no episodes */ "noEpisodesAvailable" = "No episodes available"; @@ -107,12 +126,15 @@ /* MARK: Libraries - Generic */ -/* Represents the the Label for Episodes */ -"episodes" = "Episodes"; - -/* Represents the the Label for Libraries */ +/* Label used to designate a Library */ "library" = "Library"; +/* Library Item has been watch by this user */ +"played" = "Played"; + +/* Library Item has not been watch by this user */ +"unplayed" = "Unplayed"; + /* MARK: Libraries - Filtering/Sorting */ @@ -145,12 +167,18 @@ "tags" = "Tags"; -/* MARK: Libraries - Types*/ +/* MARK: Libraries - Types */ /* Represents the the Library Labels for Live TV Channels */ "channels" = "Channels"; +/* Label for the Grid Feature that formats the Library Items in a Grid */ +"grid" = "Grid"; + +/* Label for the List Feature that formats the Library Items in a List */ +"list" = "List"; + /* Represents the the Library Labels for Movie Media Types */ "movies" = "Movies"; @@ -160,6 +188,9 @@ /* Represents the the Library Labels for Live TV Programs */ "programs" = "Programs"; +/* Label for the Random Feature that sends the users to a Random Library Item */ +"random" = "Random"; + /* Represents the the Library Labels for Show Media Types with a single Season */ "season" = "Season"; @@ -189,9 +220,21 @@ /* MARK: Media */ -/* Represents the section Label for the Media View */ +/* Section Label for the Media View */ "allMedia" = "All Media"; +/* Section Label for the Media's Downloaded Media Section */ +"downloads" = "Downloads"; + +/* Section Label for the Media's Favorite Section */ +"favorites" = "Favorites"; + +/* Section Label for the Media's Live TV Section */ +"liveTV" = "Live TV"; + +/* Section Label for all Media Library Sections */ +"media" = "Media"; + /* MARK: Media Casting */ @@ -203,16 +246,51 @@ "selectCastDestination" = "Select Cast Destination"; +/* MARK: Player Overlay */ + + +/* Overlay Label for Selecting Audio Information/Settings */ +"audio" = "Audio"; + +/* Overlay Label for jumping backwards in the media based on the Jump configuration in Playback Settings */ +"jumpBackward" = "Jump Backward"; + +/* Overlay Label for jumping forward in the media based on the Jump configuration in Playback Settings */ +"jumpForward" = "Jump Forward"; + +/* Overlay Label for going to the next episode in a show */ +"nextItem" = "Next Item"; + +/* Overlay Label for Playing/Pausing currently watched content*/ +"playAndPause" = "Play / Pause"; + +/* Overlay Label for going back to previous episode in a show */ +"previousItem" = "Previous Item"; + +/* Overlay Label for Selecting Subtitle/Caption Information/Settings */ +"subtitle" = "Subtitle"; + +/* Overlay Label for Selecting Video Information/Settings */ +"video" = "Video"; + + /* MARK: Search */ /* Represents the Section Label for the Search View */ "search" = "Search"; -/* Represents the Search action designated as in-progress or an option on the view */ +/* Represents the Search action designated as in-progress or an option on the view. Also used during Server Discovery */ "searchDots" = "Search…"; +/* MARK: Settings */ + + +/* Section Label for the Settings Screen */ +"settings" = "Settings"; + + /* MARK: Settings - Accessibility */ @@ -222,12 +300,18 @@ /* Represents the Appearance setting label */ "appearance" = "Appearance"; +/* Setting for Compact Text spacing as opposed to Normal Spacing */ +"compact" = "Compact"; + /* Represents the dark theme setting */ "dark" = "Dark"; /* Represents the light theme setting */ "light" = "Light"; +/* Setting for Normal Text spacing as opposed to Compact Spacing */ +"normal" = "Normal"; + /* Represents the system theme setting */ "system" = "System"; @@ -235,12 +319,21 @@ /* MARK: Settings - App Icon */ +/* Section Header Label for changing the Swiftfin App Icon */ +"appIcon" = "App Icon"; + /* Represents the label for all Jellyfin Icons that are Blue regardless of Backgound/Color Invert */ "blue" = "Blue"; /* Represents the label for all Jellyfin Icons that are Green regardless of Backgound/Color Invert */ "green" = "Green"; +/* App Icons that are Colored with the Selected Color but have a Black Background */ +"invertedDark" = "Inverted Dark"; + +/* App Icons that are Colored with the Selected Color but have a White Background */ +"invertedLight" = "Inverted Light"; + /* Represents the label for all Jellyfin Icons that are Orange regardless of Backgound/Color Invert */ "orange" = "Orange"; @@ -261,6 +354,16 @@ "advanced" = "Advanced"; +/* MARK: Settings - Customization */ + + +/* Label for the setting to use the Primary Image for Media Items */ +"usePrimaryImage" = "Use Primary Image"; + +/* Label the message explainging the 'User Primary Image' setting */ +"usePrimaryImageDescription" = "Uses the primary image and hides the logo."; + + /* MARK: Settings - Letter Picker */ @@ -280,15 +383,45 @@ /* MARK: Settings - Playback */ +/* Section header for all Playback Gestures settings */ +"gestures" = "Gestures"; + +/* Section Title for setting how far backwards the jump backwards button goes */ +"jumpBackwardLength" = "Jump Backward Length"; + +/* Section Title for setting how far forward the jump forward button goes */ +"jumpForwardLength" = "Jump Forward Length"; + +/* Message Describing if gesture for jumping forward/backward is enabled */ +"jumpGesturesEnabled" = "Jump Gestures Enabled"; + +/* Indicates that Swiftfin playback is using AVKit */ +"nativePlayer" = "Native Player"; + /* Represents the Playback section label */ "playback" = "Playback"; +/* Message Describing the current enabled status of the Player's Gesture Lock */ +"playerGesturesLockGestureEnabled" = "Player Gestures Lock Gesture Enabled"; + /* Represents the Playback Settings section label */ "playbackSettings" = "Playback settings"; /* Represents the Playback Speed section label */ "playbackSpeed" = "Playback Speed"; +/* Message Describing the current enabled status of the Player's Gesture to Seek on the Timeline for currently playing content */ +"seekSlideGestureEnabled" = "Seek Slide Gesture Enabled"; + +/* Message Describing the current enabled status of the Player's Gestures for System Contols like Volume/Brightness */ +"systemControlGesturesEnabled" = "System Control Gestures Enabled"; + +/* Section Title for the Video Player Settings Section */ +"videoPlayer" = "Video Player"; + +/* Section Title for the Video Player Type Setting between VLC, and AVKit */ +"videoPlayerType" = "Video Player Type"; + /* MARK: Settings - Reset */ @@ -322,6 +455,24 @@ /* MARK: Settings - System */ +/* Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Issue Tracking */ +"bugsAndFeatures" = "Bugs and Features"; + +/* tvOS Setting whether going back on the remote should close Swiftfin or if it should provide a confirmation first */ +"confirmClose" = "Confirm Close"; + +/* Section Label for the logs generated by Swiftfin */ +"logs" = "Logs"; + +/* Section of the Jellyfin/System screen directing users to the Swiftfin GitHub to see the source code */ +"sourceCode" = "Source Code"; + +/* Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Feature Requesting */ +"requestFeature" = "Request a Feature"; + +/* Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Issue Reporting */ +"reportIssue" = "Report an Issue"; + /* Section Label for details about the current connected Jellyfin Server */ "serverDetails" = "Server Details"; @@ -380,9 +531,24 @@ /* Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information */ "serverURL" = "Server URL"; +/* Button label that takes the confirms the user information and attempts to sign them in*/ +"signIn" = "Sign In"; + +/* Message on first setup pointing the user to sign in */ +"signInGetStarted" = "Sign in to get started"; + +/* Message on indicating the server that the user is signing in to */ +"signInToServer" = "Sign In to %s"; + /* Represents the label used in the User Settings to change users and go to the Server Selection/Login page */ "switchUser" = "Switch User"; +/* The Server Add/Sign in process has failed and this message is displayed */ +"unableToConnectServer" = "Unable to connect to server"; + +/* Label indicating the Jellyfin Server URL */ +"url" = "URL"; + /* Represents the label used to head the section where a username needs to be provided to connect to a server */ "username" = "Username"; @@ -446,34 +612,23 @@ /* MARK: TODO - Cleanup*/ - "showChaptersInfoInBottomOverlay" = "Show Chapters Info In Bottom Overlay"; "color" = "Color"; "aspectFill" = "Aspect Fill"; "seeMore" = "See More"; "defaultScheme" = "Default Scheme"; "networking" = "Networking"; -"settings" = "Settings"; "searchingDots" = "Searching…"; "noTitle" = "No title"; -"retry" = "Retry"; "recentlyAdded" = "Recently Added"; "overview" = "Overview"; "noOverviewAvailable" = "No overview available"; "castAndCrew" = "Cast & Crew"; -"normal" = "Normal"; -"compact" = "Compact"; "series" = "Series"; "information" = "Information"; -"media" = "Media"; -"favorites" = "Favorites"; -"liveTV" = "Live TV"; -"downloads" = "Downloads"; "name" = "Name"; -"url" = "URL"; "version" = "Version"; "remove" = "Remove"; -"experimental" = "Experimental"; "playPreviousItem" = "Play Previous Item"; "playNextItem" = "Play Next Item"; "autoPlay" = "Auto Play"; @@ -481,25 +636,12 @@ "overlay" = "Overlay"; "overlayType" = "Overlay Type"; "user" = "User"; -"nativePlayer" = "Native Player"; -"videoPlayer" = "Video Player"; -"videoPlayerType" = "Video Player Type"; -"gestures" = "Gestures"; -"jumpForwardLength" = "Jump Forward Length"; -"jumpBackwardLength" = "Jump Backward Length"; -"jumpGesturesEnabled" = "Jump Gestures Enabled"; -"systemControlGesturesEnabled" = "System Control Gestures Enabled"; -"playerGesturesLockGestureEnabled" = "Player Gestures Lock Gesture Enabled"; -"seekSlideGestureEnabled" = "Seek Slide Gesture Enabled"; "audioOffset" = "Audio Offset"; "resumeOffset" = "Resume Offset"; "resumeOffsetDescription" = "Resume content seconds before the recorded resume time"; "resume5SecondOffset" = "Resume 5 Second Offset"; "showPosterLabels" = "Show Poster Labels"; "showCastAndCrew" = "Show Cast & Crew"; -"signInGetStarted" = "Sign in to get started"; -"signIn" = "Sign In"; -"signInToServer" = "Sign In to %s"; "audio" = "Audio"; "subtitles" = "Subtitles"; "playbackSpeed" = "Playback Speed"; @@ -518,17 +660,14 @@ "larger" = "Larger"; "largest" = "Largest"; "jumpLengthSeconds" = "%s seconds"; -"unableToConnectServer" = "Unable to connect to server"; "present" = "Present"; "oneUser" = "1 user"; "multipleUsers" = "%d users"; "notAvailableSlash" = "N/A"; "next" = "Next"; -"refresh" = "Refresh"; "recommended" = "Recommended"; "about" = "About"; "pressDownForMenu" = "Press Down for Menu"; -"confirmClose" = "Confirm Close"; "cinematicViews" = "Cinematic Views"; "none" = "None"; "missing" = "Missing"; @@ -547,12 +686,6 @@ "requestFeature" = "Request a Feature"; "reportIssue" = "Report an Issue"; "showFlattenView" = "Flatten Library Items"; -"playAndPause" = "Play / Pause"; -"jumpForward" = "Jump Forward"; -"jumpBackward" = "Jump Backward"; -"close" = "Close"; -"nextItem" = "Next Item"; -"previousItem" = "Previous Item"; "unableToFindHost" = "Unable to find host"; "publicUsers" = "Public Users"; "noPublicUsers" = "No public Users"; @@ -560,23 +693,11 @@ "compactPoster" = "Compact Poster"; "compactLogo" = "Compact Logo"; "cinematic" = "Cinematic"; -"bugsAndFeatures" = "Bugs and Features"; -"invertedDark" = "Inverted Dark"; -"invertedLight" = "Inverted Light"; -"appIcon" = "App Icon"; "accentColor" = "Accent Color"; "accentColorDescription" = "Some views may need an app restart to update."; -"dismiss" = "Dismiss"; -"played" = "Played"; -"unplayed" = "Unplayed"; -"video" = "Video"; -"audio" = "Audio"; -"subtitle" = "Subtitle"; "specialFeatures" = "Special Features"; "collections" = "Collections"; "people" = "People"; -"usePrimaryImage" = "Use Primary Image"; -"usePrimaryImageDescription" = "Uses the primary image and hides the logo."; "hapticFeedback" = "Haptic Feedback"; "indicators" = "Indicators"; "posters" = "Posters"; @@ -585,10 +706,6 @@ "progress" = "Progress"; "indicators" = "Indicators"; "ratings" = "Ratings"; -"random" = "Random"; -"grid" = "Grid"; -"list" = "List"; -"logs" = "Logs"; "buttons" = "Buttons"; "playbackButtons" = "Playback Buttons"; "barButtons" = "Bar Buttons"; From 607df3231470ac967bd91c47ce8a4b36c734df43 Mon Sep 17 00:00:00 2001 From: Joseph Kribs Date: Wed, 17 Jul 2024 18:32:36 -0600 Subject: [PATCH 3/6] Finalized string sections! --- Shared/Strings/Strings.swift | 640 ++++++++++------------ Translations/en.lproj/Localizable.strings | 503 ++++++++++++----- 2 files changed, 679 insertions(+), 464 deletions(-) diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index b44745735..52ba8a124 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -10,626 +10,588 @@ import Foundation // swiftlint:disable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:disable nesting type_body_length type_name vertical_whitespace_opening_braces internal enum L10n { - /// About + /// Label to denote the section about a media item internal static let about = L10n.tr("Localizable", "about", fallback: "About") - /// Accent Color + /// Label for accent color selection internal static let accentColor = L10n.tr("Localizable", "accentColor", fallback: "Accent Color") - /// Some views may need an app restart to update. + /// Label explaining a restart may be required internal static let accentColorDescription = L10n.tr("Localizable", "accentColorDescription", fallback: "Some views may need an app restart to update.") - /// Accessibility + /// Represents the Accessibility section label internal static let accessibility = L10n.tr("Localizable", "accessibility", fallback: "Accessibility") - /// Add URL + /// Represents the label used to offer the user the ability to designate an additional URL for an existing Jellyfin Server internal static let addURL = L10n.tr("Localizable", "addURL", fallback: "Add URL") - /// Advanced + /// Represents the Advanced section label internal static let advanced = L10n.tr("Localizable", "advanced", fallback: "Advanced") - /// Airs %s + /// Label indicating a show airs on s specific day of the week internal static func airWithDate(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "airWithDate", p1, fallback: "Airs %s") } - /// All Genres - internal static let allGenres = L10n.tr("Localizable", "allGenres", fallback: "All Genres") - /// All Media + /// Section Label for the Media View internal static let allMedia = L10n.tr("Localizable", "allMedia", fallback: "All Media") - /// Appearance + /// Represents the Appearance setting label internal static let appearance = L10n.tr("Localizable", "appearance", fallback: "Appearance") - /// App Icon + /// Section Header Label for changing the Swiftfin App Icon internal static let appIcon = L10n.tr("Localizable", "appIcon", fallback: "App Icon") - /// Apply + /// Apply/Save the current values on the screen/form internal static let apply = L10n.tr("Localizable", "apply", fallback: "Apply") - /// Aspect Fill + /// Option for aspect fill display mode internal static let aspectFill = L10n.tr("Localizable", "aspectFill", fallback: "Aspect Fill") - /// Audio + /// Overlay Label for Selecting Audio Information/Settings internal static let audio = L10n.tr("Localizable", "audio", fallback: "Audio") - /// Audio & Captions + /// Section Label for Audio, Captions/Subtitles configuration on the Video Playback Overlay internal static let audioAndCaptions = L10n.tr("Localizable", "audioAndCaptions", fallback: "Audio & Captions") - /// Audio Offset + /// Label for audio offset settings internal static let audioOffset = L10n.tr("Localizable", "audioOffset", fallback: "Audio Offset") - /// Audio Track + /// Section label on the video player overlay to select the audio track for playback internal static let audioTrack = L10n.tr("Localizable", "audioTrack", fallback: "Audio Track") - /// Authorize + /// Represents the final step in the Quick Connect Authentication process using Swiftifn to Authorize another device internal static let authorize = L10n.tr("Localizable", "authorize", fallback: "Authorize") - /// Auto Play + /// Option to enable auto play internal static let autoPlay = L10n.tr("Localizable", "autoPlay", fallback: "Auto Play") - /// Back + /// Go back to the previous screen/form internal static let back = L10n.tr("Localizable", "back", fallback: "Back") - /// Bar Buttons + /// Label for bar buttons settings internal static let barButtons = L10n.tr("Localizable", "barButtons", fallback: "Bar Buttons") - /// Blue + /// Option for automatic bitrate selection + internal static let bitrateAuto = L10n.tr("Localizable", "bitrateAuto", fallback: "Auto") + /// Option to set the bitrate to 480p quality at 1.5 Mbps + internal static let bitrateKbps1500 = L10n.tr("Localizable", "bitrateKbps1500", fallback: "480p - 1.5 Mbps") + /// Option to set the bitrate to 360p quality at 420 Kbps + internal static let bitrateKbps420 = L10n.tr("Localizable", "bitrateKbps420", fallback: "360p - 420 Kbps") + /// Option to set the bitrate to 480p quality at 720 Kbps + internal static let bitrateKbps720 = L10n.tr("Localizable", "bitrateKbps720", fallback: "480p - 720 Kbps") + /// Option for the maximum bitrate + internal static let bitrateMax = L10n.tr("Localizable", "bitrateMax", fallback: "Maximum") + /// Option to set the bitrate to 1080p quality at 10 Mbps + internal static let bitrateMbps10 = L10n.tr("Localizable", "bitrateMbps10", fallback: "1080p - 10 Mbps") + /// Option to set the bitrate to 4K quality at 120 Mbps + internal static let bitrateMbps120 = L10n.tr("Localizable", "bitrateMbps120", fallback: "4K - 120 Mbps") + /// Option to set the bitrate to 1080p quality at 15 Mbps + internal static let bitrateMbps15 = L10n.tr("Localizable", "bitrateMbps15", fallback: "1080p - 15 Mbps") + /// Option to set the bitrate to 1080p quality at 20 Mbps + internal static let bitrateMbps20 = L10n.tr("Localizable", "bitrateMbps20", fallback: "1080p - 20 Mbps") + /// Option to set the bitrate to 480p quality at 3 Mbps + internal static let bitrateMbps3 = L10n.tr("Localizable", "bitrateMbps3", fallback: "480p - 3 Mbps") + /// Option to set the bitrate to 720p quality at 4 Mbps + internal static let bitrateMbps4 = L10n.tr("Localizable", "bitrateMbps4", fallback: "720p - 4 Mbps") + /// Option to set the bitrate to 1080p quality at 40 Mbps + internal static let bitrateMbps40 = L10n.tr("Localizable", "bitrateMbps40", fallback: "1080p - 40 Mbps") + /// Option to set the bitrate to 720p quality at 6 Mbps + internal static let bitrateMbps6 = L10n.tr("Localizable", "bitrateMbps6", fallback: "720p - 6 Mbps") + /// Option to set the bitrate to 1080p quality at 60 Mbps + internal static let bitrateMbps60 = L10n.tr("Localizable", "bitrateMbps60", fallback: "1080p - 60 Mbps") + /// Option to set the bitrate to 720p quality at 8 Mbps + internal static let bitrateMbps8 = L10n.tr("Localizable", "bitrateMbps8", fallback: "720p - 8 Mbps") + /// Option to set the bitrate to 4K quality at 80 Mbps + internal static let bitrateMbps80 = L10n.tr("Localizable", "bitrateMbps80", fallback: "4K - 80 Mbps") + /// Description for bitrate test duration indicating larger tests provide more accurate bitrates but may delay playback + internal static let bitrateTestDescription = L10n.tr("Localizable", "bitrateTestDescription", fallback: "Larger tests result in a more accurate bitrate but may delay playback") + /// Represents the label for all Jellyfin Icons that are Blue regardless of Backgound/Color Invert internal static let blue = L10n.tr("Localizable", "blue", fallback: "Blue") - /// Bugs and Features + /// Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Issue Tracking internal static let bugsAndFeatures = L10n.tr("Localizable", "bugsAndFeatures", fallback: "Bugs and Features") - /// Buttons + /// Label for buttons section internal static let buttons = L10n.tr("Localizable", "buttons", fallback: "Buttons") - /// Cancel + /// Stop the current operation or reset the screen/form internal static let cancel = L10n.tr("Localizable", "cancel", fallback: "Cancel") - /// Cannot connect to host - internal static let cannotConnectToHost = L10n.tr("Localizable", "cannotConnectToHost", fallback: "Cannot connect to host") - /// CAST - internal static let cast = L10n.tr("Localizable", "cast", fallback: "CAST") - /// Cast & Crew + /// Label for cast and crew information internal static let castAndCrew = L10n.tr("Localizable", "castAndCrew", fallback: "Cast & Crew") - /// Change Server + /// Represents the label for the button that takes the user to the Server selection screen internal static let changeServer = L10n.tr("Localizable", "changeServer", fallback: "Change Server") - /// Channels + /// Represents the the Library Labels for Live TV Channels internal static let channels = L10n.tr("Localizable", "channels", fallback: "Channels") - /// Chapters + /// Label for chapters section internal static let chapters = L10n.tr("Localizable", "chapters", fallback: "Chapters") - /// Chapter Slider + /// Label for chapter slider internal static let chapterSlider = L10n.tr("Localizable", "chapterSlider", fallback: "Chapter Slider") - /// Cinematic + /// Label for cinematic view internal static let cinematic = L10n.tr("Localizable", "cinematic", fallback: "Cinematic") - /// Cinematic Views + /// Label for cinematic views internal static let cinematicViews = L10n.tr("Localizable", "cinematicViews", fallback: "Cinematic Views") - /// Close + /// Leave/close the current menu internal static let close = L10n.tr("Localizable", "close", fallback: "Close") - /// Closed Captions + /// Label for indicating Closed Captions or Subtitles for a media item internal static let closedCaptions = L10n.tr("Localizable", "closedCaptions", fallback: "Closed Captions") - /// Collections + /// Represents the the Library Labels for Collections/Boxsets internal static let collections = L10n.tr("Localizable", "collections", fallback: "Collections") - /// Color + /// Label for color selection internal static let color = L10n.tr("Localizable", "color", fallback: "Color") - /// Coming soon - internal static let comingSoon = L10n.tr("Localizable", "comingSoon", fallback: "Coming soon") - /// Compact + /// Setting for Compact Text spacing as opposed to Normal Spacing internal static let compact = L10n.tr("Localizable", "compact", fallback: "Compact") - /// Compact Logo + /// Option for compact logo view internal static let compactLogo = L10n.tr("Localizable", "compactLogo", fallback: "Compact Logo") - /// Compact Poster + /// Option for compact poster view internal static let compactPoster = L10n.tr("Localizable", "compactPoster", fallback: "Compact Poster") - /// Confirm Close + /// tvOS Setting whether going back on the remote should close Swiftfin or if it should provide a confirmation first internal static let confirmClose = L10n.tr("Localizable", "confirmClose", fallback: "Confirm Close") - /// Connect + /// Represents the Connect Button label for the Server Details provided internal static let connect = L10n.tr("Localizable", "connect", fallback: "Connect") - /// Connect Manually - internal static let connectManually = L10n.tr("Localizable", "connectManually", fallback: "Connect Manually") - /// Connect to Jellyfin - internal static let connectToJellyfin = L10n.tr("Localizable", "connectToJellyfin", fallback: "Connect to Jellyfin") - /// Connect to a Jellyfin server + /// Represents the first Connect to Server label on a new installation internal static let connectToJellyfinServer = L10n.tr("Localizable", "connectToJellyfinServer", fallback: "Connect to a Jellyfin server") - /// Connect to a Jellyfin server to get started + /// Represents the first Connect to Server label on a new installation internal static let connectToJellyfinServerStart = L10n.tr("Localizable", "connectToJellyfinServerStart", fallback: "Connect to a Jellyfin server to get started") - /// Connect to Server + /// Represents the Connect Button label for the Server Details provided internal static let connectToServer = L10n.tr("Localizable", "connectToServer", fallback: "Connect to Server") - /// Containers - internal static let containers = L10n.tr("Localizable", "containers", fallback: "Containers") - /// Continue + /// Proceed or continue to the next screen as a proceed opposed to an agreement internal static let `continue` = L10n.tr("Localizable", "continue", fallback: "Continue") - /// Continue Watching + /// Represents the Home View section for items that are in-progress files internal static let continueWatching = L10n.tr("Localizable", "continueWatching", fallback: "Continue Watching") - /// Current + /// Label for current item internal static let current = L10n.tr("Localizable", "current", fallback: "Current") - /// Current Position + /// Label in the overlay to indicate the current time for the watched content internal static let currentPosition = L10n.tr("Localizable", "currentPosition", fallback: "Current Position") - /// Customize + /// Button label to customize settings internal static let customize = L10n.tr("Localizable", "customize", fallback: "Customize") - /// Dark + /// Represents the dark theme setting internal static let dark = L10n.tr("Localizable", "dark", fallback: "Dark") - /// Default Scheme - internal static let defaultScheme = L10n.tr("Localizable", "defaultScheme", fallback: "Default Scheme") - /// Delivery + /// Section Title for Media Stream Info Views for Stream Delivery Properties internal static let delivery = L10n.tr("Localizable", "delivery", fallback: "Delivery") - /// DIRECTOR - internal static let director = L10n.tr("Localizable", "director", fallback: "DIRECTOR") - /// Disabled + /// Feature/Setting is inactive internal static let disabled = L10n.tr("Localizable", "disabled", fallback: "Disabled") - /// Discovered Servers + /// Represents the section label for Jellyfin Server(s) that were found during Jellyfin Server Discovery internal static let discoveredServers = L10n.tr("Localizable", "discoveredServers", fallback: "Discovered Servers") - /// Dismiss + /// Dismiss a message or popup internal static let dismiss = L10n.tr("Localizable", "dismiss", fallback: "Dismiss") - /// Display order + /// Represents the the Filter Labels for Library/Search Sorting internal static let displayOrder = L10n.tr("Localizable", "displayOrder", fallback: "Display order") - /// Downloads + /// Section Label for the Media's Downloaded Media Section internal static let downloads = L10n.tr("Localizable", "downloads", fallback: "Downloads") - /// Edit Jump Lengths + /// Button label to edit jump lengths internal static let editJumpLengths = L10n.tr("Localizable", "editJumpLengths", fallback: "Edit Jump Lengths") - /// Empty Next Up - internal static let emptyNextUp = L10n.tr("Localizable", "emptyNextUp", fallback: "Empty Next Up") - /// Enabled + /// Feature/Setting is active internal static let enabled = L10n.tr("Localizable", "enabled", fallback: "Enabled") - /// Episode Landscape Poster + /// Label for episode landscape poster internal static let episodeLandscapePoster = L10n.tr("Localizable", "episodeLandscapePoster", fallback: "Episode Landscape Poster") - /// Episode %1$@ + /// Label for episode number internal static func episodeNumber(_ p1: Any) -> String { return L10n.tr("Localizable", "episodeNumber", String(describing: p1), fallback: "Episode %1$@") } - /// Episodes + /// Label used to designate an Episode contained within a Show Library internal static let episodes = L10n.tr("Localizable", "episodes", fallback: "Episodes") - /// Error + /// Generic error for handling uncaught & unexpected interactions internal static let error = L10n.tr("Localizable", "error", fallback: "Error") - /// Existing Server - internal static let existingServer = L10n.tr("Localizable", "existingServer", fallback: "Existing Server") - /// Existing User - internal static let existingUser = L10n.tr("Localizable", "existingUser", fallback: "Existing User") - /// Experimental + /// Represents a Settings Section for settings that are not fully ready internal static let experimental = L10n.tr("Localizable", "experimental", fallback: "Experimental") - /// Favorited + /// Represents the the Favorited Labels for Library/Search Filters internal static let favorited = L10n.tr("Localizable", "favorited", fallback: "Favorited") - /// Favorites + /// Section Label for the Media's Favorite Section internal static let favorites = L10n.tr("Localizable", "favorites", fallback: "Favorites") - /// File + /// A Media/Subtitle object as a File on a Server System or local device internal static let file = L10n.tr("Localizable", "file", fallback: "File") - /// Filter Results - internal static let filterResults = L10n.tr("Localizable", "filterResults", fallback: "Filter Results") - /// Filters + /// Represents the the Filter Labels for Library/Search Filters internal static let filters = L10n.tr("Localizable", "filters", fallback: "Filters") - /// Genres + /// Represents the the Filter Labels for Library/Search Filtering based on Item Genre(s) internal static let genres = L10n.tr("Localizable", "genres", fallback: "Genres") - /// Gestures + /// Section header for all Playback Gestures settings internal static let gestures = L10n.tr("Localizable", "gestures", fallback: "Gestures") - /// Green + /// Represents the label for all Jellyfin Icons that are Green regardless of Backgound/Color Invert internal static let green = L10n.tr("Localizable", "green", fallback: "Green") - /// Grid + /// Label for the Grid Feature that formats the Library Items in a Grid internal static let grid = L10n.tr("Localizable", "grid", fallback: "Grid") - /// Haptic Feedback - internal static let hapticFeedback = L10n.tr("Localizable", "hapticFeedback", fallback: "Haptic Feedback") - /// Home + /// Go back to the Home screen/form internal static let home = L10n.tr("Localizable", "home", fallback: "Home") - /// Indicators + /// Label for indicators settings internal static let indicators = L10n.tr("Localizable", "indicators", fallback: "Indicators") - /// Information + /// Label for information section internal static let information = L10n.tr("Localizable", "information", fallback: "Information") - /// Inverted Dark + /// App Icons that are Colored with the Selected Color but have a Black Background internal static let invertedDark = L10n.tr("Localizable", "invertedDark", fallback: "Inverted Dark") - /// Inverted Light + /// App Icons that are Colored with the Selected Color but have a White Background internal static let invertedLight = L10n.tr("Localizable", "invertedLight", fallback: "Inverted Light") - /// Items + /// Generic term for Movies/Episodes/Shows... etc internal static let items = L10n.tr("Localizable", "items", fallback: "Items") - /// Jump + /// Label for jump button internal static let jump = L10n.tr("Localizable", "jump", fallback: "Jump") - /// Jump Backward + /// Overlay Label for jumping backwards in the media based on the Jump configuration in Playback Settings internal static let jumpBackward = L10n.tr("Localizable", "jumpBackward", fallback: "Jump Backward") - /// Jump Backward Length + /// Section Title for setting how far backwards the jump backwards button goes internal static let jumpBackwardLength = L10n.tr("Localizable", "jumpBackwardLength", fallback: "Jump Backward Length") - /// Jump Forward + /// Overlay Label for jumping forward in the media based on the Jump configuration in Playback Settings internal static let jumpForward = L10n.tr("Localizable", "jumpForward", fallback: "Jump Forward") - /// Jump Forward Length + /// Section Title for setting how far forward the jump forward button goes internal static let jumpForwardLength = L10n.tr("Localizable", "jumpForwardLength", fallback: "Jump Forward Length") - /// Jump Gestures Enabled + /// Message Describing if gesture for jumping forward/backward is enabled internal static let jumpGesturesEnabled = L10n.tr("Localizable", "jumpGesturesEnabled", fallback: "Jump Gestures Enabled") - /// %s seconds + /// Label for jump length in seconds internal static func jumpLengthSeconds(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "jumpLengthSeconds", p1, fallback: "%s seconds") } - /// Kids + /// Represents the the Library Labels for Live TV Programs/Shows that are Kids Content internal static let kids = L10n.tr("Localizable", "kids", fallback: "Kids") - /// Larger + /// Option for a larger than regular item type internal static let larger = L10n.tr("Localizable", "larger", fallback: "Larger") - /// Largest + /// Option for the largest item type internal static let largest = L10n.tr("Localizable", "largest", fallback: "Largest") - /// Latest %@ + /// Represents the Home View section for All media items that are new for each Media Type internal static func latestWithString(_ p1: Any) -> String { return L10n.tr("Localizable", "latestWithString", String(describing: p1), fallback: "Latest %@") } - /// Left + /// The Letter Picker Bar will be on the Left/Leading side of the Library internal static let `left` = L10n.tr("Localizable", "left", fallback: "Left") - /// Letter Picker + /// Represents the Letter Picker Enabled section label internal static let letterPicker = L10n.tr("Localizable", "letterPicker", fallback: "Letter Picker") - /// Library + /// Label used to designate a Library internal static let library = L10n.tr("Localizable", "library", fallback: "Library") - /// Light + /// Represents the light theme setting internal static let light = L10n.tr("Localizable", "light", fallback: "Light") - /// List + /// Label for the List Feature that formats the Library Items in a List internal static let list = L10n.tr("Localizable", "list", fallback: "List") - /// Live TV + /// Section Label for the Media's Live TV Section internal static let liveTV = L10n.tr("Localizable", "liveTV", fallback: "Live TV") - /// Loading + /// View is loading data internal static let loading = L10n.tr("Localizable", "loading", fallback: "Loading") - /// Local Servers + /// Represents the section label for local/LAN Jellyfin Server(s) that were found during Jellyfin Server Discovery internal static let localServers = L10n.tr("Localizable", "localServers", fallback: "Local Servers") - /// Login - internal static let login = L10n.tr("Localizable", "login", fallback: "Login") - /// Login to %@ - internal static func loginToWithString(_ p1: Any) -> String { - return L10n.tr("Localizable", "loginToWithString", String(describing: p1), fallback: "Login to %@") - } - /// Logs + /// Section Label for the logs generated by Swiftfin internal static let logs = L10n.tr("Localizable", "logs", fallback: "Logs") - /// Media + /// Option to set the maximum bitrate for playback + internal static let maximumBitrate = L10n.tr("Localizable", "maximumBitrate", fallback: "Maximum Bitrate") + /// Section Label for all Media Library Sections internal static let media = L10n.tr("Localizable", "media", fallback: "Media") - /// Menu Buttons + /// Label for video player menu buttons internal static let menuButtons = L10n.tr("Localizable", "menuButtons", fallback: "Menu Buttons") - /// Missing + /// Label indicating missing items internal static let missing = L10n.tr("Localizable", "missing", fallback: "Missing") - /// Missing Items + /// Label for missing items section internal static let missingItems = L10n.tr("Localizable", "missingItems", fallback: "Missing Items") - /// More Like This + /// Represents the the Media Item section for Jellyfin recommendations internal static let moreLikeThis = L10n.tr("Localizable", "moreLikeThis", fallback: "More Like This") - /// Movies + /// Represents the the Library Labels for Movie Media Types internal static let movies = L10n.tr("Localizable", "movies", fallback: "Movies") - /// %d users - internal static func multipleUsers(_ p1: Int) -> String { - return L10n.tr("Localizable", "multipleUsers", p1, fallback: "%d users") - } - /// Name + /// Label indicating something's name internal static let name = L10n.tr("Localizable", "name", fallback: "Name") - /// Native Player + /// Indicates that Swiftfin playback is using AVKit internal static let nativePlayer = L10n.tr("Localizable", "nativePlayer", fallback: "Native Player") - /// Networking - internal static let networking = L10n.tr("Localizable", "networking", fallback: "Networking") - /// Network timed out - internal static let networkTimedOut = L10n.tr("Localizable", "networkTimedOut", fallback: "Network timed out") - /// News + /// Represents the the Library Labels for Live TV Programs/Shows that are News/Current Events Content internal static let news = L10n.tr("Localizable", "news", fallback: "News") - /// Next + /// Button label for the next item internal static let next = L10n.tr("Localizable", "next", fallback: "Next") - /// Next Item + /// Overlay Label for going to the next episode in a show internal static let nextItem = L10n.tr("Localizable", "nextItem", fallback: "Next Item") - /// Next Up + /// Represents the Home View section for Show items are in-progress Seasons internal static let nextUp = L10n.tr("Localizable", "nextUp", fallback: "Next Up") - /// No Cast devices found.. + /// Represents the Media Casting Device selection when no Media Casting Devices were found internal static let noCastdevicesfound = L10n.tr("Localizable", "noCastdevicesfound", fallback: "No Cast devices found..") - /// No Codec + /// Label indicating no codec is available internal static let noCodec = L10n.tr("Localizable", "noCodec", fallback: "No Codec") - /// No episodes available + /// Represents the label that will exist in place of an episode view if there are no episodes internal static let noEpisodesAvailable = L10n.tr("Localizable", "noEpisodesAvailable", fallback: "No episodes available") - /// No local servers found + /// Message Label to designate that the Server Discovery process did not find any local/LAN Server(s) internal static let noLocalServersFound = L10n.tr("Localizable", "noLocalServersFound", fallback: "No local servers found") - /// None + /// Label indicating none internal static let `none` = L10n.tr("Localizable", "none", fallback: "None") - /// No overview available + /// Label indicating no overview is available internal static let noOverviewAvailable = L10n.tr("Localizable", "noOverviewAvailable", fallback: "No overview available") - /// No public Users + /// Message indicating there are no public users internal static let noPublicUsers = L10n.tr("Localizable", "noPublicUsers", fallback: "No public Users") - /// No results. + /// Used as a catch when the Library and/or Filtering results in no value content internal static let noResults = L10n.tr("Localizable", "noResults", fallback: "No results.") - /// Normal + /// Setting for Normal Text spacing as opposed to Compact Spacing internal static let normal = L10n.tr("Localizable", "normal", fallback: "Normal") - /// N/A + /// Label for not available internal static let notAvailableSlash = L10n.tr("Localizable", "notAvailableSlash", fallback: "N/A") - /// Type: %@ not implemented yet :( + /// Represents media types that are not currently implemented internal static func notImplementedYetWithType(_ p1: Any) -> String { return L10n.tr("Localizable", "notImplementedYetWithType", String(describing: p1), fallback: "Type: %@ not implemented yet :(") } - /// No title + /// Label indicating no title is available internal static let noTitle = L10n.tr("Localizable", "noTitle", fallback: "No title") - /// Ok + /// Proceed with the current values on the screen/form internal static let ok = L10n.tr("Localizable", "ok", fallback: "Ok") - /// 1 user - internal static let oneUser = L10n.tr("Localizable", "oneUser", fallback: "1 user") - /// On Now + /// Represents the the Library Labels for Live TV Programs/Shows that are on Now internal static let onNow = L10n.tr("Localizable", "onNow", fallback: "On Now") - /// Operating System + /// Section Label for OS running the current connected Jellyfin Server internal static let operatingSystem = L10n.tr("Localizable", "operatingSystem", fallback: "Operating System") - /// Orange + /// Represents the label for all Jellyfin Icons that are Orange regardless of Backgound/Color Invert internal static let orange = L10n.tr("Localizable", "orange", fallback: "Orange") - /// Order + /// Button Label to indicate that this Filter Object sets the Library Order Ascending/Descending by the Sort Types internal static let order = L10n.tr("Localizable", "order", fallback: "Order") - /// Orientation + /// Represents the Letter Picker Orientation section label internal static let orientation = L10n.tr("Localizable", "orientation", fallback: "Orientation") - /// Other + /// Represents the the Library Labels for Other Media Types internal static let other = L10n.tr("Localizable", "other", fallback: "Other") - /// Other User - internal static let otherUser = L10n.tr("Localizable", "otherUser", fallback: "Other User") - /// Overlay - internal static let overlay = L10n.tr("Localizable", "overlay", fallback: "Overlay") - /// Overlay Type - internal static let overlayType = L10n.tr("Localizable", "overlayType", fallback: "Overlay Type") - /// Overview + /// Label for overview information internal static let overview = L10n.tr("Localizable", "overview", fallback: "Overview") - /// Page %1$@ of %2$@ - internal static func pageOfWithNumbers(_ p1: Any, _ p2: Any) -> String { - return L10n.tr("Localizable", "pageOfWithNumbers", String(describing: p1), String(describing: p2), fallback: "Page %1$@ of %2$@") - } - /// Password + /// Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password internal static let password = L10n.tr("Localizable", "password", fallback: "Password") - /// Pause on background + /// Option for pausing the Player when it's sent to the background internal static let pauseOnBackground = L10n.tr("Localizable", "pauseOnBackground", fallback: "Pause on background") - /// People + /// Label for people section of the Search View internal static let people = L10n.tr("Localizable", "people", fallback: "People") - /// Play + /// Represents the Media Item button label to start a Media Item playback internal static let play = L10n.tr("Localizable", "play", fallback: "Play") - /// Play / Pause + /// Overlay Label for Playing/Pausing currently watched content internal static let playAndPause = L10n.tr("Localizable", "playAndPause", fallback: "Play / Pause") - /// Playback + /// Represents the Playback section label internal static let playback = L10n.tr("Localizable", "playback", fallback: "Playback") - /// Playback Buttons + /// Label for playback buttons internal static let playbackButtons = L10n.tr("Localizable", "playbackButtons", fallback: "Playback Buttons") - /// Playback settings + /// Represents the Playback Settings section label internal static let playbackSettings = L10n.tr("Localizable", "playbackSettings", fallback: "Playback settings") - /// Playback Speed + /// Label for playback speed settings internal static let playbackSpeed = L10n.tr("Localizable", "playbackSpeed", fallback: "Playback Speed") - /// Played + /// Library Item has been watch by this user internal static let played = L10n.tr("Localizable", "played", fallback: "Played") - /// Player Gestures Lock Gesture Enabled + /// Message Describing the current enabled status of the Player's Gesture Lock internal static let playerGesturesLockGestureEnabled = L10n.tr("Localizable", "playerGesturesLockGestureEnabled", fallback: "Player Gestures Lock Gesture Enabled") - /// Play From Beginning + /// Option to play from the beginning internal static let playFromBeginning = L10n.tr("Localizable", "playFromBeginning", fallback: "Play From Beginning") - /// Play Next + /// Represents the Media Item button label to start the Media Item playback for a Collection of Items internal static let playNext = L10n.tr("Localizable", "playNext", fallback: "Play Next") - /// Play Next Item + /// Button label to play the next item internal static let playNextItem = L10n.tr("Localizable", "playNextItem", fallback: "Play Next Item") - /// Play on active + /// Option for resuming the Player when it's sent back to the foreground internal static let playOnActive = L10n.tr("Localizable", "playOnActive", fallback: "Play on active") - /// Play Previous Item + /// Button label to play the previous item internal static let playPreviousItem = L10n.tr("Localizable", "playPreviousItem", fallback: "Play Previous Item") - /// Posters + /// Label for Media Items posters internal static let posters = L10n.tr("Localizable", "posters", fallback: "Posters") - /// Present + /// Label for a show that is active until present internal static let present = L10n.tr("Localizable", "present", fallback: "Present") - /// Press Down for Menu + /// Label for press down for menu internal static let pressDownForMenu = L10n.tr("Localizable", "pressDownForMenu", fallback: "Press Down for Menu") - /// Previous Item + /// Overlay Label for going back to previous episode in a show internal static let previousItem = L10n.tr("Localizable", "previousItem", fallback: "Previous Item") - /// Primary + /// Represents the label for the default Jellyfin Icon for Swiftfin internal static let primary = L10n.tr("Localizable", "primary", fallback: "Primary") - /// Programs + /// Represents the the Library Labels for Live TV Programs internal static let programs = L10n.tr("Localizable", "programs", fallback: "Programs") - /// Progress + /// Label for playback progress internal static let progress = L10n.tr("Localizable", "progress", fallback: "Progress") - /// Public Users + /// Represents the section label for public users internal static let publicUsers = L10n.tr("Localizable", "publicUsers", fallback: "Public Users") - /// Quick Connect + /// Represents the Quick Connect Section title Label internal static let quickConnect = L10n.tr("Localizable", "quickConnect", fallback: "Quick Connect") - /// Quick Connect code + /// Represents the Quick Connect Section title Label for where the Code is input internal static let quickConnectCode = L10n.tr("Localizable", "quickConnectCode", fallback: "Quick Connect code") - /// Invalid Quick Connect code + /// Represents the Quick Connect message label when Quick Connect authorization for another device fails due to incorrect code internal static let quickConnectInvalidError = L10n.tr("Localizable", "quickConnectInvalidError", fallback: "Invalid Quick Connect code") - /// Note: Quick Connect not enabled + /// Represents the Quick Connect message label when Quick Connect authorization for another device fails due to being disabled on Server internal static let quickConnectNotEnabled = L10n.tr("Localizable", "quickConnectNotEnabled", fallback: "Note: Quick Connect not enabled") - /// 1. Open the Jellyfin app on your phone or web browser and sign in with your account + /// Represents the Quick Connect message message for step 1 when adding an account to Swiftfin using Quick Connect from another device internal static let quickConnectStep1 = L10n.tr("Localizable", "quickConnectStep1", fallback: "1. Open the Jellyfin app on your phone or web browser and sign in with your account") - /// 2. Open the user menu and go to the Quick Connect page + /// Represents the Quick Connect message message for step 2 when adding an account to Swiftfin using Quick Connect from another device internal static let quickConnectStep2 = L10n.tr("Localizable", "quickConnectStep2", fallback: "2. Open the user menu and go to the Quick Connect page") - /// 3. Enter the following code: + /// Represents the Quick Connect message message for step 3 when adding an account to Swiftfin using Quick Connect from another device internal static let quickConnectStep3 = L10n.tr("Localizable", "quickConnectStep3", fallback: "3. Enter the following code:") - /// Authorizing Quick Connect successful. Please continue on your other device. + /// Represents the Quick Connect message label when Quick Connect authorization for another device succeeds internal static let quickConnectSuccessMessage = L10n.tr("Localizable", "quickConnectSuccessMessage", fallback: "Authorizing Quick Connect successful. Please continue on your other device.") - /// Random + /// Label for the Random Feature that sends the users to a Random Library Item internal static let random = L10n.tr("Localizable", "random", fallback: "Random") - /// Random Image + /// Media Items will use a Random Image opposed to their Cover Image internal static let randomImage = L10n.tr("Localizable", "randomImage", fallback: "Random Image") - /// Rated - internal static let rated = L10n.tr("Localizable", "rated", fallback: "Rated") - /// Ratings + /// Label for ratings section internal static let ratings = L10n.tr("Localizable", "ratings", fallback: "Ratings") - /// Recently Added + /// Label for recently added items internal static let recentlyAdded = L10n.tr("Localizable", "recentlyAdded", fallback: "Recently Added") - /// Recommended + /// Label for recommended items internal static let recommended = L10n.tr("Localizable", "recommended", fallback: "Recommended") - /// Red + /// Represents the label for all Jellyfin Icons that are Red regardless of Backgound/Color Invert internal static let red = L10n.tr("Localizable", "red", fallback: "Red") - /// Refresh + /// Refresh the current view internal static let refresh = L10n.tr("Localizable", "refresh", fallback: "Refresh") - /// Regular + /// Option for the a standard/regular item type internal static let regular = L10n.tr("Localizable", "regular", fallback: "Regular") - /// Released + /// Label indicating the released date internal static let released = L10n.tr("Localizable", "released", fallback: "Released") - /// Reload + /// Reload the current view internal static let reload = L10n.tr("Localizable", "reload", fallback: "Reload") - /// Remaining Time + /// Label in the overlay to indicate time remaining in the watched content internal static let remainingTime = L10n.tr("Localizable", "remainingTime", fallback: "Remaining Time") - /// Remove + /// Button label to remove an item internal static let remove = L10n.tr("Localizable", "remove", fallback: "Remove") - /// Remove All Servers + /// Represents a label for a button to remove all Users & Servers in Swiftfin internal static let removeAllServers = L10n.tr("Localizable", "removeAllServers", fallback: "Remove All Servers") - /// Remove All Users + /// Represents a label for a button to remove all Users from a Jellyfin Server in Swiftfin internal static let removeAllUsers = L10n.tr("Localizable", "removeAllUsers", fallback: "Remove All Users") - /// Remove From Resume + /// Option to remove from resume internal static let removeFromResume = L10n.tr("Localizable", "removeFromResume", fallback: "Remove From Resume") - /// Report an Issue + /// Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Issue Reporting internal static let reportIssue = L10n.tr("Localizable", "reportIssue", fallback: "Report an Issue") - /// Request a Feature + /// Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Feature Requesting internal static let requestFeature = L10n.tr("Localizable", "requestFeature", fallback: "Request a Feature") - /// Reset + /// Reset the form/screen back to the default/previous values internal static let reset = L10n.tr("Localizable", "reset", fallback: "Reset") - /// Reset all settings back to defaults. + /// Message explaining internal static let resetAllSettings = L10n.tr("Localizable", "resetAllSettings", fallback: "Reset all settings back to defaults.") - /// Reset App Settings + /// Section Label for Full App Settings Reset internal static let resetAppSettings = L10n.tr("Localizable", "resetAppSettings", fallback: "Reset App Settings") - /// Reset User Settings + /// Section Label for User Settings Reset internal static let resetUserSettings = L10n.tr("Localizable", "resetUserSettings", fallback: "Reset User Settings") - /// Resume 5 Second Offset + /// Option for a 5-second resume offset internal static let resume5SecondOffset = L10n.tr("Localizable", "resume5SecondOffset", fallback: "Resume 5 Second Offset") - /// Resume Offset + /// Label for resume offset settings internal static let resumeOffset = L10n.tr("Localizable", "resumeOffset", fallback: "Resume Offset") - /// Resume content seconds before the recorded resume time + /// Description for resume offset settings internal static let resumeOffsetDescription = L10n.tr("Localizable", "resumeOffsetDescription", fallback: "Resume content seconds before the recorded resume time") - /// Retrieving media information + /// Message indicating media information is being retrieved internal static let retrievingMediaInformation = L10n.tr("Localizable", "retrievingMediaInformation", fallback: "Retrieving media information") - /// Retry + /// Retry an action typical after it failed the first time internal static let retry = L10n.tr("Localizable", "retry", fallback: "Retry") - /// Right + /// The Letter Picker Bar will be on the Right/Trailing side of the Library internal static let `right` = L10n.tr("Localizable", "right", fallback: "Right") - /// Runtime + /// Label for runtime information internal static let runtime = L10n.tr("Localizable", "runtime", fallback: "Runtime") - /// Scrub Current Time + /// Label for scrub current time internal static let scrubCurrentTime = L10n.tr("Localizable", "scrubCurrentTime", fallback: "Scrub Current Time") - /// Search + /// Represents the Section Label for the Search View internal static let search = L10n.tr("Localizable", "search", fallback: "Search") - /// Search… + /// Represents the Search action designated as in-progress or an option on the view. Also used during Server Discovery internal static let searchDots = L10n.tr("Localizable", "searchDots", fallback: "Search…") - /// Searching… - internal static let searchingDots = L10n.tr("Localizable", "searchingDots", fallback: "Searching…") - /// Season + /// Represents the the Library Labels for Show Media Types with a single Season internal static let season = L10n.tr("Localizable", "season", fallback: "Season") - /// S%1$@:E%2$@ + /// Represents the Media Item label to denote a Show's Season & Episode internal static func seasonAndEpisode(_ p1: Any, _ p2: Any) -> String { return L10n.tr("Localizable", "seasonAndEpisode", String(describing: p1), String(describing: p2), fallback: "S%1$@:E%2$@") } - /// Seasons + /// Represents the the Library Labels for Show Media Types with multiple Seasons internal static let seasons = L10n.tr("Localizable", "seasons", fallback: "Seasons") - /// See All + /// Expand a section to see all items internal static let seeAll = L10n.tr("Localizable", "seeAll", fallback: "See All") - /// Seek Slide Gesture Enabled + /// Message Describing the current enabled status of the Player's Gesture to Seek on the Timeline for currently playing content internal static let seekSlideGestureEnabled = L10n.tr("Localizable", "seekSlideGestureEnabled", fallback: "Seek Slide Gesture Enabled") - /// See More + /// Button label to see more content internal static let seeMore = L10n.tr("Localizable", "seeMore", fallback: "See More") - /// Select Cast Destination + /// Represents the Media Casting Device selection label internal static let selectCastDestination = L10n.tr("Localizable", "selectCastDestination", fallback: "Select Cast Destination") - /// Series + /// Represents the the Library Labels for Series / Shows Media Type internal static let series = L10n.tr("Localizable", "series", fallback: "Series") - /// Series Backdrop + /// Label for series backdrop internal static let seriesBackdrop = L10n.tr("Localizable", "seriesBackdrop", fallback: "Series Backdrop") - /// Server + /// Generic term for the Active Jellyfin Server internal static let server = L10n.tr("Localizable", "server", fallback: "Server") - /// Server %s is already connected + /// Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password internal static func serverAlreadyConnected(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "serverAlreadyConnected", p1, fallback: "Server %s is already connected") } - /// Server %s already exists. Add new URL? + /// Represents the label used to offer the user the ability to designate an additional URL for an existing Jellyfin Server internal static func serverAlreadyExistsPrompt(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "serverAlreadyExistsPrompt", p1, fallback: "Server %s already exists. Add new URL?") } - /// Server Details + /// Section Label for details about the current connected Jellyfin Server internal static let serverDetails = L10n.tr("Localizable", "serverDetails", fallback: "Server Details") - /// Server Information + /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information internal static let serverInformation = L10n.tr("Localizable", "serverInformation", fallback: "Server Information") - /// Servers + /// Generic term for one or more Jellyfin Server internal static let servers = L10n.tr("Localizable", "servers", fallback: "Servers") - /// Server URL + /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information internal static let serverURL = L10n.tr("Localizable", "serverURL", fallback: "Server URL") - /// Settings + /// Section Label for the Settings Screen internal static let settings = L10n.tr("Localizable", "settings", fallback: "Settings") - /// Show Cast & Crew + /// Option to show cast and crew information internal static let showCastAndCrew = L10n.tr("Localizable", "showCastAndCrew", fallback: "Show Cast & Crew") - /// Show Chapters Info In Bottom Overlay + /// Option to enable chapters info in the bottom overlay internal static let showChaptersInfoInBottomOverlay = L10n.tr("Localizable", "showChaptersInfoInBottomOverlay", fallback: "Show Chapters Info In Bottom Overlay") - /// Flatten Library Items + /// Option to flatten library items internal static let showFlattenView = L10n.tr("Localizable", "showFlattenView", fallback: "Flatten Library Items") - /// Show Missing Episodes + /// Option to show missing episodes internal static let showMissingEpisodes = L10n.tr("Localizable", "showMissingEpisodes", fallback: "Show Missing Episodes") - /// Show Missing Seasons + /// Option to show missing seasons internal static let showMissingSeasons = L10n.tr("Localizable", "showMissingSeasons", fallback: "Show Missing Seasons") - /// Show Poster Labels + /// Option to show poster labels internal static let showPosterLabels = L10n.tr("Localizable", "showPosterLabels", fallback: "Show Poster Labels") - /// Signed in as %@ - internal static func signedInAsWithString(_ p1: Any) -> String { - return L10n.tr("Localizable", "signedInAsWithString", String(describing: p1), fallback: "Signed in as %@") - } - /// Sign In + /// Button label that confirms the user information and attempts to sign them in internal static let signIn = L10n.tr("Localizable", "signIn", fallback: "Sign In") - /// Sign in to get started + /// Message on first setup pointing the user to sign in internal static let signInGetStarted = L10n.tr("Localizable", "signInGetStarted", fallback: "Sign in to get started") - /// Sign In to %s + /// Message indicating the server that the user is signing in to internal static func signInToServer(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "signInToServer", p1, fallback: "Sign In to %s") } - /// Slider + /// Label for slider settings internal static let slider = L10n.tr("Localizable", "slider", fallback: "Slider") - /// Slider Color + /// Label for slider color internal static let sliderColor = L10n.tr("Localizable", "sliderColor", fallback: "Slider Color") - /// Slider Type + /// Label for slider type internal static let sliderType = L10n.tr("Localizable", "sliderType", fallback: "Slider Type") - /// Smaller + /// Option for a smaller than regular item type internal static let smaller = L10n.tr("Localizable", "smaller", fallback: "Smaller") - /// Smallest + /// Option for the smallest item type internal static let smallest = L10n.tr("Localizable", "smallest", fallback: "Smallest") - /// Sort + /// Button Label to indicate that this Filter Object sets the Library Order by an Item/Filter internal static let sort = L10n.tr("Localizable", "sort", fallback: "Sort") - /// Sort by + /// Represents the the Filter Labels for Library/Search Sorting based on Item Attribute internal static let sortBy = L10n.tr("Localizable", "sortBy", fallback: "Sort by") - /// Source Code + /// Label for source code internal static let sourceCode = L10n.tr("Localizable", "sourceCode", fallback: "Source Code") - /// Special Features + /// Label for special features section internal static let specialFeatures = L10n.tr("Localizable", "specialFeatures", fallback: "Special Features") - /// Sports + /// Represents the the Library Labels for Live TV Programs/Shows that are Sports Content internal static let sports = L10n.tr("Localizable", "sports", fallback: "Sports") - /// STUDIO - internal static let studio = L10n.tr("Localizable", "studio", fallback: "STUDIO") - /// Studios + /// Represents the the Filter Labels for Library/Search Filtering based on Item Studio internal static let studios = L10n.tr("Localizable", "studios", fallback: "Studios") - /// Subtitle + /// Overlay Label for Selecting Subtitle/Caption Information/Settings internal static let subtitle = L10n.tr("Localizable", "subtitle", fallback: "Subtitle") - /// Subtitle Color + /// Section Label to for a configuration to customize subtitle color internal static let subtitleColor = L10n.tr("Localizable", "subtitleColor", fallback: "Subtitle Color") - /// Subtitle Font + /// Section Label to for a configuration to customize subtitle font internal static let subtitleFont = L10n.tr("Localizable", "subtitleFont", fallback: "Subtitle Font") - /// Subtitle Offset + /// Section Label to for a configuration to offset subtitles at playback internal static let subtitleOffset = L10n.tr("Localizable", "subtitleOffset", fallback: "Subtitle Offset") - /// Subtitles + /// Label for subtitles settings/selection internal static let subtitles = L10n.tr("Localizable", "subtitles", fallback: "Subtitles") - /// Subtitle Size + /// Section Label to for a configuration to customize subtitle size internal static let subtitleSize = L10n.tr("Localizable", "subtitleSize", fallback: "Subtitle Size") - /// Suggestions - internal static let suggestions = L10n.tr("Localizable", "suggestions", fallback: "Suggestions") - /// Switch User + /// Represents the label used in the User Settings to change users and go to the Server Selection/Login page internal static let switchUser = L10n.tr("Localizable", "switchUser", fallback: "Switch User") - /// System + /// Represents the system theme setting internal static let system = L10n.tr("Localizable", "system", fallback: "System") - /// System Control Gestures Enabled + /// Message Describing the current enabled status of the Player's Gestures for System Contols like Volume/Brightness internal static let systemControlGesturesEnabled = L10n.tr("Localizable", "systemControlGesturesEnabled", fallback: "System Control Gestures Enabled") - /// Tags + /// Represents the the Filter Labels for Library/Search Filtering based on Item Tag(s) internal static let tags = L10n.tr("Localizable", "tags", fallback: "Tags") - /// Timestamp + /// Option to set the test sizes for bitrate testing + internal static let testSize = L10n.tr("Localizable", "testSize", fallback: "Test Size") + /// Label for timestamp settings internal static let timestamp = L10n.tr("Localizable", "timestamp", fallback: "Timestamp") - /// Timestamp Type + /// Label for timestamp type internal static let timestampType = L10n.tr("Localizable", "timestampType", fallback: "Timestamp Type") - /// Too Many Redirects + /// Message indicating too many redirects internal static let tooManyRedirects = L10n.tr("Localizable", "tooManyRedirects", fallback: "Too Many Redirects") - /// Trailing Value + /// Label for trailing value internal static let trailingValue = L10n.tr("Localizable", "trailingValue", fallback: "Trailing Value") - /// Transition + /// Label to denote the Transition Section internal static let transition = L10n.tr("Localizable", "transition", fallback: "Transition") - /// Try again + /// Re-attempt to load a previously failed object internal static let tryAgain = L10n.tr("Localizable", "tryAgain", fallback: "Try again") - /// TV Shows + /// Represents the the Library Labels for Show Media Types internal static let tvShows = L10n.tr("Localizable", "tvShows", fallback: "TV Shows") - /// Unable to connect to server + /// The Server Add/Sign in process has failed and this message is displayed internal static let unableToConnectServer = L10n.tr("Localizable", "unableToConnectServer", fallback: "Unable to connect to server") - /// Unable to find host + /// Message indicating the host could not be found internal static let unableToFindHost = L10n.tr("Localizable", "unableToFindHost", fallback: "Unable to find host") - /// Unaired + /// Label indicating a show that has not aired internal static let unaired = L10n.tr("Localizable", "unaired", fallback: "Unaired") - /// Unauthorized + /// Message indicating unauthorized access internal static let unauthorized = L10n.tr("Localizable", "unauthorized", fallback: "Unauthorized") - /// Unauthorized user + /// Message indicating an unauthorized user internal static let unauthorizedUser = L10n.tr("Localizable", "unauthorizedUser", fallback: "Unauthorized user") - /// Unknown + /// Generic label for unknown objects internal static let unknown = L10n.tr("Localizable", "unknown", fallback: "Unknown") - /// Unknown Error + /// Generic error for handling uncaught & unexpected interactions internal static let unknownError = L10n.tr("Localizable", "unknownError", fallback: "Unknown Error") - /// Unplayed + /// Library Item has not been watch by this user internal static let unplayed = L10n.tr("Localizable", "unplayed", fallback: "Unplayed") - /// URL + /// Label indicating the Jellyfin Server URL internal static let url = L10n.tr("Localizable", "url", fallback: "URL") - /// Use Primary Image + /// Label for the setting to use the Primary Image for Media Items internal static let usePrimaryImage = L10n.tr("Localizable", "usePrimaryImage", fallback: "Use Primary Image") - /// Uses the primary image and hides the logo. + /// Label the message explainging the 'User Primary Image' setting internal static let usePrimaryImageDescription = L10n.tr("Localizable", "usePrimaryImageDescription", fallback: "Uses the primary image and hides the logo.") - /// User + /// Label for user settings internal static let user = L10n.tr("Localizable", "user", fallback: "User") - /// User %s is already signed in - internal static func userAlreadySignedIn(_ p1: UnsafePointer) -> String { - return L10n.tr("Localizable", "userAlreadySignedIn", p1, fallback: "User %s is already signed in") - } - /// Username + /// Represents the label used to head the section where a username needs to be provided to connect to a server internal static let username = L10n.tr("Localizable", "username", fallback: "Username") - /// Version + /// Label for the server version field internal static let version = L10n.tr("Localizable", "version", fallback: "Version") - /// Video + /// Overlay Label for Selecting Video Information/Settings internal static let video = L10n.tr("Localizable", "video", fallback: "Video") - /// Video Player + /// Section Title for the Video Player Settings Section internal static let videoPlayer = L10n.tr("Localizable", "videoPlayer", fallback: "Video Player") - /// Video Player Type + /// Section Title for the Video Player Type Setting between VLC, and AVKit internal static let videoPlayerType = L10n.tr("Localizable", "videoPlayerType", fallback: "Video Player Type") - /// Who's watching? - internal static let whosWatching = L10n.tr("Localizable", "WhosWatching", fallback: "Who's watching?") - /// WIP - internal static let wip = L10n.tr("Localizable", "wip", fallback: "WIP") - /// Yellow + /// Represents the label for all Jellyfin Icons that are Yellow regardless of Backgound/Color Invert internal static let yellow = L10n.tr("Localizable", "yellow", fallback: "Yellow") - /// Your Favorites - internal static let yourFavorites = L10n.tr("Localizable", "yourFavorites", fallback: "Your Favorites") } // swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index ed3ed6d64..1b960b96f 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -8,6 +8,16 @@ "notImplementedYetWithType" = "Type: %@ not implemented yet :("; +/* MARK: Error Handling */ + + +/* Label indicating no overview is available */ +"noOverviewAvailable" = "No overview available"; + +/* Message indicating too many redirects */ +"tooManyRedirects" = "Too Many Redirects"; + + /* MARK: General */ @@ -17,6 +27,9 @@ /* Go back to the previous screen/form */ "back" = "Back"; +/* Label for buttons section */ +"buttons" = "Buttons"; + /* Stop the current operation or reset the screen/form */ "cancel" = "Cancel"; @@ -26,6 +39,9 @@ /* Proceed or continue to the next screen as a proceed opposed to an agreement */ "continue" = "Continue"; +/* Label for current item */ +"current" = "Current"; + /* Dismiss a message or popup */ "dismiss" = "Dismiss"; @@ -44,12 +60,27 @@ /* Go back to the Home screen/form */ "home" = "Home"; +/* Label for information section */ +"information" = "Information"; + /* Generic term for Movies/Episodes/Shows... etc */ "items" = "Items"; /* View is loading data */ "loading" = "Loading"; +/* Label indicating missing items */ +"missing" = "Missing"; + +/* Label indicating something's name */ +"name" = "Name"; + +/* Button label for the next item */ +"next" = "Next"; + +/* Label indicating none */ +"none" = "None"; + /* Proceed with the current values on the screen/form */ "ok" = "Ok"; @@ -59,6 +90,9 @@ /* Reload the current view */ "reload" = "Reload"; +/* Button label to remove an item */ +"remove" = "Remove"; + /* Reset the form/screen back to the default/previous values */ "reset" = "Reset"; @@ -68,6 +102,9 @@ /* Expand a section to see all items */ "seeAll" = "See All"; +/* Button label to see more content */ +"seeMore" = "See More"; + /* Generic term for the Active Jellyfin Server */ "server" = "Server"; @@ -96,32 +133,122 @@ /* Represents the Home View section for Show items are in-progress Seasons */ "nextUp" = "Next Up"; +/* Label for recently added items */ +"recentlyAdded" = "Recently Added"; + +/* Option to remove from resume */ +"removeFromResume" = "Remove From Resume"; + /* MARK: Item - Generic */ +/* Label for chapter slider */ +"chapterSlider" = "Chapter Slider"; + +/* Label for chapters section */ +"chapters" = "Chapters"; + +/* Label for missing items section */ +"missingItems" = "Missing Items"; + /* Represents the the Media Item section for Jellyfin recommendations */ "moreLikeThis" = "More Like This"; -/* Represents the Media Item button label to start a Media Item playback */ -"play" = "Play"; +/* Label for not available */ +"notAvailableSlash" = "N/A"; + +/* Label indicating no codec is available */ +"noCodec" = "No Codec"; + +/* Label indicating no title is available */ +"noTitle" = "No title"; /* Represents the Media Item button label to start the Media Item playback for a Collection of Items */ "playNext" = "Play Next"; -/* Represents the Media Item label to denote a Show's Season & Episode */ -"seasonAndEpisode" = "S%1$@:E%2$@"; +/* Message indicating media information is being retrieved */ +"retrievingMediaInformation" = "Retrieving media information"; + +/* Label indicating the released date */ +"released" = "Released"; + +/* Label for subtitles settings/selection */ +"subtitles" = "Subtitles"; /* MARK: Item - Shows */ +/* Label indicating a show airs on s specific day of the week */ +"airWithDate" = "Airs %s"; /* Label used to designate an Episode contained within a Show Library */ "episodes" = "Episodes"; +/* Label for episode landscape poster */ +"episodeLandscapePoster" = "Episode Landscape Poster"; + +/* Label for episode number */ +"episodeNumber" = "Episode %1$@"; + /* Represents the label that will exist in place of an episode view if there are no episodes */ "noEpisodesAvailable" = "No episodes available"; +/* Label for a show that is active until present */ +"present" = "Present"; + +/* Represents the Media Item label to denote a Show's Season & Episode */ +"seasonAndEpisode" = "S%1$@:E%2$@"; + +/* Label for series backdrop */ +"seriesBackdrop" = "Series Backdrop"; + +/* Label indicating a show that has not aired */ +"unaired" = "Unaired"; + + +/* MARK: Item - View */ + + +/* Label to denote the section about a media item */ +"about" = "About"; + +/* Label for cast and crew information */ +"castAndCrew" = "Cast & Crew"; + +/* Label for cinematic view */ +"cinematic" = "Cinematic"; + +/* Label for cinematic views */ +"cinematicViews" = "Cinematic Views"; + +/* Option for compact logo view */ +"compactLogo" = "Compact Logo"; + +/* Option for compact poster view */ +"compactPoster" = "Compact Poster"; + +/* Label for overview information */ +"overview" = "Overview"; + +/* Represents the Media Item button label to start a Media Item playback */ +"play" = "Play"; + +/* Label for Media Items posters */ +"posters" = "Posters"; + +/* Label for recommended items */ +"recommended" = "Recommended"; + +/* Label for ratings section */ +"ratings" = "Ratings"; + +/* Label for runtime information */ +"runtime" = "Runtime"; + +/* Label for special features section */ +"specialFeatures" = "Special Features"; + /* MARK: Libraries - Generic */ @@ -132,6 +259,9 @@ /* Library Item has been watch by this user */ "played" = "Played"; +/* Media Items will use a Random Image opposed to their Cover Image */ +"randomImage" = "Random Image"; + /* Library Item has not been watch by this user */ "unplayed" = "Unplayed"; @@ -142,6 +272,9 @@ /* Represents the the Filter Labels for Library/Search Sorting */ "displayOrder" = "Display order"; +/* Represents the the Favorited Labels for Library/Search Filters */ +"favorited" = "Favorited"; + /* Represents the the Filter Labels for Library/Search Filters */ "filters" = "Filters"; @@ -173,6 +306,9 @@ /* Represents the the Library Labels for Live TV Channels */ "channels" = "Channels"; +/* Represents the the Library Labels for Collections/Boxsets */ +"collections" = "Collections"; + /* Label for the Grid Feature that formats the Library Items in a Grid */ "grid" = "Grid"; @@ -197,6 +333,9 @@ /* Represents the the Library Labels for Show Media Types with multiple Seasons */ "seasons" = "Seasons"; +/* Represents the the Library Labels for Series / Shows Media Type */ +"series" = "Series"; + /* Represents the the Library Labels for Show Media Types */ "tvShows" = "TV Shows"; @@ -277,6 +416,9 @@ /* MARK: Search */ +/* Label for people section of the Search View */ +"people" = "People"; + /* Represents the Section Label for the Search View */ "search" = "Search"; @@ -354,9 +496,106 @@ "advanced" = "Advanced"; +/* MARK: Settings - Bitrate Options */ + + +/* Option for automatic bitrate selection */ +"bitrateAuto" = "Auto"; + +/* Option to set the bitrate to 480p quality at 1.5 Mbps */ +"bitrateKbps1500" = "480p - 1.5 Mbps"; + +/* Option to set the bitrate to 360p quality at 420 Kbps */ +"bitrateKbps420" = "360p - 420 Kbps"; + +/* Option to set the bitrate to 480p quality at 720 Kbps */ +"bitrateKbps720" = "480p - 720 Kbps"; + +/* Option for the maximum bitrate */ +"bitrateMax" = "Maximum"; + +/* Option to set the bitrate to 1080p quality at 10 Mbps */ +"bitrateMbps10" = "1080p - 10 Mbps"; + +/* Option to set the bitrate to 1080p quality at 15 Mbps */ +"bitrateMbps15" = "1080p - 15 Mbps"; + +/* Option to set the bitrate to 1080p quality at 20 Mbps */ +"bitrateMbps20" = "1080p - 20 Mbps"; + +/* Option to set the bitrate to 1080p quality at 40 Mbps */ +"bitrateMbps40" = "1080p - 40 Mbps"; + +/* Option to set the bitrate to 1080p quality at 60 Mbps */ +"bitrateMbps60" = "1080p - 60 Mbps"; + +/* Option to set the bitrate to 4K quality at 80 Mbps */ +"bitrateMbps80" = "4K - 80 Mbps"; + +/* Option to set the bitrate to 4K quality at 120 Mbps */ +"bitrateMbps120" = "4K - 120 Mbps"; + +/* Option to set the bitrate to 480p quality at 3 Mbps */ +"bitrateMbps3" = "480p - 3 Mbps"; + +/* Option to set the bitrate to 720p quality at 4 Mbps */ +"bitrateMbps4" = "720p - 4 Mbps"; + +/* Option to set the bitrate to 720p quality at 6 Mbps */ +"bitrateMbps6" = "720p - 6 Mbps"; + +/* Option to set the bitrate to 720p quality at 8 Mbps */ +"bitrateMbps8" = "720p - 8 Mbps"; + +/* Description for bitrate test duration indicating larger tests provide more accurate bitrates but may delay playback */ +"bitrateTestDescription" = "Larger tests result in a more accurate bitrate but may delay playback"; + +/* Option to set the maximum bitrate for playback */ +"maximumBitrate" = "Maximum Bitrate"; + +/* Option to set the test sizes for bitrate testing */ +"testSize" = "Test Size"; + + /* MARK: Settings - Customization */ +/* Label for accent color selection */ +"accentColor" = "Accent Color"; + +/* Label explaining a restart may be required */ +"accentColorDescription" = "Some views may need an app restart to update."; + +/* Label for color selection */ +"color" = "Color"; + +/* Button label to customize settings */ +"customize" = "Customize"; + +/* Button label to edit jump lengths */ +"editJumpLengths" = "Edit Jump Lengths"; + +/* Label for indicators settings */ +"indicators" = "Indicators"; + +/* Option to show cast and crew information */ +"showCastAndCrew" = "Show Cast & Crew"; + +/* Option to enable chapters info in the bottom overlay */ +"showChaptersInfoInBottomOverlay" = "Show Chapters Info In Bottom Overlay"; + +/* Option to flatten library items */ +"showFlattenView" = "Flatten Library Items"; + +/* Option to show missing episodes */ +"showMissingEpisodes" = "Show Missing Episodes"; + +/* Option to show missing seasons */ +"showMissingSeasons" = "Show Missing Seasons"; + +/* Option to show poster labels */ +"showPosterLabels" = "Show Poster Labels"; + /* Label for the setting to use the Primary Image for Media Items */ "usePrimaryImage" = "Use Primary Image"; @@ -382,10 +621,15 @@ /* MARK: Settings - Playback */ +/* Option to enable auto play */ +"autoPlay" = "Auto Play"; /* Section header for all Playback Gestures settings */ "gestures" = "Gestures"; +/* Label for jump button */ +"jump" = "Jump"; + /* Section Title for setting how far backwards the jump backwards button goes */ "jumpBackwardLength" = "Jump Backward Length"; @@ -395,6 +639,12 @@ /* Message Describing if gesture for jumping forward/backward is enabled */ "jumpGesturesEnabled" = "Jump Gestures Enabled"; +/* Label for jump length in seconds */ +"jumpLengthSeconds" = "%s seconds"; + +/* Label for video player menu buttons */ +"menuButtons" = "Menu Buttons"; + /* Indicates that Swiftfin playback is using AVKit */ "nativePlayer" = "Native Player"; @@ -404,15 +654,37 @@ /* Message Describing the current enabled status of the Player's Gesture Lock */ "playerGesturesLockGestureEnabled" = "Player Gestures Lock Gesture Enabled"; +/* Label for playback buttons */ +"playbackButtons" = "Playback Buttons"; + +/* Label for playback speed settings */ +"playbackSpeed" = "Playback Speed"; + /* Represents the Playback Settings section label */ "playbackSettings" = "Playback settings"; -/* Represents the Playback Speed section label */ -"playbackSpeed" = "Playback Speed"; +/* Label for resume offset settings */ +"resumeOffset" = "Resume Offset"; + +/* Description for resume offset settings */ +"resumeOffsetDescription" = "Resume content seconds before the recorded resume time"; + +/* Option for a 5-second resume offset */ +"resume5SecondOffset" = "Resume 5 Second Offset"; /* Message Describing the current enabled status of the Player's Gesture to Seek on the Timeline for currently playing content */ "seekSlideGestureEnabled" = "Seek Slide Gesture Enabled"; +/* Label for slider settings */ +"slider" = "Slider"; + +/* Label for slider color */ +"sliderColor" = "Slider Color"; + +/* Label for slider type */ +"sliderType" = "Slider Type"; + + /* Message Describing the current enabled status of the Player's Gestures for System Contols like Volume/Brightness */ "systemControlGesturesEnabled" = "System Control Gestures Enabled"; @@ -436,6 +708,25 @@ "resetAppSettings" = "Reset App Settings"; +/* MARK: Settings - Sizes */ + + +/* Option for a larger than regular item type */ +"larger" = "Larger"; + +/* Option for the largest item type */ +"largest" = "Largest"; + +/* Option for a smaller than regular item type */ +"smaller" = "Smaller"; + +/* Option for the smallest item type */ +"smallest" = "Smallest"; + +/* Option for the a standard/regular item type */ +"regular" = "Regular"; + + /* MARK: Settings - Subtitles */ @@ -476,9 +767,15 @@ /* Section Label for details about the current connected Jellyfin Server */ "serverDetails" = "Server Details"; +/* Label for source code */ +"sourceCode" = "Source Code"; + /* Section Label for OS running the current connected Jellyfin Server */ "operatingSystem" = "Operating System"; +/* Label for the server version field */ +"version" = "Version"; + /* MARK: Server Selection & Login */ @@ -498,7 +795,7 @@ /* Represents the first Connect to Server label on a new installation */ "connectToJellyfinServerStart" = "Connect to a Jellyfin server to get started"; -/* Represents the Connect Button label for the Server Details provide */ +/* Represents the Connect Button label for the Server Details provided */ "connectToServer" = "Connect to Server"; /* Represents the section label for Jellyfin Server(s) that were found during Jellyfin Server Discovery */ @@ -510,15 +807,21 @@ /* Message Label to designate that the Server Discovery process did not find any local/LAN Server(s) */ "noLocalServersFound" = "No local servers found"; +/* Message indicating there are no public users */ +"noPublicUsers" = "No public Users"; + /* Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password */ "password" = "Password"; -/* Represents a label for a button to remove all Users from a Jellyfin Server in Swiftfin */ -"removeAllUsers" = "Remove All Users"; +/* Represents the section label for public users */ +"publicUsers" = "Public Users"; /* Represents a label for a button to remove all Users & Servers in Swiftfin */ "removeAllServers" = "Remove All Servers"; +/* Represents a label for a button to remove all Users from a Jellyfin Server in Swiftfin */ +"removeAllUsers" = "Remove All Users"; + /* Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password */ "serverAlreadyConnected" = "Server %s is already connected"; @@ -531,13 +834,13 @@ /* Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information */ "serverURL" = "Server URL"; -/* Button label that takes the confirms the user information and attempts to sign them in*/ +/* Button label that confirms the user information and attempts to sign them in */ "signIn" = "Sign In"; /* Message on first setup pointing the user to sign in */ "signInGetStarted" = "Sign in to get started"; -/* Message on indicating the server that the user is signing in to */ +/* Message indicating the server that the user is signing in to */ "signInToServer" = "Sign In to %s"; /* Represents the label used in the User Settings to change users and go to the Server Selection/Login page */ @@ -546,9 +849,21 @@ /* The Server Add/Sign in process has failed and this message is displayed */ "unableToConnectServer" = "Unable to connect to server"; +/* Message indicating the host could not be found */ +"unableToFindHost" = "Unable to find host"; + +/* Message indicating unauthorized access */ +"unauthorized" = "Unauthorized"; + +/* Message indicating an unauthorized user */ +"unauthorizedUser" = "Unauthorized user"; + /* Label indicating the Jellyfin Server URL */ "url" = "URL"; +/* Label for user settings */ +"user" = "User"; + /* Represents the label used to head the section where a username needs to be provided to connect to a server */ "username" = "Username"; @@ -560,15 +875,31 @@ "delivery" = "Delivery"; +/* MARK: TVOS Specific */ + + +/* Label for press down for menu */ +"pressDownForMenu" = "Press Down for Menu"; + + /* MARK: Video Player */ +/* Option for aspect fill display mode */ +"aspectFill" = "Aspect Fill"; + /* Section Label for Audio, Captions/Subtitles configuration on the Video Playback Overlay */ "audioAndCaptions" = "Audio & Captions"; +/* Label for audio offset settings */ +"audioOffset" = "Audio Offset"; + /* Section label on the video player overlay to select the audio track for playback */ "audioTrack" = "Audio Track"; +/* Label for bar buttons settings */ +"barButtons" = "Bar Buttons"; + /* Label for indicating Closed Captions or Subtitles for a media item */ "closedCaptions" = "Closed Captions"; @@ -578,6 +909,39 @@ /* Label in the overlay to indicate time remaining in the watched content */ "remainingTime" = "Remaining Time"; +/* Option for pausing the Player when it's sent to the background */ +"pauseOnBackground" = "Pause on background"; + +/* Option for resuming the Player when it's sent back to the foreground */ +"playOnActive" = "Play on active"; + +/* Option to play from the beginning */ +"playFromBeginning" = "Play From Beginning"; + +/* Button label to play the next item */ +"playNextItem" = "Play Next Item"; + +/* Button label to play the previous item */ +"playPreviousItem" = "Play Previous Item"; + +/* Label for playback progress */ +"progress" = "Progress"; + +/* Label for scrub current time */ +"scrubCurrentTime" = "Scrub Current Time"; + +/* Label for trailing value */ +"trailingValue" = "Trailing Value"; + +/* Label to denote the Transition Section */ +"transition" = "Transition"; + +/* Label for timestamp settings */ +"timestamp" = "Timestamp"; + +/* Label for timestamp type */ +"timestampType" = "Timestamp Type"; + /* MARK: Quick Connect */ @@ -610,122 +974,11 @@ "quickConnectSuccessMessage" = "Authorizing Quick Connect successful. Please continue on your other device."; -/* MARK: TODO - Cleanup*/ - -"showChaptersInfoInBottomOverlay" = "Show Chapters Info In Bottom Overlay"; -"color" = "Color"; -"aspectFill" = "Aspect Fill"; -"seeMore" = "See More"; -"defaultScheme" = "Default Scheme"; -"networking" = "Networking"; -"searchingDots" = "Searching…"; -"noTitle" = "No title"; -"recentlyAdded" = "Recently Added"; -"overview" = "Overview"; -"noOverviewAvailable" = "No overview available"; -"castAndCrew" = "Cast & Crew"; -"series" = "Series"; -"information" = "Information"; -"name" = "Name"; -"version" = "Version"; -"remove" = "Remove"; -"playPreviousItem" = "Play Previous Item"; -"playNextItem" = "Play Next Item"; -"autoPlay" = "Auto Play"; -"editJumpLengths" = "Edit Jump Lengths"; -"overlay" = "Overlay"; -"overlayType" = "Overlay Type"; -"user" = "User"; -"audioOffset" = "Audio Offset"; -"resumeOffset" = "Resume Offset"; -"resumeOffsetDescription" = "Resume content seconds before the recorded resume time"; -"resume5SecondOffset" = "Resume 5 Second Offset"; -"showPosterLabels" = "Show Poster Labels"; -"showCastAndCrew" = "Show Cast & Crew"; -"audio" = "Audio"; -"subtitles" = "Subtitles"; -"playbackSpeed" = "Playback Speed"; -"networkTimedOut" = "Network timed out"; -"cannotConnectToHost" = "Cannot connect to host"; -"unauthorizedUser" = "Unauthorized user"; -"unauthorized" = "Unauthorized"; -"released" = "Released"; -"rated" = "Rated"; -"runtime" = "Runtime"; -"containers" = "Containers"; -"noCodec" = "No Codec"; -"smallest" = "Smallest"; -"smaller" = "Smaller"; -"regular" = "Regular"; -"larger" = "Larger"; -"largest" = "Largest"; -"jumpLengthSeconds" = "%s seconds"; -"present" = "Present"; -"oneUser" = "1 user"; -"multipleUsers" = "%d users"; -"notAvailableSlash" = "N/A"; -"next" = "Next"; -"recommended" = "Recommended"; -"about" = "About"; -"pressDownForMenu" = "Press Down for Menu"; -"cinematicViews" = "Cinematic Views"; -"none" = "None"; -"missing" = "Missing"; -"unaired" = "Unaired"; -"airWithDate" = "Airs %s"; -"missingItems" = "Missing Items"; -"showMissingSeasons" = "Show Missing Seasons"; -"showMissingEpisodes" = "Show Missing Episodes"; -"removeFromResume" = "Remove From Resume"; -"playFromBeginning" = "Play From Beginning"; -"customize" = "Customize"; -"tooManyRedirects" = "Too Many Redirects"; -"chapters" = "Chapters"; -"current" = "Current"; -"sourceCode" = "Source Code"; -"requestFeature" = "Request a Feature"; -"reportIssue" = "Report an Issue"; -"showFlattenView" = "Flatten Library Items"; -"unableToFindHost" = "Unable to find host"; -"publicUsers" = "Public Users"; -"noPublicUsers" = "No public Users"; -"episodeNumber" = "Episode %1$@"; -"compactPoster" = "Compact Poster"; -"compactLogo" = "Compact Logo"; -"cinematic" = "Cinematic"; -"accentColor" = "Accent Color"; -"accentColorDescription" = "Some views may need an app restart to update."; -"specialFeatures" = "Special Features"; -"collections" = "Collections"; -"people" = "People"; -"hapticFeedback" = "Haptic Feedback"; -"indicators" = "Indicators"; -"posters" = "Posters"; -"seriesBackdrop" = "Series Backdrop"; -"episodeLandscapePoster" = "Episode Landscape Poster"; -"progress" = "Progress"; -"indicators" = "Indicators"; -"ratings" = "Ratings"; -"buttons" = "Buttons"; -"playbackButtons" = "Playback Buttons"; -"barButtons" = "Bar Buttons"; -"menuButtons" = "Menu Buttons"; -"jump" = "Jump"; -"slider" = "Slider"; -"chapterSlider" = "Chapter Slider"; -"sliderColor" = "Slider Color"; -"sliderType" = "Slider Type"; -"timestamp" = "Timestamp"; -"scrubCurrentTime" = "Scrub Current Time"; -"timestampType" = "Timestamp Type"; -"trailingValue" = "Trailing Value"; -"transition" = "Transition"; -"pauseOnBackground" = "Pause on background"; -"playOnActive" = "Play on active"; -"retrievingMediaInformation" = "Retrieving media information"; +/* MARK: TODO - Unused */ -/* Unused */ +//"defaultScheme" = "Default Scheme"; //"login" = "Login"; //"loginToWithString" = "Login to %@"; +//"networking" = "Networking"; //"otherUser" = "Other User"; From d6fd2bfc22f73b099d206aea48f1b19249deb101 Mon Sep 17 00:00:00 2001 From: Joseph Kribs Date: Wed, 17 Jul 2024 19:56:37 -0600 Subject: [PATCH 4/6] July 17th Work - Starting the String Validation process. Completed through line 162. --- Shared/Strings/Strings.swift | 50 +---------- Translations/en.lproj/Localizable.strings | 101 ++++++---------------- 2 files changed, 29 insertions(+), 122 deletions(-) diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index 52ba8a124..1722b0834 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -32,8 +32,6 @@ internal enum L10n { internal static let appearance = L10n.tr("Localizable", "appearance", fallback: "Appearance") /// Section Header Label for changing the Swiftfin App Icon internal static let appIcon = L10n.tr("Localizable", "appIcon", fallback: "App Icon") - /// Apply/Save the current values on the screen/form - internal static let apply = L10n.tr("Localizable", "apply", fallback: "Apply") /// Option for aspect fill display mode internal static let aspectFill = L10n.tr("Localizable", "aspectFill", fallback: "Aspect Fill") /// Overlay Label for Selecting Audio Information/Settings @@ -48,8 +46,6 @@ internal enum L10n { internal static let authorize = L10n.tr("Localizable", "authorize", fallback: "Authorize") /// Option to enable auto play internal static let autoPlay = L10n.tr("Localizable", "autoPlay", fallback: "Auto Play") - /// Go back to the previous screen/form - internal static let back = L10n.tr("Localizable", "back", fallback: "Back") /// Label for bar buttons settings internal static let barButtons = L10n.tr("Localizable", "barButtons", fallback: "Bar Buttons") /// Option for automatic bitrate selection @@ -106,10 +102,6 @@ internal enum L10n { internal static let chapterSlider = L10n.tr("Localizable", "chapterSlider", fallback: "Chapter Slider") /// Label for cinematic view internal static let cinematic = L10n.tr("Localizable", "cinematic", fallback: "Cinematic") - /// Label for cinematic views - internal static let cinematicViews = L10n.tr("Localizable", "cinematicViews", fallback: "Cinematic Views") - /// Leave/close the current menu - internal static let close = L10n.tr("Localizable", "close", fallback: "Close") /// Label for indicating Closed Captions or Subtitles for a media item internal static let closedCaptions = L10n.tr("Localizable", "closedCaptions", fallback: "Closed Captions") /// Represents the the Library Labels for Collections/Boxsets @@ -134,8 +126,6 @@ internal enum L10n { internal static let connectToServer = L10n.tr("Localizable", "connectToServer", fallback: "Connect to Server") /// Proceed or continue to the next screen as a proceed opposed to an agreement internal static let `continue` = L10n.tr("Localizable", "continue", fallback: "Continue") - /// Represents the Home View section for items that are in-progress files - internal static let continueWatching = L10n.tr("Localizable", "continueWatching", fallback: "Continue Watching") /// Label for current item internal static let current = L10n.tr("Localizable", "current", fallback: "Current") /// Label in the overlay to indicate the current time for the watched content @@ -176,8 +166,6 @@ internal enum L10n { internal static let favorited = L10n.tr("Localizable", "favorited", fallback: "Favorited") /// Section Label for the Media's Favorite Section internal static let favorites = L10n.tr("Localizable", "favorites", fallback: "Favorites") - /// A Media/Subtitle object as a File on a Server System or local device - internal static let file = L10n.tr("Localizable", "file", fallback: "File") /// Represents the the Filter Labels for Library/Search Filters internal static let filters = L10n.tr("Localizable", "filters", fallback: "Filters") /// Represents the the Filter Labels for Library/Search Filtering based on Item Genre(s) @@ -192,8 +180,6 @@ internal enum L10n { internal static let home = L10n.tr("Localizable", "home", fallback: "Home") /// Label for indicators settings internal static let indicators = L10n.tr("Localizable", "indicators", fallback: "Indicators") - /// Label for information section - internal static let information = L10n.tr("Localizable", "information", fallback: "Information") /// App Icons that are Colored with the Selected Color but have a Black Background internal static let invertedDark = L10n.tr("Localizable", "invertedDark", fallback: "Inverted Dark") /// App Icons that are Colored with the Selected Color but have a White Background @@ -238,8 +224,6 @@ internal enum L10n { internal static let list = L10n.tr("Localizable", "list", fallback: "List") /// Section Label for the Media's Live TV Section internal static let liveTV = L10n.tr("Localizable", "liveTV", fallback: "Live TV") - /// View is loading data - internal static let loading = L10n.tr("Localizable", "loading", fallback: "Loading") /// Represents the section label for local/LAN Jellyfin Server(s) that were found during Jellyfin Server Discovery internal static let localServers = L10n.tr("Localizable", "localServers", fallback: "Local Servers") /// Section Label for the logs generated by Swiftfin @@ -254,8 +238,6 @@ internal enum L10n { internal static let missing = L10n.tr("Localizable", "missing", fallback: "Missing") /// Label for missing items section internal static let missingItems = L10n.tr("Localizable", "missingItems", fallback: "Missing Items") - /// Represents the the Media Item section for Jellyfin recommendations - internal static let moreLikeThis = L10n.tr("Localizable", "moreLikeThis", fallback: "More Like This") /// Represents the the Library Labels for Movie Media Types internal static let movies = L10n.tr("Localizable", "movies", fallback: "Movies") /// Label indicating something's name @@ -272,8 +254,6 @@ internal enum L10n { internal static let nextUp = L10n.tr("Localizable", "nextUp", fallback: "Next Up") /// Represents the Media Casting Device selection when no Media Casting Devices were found internal static let noCastdevicesfound = L10n.tr("Localizable", "noCastdevicesfound", fallback: "No Cast devices found..") - /// Label indicating no codec is available - internal static let noCodec = L10n.tr("Localizable", "noCodec", fallback: "No Codec") /// Represents the label that will exist in place of an episode view if there are no episodes internal static let noEpisodesAvailable = L10n.tr("Localizable", "noEpisodesAvailable", fallback: "No episodes available") /// Message Label to designate that the Server Discovery process did not find any local/LAN Server(s) @@ -288,16 +268,12 @@ internal enum L10n { internal static let noResults = L10n.tr("Localizable", "noResults", fallback: "No results.") /// Setting for Normal Text spacing as opposed to Compact Spacing internal static let normal = L10n.tr("Localizable", "normal", fallback: "Normal") - /// Label for not available - internal static let notAvailableSlash = L10n.tr("Localizable", "notAvailableSlash", fallback: "N/A") /// Represents media types that are not currently implemented internal static func notImplementedYetWithType(_ p1: Any) -> String { return L10n.tr("Localizable", "notImplementedYetWithType", String(describing: p1), fallback: "Type: %@ not implemented yet :(") } /// Label indicating no title is available internal static let noTitle = L10n.tr("Localizable", "noTitle", fallback: "No title") - /// Proceed with the current values on the screen/form - internal static let ok = L10n.tr("Localizable", "ok", fallback: "Ok") /// Represents the the Library Labels for Live TV Programs/Shows that are on Now internal static let onNow = L10n.tr("Localizable", "onNow", fallback: "On Now") /// Section Label for OS running the current connected Jellyfin Server @@ -310,8 +286,6 @@ internal enum L10n { internal static let orientation = L10n.tr("Localizable", "orientation", fallback: "Orientation") /// Represents the the Library Labels for Other Media Types internal static let other = L10n.tr("Localizable", "other", fallback: "Other") - /// Label for overview information - internal static let overview = L10n.tr("Localizable", "overview", fallback: "Overview") /// Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password internal static let password = L10n.tr("Localizable", "password", fallback: "Password") /// Option for pausing the Player when it's sent to the background @@ -336,8 +310,6 @@ internal enum L10n { internal static let playerGesturesLockGestureEnabled = L10n.tr("Localizable", "playerGesturesLockGestureEnabled", fallback: "Player Gestures Lock Gesture Enabled") /// Option to play from the beginning internal static let playFromBeginning = L10n.tr("Localizable", "playFromBeginning", fallback: "Play From Beginning") - /// Represents the Media Item button label to start the Media Item playback for a Collection of Items - internal static let playNext = L10n.tr("Localizable", "playNext", fallback: "Play Next") /// Button label to play the next item internal static let playNextItem = L10n.tr("Localizable", "playNextItem", fallback: "Play Next Item") /// Option for resuming the Player when it's sent back to the foreground @@ -346,8 +318,6 @@ internal enum L10n { internal static let playPreviousItem = L10n.tr("Localizable", "playPreviousItem", fallback: "Play Previous Item") /// Label for Media Items posters internal static let posters = L10n.tr("Localizable", "posters", fallback: "Posters") - /// Label for a show that is active until present - internal static let present = L10n.tr("Localizable", "present", fallback: "Present") /// Label for press down for menu internal static let pressDownForMenu = L10n.tr("Localizable", "pressDownForMenu", fallback: "Press Down for Menu") /// Overlay Label for going back to previous episode in a show @@ -388,24 +358,14 @@ internal enum L10n { internal static let recommended = L10n.tr("Localizable", "recommended", fallback: "Recommended") /// Represents the label for all Jellyfin Icons that are Red regardless of Backgound/Color Invert internal static let red = L10n.tr("Localizable", "red", fallback: "Red") - /// Refresh the current view - internal static let refresh = L10n.tr("Localizable", "refresh", fallback: "Refresh") /// Option for the a standard/regular item type internal static let regular = L10n.tr("Localizable", "regular", fallback: "Regular") - /// Label indicating the released date - internal static let released = L10n.tr("Localizable", "released", fallback: "Released") - /// Reload the current view - internal static let reload = L10n.tr("Localizable", "reload", fallback: "Reload") /// Label in the overlay to indicate time remaining in the watched content internal static let remainingTime = L10n.tr("Localizable", "remainingTime", fallback: "Remaining Time") - /// Button label to remove an item - internal static let remove = L10n.tr("Localizable", "remove", fallback: "Remove") /// Represents a label for a button to remove all Users & Servers in Swiftfin internal static let removeAllServers = L10n.tr("Localizable", "removeAllServers", fallback: "Remove All Servers") /// Represents a label for a button to remove all Users from a Jellyfin Server in Swiftfin internal static let removeAllUsers = L10n.tr("Localizable", "removeAllUsers", fallback: "Remove All Users") - /// Option to remove from resume - internal static let removeFromResume = L10n.tr("Localizable", "removeFromResume", fallback: "Remove From Resume") /// Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Issue Reporting internal static let reportIssue = L10n.tr("Localizable", "reportIssue", fallback: "Report an Issue") /// Section of the Jellyfin/System screen directing users to the Swiftfin GitHub for Feature Requesting @@ -472,8 +432,6 @@ internal enum L10n { internal static let serverDetails = L10n.tr("Localizable", "serverDetails", fallback: "Server Details") /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information internal static let serverInformation = L10n.tr("Localizable", "serverInformation", fallback: "Server Information") - /// Generic term for one or more Jellyfin Server - internal static let servers = L10n.tr("Localizable", "servers", fallback: "Servers") /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information internal static let serverURL = L10n.tr("Localizable", "serverURL", fallback: "Server URL") /// Section Label for the Settings Screen @@ -546,14 +504,10 @@ internal enum L10n { internal static let timestamp = L10n.tr("Localizable", "timestamp", fallback: "Timestamp") /// Label for timestamp type internal static let timestampType = L10n.tr("Localizable", "timestampType", fallback: "Timestamp Type") - /// Message indicating too many redirects - internal static let tooManyRedirects = L10n.tr("Localizable", "tooManyRedirects", fallback: "Too Many Redirects") /// Label for trailing value internal static let trailingValue = L10n.tr("Localizable", "trailingValue", fallback: "Trailing Value") /// Label to denote the Transition Section internal static let transition = L10n.tr("Localizable", "transition", fallback: "Transition") - /// Re-attempt to load a previously failed object - internal static let tryAgain = L10n.tr("Localizable", "tryAgain", fallback: "Try again") /// Represents the the Library Labels for Show Media Types internal static let tvShows = L10n.tr("Localizable", "tvShows", fallback: "TV Shows") /// The Server Add/Sign in process has failed and this message is displayed @@ -566,10 +520,8 @@ internal enum L10n { internal static let unauthorized = L10n.tr("Localizable", "unauthorized", fallback: "Unauthorized") /// Message indicating an unauthorized user internal static let unauthorizedUser = L10n.tr("Localizable", "unauthorizedUser", fallback: "Unauthorized user") - /// Generic label for unknown objects + /// Unknown internal static let unknown = L10n.tr("Localizable", "unknown", fallback: "Unknown") - /// Generic error for handling uncaught & unexpected interactions - internal static let unknownError = L10n.tr("Localizable", "unknownError", fallback: "Unknown Error") /// Library Item has not been watch by this user internal static let unplayed = L10n.tr("Localizable", "unplayed", fallback: "Unplayed") /// Label indicating the Jellyfin Server URL diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 1b960b96f..78f2f1cd9 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -14,28 +14,16 @@ /* Label indicating no overview is available */ "noOverviewAvailable" = "No overview available"; -/* Message indicating too many redirects */ -"tooManyRedirects" = "Too Many Redirects"; - /* MARK: General */ -/* Apply/Save the current values on the screen/form */ -"apply" = "Apply"; - -/* Go back to the previous screen/form */ -"back" = "Back"; - /* Label for buttons section */ "buttons" = "Buttons"; /* Stop the current operation or reset the screen/form */ "cancel" = "Cancel"; -/* Leave/close the current menu */ -"close" = "Close"; - /* Proceed or continue to the next screen as a proceed opposed to an agreement */ "continue" = "Continue"; @@ -54,21 +42,12 @@ /* Generic error for handling uncaught & unexpected interactions */ "error" = "Error"; -/* A Media/Subtitle object as a File on a Server System or local device */ -"file" = "File"; - /* Go back to the Home screen/form */ "home" = "Home"; -/* Label for information section */ -"information" = "Information"; - /* Generic term for Movies/Episodes/Shows... etc */ "items" = "Items"; -/* View is loading data */ -"loading" = "Loading"; - /* Label indicating missing items */ "missing" = "Missing"; @@ -81,18 +60,6 @@ /* Label indicating none */ "none" = "None"; -/* Proceed with the current values on the screen/form */ -"ok" = "Ok"; - -/* Refresh the current view */ -"refresh" = "Refresh"; - -/* Reload the current view */ -"reload" = "Reload"; - -/* Button label to remove an item */ -"remove" = "Remove"; - /* Reset the form/screen back to the default/previous values */ "reset" = "Reset"; @@ -108,25 +75,13 @@ /* Generic term for the Active Jellyfin Server */ "server" = "Server"; -/* Generic term for one or more Jellyfin Server */ -"servers" = "Servers"; - -/* Re-attempt to load a previously failed object */ -"tryAgain" = "Try again"; - /* Generic label for unknown objects */ "unknown" = "Unknown"; -/* Generic error for handling uncaught & unexpected interactions */ -"unknownError" = "Unknown Error"; - /* MARK: Home */ -/* Represents the Home View section for items that are in-progress files */ -"continueWatching" = "Continue Watching"; - /* Represents the Home View section for All media items that are new for each Media Type */ "latestWithString" = "Latest %@"; @@ -136,9 +91,6 @@ /* Label for recently added items */ "recentlyAdded" = "Recently Added"; -/* Option to remove from resume */ -"removeFromResume" = "Remove From Resume"; - /* MARK: Item - Generic */ @@ -152,31 +104,15 @@ /* Label for missing items section */ "missingItems" = "Missing Items"; -/* Represents the the Media Item section for Jellyfin recommendations */ -"moreLikeThis" = "More Like This"; - -/* Label for not available */ -"notAvailableSlash" = "N/A"; - -/* Label indicating no codec is available */ -"noCodec" = "No Codec"; - /* Label indicating no title is available */ "noTitle" = "No title"; -/* Represents the Media Item button label to start the Media Item playback for a Collection of Items */ -"playNext" = "Play Next"; - /* Message indicating media information is being retrieved */ "retrievingMediaInformation" = "Retrieving media information"; -/* Label indicating the released date */ -"released" = "Released"; - /* Label for subtitles settings/selection */ "subtitles" = "Subtitles"; - /* MARK: Item - Shows */ /* Label indicating a show airs on s specific day of the week */ @@ -194,9 +130,6 @@ /* Represents the label that will exist in place of an episode view if there are no episodes */ "noEpisodesAvailable" = "No episodes available"; -/* Label for a show that is active until present */ -"present" = "Present"; - /* Represents the Media Item label to denote a Show's Season & Episode */ "seasonAndEpisode" = "S%1$@:E%2$@"; @@ -219,17 +152,15 @@ /* Label for cinematic view */ "cinematic" = "Cinematic"; -/* Label for cinematic views */ -"cinematicViews" = "Cinematic Views"; - /* Option for compact logo view */ "compactLogo" = "Compact Logo"; /* Option for compact poster view */ "compactPoster" = "Compact Poster"; -/* Label for overview information */ -"overview" = "Overview"; + +/* MARK: Valid Above This Line */ + /* Represents the Media Item button label to start a Media Item playback */ "play" = "Play"; @@ -974,11 +905,35 @@ "quickConnectSuccessMessage" = "Authorizing Quick Connect successful. Please continue on your other device."; -/* MARK: TODO - Unused */ +/* MARK: TODO - Removed Unwanted Unused */ +//"apply" = "Apply"; +//"back" = "Back"; +//"cinematicViews" = "Cinematic Views"; +//"close" = "Close"; +//"continueWatching" = "Continue Watching"; //"defaultScheme" = "Default Scheme"; +//"file" = "File"; +//"information" = "Information"; +//"loading" = "Loading"; //"login" = "Login"; //"loginToWithString" = "Login to %@"; +//"moreLikeThis" = "More Like This"; //"networking" = "Networking"; +//"noCodec" = "No Codec"; +//"notAvailableSlash" = "N/A"; +//"ok" = "Ok"; //"otherUser" = "Other User"; +//"overview" = "Overview"; +//"playNext" = "Play Next"; +//"present" = "Present"; +//"refresh" = "Refresh"; +//"released" = "Released"; +//"reload" = "Reload"; +//"remove" = "Remove"; +//"removeFromResume" = "Remove From Resume"; +//"servers" = "Servers"; +//"tooManyRedirects" = "Too Many Redirects"; +//"tryAgain" = "Try again"; +//"unknown" = "Unknown"; From 07674b1f30ad33058f57196f7f9c2550e525bb5b Mon Sep 17 00:00:00 2001 From: Joseph Kribs Date: Wed, 17 Jul 2024 20:36:37 -0600 Subject: [PATCH 5/6] Validated through line 275. Updated some strings to use the labels --- .../Objects/ItemFilter/ItemFilterType.swift | 4 +- Shared/Strings/Strings.swift | 22 ++++------ .../Components/LibraryViewTypeToggle.swift | 12 ++--- Translations/en.lproj/Localizable.strings | 44 +++++++++---------- 4 files changed, 36 insertions(+), 46 deletions(-) diff --git a/Shared/Objects/ItemFilter/ItemFilterType.swift b/Shared/Objects/ItemFilter/ItemFilterType.swift index 448bbd969..9547c58b1 100644 --- a/Shared/Objects/ItemFilter/ItemFilterType.swift +++ b/Shared/Objects/ItemFilter/ItemFilterType.swift @@ -55,7 +55,7 @@ extension ItemFilterType: Displayable { case .genres: L10n.genres case .letter: - "Letter" + L10n.letter case .sortBy: L10n.sort case .sortOrder: @@ -65,7 +65,7 @@ extension ItemFilterType: Displayable { case .traits: L10n.filters case .years: - "Years" + L10n.years } } } diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index 1722b0834..e15736f91 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -142,8 +142,6 @@ internal enum L10n { internal static let discoveredServers = L10n.tr("Localizable", "discoveredServers", fallback: "Discovered Servers") /// Dismiss a message or popup internal static let dismiss = L10n.tr("Localizable", "dismiss", fallback: "Dismiss") - /// Represents the the Filter Labels for Library/Search Sorting - internal static let displayOrder = L10n.tr("Localizable", "displayOrder", fallback: "Display order") /// Section Label for the Media's Downloaded Media Section internal static let downloads = L10n.tr("Localizable", "downloads", fallback: "Downloads") /// Button label to edit jump lengths @@ -174,7 +172,7 @@ internal enum L10n { internal static let gestures = L10n.tr("Localizable", "gestures", fallback: "Gestures") /// Represents the label for all Jellyfin Icons that are Green regardless of Backgound/Color Invert internal static let green = L10n.tr("Localizable", "green", fallback: "Green") - /// Label for the Grid Feature that formats the Library Items in a Grid + /// Label Header to set the Library Layout to a Grid internal static let grid = L10n.tr("Localizable", "grid", fallback: "Grid") /// Go back to the Home screen/form internal static let home = L10n.tr("Localizable", "home", fallback: "Home") @@ -212,15 +210,19 @@ internal enum L10n { internal static func latestWithString(_ p1: Any) -> String { return L10n.tr("Localizable", "latestWithString", String(describing: p1), fallback: "Latest %@") } + /// Label Header to set the Library Layout Section + internal static let layout = L10n.tr("Localizable", "layout", fallback: "Layout") /// The Letter Picker Bar will be on the Left/Leading side of the Library internal static let `left` = L10n.tr("Localizable", "left", fallback: "Left") + /// Represents the Letter Picker Filter label + internal static let letter = L10n.tr("Localizable", "letter", fallback: "Letter") /// Represents the Letter Picker Enabled section label internal static let letterPicker = L10n.tr("Localizable", "letterPicker", fallback: "Letter Picker") /// Label used to designate a Library internal static let library = L10n.tr("Localizable", "library", fallback: "Library") /// Represents the light theme setting internal static let light = L10n.tr("Localizable", "light", fallback: "Light") - /// Label for the List Feature that formats the Library Items in a List + /// Label Header to set the Library Layout to a List internal static let list = L10n.tr("Localizable", "list", fallback: "List") /// Section Label for the Media's Live TV Section internal static let liveTV = L10n.tr("Localizable", "liveTV", fallback: "Live TV") @@ -284,8 +286,6 @@ internal enum L10n { internal static let order = L10n.tr("Localizable", "order", fallback: "Order") /// Represents the Letter Picker Orientation section label internal static let orientation = L10n.tr("Localizable", "orientation", fallback: "Orientation") - /// Represents the the Library Labels for Other Media Types - internal static let other = L10n.tr("Localizable", "other", fallback: "Other") /// Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password internal static let password = L10n.tr("Localizable", "password", fallback: "Password") /// Option for pausing the Player when it's sent to the background @@ -390,22 +390,16 @@ internal enum L10n { internal static let retry = L10n.tr("Localizable", "retry", fallback: "Retry") /// The Letter Picker Bar will be on the Right/Trailing side of the Library internal static let `right` = L10n.tr("Localizable", "right", fallback: "Right") - /// Label for runtime information - internal static let runtime = L10n.tr("Localizable", "runtime", fallback: "Runtime") /// Label for scrub current time internal static let scrubCurrentTime = L10n.tr("Localizable", "scrubCurrentTime", fallback: "Scrub Current Time") /// Represents the Section Label for the Search View internal static let search = L10n.tr("Localizable", "search", fallback: "Search") /// Represents the Search action designated as in-progress or an option on the view. Also used during Server Discovery internal static let searchDots = L10n.tr("Localizable", "searchDots", fallback: "Search…") - /// Represents the the Library Labels for Show Media Types with a single Season - internal static let season = L10n.tr("Localizable", "season", fallback: "Season") /// Represents the Media Item label to denote a Show's Season & Episode internal static func seasonAndEpisode(_ p1: Any, _ p2: Any) -> String { return L10n.tr("Localizable", "seasonAndEpisode", String(describing: p1), String(describing: p2), fallback: "S%1$@:E%2$@") } - /// Represents the the Library Labels for Show Media Types with multiple Seasons - internal static let seasons = L10n.tr("Localizable", "seasons", fallback: "Seasons") /// Expand a section to see all items internal static let seeAll = L10n.tr("Localizable", "seeAll", fallback: "See All") /// Message Describing the current enabled status of the Player's Gesture to Seek on the Timeline for currently playing content @@ -468,8 +462,6 @@ internal enum L10n { internal static let smallest = L10n.tr("Localizable", "smallest", fallback: "Smallest") /// Button Label to indicate that this Filter Object sets the Library Order by an Item/Filter internal static let sort = L10n.tr("Localizable", "sort", fallback: "Sort") - /// Represents the the Filter Labels for Library/Search Sorting based on Item Attribute - internal static let sortBy = L10n.tr("Localizable", "sortBy", fallback: "Sort by") /// Label for source code internal static let sourceCode = L10n.tr("Localizable", "sourceCode", fallback: "Source Code") /// Label for special features section @@ -542,6 +534,8 @@ internal enum L10n { internal static let videoPlayer = L10n.tr("Localizable", "videoPlayer", fallback: "Video Player") /// Section Title for the Video Player Type Setting between VLC, and AVKit internal static let videoPlayerType = L10n.tr("Localizable", "videoPlayerType", fallback: "Video Player Type") + /// Represents the the Filter Labels for Library/Search Filtering based on Item Years + internal static let years = L10n.tr("Localizable", "years", fallback: "Years") /// Represents the label for all Jellyfin Icons that are Yellow regardless of Backgound/Color Invert internal static let yellow = L10n.tr("Localizable", "yellow", fallback: "Yellow") } diff --git a/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift b/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift index 998c3f968..6a42a7174 100644 --- a/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift +++ b/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift @@ -64,9 +64,9 @@ extension PagingLibraryView { viewType = .grid } label: { if viewType == .grid { - Label("Grid", systemImage: "checkmark") + Label(L10n.grid, systemImage: "checkmark") } else { - Label("Grid", systemImage: "square.grid.2x2.fill") + Label(L10n.grid, systemImage: "square.grid.2x2.fill") } } @@ -74,9 +74,9 @@ extension PagingLibraryView { viewType = .list } label: { if viewType == .list { - Label("List", systemImage: "checkmark") + Label(L10n.list, systemImage: "checkmark") } else { - Label("List", systemImage: "square.fill.text.grid.1x2") + Label(L10n.list, systemImage: "square.fill.text.grid.1x2") } } } @@ -87,9 +87,9 @@ extension PagingLibraryView { } label: { switch viewType { case .grid: - Label("Layout", systemImage: "square.grid.2x2.fill") + Label(L10n.layout, systemImage: "square.grid.2x2.fill") case .list: - Label("Layout", systemImage: "square.fill.text.grid.1x2") + Label(L10n.layout, systemImage: "square.fill.text.grid.1x2") } } } diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 78f2f1cd9..f0ef51a19 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -113,8 +113,10 @@ /* Label for subtitles settings/selection */ "subtitles" = "Subtitles"; + /* MARK: Item - Shows */ + /* Label indicating a show airs on s specific day of the week */ "airWithDate" = "Airs %s"; @@ -158,10 +160,6 @@ /* Option for compact poster view */ "compactPoster" = "Compact Poster"; - -/* MARK: Valid Above This Line */ - - /* Represents the Media Item button label to start a Media Item playback */ "play" = "Play"; @@ -174,9 +172,6 @@ /* Label for ratings section */ "ratings" = "Ratings"; -/* Label for runtime information */ -"runtime" = "Runtime"; - /* Label for special features section */ "specialFeatures" = "Special Features"; @@ -200,9 +195,6 @@ /* MARK: Libraries - Filtering/Sorting */ -/* Represents the the Filter Labels for Library/Search Sorting */ -"displayOrder" = "Display order"; - /* Represents the the Favorited Labels for Library/Search Filters */ "favorited" = "Favorited"; @@ -221,15 +213,15 @@ /* Button Label to indicate that this Filter Object sets the Library Order by an Item/Filter */ "sort" = "Sort"; -/* Represents the the Filter Labels for Library/Search Sorting based on Item Attribute */ -"sortBy" = "Sort by"; - /* Represents the the Filter Labels for Library/Search Filtering based on Item Studio */ "studios" = "Studios"; /* Represents the the Filter Labels for Library/Search Filtering based on Item Tag(s) */ "tags" = "Tags"; +/* Represents the the Filter Labels for Library/Search Filtering based on Item Years */ +"years" = "Years"; + /* MARK: Libraries - Types */ @@ -240,30 +232,24 @@ /* Represents the the Library Labels for Collections/Boxsets */ "collections" = "Collections"; -/* Label for the Grid Feature that formats the Library Items in a Grid */ +/* Label Header to set the Library Layout to a Grid*/ "grid" = "Grid"; -/* Label for the List Feature that formats the Library Items in a List */ +/* Label Header to set the Library Layout Section */ +"layout" = "Layout"; + +/* Label Header to set the Library Layout to a List*/ "list" = "List"; /* Represents the the Library Labels for Movie Media Types */ "movies" = "Movies"; -/* Represents the the Library Labels for Other Media Types */ -"other" = "Other"; - /* Represents the the Library Labels for Live TV Programs */ "programs" = "Programs"; /* Label for the Random Feature that sends the users to a Random Library Item */ "random" = "Random"; -/* Represents the the Library Labels for Show Media Types with a single Season */ -"season" = "Season"; - -/* Represents the the Library Labels for Show Media Types with multiple Seasons */ -"seasons" = "Seasons"; - /* Represents the the Library Labels for Series / Shows Media Type */ "series" = "Series"; @@ -286,6 +272,7 @@ /* Represents the the Library Labels for Live TV Programs/Shows that are Sports Content */ "sports" = "Sports"; +/* MARK: Valid Above This Line */ /* MARK: Media */ @@ -540,6 +527,9 @@ /* The Letter Picker Bar will be on the Left/Leading side of the Library */ "left" = "Left"; +/* Represents the Letter Picker Filter label */ +"letter" = "Letter"; + /* Represents the Letter Picker Enabled section label */ "letterPicker" = "Letter Picker"; @@ -914,6 +904,7 @@ //"close" = "Close"; //"continueWatching" = "Continue Watching"; //"defaultScheme" = "Default Scheme"; +//"displayOrder" = "Display order"; //"file" = "File"; //"information" = "Information"; //"loading" = "Loading"; @@ -924,6 +915,7 @@ //"noCodec" = "No Codec"; //"notAvailableSlash" = "N/A"; //"ok" = "Ok"; +//"other" = "Other"; //"otherUser" = "Other User"; //"overview" = "Overview"; //"playNext" = "Play Next"; @@ -933,7 +925,11 @@ //"reload" = "Reload"; //"remove" = "Remove"; //"removeFromResume" = "Remove From Resume"; +//"runtime" = "Runtime"; +//"season" = "Season"; +//"seasons" = "Seasons"; //"servers" = "Servers"; +//"sortBy" = "Sort by"; //"tooManyRedirects" = "Too Many Redirects"; //"tryAgain" = "Try again"; //"unknown" = "Unknown"; From 9545ec08efe3cbdd8f3668f5ee42c9f8b4b485c8 Mon Sep 17 00:00:00 2001 From: Joseph Kribs Date: Thu, 18 Jul 2024 00:11:20 -0600 Subject: [PATCH 6/6] Completed Label Validation! --- Shared/Strings/Strings.swift | 56 +---------- Translations/en.lproj/Localizable.strings | 117 +++++----------------- 2 files changed, 24 insertions(+), 149 deletions(-) diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index e15736f91..146f218fb 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -36,8 +36,6 @@ internal enum L10n { internal static let aspectFill = L10n.tr("Localizable", "aspectFill", fallback: "Aspect Fill") /// Overlay Label for Selecting Audio Information/Settings internal static let audio = L10n.tr("Localizable", "audio", fallback: "Audio") - /// Section Label for Audio, Captions/Subtitles configuration on the Video Playback Overlay - internal static let audioAndCaptions = L10n.tr("Localizable", "audioAndCaptions", fallback: "Audio & Captions") /// Label for audio offset settings internal static let audioOffset = L10n.tr("Localizable", "audioOffset", fallback: "Audio Offset") /// Section label on the video player overlay to select the audio track for playback @@ -92,8 +90,6 @@ internal enum L10n { internal static let cancel = L10n.tr("Localizable", "cancel", fallback: "Cancel") /// Label for cast and crew information internal static let castAndCrew = L10n.tr("Localizable", "castAndCrew", fallback: "Cast & Crew") - /// Represents the label for the button that takes the user to the Server selection screen - internal static let changeServer = L10n.tr("Localizable", "changeServer", fallback: "Change Server") /// Represents the the Library Labels for Live TV Channels internal static let channels = L10n.tr("Localizable", "channels", fallback: "Channels") /// Label for chapters section @@ -119,8 +115,6 @@ internal enum L10n { /// Represents the Connect Button label for the Server Details provided internal static let connect = L10n.tr("Localizable", "connect", fallback: "Connect") /// Represents the first Connect to Server label on a new installation - internal static let connectToJellyfinServer = L10n.tr("Localizable", "connectToJellyfinServer", fallback: "Connect to a Jellyfin server") - /// Represents the first Connect to Server label on a new installation internal static let connectToJellyfinServerStart = L10n.tr("Localizable", "connectToJellyfinServerStart", fallback: "Connect to a Jellyfin server to get started") /// Represents the Connect Button label for the Server Details provided internal static let connectToServer = L10n.tr("Localizable", "connectToServer", fallback: "Connect to Server") @@ -138,14 +132,10 @@ internal enum L10n { internal static let delivery = L10n.tr("Localizable", "delivery", fallback: "Delivery") /// Feature/Setting is inactive internal static let disabled = L10n.tr("Localizable", "disabled", fallback: "Disabled") - /// Represents the section label for Jellyfin Server(s) that were found during Jellyfin Server Discovery - internal static let discoveredServers = L10n.tr("Localizable", "discoveredServers", fallback: "Discovered Servers") /// Dismiss a message or popup internal static let dismiss = L10n.tr("Localizable", "dismiss", fallback: "Dismiss") /// Section Label for the Media's Downloaded Media Section internal static let downloads = L10n.tr("Localizable", "downloads", fallback: "Downloads") - /// Button label to edit jump lengths - internal static let editJumpLengths = L10n.tr("Localizable", "editJumpLengths", fallback: "Edit Jump Lengths") /// Feature/Setting is active internal static let enabled = L10n.tr("Localizable", "enabled", fallback: "Enabled") /// Label for episode landscape poster @@ -202,10 +192,6 @@ internal enum L10n { } /// Represents the the Library Labels for Live TV Programs/Shows that are Kids Content internal static let kids = L10n.tr("Localizable", "kids", fallback: "Kids") - /// Option for a larger than regular item type - internal static let larger = L10n.tr("Localizable", "larger", fallback: "Larger") - /// Option for the largest item type - internal static let largest = L10n.tr("Localizable", "largest", fallback: "Largest") /// Represents the Home View section for All media items that are new for each Media Type internal static func latestWithString(_ p1: Any) -> String { return L10n.tr("Localizable", "latestWithString", String(describing: p1), fallback: "Latest %@") @@ -254,8 +240,6 @@ internal enum L10n { internal static let nextItem = L10n.tr("Localizable", "nextItem", fallback: "Next Item") /// Represents the Home View section for Show items are in-progress Seasons internal static let nextUp = L10n.tr("Localizable", "nextUp", fallback: "Next Up") - /// Represents the Media Casting Device selection when no Media Casting Devices were found - internal static let noCastdevicesfound = L10n.tr("Localizable", "noCastdevicesfound", fallback: "No Cast devices found..") /// Represents the label that will exist in place of an episode view if there are no episodes internal static let noEpisodesAvailable = L10n.tr("Localizable", "noEpisodesAvailable", fallback: "No episodes available") /// Message Label to designate that the Server Discovery process did not find any local/LAN Server(s) @@ -308,8 +292,6 @@ internal enum L10n { internal static let played = L10n.tr("Localizable", "played", fallback: "Played") /// Message Describing the current enabled status of the Player's Gesture Lock internal static let playerGesturesLockGestureEnabled = L10n.tr("Localizable", "playerGesturesLockGestureEnabled", fallback: "Player Gestures Lock Gesture Enabled") - /// Option to play from the beginning - internal static let playFromBeginning = L10n.tr("Localizable", "playFromBeginning", fallback: "Play From Beginning") /// Button label to play the next item internal static let playNextItem = L10n.tr("Localizable", "playNextItem", fallback: "Play Next Item") /// Option for resuming the Player when it's sent back to the foreground @@ -318,8 +300,6 @@ internal enum L10n { internal static let playPreviousItem = L10n.tr("Localizable", "playPreviousItem", fallback: "Play Previous Item") /// Label for Media Items posters internal static let posters = L10n.tr("Localizable", "posters", fallback: "Posters") - /// Label for press down for menu - internal static let pressDownForMenu = L10n.tr("Localizable", "pressDownForMenu", fallback: "Press Down for Menu") /// Overlay Label for going back to previous episode in a show internal static let previousItem = L10n.tr("Localizable", "previousItem", fallback: "Previous Item") /// Represents the label for the default Jellyfin Icon for Swiftfin @@ -358,8 +338,6 @@ internal enum L10n { internal static let recommended = L10n.tr("Localizable", "recommended", fallback: "Recommended") /// Represents the label for all Jellyfin Icons that are Red regardless of Backgound/Color Invert internal static let red = L10n.tr("Localizable", "red", fallback: "Red") - /// Option for the a standard/regular item type - internal static let regular = L10n.tr("Localizable", "regular", fallback: "Regular") /// Label in the overlay to indicate time remaining in the watched content internal static let remainingTime = L10n.tr("Localizable", "remainingTime", fallback: "Remaining Time") /// Represents a label for a button to remove all Users & Servers in Swiftfin @@ -372,12 +350,8 @@ internal enum L10n { internal static let requestFeature = L10n.tr("Localizable", "requestFeature", fallback: "Request a Feature") /// Reset the form/screen back to the default/previous values internal static let reset = L10n.tr("Localizable", "reset", fallback: "Reset") - /// Message explaining - internal static let resetAllSettings = L10n.tr("Localizable", "resetAllSettings", fallback: "Reset all settings back to defaults.") /// Section Label for Full App Settings Reset internal static let resetAppSettings = L10n.tr("Localizable", "resetAppSettings", fallback: "Reset App Settings") - /// Section Label for User Settings Reset - internal static let resetUserSettings = L10n.tr("Localizable", "resetUserSettings", fallback: "Reset User Settings") /// Option for a 5-second resume offset internal static let resume5SecondOffset = L10n.tr("Localizable", "resume5SecondOffset", fallback: "Resume 5 Second Offset") /// Label for resume offset settings @@ -390,12 +364,10 @@ internal enum L10n { internal static let retry = L10n.tr("Localizable", "retry", fallback: "Retry") /// The Letter Picker Bar will be on the Right/Trailing side of the Library internal static let `right` = L10n.tr("Localizable", "right", fallback: "Right") - /// Label for scrub current time + /// Label for the current time scrub setting internal static let scrubCurrentTime = L10n.tr("Localizable", "scrubCurrentTime", fallback: "Scrub Current Time") /// Represents the Section Label for the Search View internal static let search = L10n.tr("Localizable", "search", fallback: "Search") - /// Represents the Search action designated as in-progress or an option on the view. Also used during Server Discovery - internal static let searchDots = L10n.tr("Localizable", "searchDots", fallback: "Search…") /// Represents the Media Item label to denote a Show's Season & Episode internal static func seasonAndEpisode(_ p1: Any, _ p2: Any) -> String { return L10n.tr("Localizable", "seasonAndEpisode", String(describing: p1), String(describing: p2), fallback: "S%1$@:E%2$@") @@ -406,18 +378,12 @@ internal enum L10n { internal static let seekSlideGestureEnabled = L10n.tr("Localizable", "seekSlideGestureEnabled", fallback: "Seek Slide Gesture Enabled") /// Button label to see more content internal static let seeMore = L10n.tr("Localizable", "seeMore", fallback: "See More") - /// Represents the Media Casting Device selection label - internal static let selectCastDestination = L10n.tr("Localizable", "selectCastDestination", fallback: "Select Cast Destination") /// Represents the the Library Labels for Series / Shows Media Type internal static let series = L10n.tr("Localizable", "series", fallback: "Series") /// Label for series backdrop internal static let seriesBackdrop = L10n.tr("Localizable", "seriesBackdrop", fallback: "Series Backdrop") /// Generic term for the Active Jellyfin Server internal static let server = L10n.tr("Localizable", "server", fallback: "Server") - /// Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password - internal static func serverAlreadyConnected(_ p1: UnsafePointer) -> String { - return L10n.tr("Localizable", "serverAlreadyConnected", p1, fallback: "Server %s is already connected") - } /// Represents the label used to offer the user the ability to designate an additional URL for an existing Jellyfin Server internal static func serverAlreadyExistsPrompt(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "serverAlreadyExistsPrompt", p1, fallback: "Server %s already exists. Add new URL?") @@ -425,17 +391,9 @@ internal enum L10n { /// Section Label for details about the current connected Jellyfin Server internal static let serverDetails = L10n.tr("Localizable", "serverDetails", fallback: "Server Details") /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information - internal static let serverInformation = L10n.tr("Localizable", "serverInformation", fallback: "Server Information") - /// Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information internal static let serverURL = L10n.tr("Localizable", "serverURL", fallback: "Server URL") /// Section Label for the Settings Screen internal static let settings = L10n.tr("Localizable", "settings", fallback: "Settings") - /// Option to show cast and crew information - internal static let showCastAndCrew = L10n.tr("Localizable", "showCastAndCrew", fallback: "Show Cast & Crew") - /// Option to enable chapters info in the bottom overlay - internal static let showChaptersInfoInBottomOverlay = L10n.tr("Localizable", "showChaptersInfoInBottomOverlay", fallback: "Show Chapters Info In Bottom Overlay") - /// Option to flatten library items - internal static let showFlattenView = L10n.tr("Localizable", "showFlattenView", fallback: "Flatten Library Items") /// Option to show missing episodes internal static let showMissingEpisodes = L10n.tr("Localizable", "showMissingEpisodes", fallback: "Show Missing Episodes") /// Option to show missing seasons @@ -444,8 +402,6 @@ internal enum L10n { internal static let showPosterLabels = L10n.tr("Localizable", "showPosterLabels", fallback: "Show Poster Labels") /// Button label that confirms the user information and attempts to sign them in internal static let signIn = L10n.tr("Localizable", "signIn", fallback: "Sign In") - /// Message on first setup pointing the user to sign in - internal static let signInGetStarted = L10n.tr("Localizable", "signInGetStarted", fallback: "Sign in to get started") /// Message indicating the server that the user is signing in to internal static func signInToServer(_ p1: UnsafePointer) -> String { return L10n.tr("Localizable", "signInToServer", p1, fallback: "Sign In to %s") @@ -456,10 +412,6 @@ internal enum L10n { internal static let sliderColor = L10n.tr("Localizable", "sliderColor", fallback: "Slider Color") /// Label for slider type internal static let sliderType = L10n.tr("Localizable", "sliderType", fallback: "Slider Type") - /// Option for a smaller than regular item type - internal static let smaller = L10n.tr("Localizable", "smaller", fallback: "Smaller") - /// Option for the smallest item type - internal static let smallest = L10n.tr("Localizable", "smallest", fallback: "Smallest") /// Button Label to indicate that this Filter Object sets the Library Order by an Item/Filter internal static let sort = L10n.tr("Localizable", "sort", fallback: "Sort") /// Label for source code @@ -486,8 +438,6 @@ internal enum L10n { internal static let switchUser = L10n.tr("Localizable", "switchUser", fallback: "Switch User") /// Represents the system theme setting internal static let system = L10n.tr("Localizable", "system", fallback: "System") - /// Message Describing the current enabled status of the Player's Gestures for System Contols like Volume/Brightness - internal static let systemControlGesturesEnabled = L10n.tr("Localizable", "systemControlGesturesEnabled", fallback: "System Control Gestures Enabled") /// Represents the the Filter Labels for Library/Search Filtering based on Item Tag(s) internal static let tags = L10n.tr("Localizable", "tags", fallback: "Tags") /// Option to set the test sizes for bitrate testing @@ -504,14 +454,10 @@ internal enum L10n { internal static let tvShows = L10n.tr("Localizable", "tvShows", fallback: "TV Shows") /// The Server Add/Sign in process has failed and this message is displayed internal static let unableToConnectServer = L10n.tr("Localizable", "unableToConnectServer", fallback: "Unable to connect to server") - /// Message indicating the host could not be found - internal static let unableToFindHost = L10n.tr("Localizable", "unableToFindHost", fallback: "Unable to find host") /// Label indicating a show that has not aired internal static let unaired = L10n.tr("Localizable", "unaired", fallback: "Unaired") /// Message indicating unauthorized access internal static let unauthorized = L10n.tr("Localizable", "unauthorized", fallback: "Unauthorized") - /// Message indicating an unauthorized user - internal static let unauthorizedUser = L10n.tr("Localizable", "unauthorizedUser", fallback: "Unauthorized user") /// Unknown internal static let unknown = L10n.tr("Localizable", "unknown", fallback: "Unknown") /// Library Item has not been watch by this user diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index f0ef51a19..efcc33317 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -272,7 +272,6 @@ /* Represents the the Library Labels for Live TV Programs/Shows that are Sports Content */ "sports" = "Sports"; -/* MARK: Valid Above This Line */ /* MARK: Media */ @@ -292,17 +291,6 @@ /* Section Label for all Media Library Sections */ "media" = "Media"; - -/* MARK: Media Casting */ - - -/* Represents the Media Casting Device selection when no Media Casting Devices were found */ -"noCastdevicesfound" = "No Cast devices found.."; - -/* Represents the Media Casting Device selection label */ -"selectCastDestination" = "Select Cast Destination"; - - /* MARK: Player Overlay */ @@ -340,9 +328,6 @@ /* Represents the Section Label for the Search View */ "search" = "Search"; -/* Represents the Search action designated as in-progress or an option on the view. Also used during Server Discovery */ -"searchDots" = "Search…"; - /* MARK: Settings */ @@ -490,21 +475,9 @@ /* Button label to customize settings */ "customize" = "Customize"; -/* Button label to edit jump lengths */ -"editJumpLengths" = "Edit Jump Lengths"; - /* Label for indicators settings */ "indicators" = "Indicators"; -/* Option to show cast and crew information */ -"showCastAndCrew" = "Show Cast & Crew"; - -/* Option to enable chapters info in the bottom overlay */ -"showChaptersInfoInBottomOverlay" = "Show Chapters Info In Bottom Overlay"; - -/* Option to flatten library items */ -"showFlattenView" = "Flatten Library Items"; - /* Option to show missing episodes */ "showMissingEpisodes" = "Show Missing Episodes"; @@ -542,6 +515,7 @@ /* MARK: Settings - Playback */ + /* Option to enable auto play */ "autoPlay" = "Auto Play"; @@ -605,10 +579,6 @@ /* Label for slider type */ "sliderType" = "Slider Type"; - -/* Message Describing the current enabled status of the Player's Gestures for System Contols like Volume/Brightness */ -"systemControlGesturesEnabled" = "System Control Gestures Enabled"; - /* Section Title for the Video Player Settings Section */ "videoPlayer" = "Video Player"; @@ -619,35 +589,10 @@ /* MARK: Settings - Reset */ -/* Section Label for User Settings Reset */ -"resetUserSettings" = "Reset User Settings"; - -/* Message explaining */ -"resetAllSettings" = "Reset all settings back to defaults."; - /* Section Label for Full App Settings Reset */ "resetAppSettings" = "Reset App Settings"; -/* MARK: Settings - Sizes */ - - -/* Option for a larger than regular item type */ -"larger" = "Larger"; - -/* Option for the largest item type */ -"largest" = "Largest"; - -/* Option for a smaller than regular item type */ -"smaller" = "Smaller"; - -/* Option for the smallest item type */ -"smallest" = "Smallest"; - -/* Option for the a standard/regular item type */ -"regular" = "Regular"; - - /* MARK: Settings - Subtitles */ @@ -704,24 +649,15 @@ /* Represents the label used to offer the user the ability to designate an additional URL for an existing Jellyfin Server */ "addURL" = "Add URL"; -/* Represents the label for the button that takes the user to the Server selection screen */ -"changeServer" = "Change Server"; - /* Represents the Connect Button label for the Server Details provided */ "connect" = "Connect"; -/* Represents the first Connect to Server label on a new installation */ -"connectToJellyfinServer" = "Connect to a Jellyfin server"; - /* Represents the first Connect to Server label on a new installation */ "connectToJellyfinServerStart" = "Connect to a Jellyfin server to get started"; /* Represents the Connect Button label for the Server Details provided */ "connectToServer" = "Connect to Server"; -/* Represents the section label for Jellyfin Server(s) that were found during Jellyfin Server Discovery */ -"discoveredServers" = "Discovered Servers"; - /* Represents the section label for local/LAN Jellyfin Server(s) that were found during Jellyfin Server Discovery */ "localServers" = "Local Servers"; @@ -743,24 +679,15 @@ /* Represents a label for a button to remove all Users from a Jellyfin Server in Swiftfin */ "removeAllUsers" = "Remove All Users"; -/* Represents the section label for where a User Password needs to go. Also found in the User Settings to change/reset password */ -"serverAlreadyConnected" = "Server %s is already connected"; - /* Represents the label used to offer the user the ability to designate an additional URL for an existing Jellyfin Server */ "serverAlreadyExistsPrompt" = "Server %s already exists. Add new URL?"; -/* Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information */ -"serverInformation" = "Server Information"; - /* Represents the label used to head the section where Server Information is configured for new devices or on tvOS to designate the Server information */ "serverURL" = "Server URL"; /* Button label that confirms the user information and attempts to sign them in */ "signIn" = "Sign In"; -/* Message on first setup pointing the user to sign in */ -"signInGetStarted" = "Sign in to get started"; - /* Message indicating the server that the user is signing in to */ "signInToServer" = "Sign In to %s"; @@ -770,15 +697,9 @@ /* The Server Add/Sign in process has failed and this message is displayed */ "unableToConnectServer" = "Unable to connect to server"; -/* Message indicating the host could not be found */ -"unableToFindHost" = "Unable to find host"; - /* Message indicating unauthorized access */ "unauthorized" = "Unauthorized"; -/* Message indicating an unauthorized user */ -"unauthorizedUser" = "Unauthorized user"; - /* Label indicating the Jellyfin Server URL */ "url" = "URL"; @@ -796,22 +717,12 @@ "delivery" = "Delivery"; -/* MARK: TVOS Specific */ - - -/* Label for press down for menu */ -"pressDownForMenu" = "Press Down for Menu"; - - /* MARK: Video Player */ /* Option for aspect fill display mode */ "aspectFill" = "Aspect Fill"; -/* Section Label for Audio, Captions/Subtitles configuration on the Video Playback Overlay */ -"audioAndCaptions" = "Audio & Captions"; - /* Label for audio offset settings */ "audioOffset" = "Audio Offset"; @@ -836,9 +747,6 @@ /* Option for resuming the Player when it's sent back to the foreground */ "playOnActive" = "Play on active"; -/* Option to play from the beginning */ -"playFromBeginning" = "Play From Beginning"; - /* Button label to play the next item */ "playNextItem" = "Play Next Item"; @@ -848,7 +756,7 @@ /* Label for playback progress */ "progress" = "Progress"; -/* Label for scrub current time */ +/* Label for the current time scrub setting */ "scrubCurrentTime" = "Scrub Current Time"; /* Label for trailing value */ @@ -899,12 +807,17 @@ //"apply" = "Apply"; +//"audioAndCaptions" = "Audio & Captions"; //"back" = "Back"; +//"changeServer" = "Change Server"; //"cinematicViews" = "Cinematic Views"; //"close" = "Close"; +//"connectToJellyfinServer" = "Connect to a Jellyfin server"; //"continueWatching" = "Continue Watching"; //"defaultScheme" = "Default Scheme"; +//"discoveredServers" = "Discovered Servers"; //"displayOrder" = "Display order"; +//"editJumpLengths" = "Edit Jump Lengths"; //"file" = "File"; //"information" = "Information"; //"loading" = "Loading"; @@ -912,24 +825,40 @@ //"loginToWithString" = "Login to %@"; //"moreLikeThis" = "More Like This"; //"networking" = "Networking"; +//"noCastdevicesfound" = "No Cast devices found.."; //"noCodec" = "No Codec"; //"notAvailableSlash" = "N/A"; //"ok" = "Ok"; //"other" = "Other"; //"otherUser" = "Other User"; //"overview" = "Overview"; +//"playFromBeginning" = "Play From Beginning"; //"playNext" = "Play Next"; //"present" = "Present"; +//"pressDownForMenu" = "Press Down for Menu"; //"refresh" = "Refresh"; //"released" = "Released"; //"reload" = "Reload"; //"remove" = "Remove"; //"removeFromResume" = "Remove From Resume"; +//"resetAllSettings" = "Reset all settings back to defaults."; +//"resetUserSettings" = "Reset User Settings"; //"runtime" = "Runtime"; +//"searchDots" = "Search…"; //"season" = "Season"; //"seasons" = "Seasons"; +//"selectCastDestination" = "Select Cast Destination"; //"servers" = "Servers"; +//"serverAlreadyConnected" = "Server %s is already connected"; +//"serverInformation" = "Server Information"; +//"showCastAndCrew" = "Show Cast & Crew"; +//"showChaptersInfoInBottomOverlay" = "Show Chapters Info In Bottom Overlay"; +//"showFlattenView" = "Flatten Library Items"; +//"signInGetStarted" = "Sign in to get started"; //"sortBy" = "Sort by"; +//"systemControlGesturesEnabled" = "System Control Gestures Enabled"; //"tooManyRedirects" = "Too Many Redirects"; //"tryAgain" = "Try again"; +//"unableToFindHost" = "Unable to find host"; +//"unauthorizedUser" = "Unauthorized user"; //"unknown" = "Unknown";