This commit is contained in:
Filipinos 2025-07-07 17:26:02 +02:00
parent 859ebe1c4f
commit 7e41a6d29a
4 changed files with 344 additions and 318 deletions

View File

@ -136,7 +136,7 @@
"lang_fr": { "message": "Französisch" }, "lang_fr": { "message": "Französisch" },
"lang_de": { "message": "Deutsch" }, "lang_de": { "message": "Deutsch" },
"lang_it": { "message": "Italienisch" }, "lang_it": { "message": "Italienisch" },
_pt": { "message": "Portugiesisch" }, "lang_pt": { "message": "Portugiesisch" },
"essentialFeaturesNotSupported": { "message": "Dein Browser unterstützt wesentliche Funktionen nicht." }, "essentialFeaturesNotSupported": { "message": "Dein Browser unterstützt wesentliche Funktionen nicht." },
"dbAccessError": { "message": "Fehler beim Zugriff auf die lokale Datenbank." }, "dbAccessError": { "message": "Fehler beim Zugriff auf die lokale Datenbank." },
"dbUpdateNeeded": { "message": "Die Datenbank muss aktualisiert werden, bitte lade die Seite neu." }, "dbUpdateNeeded": { "message": "Die Datenbank muss aktualisiert werden, bitte lade die Seite neu." },
@ -187,17 +187,17 @@ _pt": { "message": "Portugiesisch" },
"errorLoadingActorContent": { "message": "Inhalt für $actorName$ konnte nicht geladen werden.", "placeholders": { "actorName": { "content": "$1" } } }, "errorLoadingActorContent": { "message": "Inhalt für $actorName$ konnte nicht geladen werden.", "placeholders": { "actorName": { "content": "$1" } } },
"errorAddingStream": { "message": "Fehler beim Hinzufügen von Stream(s): $message$", "placeholders": { "message": { "content": "$1" } } }, "errorAddingStream": { "message": "Fehler beim Hinzufügen von Stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
"phpUrlNotConfigured": { "message": "Die PHP-Server-URL ist nicht konfiguriert. Bitte richte sie in den Einstellungen ein." }, "phpUrlNotConfigured": { "message": "Die PHP-Server-URL ist nicht konfiguriert. Bitte richte sie in den Einstellungen ein." },
"searchingStreams": { "message": "Suche nach Streams für \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "searchingStreams": { "message": "Suche nach Streams für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"sendingStreams": { "message": "Sende $count$ Stream(s) an den Server...", "placeholders": { "count": { "content": "$1" } } }, "sendingStreams": { "message": "Sende $count$ Stream(s) an den Server...", "placeholders": { "count": { "content": "$1" } } },
"streamAddedSuccess": { "message": "Stream(s) erfolgreich hinzugefügt." }, "streamAddedSuccess": { "message": "Stream(s) erfolgreich hinzugefügt." },
"generatingM3U": { "message": "Generiere M3U für \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "generatingM3U": { "message": "Generiere M3U für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"m3uDownloaded": { "message": "M3U für \"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } }, "m3uDownloaded": { "message": "M3U für \"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
"errorGeneratingM3U": { "message": "Fehler beim Generieren der M3U: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorGeneratingM3U": { "message": "Fehler beim Generieren der M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
"settingsSavedSuccess": { "message": "Einstellungen erfolgreich gespeichert." }, "settingsSavedSuccess": { "message": "Einstellungen erfolgreich gespeichert." },
"errorSavingSettings": { "message": "Fehler beim Speichern der Einstellungen in der Datenbank." }, "errorSavingSettings": { "message": "Fehler beim Speichern der Einstellungen in der Datenbank." },
"languageChangeReload": { "message": "Sprache geändert. Die Anwendung wird jetzt neu geladen." }, "languageChangeReload": { "message": "Sprache geändert. Die Anwendung wird jetzt neu geladen." },
"addedToFavorites": { "message": "Zu Favoriten hinzugefügt." }, "addedToFavorites": { "message": "Zu Favoriten hinzugefügt." },
"removedFromFavorites": { "message": "Aus Favoriten entfernt." }, "removedFromFavorites": { "message": "Aus Favoriten entfernen." },
"plexScanInProgress": { "message": "Plex-Scan läuft bereits." }, "plexScanInProgress": { "message": "Plex-Scan läuft bereits." },
"plexScanStarting": { "message": "Starte Plex-Scan..." }, "plexScanStarting": { "message": "Starte Plex-Scan..." },
"noPlexTokens": { "message": "Keine Plex-Tokens konfiguriert." }, "noPlexTokens": { "message": "Keine Plex-Tokens konfiguriert." },
@ -212,7 +212,7 @@ _pt": { "message": "Portugiesisch" },
"errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } },
"scanCancelled": { "message": "Scan vom Benutzer abgebrochen." }, "scanCancelled": { "message": "Scan vom Benutzer abgebrochen." },
"scanCancelledInfo": { "message": "Scan abgebrochen." }, "scanCancelledInfo": { "message": "Scan abgebrochen." },
"retyingSection": { "message": "Wiederhole Abschnitt \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "retyingSection": { "message": "Wiederhole Abschnitt \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"retrySuccess": { "message": "[ERFOLG] Wiederholung von \"$title$\" abgeschlossen.", "placeholders": { "title": { "content": "$1" } } }, "retrySuccess": { "message": "[ERFOLG] Wiederholung von \"$title$\" abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
"retryError": { "message": "[FINALER FEHLER] Wiederholung für \"$title$\" fehlgeschlagen: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } }, "retryError": { "message": "[FINALER FEHLER] Wiederholung für \"$title$\" fehlgeschlagen: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
"noRetriesPending": { "message": "Keine ausstehenden Wiederholungen." }, "noRetriesPending": { "message": "Keine ausstehenden Wiederholungen." },
@ -233,10 +233,10 @@ _pt": { "message": "Portugiesisch" },
"noSongsFound": { "message": "Keine Lieder gefunden." }, "noSongsFound": { "message": "Keine Lieder gefunden." },
"shuffleOn": { "message": "Zufallsmodus aktiviert." }, "shuffleOn": { "message": "Zufallsmodus aktiviert." },
"shuffleOff": { "message": "Zufallsmodus deaktiviert." }, "shuffleOff": { "message": "Zufallsmodus deaktiviert." },
"downloadingSong": { "message": "Starte Download von \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "downloadingSong": { "message": "Starte Download von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"songDownloaded": { "message": "\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } }, "songDownloaded": { "message": "\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
"errorDownloadingSong": { "message": "Fehler beim Herunterladen von \"$title$\"", "placeholders": { "title": { "content": "$1" } } }, "errorDownloadingSong": { "message": "Fehler beim Herunterladen von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"generatingAlbumM3U": { "message": "Generiere M3U für \"$artist$\"...", "placeholders": { "artist": { "content": "$1" } } }, "generatingAlbumM3U": { "message": "Generiere M3U für \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
"albumM3UGenerated": { "message": "M3U für Album \"$artist$\" generiert.", "placeholders": { "artist": { "content": "$1" } } }, "albumM3UGenerated": { "message": "M3U für Album \"$artist$\" generiert.", "placeholders": { "artist": { "content": "$1" } } },
"playbackError": { "message": "Wiedergabefehler" }, "playbackError": { "message": "Wiedergabefehler" },
"errorLabel": { "message": "Fehler" }, "errorLabel": { "message": "Fehler" },
@ -251,15 +251,15 @@ _pt": { "message": "Portugiesisch" },
"searchResultsFor": {"message": "Ergebnisse für \"$query$\"", "placeholders": {"query": {"content": "$1"}}}, "searchResultsFor": {"message": "Ergebnisse für \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
"contentFrom": {"message": "Inhalt von $actor$", "placeholders": {"actor": {"content": "$1"}}}, "contentFrom": {"message": "Inhalt von $actor$", "placeholders": {"actor": {"content": "$1"}}},
"explore": {"message": "Entdecken"}, "explore": {"message": "Entdecken"},
"noGenre": {"message": "Ohne Kategorie"}, "noGenre": {"message": "Unkategorisiert"},
"synopsis": {"message": "Zusammenfassung"}, "synopsis": {"message": "Zusammenfassung"},
"noSynopsis": {"message": "Keine Zusammenfassung verfügbar."}, "noSynopsis": {"message": "Keine Zusammenfassung verfügbar."},
"director": {"message": "Regisseur:"}, "director": {"message": "Regisseur:"},
"writer": {"message": "Autor:"}, "writer": {"message": "Autor:"},
"viewOnImdb": {"message": "Auf IMDb ansehen"}, "viewOnImdb": {"message": "Auf IMDb ansehen"},
"watchTrailer": {"message": "Trailer ansehen"}, "watchTrailer": {"message": "Trailer ansehen"},
"addToFavorites": {"message": "Favorit"}, "addToFavorites": {"message": "Zu Favoriten hinzufügen"},
"removeFromFavorites": {"message": "Entfernen"}, "removeFromFavorites": {"message": "Aus Favoriten entfernen"},
"notAvailable": {"message": "Nicht verfügbar"}, "notAvailable": {"message": "Nicht verfügbar"},
"mainCast": {"message": "Hauptbesetzung"}, "mainCast": {"message": "Hauptbesetzung"},
"seasonsAndEpisodes": {"message": "Staffeln & Episoden"}, "seasonsAndEpisodes": {"message": "Staffeln & Episoden"},

View File

@ -1,290 +1,290 @@
{ {
"appName": { "message": "CinePlex" }, "appName": { "message": "CinePlex" },
"appDescription": { "message": "Scans Plex servers to find content and displays it in the interface" }, "appDescription": { "message": "Escanea servidores de Plex para encontrar contenido y lo muestra en la interfaz" },
"appTagline": { "message": "Movies, Series & Music" }, "appTagline": { "message": "Películas, Series y Música" },
"appLocaleCode": { "message": "en-US" }, "appLocaleCode": { "message": "es-ES" },
"toggleNavigation": { "message": "Toggle Navigation" }, "toggleNavigation": { "message": "Alternar Navegación" },
"searchPlaceholder": { "message": "Search for movies or series..." }, "searchPlaceholder": { "message": "Buscar películas o series..." },
"openMusicPlayer": { "message": "Open Music Player" }, "openMusicPlayer": { "message": "Abrir Reproductor de Música" },
"settings": { "message": "Settings" }, "settings": { "message": "Ajustes" },
"navMovies": { "message": "Movies" }, "navMovies": { "message": "Películas" },
"navSeries": { "message": "Series" }, "navSeries": { "message": "Series" },
"navPhotos": { "message": "Photos" }, "navPhotos": { "message": "Fotos" },
"navStats": { "message": "Statistics" }, "navStats": { "message": "Estadísticas" },
"navFavorites": { "message": "Favorites" }, "navFavorites": { "message": "Favoritos" },
"navHistory": { "message": "History" }, "navHistory": { "message": "Historial" },
"navRecommendations": { "message": "Recommendations" }, "navRecommendations": { "message": "Recomendaciones" },
"navMusic": { "message": "Music" }, "navMusic": { "message": "Música" },
"heroWelcome": { "message": "Welcome to CinePlex" }, "heroWelcome": { "message": "Bienvenido a CinePlex" },
"heroSubtitle": { "message": "Explore thousands of movies and series." }, "heroSubtitle": { "message": "Explora miles de películas y series." },
"addStream": { "message": "Add Stream" }, "addStream": { "message": "Añadir Stream" },
"moreInfo": { "message": "More Info" }, "moreInfo": { "message": "Más información" },
"popularMovies": { "message": "Popular Movies" }, "popularMovies": { "message": "Películas Populares" },
"allGenres": { "message": "All Genres" }, "allGenres": { "message": "Todos los géneros" },
"allYears": { "message": "All Years" }, "allYears": { "message": "Todos los años" },
"sortPopular": { "message": "Most Popular" }, "sortPopular": { "message": "Más populares" },
"sortTopRated": { "message": "Top Rated" }, "sortTopRated": { "message": "Mejor valoradas" },
"sortRecent": { "message": "Most Recent" }, "sortRecent": { "message": "Más recientes" },
"loadMore": { "message": "Load More" }, "loadMore": { "message": "Cargar más" },
"photosBreadcrumbHome": { "message": "Albums" }, "photosBreadcrumbHome": { "message": "Álbumes" },
"selectServer": { "message": "Select a server" }, "selectServer": { "message": "Selecciona un servidor" },
"loading": { "message": "Loading..." }, "loading": { "message": "Cargando..." },
"photosEmptyState": { "message": "No albums or photos found." }, "photosEmptyState": { "message": "No se encontraron álbumes ni fotos." },
"photosEmptyStateSub": { "message": "Please select a server or make sure you have a photo library in Plex." }, "photosEmptyStateSub": { "message": "Por favor, selecciona un servidor o asegúrate de tener una biblioteca de fotos en Plex." },
"statsTitle": { "message": "Library Statistics" }, "statsTitle": { "message": "Estadísticas de la Biblioteca" },
"statsAllTokens": { "message": "All Tokens" }, "statsAllTokens": { "message": "Todos los Tokens" },
"statsAnalyzing": { "message": "Analyzing your library..." }, "statsAnalyzing": { "message": "Analizando tu biblioteca..." },
"statsActiveTokens": { "message": "Active Tokens" }, "statsActiveTokens": { "message": "Tokens Activos" },
"statsServersFound": { "message": "Servers Found" }, "statsServersFound": { "message": "Servidores Encontrados" },
"statsUniqueMovies": { "message": "Unique Movies" }, "statsUniqueMovies": { "message": "Películas Únicas" },
"statsUniqueSeries": { "message": "Unique Series" }, "statsUniqueSeries": { "message": "Series Únicas" },
"statsUniqueArtists": { "message": "Unique Artists" }, "statsUniqueArtists": { "message": "Artistas Únicos" },
"statsTokenServers": { "message": "Token's Servers" }, "statsTokenServers": { "message": "Servidores del Token" },
"statsChartMoviesByGenre": { "message": "Content by Genre (Movies)" }, "statsChartMoviesByGenre": { "message": "Contenido por Género (Películas)" },
"statsChartSeriesByGenre": { "message": "Content by Genre (Series)" }, "statsChartSeriesByGenre": { "message": "Contenido por Género (Series)" },
"statsChartByDecade": { "message": "Content by Decade" }, "statsChartByDecade": { "message": "Contenido por Década" },
"recommendationsTitle": { "message": "Recommendations For You" }, "recommendationsTitle": { "message": "Recomendaciones para ti" },
"historyTitle": { "message": "Viewing History" }, "historyTitle": { "message": "Historial de Visualización" },
"clearHistory": { "message": "Clear All" }, "clearHistory": { "message": "Borrar Todo" },
"consoleTitle": { "message": "Plex Scan Console" }, "consoleTitle": { "message": "Consola de Escaneo Plex" },
"footerCredit": { "message": "An interface for your Plex universe." }, "footerCredit": { "message": "Una interfaz para tu universo Plex." },
"backButton": { "message": "Back" }, "backButton": { "message": "Atrás" },
"closeTrailer": { "message": "Close trailer" }, "closeTrailer": { "message": "Cerrar tráiler" },
"close": { "message": "Close" }, "close": { "message": "Cerrar" },
"photoViewer": { "message": "Photo Viewer" }, "photoViewer": { "message": "Visor de fotos" },
"previous": { "message": "Previous" }, "previous": { "message": "Anterior" },
"next": { "message": "Next" }, "next": { "message": "Siguiente" },
"notificationTemplateText": { "message": "Notification" }, "notificationTemplateText": { "message": "Notificación" },
"settingsTitleFull": { "message": "Settings and Configuration" }, "settingsTitleFull": { "message": "Ajustes y Configuración" },
"settingsTabGeneral": { "message": "General" }, "settingsTabGeneral": { "message": "General" },
"settingsTabPlex": { "message": "Plex" }, "settingsTabPlex": { "message": "Plex" },
"settingsTabPhpGen": { "message": "PHP Generator" }, "settingsTabPhpGen": { "message": "Generador PHP" },
"settingsTabData": { "message": "Data" }, "settingsTabData": { "message": "Datos" },
"settingsApiServer": { "message": "API and Server Configuration" }, "settingsApiServer": { "message": "Configuración de API y Servidor" },
"settingsTmdbApiLabel": { "message": "TMDB API Key (Optional)" }, "settingsTmdbApiLabel": { "message": "Clave de API de TMDB (Opcional)" },
"settingsTmdbApiPlaceholder": { "message": "Will use default key if left blank" }, "settingsTmdbApiPlaceholder": { "message": "Se usará la clave por defecto si se deja en blanco" },
"settingsTmdbLangLabel": { "message": "Language for TMDB & UI" }, "settingsTmdbLangLabel": { "message": "Idioma para TMDB y la interfaz" },
"settingsPhpUrlLabel": { "message": "Server URL for Adding Streams" }, "settingsPhpUrlLabel": { "message": "URL del Servidor para Añadir Streams" },
"settingsPhpUrlPlaceholder": { "message": "https://your-server.com/path/to/script.php" }, "settingsPhpUrlPlaceholder": { "message": "https://tu-servidor.com/ruta/al/script.php" },
"settingsInterface": { "message": "Interface" }, "settingsInterface": { "message": "Interfaz" },
"settingsLightTheme": { "message": "Light Mode" }, "settingsLightTheme": { "message": "Modo Claro" },
"settingsShowHero": { "message": "Show 'Hero' welcome section" }, "settingsShowHero": { "message": "Mostrar sección de bienvenida 'Hero'" },
"settingsScanContent": { "message": "Content Scanning" }, "settingsScanContent": { "message": "Escaneo de Contenido" },
"settingsScanDesc": { "message": "Select what to scan and press the button." }, "settingsScanDesc": { "message": "Selecciona qué escanear y pulsa el botón." },
"settingsScanMovies": { "message": "Movies" }, "settingsScanMovies": { "message": "Películas" },
"settingsScanShows": { "message": "Series" }, "settingsScanShows": { "message": "Series" },
"settingsScanArtists": { "message": "Music" }, "settingsScanArtists": { "message": "Música" },
"settingsScanPhotos": { "message": "Photos" }, "settingsScanPhotos": { "message": "Fotos" },
"settingsSelectAll": { "message": "Select All" }, "settingsSelectAll": { "message": "Seleccionar Todo" },
"settingsStartScan": { "message": "Start Scan" }, "settingsStartScan": { "message": "Iniciar Escaneo" },
"settingsPlexTokens": { "message": "Plex Tokens" }, "settingsPlexTokens": { "message": "Tokens de Plex" },
"settingsPlexTokensDesc": { "message": "Edit the list of Plex tokens (JSON format)." }, "settingsPlexTokensDesc": { "message": "Edita la lista de tokens de Plex (formato JSON)." },
"settingsSaveTokens": { "message": "Save Tokens" }, "settingsSaveTokens": { "message": "Guardar Tokens" },
"settingsPhpGenTitle": { "message": "PHP Server Script Generator" }, "settingsPhpGenTitle": { "message": "Generador de Script PHP para el Servidor" },
"settingsPhpFileOptions": { "message": "File Options" }, "settingsPhpFileOptions": { "message": "Opciones del Archivo" },
"settingsPhpSavePathLabel": { "message": "Save Path on Server" }, "settingsPhpSavePathLabel": { "message": "Ruta de Guardado en el Servidor" },
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for same folder)" }, "settingsPhpSavePathPlaceholder": { "message": "Ej: /var/www/html/listas (en blanco para la misma carpeta)" },
"settingsPhpFilenameLabel": { "message": "Filename" }, "settingsPhpFilenameLabel": { "message": "Nombre del Archivo" },
"settingsPhpFileAction": { "message": "File Action" }, "settingsPhpFileAction": { "message": "Acción sobre el Archivo" },
"settingsPhpActionAppend": { "message": "Append to the end of the file (cumulative)" }, "settingsPhpActionAppend": { "message": "Añadir al final del archivo (acumulativo)" },
"settingsPhpActionOverwrite": { "message": "Overwrite the file (start fresh)" }, "settingsPhpActionOverwrite": { "message": "Sobrescribir el archivo (empezar de nuevo)" },
"settingsPhpSecurity": { "message": "Security (Optional)" }, "settingsPhpSecurity": { "message": "Seguridad (Opcional)" },
"settingsPhpUseSecretKey": { "message": "Use secret key (Recommended)" }, "settingsPhpUseSecretKey": { "message": "Usar clave secreta (Recomendado)" },
"settingsPhpSecretKeyPlaceholder": { "message": "Enter a secure secret key" }, "settingsPhpSecretKeyPlaceholder": { "message": "Introduce una clave secreta segura" },
"settingsPhpGeneratedCode": { "message": "Generated Code" }, "settingsPhpGeneratedCode": { "message": "Código Generado" },
"settingsPhpGeneratedPlaceholder": { "message": "The generated PHP code will appear here." }, "settingsPhpGeneratedPlaceholder": { "message": "El código PHP generado aparecerá aquí." },
"settingsGenerateScript": { "message": "Generate Script" }, "settingsGenerateScript": { "message": "Generar Script" },
"settingsCopyScript": { "message": "Copy Script" }, "settingsCopyScript": { "message": "Copiar Script" },
"settingsDataManagement": { "message": "Local Database Management" }, "settingsDataManagement": { "message": "Gestión de la Base de Datos Local" },
"settingsImportDb": { "message": "Import DB from File" }, "settingsImportDb": { "message": "Importar BD desde Archivo" },
"settingsExportDb": { "message": "Export DB to File" }, "settingsExportDb": { "message": "Exportar BD a Archivo" },
"settingsClearContent": { "message": "Clear Local Content Data" }, "settingsClearContent": { "message": "Borrar Datos de Contenido Local" },
"settingsClearContentDesc": { "message": "This action will delete movies, series, and music from the local database, but will not affect your favorites or settings." }, "settingsClearContentDesc": { "message": "Esta acción borrará películas, series y música de la base de datos local, pero no afectará a tus favoritos ni a tus ajustes." },
"settingsClose": { "message": "Close" }, "settingsClose": { "message": "Cerrar" },
"settingsSave": { "message": "Save Settings" }, "settingsSave": { "message": "Guardar Ajustes" },
"musicSidenavTitle": { "message": "Plex Music" }, "musicSidenavTitle": { "message": "Música de Plex" },
"musicAllServers": { "message": "All Servers" }, "musicAllServers": { "message": "Todos los Servidores" },
"musicSearchArtistPlaceholder": { "message": "Search artist..." }, "musicSearchArtistPlaceholder": { "message": "Buscar artista..." },
"musicSearchDiscographyPlaceholder": { "message": "Search in discography..." }, "musicSearchDiscographyPlaceholder": { "message": "Buscar en la discografía..." },
"musicNothingPlaying": { "message": "Nothing playing" }, "musicNothingPlaying": { "message": "Nada en reproducción" },
"musicSelectSong": { "message": "Select a song" }, "musicSelectSong": { "message": "Selecciona una canción" },
"musicToStart": { "message": "to start playing" }, "musicToStart": { "message": "para empezar a reproducir" },
"miniplayerDownloadSong": { "message": "Download song" }, "miniplayerDownloadSong": { "message": "Descargar canción" },
"miniplayerDownloadAlbum": { "message": "Download M3U album" }, "miniplayerDownloadAlbum": { "message": "Descargar álbum M3U" },
"miniplayerVolume": { "message": "Volume" }, "miniplayerVolume": { "message": "Volumen" },
"miniplayerShuffle": { "message": "Shuffle" }, "miniplayerShuffle": { "message": "Aleatorio" },
"miniplayerEqualizer": { "message": "Equalizer" }, "miniplayerEqualizer": { "message": "Ecualizador" },
"miniplayerOpenList": { "message": "Open list" }, "miniplayerOpenList": { "message": "Abrir lista" },
"eqTitle": { "message": "Graphic Equalizer" }, "eqTitle": { "message": "Ecualizador Gráfico" },
"eqPresetsLabel": { "message": "Presets" }, "eqPresetsLabel": { "message": "Preajustes" },
"eqPresetFlat": { "message": "Flat" }, "eqPresetFlat": { "message": "Plano" },
"eqPresetRock": { "message": "Rock" }, "eqPresetRock": { "message": "Rock" },
"eqPresetPop": { "message": "Pop" }, "eqPresetPop": { "message": "Pop" },
"eqPresetJazz": { "message": "Jazz" }, "eqPresetJazz": { "message": "Jazz" },
"eqPresetClassical": { "message": "Classical" }, "eqPresetClassical": { "message": "Clásica" },
"eqPresetBassBoost": { "message": "Bass Boost" }, "eqPresetBassBoost": { "message": "Refuerzo de Graves" },
"eqPreampLabel": { "message": "Pre-Amp" }, "eqPreampLabel": { "message": "Preamplificador" },
"infoModalTitle": { "message": "Information" }, "infoModalTitle": { "message": "Información" },
"infoModalFieldTitle": { "message": "Title:" }, "infoModalFieldTitle": { "message": "Título:" },
"infoModalFieldArtist": { "message": "Artist:" }, "infoModalFieldArtist": { "message": "Artista:" },
"infoModalFieldAlbum": { "message": "Album:" }, "infoModalFieldAlbum": { "message": "Álbum:" },
"infoModalFieldSong": { "message": "Song:" }, "infoModalFieldSong": { "message": "Canción:" },
"infoModalFieldYear": { "message": "Year:" }, "infoModalFieldYear": { "message": "Año:" },
"infoModalFieldGenre": { "message": "Genre:" }, "infoModalFieldGenre": { "message": "Género:" },
"lang_en": { "message": "English" }, "lang_en": { "message": "Inglés" },
"lang_es": { "message": "Spanish" }, "lang_es": { "message": "Español" },
"lang_fr": { "message": "French" }, "lang_fr": { "message": "Francés" },
"lang_de": { "message": "German" }, "lang_de": { "message": "Alemán" },
"lang_it": { "message": "Italian" }, "lang_it": { "message": "Italiano" },
"lang_pt": { "message": "Portuguese" }, "lang_pt": { "message": "Portugués" },
"essentialFeaturesNotSupported": { "message": "Your browser does not support essential features." }, "essentialFeaturesNotSupported": { "message": "Tu navegador no soporta funciones esenciales." },
"dbAccessError": { "message": "Error accessing the local database." }, "dbAccessError": { "message": "Error al acceder a la base de datos local." },
"dbUpdateNeeded": { "message": "The database needs to be updated, please reload the page." }, "dbUpdateNeeded": { "message": "La base de datos necesita actualizarse, por favor recarga la página." },
"dbBlocked": { "message": "Please close other tabs of this application to continue." }, "dbBlocked": { "message": "Por favor, cierra otras pestañas de esta aplicación para continuar." },
"deletingContentData": { "message": "Deleting local content data..." }, "deletingContentData": { "message": "Borrando datos de contenido locales..." },
"noContentDataToDelete": { "message": "No content data to delete." }, "noContentDataToDelete": { "message": "No hay datos de contenido que borrar." },
"contentDataDeleted": { "message": "Content data deleted from IndexedDB." }, "contentDataDeleted": { "message": "Datos de contenido borrados de IndexedDB." },
"errorDeletingData": { "message": "Error deleting data: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorDeletingData": { "message": "Error al borrar datos: $message$", "placeholders": { "message": { "content": "$1" } } },
"aceEditorNotAvailable": { "message": "Text editor not available." }, "aceEditorNotAvailable": { "message": "Editor de texto no disponible." },
"errorLoadingTokens": { "message": "Error loading tokens to editor." }, "errorLoadingTokens": { "message": "Error al cargar tokens para editar." },
"errorLoadingTokensMessage": { "message": "Error loading tokens: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorLoadingTokensMessage": { "message": "Error al cargar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
"aceEditorNotAvailableToSave": { "message": "Editor not available for saving." }, "aceEditorNotAvailableToSave": { "message": "Editor no disponible para guardar." },
"invalidJsonFormat": { "message": "Invalid JSON format. Must be { \"tokens\": [...] }" }, "invalidJsonFormat": { "message": "Formato JSON inválido. Debe ser { \"tokens\": [...] }" },
"tokensSaved": { "message": "Tokens saved successfully." }, "tokensSaved": { "message": "Tokens guardados correctamente." },
"errorSavingTokens": { "message": "Error saving tokens: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorSavingTokens": { "message": "Error al guardar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
"dbNotAvailable": { "message": "IndexedDB is not available." }, "dbNotAvailable": { "message": "IndexedDB no está disponible." },
"dbExported": { "message": "Database exported successfully." }, "dbExported": { "message": "Base de datos exportada con éxito." },
"errorExportingDb": { "message": "Error exporting database: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorExportingDb": { "message": "Error al exportar la base de datos: $message$", "placeholders": { "message": { "content": "$1" } } },
"invalidJsonFile": { "message": "The file does not contain a valid JSON object." }, "invalidJsonFile": { "message": "El archivo no contiene un objeto JSON válido." },
"noDataToImport": { "message": "The file does not contain data for the current DB sections." }, "noDataToImport": { "message": "El archivo no contiene datos para las secciones de la BD actual." },
"dbImported": { "message": "Database imported successfully." }, "dbImported": { "message": "Base de datos importada correctamente." },
"errorImportingDb": { "message": "Error importing database: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorImportingDb": { "message": "Error al importar la base de datos: $message$", "placeholders": { "message": { "content": "$1" } } },
"updatingView": { "message": "Updating view with new data..." }, "updatingView": { "message": "Actualizando la vista con los nuevos datos..." },
"confirmClearContent": { "message": "Are you sure you want to delete local content data (Movies, Series, Music, etc.)? Favorites and Settings will NOT be deleted." }, "confirmClearContent": { "message": "¿Estás seguro de que deseas borrar los datos de contenido locales (Películas, Series, Música, etc.)? Los Favoritos y Ajustes NO se borrarán." },
"trailerNotFound": { "message": "No trailer found for this title." }, "trailerNotFound": { "message": "No se encontró tráiler para este título." },
"confirmClearHistory": { "message": "Are you sure you want to delete your entire viewing history? This action cannot be undone." }, "confirmClearHistory": { "message": "¿Estás seguro de que deseas borrar todo tu historial de visualización? Esta acción no se puede deshacer." },
"historyCleared": { "message": "Viewing history cleared." }, "historyCleared": { "message": "Historial de visualización borrado." },
"historyItemDeleted": { "message": "Item deleted from history." }, "historyItemDeleted": { "message": "Elemento borrado del historial." },
"errorGeneratingScript": { "message": "First, generate a script to be able to copy it." }, "errorGeneratingScript": { "message": "Primero genera un script para poder copiarlo." },
"scriptCopied": { "message": "PHP script copied to clipboard." }, "scriptCopied": { "message": "Script PHP copiado al portapapeles." },
"errorCopyingScript": { "message": "Error copying script." }, "errorCopyingScript": { "message": "Error al copiar el script." },
"scriptGenerated": { "message": "PHP script generated." }, "scriptGenerated": { "message": "Script PHP generado." },
"errorLoadingAlbum": { "message": "Error loading album: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorLoadingAlbum": { "message": "Error al cargar álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
"noPhotoServerSelected": { "message": "Error: No photo server has been selected." }, "noPhotoServerSelected": { "message": "Error: No se ha seleccionado un servidor de fotos." },
"loadingGenres": { "message": "Loading genres..." }, "loadingGenres": { "message": "Cargando géneros..." },
"errorLoadingGenres": { "message": "Error loading" }, "errorLoadingGenres": { "message": "Error al cargar" },
"noContentFound": { "message": "No results found." }, "noContentFound": { "message": "No se encontraron resultados." },
"couldNotLoadContent": { "message": "Could not load content." }, "couldNotLoadContent": { "message": "No se pudo cargar el contenido." },
"noFavorites": { "message": "You don't have any favorites yet." }, "noFavorites": { "message": "Aún no tienes favoritos." },
"errorLoadingFavorites": { "message": "Error loading favorites." }, "errorLoadingFavorites": { "message": "Error al cargar favoritos." },
"historyEmpty": { "message": "Your history is empty." }, "historyEmpty": { "message": "Tu historial está vacío." },
"historyEmptySub": { "message": "Browse and watch content for it to appear here." }, "historyEmptySub": { "message": "Explora y mira contenido para que aparezca aquí." },
"errorGeneratingRecommendations": { "message": "Error generating recommendations." }, "errorGeneratingRecommendations": { "message": "Error al generar recomendaciones." },
"noRecommendations": { "message": "We need to know you better to give you recommendations!" }, "noRecommendations": { "message": "¡Necesitamos conocerte mejor para darte recomendaciones!" },
"errorGeneratingStats": { "message": "Error generating statistics." }, "errorGeneratingStats": { "message": "Error al generar estadísticas." },
"noServersForToken": { "message": "No associated servers found for this token." }, "noServersForToken": { "message": "No se encontraron servidores asociados para este token." },
"searchingActorContent": { "message": "Searching for content from $actorName$", "placeholders": { "actorName": { "content": "$1" } } }, "searchingActorContent": { "message": "Buscando contenido de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
"errorLoadingActorContent": { "message": "Could not load content for $actorName$.", "placeholders": { "actorName": { "content": "$1" } } }, "errorLoadingActorContent": { "message": "No se pudo cargar el contenido para $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
"errorAddingStream": { "message": "Error adding stream(s): $message$", "placeholders": { "message": { "content": "$1" } } }, "errorAddingStream": { "message": "Error al añadir stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
"phpUrlNotConfigured": { "message": "The PHP server URL is not configured. Please set it up in Settings." }, "phpUrlNotConfigured": { "message": "La URL del servidor PHP no está configurada. Por favor, configúrala en Ajustes." },
"searchingStreams": { "message": "Searching for streams for \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "searchingStreams": { "message": "Buscando streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"sendingStreams": { "message": "Sending $count$ stream(s) to the server...", "placeholders": { "count": { "content": "$1" } } }, "sendingStreams": { "message": "Enviando $count$ stream(s) al servidor...", "placeholders": { "count": { "content": "$1" } } },
"streamAddedSuccess": { "message": "Stream(s) added successfully." }, "streamAddedSuccess": { "message": "Stream(s) añadido(s) con éxito." },
"generatingM3U": { "message": "Generating M3U for \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "generatingM3U": { "message": "Generando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"m3uDownloaded": { "message": "M3U for \"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } }, "m3uDownloaded": { "message": "M3U para \"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
"errorGeneratingM3U": { "message": "Error generating M3U: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorGeneratingM3U": { "message": "Error al generar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
"settingsSavedSuccess": { "message": "Settings saved successfully." }, "settingsSavedSuccess": { "message": "Ajustes guardados correctamente." },
"errorSavingSettings": { "message": "Error saving settings to the database." }, "errorSavingSettings": { "message": "Error al guardar los ajustes en la base de datos." },
"languageChangeReload": { "message": "Language changed. The application will now reload." }, "languageChangeReload": { "message": "Idioma cambiado. La aplicación se recargará ahora." },
"addedToFavorites": { "message": "Added to favorites." }, "addedToFavorites": { "message": "Añadido a favoritos." },
"removedFromFavorites": { "message": "Removed from favorites." }, "removedFromFavorites": { "message": "Eliminado de favoritos." },
"plexScanInProgress": { "message": "Plex scan is already in progress." }, "plexScanInProgress": { "message": "El escaneo Plex ya está en curso." },
"plexScanStarting": { "message": "Starting Plex scan..." }, "plexScanStarting": { "message": "Iniciando escaneo Plex..." },
"noPlexTokens": { "message": "No Plex tokens configured." }, "noPlexTokens": { "message": "No hay tokens de Plex configurados." },
"clearingSections": { "message": "Clearing sections: $sections$", "placeholders": { "sections": { "content": "$1" } } }, "clearingSections": { "message": "Limpiando secciones: $sections$", "placeholders": { "sections": { "content": "$1" } } },
"sectionsCleared": { "message": "Sections cleared." }, "sectionsCleared": { "message": "Secciones limpiadas." },
"tokenFoundServers": { "message": "Token $token$... found $count$ servers.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } }, "tokenFoundServers": { "message": "Token $token$... encontró $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
"errorProcessingToken": { "message": "Error processing token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } }, "errorProcessingToken": { "message": "Error procesando token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
"initialScanPhaseComplete": { "message": "Initial scan phase completed." }, "initialScanPhaseComplete": { "message": "Fase de escaneo inicial finalizada." },
"retryPhaseFinished": { "message": "Retry phase finished." }, "retryPhaseFinished": { "message": "Fase de reintentos finalizada." },
"plexScanFinished": { "message": "Plex scan finished. Updating content..." }, "plexScanFinished": { "message": "Escaneo finalizado. Actualizando contenido..." },
"plexScanFatalError": { "message": "FATAL ERROR: $message$", "placeholders": { "message": { "content": "$1" } } }, "plexScanFatalError": { "message": "ERROR FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
"errorDuringScan": { "message": "Error during scan: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } },
"scanCancelled": { "message": "Scan cancelled by user." }, "scanCancelled": { "message": "Escaneo cancelado por el usuario." },
"scanCancelledInfo": { "message": "Scan cancelled." }, "scanCancelledInfo": { "message": "Escaneo cancelado." },
"retyingSection": { "message": "Retrying section \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "retyingSection": { "message": "Reintentando sección \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"retrySuccess": { "message": "[SUCCESS] Retry of \"$title$\" completed.", "placeholders": { "title": { "content": "$1" } } }, "retrySuccess": { "message": "[ÉXITO] Reintento de \"$title$\" completado.", "placeholders": { "title": { "content": "$1" } } },
"retryError": { "message": "[FINAL ERROR] Retry failed for \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } }, "retryError": { "message": "[ERROR FINAL] Falló el reintento para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
"noRetriesPending": { "message": "No pending retries." }, "noRetriesPending": { "message": "No hay reintentos pendientes." },
"startingRetryPhase": { "message": "Starting retry phase for $count$ sections...", "placeholders": { "count": { "content": "$1" } } }, "startingRetryPhase": { "message": "Iniciando fase de reintentos para $count$ secciones...", "placeholders": { "count": { "content": "$1" } } },
"retryPhaseCancelled": { "message": "Retry phase cancelled." }, "retryPhaseCancelled": { "message": "Fase de reintentos cancelada." },
"errorInitializingMusicPlayer": { "message": "Error initializing music player." }, "errorInitializingMusicPlayer": { "message": "Error inicializando el reproductor de música." },
"criticalErrorLoadingMusic": { "message": "Critical error loading music data." }, "criticalErrorLoadingMusic": { "message": "Error crítico al cargar datos de música." },
"errorLoadingArtists": { "message": "Error loading artists." }, "errorLoadingArtists": { "message": "Error al cargar artistas." },
"dbUnavailableError": { "message": "Error: Database not available." }, "dbUnavailableError": { "message": "Error: Base de datos no disponible." },
"updatingMusicData": { "message": "Updating music data..." }, "updatingMusicData": { "message": "Actualizando datos de música..." },
"musicDataUpdated": { "message": "Music data updated." }, "musicDataUpdated": { "message": "Datos de música actualizados." },
"errorFetchingArtistSongs": { "message": "Error getting artist's songs." }, "errorFetchingArtistSongs": { "message": "Error al obtener las canciones del artista." },
"errorLoadingSongs": { "message": "Error loading songs." }, "errorLoadingSongs": { "message": "Error cargando canciones." },
"noArtistsFound": { "message": "No artists found." }, "noArtistsFound": { "message": "No se encontraron artistas." },
"artistsCounter": { "message": "$start$-$end$ of $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } }, "artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
"artistsCounterSingle": { "message": "$total$ Artists", "placeholders": { "total": { "content": "$1" } } }, "artistsCounterSingle": { "message": "$total$ Artistas", "placeholders": { "total": { "content": "$1" } } },
"artistsCounterLoading": { "message": "Loading..." }, "artistsCounterLoading": { "message": "Cargando..." },
"noSongsFound": { "message": "No songs found." }, "noSongsFound": { "message": "No se encontraron canciones." },
"shuffleOn": { "message": "Shuffle mode enabled." }, "shuffleOn": { "message": "Modo aleatorio activado." },
"shuffleOff": { "message": "Shuffle mode disabled." }, "shuffleOff": { "message": "Modo aleatorio desactivado." },
"downloadingSong": { "message": "Starting download of \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "downloadingSong": { "message": "Iniciando descarga de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"songDownloaded": { "message": "\"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } }, "songDownloaded": { "message": "\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
"errorDownloadingSong": { "message": "Error downloading \"$title$\"", "placeholders": { "title": { "content": "$1" } } }, "errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"generatingAlbumM3U": { "message": "Generating M3U for \"$artist$\"...", "placeholders": { "artist": { "content": "$1" } } }, "generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
"albumM3UGenerated": { "message": "M3U for album \"$artist$\" generated.", "placeholders": { "artist": { "content": "$1" } } }, "albumM3UGenerated": { "message": "M3U para el álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } },
"playbackError": { "message": "Playback error" }, "playbackError": { "message": "Error de reproducción" },
"errorLabel": { "message": "Error" }, "errorLabel": { "message": "Error" },
"reloadingPage": { "message": "Reloading page..." }, "reloadingPage": { "message": "Recargando la página..." },
"viewed": { "message": "Viewed" }, "viewed": { "message": "Visto" },
"local": { "message": "Local" }, "local": { "message": "Local" },
"topRatedSort": {"message": "Top Rated"}, "topRatedSort": {"message": "Mejor Valoradas"},
"recentSort": {"message": "Recent"}, "recentSort": {"message": "Recientes"},
"popularSort": {"message": "Popular"}, "popularSort": {"message": "Populares"},
"moviesSectionTitle": {"message": "Movies"}, "moviesSectionTitle": {"message": "Películas"},
"seriesSectionTitle": {"message": "Series"}, "seriesSectionTitle": {"message": "Series"},
"searchResultsFor": {"message": "Results for \"$query$\"", "placeholders": {"query": {"content": "$1"}}}, "searchResultsFor": {"message": "Resultados para \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
"contentFrom": {"message": "Content from $actor$", "placeholders": {"actor": {"content": "$1"}}}, "contentFrom": {"message": "Contenido de $actor$", "placeholders": {"actor": {"content": "$1"}}},
"explore": {"message": "Explore"}, "explore": {"message": "Explorar"},
"noGenre": {"message": "Uncategorized"}, "noGenre": {"message": "Sin categoría"},
"synopsis": {"message": "Synopsis"}, "synopsis": {"message": "Sinopsis"},
"noSynopsis": {"message": "No synopsis available."}, "noSynopsis": {"message": "No hay sinopsis disponible."},
"director": {"message": "Director:"}, "director": {"message": "Director:"},
"writer": {"message": "Writer:"}, "writer": {"message": "Escritor:"},
"viewOnImdb": {"message": "View on IMDb"}, "viewOnImdb": {"message": "Ver en IMDb"},
"watchTrailer": {"message": "Watch Trailer"}, "watchTrailer": {"message": "Ver Tráiler"},
"addToFavorites": {"message": "Favorite"}, "addToFavorites": {"message": "Añadir a favoritos"},
"removeFromFavorites": {"message": "Unfavorite"}, "removeFromFavorites": {"message": "Quitar de favoritos"},
"notAvailable": {"message": "Not Available"}, "notAvailable": {"message": "No disponible"},
"mainCast": {"message": "Main Cast"}, "mainCast": {"message": "Reparto Principal"},
"seasonsAndEpisodes": {"message": "Seasons & Episodes"}, "seasonsAndEpisodes": {"message": "Temporadas y Episodios"},
"similarContent": {"message": "Similar Content"}, "similarContent": {"message": "Contenido Similar"},
"episodesCount": {"message": "$count$ Episodes", "placeholders": {"count": {"content": "$1"}}}, "episodesCount": {"message": "$count$ Episodios", "placeholders": {"count": {"content": "$1"}}},
"seasonsCount": {"message": "$count$ Seasons", "placeholders": {"count": {"content": "$1"}}}, "seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}},
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}}, "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
"noTrailerFound": {"message": "No trailer was found for this title."}, "noTrailerFound": {"message": "No se encontró tráiler para este título."},
"fatalInitError": {"message": "Fatal Initialization Error"}, "fatalInitError": {"message": "Error fatal de inicialización"},
"fatalInitErrorSub": {"message": "The application could not be loaded."}, "fatalInitErrorSub": {"message": "No se pudo cargar la aplicación."},
"invalidStreamInfo": {"message": "Invalid information."}, "invalidStreamInfo": {"message": "Información inválida."},
"dbUnavailableForStreams": {"message": "Local database not available."}, "dbUnavailableForStreams": {"message": "Base de datos local no disponible."},
"noPlexServersForStreams": {"message": "No Plex servers."}, "noPlexServersForStreams": {"message": "No hay servidores Plex."},
"notFoundOnServers": {"message": "\"$query$\" not found on servers.", "placeholders": {"query": {"content": "$1"}}}, "notFoundOnServers": {"message": "No se encontró \"$query$\" en los servidores.", "placeholders": {"query": {"content": "$1"}}},
"relativeTime_justNow": { "message": "Just now" }, "relativeTime_justNow": { "message": "Ahora mismo" },
"relativeTime_minutesAgo": { "message": "$count$ minutes ago", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_minutesAgo": { "message": "Hace $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
"relativeTime_hoursAgo": { "message": "$count$ hours ago", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_hoursAgo": { "message": "Hace $count$ horas", "placeholders": { "count": { "content": "$1" } } },
"relativeTime_yesterday": { "message": "Yesterday" }, "relativeTime_yesterday": { "message": "Ayer" },
"relativeTime_daysAgo": { "message": "$count$ days ago", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_daysAgo": { "message": "Hace $count$ días", "placeholders": { "count": { "content": "$1" } } },
"errorLoadingDetails": { "message": "Error Loading Details" }, "errorLoadingDetails": { "message": "Error al Cargar los Detalles" },
"errorLoadingLocalContent": { "message": "Error loading local content." }, "errorLoadingLocalContent": { "message": "Error al cargar el contenido local." },
"errorServerResponse": { "message": "Unsuccessful response from server." }, "errorServerResponse": { "message": "Respuesta no exitosa del servidor." },
"errorPlexApi": { "message": "Error $status$ from Plex API.", "placeholders": { "status": { "content": "$1" } } }, "errorPlexApi": { "message": "Error $status$ de la API de Plex.", "placeholders": { "status": { "content": "$1" } } },
"errorParsingPlexXml": { "message": "Error parsing Plex XML." }, "errorParsingPlexXml": { "message": "Error al analizar el XML de Plex." },
"untitled": { "message": "Untitled" }, "untitled": { "message": "Sin título" },
"itemCount": { "message": "$count$ items", "placeholders": { "count": { "content": "$1" } } }, "itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
"noPhotoServers": { "message": "No photo servers" } "noPhotoServers": { "message": "No hay servidores de fotos" }
} }

View File

@ -18,7 +18,7 @@
"heroWelcome": { "message": "Bienvenido a CinePlex" }, "heroWelcome": { "message": "Bienvenido a CinePlex" },
"heroSubtitle": { "message": "Explora miles de películas y series." }, "heroSubtitle": { "message": "Explora miles de películas y series." },
"addStream": { "message": "Añadir Stream" }, "addStream": { "message": "Añadir Stream" },
"moreInfo": { "message": "Más info" }, "moreInfo": { "message": "Más información" },
"popularMovies": { "message": "Películas Populares" }, "popularMovies": { "message": "Películas Populares" },
"allGenres": { "message": "Todos los géneros" }, "allGenres": { "message": "Todos los géneros" },
"allYears": { "message": "Todos los años" }, "allYears": { "message": "Todos los años" },
@ -29,11 +29,11 @@
"photosBreadcrumbHome": { "message": "Álbumes" }, "photosBreadcrumbHome": { "message": "Álbumes" },
"selectServer": { "message": "Selecciona un servidor" }, "selectServer": { "message": "Selecciona un servidor" },
"loading": { "message": "Cargando..." }, "loading": { "message": "Cargando..." },
"photosEmptyState": { "message": "No se encontraron álbumes o fotos." }, "photosEmptyState": { "message": "No se encontraron álbumes ni fotos." },
"photosEmptyStateSub": { "message": "Por favor, selecciona un servidor o asegúrate de tener una librería de fotos en Plex." }, "photosEmptyStateSub": { "message": "Por favor, selecciona un servidor o asegúrate de tener una biblioteca de fotos en Plex." },
"statsTitle": { "message": "Estadísticas de la Librería" }, "statsTitle": { "message": "Estadísticas de la Biblioteca" },
"statsAllTokens": { "message": "Todos los Tokens" }, "statsAllTokens": { "message": "Todos los Tokens" },
"statsAnalyzing": { "message": "Analizando tu librería..." }, "statsAnalyzing": { "message": "Analizando tu biblioteca..." },
"statsActiveTokens": { "message": "Tokens Activos" }, "statsActiveTokens": { "message": "Tokens Activos" },
"statsServersFound": { "message": "Servidores Encontrados" }, "statsServersFound": { "message": "Servidores Encontrados" },
"statsUniqueMovies": { "message": "Películas Únicas" }, "statsUniqueMovies": { "message": "Películas Únicas" },
@ -62,13 +62,13 @@
"settingsTabData": { "message": "Datos" }, "settingsTabData": { "message": "Datos" },
"settingsApiServer": { "message": "Configuración de API y Servidor" }, "settingsApiServer": { "message": "Configuración de API y Servidor" },
"settingsTmdbApiLabel": { "message": "Clave de API de TMDB (Opcional)" }, "settingsTmdbApiLabel": { "message": "Clave de API de TMDB (Opcional)" },
"settingsTmdbApiPlaceholder": { "message": "Usará la clave por defecto si se deja en blanco" }, "settingsTmdbApiPlaceholder": { "message": "Se usará la clave por defecto si se deja en blanco" },
"settingsTmdbLangLabel": { "message": "Idioma para TMDB y UI" }, "settingsTmdbLangLabel": { "message": "Idioma para TMDB y la interfaz" },
"settingsPhpUrlLabel": { "message": "URL del Servidor para Añadir Streams" }, "settingsPhpUrlLabel": { "message": "URL del Servidor para Añadir Streams" },
"settingsPhpUrlPlaceholder": { "message": "https://tu-servidor.com/ruta/al/script.php" }, "settingsPhpUrlPlaceholder": { "message": "https://tu-servidor.com/ruta/al/script.php" },
"settingsInterface": { "message": "Interfaz" }, "settingsInterface": { "message": "Interfaz" },
"settingsLightTheme": { "message": "Modo Claro" }, "settingsLightTheme": { "message": "Modo Claro" },
"settingsShowHero": { "message": "Mostrar sección de bienvenida \"Hero\"" }, "settingsShowHero": { "message": "Mostrar sección de bienvenida 'Hero'" },
"settingsScanContent": { "message": "Escaneo de Contenido" }, "settingsScanContent": { "message": "Escaneo de Contenido" },
"settingsScanDesc": { "message": "Selecciona qué escanear y pulsa el botón." }, "settingsScanDesc": { "message": "Selecciona qué escanear y pulsa el botón." },
"settingsScanMovies": { "message": "Películas" }, "settingsScanMovies": { "message": "Películas" },
@ -82,7 +82,7 @@
"settingsSaveTokens": { "message": "Guardar Tokens" }, "settingsSaveTokens": { "message": "Guardar Tokens" },
"settingsPhpGenTitle": { "message": "Generador de Script PHP para el Servidor" }, "settingsPhpGenTitle": { "message": "Generador de Script PHP para el Servidor" },
"settingsPhpFileOptions": { "message": "Opciones del Archivo" }, "settingsPhpFileOptions": { "message": "Opciones del Archivo" },
"settingsPhpSavePathLabel": { "message": "Ruta de Guardado en Servidor" }, "settingsPhpSavePathLabel": { "message": "Ruta de Guardado en el Servidor" },
"settingsPhpSavePathPlaceholder": { "message": "Ej: /var/www/html/listas (en blanco para la misma carpeta)" }, "settingsPhpSavePathPlaceholder": { "message": "Ej: /var/www/html/listas (en blanco para la misma carpeta)" },
"settingsPhpFilenameLabel": { "message": "Nombre del Archivo" }, "settingsPhpFilenameLabel": { "message": "Nombre del Archivo" },
"settingsPhpFileAction": { "message": "Acción sobre el Archivo" }, "settingsPhpFileAction": { "message": "Acción sobre el Archivo" },
@ -99,10 +99,10 @@
"settingsImportDb": { "message": "Importar BD desde Archivo" }, "settingsImportDb": { "message": "Importar BD desde Archivo" },
"settingsExportDb": { "message": "Exportar BD a Archivo" }, "settingsExportDb": { "message": "Exportar BD a Archivo" },
"settingsClearContent": { "message": "Borrar Datos de Contenido Local" }, "settingsClearContent": { "message": "Borrar Datos de Contenido Local" },
"settingsClearContentDesc": { "message": "Esta acción borrará películas, series y música de la base de datos local, pero no afectará a tus favoritos o ajustes." }, "settingsClearContentDesc": { "message": "Esta acción borrará películas, series y música de la base de datos local, pero no afectará a tus favoritos ni a tus ajustes." },
"settingsClose": { "message": "Cerrar" }, "settingsClose": { "message": "Cerrar" },
"settingsSave": { "message": "Guardar Ajustes" }, "settingsSave": { "message": "Guardar Ajustes" },
"musicSidenavTitle": { "message": "Plex Música" }, "musicSidenavTitle": { "message": "Música de Plex" },
"musicAllServers": { "message": "Todos los Servidores" }, "musicAllServers": { "message": "Todos los Servidores" },
"musicSearchArtistPlaceholder": { "message": "Buscar artista..." }, "musicSearchArtistPlaceholder": { "message": "Buscar artista..." },
"musicSearchDiscographyPlaceholder": { "message": "Buscar en la discografía..." }, "musicSearchDiscographyPlaceholder": { "message": "Buscar en la discografía..." },
@ -116,14 +116,14 @@
"miniplayerEqualizer": { "message": "Ecualizador" }, "miniplayerEqualizer": { "message": "Ecualizador" },
"miniplayerOpenList": { "message": "Abrir lista" }, "miniplayerOpenList": { "message": "Abrir lista" },
"eqTitle": { "message": "Ecualizador Gráfico" }, "eqTitle": { "message": "Ecualizador Gráfico" },
"eqPresetsLabel": { "message": "Presets" }, "eqPresetsLabel": { "message": "Preajustes" },
"eqPresetFlat": { "message": "Plano (Flat)" }, "eqPresetFlat": { "message": "Plano" },
"eqPresetRock": { "message": "Rock" }, "eqPresetRock": { "message": "Rock" },
"eqPresetPop": { "message": "Pop" }, "eqPresetPop": { "message": "Pop" },
"eqPresetJazz": { "message": "Jazz" }, "eqPresetJazz": { "message": "Jazz" },
"eqPresetClassical": { "message": "Clásico" }, "eqPresetClassical": { "message": "Clásica" },
"eqPresetBassBoost": { "message": "Refuerzo de Graves" }, "eqPresetBassBoost": { "message": "Refuerzo de Graves" },
"eqPreampLabel": { "message": "Pre-Amp" }, "eqPreampLabel": { "message": "Preamplificador" },
"infoModalTitle": { "message": "Información" }, "infoModalTitle": { "message": "Información" },
"infoModalFieldTitle": { "message": "Título:" }, "infoModalFieldTitle": { "message": "Título:" },
"infoModalFieldArtist": { "message": "Artista:" }, "infoModalFieldArtist": { "message": "Artista:" },
@ -187,10 +187,10 @@
"errorLoadingActorContent": { "message": "No se pudo cargar el contenido para $actorName$.", "placeholders": { "actorName": { "content": "$1" } } }, "errorLoadingActorContent": { "message": "No se pudo cargar el contenido para $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
"errorAddingStream": { "message": "Error al añadir stream(s): $message$", "placeholders": { "message": { "content": "$1" } } }, "errorAddingStream": { "message": "Error al añadir stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
"phpUrlNotConfigured": { "message": "La URL del servidor PHP no está configurada. Por favor, configúrala en Ajustes." }, "phpUrlNotConfigured": { "message": "La URL del servidor PHP no está configurada. Por favor, configúrala en Ajustes." },
"searchingStreams": { "message": "Buscando streams para \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "searchingStreams": { "message": "Buscando streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"sendingStreams": { "message": "Enviando $count$ stream(s) al servidor...", "placeholders": { "count": { "content": "$1" } } }, "sendingStreams": { "message": "Enviando $count$ stream(s) al servidor...", "placeholders": { "count": { "content": "$1" } } },
"streamAddedSuccess": { "message": "Stream(s) añadido(s) con éxito." }, "streamAddedSuccess": { "message": "Stream(s) añadido(s) con éxito." },
"generatingM3U": { "message": "Generando M3U para \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "generatingM3U": { "message": "Generando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"m3uDownloaded": { "message": "M3U para \"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } }, "m3uDownloaded": { "message": "M3U para \"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
"errorGeneratingM3U": { "message": "Error al generar M3U: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorGeneratingM3U": { "message": "Error al generar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
"settingsSavedSuccess": { "message": "Ajustes guardados correctamente." }, "settingsSavedSuccess": { "message": "Ajustes guardados correctamente." },
@ -212,7 +212,7 @@
"errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } }, "errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } },
"scanCancelled": { "message": "Escaneo cancelado por el usuario." }, "scanCancelled": { "message": "Escaneo cancelado por el usuario." },
"scanCancelledInfo": { "message": "Escaneo cancelado." }, "scanCancelledInfo": { "message": "Escaneo cancelado." },
"retyingSection": { "message": "Reintentando sección \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "retyingSection": { "message": "Reintentando sección \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"retrySuccess": { "message": "[ÉXITO] Reintento de \"$title$\" completado.", "placeholders": { "title": { "content": "$1" } } }, "retrySuccess": { "message": "[ÉXITO] Reintento de \"$title$\" completado.", "placeholders": { "title": { "content": "$1" } } },
"retryError": { "message": "[ERROR FINAL] Falló el reintento para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } }, "retryError": { "message": "[ERROR FINAL] Falló el reintento para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
"noRetriesPending": { "message": "No hay reintentos pendientes." }, "noRetriesPending": { "message": "No hay reintentos pendientes." },
@ -224,7 +224,7 @@
"dbUnavailableError": { "message": "Error: Base de datos no disponible." }, "dbUnavailableError": { "message": "Error: Base de datos no disponible." },
"updatingMusicData": { "message": "Actualizando datos de música..." }, "updatingMusicData": { "message": "Actualizando datos de música..." },
"musicDataUpdated": { "message": "Datos de música actualizados." }, "musicDataUpdated": { "message": "Datos de música actualizados." },
"errorFetchingArtistSongs": { "message": "Error al obtener canciones del artista." }, "errorFetchingArtistSongs": { "message": "Error al obtener las canciones del artista." },
"errorLoadingSongs": { "message": "Error cargando canciones." }, "errorLoadingSongs": { "message": "Error cargando canciones." },
"noArtistsFound": { "message": "No se encontraron artistas." }, "noArtistsFound": { "message": "No se encontraron artistas." },
"artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } }, "artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
@ -233,11 +233,11 @@
"noSongsFound": { "message": "No se encontraron canciones." }, "noSongsFound": { "message": "No se encontraron canciones." },
"shuffleOn": { "message": "Modo aleatorio activado." }, "shuffleOn": { "message": "Modo aleatorio activado." },
"shuffleOff": { "message": "Modo aleatorio desactivado." }, "shuffleOff": { "message": "Modo aleatorio desactivado." },
"downloadingSong": { "message": "Iniciando descarga de \"$title$\"...", "placeholders": { "title": { "content": "$1" } } }, "downloadingSong": { "message": "Iniciando descarga de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"songDownloaded": { "message": "\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } }, "songDownloaded": { "message": "\"\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
"errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } }, "errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
"generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"...", "placeholders": { "artist": { "content": "$1" } } }, "generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
"albumM3UGenerated": { "message": "M3U del álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } }, "albumM3UGenerated": { "message": "M3U para el álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } },
"playbackError": { "message": "Error de reproducción" }, "playbackError": { "message": "Error de reproducción" },
"errorLabel": { "message": "Error" }, "errorLabel": { "message": "Error" },
"reloadingPage": { "message": "Recargando la página..." }, "reloadingPage": { "message": "Recargando la página..." },
@ -251,15 +251,15 @@
"searchResultsFor": {"message": "Resultados para \"$query$\"", "placeholders": {"query": {"content": "$1"}}}, "searchResultsFor": {"message": "Resultados para \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
"contentFrom": {"message": "Contenido de $actor$", "placeholders": {"actor": {"content": "$1"}}}, "contentFrom": {"message": "Contenido de $actor$", "placeholders": {"actor": {"content": "$1"}}},
"explore": {"message": "Explorar"}, "explore": {"message": "Explorar"},
"noGenre": {"message": "Sin Género"}, "noGenre": {"message": "Sin categoría"},
"synopsis": {"message": "Sinopsis"}, "synopsis": {"message": "Sinopsis"},
"noSynopsis": {"message": "No hay sinopsis disponible."}, "noSynopsis": {"message": "No hay sinopsis disponible."},
"director": {"message": "Director:"}, "director": {"message": "Director:"},
"writer": {"message": "Escritor:"}, "writer": {"message": "Escritor:"},
"viewOnImdb": {"message": "Ver en IMDb"}, "viewOnImdb": {"message": "Ver en IMDb"},
"watchTrailer": {"message": "Ver Tráiler"}, "watchTrailer": {"message": "Ver Tráiler"},
"addToFavorites": {"message": "Favorito"}, "addToFavorites": {"message": "Añadir a favoritos"},
"removeFromFavorites": {"message": "Quitar Fav."}, "removeFromFavorites": {"message": "Quitar de favoritos"},
"notAvailable": {"message": "No disponible"}, "notAvailable": {"message": "No disponible"},
"mainCast": {"message": "Reparto Principal"}, "mainCast": {"message": "Reparto Principal"},
"seasonsAndEpisodes": {"message": "Temporadas y Episodios"}, "seasonsAndEpisodes": {"message": "Temporadas y Episodios"},
@ -268,22 +268,22 @@
"seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}}, "seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}},
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}}, "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
"noTrailerFound": {"message": "No se encontró tráiler para este título."}, "noTrailerFound": {"message": "No se encontró tráiler para este título."},
"fatalInitError": {"message": "Error de Inicialización"}, "fatalInitError": {"message": "Error fatal de inicialización"},
"fatalInitErrorSub": {"message": "No se pudo cargar la aplicación."}, "fatalInitErrorSub": {"message": "No se pudo cargar la aplicación."},
"invalidStreamInfo": {"message": "Información inválida."}, "invalidStreamInfo": {"message": "Información inválida."},
"dbUnavailableForStreams": {"message": "Base de datos local no disponible."}, "dbUnavailableForStreams": {"message": "Base de datos local no disponible."},
"noPlexServersForStreams": {"message": "No hay servidores Plex."}, "noPlexServersForStreams": {"message": "No hay servidores Plex."},
"notFoundOnServers": {"message": "No se encontró \"$query$\" en los servidores.", "placeholders": {"query": {"content": "$1"}}}, "notFoundOnServers": {"message": "No se encontró \"$query$\" en los servidores.", "placeholders": {"query": {"content": "$1"}}},
"relativeTime_justNow": { "message": "Hace un momento" }, "relativeTime_justNow": { "message": "Ahora mismo" },
"relativeTime_minutesAgo": { "message": "Hace $count$ minutos", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_minutesAgo": { "message": "Hace $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
"relativeTime_hoursAgo": { "message": "Hace $count$ horas", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_hoursAgo": { "message": "Hace $count$ horas", "placeholders": { "count": { "content": "$1" } } },
"relativeTime_yesterday": { "message": "Ayer" }, "relativeTime_yesterday": { "message": "Ayer" },
"relativeTime_daysAgo": { "message": "Hace $count$ días", "placeholders": { "count": { "content": "$1" } } }, "relativeTime_daysAgo": { "message": "Hace $count$ días", "placeholders": { "count": { "content": "$1" } } },
"errorLoadingDetails": { "message": "Error al Cargar Detalles" }, "errorLoadingDetails": { "message": "Error al Cargar los Detalles" },
"errorLoadingLocalContent": { "message": "Error al cargar contenido local." }, "errorLoadingLocalContent": { "message": "Error al cargar el contenido local." },
"errorServerResponse": { "message": "Respuesta no exitosa del servidor." }, "errorServerResponse": { "message": "Respuesta no exitosa del servidor." },
"errorPlexApi": { "message": "Error $status$ de la API de Plex.", "placeholders": { "status": { "content": "$1" } } }, "errorPlexApi": { "message": "Error $status$ de la API de Plex.", "placeholders": { "status": { "content": "$1" } } },
"errorParsingPlexXml": { "message": "Error al parsear XML de Plex." }, "errorParsingPlexXml": { "message": "Error al analizar el XML de Plex." },
"untitled": { "message": "Sin título" }, "untitled": { "message": "Sin título" },
"itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } }, "itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
"noPhotoServers": { "message": "No hay servidores de fotos" } "noPhotoServers": { "message": "No hay servidores de fotos" }

View File

@ -7,7 +7,7 @@ let charts = {};
export async function loadInitialContent() { export async function loadInitialContent() {
await Promise.all([loadGenres(), loadYears()]); await Promise.all([loadGenres(), loadYears()]);
await Promise.all([loadContent(), initializeHeroSection()]); resetView(); // Show hero-only view first
setupScrollEffects(); setupScrollEffects();
} }
@ -41,12 +41,34 @@ export async function loadLocalContent() {
} }
export function resetView() { export function resetView() {
switchView('movies'); if (state.isLoading) return;
const heroSection = document.getElementById('hero-section');
if (heroSection) {
heroSection.style.display = 'flex';
if (state.settings.showHero) {
initializeHeroSection();
}
}
const contentSection = document.getElementById('content-section');
if (contentSection) {
contentSection.style.display = 'none';
}
state.currentView = 'home';
updateActiveNav('home');
updateSectionTitle();
} }
export function switchView(viewType) { export function switchView(viewType) {
if (state.isLoading) return; if (state.isLoading) return;
const heroSection = document.getElementById('hero-section');
if (heroSection) {
heroSection.style.display = 'none';
}
const sidebar = document.getElementById('sidebar-nav'); const sidebar = document.getElementById('sidebar-nav');
if (sidebar.classList.contains('open')) { if (sidebar.classList.contains('open')) {
sidebar.classList.remove('open'); sidebar.classList.remove('open');
@ -148,6 +170,7 @@ export function switchView(viewType) {
function updateActiveNav(activeView) { function updateActiveNav(activeView) {
document.querySelectorAll('.nav-link, .footer-link').forEach(link => link.classList.remove('active')); document.querySelectorAll('.nav-link, .footer-link').forEach(link => link.classList.remove('active'));
if (activeView === 'home') return;
let navId = (activeView === 'search') ? (state.currentParams.contentType === 'movie' ? 'movies' : 'series') : activeView; let navId = (activeView === 'search') ? (state.currentParams.contentType === 'movie' ? 'movies' : 'series') : activeView;
const activeLink = document.getElementById(`nav-${navId}`); const activeLink = document.getElementById(`nav-${navId}`);
const activeFooterLink = document.getElementById(`footer-${navId}`); const activeFooterLink = document.getElementById(`footer-${navId}`);
@ -160,6 +183,9 @@ export function updateSectionTitle() {
const mainTitleElement = document.getElementById('main-section-title'); const mainTitleElement = document.getElementById('main-section-title');
switch (state.currentView) { switch (state.currentView) {
case 'home':
title = _('explore');
break;
case 'movies': case 'series': case 'movies': case 'series':
const sortMap = { const sortMap = {
'popularity.desc': _('popularSort'), 'popularity.desc': _('popularSort'),