{
    "appName": { "message": "CinePlex" },
    "appDescription": { "message": "Escanea servidores de Plex para encontrar contenido y lo muestra en la interfaz" },
    "appTagline": { "message": "Películas, Series y Música" },
    "appLocaleCode": { "message": "es-ES" },
    "toggleNavigation": { "message": "Alternar Navegación" },
    "searchPlaceholder": { "message": "Buscar películas o series..." },
    "openMusicPlayer": { "message": "Abrir Reproductor de Música" },
    "settings": { "message": "Ajustes" },
    "navMovies": { "message": "Películas" },
    "navSeries": { "message": "Series" },
    "navProviders": { "message": "Proveedores" },
    "navPhotos": { "message": "Fotos" },
    "navStats": { "message": "Estadísticas" },
    "navFavorites": { "message": "Favoritos" },
    "navHistory": { "message": "Historial" },
    "navRecommendations": { "message": "Recomendaciones" },
    "navMusic": { "message": "Música" },
    "heroWelcome": { "message": "" },
    "heroSubtitle": { "message": "Explora miles de películas y series." },
    "addStream": { "message": "Añadir Stream" },
    "moreInfo": { "message": "Más información" },
    "popularMovies": { "message": "Películas Populares" },
    "allGenres": { "message": "Todos los géneros" },
    "allYears": { "message": "Todos los años" },
    "sortPopular": { "message": "Más populares" },
    "sortTopRated": { "message": "Mejor valoradas" },
    "sortRecent": { "message": "Más recientes" },
    "loadMore": { "message": "Cargar más" },
    "photosBreadcrumbHome": { "message": "Álbumes" },
    "selectServer": { "message": "Selecciona un servidor" },
    "loading": { "message": "Cargando..." },
    "loadingLibraries": { "message": "Cargando bibliotecas..." },
    "photosEmptyState": { "message": "No se encontraron álbumes ni fotos." },
    "photosEmptyStateSub": { "message": "Por favor, selecciona un servidor o asegúrate de tener una biblioteca de fotos en Plex." },
    "statsTitle": { "message": "Estadísticas de la Biblioteca" },
    "statsAllTokens": { "message": "Todos los Tokens" },
    "statsAnalyzing": { "message": "Analizando tu biblioteca..." },
    "statsActiveTokens": { "message": "Tokens Activos" },
    "statsServersFound": { "message": "Servidores Encontrados" },
    "statsUniqueMovies": { "message": "Películas Únicas" },
    "statsUniqueSeries": { "message": "Series Únicas" },
    "statsUniqueArtists": { "message": "Artistas Únicos" },
    "statsTokenServers": { "message": "Servidores del Token" },
    "statsChartMoviesByGenre": { "message": "Contenido por Género (Películas)" },
    "statsChartSeriesByGenre": { "message": "Contenido por Género (Series)" },
    "statsChartByDecade": { "message": "Contenido por Década" },
    "recommendationsTitle": { "message": "Recomendaciones para ti" },
    "historyTitle": { "message": "Historial de Visualización" },
    "clearHistory": { "message": "Borrar Todo" },
    "consoleTitle": { "message": "Consola de Escaneo Plex" },
    "footerCredit": { "message": "Una interfaz para tu universo Plex." },
    "backButton": { "message": "Atrás" },
    "closeTrailer": { "message": "Cerrar tráiler" },
    "close": { "message": "Cerrar" },
    "photoViewer": { "message": "Visor de fotos" },
    "previous": { "message": "Anterior" },
    "next": { "message": "Siguiente" },
    "notificationTemplateText": { "message": "Notificación" },
    "settingsTitleFull": { "message": "Ajustes y Configuración" },
    "settingsTabGeneral": { "message": "General" },
    "settingsTabPlex": { "message": "Plex" },
    "settingsTabJellyfin": { "message": "Jellyfin" },
    "settingsTabPhpGen": { "message": "Generador PHP" },
    "settingsTabData": { "message": "Datos" },
    "settingsApiServer": { "message": "Configuración de API y Servidor" },
    "settingsTmdbApiLabel": { "message": "Clave de API de TMDB (Opcional)" },
    "settingsTmdbApiPlaceholder": { "message": "Se usará la clave por defecto si se deja en blanco" },
    "openaiApiKey": { "message": "Clave API de OpenAI" },
    "settingsTmdbLangLabel": { "message": "Idioma para TMDB y la interfaz" },
    "settingsPhpUrlLabel": { "message": "URL del Servidor para Añadir Streams" },
    "settingsPhpUrlPlaceholder": { "message": "https://tu-servidor.com/ruta/al/script.php" },
    "settingsInterface": { "message": "Interfaz" },
    "settingsLightTheme": { "message": "Modo Claro" },
    "settingsShowHero": { "message": "Mostrar sección de bienvenida 'Hero'" },
    "settingsScanContent": { "message": "Escaneo de Contenido" },
    "settingsScanDesc": { "message": "Selecciona qué escanear y pulsa el botón." },
    "settingsScanMovies": { "message": "Películas" },
    "settingsScanShows": { "message": "Series" },
    "settingsScanArtists": { "message": "Música" },
    "settingsScanPhotos": { "message": "Fotos" },
    "settingsSelectAll": { "message": "Seleccionar Todo" },
    "settingsStartScan": { "message": "Iniciar Escaneo" },
    "settingsPlexTokens": { "message": "Tokens de Plex" },
    "settingsPlexTokensDesc": { "message": "Edita la lista de tokens de Plex (formato JSON)." },
    "settingsSaveTokens": { "message": "Guardar Tokens" },
    "settingsJellyfinTitle": { "message": "Configuración de Jellyfin" },
    "settingsJellyfinDesc": { "message": "Añade los datos de tu servidor Jellyfin para escanear su contenido." },
    "jellyfinUrlLabel": { "message": "URL del Servidor Jellyfin" },
    "jellyfinUserLabel": { "message": "Nombre de Usuario" },
    "jellyfinPassLabel": { "message": "Contraseña" },
    "jellyfinConnectAndScan": { "message": "Conectar y Escanear" },
    "settingsPhpGenTitle": { "message": "Generador de Script PHP para el Servidor" },
    "settingsPhpFileOptions": { "message": "Opciones del Archivo" },
    "settingsPhpSavePathLabel": { "message": "Ruta de Guardado en el Servidor" },
    "settingsPhpSavePathPlaceholder": { "message": "Ej: /var/www/html/listas (en blanco para la misma carpeta)" },
    "settingsPhpFilenameLabel": { "message": "Nombre del Archivo" },
    "settingsPhpFileAction": { "message": "Acción sobre el Archivo" },
    "settingsPhpActionAppend": { "message": "Añadir al final del archivo (acumulativo)" },
    "settingsPhpActionOverwrite": { "message": "Sobrescribir el archivo (empezar de nuevo)" },
    "settingsPhpSecurity": { "message": "Seguridad (Opcional)" },
    "settingsPhpUseSecretKey": { "message": "Usar clave secreta (Recomendado)" },
    "settingsPhpSecretKeyPlaceholder": { "message": "Introduce una clave secreta segura" },
    "settingsPhpGeneratedCode": { "message": "Código Generado" },
    "settingsPhpGeneratedPlaceholder": { "message": "El código PHP generado aparecerá aquí." },
    "settingsGenerateScript": { "message": "Generar Script" },
    "settingsCopyScript": { "message": "Copiar Script" },
    "settingsDataManagement": { "message": "Gestión de la Base de Datos Local" },
    "settingsImportDb": { "message": "Importar BD desde Archivo" },
    "settingsExportDb": { "message": "Exportar BD a Archivo" },
    "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 ni a tus ajustes." },
    "settingsClose": { "message": "Cerrar" },
    "settingsSave": { "message": "Guardar Ajustes" },
    "musicSidenavTitle": { "message": "Música de Plex" },
    "musicAllServers": { "message": "Todos los Servidores" },
    "musicSearchArtistPlaceholder": { "message": "Buscar artista..." },
    "musicSearchDiscographyPlaceholder": { "message": "Buscar en la discografía..." },
    "musicNothingPlaying": { "message": "Nada en reproducción" },
    "musicSelectSong": { "message": "Selecciona una canción" },
    "musicToStart": { "message": "para empezar a reproducir" },
    "miniplayerDownloadSong": { "message": "Descargar canción" },
    "miniplayerDownloadAlbum": { "message": "Descargar álbum M3U" },
    "miniplayerVolume": { "message": "Volumen" },
    "miniplayerShuffle": { "message": "Aleatorio" },
    "miniplayerEqualizer": { "message": "Ecualizador" },
    "miniplayerOpenList": { "message": "Abrir lista" },
    "eqTitle": { "message": "Ecualizador Gráfico" },
    "eqPresetsLabel": { "message": "Preajustes" },
    "eqPresetFlat": { "message": "Plano" },
    "eqPresetRock": { "message": "Rock" },
    "eqPresetPop": { "message": "Pop" },
    "eqPresetJazz": { "message": "Jazz" },
    "eqPresetClassical": { "message": "Clásica" },
    "eqPresetBassBoost": { "message": "Refuerzo de Graves" },
    "eqPreampLabel": { "message": "Preamplificador" },
    "infoModalTitle": { "message": "Información" },
    "infoModalFieldTitle": { "message": "Título:" },
    "infoModalFieldArtist": { "message": "Artista:" },
    "infoModalFieldAlbum": { "message": "Álbum:" },
    "infoModalFieldSong": { "message": "Canción:" },
    "infoModalFieldYear": { "message": "Año:" },
    "infoModalFieldGenre": { "message": "Género:" },
    "lang_en": { "message": "Inglés" },
    "lang_es": { "message": "Español" },
    "lang_fr": { "message": "Francés" },
    "lang_de": { "message": "Alemán" },
    "lang_it": { "message": "Italiano" },
    "lang_pt": { "message": "Portugués" },
    "essentialFeaturesNotSupported": { "message": "Tu navegador no soporta funciones esenciales." },
    "dbAccessError": { "message": "Error al acceder a la base de datos local." },
    "dbUpdateNeeded": { "message": "La base de datos necesita actualizarse, por favor recarga la página." },
    "dbBlocked": { "message": "Por favor, cierra otras pestañas de esta aplicación para continuar." },
    "deletingContentData": { "message": "Borrando datos de contenido locales..." },
    "noContentDataToDelete": { "message": "No hay datos de contenido que borrar." },
    "contentDataDeleted": { "message": "Datos de contenido borrados de IndexedDB." },
    "errorDeletingData": { "message": "Error al borrar datos: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aceEditorNotAvailable": { "message": "Editor de texto no disponible." },
    "errorLoadingTokens": { "message": "Error al cargar tokens para editar." },
    "errorLoadingTokensMessage": { "message": "Error al cargar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aceEditorNotAvailableToSave": { "message": "Editor no disponible para guardar." },
    "invalidJsonFormat": { "message": "Formato JSON inválido. Debe ser { \"tokens\": [...] }" },
    "tokensSaved": { "message": "Tokens guardados correctamente." },
    "errorSavingTokens": { "message": "Error al guardar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
    "dbNotAvailable": { "message": "IndexedDB no está disponible." },
    "dbExported": { "message": "Base de datos exportada con éxito." },
    "errorExportingDb": { "message": "Error al exportar la base de datos: $message$", "placeholders": { "message": { "content": "$1" } } },
    "invalidJsonFile": { "message": "El archivo no contiene un objeto JSON válido." },
    "noDataToImport": { "message": "El archivo no contiene datos para las secciones de la BD actual." },
    "dbImported": { "message": "Base de datos importada correctamente." },
    "errorImportingDb": { "message": "Error al importar la base de datos: $message$", "placeholders": { "message": { "content": "$1" } } },
    "updatingView": { "message": "Actualizando la vista con los nuevos datos..." },
    "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 se encontró tráiler para este título." },
    "confirmClearHistory": { "message": "¿Estás seguro de que deseas borrar todo tu historial de visualización? Esta acción no se puede rehacer." },
    "historyCleared": { "message": "Historial de visualización borrado." },
    "historyItemDeleted": { "message": "Elemento borrado del historial." },
    "errorGeneratingScript": { "message": "Primero genera un script para poder copiarlo." },
    "scriptCopied": { "message": "Script PHP copiado al portapapeles." },
    "errorCopyingScript": { "message": "Error al copiar el script." },
    "scriptGenerated": { "message": "Script PHP generado." },
    "errorLoadingAlbum": { "message": "Error al cargar álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
    "noPhotoServerSelected": { "message": "Error: No se ha seleccionado un servidor de fotos." },
    "loadingGenres": { "message": "Cargando géneros..." },
    "errorLoadingGenres": { "message": "Error al cargar" },
    "noContentFound": { "message": "No se encontraron resultados." },
    "couldNotLoadContent": { "message": "No se pudo cargar el contenido." },
    "noFavorites": { "message": "Aún no tienes favoritos." },
    "errorLoadingFavorites": { "message": "Error al cargar favoritos." },
    "historyEmpty": { "message": "Tu historial está vacío." },
    "historyEmptySub": { "message": "Explora y mira contenido para que aparezca aquí." },
    "errorGeneratingRecommendations": { "message": "Error al generar recomendaciones." },
    "noRecommendations": { "message": "¡Necesitamos conocerte mejor para darte recomendaciones!" },
    "errorGeneratingStats": { "message": "Error al generar estadísticas." },
    "noServersForToken": { "message": "No se encontraron servidores asociados para este token." },
    "searchingActorContent": { "message": "Buscando contenido de $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" } } },
    "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" } } },
    "sendingStreams": { "message": "Enviando $count$ stream(s) al servidor...", "placeholders": { "count": { "content": "$1" } } },
    "streamAddedSuccess": { "message": "Stream(s) añadido(s) con éxito." },
    "generatingM3U": { "message": "Generando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "m3uDownloaded": { "message": "\"\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
    "errorGeneratingM3U": { "message": "Error al generar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
    "settingsSavedSuccess": { "message": "Ajustes guardados correctamente." },
    "errorSavingSettings": { "message": "Error al guardar los ajustes en la base de datos." },
    "languageChangeReload": { "message": "Idioma cambiado. La aplicación se recargará ahora." },
    "addedToFavorites": { "message": "Añadido a favoritos." },
    "removedFromFavorites": { "message": "Eliminado de favoritos." },
    "plexScanInProgress": { "message": "El escaneo Plex ya está en curso." },
    "plexScanStarting": { "message": "Iniciando escaneo Plex..." },
    "noPlexTokens": { "message": "No hay tokens de Plex configurados." },
    "clearingSections": { "message": "Limpiando secciones: $sections$", "placeholders": { "sections": { "content": "$1" } } },
    "sectionsCleared": { "message": "Secciones limpiadas." },
    "tokenFoundServers": { "message": "Token $token$... encontró $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
    "errorProcessingToken": { "message": "Error procesando token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
    "initialScanPhaseComplete": { "message": "Fase de escaneo inicial finalizada." },
    "retryPhaseFinished": { "message": "Fase de reintentos finalizada." },
    "plexScanFinished": { "message": "Escaneo finalizado. Actualizando contenido..." },
    "plexScanFatalError": { "message": "ERROR FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
    "errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } },
    "scanCancelled": { "message": "Escaneo cancelado por el usuario." },
    "scanCancelledInfo": { "message": "Escaneo cancelado." },
    "retyingSection": { "message": "Reintentando sección \"$title$\"", "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" } } },
    "noRetriesPending": { "message": "No hay reintentos pendientes." },
    "startingRetryPhase": { "message": "Iniciando fase de reintentos para $count$ secciones...", "placeholders": { "count": { "content": "$1" } } },
    "retryPhaseCancelled": { "message": "Fase de reintentos cancelada." },
    "errorInitializingMusicPlayer": { "message": "Error inicializando el reproductor de música." },
    "criticalErrorLoadingMusic": { "message": "Error crítico al cargar datos de música." },
    "errorLoadingArtists": { "message": "Error al cargar artistas." },
    "dbUnavailableError": { "message": "Error: Base de datos no disponible." },
    "updatingMusicData": { "message": "Actualizando datos de música..." },
    "musicDataUpdated": { "message": "Datos de música actualizados." },
    "errorFetchingArtistSongs": { "message": "Error al obtener las canciones del artista." },
    "errorLoadingSongs": { "message": "Error cargando canciones." },
    "noArtistsFound": { "message": "No se encontraron artistas." },
    "artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
    "artistsCounterSingle": { "message": "$total$ Artistas", "placeholders": { "total": { "content": "$1" } } },
    "artistsCounterLoading": { "message": "Cargando..." },
    "noSongsFound": { "message": "No se encontraron canciones." },
    "shuffleOn": { "message": "Modo aleatorio activado." },
    "shuffleOff": { "message": "Modo aleatorio desactivado." },
    "downloadingSong": { "message": "Iniciando descarga de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "songDownloaded": { "message": "\"\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
    "errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
    "generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
    "albumM3UGenerated": { "message": "M3U para el álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } },
    "playbackError": { "message": "Error de reproducción" },
    "errorLabel": { "message": "Error" },
    "reloadingPage": { "message": "Recargando la página..." },
    "viewed": { "message": "Visto" },
    "local": { "message": "Local" },
    "topRatedSort": {"message": "Mejor Valoradas"},
    "recentSort": {"message": "Recientes"},
    "popularSort": {"message": "Populares"},
    "moviesSectionTitle": {"message": "Películas"},
    "seriesSectionTitle": {"message": "Series"},
    "searchResultsFor": {"message": "Resultados para \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
    "contentFrom": {"message": "Contenido de $actor$", "placeholders": {"actor": {"content": "$1"}}},
    "explore": {"message": "Explorar"},
    "noGenre": {"message": "Sin categoría"},
    "synopsis": {"message": "Sinopsis"},
    "noSynopsis": {"message": "No hay sinopsis disponible."},
    "director": {"message": "Director:"},
    "writer": {"message": "Escritor:"},
    "viewOnImdb": {"message": "Ver en IMDb"},
    "watchTrailer": {"message": "Ver Tráiler"},
    "addToFavorites": {"message": "Añadir a favoritos"},
    "removeFromFavorites": {"message": "Quitar de favoritos"},
    "notAvailable": {"message": "No disponible"},
    "mainCast": {"message": "Reparto Principal"},
    "seasonsAndEpisodes": {"message": "Temporadas y Episodios"},
    "similarContent": {"message": "Contenido Similar"},
    "episodesCount": {"message": "$count$ Episodios", "placeholders": {"count": {"content": "$1"}}},
    "seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}},
    "runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
    "noTrailerFound": {"message": "No se encontró tráiler para este título."},
    "fatalInitError": {"message": "Error fatal de inicialización"},
    "fatalInitErrorSub": {"message": "No se pudo cargar la aplicación."},
    "invalidStreamInfo": {"message": "Información inválida."},
    "dbUnavailableForStreams": {"message": "Base de datos local no disponible."},
    "noPlexServersForStreams": {"message": "No hay servidores Plex."},
    "notFoundOnServers": {"message": "No se encontró \"$query$\" en los servidores de Plex.", "placeholders": {"query": {"content": "$1"}}},
    "relativeTime_justNow": { "message": "Ahora mismo" },
    "relativeTime_minutesAgo": { "message": "Hace $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
    "relativeTime_hoursAgo": { "message": "Hace $count$ horas", "placeholders": { "count": { "content": "$1" } } },
    "relativeTime_yesterday": { "message": "Ayer" },
    "relativeTime_daysAgo": { "message": "Hace $count$ días", "placeholders": { "count": { "content": "$1" } } },
    "errorLoadingDetails": { "message": "Error al Cargar los Detalles" },
    "errorLoadingLocalContent": { "message": "Error al cargar el contenido local." },
    "errorServerResponse": { "message": "Respuesta no exitosa del servidor." },
    "errorPlexApi": { "message": "Error $status$ de la API de Plex.", "placeholders": { "status": { "content": "$1" } } },
    "errorParsingPlexXml": { "message": "Error al analizar el XML de Plex." },
    "untitled": { "message": "Sin título" },
    "itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
    "noPhotoServers": { "message": "No hay servidores de fotos" },
    "jellyfinScanInProgress": { "message": "El escaneo Jellyfin ya está en curso." },
    "jellyfinScanning": { "message": "Escaneando Jellyfin..." },
    "jellyfinMissingCredentials": { "message": "Por favor, completa la URL y el usuario de Jellyfin." },
    "jellyfinConnecting": { "message": "Conectando a Jellyfin en: $url$", "placeholders": { "url": { "content": "$1" } } },
    "jellyfinAuthFailed": { "message": "Autenticación Jellyfin fallida: $message$", "placeholders": { "message": { "content": "$1" } } },
    "jellyfinAuthSuccess": { "message": "Autenticación Jellyfin exitosa." },
    "jellyfinFetchingLibraries": { "message": "Obteniendo bibliotecas..." },
    "jellyfinFetchFailed": { "message": "Error al obtener bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
    "jellyfinNoMediaLibraries": { "message": "No se encontraron bibliotecas de películas o series en Jellyfin." },
    "jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de medios encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
    "jellyfinLibraryScanSuccess": { "message": "[Éxito] '$libraryName$' escaneada, $count$ títulos añadidos.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
    "jellyfinLibraryScanFailed": { "message": "Error al escanear la biblioteca '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
    "jellyfinScanSuccess": { "message": "Escaneo Jellyfin completado. Añadidas $movies$ películas y $series$ series.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
    "noJellyfinCredentials": { "message": "Credenciales de Jellyfin no configuradas." },
    "notFoundOnJellyfin": { "message": "No se encontró \"$query$\" en Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
    "notFoundOnAnyServer": { "message": "No se encontró \"$query$\" en ningún servidor.", "placeholders": { "query": { "content": "$1" } } },
    "localOnPlex": { "message": "En Plex" },
    "searchOnPlex": { "message": "Buscar en Plex" },
    "jellyfinTitle": { "message": "Contenido de Jellyfin" },
    "noJellyfinContent": { "message": "No se encontró contenido de Jellyfin." },
    "noJellyfinContentSub": { "message": "Asegúrate de haber escaneado tu servidor Jellyfin en los ajustes." },
    "activityViewerTitle": { "message": "Visor de Actividad del Servidor" },
    "activitySelectServer": { "message": "Selecciona un servidor" },
    "activityCheckBtn": { "message": "Actualizar" },
    "activityNoSessions": { "message": "No hay sesiones activas en este servidor." },
    "activitySessionUser": { "message": "Usuario" },
    "activitySessionDevice": { "message": "Dispositivo" },
    "activitySessionContent": { "message": "Contenido" },
    "activitySessionState": { "message": "Estado" },
    "activitySessionIdentifier": { "message": "Identificador del Cliente" },
    "activityCopyID": { "message": "Copiar ID" },
    "activityError": { "message": "No se pudo obtener la actividad del servidor." },
    "activityCopied": { "message": "¡Identificador copiado al portapapeles!" },
    "activityCopyError": { "message": "Error al copiar el identificador." },
    "noProvidersFound": { "message": "No se encontraron proveedores." },
    "availableOnPlex": { "message": "Disponible en Plex" },
    "navM3uGenerator": { "message": "Generador M3U" },
    "m3uGeneratorTitle": { "message": "Generador de Listas M3U" },
    "selectAServer": { "message": "Selecciona un servidor..." },
    "downloadM3u": { "message": "Descargar M3U" },
    "m3uGenerator": { "message": "Generador M3U" },
    "selectServer": { "message": "Seleccionar Servidor" },
    "selectLibraries": { "message": "Seleccionar Bibliotecas" },
    "howToUse": { "message": "Cómo Usar" },
    "m3uInstruction1": { "message": "Elige un servidor de la lista." },
    "m3uInstruction2": { "message": "Selecciona una o más bibliotecas para incluir." },
    "m3uInstruction3": { "message": "Haz clic en el botón de descarga." },
    "m3uInstruction4": { "message": "Importa el archivo .m3u en tu reproductor compatible." },
    "settingsRegionLabel": { "message": "Región para descubrimiento de contenido" },
    "allRegions": { "message": "Todas las regiones" },
    "chatOpen": { "message": "Abrir Chat" },
    "chatTitle": { "message": "Asistente IA" },
    "chatClose": { "message": "X" },
    "chatPlaceholder": { "message": "Escribe tu mensaje..." },
    "chatSend": { "message": "➤" },
    "chatGptError": { "message": "Lo siento, no pude obtener una respuesta. Inténtalo de nuevo." },
    "chatWelcome": { "message": "¡Bienvenido! Soy tu asistente de CinePlex. Pregúntame sobre películas, series o cualquier otra cosa que quieras saber." },
    "chatApiKeyMissing": { "message": "La clave de la API de OpenAI no está configurada. Por favor, configúrala en los ajustes de la extensión." },
    "chatApiInvalidResponse": { "message": "La API ha devuelto una respuesta no válida. Por favor, inténtalo de nuevo." },
    "chatApiError": { "message": "Error al comunicarse con el asistente de IA" },
    "downloadAll": { "message": "Descargar todo" },
    "download": { "message": "Descargar" },
    "aiToolSearchLibraryDesc": { "message": "Busca en la biblioteca de Plex películas o series." },
    "aiToolSearchLibraryQueryDesc": { "message": "El título a buscar." },
    "aiToolSearchLibraryTypeDesc": { "message": "El tipo de contenido a buscar (película o serie)." },
    "aiToolNavigateToPageDesc": { "message": "Navega a una página específica de la aplicación." },
    "aiToolNavigateToPagePageDesc": { "message": "La página a la que navegar." },
    "aiToolGetUserStatsDesc": { "message": "Obtiene estadísticas del usuario." },
    "aiToolShowItemDetailsDesc": { "message": "Muestra los detalles de una película o serie." },
    "aiToolShowItemDetailsTitleDesc": { "message": "El título de la película o serie." },
    "aiToolShowItemDetailsTypeDesc": { "message": "El tipo de contenido (película o serie)." },
    "aiToolAddToPlaylistDesc": { "message": "Añade una película o serie a la lista de reproducción." },
    "aiToolAddToPlaylistTitleDesc": { "message": "El título de la película o serie." },
    "aiToolAddToPlaylistTypeDesc": { "message": "El tipo de contenido (película o serie)." },
    "aiToolDownloadPlaylistDesc": { "message": "Descarga la lista de reproducción de una película o serie." },
    "aiToolDownloadPlaylistTitleDesc": { "message": "El título de la película o serie." },
    "aiToolDownloadPlaylistTypeDesc": { "message": "El tipo de contenido (película o serie)." },
    "aiToolToggleFavoriteDesc": { "message": "Añade o quita una película o serie de favoritos." },
    "aiToolToggleFavoriteTitleDesc": { "message": "El título de la película o serie." },
    "aiToolToggleFavoriteTypeDesc": { "message": "El tipo de contenido (película o serie)." },
    "aiToolGetRecommendationsDesc": { "message": "Obtiene recomendaciones para el usuario." },
    "aiToolApplyFiltersDesc": { "message": "Aplica filtros a la vista actual." },
    "aiToolApplyFiltersTypeDesc": { "message": "El tipo de contenido a filtrar (película o serie)." },
    "aiToolApplyFiltersGenreDesc": { "message": "El género a filtrar." },
    "aiToolApplyFiltersYearDesc": { "message": "El año a filtrar." },
    "aiToolApplyFiltersSortDesc": { "message": "El orden en que se mostrarán los resultados." },
    "aiToolPlayMusicByArtistDesc": { "message": "Reproduce música de un artista específico." },
    "aiToolPlayMusicByArtistNameDesc": { "message": "El nombre del artista." },
    "aiToolClearChatHistoryDesc": { "message": "Borra el historial de chat." },
    "aiToolDeleteDatabaseDesc": { "message": "Borra la base de datos de la extensión." },
    "aiToolUpdateAllTokensDesc": { "message": "Actualiza todos los tokens de Plex." },
    "aiToolAddPlexTokenDesc": { "message": "Añade un nuevo token de Plex." },
    "aiToolAddPlexTokenTokenDesc": { "message": "El token de Plex a añadir." },
    "aiToolChangeRegionDesc": { "message": "Cambia la región para el descubrimiento de contenido." },
    "aiToolChangeRegionRegionDesc": { "message": "El código de región de dos letras (por ejemplo, US, ES, FR)." },
    "aiToolClearAllFavoritesDesc": { "message": "Borra todos los favoritos del usuario." },
    "aiToolClearRecommendationsViewDesc": { "message": "Limpia la vista de recomendaciones." },
    "aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
    "aiToolFavoritesClearError": { "message": "Error al eliminar los favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolRecommendationsCleared": { "message": "Recomendaciones eliminadas." },
    "aiToolRecommendationsClearError": { "message": "Error al eliminar las recomendaciones: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolDatabaseDeleted": { "message": "Base de datos eliminada. La página se recargará." },
    "aiToolDatabaseDeleteError": { "message": "Error al eliminar la base de datos: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolDatabaseDeleteBlocked": { "message": "La eliminación de la base de datos está bloqueada. Cierra otras pestañas de la aplicación." },
    "aiToolUpdateAllTokensSuccess": { "message": "Todos los tokens se han actualizado correctamente." },
    "aiToolUpdateAllTokensError": { "message": "Error al actualizar los tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolAddPlexTokenSuccess": { "message": "Token de Plex añadido correctamente." },
    "aiToolAddPlexTokenError": { "message": "Error al añadir el token de Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiToolChangeRegionSuccess": { "message": "Región cambiada a $region$. El contenido se está actualizando.", "placeholders": { "region": { "content": "$1" } } },
    "aiToolChangeRegionError": { "message": "Error al cambiar la región: $message$", "placeholders": { "message": { "content": "$1" } } },
    "aiSystemPrompt_v2": { "message": "Eres un asistente experto en cine y series llamado CinePlex. Tu función principal es ayudar a los usuarios a interactuar con su biblioteca de medios y descubrir contenido. Sigue estas reglas: 1. Cuando un usuario pida una lista o recomendación (ej. 'dime 5 películas de terror', 'las mejores series de ciencia ficción'), DEBES usar tu propio conocimiento para generar la lista y presentarla en un formato numerado o con viñetas. NO uses herramientas para esta tarea inicial de descubrimiento. 2. Después de presentar la lista, si el usuario te pide que la descargues, la compruebes o crees un M3U, ENTONCES y solo entonces, utiliza la herramienta 'generate_m3u_from_titles_list' pasándole los títulos que acabas de mencionar. 3. Para cualquier otra acción como navegar por la app, obtener estadísticas o buscar un TÍTULO ESPECÍFICO en la biblioteca del usuario, utiliza las herramientas apropiadas. Sé conciso, amigable y eficiente." },
    "aiToolSearchLibraryDesc_v2": { "message": "La lista de títulos para procesar está vacía." },
    "aiToolM3UNoLocalMatches": { "message": "Parece que no tienes ninguno de los títulos de esa lista en tus servidores locales." },
    "aiToolGenerateM3UTypeDesc": { "message": "El tipo de contenido a buscar: 'movie' o 'series'." },
    "aiToolGenerateM3UFilenameDesc": { "message": "Un nombre de archivo personalizado para la lista de reproducción M3U descargada." },
    "aiToolGenerateM3USuccess": { "message": "¡Entendido! Estoy generando una lista de reproducción M3U con $1 elementos. La descarga debería comenzar en breve.", "placeholders": { "1": { "content": "$1" } } },
    "aiSystemPrompt_v3": { "message": "Eres un asistente experto en cine y series llamado CinePlex. Tu función principal es ayudar a los usuarios a descubrir contenido y a interactuar con su biblioteca. Sigue estas reglas rigurosamente: 1. **NUNCA** inventes que has realizado una acción si no has usado una herramienta para ello. Por ejemplo, no digas 'he descargado X' si no has usado la herramienta de descarga. 2. Para peticiones de recomendaciones o listas (ej. 'dime 5 películas de terror'), usa tu propio conocimiento para generar la lista. Preséntala en formato numerado o con viñetas. Después de mostrar la lista, pregunta proactivamente al usuario si quiere que compruebes la disponibilidad en sus servidores locales y crees un archivo M3U. 3. **SOLO** si el usuario confirma que quiere comprobar o descargar la lista, utiliza la herramienta `check_and_download_titles_list`. No la uses sin confirmación explícita. 4. Para cualquier otra acción como navegar, obtener estadísticas o buscar un título específico, usa las herramientas apropiadas. Sé siempre conciso, amigable y eficiente." },
    "aiToolCheckAndDownloadDesc": { "message": "Comprueba una lista de títulos de películas o series en los servidores locales del usuario y, si se encuentran coincidencias, genera y descarga un archivo de lista de reproducción M3U." },
    "aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Una lista de títulos de películas o series para comprobar y descargar." },
    "aiToolM3UNoTitlesProvided": { "message": "Por favor, proporciona una lista de títulos para crear la lista de reproducción." },
    "aiToolM3UCheckingTitles": { "message": "Comprobando los títulos en tus servidores locales..." },
    "aiToolM3UNoLocalMatchesForDownload": { "message": "No he encontrado ninguna de las películas o series de la lista en tus servidores locales." },
    "aiToolM3UDownloadStarted": { "message": "¡Hecho! He encontrado $1 de los $2 títulos en tus servidores y he iniciado la descarga de la lista de reproducción M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
}