{
    "pageTitle": { "message": "DRM Player | Advanced Player" },
    "appName": { "message": "DRM Player" },
    "filterGroupsLabel": { "message": "Filter Groups" },
    "allGroupsOption": { "message": "📂 All groups" },
    "groupsLabel": { "message": "Groups" },
    "allGroupsListItem": { "message": "All Groups" },
    "searchPlaceholder": { "message": "Search channels..." },
    "advancedEditorButton": { "message": "Editor" },
    "providersButton": { "message": "Providers" },
    "listManagementButton": { "message": "Lists" },
    "loadListsButton": { "message": "Load Lists" },
    "saveListsButton": { "message": "Save Lists" },
    "downloadM3UButton": { "message": "Download M3U" },
    "epgButton": { "message": "EPG" },
    "settingsButton": { "message": "Settings" },
    "loadUrlButton": { "message": "Load URL" },
    "loadFileInputTitle": { "message": "Select local M3U file" },
    "allChannelsTab": { "message": "All" },
    "favoritesTab": { "message": "Favorites" },
    "historyTab": { "message": "History" },
    "backButton": { "message": "Back" },
    "availableChannelsTitle": { "message": "Available Channels" },
    "paginationPrev": { "message": "Prev" },
    "paginationNext": { "message": "Next" },
    "playerTitle": { "message": "Player" },
    "minimizeButton": { "message": "Minimize" },
    "closeButton": { "message": "Close" },
    "nowLabel": { "message": "Now:" },
    "nextLabel": { "message": "Next:" },
    "channelListTitle": { "message": "Channel List" },
    "advancedEditorTitle": { "message": "Advanced M3U Editor" },
    "noFileLoaded": { "message": "No file loaded" },
    "searchInListPlaceholder": { "message": "Search in list..." },
    "allGroups": { "message": "All Groups" },
    "deleteSelected": { "message": "Delete Sel." },
    "clearSelection": { "message": "Clear Sel." },
    "multiEdit": { "message": "Multi-Edit" },
    "logoHeader": { "message": "Logo" },
    "nameHeader": { "message": "Name" },
    "urlHeader": { "message": "URL" },
    "epgIdHeader": { "message": "EPG ID" },
    "channelNumHeader": { "message": "Num" },
    "actionsHeader": { "message": "Actions" },
    "editorPlaceholder": { "message": "Select a channel to edit its details." },
    "channelEditorTitle": { "message": "Channel Editor" },
    "logoPreviewAlt": { "message": "Logo preview" },
    "channelNameLabel": { "message": "Channel Name" },
    "epgIdLabel": { "message": "EPG ID (tvg-id)" },
    "channelNumLabel": { "message": "Ch. Number (ch-number)" },
    "logoLabel": { "message": "Logo (tvg-logo)" },
    "streamUrlLabel": { "message": "Stream URL" },
    "groupLabel": { "message": "Group (group-title)" },
    "favoriteLabel": { "message": "Favorite" },
    "hideChannelLabel": { "message": "Hide channel" },
    "advancedSettingsDRM": { "message": "Advanced Settings / DRM" },
    "licenseTypeLabel": { "message": "DRM License Type (license_type)" },
    "licenseKeyLabel": { "message": "DRM License Key/URL (license_key)" },
    "streamHeadersLabel": { "message": "DRM Stream Headers (stream_headers)" },
    "vlcUserAgentLabel": { "message": "VLC User-Agent (#EXTVLCOPT:http-user-agent)" },
    "testButton": { "message": "Test" },
    "deleteButton": { "message": "Delete" },
    "saveButton": { "message": "Save" },
    "closeEditorButton": { "message": "Close Editor" },
    "applyChangesAndCloseButton": { "message": "Apply Changes & Close" },
    "multiEditTitle": { "message": "Multiple Channel Edit" },
    "multiEditDescription": { "message": "Apply changes to all {count} selected channels. Only enabled fields will be modified." },
    "changeGroupLabel": { "message": "Change Group" },
    "newGroupNamePlaceholder": { "message": "New group name..." },
    "modifyFavoriteLabel": { "message": "Modify Favorite" },
    "addToFavoritesOption": { "message": "Add to Favorites" },
    "removeFromFavoritesOption": { "message": "Remove from Favorites" },
    "modifyVisibilityLabel": { "message": "Modify Visibility" },
    "hideChannelsOption": { "message": "Hide Channels" },
    "showChannelsOption": { "message": "Show Channels" },
    "headersAndDRM": { "message": "Headers & DRM" },
    "setUserAgentLabel": { "message": "Set User-Agent (VLC)" },
    "userAgentPlaceholder": { "message": "User-Agent for #EXTVLCOPT..." },
    "setStreamHeadersLabel": { "message": "Add/Overwrite Stream Headers (Kodi)" },
    "streamHeadersPlaceholder": { "message": "key1=value1|key2=value2..." },
    "appendHeadersOption": { "message": "Append/Update Headers" },
    "replaceHeadersOption": { "message": "Replace All Headers" },
    "applyChangesButton": { "message": "Apply Changes" },
    "saveM3UModalTitle": { "message": "Save Current M3U List" },
    "saveM3UModalDescription": { "message": "Enter a name to save the currently loaded M3U list to the extension's local database." },
    "listNameLabel": { "message": "List Name:" },
    "listNamePlaceholder": { "message": "E.g.: MyFavoriteTV_List" },
    "saveListButton": { "message": "Save List" },
    "daznTokenModalTitle": { "message": "DAZN Authentication Token Required" },
    "daznTokenModalDescription": { "message": "To update DAZN channels, please enter your full DAZN Bearer Token." },
    "daznTokenModalHint": { "message": "This token can be obtained from your browser's developer tools by inspecting network requests while DAZN is active and logged in." },
    "daznTokenLabel": { "message": "DAZN Token (Bearer):" },
    "daznTokenPlaceholder": { "message": "Paste your full Bearer token here..." },
    "rememberTokenLabel": { "message": "Remember this token (will be saved locally in settings)" },
    "submitTokenButton": { "message": "Submit Token" },
    "loadFromDBModalTitle": { "message": "Saved Lists" },
    "loadingLists": { "message": "Loading lists..." },
    "loadButton": { "message": "Load" },
    "epgModalTitle": { "message": "Program Guide (EPG)" },
    "epgUrlPlaceholder": { "message": "📅 XMLTV EPG file URL" },
    "loadEpgButton": { "message": "Load/Update EPG" },
    "movistarVODModalTitle": { "message": "Movistar+ VOD/Catchup" },
    "selectDateLabel": { "message": "Select Date:" },
    "loadEpgDayButton": { "message": "Load Day's EPG" },
    "searchProgramPlaceholder": { "message": "Search program..." },
    "allChannelsOption": { "message": "All channels" },
    "allGenresOption": { "message": "All genres" },
    "noProgramsFound": { "message": "No programs found for the selected date/filters." },
    "pageInfo": { "message": "Page {currentPage} of {totalPages} ({totalItems} results)" },
    "previousButton": { "message": "Previous" },
    "nextButton": { "message": "Next" },
    "programDetailsTitle": { "message": "Program Details" },
    "playProgramButton": { "message": "Play" },
    "addToListButton": { "message": "Add to M3U List" },
    "xtreamModalTitle": { "message": "Xtream Codes Server Connection" },
    "xtreamModalDescription": { "message": "Enter your Xtream server details. The M3U URL will be generated automatically." },
    "xtreamServerNameLabel": { "message": "Name for Saving (Optional):" },
    "xtreamHostLabel": { "message": "Server Host (e.g., http://domain.com:port):" },
    "xtreamUserLabel": { "message": "User:" },
    "xtreamPasswordLabel": { "message": "Password:" },
    "xtreamOutputTypeLabel": { "message": "Preferred Output Type:" },
    "xtreamM3uPlusOption": { "message": "M3U Plus (Recommended)" },
    "xtreamTsOption": { "message": "TS" },
    "xtreamHlsOption": { "message": "HLS (m3u8)" },
    "xtreamOutputHint": { "message": "Affects the format of the stream URLs." },
    "xtreamContentToLoadLabel": { "message": "Content to Load:" },
    "xtreamLiveChannels": { "message": "Live Channels" },
    "xtreamVod": { "message": "VOD (Movies)" },
    "xtreamSeries": { "message": "Series" },
    "xtreamFetchEpgLabel": { "message": "Try to fetch EPG from server" },
    "xtreamForceGroupSelectionLabel": { "message": "Force group selection" },
    "xtreamForceGroupSelectionHint": { "message": "Check this if you want to change your group selection for this server." },
    "xtreamSavedServersLabel": { "message": "Saved Servers" },
    "xtreamNoSavedServers": { "message": "No saved servers." },
    "xtreamSaveConnectionButton": { "message": "Save Current Connection" },
    "xtreamConnectButton": { "message": "Connect and Load" },
    "xtreamGroupSelectionTitle": { "message": "Select Xtream Groups" },
    "xtreamGroupSelectionDescription": { "message": "Select the groups from each category you want to load into the list." },
    "xtreamLiveGroupsLabel": { "message": "Live Groups" },
    "xtreamVodGroupsLabel": { "message": "VOD Groups" },
    "xtreamSeriesGroupsLabel": { "message": "Series Groups" },
    "selectAll": { "message": "All" },
    "deselectAll": { "message": "None" },
    "loading": { "message": "Loading..." },
    "loadSelectedButton": { "message": "Load Selected" },
    "xcodecPanelsTitle": { "message": "XCodec Panel Management" },
    "xcodecPanelFormLabel": { "message": "Panel Form" },
    "xcodecPanelNameLabel": { "message": "Panel Name (Optional):" },
    "xcodecServerUrlLabel": { "message": "X-UI/XC Server URL:" },
    "xcodecApiTokenLabel": { "message": "API Token (if required):" },
    "xcodecSavePanelButton": { "message": "Save Panel" },
    "xcodecClearFormButton": { "message": "Clear" },
    "xcodecSavedPanelsLabel": { "message": "Saved Panels" },
    "xcodecImportPresetButton": { "message": "Import Preset Panels" },
    "xcodecNoSavedPanels": { "message": "No saved panels." },
    "xcodecProcessAllButton": { "message": "Process All" },
    "xcodecProcessFormButton": { "message": "Process Panel (Form)" },
    "xcodecPreviewTitle": { "message": "XCodec Panel Preview" },
    "xcodecPreviewStatsLoading": { "message": "Loading stats..." },
    "xcodecPanelGroupsLabel": { "message": "Panel Groups" },
    "xcodecSelectAllGroupsButton": { "message": "Select/Deselect All Groups" },
    "xcodecChannelsInGroupLabel": { "message": "Channels in Selected Group" },
    "xcodecSelectGroupHint": { "message": "Select a group to see its channels." },
    "xcodecSelectAllInGroupButton": { "message": "Select/Deselect All in Group" },
    "xcodecAddSelectedButton": { "message": "Add Selected" },
    "xcodecAddAllValidButton": { "message": "Add All Valid" },
    "settingsTitle": { "message": "Player Settings" },
    "settingsGeneralUITab": { "message": "General & UI" },
    "settingsPlayerTab": { "message": "Player" },
    "settingsNetworkTab": { "message": "Network (Shaka)" },
    "settingsEpgTab": { "message": "EPG" },
    "settingsXCodecTab": { "message": "XCodec" },
    "settingsBarTvTab": { "message": "BarTV" },
    "settingsOrangeTvTab": { "message": "OrangeTV" },
    "settingsGlobalNetworkTab": { "message": "Global Network" },
    "settingsDaznTab": { "message": "DAZN" },
    "settingsMovistarTab": { "message": "Movistar+" },
    "settingsSendM3uTab": { "message": "Send M3U" },
    "settingsDataManagementTab": { "message": "Data Management" },
    "settingsUIAppearanceTitle": { "message": "User Interface & Appearance" },
    "languageLabel": { "message": "Language:" },
    "themeLabel": { "message": "Color Theme:" },
    "greenTheme": { "message": "Green (Default)" },
    "blueTheme": { "message": "Blue" },
    "purpleTheme": { "message": "Purple" },
    "orangeTheme": { "message": "Orange" },
    "fontLabel": { "message": "Main Font:" },
    "systemFont": { "message": "System (Default)" },
    "sansSerifFont": { "message": "Generic Sans-Serif" },
    "serifFont": { "message": "Generic Serif" },
    "monospaceFont": { "message": "Generic Monospace" },
    "cardSizeLabel": { "message": "Channel Card Size:" },
    "channelsPerPageLabel": { "message": "Channels per Page:" },
    "storeLastM3ULabel": { "message": "Store Last M3U List (<4MB)" },
    "backgroundAnimationLabel": { "message": "Background Animation (Particles)" },
    "particleOpacityLabel": { "message": "Particle Opacity:" },
    "cardDisplaySettingsTitle": { "message": "Channel Card Display" },
    "logoAspectRatioLabel": { "message": "Logo Aspect Ratio:" },
    "aspectRatio169": { "message": "16:9 (Widescreen)" },
    "aspectRatio43": { "message": "4:3 (Standard)" },
    "aspectRatio11": { "message": "1:1 (Square)" },
    "aspectRatio21": { "message": "2:1 (Cinematic)" },
    "aspectRatioAuto": { "message": "Automatic (Container's Original)" },
    "showChannelNumberLabel": { "message": "Show Channel Number" },
    "showChannelGroupLabel": { "message": "Show Channel Group" },
    "showEpgInfoLabel": { "message": "Show EPG Info (Now/Next)" },
    "showFavButtonLabel": { "message": "Show Favorite Button" },
    "compactCardViewLabel": { "message": "Compact card view" },
    "enableHoverPreviewLabel": { "message": "Enable preview on hover" },
    "shakaPlayerSettingsTitle": { "message": "Shaka Player Configuration" },
    "persistentControlsLabel": { "message": "Player Controls Always Visible" },
    "persistFiltersLabel": { "message": "Remember Filters between sessions" },
    "playerWindowOpacityLabel": { "message": "Player Window Opacity:" },
    "playerBufferLabel": { "message": "Player buffer (seconds):" },
    "maxVideoHeightLabel": { "message": "Preferred Max Video Height (ABR):" },
    "noRestrictionOption": { "message": "Automatic (No restriction)" },
    "preferredAudioLabel": { "message": "Preferred Audio:" },
    "preferredSubtitlesLabel": { "message": "Preferred Subtitles:" },
    "lowLatencyModeLabel": { "message": "Low Latency Mode (Live Streaming)" },
    "liveCatchUpModeLabel": { "message": "Aggressive Live Sync (Live Catch-up)" },
    "enableAbrLabel": { "message": "Enable ABR (Adaptive Bitrate)" },
    "abrInitialBandwidthLabel": { "message": "ABR initial bandwidth (Kbps):" },
    "jumpLargeGapsLabel": { "message": "Jump Large Gaps in Stream (Live)" },
    "dashPresentationDelayLabel": { "message": "DASH Presentation Delay (seconds):" },
    "dashPresentationDelayHint": { "message": "For DASH streams. Defines how far behind the 'live' edge playback will begin." },
    "avSyncThresholdLabel": { "message": "A/V Sync Threshold (seconds):" },
    "avSyncThresholdHint": { "message": "Maximum allowed difference between audio and video before a correction is attempted." },
    "networkRetrySettingsTitle": { "message": "Network Retry Configuration (Shaka)" },
    "manifestMaxRetriesLabel": { "message": "Manifest Max Retries:" },
    "manifestTimeoutLabel": { "message": "Manifest Timeout (ms):" },
    "segmentMaxRetriesLabel": { "message": "Segment Max Retries:" },
    "segmentTimeoutLabel": { "message": "Segment Timeout (ms):" },
    "epgSettingsTitle": { "message": "Program Guide (EPG)" },
    "defaultEpgUrlLabel": { "message": "Default XMLTV EPG URL (EPG Modal):" },
    "enableEpgNameMatchingLabel": { "message": "Enable EPG Matching by Name (XMLTV)" },
    "epgNameMatchingHint": { "message": "If tvg-id fails, try matching by name (less accurate)." },
    "epgNameMatchThresholdLabel": { "message": "EPG Name Similarity Threshold (XMLTV):" },
    "epgDensityLabel": { "message": "EPG Visual Density:" },
    "epgDensityHint": { "message": "Pixels per hour on the timeline. Higher = wider, more detail. Lower = more compact." },
    "useMovistarVodAsEpgLabel": { "message": "Use Movistar+ VOD data as EPG (experimental)" },
    "useMovistarVodAsEpgHint": { "message": "Integrates the current day's EPG from Movistar VOD for the Movistar channels in your list." },
    "rematchEpgNowButton": { "message": "Rematch EPG Now" },
    "rematchEpgHint": { "message": "Requires a loaded M3U list and EPG." },
    "xcodecSettingsTitle": { "message": "XCodec Panel Configuration" },
    "corsProxyUrlLabel": { "message": "CORS Proxy URL (Optional):" },
    "corsProxyUrlHint": { "message": "Enter a CORS proxy URL if XCodec panels have CORS issues. The panel URL will be appended (e.g., `proxy.com/?url=http://panel.com`). Leave empty for direct calls." },
    "ignorePanelsOverStreamsLabel": { "message": "Ignore Panels with more than X Streams (0 to disable):" },
    "ignorePanelsOverStreamsHint": { "message": "If a panel has more streams than this value, it won't be processed when adding directly (does not affect preview)." },
    "batchSizeLabel": { "message": "Batch Size for Configs:" },
    "batchSizeHint": { "message": "Number of stream configurations to request simultaneously." },
    "apiTimeoutLabel": { "message": "API Request Timeout (ms):" },
    "apiTimeoutHint": { "message": "Maximum wait time for each call to the panel's API." },
    "barTvCredentialsTitle": { "message": "BarTV Credentials" },
    "emailLabel": { "message": "Email:" },
    "passwordLabel": { "message": "Password:" },
    "barTvCredentialsHint": { "message": "Enter your BarTV credentials to load the channels." },
    "orangeTvCredentialsTitle": { "message": "OrangeTV Credentials" },
    "userLabel": { "message": "User:" },
    "orangeTvGroupSelectionTitle": { "message": "OrangeTV Channel Group Selection" },
    "orangeTvGroupSelectionHint": { "message": "If no group is selected, all available groups will be included when loading OrangeTV channels." },
    "globalNetworkSettingsTitle": { "message": "Global Network Configuration" },
    "globalUserAgentLabel": { "message": "Global User-Agent (Optional):" },
    "globalUserAgentHint": { "message": "Applicable if the channel does not define its own via KODIPROP, EXTVLCOPT, or EXTHTTP." },
    "globalReferrerLabel": { "message": "Global Referrer (Optional):" },
    "globalReferrerHint": { "message": "Applicable if the channel does not define its own." },
    "additionalGlobalHeadersLabel": { "message": "Additional Global Headers (JSON):" },
    "additionalGlobalHeadersHint": { "message": "Will be merged with channel headers (channel takes precedence)." },
    "daznSettingsTitle": { "message": "DAZN Configuration" },
    "daznAuthTokenLabel": { "message": "DAZN Authentication Token:" },
    "daznAuthTokenHint": { "message": "This token will be used to fetch and update DAZN channels in your M3U list. It is stored securely." },
    "movistarManagementTitle": { "message": "Movistar+ Management" },
    "movistarManagementDescription": { "message": "This section allows managing authentication and tokens for Movistar+." },
    "movistarLoginTitle": { "message": "Login / Get Tokens" },
    "movistarLoginButton": { "message": "Login and Get Tokens" },
    "movistarSavedLongTokensTitle": { "message": "Saved Long-Session Tokens" },
    "movistarTokenIdHeader": { "message": "ID" },
    "movistarAccountHeader": { "message": "Account" },
    "movistarDeviceIdHeader": { "message": "Device ID" },
    "movistarExpiresHeader": { "message": "Expires" },
    "movistarStatusHeader": { "message": "Status" },
    "movistarActionHeader": { "message": "Action" },
    "movistarLoading": { "message": "Loading..." },
    "movistarValidateAllButton": { "message": "Validate All" },
    "movistarDeleteExpiredButton": { "message": "Del. Expired" },
    "movistarAddJwtLabel": { "message": "Add JWT:" },
    "movistarDeviceIdLabel": { "message": "Device ID:" },
    "movistarAddManualButton": { "message": "Add Manual Token" },
    "movistarDeviceManagementTitle": { "message": "Device Management for Token:" },
    "movistarLoadDevicesHint": { "message": "Load devices for the selected token above." },
    "movistarLoadDevicesButton": { "message": "Load Devices" },
    "movistarAssociateDeviceButton": { "message": "Associate Selected" },
    "movistarRegisterNewDeviceButton": { "message": "Register New" },
    "movistarCurrentCdnTokenTitle": { "message": "Current Short (CDN) Token" },
    "movistarCdnTokenLabel": { "message": "CDN Token (X-TCDN-Token):" },
    "movistarCdnExpiresLabel": { "message": "Expires:" },
    "movistarRefreshCdnButton": { "message": "Refresh CDN Token" },
    "movistarCopyCdnButton": { "message": "Copy CDN" },
    "movistarApplyToChannelsButton": { "message": "Apply to Channels" },
    "movistarVodCacheManagementTitle": { "message": "Movistar+ VOD Cache Management" },
    "movistarVodCacheSavedDaysLabel": { "message": "Saved VOD data days:" },
    "movistarVodCacheEstimatedSizeLabel": { "message": "Estimated cache size:" },
    "movistarVodCacheDaysToKeepLabel": { "message": "Days to keep in cache (1-90):" },
    "movistarClearVodCacheButton": { "message": "Clear Movistar+ VOD Cache Now" },
    "movistarLogLabel": { "message": "Action Log:" },
    "sendM3uToServerTitle": { "message": "Send M3U List to Server" },
    "phpServerUrlLabel": { "message": "PHP Server URL:" },
    "phpServerUrlHint": { "message": "Enter the full URL of the PHP script on your server that will receive the M3U file." },
    "sendM3uToServerButton": { "message": "Send Loaded M3U List Now" },
    "sendM3uToServerHint": { "message": "The currently loaded M3U list in the player will be sent to the specified server." },
    "phpScriptGeneratorTitle": { "message": "PHP Script Generator (receive_m3u.php)" },
    "phpScriptGeneratorHint": { "message": "Use this generator to create a custom PHP script for your server. Configure the options and then copy the generated code." },
    "securityOptions": { "message": "Security Options" },
    "requireSecretKeyLabel": { "message": "Require secret key" },
    "keyLabel": { "message": "Key" },
    "restrictToExtensionIdLabel": { "message": "Restrict to this Extension ID" },
    "fileOptions": { "message": "File Options" },
    "savePathLabel": { "message": "Save path on server" },
    "savePathHint": { "message": "Absolute path. If left empty, saves in the same directory as the script." },
    "filenameLabel": { "message": "Filename:" },
    "keepOriginalFilenameLabel": { "message": "Keep original filename (sanitized)" },
    "useFixedFilenameLabel": { "message": "Use fixed filename:" },
    "addTimestampLabel": { "message": "Add timestamp to filename" },
    "overwriteLabel": { "message": "Overwrite if file already exists" },
    "generatedScriptLabel": { "message": "Generated Script" },
    "generateScriptButton": { "message": "Generate Script" },
    "copyScriptButton": { "message": "Copy Script" },
    "dataManagementTitle": { "message": "Application Data Management" },
    "exportSettingsButton": { "message": "Export Settings" },
    "importSettingsButton": { "message": "Import Settings" },
    "clearCacheButton": { "message": "Clear Cache & Local Data" },
    "clearCacheHint": { "message": "This deletes: history, favorites, saved lists, Xtream servers, XCodec panels, EPG, DAZN token, and Movistar tokens. The page will reload." },
    "settingsSaveAndApply": { "message": "Save and Apply Settings" },
    "settingsCancel": { "message": "Cancel" }
}