Compare commits
No commits in common. "main" and "Version" have entirely different histories.
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Sucht Plex-Server nach Inhalten und zeigt sie in der Benutzeroberfläche an" },
|
"appDescription": { "message": "Scannt Plex-Server nach Inhalten und zeigt diese in der Oberfläche an" },
|
||||||
"appTagline": { "message": "Filme, Serien und Musik" },
|
"appTagline": { "message": "Filme, Serien und Musik" },
|
||||||
"appLocaleCode": { "message": "de-DE" },
|
"appLocaleCode": { "message": "de" },
|
||||||
"toggleNavigation": { "message": "Navigation umschalten" },
|
"toggleNavigation": { "message": "Navigation umschalten" },
|
||||||
"searchPlaceholder": { "message": "Suche nach Filmen oder Serien..." },
|
"searchPlaceholder": { "message": "Filme oder Serien suchen..." },
|
||||||
"openMusicPlayer": { "message": "Musik-Player öffnen" },
|
"openMusicPlayer": { "message": "Musik-Player öffnen" },
|
||||||
"settings": { "message": "Einstellungen" },
|
"settings": { "message": "Einstellungen" },
|
||||||
"navMovies": { "message": "Filme" },
|
"navMovies": { "message": "Filme" },
|
||||||
@ -18,9 +18,9 @@
|
|||||||
"navMusic": { "message": "Musik" },
|
"navMusic": { "message": "Musik" },
|
||||||
"navM3uGenerator": { "message": "M3U-Generator" },
|
"navM3uGenerator": { "message": "M3U-Generator" },
|
||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Entdecken Sie Tausende von Filmen und Serien." },
|
"heroSubtitle": { "message": "Entdecke Tausende von Filmen und Serien." },
|
||||||
"addStream": { "message": "Stream hinzufügen" },
|
"addStream": { "message": "Stream hinzufügen" },
|
||||||
"moreInfo": { "message": "Mehr Info" },
|
"moreInfo": { "message": "Mehr Informationen" },
|
||||||
"popularMovies": { "message": "Beliebte Filme" },
|
"popularMovies": { "message": "Beliebte Filme" },
|
||||||
"allGenres": { "message": "Alle Genres" },
|
"allGenres": { "message": "Alle Genres" },
|
||||||
"allYears": { "message": "Alle Jahre" },
|
"allYears": { "message": "Alle Jahre" },
|
||||||
@ -29,33 +29,33 @@
|
|||||||
"sortRecent": { "message": "Neueste" },
|
"sortRecent": { "message": "Neueste" },
|
||||||
"loadMore": { "message": "Mehr laden" },
|
"loadMore": { "message": "Mehr laden" },
|
||||||
"photosBreadcrumbHome": { "message": "Alben" },
|
"photosBreadcrumbHome": { "message": "Alben" },
|
||||||
"selectServer": { "message": "Wählen Sie einen Server" },
|
"selectServer": { "message": "Server auswählen" },
|
||||||
"loading": { "message": "Laden..." },
|
"loading": { "message": "Laden..." },
|
||||||
"loadingLibraries": { "message": "Lade Bibliotheken..." },
|
"loadingLibraries": { "message": "Bibliotheken laden..." },
|
||||||
"photosEmptyState": { "message": "Keine Alben oder Fotos gefunden." },
|
"photosEmptyState": { "message": "Keine Alben oder Fotos gefunden." },
|
||||||
"photosEmptyStateSub": { "message": "Bitte wählen Sie einen Server aus oder stellen Sie sicher, dass Sie eine Fotobibliothek in Plex haben." },
|
"photosEmptyStateSub": { "message": "Bitte wählen Sie einen Server aus oder stellen Sie sicher, dass Sie eine Fotobibliothek in Plex haben." },
|
||||||
"statsTitle": { "message": "Bibliotheksstatistiken" },
|
"statsTitle": { "message": "Bibliotheksstatistiken" },
|
||||||
"statsAllTokens": { "message": "Alle Token" },
|
"statsAllTokens": { "message": "Alle Tokens" },
|
||||||
"statsAnalyzing": { "message": "Analysiere deine Bibliothek..." },
|
"statsAnalyzing": { "message": "Ihre Bibliothek wird analysiert..." },
|
||||||
"statsActiveTokens": { "message": "Aktive Token" },
|
"statsActiveTokens": { "message": "Aktive Tokens" },
|
||||||
"statsServersFound": { "message": "Gefundene Server" },
|
"statsServersFound": { "message": "Server gefunden" },
|
||||||
"statsUniqueMovies": { "message": "Einzigartige Filme" },
|
"statsUniqueMovies": { "message": "Einzigartige Filme" },
|
||||||
"statsUniqueSeries": { "message": "Einzigartige Serien" },
|
"statsUniqueSeries": { "message": "Einzigartige Serien" },
|
||||||
"statsUniqueArtists": { "message": "Einzigartige Künstler" },
|
"statsUniqueArtists": { "message": "Einzigartige Künstler" },
|
||||||
"statsTokenServers": { "message": "Token-Server" },
|
"statsTokenServers": { "message": "Token-Server" },
|
||||||
"statsChartMoviesByGenre": { "message": "Inhalt nach Genre (Filme)" },
|
"statsChartMoviesByGenre": { "message": "Inhalte nach Genre (Filme)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Inhalt nach Genre (Serien)" },
|
"statsChartSeriesByGenre": { "message": "Inhalte nach Genre (Serien)" },
|
||||||
"statsChartByDecade": { "message": "Inhalt nach Jahrzehnt" },
|
"statsChartByDecade": { "message": "Inhalte nach Jahrzehnt" },
|
||||||
"recommendationsTitle": { "message": "Empfehlungen für dich" },
|
"recommendationsTitle": { "message": "Empfehlungen für Sie" },
|
||||||
"historyTitle": { "message": "Wiedergabeverlauf" },
|
"historyTitle": { "message": "Wiedergabeverlauf" },
|
||||||
"clearHistory": { "message": "Alles löschen" },
|
"clearHistory": { "message": "Alles löschen" },
|
||||||
"consoleTitle": { "message": "Plex-Scan-Konsole" },
|
"consoleTitle": { "message": "Plex-Scan-Konsole" },
|
||||||
"footerCredit": { "message": "Eine Oberfläche für Ihr Plex-Universum." },
|
"footerCredit": { "message": "Eine Oberfläche für Ihr Plex-Universum." },
|
||||||
"closeTrailer": { "message": "Trailer schließen" },
|
"closeTrailer": { "message": "Trailer schließen" },
|
||||||
"close": { "message": "Schließen" },
|
"close": { "message": "Schließen" },
|
||||||
"photoViewer": { "message": "Fotobetrachter" },
|
"photoViewer": { "message": "Foto-Viewer" },
|
||||||
"previous": { "message": "Zurück" },
|
"previous": { "message": "Vorherige" },
|
||||||
"next": { "message": "Weiter" },
|
"next": { "message": "Nächste" },
|
||||||
"notificationTemplateText": { "message": "Benachrichtigung" },
|
"notificationTemplateText": { "message": "Benachrichtigung" },
|
||||||
"settingsTitleFull": { "message": "Einstellungen und Konfiguration" },
|
"settingsTitleFull": { "message": "Einstellungen und Konfiguration" },
|
||||||
"settingsTabGeneral": { "message": "Allgemein" },
|
"settingsTabGeneral": { "message": "Allgemein" },
|
||||||
@ -64,45 +64,45 @@
|
|||||||
"settingsTabPhpGen": { "message": "PHP-Generator" },
|
"settingsTabPhpGen": { "message": "PHP-Generator" },
|
||||||
"settingsTabData": { "message": "Daten" },
|
"settingsTabData": { "message": "Daten" },
|
||||||
"settingsApiServer": { "message": "API- und Server-Einstellungen" },
|
"settingsApiServer": { "message": "API- und Server-Einstellungen" },
|
||||||
"settingsTmdbApiLabel": { "message": "TMDB-API-Schlüssel (optional)" },
|
"settingsTmdbApiLabel": { "message": "TMDB API-Schlüssel (Optional)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "Der Standardschlüssel wird verwendet, wenn das Feld leer gelassen wird" },
|
"settingsTmdbApiPlaceholder": { "message": "Standardschlüssel wird verwendet, wenn leer gelassen" },
|
||||||
"settingsGoogleApiLabel": { "message": "Google Gemini-API-Schlüssel (optional)" },
|
"settingsGoogleApiLabel": { "message": "Google Gemini API-Schlüssel (Optional)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Wird für die Nutzung des KI-Assistenten benötigt" },
|
"settingsGoogleApiPlaceholder": { "message": "Erforderlich für die Nutzung des KI-Assistenten" },
|
||||||
"settingsRegionLabel": { "message": "Region für die Inhaltsentdeckung" },
|
"settingsRegionLabel": { "message": "Region für die Inhaltserkennung" },
|
||||||
"allRegions": { "message": "Alle Regionen" },
|
"allRegions": { "message": "Alle Regionen" },
|
||||||
"settingsPhpUrlLabel": { "message": "Server-URL zum Hinzufügen von Streams" },
|
"settingsPhpUrlLabel": { "message": "Server-URL zum Hinzufügen von Streams" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://ihr-server.com/pfad/zum/skript.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://ihr-server.com/pfad/zum/script.php" },
|
||||||
"settingsInterface": { "message": "Benutzeroberfläche" },
|
"settingsInterface": { "message": "Oberfläche" },
|
||||||
"settingsLightTheme": { "message": "Heller Modus" },
|
"settingsLightTheme": { "message": "Heller Modus" },
|
||||||
"settingsShowHero": { "message": "Willkommensbereich 'Hero' anzeigen" },
|
"settingsShowHero": { "message": "Willkommensbereich 'Hero' anzeigen" },
|
||||||
"settingsScanContent": { "message": "Inhalt scannen" },
|
"settingsScanContent": { "message": "Inhaltsscanning" },
|
||||||
"settingsScanDesc": { "message": "Wählen Sie aus, was gescannt werden soll, und drücken Sie die Taste." },
|
"settingsScanDesc": { "message": "Wählen Sie aus, was gescannt werden soll, und klicken Sie auf die Schaltfläche." },
|
||||||
"settingsScanMovies": { "message": "Filme" },
|
"settingsScanMovies": { "message": "Filme" },
|
||||||
"settingsScanShows": { "message": "Serien" },
|
"settingsScanShows": { "message": "Serien" },
|
||||||
"settingsScanArtists": { "message": "Musik" },
|
"settingsScanArtists": { "message": "Musik" },
|
||||||
"settingsScanPhotos": { "message": "Fotos" },
|
"settingsScanPhotos": { "message": "Fotos" },
|
||||||
"settingsSelectAll": { "message": "Alles auswählen" },
|
"settingsSelectAll": { "message": "Alle auswählen" },
|
||||||
"settingsStartScan": { "message": "Scan starten" },
|
"settingsStartScan": { "message": "Scan starten" },
|
||||||
"settingsPlexTokens": { "message": "Plex-Token" },
|
"settingsPlexTokens": { "message": "Plex-Tokens" },
|
||||||
"settingsPlexTokensDesc": { "message": "Bearbeiten Sie die Liste der Plex-Token (JSON-Format)." },
|
"settingsPlexTokensDesc": { "message": "Bearbeiten Sie die Liste der Plex-Tokens (JSON-Format)." },
|
||||||
"settingsSaveTokens": { "message": "Token speichern" },
|
"settingsSaveTokens": { "message": "Tokens speichern" },
|
||||||
"settingsJellyfinTitle": { "message": "Jellyfin-Einstellungen" },
|
"settingsJellyfinTitle": { "message": "Jellyfin-Konfiguration" },
|
||||||
"settingsJellyfinDesc": { "message": "Fügen Sie Ihre Jellyfin-Serverdetails hinzu, um deren Inhalte zu scannen." },
|
"settingsJellyfinDesc": { "message": "Fügen Sie Ihre Jellyfin-Serverdaten hinzu, um deren Inhalte zu scannen." },
|
||||||
"jellyfinUrlLabel": { "message": "Jellyfin-Server-URL" },
|
"jellyfinUrlLabel": { "message": "Jellyfin Server-URL" },
|
||||||
"jellyfinUserLabel": { "message": "Benutzername" },
|
"jellyfinUserLabel": { "message": "Benutzername" },
|
||||||
"jellyfinPassLabel": { "message": "Passwort" },
|
"jellyfinPassLabel": { "message": "Passwort" },
|
||||||
"jellyfinConnectAndScan": { "message": "Verbinden und scannen" },
|
"jellyfinConnectAndScan": { "message": "Verbinden und scannen" },
|
||||||
"settingsPhpGenTitle": { "message": "PHP-Skript-Generator für Server" },
|
"settingsPhpGenTitle": { "message": "PHP-Skript-Generator für den Server" },
|
||||||
"settingsPhpFileOptions": { "message": "Dateioptionen" },
|
"settingsPhpFileOptions": { "message": "Dateioptionen" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Speicherpfad auf dem Server" },
|
"settingsPhpSavePathLabel": { "message": "Speicherpfad auf dem Server" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Bsp.: /var/www/html/listen (leer für denselben Ordner)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Bsp.: /var/www/html/listen (leer lassen für denselben Ordner)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Dateiname" },
|
"settingsPhpFilenameLabel": { "message": "Dateiname" },
|
||||||
"settingsPhpFileAction": { "message": "Dateiaktion" },
|
"settingsPhpFileAction": { "message": "Dateiaktion" },
|
||||||
"settingsPhpActionAppend": { "message": "Am Ende der Datei anfügen (kumulativ)" },
|
"settingsPhpActionAppend": { "message": "An Dateiende anhängen (kumulativ)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Datei überschreiben (von vorne beginnen)" },
|
"settingsPhpActionOverwrite": { "message": "Datei überschreiben (neu beginnen)" },
|
||||||
"settingsPhpSecurity": { "message": "Sicherheit (optional)" },
|
"settingsPhpSecurity": { "message": "Sicherheit (Optional)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Geheimschlüssel verwenden (empfohlen)" },
|
"settingsPhpUseSecretKey": { "message": "Geheimen Schlüssel verwenden (Empfohlen)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Geben Sie einen sicheren Geheimschlüssel ein" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Geben Sie einen sicheren geheimen Schlüssel ein" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Generierter Code" },
|
"settingsPhpGeneratedCode": { "message": "Generierter Code" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "Der generierte PHP-Code wird hier angezeigt." },
|
"settingsPhpGeneratedPlaceholder": { "message": "Der generierte PHP-Code wird hier angezeigt." },
|
||||||
"settingsGenerateScript": { "message": "Skript generieren" },
|
"settingsGenerateScript": { "message": "Skript generieren" },
|
||||||
@ -111,18 +111,18 @@
|
|||||||
"settingsImportDb": { "message": "DB aus Datei importieren" },
|
"settingsImportDb": { "message": "DB aus Datei importieren" },
|
||||||
"settingsExportDb": { "message": "DB in Datei exportieren" },
|
"settingsExportDb": { "message": "DB in Datei exportieren" },
|
||||||
"settingsClearContent": { "message": "Lokale Inhaltsdaten löschen" },
|
"settingsClearContent": { "message": "Lokale Inhaltsdaten löschen" },
|
||||||
"settingsClearContentDesc": { "message": "Diese Aktion löscht Filme, Serien und Musik aus der lokalen Datenbank, hat aber keine Auswirkungen auf Ihre Favoriten oder Ihre Einstellungen." },
|
"settingsClearContentDesc": { "message": "Diese Aktion löscht Filme, Serien und Musik aus der lokalen Datenbank, hat aber keine Auswirkungen auf Ihre Favoriten oder Einstellungen." },
|
||||||
"settingsClose": { "message": "Schließen" },
|
"settingsClose": { "message": "Schließen" },
|
||||||
"settingsSave": { "message": "Einstellungen speichern" },
|
"settingsSave": { "message": "Einstellungen speichern" },
|
||||||
"musicSidenavTitle": { "message": "Plex-Musik" },
|
"musicSidenavTitle": { "message": "Plex Musik" },
|
||||||
"musicAllServers": { "message": "Alle Server" },
|
"musicAllServers": { "message": "Alle Server" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Suche nach einem Künstler..." },
|
"musicSearchArtistPlaceholder": { "message": "Künstler suchen..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "In Diskografie suchen..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Diskografie durchsuchen..." },
|
||||||
"musicNothingPlaying": { "message": "Nichts wird abgespielt" },
|
"musicNothingPlaying": { "message": "Nichts wird abgespielt" },
|
||||||
"musicSelectSong": { "message": "Wählen Sie ein Lied" },
|
"musicSelectSong": { "message": "Wählen Sie einen Song" },
|
||||||
"musicToStart": { "message": "um die Wiedergabe zu starten" },
|
"musicToStart": { "message": "zum Abspielen" },
|
||||||
"miniplayerDownloadSong": { "message": "Lied herunterladen" },
|
"miniplayerDownloadSong": { "message": "Song herunterladen" },
|
||||||
"miniplayerDownloadAlbum": { "message": "M3U-Album herunterladen" },
|
"miniplayerDownloadAlbum": { "message": "Album M3U herunterladen" },
|
||||||
"miniplayerVolume": { "message": "Lautstärke" },
|
"miniplayerVolume": { "message": "Lautstärke" },
|
||||||
"miniplayerShuffle": { "message": "Zufallswiedergabe" },
|
"miniplayerShuffle": { "message": "Zufallswiedergabe" },
|
||||||
"miniplayerEqualizer": { "message": "Equalizer" },
|
"miniplayerEqualizer": { "message": "Equalizer" },
|
||||||
@ -134,7 +134,7 @@
|
|||||||
"eqPresetPop": { "message": "Pop" },
|
"eqPresetPop": { "message": "Pop" },
|
||||||
"eqPresetJazz": { "message": "Jazz" },
|
"eqPresetJazz": { "message": "Jazz" },
|
||||||
"eqPresetClassical": { "message": "Klassik" },
|
"eqPresetClassical": { "message": "Klassik" },
|
||||||
"eqPresetBassBoost": { "message": "Bass-Boost" },
|
"eqPresetBassBoost": { "message": "Bass-Verstärkung" },
|
||||||
"eqPreampLabel": { "message": "Vorverstärker" },
|
"eqPreampLabel": { "message": "Vorverstärker" },
|
||||||
"infoModalTitle": { "message": "Informationen" },
|
"infoModalTitle": { "message": "Informationen" },
|
||||||
"infoModalFieldTitle": { "message": "Titel:" },
|
"infoModalFieldTitle": { "message": "Titel:" },
|
||||||
@ -156,14 +156,14 @@
|
|||||||
"deletingContentData": { "message": "Lokale Inhaltsdaten werden gelöscht..." },
|
"deletingContentData": { "message": "Lokale Inhaltsdaten werden gelöscht..." },
|
||||||
"noContentDataToDelete": { "message": "Keine Inhaltsdaten zum Löschen vorhanden." },
|
"noContentDataToDelete": { "message": "Keine Inhaltsdaten zum Löschen vorhanden." },
|
||||||
"contentDataDeleted": { "message": "Inhaltsdaten aus IndexedDB gelöscht." },
|
"contentDataDeleted": { "message": "Inhaltsdaten aus IndexedDB gelöscht." },
|
||||||
"errorDeletingData": { "message": "Fehler beim Löschen von Daten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Fehler beim Löschen der Daten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Texteditor nicht verfügbar." },
|
"aceEditorNotAvailable": { "message": "Texteditor nicht verfügbar." },
|
||||||
"errorLoadingTokens": { "message": "Fehler beim Laden der Token zur Bearbeitung." },
|
"errorLoadingTokens": { "message": "Fehler beim Laden der Tokens zum Bearbeiten." },
|
||||||
"errorLoadingTokensMessage": { "message": "Fehler beim Laden der Token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Fehler beim Laden der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Editor zum Speichern nicht verfügbar." },
|
"aceEditorNotAvailableToSave": { "message": "Editor nicht zum Speichern verfügbar." },
|
||||||
"invalidJsonFormat": { "message": "Ungültiges JSON-Format. Es muss { \"tokens\": [...] } sein" },
|
"invalidJsonFormat": { "message": "Ungültiges JSON-Format. Muss { \"tokens\": [...] } sein" },
|
||||||
"tokensSaved": { "message": "Token erfolgreich gespeichert." },
|
"tokensSaved": { "message": "Tokens erfolgreich gespeichert." },
|
||||||
"errorSavingTokens": { "message": "Fehler beim Speichern der Token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Fehler beim Speichern der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB ist nicht verfügbar." },
|
"dbNotAvailable": { "message": "IndexedDB ist nicht verfügbar." },
|
||||||
"dbExported": { "message": "Datenbank erfolgreich exportiert." },
|
"dbExported": { "message": "Datenbank erfolgreich exportiert." },
|
||||||
"errorExportingDb": { "message": "Fehler beim Exportieren der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Fehler beim Exportieren der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
@ -171,8 +171,8 @@
|
|||||||
"noDataToImport": { "message": "Die Datei enthält keine Daten für die aktuellen DB-Abschnitte." },
|
"noDataToImport": { "message": "Die Datei enthält keine Daten für die aktuellen DB-Abschnitte." },
|
||||||
"dbImported": { "message": "Datenbank erfolgreich importiert." },
|
"dbImported": { "message": "Datenbank erfolgreich importiert." },
|
||||||
"errorImportingDb": { "message": "Fehler beim Importieren der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Fehler beim Importieren der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Ansicht mit neuen Daten wird aktualisiert..." },
|
"updatingView": { "message": "Ansicht wird mit neuen Daten aktualisiert..." },
|
||||||
"confirmClearContent": { "message": "Sind Sie sicher, dass Sie lokale Inhaltsdaten (Filme, Serien, Musik usw.) löschen möchten? Favoriten und Einstellungen werden NICHT gelöscht." },
|
"confirmClearContent": { "message": "Sind Sie sicher, dass Sie die lokalen Inhaltsdaten (Filme, Serien, Musik usw.) löschen möchten? Favoriten und Einstellungen werden NICHT gelöscht." },
|
||||||
"trailerNotFound": { "message": "Kein Trailer für diesen Titel gefunden." },
|
"trailerNotFound": { "message": "Kein Trailer für diesen Titel gefunden." },
|
||||||
"confirmClearHistory": { "message": "Sind Sie sicher, dass Sie Ihren gesamten Wiedergabeverlauf löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden." },
|
"confirmClearHistory": { "message": "Sind Sie sicher, dass Sie Ihren gesamten Wiedergabeverlauf löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden." },
|
||||||
"historyCleared": { "message": "Wiedergabeverlauf gelöscht." },
|
"historyCleared": { "message": "Wiedergabeverlauf gelöscht." },
|
||||||
@ -183,40 +183,40 @@
|
|||||||
"scriptGenerated": { "message": "PHP-Skript generiert." },
|
"scriptGenerated": { "message": "PHP-Skript generiert." },
|
||||||
"errorLoadingAlbum": { "message": "Fehler beim Laden des Albums: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Fehler beim Laden des Albums: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"noPhotoServerSelected": { "message": "Fehler: Es wurde kein Fotoserver ausgewählt." },
|
"noPhotoServerSelected": { "message": "Fehler: Es wurde kein Fotoserver ausgewählt." },
|
||||||
"loadingGenres": { "message": "Lade Genres..." },
|
"loadingGenres": { "message": "Genres laden..." },
|
||||||
"errorLoadingGenres": { "message": "Fehler beim Laden" },
|
"errorLoadingGenres": { "message": "Fehler beim Laden" },
|
||||||
"noContentFound": { "message": "Keine Ergebnisse gefunden." },
|
"noContentFound": { "message": "Keine Ergebnisse gefunden." },
|
||||||
"couldNotLoadContent": { "message": "Inhalt konnte nicht geladen werden." },
|
"couldNotLoadContent": { "message": "Inhalt konnte nicht geladen werden." },
|
||||||
"noFavorites": { "message": "Sie haben noch keine Favoriten." },
|
"noFavorites": { "message": "Sie haben noch keine Favoriten." },
|
||||||
"errorLoadingFavorites": { "message": "Fehler beim Laden der Favoriten." },
|
"errorLoadingFavorites": { "message": "Fehler beim Laden der Favoriten." },
|
||||||
"historyEmpty": { "message": "Ihr Verlauf ist leer." },
|
"historyEmpty": { "message": "Ihr Verlauf ist leer." },
|
||||||
"historyEmptySub": { "message": "Entdecken und sehen Sie sich Inhalte an, damit sie hier erscheinen." },
|
"historyEmptySub": { "message": "Durchsuchen und schauen Sie Inhalte, damit sie hier erscheinen." },
|
||||||
"errorGeneratingRecommendations": { "message": "Fehler beim Generieren von Empfehlungen." },
|
"errorGeneratingRecommendations": { "message": "Fehler beim Generieren von Empfehlungen." },
|
||||||
"noRecommendations": { "message": "Wir müssen Sie besser kennenlernen, um Ihnen Empfehlungen geben zu können!" },
|
"noRecommendations": { "message": "Wir müssen Sie besser kennenlernen, um Empfehlungen geben zu können!" },
|
||||||
"errorGeneratingStats": { "message": "Fehler beim Generieren von Statistiken." },
|
"errorGeneratingStats": { "message": "Fehler beim Generieren von Statistiken." },
|
||||||
"noServersForToken": { "message": "Keine zugehörigen Server für dieses Token gefunden." },
|
"noServersForToken": { "message": "Keine zugehörigen Server für dieses Token gefunden." },
|
||||||
"searchingActorContent": { "message": "Suche nach Inhalten von $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Suche Inhalt von $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"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 konfigurieren Sie sie in den Einstellungen." },
|
"phpUrlNotConfigured": { "message": "Die PHP-Server-URL ist nicht konfiguriert. Bitte konfigurieren Sie sie in den Einstellungen." },
|
||||||
"searchingStreams": { "message": "Suche nach Streams für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Suche 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": "\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "„$title$“ heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorGeneratingM3U": { "message": "Fehler beim Generieren von M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Fehler beim Generieren von 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 den Favoriten hinzugefügt." },
|
"addedToFavorites": { "message": "Zu Favoriten hinzugefügt." },
|
||||||
"removedFromFavorites": { "message": "Aus den Favoriten entfernt." },
|
"removedFromFavorites": { "message": "Aus Favoriten entfernt." },
|
||||||
"plexScanInProgress": { "message": "Plex-Scan läuft bereits." },
|
"plexScanInProgress": { "message": "Der Plex-Scan läuft bereits." },
|
||||||
"plexScanStarting": { "message": "Plex-Scan wird gestartet..." },
|
"plexScanStarting": { "message": "Plex-Scan wird gestartet..." },
|
||||||
"noPlexTokens": { "message": "Keine Plex-Token konfiguriert." },
|
"noPlexTokens": { "message": "Keine Plex-Tokens konfiguriert." },
|
||||||
"clearingSections": { "message": "Lösche Abschnitte: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Abschnitte werden gelöscht: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Erste Scanphase abgeschlossen." },
|
"initialScanPhaseComplete": { "message": "Erste Scanphase abgeschlossen." },
|
||||||
"retryPhaseFinished": { "message": "Wiederholungsphase abgeschlossen." },
|
"retryPhaseFinished": { "message": "Wiederholungsphase abgeschlossen." },
|
||||||
"plexScanFinished": { "message": "Scan abgeschlossen. Inhalt wird aktualisiert..." },
|
"plexScanFinished": { "message": "Scan abgeschlossen. Inhalte werden aktualisiert..." },
|
||||||
"scanCancelled": { "message": "Scan vom Benutzer abgebrochen." },
|
"scanCancelled": { "message": "Scan vom Benutzer abgebrochen." },
|
||||||
"scanCancelledInfo": { "message": "Scan abgebrochen." },
|
"scanCancelledInfo": { "message": "Scan abgebrochen." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Fehler beim Initialisieren des Musik-Players." },
|
"errorInitializingMusicPlayer": { "message": "Fehler beim Initialisieren des Musik-Players." },
|
||||||
@ -225,11 +225,11 @@
|
|||||||
"dbUnavailableError": { "message": "Fehler: Datenbank nicht verfügbar." },
|
"dbUnavailableError": { "message": "Fehler: Datenbank nicht verfügbar." },
|
||||||
"updatingMusicData": { "message": "Musikdaten werden aktualisiert..." },
|
"updatingMusicData": { "message": "Musikdaten werden aktualisiert..." },
|
||||||
"musicDataUpdated": { "message": "Musikdaten aktualisiert." },
|
"musicDataUpdated": { "message": "Musikdaten aktualisiert." },
|
||||||
"errorFetchingArtistSongs": { "message": "Fehler beim Abrufen der Lieder des Künstlers." },
|
"errorFetchingArtistSongs": { "message": "Fehler beim Abrufen der Künstlersongs." },
|
||||||
"errorLoadingSongs": { "message": "Fehler beim Laden der Lieder." },
|
"errorLoadingSongs": { "message": "Fehler beim Laden der Songs." },
|
||||||
"noArtistsFound": { "message": "Keine Künstler gefunden." },
|
"noArtistsFound": { "message": "Keine Künstler gefunden." },
|
||||||
"shuffleOn": { "message": "Zufallswiedergabe ein." },
|
"shuffleOn": { "message": "Zufallswiedergabe aktiviert." },
|
||||||
"shuffleOff": { "message": "Zufallswiedergabe aus." },
|
"shuffleOff": { "message": "Zufallswiedergabe deaktiviert." },
|
||||||
"playbackError": { "message": "Wiedergabefehler" },
|
"playbackError": { "message": "Wiedergabefehler" },
|
||||||
"errorLabel": { "message": "Fehler" },
|
"errorLabel": { "message": "Fehler" },
|
||||||
"reloadingPage": { "message": "Seite wird neu geladen..." },
|
"reloadingPage": { "message": "Seite wird neu geladen..." },
|
||||||
@ -240,34 +240,32 @@
|
|||||||
"popularSort": {"message": "Beliebteste"},
|
"popularSort": {"message": "Beliebteste"},
|
||||||
"moviesSectionTitle": {"message": "Filme"},
|
"moviesSectionTitle": {"message": "Filme"},
|
||||||
"seriesSectionTitle": {"message": "Serien"},
|
"seriesSectionTitle": {"message": "Serien"},
|
||||||
"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": "Erkunden"},
|
||||||
"noGenre": {"message": "Ohne Kategorie"},
|
"noGenre": {"message": "Ohne Kategorie"},
|
||||||
"synopsis": {"message": "Zusammenfassung"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "Keine Zusammenfassung verfügbar."},
|
"noSynopsis": {"message": "Keine Synopsis verfügbar."},
|
||||||
"director": {"message": "Regisseur:"},
|
"director": {"message": "Regisseur:"},
|
||||||
"writer": {"message": "Autor:"},
|
"writer": {"message": "Drehbuchautor:"},
|
||||||
"viewOnImdb": {"message": "Auf IMDb ansehen"},
|
"viewOnImdb": {"message": "Auf IMDb ansehen"},
|
||||||
"watchTrailer": {"message": "Trailer ansehen"},
|
"watchTrailer": {"message": "Trailer ansehen"},
|
||||||
"addToFavorites": {"message": "Zu den Favoriten hinzufügen"},
|
"addToFavorites": {"message": "Zu Favoriten hinzufügen"},
|
||||||
"removeFromFavorites": {"message": "Aus den Favoriten entfernen"},
|
"removeFromFavorites": {"message": "Aus Favoriten entfernen"},
|
||||||
"notAvailable": {"message": "Nicht verfügbar"},
|
"notAvailable": {"message": "Nicht verfügbar"},
|
||||||
"mainCast": {"message": "Hauptbesetzung"},
|
"mainCast": {"message": "Hauptdarsteller"},
|
||||||
"seasonsAndEpisodes": {"message": "Staffeln und Episoden"},
|
"seasonsAndEpisodes": {"message": "Staffeln und Episoden"},
|
||||||
"similarContent": {"message": "Ähnlicher Inhalt"},
|
"similarContent": {"message": "Ähnlicher Inhalt"},
|
||||||
"filmography": {"message": "Filmografie"},
|
|
||||||
"availableOn": {"message": "Verfügbar auf"},
|
|
||||||
"episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
|
"episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"seasonsCount": {"message": "$count$ Staffeln", "placeholders": {"count": {"content": "$1"}}},
|
"seasonsCount": {"message": "$count$ Staffeln", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
"runtimeMinutes": {"message": "$count$ Min", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},
|
"noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},
|
||||||
"fatalInitError": {"message": "Fataler Initialisierungsfehler"},
|
"fatalInitError": {"message": "Fataler Initialisierungsfehler"},
|
||||||
"fatalInitErrorSub": {"message": "Die Anwendung konnte nicht geladen werden."},
|
"fatalInitErrorSub": {"message": "Anwendung konnte nicht geladen werden."},
|
||||||
"invalidStreamInfo": {"message": "Ungültige Informationen."},
|
"invalidStreamInfo": {"message": "Ungültige Informationen."},
|
||||||
"dbUnavailableForStreams": {"message": "Lokale Datenbank nicht verfügbar."},
|
"dbUnavailableForStreams": {"message": "Lokale Datenbank nicht verfügbar."},
|
||||||
"noPlexServersForStreams": {"message": "Keine Plex-Server."},
|
"noPlexServersForStreams": {"message": "Keine Plex-Server vorhanden."},
|
||||||
"notFoundOnServers": {"message": "\"$query$\" auf Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "„$query$“ wurde auf den Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "Gerade eben" },
|
"relativeTime_justNow": { "message": "Gerade eben" },
|
||||||
"relativeTime_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },
|
||||||
@ -275,35 +273,35 @@
|
|||||||
"relativeTime_daysAgo": { "message": "Vor $count$ Tagen", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_daysAgo": { "message": "Vor $count$ Tagen", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"errorLoadingDetails": { "message": "Fehler beim Laden der Details" },
|
"errorLoadingDetails": { "message": "Fehler beim Laden der Details" },
|
||||||
"errorLoadingLocalContent": { "message": "Fehler beim Laden des lokalen Inhalts." },
|
"errorLoadingLocalContent": { "message": "Fehler beim Laden des lokalen Inhalts." },
|
||||||
"errorServerResponse": { "message": "Nicht erfolgreiche Serverantwort." },
|
"errorServerResponse": { "message": "Unerfolgreiche Serverantwort." },
|
||||||
"errorPlexApi": { "message": "Plex-API-Fehler $status$.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Plex API-Fehler $status$.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Fehler beim Parsen von Plex-XML." },
|
"errorParsingPlexXml": { "message": "Fehler beim Parsen der Plex-XML." },
|
||||||
"untitled": { "message": "Ohne Titel" },
|
"untitled": { "message": "Unbetitelt" },
|
||||||
"itemCount": { "message": "$count$ Elemente", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ Elemente", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Keine Fotoserver" },
|
"noPhotoServers": { "message": "Keine Fotoserver" },
|
||||||
"jellyfinScanInProgress": { "message": "Jellyfin-Scan läuft bereits." },
|
"jellyfinScanInProgress": { "message": "Der Jellyfin-Scan läuft bereits." },
|
||||||
"jellyfinScanning": { "message": "Scanne Jellyfin..." },
|
"jellyfinScanning": { "message": "Jellyfin wird gescannt..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Bitte vervollständigen Sie die Jellyfin-URL und den Benutzernamen." },
|
"jellyfinMissingCredentials": { "message": "Bitte geben Sie die Jellyfin-URL und den Benutzernamen an." },
|
||||||
"jellyfinConnecting": { "message": "Verbinde mit Jellyfin unter: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Verbindung zu Jellyfin wird hergestellt unter: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Jellyfin-Authentifizierung fehlgeschlagen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Jellyfin-Authentifizierung fehlgeschlagen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Jellyfin-Authentifizierung erfolgreich." },
|
"jellyfinAuthSuccess": { "message": "Jellyfin-Authentifizierung erfolgreich." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Rufe Bibliotheken ab..." },
|
"jellyfinFetchingLibraries": { "message": "Bibliotheken werden abgerufen..." },
|
||||||
"jellyfinFetchFailed": { "message": "Fehler beim Abrufen der Bibliotheken: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Fehler beim Abrufen der Bibliotheken: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Keine Film- oder Serienbibliotheken in Jellyfin gefunden." },
|
"jellyfinNoMediaLibraries": { "message": "Keine Film- oder Serienbibliotheken in Jellyfin gefunden." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ Medienbibliothek(en) gefunden.", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ Medienbibliothek(en) gefunden.", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Erfolg] '$libraryName' gescannt, $count$ Titel hinzugefügt.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Erfolg] „$libraryName$“ gescannt, $count$ Titel hinzugefügt.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Fehler beim Scannen der Bibliothek '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Fehler beim Scannen der Bibliothek „$libraryName$“.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Jellyfin-Scan abgeschlossen. $movies$ Filme und $series$ Serien hinzugefügt.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Jellyfin-Scan abgeschlossen. $movies$ Filme und $series$ Serien hinzugefügt.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Jellyfin-Anmeldeinformationen nicht konfiguriert." },
|
"noJellyfinCredentials": { "message": "Jellyfin-Anmeldeinformationen nicht konfiguriert." },
|
||||||
"notFoundOnJellyfin": { "message": "\"$query$\" auf Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "„$query$“ wurde in Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "\"$query$\" auf keinem Server gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "„$query$“ wurde auf keinem Server gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"localOnPlex": { "message": "Auf Plex" },
|
"localOnPlex": { "message": "Auf Plex" },
|
||||||
"searchOnPlex": { "message": "Auf Plex suchen" },
|
"searchOnPlex": { "message": "Auf Plex suchen" },
|
||||||
"jellyfinTitle": { "message": "Jellyfin-Inhalt" },
|
"jellyfinTitle": { "message": "Jellyfin-Inhalt" },
|
||||||
"noJellyfinContent": { "message": "Kein Jellyfin-Inhalt gefunden." },
|
"noJellyfinContent": { "message": "Kein Jellyfin-Inhalt gefunden." },
|
||||||
"noJellyfinContentSub": { "message": "Stellen Sie sicher, dass Sie Ihren Jellyfin-Server in den Einstellungen gescannt haben." },
|
"noJellyfinContentSub": { "message": "Stellen Sie sicher, dass Sie Ihren Jellyfin-Server in den Einstellungen gescannt haben." },
|
||||||
"activityViewerTitle": { "message": "Server-Aktivitätsanzeige" },
|
"activityViewerTitle": { "message": "Server-Aktivitätsanzeige" },
|
||||||
"activitySelectServer": { "message": "Wählen Sie einen Server" },
|
"activitySelectServer": { "message": "Server auswählen" },
|
||||||
"activityCheckBtn": { "message": "Aktualisieren" },
|
"activityCheckBtn": { "message": "Aktualisieren" },
|
||||||
"activityNoSessions": { "message": "Keine aktiven Sitzungen auf diesem Server." },
|
"activityNoSessions": { "message": "Keine aktiven Sitzungen auf diesem Server." },
|
||||||
"activitySessionUser": { "message": "Benutzer" },
|
"activitySessionUser": { "message": "Benutzer" },
|
||||||
@ -312,19 +310,19 @@
|
|||||||
"activitySessionState": { "message": "Status" },
|
"activitySessionState": { "message": "Status" },
|
||||||
"activitySessionIdentifier": { "message": "Client-Identifikator" },
|
"activitySessionIdentifier": { "message": "Client-Identifikator" },
|
||||||
"activityCopyID": { "message": "ID kopieren" },
|
"activityCopyID": { "message": "ID kopieren" },
|
||||||
"activityError": { "message": "Serveraktivität konnte nicht abgerufen werden." },
|
"activityError": { "message": "Aktivität des Servers konnte nicht abgerufen werden." },
|
||||||
"activityCopied": { "message": "Identifikator in die Zwischenablage kopiert!" },
|
"activityCopied": { "message": "Identifikator in die Zwischenablage kopiert!" },
|
||||||
"activityCopyError": { "message": "Fehler beim Kopieren des Identifikators." },
|
"activityCopyError": { "message": "Fehler beim Kopieren des Identifikators." },
|
||||||
"noProvidersFound": { "message": "Keine Anbieter gefunden." },
|
"noProvidersFound": { "message": "Keine Anbieter gefunden." },
|
||||||
"availableOnPlex": { "message": "Verfügbar auf Plex" },
|
"availableOnPlex": { "message": "Verfügbar auf Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "M3U-Listen-Generator" },
|
"m3uGeneratorTitle": { "message": "M3U-Listen-Generator" },
|
||||||
"selectAServer": { "message": "Wählen Sie einen Server..." },
|
"selectAServer": { "message": "Server auswählen..." },
|
||||||
"downloadM3u": { "message": "M3U herunterladen" },
|
"downloadM3u": { "message": "M3U herunterladen" },
|
||||||
"m3uGenerator": { "message": "M3U-Generator" },
|
"m3uGenerator": { "message": "M3U-Generator" },
|
||||||
"selectLibraries": { "message": "Bibliotheken auswählen" },
|
"selectLibraries": { "message": "Bibliotheken auswählen" },
|
||||||
"howToUse": { "message": "Anwendung" },
|
"howToUse": { "message": "Anleitung" },
|
||||||
"m3uInstruction1": { "message": "Wählen Sie einen Server aus der Liste." },
|
"m3uInstruction1": { "message": "Wählen Sie einen Server aus der Liste." },
|
||||||
"m3uInstruction2": { "message": "Wählen Sie eine oder mehrere Bibliotheken aus, die einbezogen werden sollen." },
|
"m3uInstruction2": { "message": "Wählen Sie eine oder mehrere Bibliotheken zum Einschließen aus." },
|
||||||
"m3uInstruction3": { "message": "Klicken Sie auf die Download-Schaltfläche." },
|
"m3uInstruction3": { "message": "Klicken Sie auf die Download-Schaltfläche." },
|
||||||
"m3uInstruction4": { "message": "Importieren Sie die .m3u-Datei in Ihren kompatiblen Player." },
|
"m3uInstruction4": { "message": "Importieren Sie die .m3u-Datei in Ihren kompatiblen Player." },
|
||||||
"chatOpen": { "message": "Chat öffnen" },
|
"chatOpen": { "message": "Chat öffnen" },
|
||||||
@ -332,118 +330,112 @@
|
|||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Geben Sie Ihre Nachricht ein..." },
|
"chatPlaceholder": { "message": "Geben Sie Ihre Nachricht ein..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Willkommen! Ich bin Ihr CinePlex-Assistent. Fragen Sie mich nach Filmen, Serien oder allem, was Sie sonst noch wissen möchten." },
|
"chatWelcome": { "message": "Willkommen! Ich bin Ihr CinePlex-Assistent. Fragen Sie mich nach Filmen, Serien oder allem, was Sie wissen möchten." },
|
||||||
"chatGoogleApiKeyMissing": { "message": "Der Google Gemini-API-Schlüssel ist nicht konfiguriert. Bitte legen Sie ihn in den Erweiterungseinstellungen fest, um den KI-Assistenten zu verwenden." },
|
"chatGoogleApiKeyMissing": { "message": "Der Google Gemini API-Schlüssel ist nicht konfiguriert. Bitte richten Sie ihn in den Erweiterungseinstellungen ein, um den KI-Assistenten zu verwenden." },
|
||||||
"chatApiInvalidResponse": { "message": "Die API hat eine ungültige Antwort zurückgegeben. Bitte versuchen Sie es erneut." },
|
"chatApiInvalidResponse": { "message": "Die API hat eine ungültige Antwort zurückgegeben. Bitte versuchen Sie es erneut." },
|
||||||
"chatApiError": { "message": "Fehler bei der Kommunikation mit dem KI-Assistenten" },
|
"chatApiError": { "message": "Fehler bei der Kommunikation mit dem KI-Assistenten" },
|
||||||
"downloadAll": { "message": "Alles herunterladen" },
|
"downloadAll": { "message": "Alles herunterladen" },
|
||||||
"download": { "message": "Herunterladen" },
|
"download": { "message": "Herunterladen" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Durchsucht die Plex-Bibliothek des Benutzers nach Filmen oder Serien nach Titel." },
|
"aiToolSearchLibraryDesc": { "message": "Sucht in der Plex-Bibliothek des Benutzers nach Filmen oder Serien nach Titel." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Der Titel des zu suchenden Films oder der zu suchenden Serie." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "Der Titel des Films oder der Serie, die gesucht werden soll." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Der Typ des zu suchenden Inhalts. Kann 'movie' für Filme oder 'series' für Serien sein. (Optional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "Der Typ des Inhalts, der gesucht werden soll. Kann 'movie' für Filme oder 'series' für Serien sein. (Optional)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "Die zu suchende Videoauflösung (z. B. '4k', '1080p'). (Optional)." },
|
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "Das zu suchende Video-Containerformat (z. B. 'mkv', 'mp4'). (Optional)." },
|
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navigiert den Benutzer zu einer bestimmten Seite der Anwendungsoberfläche." },
|
"aiToolNavigateToPageDesc": { "message": "Navigiert den Benutzer zu einer bestimmten Seite der Anwendungsoberfläche." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "Der Name der Seite, zu der navigiert werden soll, z. B.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' oder 'm3u-generator'." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "Der Name der Seite, zu der navigiert werden soll, z.B.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' oder 'm3u-generator'." },
|
||||||
"aiToolGetUserStatsDesc": { "message": "Ruft die Bibliotheksstatistiken des Benutzers ab und zeigt sie an, z. B. die Gesamtzahl der einzigartigen Filme, Serien und Künstler." },
|
"aiToolGetUserStatsDesc": { "message": "Ruft die Bibliotheksstatistiken des Benutzers ab und zeigt sie an, wie z.B. die Gesamtzahl der einzigartigen Filme, Serien und Künstler." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Detailseite eines bestimmten Films oder einer bestimmten Serie nach Titel und Typ an." },
|
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Detailseite eines bestimmten Films oder einer Serie nach Titel und Typ an." },
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "Der genaue Titel des Films oder der Serie." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "Der genaue Titel des Films oder der Serie." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "Der Typ des Inhalts. Muss 'movie' oder 'series' sein." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Fügt einen Film oder eine Serie zur aktuellen Wiedergabeliste des Benutzers hinzu, um sie an einen konfigurierten PHP-Server zu streamen." },
|
"aiToolAddToPlaylistDesc": { "message": "Fügt einen Film oder eine Serie zur aktuellen Wiedergabeliste des Benutzers hinzu, um sie an einen konfigurierten PHP-Server zu streamen." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Der Titel des hinzuzufügenden Films oder der hinzuzufügenden Serie." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "Der Titel des hinzuzufügenden Films oder der Serie." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Der Typ des Inhalts. Muss 'movie' oder 'series' sein." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
||||||
"aiToolCheckAndDownloadDesc": { "message": "Überprüft die Verfügbarkeit einer Liste von Film- oder Serientiteln auf den lokalen Servern des Benutzers und generiert und lädt, falls gefunden, eine M3U-Wiedergabelistendatei mit den gefundenen Streams herunter." },
|
"aiToolCheckAndDownloadDesc": { "message": "Überprüft die Verfügbarkeit einer Liste von Filmen oder Serientiteln auf den lokalen Servern des Benutzers und generiert, falls gefunden, eine M3U-Wiedergabelistendatei mit den gefundenen Streams und lädt diese herunter." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Ein Array von Film- oder Serientiteln zum Suchen und Herunterladen." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Ein Array von Film- oder Serientiteln zum Suchen und Herunterladen." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Der Inhaltstyp der Liste. Muss 'movie' oder 'series' sein." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Der Inhaltstyp der Liste. Muss 'movie' oder 'series' sein." },
|
||||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Der Name der herunterzuladenden M3U-Datei (z. B. 'MeineListe.m3u'). Wenn nicht angegeben, wird ein Standardname verwendet." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Der Name der herunterzuladenden M3U-Datei (z.B. 'MeineListe.m3u'). Falls nicht angegeben, wird ein Standardname verwendet." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zur Favoritenliste des Benutzers hinzu oder entfernt sie daraus." },
|
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zur Favoritenliste des Benutzers hinzu oder entfernt sie." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Der Titel des Films oder der Serie." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Der Typ des Inhalts. Muss 'movie' oder 'series' sein." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
||||||
"aiToolGetRecommendationsDesc": { "message": "Generiert und zeigt eine Liste von Film- oder Serienempfehlungen basierend auf dem Wiedergabeverlauf und den Favoriten des Benutzers an." },
|
"aiToolGetRecommendationsDesc": { "message": "Generiert und zeigt eine Liste von Film- oder Serienempfehlungen basierend auf dem Wiedergabeverlauf und den Favoriten des Benutzers an." },
|
||||||
"aiToolApplyFiltersDesc": { "message": "Wendet Filter auf die aktuelle Ansicht von Filmen oder Serien an, um die Ergebnisse nach Typ, Genre, Jahr und Sortierreihenfolge zu verfeinern." },
|
"aiToolApplyFiltersDesc": { "message": "Wendet Filter auf die aktuelle Film- oder Serienansicht an, wodurch die Ergebnisse nach Typ, Genre, Jahr und Sortierreihenfolge verfeinert werden können." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Der Typ des Inhalts, auf den die Filter angewendet werden sollen. Muss 'movie' oder 'series' sein." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "Der Inhaltstyp, auf den die Filter angewendet werden sollen. Muss 'movie' oder 'series' sein." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "Der Name des Genres, nach dem gefiltert werden soll (z. B. 'Action', 'Drama')." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "Der Name des Genres, nach dem gefiltert werden soll (z.B. 'Action', 'Drama')." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "Das Erscheinungsjahr, nach dem gefiltert werden soll (z. B. '2023')." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "Das Erscheinungsjahr, nach dem gefiltert werden soll (z.B. '2023')." },
|
||||||
"aiToolApplyFiltersSortParamDesc": { "message": "Das Sortierkriterium für die Ergebnisse. Gültige Werte: 'popularity.desc' (beliebt), 'vote_average.desc' (am besten bewertet), 'release_date.desc' (neu für Filme) oder 'first_air_date.desc' (neu für Serien)." },
|
"aiToolApplyFiltersSortParamDesc": { "message": "Das Sortierkriterium für die Ergebnisse. Gültige Werte: 'popularity.desc' (beliebteste), 'vote_average.desc' (am besten bewertet), 'release_date.desc' (neueste für Filme) oder 'first_air_date.desc' (neueste für Serien)." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Öffnet den Musik-Player und beginnt mit der Wiedergabe von Liedern eines bestimmten Künstlers aus der Bibliothek des Benutzers." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Öffnet den Musik-Player und beginnt mit der Wiedergabe von Liedern eines bestimmten Künstlers aus der Bibliothek des Benutzers." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Der genaue Name des Künstlers, dessen Lieder abgespielt werden sollen." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Der genaue Name des Künstlers, dessen Lieder abgespielt werden sollen." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Löscht den gesamten Nachrichtenverlauf der aktuellen Konversation mit dem KI-Assistenten." },
|
"aiToolClearChatHistoryDesc": { "message": "Löscht den gesamten Nachrichtenverlauf der aktuellen Konversation mit dem KI-Assistenten." },
|
||||||
"aiToolDeleteDatabaseDesc": { "message": "Löscht die gesamte lokale Datenbank der Erweiterung, einschließlich gescannter Inhalte, Einstellungen und Favoriten. Diese Aktion ist irreversibel und lädt die Anwendung neu." },
|
"aiToolDeleteDatabaseDesc": { "message": "Löscht die gesamte lokale Datenbank der Erweiterung, einschließlich gescannter Inhalte, Einstellungen und Favoriten. Diese Aktion ist irreversibel und lädt die Anwendung neu." },
|
||||||
"aiToolUpdateAllTokensDesc": { "message": "Startet einen vollständigen Scan aller Plex-Server und Bibliotheken, die mit den in der Erweiterung konfigurierten Token verknüpft sind. Aktualisiert alle Filme, Serien, Künstler und Fotos." },
|
"aiToolUpdateAllTokensDesc": { "message": "Startet einen vollständigen Scan aller Plex-Server und Bibliotheken, die mit den in der Erweiterung konfigurierten Tokens verknüpft sind. Aktualisiert alle Filme, Serien, Künstler und Fotos." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Fügt der Konfiguration der Erweiterung einen neuen X-Plex-Token hinzu, sodass die Anwendung Inhalte von neuen Plex-Servern scannen kann." },
|
"aiToolAddPlexTokenDesc": { "message": "Fügt der Konfiguration der Erweiterung einen neuen X-Plex-Token hinzu, wodurch die Anwendung Inhalte von neuen Plex-Servern scannen kann." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "Die hinzuzufügende X-Plex-Token-Zeichenfolge." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "Die X-Plex-Token-Zeichenfolge, die hinzugefügt werden soll." },
|
||||||
"aiToolChangeRegionDesc": { "message": "Ändert die für die Inhaltsentdeckung in der TMDB-API verwendete Region. Dies wirkt sich auf die in den Film- und Serienabschnitten angezeigten Ergebnisse sowie auf die Streaming-Anbieter aus." },
|
"aiToolChangeRegionDesc": { "message": "Ändert die Region, die für die Inhaltserkennung in der TMDB-API verwendet wird. Dies wirkt sich auf die in den Film- und Serienabschnitten angezeigten Ergebnisse sowie auf Streaming-Anbieter aus." },
|
||||||
"aiToolChangeRegionRegionParamDesc": { "message": "Der zweibuchstabige ISO 3166-1-Ländercode für die neue Region (z. B. 'US' für die Vereinigten Staaten, 'ES' für Spanien, 'MX' für Mexiko)." },
|
"aiToolChangeRegionRegionParamDesc": { "message": "Der zweibuchstabige ISO 3166-1 Ländercode für die neue Region (z.B. 'US' für die Vereinigten Staaten, 'ES' für Spanien, 'MX' für Mexiko)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Entfernt alle Filme und Serien, die der Benutzer als Favoriten markiert hat." },
|
"aiToolClearAllFavoritesDesc": { "message": "Entfernt alle Filme und Serien, die der Benutzer als Favoriten markiert hat." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Löscht den Wiedergabeverlauf des Benutzers von der Verlaufsseite." },
|
"aiToolClearViewingHistoryDesc": { "message": "Löscht den Wiedergabeverlauf des Benutzers von der Verlaufsseite." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Löscht die Empfehlungsansicht und entfernt zwischengespeicherte Empfehlungen." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Leert die Empfehlungsansicht und löscht zwischengespeicherte Empfehlungen." },
|
||||||
"aiToolSearchNotFound": { "message": "'$query' in Ihrer Bibliothek nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "„$query$“ in Ihrer Bibliothek nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Zur Seite $page$ navigiert.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Zur Seite „$page$“ navigiert.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Fehler beim Navigieren zur Seite $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Fehler beim Navigieren zur Seite „$page$“.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Fehler beim Abrufen der Statistiken." },
|
"aiToolStatsError": { "message": "Fehler beim Abrufen der Statistiken." },
|
||||||
"aiToolItemNotFound": { "message": "Element '$title' nicht gefunden.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Element „$title$“ nicht gefunden.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Zeige Details für '$title'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Details für „$title$“ werden angezeigt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "'$title' zur Wiedergabeliste hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "„$title$“ zur Wiedergabeliste hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "'$title' zu den Favoriten hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "„$title$“ zu Favoriten hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "'$title' aus den Favoriten entfernt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "„$title$“ aus Favoriten entfernt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Zeige Empfehlungen an." },
|
"aiToolRecommendationsSuccess": { "message": "Empfehlungen werden angezeigt." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre' nicht gefunden.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genre „$genre$“ nicht gefunden.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filter erfolgreich angewendet." },
|
"aiToolApplyFiltersSuccess": { "message": "Filter erfolgreich angewendet." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "Der Musik-Player ist nicht bereit. Stellen Sie sicher, dass Ihre Plex-Musikbibliothek gescannt wurde." },
|
"aiToolPlayMusicNotReady": { "message": "Der Musik-Player ist nicht bereit. Stellen Sie sicher, dass Ihre Plex-Musikbibliothek gescannt wurde." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Künstler '$artist_name' nicht gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Künstler „$artist_name$“ nicht gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "Keine Lieder für '$artist_name' gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "Keine Songs für „$artist_name$“ gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Spiele Musik von '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Spiele Musik von „$artist_name$“.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Chatverlauf gelöscht." },
|
"aiToolChatHistoryCleared": { "message": "Chat-Verlauf gelöscht." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "Sind Sie sicher, dass Sie die lokale Datenbank löschen möchten? Diese Aktion ist irreversibel." },
|
"aiToolConfirmDeleteDatabase": { "message": "Sind Sie sicher, dass Sie die lokale Datenbank löschen möchten? Diese Aktion ist irreversibel." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Löschen der Datenbank abgebrochen." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Löschen der Datenbank abgebrochen." },
|
||||||
"aiToolExecutionError": { "message": "Fehler beim Ausführen des Tools '$toolName': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolExecutionError": { "message": "Fehler beim Ausführen des Tools „$toolName$“: $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolUnknown": { "message": "Unbekanntes Tool: '$toolName'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Unbekanntes Tool: „$toolName$“.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Favoriten gelöscht." },
|
"aiToolFavoritesCleared": { "message": "Favoriten gelöscht." },
|
||||||
"aiToolFavoritesClearError": { "message": "Fehler beim Löschen der Favoriten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Fehler beim Löschen der Favoriten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Empfehlungen gelöscht." },
|
"aiToolRecommendationsCleared": { "message": "Empfehlungen gelöscht." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Fehler beim Löschen der Empfehlungen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Fehler beim Löschen der Empfehlungen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Datenbank gelöscht. Die Seite wird neu geladen." },
|
"aiToolDatabaseDeleted": { "message": "Datenbank gelöscht. Die Seite wird neu geladen." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Fehler beim Löschen der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Fehler beim Löschen der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "Das Löschen der Datenbank ist blockiert. Schließen Sie andere Tabs der Anwendung." },
|
"aiToolDatabaseDeleteBlocked": { "message": "Das Löschen der Datenbank ist blockiert. Schließen Sie andere App-Tabs." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "Alle Token wurden erfolgreich aktualisiert." },
|
"aiToolUpdateAllTokensSuccess": { "message": "Alle Tokens erfolgreich aktualisiert." },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Plex-Token erfolgreich hinzugefügt." },
|
"aiToolAddPlexTokenSuccess": { "message": "Plex-Token erfolgreich hinzugefügt." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Fehler beim Hinzufügen des Plex-Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Fehler beim Hinzufügen des Plex-Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Region auf $region$ geändert. Der Inhalt wird aktualisiert.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Region auf $region$ geändert. Inhalt wird aktualisiert.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionError": { "message": "Fehler beim Ändern der Region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Fehler beim Ändern der Region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Wiedergabeverlauf gelöscht." },
|
"aiToolViewingHistoryCleared": { "message": "Wiedergabeverlauf gelöscht." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Fehler beim Löschen des Wiedergabeverlaufs: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Fehler beim Löschen des Wiedergabeverlaufs: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiSystemPrompt_v3": { "message": "Sie sind ein erfahrener Film- und Serienassistent namens CinePlex. Ihre Hauptfunktion besteht darin, Benutzern bei der Entdeckung von Inhalten und der Interaktion mit ihrer Bibliothek zu helfen. Befolgen Sie diese Regeln strikt: 1. **TUN SIE NIEMALS SO**, als hätten Sie eine Aktion ausgeführt, wenn Sie kein Werkzeug dafür verwendet haben. Sagen Sie zum Beispiel nicht 'Ich habe X heruntergeladen', wenn Sie das Download-Tool nicht verwendet haben. 2. Bei Empfehlungs- oder Listenanfragen (z. B. 'Nennen Sie mir 5 Horrorfilme') verwenden Sie Ihr eigenes Wissen, um die Liste zu erstellen. Präsentieren Sie sie in nummerierter oder Aufzählungsform. Fragen Sie den Benutzer nach der Anzeige der Liste proaktiv, ob er die Verfügbarkeit auf seinen lokalen Servern überprüfen und eine M3U-Datei erstellen soll. 3. **NUR** wenn der Benutzer bestätigt, dass er die Liste überprüfen oder herunterladen möchte, verwenden Sie das Tool `check_and_download_titles_list`. Verwenden Sie es nicht ohne ausdrückliche Bestätigung. 4. Für alle anderen Aktionen wie das Navigieren, das Abrufen von Statistiken, das Suchen nach einem bestimmten Titel oder das Filtern nach Auflösung oder Container verwenden Sie die entsprechenden Tools. Seien Sie immer prägnant, freundlich und effizient." },
|
"aiSystemPrompt_v3": { "message": "Sie sind ein erfahrener Film- und Serienassistent namens CinePlex. Ihre Hauptfunktion ist es, Benutzern dabei zu helfen, Inhalte zu entdecken und mit ihrer Bibliothek zu interagieren. Befolgen Sie diese Regeln strikt: 1. **ERFINDEN SIE NIEMALS**, dass Sie eine Aktion durchgeführt haben, wenn Sie dafür kein Werkzeug verwendet haben. Sagen Sie zum Beispiel nicht „Ich habe X heruntergeladen“, wenn Sie das Download-Tool nicht verwendet haben. 2. Für Empfehlungsanfragen oder Listen (z.B. „Nennen Sie mir 5 Horrorfilme“) verwenden Sie Ihr eigenes Wissen, um die Liste zu erstellen. Präsentieren Sie sie in nummerierter oder aufgezählter Form. Nachdem Sie die Liste angezeigt haben, fragen Sie den Benutzer proaktiv, ob Sie die Verfügbarkeit auf seinen lokalen Servern überprüfen und eine M3U-Datei erstellen sollen. 3. Verwenden Sie das Tool `check_and_download_titles_list` **NUR**, wenn der Benutzer ausdrücklich bestätigt, dass er die Liste überprüfen oder herunterladen möchte. Verwenden Sie es nicht ohne explizite Bestätigung. 4. Für alle anderen Aktionen wie Navigieren, Statistiken abrufen oder einen bestimmten Titel suchen, verwenden Sie die entsprechenden Tools. Seien Sie stets prägnant, freundlich und effizient." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Bitte geben Sie eine Liste von Titeln an, um die Wiedergabeliste zu erstellen." },
|
"aiToolM3UNoTitlesProvided": { "message": "Bitte geben Sie eine Liste von Titeln an, um die Wiedergabeliste zu erstellen." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Überprüfe die Titel auf Ihren lokalen Servern..." },
|
"aiToolM3UCheckingTitles": { "message": "Titel werden auf Ihren lokalen Servern überprüft..." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Ich habe keinen der Filme oder Serien aus der Liste auf Ihren lokalen Servern gefunden." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Ich habe keinen der Filme oder Serien aus der Liste auf Ihren lokalen Servern gefunden." },
|
||||||
"aiToolM3UDownloadStarted": { "message": "Fertig! Ich habe $1 von $2 Titeln auf Ihren Servern gefunden und den Download der M3U-Wiedergabeliste gestartet.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"aiToolM3UDownloadStarted": { "message": "Erledigt! Ich habe $1 von $2 Titeln auf Ihren Servern gefunden und den M3U-Playlist-Download gestartet.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||||
"backToProviders": { "message": "Zurück zu den Anbietern" },
|
"backToProviders": { "message": "Zurück zu Anbietern" },
|
||||||
"artistsCounterSingle": { "message": "$total$ Künstler", "placeholders": { "total": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ Künstler", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "Laden..." },
|
"artistsCounterLoading": { "message": "Laden..." },
|
||||||
"downloadingSong": { "message": "Starte Download von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Download von „$title$“ wird gestartet", "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": "M3U für „$artist$“ wird generiert", "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" } } },
|
||||||
"retyingSection": { "message": "Wiederhole Abschnitt \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Abschnitt „$title$“ wird erneut versucht", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[ERFOLG] Wiederholung von \"$title$\" abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[ERFOLG] Wiederholung für „$title$“ abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[FEHLER] Wiederholung für \"$title$\" fehlgeschlagen: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[ENDGÜLTIGER FEHLER] Wiederholung fehlgeschlagen für „$title$“: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Starte Wiederholungsphase für $count$ Abschnitte...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Wiederholungsphase für $count$ Abschnitte wird gestartet...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "Token $token$... hat $count$ Server gefunden.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "Token $token$... hat $count$ Server gefunden.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"errorProcessingToken": { "message": "Fehler beim Verarbeiten des Tokens $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorProcessingToken": { "message": "Fehler beim Verarbeiten von Token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"plexScanFatalError": { "message": "FATALER FEHLER: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"plexScanFatalError": { "message": "FATALER FEHLER: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "Plex-Scan wird gestoppt..." },
|
"stoppingPlexScan": { "message": "Plex-Scan wird gestoppt..." },
|
||||||
"invalidTokenProvided": { "message": "Ungültiges Token angegeben." },
|
"invalidTokenProvided": { "message": "Ungültiger Token bereitgestellt." },
|
||||||
"tokenAlreadyExists": { "message": "Token existiert bereits." },
|
"tokenAlreadyExists": { "message": "Der Token existiert bereits." },
|
||||||
"tokenAddedSuccessfully": { "message": "Token erfolgreich hinzugefügt." },
|
"tokenAddedSuccessfully": { "message": "Token erfolgreich hinzugefügt." },
|
||||||
"noStreamsFoundForSelection": { "message": "Keine Streams für die Auswahl gefunden." },
|
"noStreamsFoundForSelection": { "message": "Keine Streams für die Auswahl gefunden." },
|
||||||
"autoplayBlocked": { "message": "Autoplay blockiert." },
|
"autoplayBlocked": { "message": "Automatische Wiedergabe blockiert." },
|
||||||
"page": { "message": "Seite" },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"all": { "message": "Alle" },
|
"page": { "message": "Seite" }
|
||||||
"userScore": { "message": "Benutzerbewertung" },
|
|
||||||
"duration": { "message": "Dauer" },
|
|
||||||
"min": { "message": "Min" },
|
|
||||||
"max": { "message": "Max" }
|
|
||||||
}
|
}
|
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Scans Plex servers for content and displays it in the interface" },
|
"appDescription": { "message": "Scans Plex servers to find content and displays it in the interface" },
|
||||||
"appTagline": { "message": "Movies, Series, and Music" },
|
"appTagline": { "message": "Movies, Series, and Music" },
|
||||||
"appLocaleCode": { "message": "en-US" },
|
"appLocaleCode": { "message": "en" },
|
||||||
"toggleNavigation": { "message": "Toggle Navigation" },
|
"toggleNavigation": { "message": "Toggle Navigation" },
|
||||||
"searchPlaceholder": { "message": "Search for movies or series..." },
|
"searchPlaceholder": { "message": "Search movies or series..." },
|
||||||
"openMusicPlayer": { "message": "Open Music Player" },
|
"openMusicPlayer": { "message": "Open Music Player" },
|
||||||
"settings": { "message": "Settings" },
|
"settings": { "message": "Settings" },
|
||||||
"navMovies": { "message": "Movies" },
|
"navMovies": { "message": "Movies" },
|
||||||
@ -20,20 +20,20 @@
|
|||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Explore thousands of movies and series." },
|
"heroSubtitle": { "message": "Explore thousands of movies and series." },
|
||||||
"addStream": { "message": "Add Stream" },
|
"addStream": { "message": "Add Stream" },
|
||||||
"moreInfo": { "message": "More info" },
|
"moreInfo": { "message": "More Information" },
|
||||||
"popularMovies": { "message": "Popular Movies" },
|
"popularMovies": { "message": "Popular Movies" },
|
||||||
"allGenres": { "message": "All genres" },
|
"allGenres": { "message": "All Genres" },
|
||||||
"allYears": { "message": "All years" },
|
"allYears": { "message": "All Years" },
|
||||||
"sortPopular": { "message": "Most popular" },
|
"sortPopular": { "message": "Most Popular" },
|
||||||
"sortTopRated": { "message": "Top rated" },
|
"sortTopRated": { "message": "Top Rated" },
|
||||||
"sortRecent": { "message": "Most recent" },
|
"sortRecent": { "message": "Most Recent" },
|
||||||
"loadMore": { "message": "Load more" },
|
"loadMore": { "message": "Load More" },
|
||||||
"photosBreadcrumbHome": { "message": "Albums" },
|
"photosBreadcrumbHome": { "message": "Albums" },
|
||||||
"selectServer": { "message": "Select a server" },
|
"selectServer": { "message": "Select a server" },
|
||||||
"loading": { "message": "Loading..." },
|
"loading": { "message": "Loading..." },
|
||||||
"loadingLibraries": { "message": "Loading libraries..." },
|
"loadingLibraries": { "message": "Loading libraries..." },
|
||||||
"photosEmptyState": { "message": "No albums or photos found." },
|
"photosEmptyState": { "message": "No albums or photos found." },
|
||||||
"photosEmptyStateSub": { "message": "Please select a server or make sure you have a photo library in Plex." },
|
"photosEmptyStateSub": { "message": "Please select a server or ensure you have a photo library in Plex." },
|
||||||
"statsTitle": { "message": "Library Statistics" },
|
"statsTitle": { "message": "Library Statistics" },
|
||||||
"statsAllTokens": { "message": "All Tokens" },
|
"statsAllTokens": { "message": "All Tokens" },
|
||||||
"statsAnalyzing": { "message": "Analyzing your library..." },
|
"statsAnalyzing": { "message": "Analyzing your library..." },
|
||||||
@ -65,18 +65,18 @@
|
|||||||
"settingsTabData": { "message": "Data" },
|
"settingsTabData": { "message": "Data" },
|
||||||
"settingsApiServer": { "message": "API and Server Settings" },
|
"settingsApiServer": { "message": "API and Server Settings" },
|
||||||
"settingsTmdbApiLabel": { "message": "TMDB API Key (Optional)" },
|
"settingsTmdbApiLabel": { "message": "TMDB API Key (Optional)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "The default key will be used if left blank" },
|
"settingsTmdbApiPlaceholder": { "message": "Default key will be used if left blank" },
|
||||||
"settingsGoogleApiLabel": { "message": "Google Gemini API Key (Optional)" },
|
"settingsGoogleApiLabel": { "message": "Google Gemini API Key (Optional)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Required to use the AI assistant" },
|
"settingsGoogleApiPlaceholder": { "message": "Required to use AI assistant" },
|
||||||
"settingsRegionLabel": { "message": "Region for content discovery" },
|
"settingsRegionLabel": { "message": "Region for content discovery" },
|
||||||
"allRegions": { "message": "All regions" },
|
"allRegions": { "message": "All Regions" },
|
||||||
"settingsPhpUrlLabel": { "message": "Server URL for Adding Streams" },
|
"settingsPhpUrlLabel": { "message": "Server URL for Adding Streams" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://your-server.com/path/to/script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://your-server.com/path/to/script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Light Mode" },
|
"settingsLightTheme": { "message": "Light Mode" },
|
||||||
"settingsShowHero": { "message": "Show 'Hero' welcome section" },
|
"settingsShowHero": { "message": "Show 'Hero' welcome section" },
|
||||||
"settingsScanContent": { "message": "Content Scan" },
|
"settingsScanContent": { "message": "Content Scan" },
|
||||||
"settingsScanDesc": { "message": "Select what to scan and press the button." },
|
"settingsScanDesc": { "message": "Select what to scan and click the button." },
|
||||||
"settingsScanMovies": { "message": "Movies" },
|
"settingsScanMovies": { "message": "Movies" },
|
||||||
"settingsScanShows": { "message": "Series" },
|
"settingsScanShows": { "message": "Series" },
|
||||||
"settingsScanArtists": { "message": "Music" },
|
"settingsScanArtists": { "message": "Music" },
|
||||||
@ -86,7 +86,7 @@
|
|||||||
"settingsPlexTokens": { "message": "Plex Tokens" },
|
"settingsPlexTokens": { "message": "Plex Tokens" },
|
||||||
"settingsPlexTokensDesc": { "message": "Edit the list of Plex tokens (JSON format)." },
|
"settingsPlexTokensDesc": { "message": "Edit the list of Plex tokens (JSON format)." },
|
||||||
"settingsSaveTokens": { "message": "Save Tokens" },
|
"settingsSaveTokens": { "message": "Save Tokens" },
|
||||||
"settingsJellyfinTitle": { "message": "Jellyfin Settings" },
|
"settingsJellyfinTitle": { "message": "Jellyfin Configuration" },
|
||||||
"settingsJellyfinDesc": { "message": "Add your Jellyfin server details to scan its content." },
|
"settingsJellyfinDesc": { "message": "Add your Jellyfin server details to scan its content." },
|
||||||
"jellyfinUrlLabel": { "message": "Jellyfin Server URL" },
|
"jellyfinUrlLabel": { "message": "Jellyfin Server URL" },
|
||||||
"jellyfinUserLabel": { "message": "Username" },
|
"jellyfinUserLabel": { "message": "Username" },
|
||||||
@ -94,35 +94,35 @@
|
|||||||
"jellyfinConnectAndScan": { "message": "Connect and Scan" },
|
"jellyfinConnectAndScan": { "message": "Connect and Scan" },
|
||||||
"settingsPhpGenTitle": { "message": "PHP Script Generator for Server" },
|
"settingsPhpGenTitle": { "message": "PHP Script Generator for Server" },
|
||||||
"settingsPhpFileOptions": { "message": "File Options" },
|
"settingsPhpFileOptions": { "message": "File Options" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Save Path on Server" },
|
"settingsPhpSavePathLabel": { "message": "Server Save Path" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for the same folder)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for same folder)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "File Name" },
|
"settingsPhpFilenameLabel": { "message": "File Name" },
|
||||||
"settingsPhpFileAction": { "message": "File Action" },
|
"settingsPhpFileAction": { "message": "File Action" },
|
||||||
"settingsPhpActionAppend": { "message": "Append to the end of the file (cumulative)" },
|
"settingsPhpActionAppend": { "message": "Append to file (cumulative)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Overwrite the file (start over)" },
|
"settingsPhpActionOverwrite": { "message": "Overwrite file (start fresh)" },
|
||||||
"settingsPhpSecurity": { "message": "Security (Optional)" },
|
"settingsPhpSecurity": { "message": "Security (Optional)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Use secret key (Recommended)" },
|
"settingsPhpUseSecretKey": { "message": "Use secret key (Recommended)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Enter a secure secret key" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Enter a secure secret key" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Generated Code" },
|
"settingsPhpGeneratedCode": { "message": "Generated Code" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "The generated PHP code will appear here." },
|
"settingsPhpGeneratedPlaceholder": { "message": "Generated PHP code will appear here." },
|
||||||
"settingsGenerateScript": { "message": "Generate Script" },
|
"settingsGenerateScript": { "message": "Generate Script" },
|
||||||
"settingsCopyScript": { "message": "Copy Script" },
|
"settingsCopyScript": { "message": "Copy Script" },
|
||||||
"settingsDataManagement": { "message": "Local Database Management" },
|
"settingsDataManagement": { "message": "Local Database Management" },
|
||||||
"settingsImportDb": { "message": "Import DB from File" },
|
"settingsImportDb": { "message": "Import DB from File" },
|
||||||
"settingsExportDb": { "message": "Export DB to File" },
|
"settingsExportDb": { "message": "Export DB to File" },
|
||||||
"settingsClearContent": { "message": "Clear Local Content Data" },
|
"settingsClearContent": { "message": "Clear Local Content Data" },
|
||||||
"settingsClearContentDesc": { "message": "This action will delete movies, series, and music from the local database, but will not affect your favorites or your settings." },
|
"settingsClearContentDesc": { "message": "This action will delete movies, series, and music from the local database, but will not affect your favorites or settings." },
|
||||||
"settingsClose": { "message": "Close" },
|
"settingsClose": { "message": "Close" },
|
||||||
"settingsSave": { "message": "Save Settings" },
|
"settingsSave": { "message": "Save Settings" },
|
||||||
"musicSidenavTitle": { "message": "Plex Music" },
|
"musicSidenavTitle": { "message": "Plex Music" },
|
||||||
"musicAllServers": { "message": "All Servers" },
|
"musicAllServers": { "message": "All Servers" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Search for an artist..." },
|
"musicSearchArtistPlaceholder": { "message": "Search artist..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Search in discography..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Search discography..." },
|
||||||
"musicNothingPlaying": { "message": "Nothing playing" },
|
"musicNothingPlaying": { "message": "Nothing playing" },
|
||||||
"musicSelectSong": { "message": "Select a song" },
|
"musicSelectSong": { "message": "Select a song" },
|
||||||
"musicToStart": { "message": "to start playing" },
|
"musicToStart": { "message": "to start playing" },
|
||||||
"miniplayerDownloadSong": { "message": "Download song" },
|
"miniplayerDownloadSong": { "message": "Download song" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Download M3U album" },
|
"miniplayerDownloadAlbum": { "message": "Download album M3U" },
|
||||||
"miniplayerVolume": { "message": "Volume" },
|
"miniplayerVolume": { "message": "Volume" },
|
||||||
"miniplayerShuffle": { "message": "Shuffle" },
|
"miniplayerShuffle": { "message": "Shuffle" },
|
||||||
"miniplayerEqualizer": { "message": "Equalizer" },
|
"miniplayerEqualizer": { "message": "Equalizer" },
|
||||||
@ -150,9 +150,9 @@
|
|||||||
"lang_it": { "message": "Italian" },
|
"lang_it": { "message": "Italian" },
|
||||||
"lang_pt": { "message": "Portuguese" },
|
"lang_pt": { "message": "Portuguese" },
|
||||||
"essentialFeaturesNotSupported": { "message": "Your browser does not support essential features." },
|
"essentialFeaturesNotSupported": { "message": "Your browser does not support essential features." },
|
||||||
"dbAccessError": { "message": "Error accessing the local database." },
|
"dbAccessError": { "message": "Error accessing local database." },
|
||||||
"dbUpdateNeeded": { "message": "The database needs to be updated, please reload the page." },
|
"dbUpdateNeeded": { "message": "Database needs updating, please reload the page." },
|
||||||
"dbBlocked": { "message": "Please close other tabs of this application to continue." },
|
"dbBlocked": { "message": "Please close other tabs of this app to continue." },
|
||||||
"deletingContentData": { "message": "Deleting local content data..." },
|
"deletingContentData": { "message": "Deleting local content data..." },
|
||||||
"noContentDataToDelete": { "message": "No content data to delete." },
|
"noContentDataToDelete": { "message": "No content data to delete." },
|
||||||
"contentDataDeleted": { "message": "Content data deleted from IndexedDB." },
|
"contentDataDeleted": { "message": "Content data deleted from IndexedDB." },
|
||||||
@ -160,29 +160,29 @@
|
|||||||
"aceEditorNotAvailable": { "message": "Text editor not available." },
|
"aceEditorNotAvailable": { "message": "Text editor not available." },
|
||||||
"errorLoadingTokens": { "message": "Error loading tokens for editing." },
|
"errorLoadingTokens": { "message": "Error loading tokens for editing." },
|
||||||
"errorLoadingTokensMessage": { "message": "Error loading tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Error loading tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Editor not available for saving." },
|
"aceEditorNotAvailableToSave": { "message": "Editor not available to save." },
|
||||||
"invalidJsonFormat": { "message": "Invalid JSON format. It must be { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Invalid JSON format. Must be { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Tokens saved successfully." },
|
"tokensSaved": { "message": "Tokens saved successfully." },
|
||||||
"errorSavingTokens": { "message": "Error saving tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Error saving tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB is not available." },
|
"dbNotAvailable": { "message": "IndexedDB is not available." },
|
||||||
"dbExported": { "message": "Database exported successfully." },
|
"dbExported": { "message": "Database exported successfully." },
|
||||||
"errorExportingDb": { "message": "Error exporting the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Error exporting database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "The file does not contain a valid JSON object." },
|
"invalidJsonFile": { "message": "File does not contain a valid JSON object." },
|
||||||
"noDataToImport": { "message": "The file does not contain data for the current DB sections." },
|
"noDataToImport": { "message": "File contains no data for current DB sections." },
|
||||||
"dbImported": { "message": "Database imported successfully." },
|
"dbImported": { "message": "Database imported successfully." },
|
||||||
"errorImportingDb": { "message": "Error importing the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Error importing database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Updating the view with new data..." },
|
"updatingView": { "message": "Updating view with new data..." },
|
||||||
"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": "Are you sure you want to delete local content data (Movies, Series, Music, etc.)? Favorites and Settings will NOT be deleted." },
|
||||||
"trailerNotFound": { "message": "No trailer found for this title." },
|
"trailerNotFound": { "message": "No trailer found for this title." },
|
||||||
"confirmClearHistory": { "message": "Are you sure you want to delete all your viewing history? This action cannot be undone." },
|
"confirmClearHistory": { "message": "Are you sure you want to clear all your viewing history? This action cannot be undone." },
|
||||||
"historyCleared": { "message": "Viewing history cleared." },
|
"historyCleared": { "message": "Viewing history cleared." },
|
||||||
"historyItemDeleted": { "message": "Item deleted from history." },
|
"historyItemDeleted": { "message": "Item deleted from history." },
|
||||||
"errorGeneratingScript": { "message": "First generate a script to be able to copy it." },
|
"errorGeneratingScript": { "message": "First generate a script to copy it." },
|
||||||
"scriptCopied": { "message": "PHP script copied to clipboard." },
|
"scriptCopied": { "message": "PHP script copied to clipboard." },
|
||||||
"errorCopyingScript": { "message": "Error copying the script." },
|
"errorCopyingScript": { "message": "Error copying script." },
|
||||||
"scriptGenerated": { "message": "PHP script generated." },
|
"scriptGenerated": { "message": "PHP script generated." },
|
||||||
"errorLoadingAlbum": { "message": "Error loading album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Error loading album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"noPhotoServerSelected": { "message": "Error: No photo server has been selected." },
|
"noPhotoServerSelected": { "message": "Error: No photo server selected." },
|
||||||
"loadingGenres": { "message": "Loading genres..." },
|
"loadingGenres": { "message": "Loading genres..." },
|
||||||
"errorLoadingGenres": { "message": "Error loading" },
|
"errorLoadingGenres": { "message": "Error loading" },
|
||||||
"noContentFound": { "message": "No results found." },
|
"noContentFound": { "message": "No results found." },
|
||||||
@ -190,17 +190,17 @@
|
|||||||
"noFavorites": { "message": "You don't have any favorites yet." },
|
"noFavorites": { "message": "You don't have any favorites yet." },
|
||||||
"errorLoadingFavorites": { "message": "Error loading favorites." },
|
"errorLoadingFavorites": { "message": "Error loading favorites." },
|
||||||
"historyEmpty": { "message": "Your history is empty." },
|
"historyEmpty": { "message": "Your history is empty." },
|
||||||
"historyEmptySub": { "message": "Explore and watch content for it to appear here." },
|
"historyEmptySub": { "message": "Browse and watch content for it to appear here." },
|
||||||
"errorGeneratingRecommendations": { "message": "Error generating recommendations." },
|
"errorGeneratingRecommendations": { "message": "Error generating recommendations." },
|
||||||
"noRecommendations": { "message": "We need to get to know you better to give you recommendations!" },
|
"noRecommendations": { "message": "We need to know you better to give you recommendations!" },
|
||||||
"errorGeneratingStats": { "message": "Error generating statistics." },
|
"errorGeneratingStats": { "message": "Error generating statistics." },
|
||||||
"noServersForToken": { "message": "No associated servers found for this token." },
|
"noServersForToken": { "message": "No associated servers found for this token." },
|
||||||
"searchingActorContent": { "message": "Searching for content by $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Searching content for $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorLoadingActorContent": { "message": "Could not load content for $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
"errorLoadingActorContent": { "message": "Could not load content for $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorAddingStream": { "message": "Error adding stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Error adding stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"phpUrlNotConfigured": { "message": "The PHP server URL is not configured. Please configure it in Settings." },
|
"phpUrlNotConfigured": { "message": "PHP server URL is not configured. Please configure it in Settings." },
|
||||||
"searchingStreams": { "message": "Searching for streams for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Searching streams for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Sending $count$ stream(s) to the server...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Sending $count$ stream(s) to server...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Stream(s) added successfully." },
|
"streamAddedSuccess": { "message": "Stream(s) added successfully." },
|
||||||
"generatingM3U": { "message": "Generating M3U for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Generating M3U for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
@ -214,25 +214,25 @@
|
|||||||
"plexScanStarting": { "message": "Starting Plex scan..." },
|
"plexScanStarting": { "message": "Starting Plex scan..." },
|
||||||
"noPlexTokens": { "message": "No Plex tokens configured." },
|
"noPlexTokens": { "message": "No Plex tokens configured." },
|
||||||
"clearingSections": { "message": "Clearing sections: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Clearing sections: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Initial scan phase finished." },
|
"initialScanPhaseComplete": { "message": "Initial scan phase completed." },
|
||||||
"retryPhaseFinished": { "message": "Retry phase finished." },
|
"retryPhaseFinished": { "message": "Retry phase finished." },
|
||||||
"plexScanFinished": { "message": "Scan finished. Updating content..." },
|
"plexScanFinished": { "message": "Scan finished. Updating content..." },
|
||||||
"scanCancelled": { "message": "Scan cancelled by the user." },
|
"scanCancelled": { "message": "Scan cancelled by user." },
|
||||||
"scanCancelledInfo": { "message": "Scan cancelled." },
|
"scanCancelledInfo": { "message": "Scan cancelled." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Error initializing the music player." },
|
"errorInitializingMusicPlayer": { "message": "Error initializing music player." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Critical error loading music data." },
|
"criticalErrorLoadingMusic": { "message": "Critical error loading music data." },
|
||||||
"errorLoadingArtists": { "message": "Error loading artists." },
|
"errorLoadingArtists": { "message": "Error loading artists." },
|
||||||
"dbUnavailableError": { "message": "Error: Database not available." },
|
"dbUnavailableError": { "message": "Error: Database unavailable." },
|
||||||
"updatingMusicData": { "message": "Updating music data..." },
|
"updatingMusicData": { "message": "Updating music data..." },
|
||||||
"musicDataUpdated": { "message": "Music data updated." },
|
"musicDataUpdated": { "message": "Music data updated." },
|
||||||
"errorFetchingArtistSongs": { "message": "Error fetching the artist's songs." },
|
"errorFetchingArtistSongs": { "message": "Error fetching artist songs." },
|
||||||
"errorLoadingSongs": { "message": "Error loading songs." },
|
"errorLoadingSongs": { "message": "Error loading songs." },
|
||||||
"noArtistsFound": { "message": "No artists found." },
|
"noArtistsFound": { "message": "No artists found." },
|
||||||
"shuffleOn": { "message": "Shuffle mode on." },
|
"shuffleOn": { "message": "Shuffle mode enabled." },
|
||||||
"shuffleOff": { "message": "Shuffle mode off." },
|
"shuffleOff": { "message": "Shuffle mode disabled." },
|
||||||
"playbackError": { "message": "Playback error" },
|
"playbackError": { "message": "Playback error" },
|
||||||
"errorLabel": { "message": "Error" },
|
"errorLabel": { "message": "Error" },
|
||||||
"reloadingPage": { "message": "Reloading the page..." },
|
"reloadingPage": { "message": "Reloading page..." },
|
||||||
"viewed": { "message": "Viewed" },
|
"viewed": { "message": "Viewed" },
|
||||||
"local": { "message": "Local" },
|
"local": { "message": "Local" },
|
||||||
"topRatedSort": {"message": "Top Rated"},
|
"topRatedSort": {"message": "Top Rated"},
|
||||||
@ -243,7 +243,7 @@
|
|||||||
"searchResultsFor": {"message": "Results for \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
"searchResultsFor": {"message": "Results for \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"contentFrom": {"message": "Content from $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
"contentFrom": {"message": "Content from $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||||
"explore": {"message": "Explore"},
|
"explore": {"message": "Explore"},
|
||||||
"noGenre": {"message": "Uncategorized"},
|
"noGenre": {"message": "No category"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "No synopsis available."},
|
"noSynopsis": {"message": "No synopsis available."},
|
||||||
"director": {"message": "Director:"},
|
"director": {"message": "Director:"},
|
||||||
@ -256,8 +256,6 @@
|
|||||||
"mainCast": {"message": "Main Cast"},
|
"mainCast": {"message": "Main Cast"},
|
||||||
"seasonsAndEpisodes": {"message": "Seasons and Episodes"},
|
"seasonsAndEpisodes": {"message": "Seasons and Episodes"},
|
||||||
"similarContent": {"message": "Similar Content"},
|
"similarContent": {"message": "Similar Content"},
|
||||||
"filmography": {"message": "Filmography"},
|
|
||||||
"availableOn": {"message": "Available on"},
|
|
||||||
"episodesCount": {"message": "$count$ Episodes", "placeholders": {"count": {"content": "$1"}}},
|
"episodesCount": {"message": "$count$ Episodes", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"seasonsCount": {"message": "$count$ Seasons", "placeholders": {"count": {"content": "$1"}}},
|
"seasonsCount": {"message": "$count$ Seasons", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||||
@ -265,9 +263,9 @@
|
|||||||
"fatalInitError": {"message": "Fatal initialization error"},
|
"fatalInitError": {"message": "Fatal initialization error"},
|
||||||
"fatalInitErrorSub": {"message": "Could not load the application."},
|
"fatalInitErrorSub": {"message": "Could not load the application."},
|
||||||
"invalidStreamInfo": {"message": "Invalid information."},
|
"invalidStreamInfo": {"message": "Invalid information."},
|
||||||
"dbUnavailableForStreams": {"message": "Local database not available."},
|
"dbUnavailableForStreams": {"message": "Local database unavailable."},
|
||||||
"noPlexServersForStreams": {"message": "No Plex servers."},
|
"noPlexServersForStreams": {"message": "No Plex servers."},
|
||||||
"notFoundOnServers": {"message": "\"$query$\" not found on Plex servers.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "Could not find \"$query$\" on Plex servers.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "Just now" },
|
"relativeTime_justNow": { "message": "Just now" },
|
||||||
"relativeTime_minutesAgo": { "message": "$count$ minutes ago", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "$count$ minutes ago", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "$count$ hours ago", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "$count$ hours ago", "placeholders": { "count": { "content": "$1" } } },
|
||||||
@ -283,25 +281,25 @@
|
|||||||
"noPhotoServers": { "message": "No photo servers" },
|
"noPhotoServers": { "message": "No photo servers" },
|
||||||
"jellyfinScanInProgress": { "message": "Jellyfin scan is already in progress." },
|
"jellyfinScanInProgress": { "message": "Jellyfin scan is already in progress." },
|
||||||
"jellyfinScanning": { "message": "Scanning Jellyfin..." },
|
"jellyfinScanning": { "message": "Scanning Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Please complete the Jellyfin URL and username." },
|
"jellyfinMissingCredentials": { "message": "Please fill in Jellyfin URL and username." },
|
||||||
"jellyfinConnecting": { "message": "Connecting to Jellyfin at: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Connecting to Jellyfin at: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Jellyfin authentication failed: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Jellyfin authentication failed: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Jellyfin authentication successful." },
|
"jellyfinAuthSuccess": { "message": "Jellyfin authentication successful." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Fetching libraries..." },
|
"jellyfinFetchingLibraries": { "message": "Fetching libraries..." },
|
||||||
"jellyfinFetchFailed": { "message": "Error fetching libraries: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Error fetching libraries: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "No movie or series libraries found in Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "No movie or series libraries found in Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ media library(s) found.", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ media library(ies) found.", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Success] '$libraryName' scanned, $count$ titles added.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Success] '$libraryName$' scanned, $count$ titles added.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Error scanning library '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Error scanning library '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Jellyfin scan completed. Added $movies$ movies and $series$ series.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Jellyfin scan completed. Added $movies$ movies and $series$ series.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Jellyfin credentials not configured." },
|
"noJellyfinCredentials": { "message": "Jellyfin credentials not configured." },
|
||||||
"notFoundOnJellyfin": { "message": "\"$query$\" not found on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "Could not find \"$query$\" on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "\"$query$\" not found on any server.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "Could not find \"$query$\" on any server.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"localOnPlex": { "message": "On Plex" },
|
"localOnPlex": { "message": "On Plex" },
|
||||||
"searchOnPlex": { "message": "Search on Plex" },
|
"searchOnPlex": { "message": "Search on Plex" },
|
||||||
"jellyfinTitle": { "message": "Jellyfin Content" },
|
"jellyfinTitle": { "message": "Jellyfin Content" },
|
||||||
"noJellyfinContent": { "message": "No Jellyfin content found." },
|
"noJellyfinContent": { "message": "No Jellyfin content found." },
|
||||||
"noJellyfinContentSub": { "message": "Make sure you have scanned your Jellyfin server in the settings." },
|
"noJellyfinContentSub": { "message": "Make sure you have scanned your Jellyfin server in settings." },
|
||||||
"activityViewerTitle": { "message": "Server Activity Viewer" },
|
"activityViewerTitle": { "message": "Server Activity Viewer" },
|
||||||
"activitySelectServer": { "message": "Select a server" },
|
"activitySelectServer": { "message": "Select a server" },
|
||||||
"activityCheckBtn": { "message": "Refresh" },
|
"activityCheckBtn": { "message": "Refresh" },
|
||||||
@ -314,7 +312,7 @@
|
|||||||
"activityCopyID": { "message": "Copy ID" },
|
"activityCopyID": { "message": "Copy ID" },
|
||||||
"activityError": { "message": "Could not get server activity." },
|
"activityError": { "message": "Could not get server activity." },
|
||||||
"activityCopied": { "message": "Identifier copied to clipboard!" },
|
"activityCopied": { "message": "Identifier copied to clipboard!" },
|
||||||
"activityCopyError": { "message": "Error copying the identifier." },
|
"activityCopyError": { "message": "Error copying identifier." },
|
||||||
"noProvidersFound": { "message": "No providers found." },
|
"noProvidersFound": { "message": "No providers found." },
|
||||||
"availableOnPlex": { "message": "Available on Plex" },
|
"availableOnPlex": { "message": "Available on Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "M3U List Generator" },
|
"m3uGeneratorTitle": { "message": "M3U List Generator" },
|
||||||
@ -322,7 +320,7 @@
|
|||||||
"downloadM3u": { "message": "Download M3U" },
|
"downloadM3u": { "message": "Download M3U" },
|
||||||
"m3uGenerator": { "message": "M3U Generator" },
|
"m3uGenerator": { "message": "M3U Generator" },
|
||||||
"selectLibraries": { "message": "Select Libraries" },
|
"selectLibraries": { "message": "Select Libraries" },
|
||||||
"howToUse": { "message": "How to Use" },
|
"howToUse": { "message": "How To Use" },
|
||||||
"m3uInstruction1": { "message": "Choose a server from the list." },
|
"m3uInstruction1": { "message": "Choose a server from the list." },
|
||||||
"m3uInstruction2": { "message": "Select one or more libraries to include." },
|
"m3uInstruction2": { "message": "Select one or more libraries to include." },
|
||||||
"m3uInstruction3": { "message": "Click the download button." },
|
"m3uInstruction3": { "message": "Click the download button." },
|
||||||
@ -333,91 +331,89 @@
|
|||||||
"chatPlaceholder": { "message": "Type your message..." },
|
"chatPlaceholder": { "message": "Type your message..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Welcome! I'm your CinePlex assistant. Ask me about movies, series, or anything else you want to know." },
|
"chatWelcome": { "message": "Welcome! I'm your CinePlex assistant. Ask me about movies, series, or anything else you want to know." },
|
||||||
"chatGoogleApiKeyMissing": { "message": "The Google Gemini API key is not configured. Please set it in the extension settings to use the AI assistant." },
|
"chatGoogleApiKeyMissing": { "message": "Google Gemini API key is not configured. Please set it in the extension settings to use the AI assistant." },
|
||||||
"chatApiInvalidResponse": { "message": "The API returned an invalid response. Please try again." },
|
"chatApiInvalidResponse": { "message": "The API returned an invalid response. Please try again." },
|
||||||
"chatApiError": { "message": "Error communicating with the AI assistant" },
|
"chatApiError": { "message": "Error communicating with the AI assistant" },
|
||||||
"downloadAll": { "message": "Download all" },
|
"downloadAll": { "message": "Download all" },
|
||||||
"download": { "message": "Download" },
|
"download": { "message": "Download" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Searches the user's Plex library for movies or series by title." },
|
"aiToolSearchLibraryDesc": { "message": "Searches the user's Plex library for movies or series by title." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "The title of the movie or series to search for." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "The title of the movie or series to search for." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "The type of content to search for. It can be 'movie' for movies or 'series' for series. (Optional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "The type of content to search for. Can be 'movie' for movies or 'series' for series. (Optional)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "The video resolution to search for (e.g., '4k', '1080p'). (Optional)." },
|
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "The video container format to search for (e.g., 'mkv', 'mp4'). (Optional)." },
|
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navigates the user to a specific page of the application interface." },
|
"aiToolNavigateToPageDesc": { "message": "Navigates the user to a specific page of the application interface." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "The name of the page to navigate to, e.g.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', or 'm3u-generator'." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "The name of the page to navigate to, e.g.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', or 'm3u-generator'." },
|
||||||
"aiToolGetUserStatsDesc": { "message": "Gets and displays the user's library statistics, such as the total number of unique movies, series, and artists." },
|
"aiToolGetUserStatsDesc": { "message": "Retrieves and displays the user's library statistics, such as the total number of unique movies, series, and artists." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Displays the details page of a specific movie or series by its title and type." },
|
"aiToolShowItemDetailsDesc": { "message": "Displays the details page for a specific movie or series by its title and type." },
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "The exact title of the movie or series." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "The exact title of the movie or series." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "The type of content. It must be 'movie' or 'series'." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the user's current playlist to stream it to a configured PHP server." },
|
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the user's current playlist to stream to a configured PHP server." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "The title of the movie or series to add." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "The title of the movie or series to add." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "The type of content. It must be 'movie' or 'series'." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||||
"aiToolCheckAndDownloadDesc": { "message": "Checks the availability of a list of movie or series titles on the user's local servers and, if found, generates and downloads an M3U playlist file with the found streams." },
|
"aiToolCheckAndDownloadDesc": { "message": "Checks the availability of a list of movie or series titles on the user's local servers and, if found, generates and downloads an M3U playlist file with the found streams." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "An array of movie or series titles to search for and download." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "An array of movie or series titles to search for and download." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "The content type of the list. It must be 'movie' or 'series'." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "The content type of the list. Must be 'movie' or 'series'." },
|
||||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "The name of the M3U file to download (e.g., 'MyList.m3u'). If not provided, a default name will be used." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "The name of the M3U file to download (e.g., 'MyList.m3u'). If not provided, a default name will be used." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Adds or removes a movie or series from the user's favorites list." },
|
"aiToolToggleFavoriteDesc": { "message": "Adds or removes a movie or series from the user's favorites list." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "The title of the movie or series." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "The title of the movie or series." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "The type of content. It must be 'movie' or 'series'." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||||
"aiToolGetRecommendationsDesc": { "message": "Generates and displays a list of movie or series recommendations based on the user's viewing history and favorites." },
|
"aiToolGetRecommendationsDesc": { "message": "Generates and displays a list of movie or series recommendations based on the user's viewing history and favorites." },
|
||||||
"aiToolApplyFiltersDesc": { "message": "Applies filters to the current view of movies or series, allowing to refine the results by type, genre, year, and sort order." },
|
"aiToolApplyFiltersDesc": { "message": "Applies filters to the current movie or series view, allowing refinement of results by type, genre, year, and sort order." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "The type of content to apply the filters to. It must be 'movie' or 'series'." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "The type of content to apply filters to. Must be 'movie' or 'series'." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "The name of the genre to filter by (e.g., 'Action', 'Drama')." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "The name of the genre to filter by (e.g., 'Action', 'Drama')." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "The release year to filter by (e.g., '2023')." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "The release year to filter by (e.g., '2023')." },
|
||||||
"aiToolApplyFiltersSortParamDesc": { "message": "The sorting criterion for the results. Valid values: 'popularity.desc' (popular), 'vote_average.desc' (top rated), 'release_date.desc' (recent for movies) or 'first_air_date.desc' (recent for series)." },
|
"aiToolApplyFiltersSortParamDesc": { "message": "The sort criterion for the results. Valid values: 'popularity.desc' (popular), 'vote_average.desc' (top rated), 'release_date.desc' (recent for movies) or 'first_air_date.desc' (recent for series)." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Opens the music player and starts playing songs by a specific artist from the user's library." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Opens the music player and starts playing songs by a specific artist from the user's library." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "The exact name of the artist whose songs are to be played." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "The exact name of the artist whose songs are desired to be played." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Clears all message history from the current conversation with the AI assistant." },
|
"aiToolClearChatHistoryDesc": { "message": "Clears all message history from the current conversation with the AI assistant." },
|
||||||
"aiToolDeleteDatabaseDesc": { "message": "Deletes the entire local database of the extension, including scanned content, settings, and favorites. This action is irreversible and will reload the application." },
|
"aiToolDeleteDatabaseDesc": { "message": "Deletes the entire local database of the extension, including scanned content, settings, and favorites. This action is irreversible and will reload the application." },
|
||||||
"aiToolUpdateAllTokensDesc": { "message": "Initiates a full scan of all Plex servers and libraries associated with the tokens configured in the extension. Updates all movies, series, artists, and photos." },
|
"aiToolUpdateAllTokensDesc": { "message": "Initiates a full scan of all Plex servers and libraries associated with the configured tokens in the extension. Updates all movies, series, artists, and photos." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Adds a new X-Plex token to the extension's configuration, allowing the application to scan content from new Plex servers." },
|
"aiToolAddPlexTokenDesc": { "message": "Adds a new X-Plex token to the extension's configuration, allowing the app to scan content from new Plex servers." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "The X-Plex token string to be added." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "The X-Plex token string to add." },
|
||||||
"aiToolChangeRegionDesc": { "message": "Changes the region used for content discovery in the TMDB API. This will affect the results shown in the movie and series sections, as well as the streaming providers." },
|
"aiToolChangeRegionDesc": { "message": "Changes the region used for content discovery in the TMDB API. This will affect results displayed in movie and series sections, as well as streaming providers." },
|
||||||
"aiToolChangeRegionRegionParamDesc": { "message": "The two-letter ISO 3166-1 country code for the new region (e.g., 'US' for the United States, 'ES' for Spain, 'MX' for Mexico)." },
|
"aiToolChangeRegionRegionParamDesc": { "message": "The two-letter ISO 3166-1 country code for the new region (e.g., 'US' for United States, 'ES' for Spain, 'MX' for Mexico)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Removes all movies and series that the user has marked as favorites." },
|
"aiToolClearAllFavoritesDesc": { "message": "Removes all movies and series the user has marked as favorites." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Clears the user's viewing history from the history page." },
|
"aiToolClearViewingHistoryDesc": { "message": "Clears the user's viewing history from the history page." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Clears the recommendations view and removes cached recommendations." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Clears the recommendations view and removes cached recommendations." },
|
||||||
"aiToolSearchNotFound": { "message": "'$query$' not found in your library.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "Could not find '$query$' in your library.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigated to the $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navigated to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Error navigating to the $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Error navigating to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Error getting statistics." },
|
"aiToolStatsError": { "message": "Error getting statistics." },
|
||||||
"aiToolItemNotFound": { "message": "Item '$title$' not found.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Item '$title$' not found.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Showing details for '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Showing details for '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "Added '$title$' to the playlist.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Added '$title$' to playlist.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Added '$title$' to favorites.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "Added '$title$' to favorites.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "Removed '$title$' from favorites.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Removed '$title$' from favorites.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Showing recommendations." },
|
"aiToolRecommendationsSuccess": { "message": "Showing recommendations." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' not found.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' not found.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filters applied successfully." },
|
"aiToolApplyFiltersSuccess": { "message": "Filters applied successfully." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "The music player is not ready. Make sure your Plex music library has been scanned." },
|
"aiToolPlayMusicNotReady": { "message": "Music player is not ready. Make sure your Plex music library has been scanned." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artist '$artist_name$' not found.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artist '$artist_name$' not found.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "No songs found for '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "No songs found for '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Playing music by '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Playing music by '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Chat history cleared." },
|
"aiToolChatHistoryCleared": { "message": "Chat history cleared." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "Are you sure you want to delete the local database? This action is irreversible." },
|
"aiToolConfirmDeleteDatabase": { "message": "Are you sure you want to delete the local database? This action is irreversible." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Database deletion cancelled." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Database deletion cancelled." },
|
||||||
"aiToolExecutionError": { "message": "Error executing tool '$toolName': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolExecutionError": { "message": "Error executing tool '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolUnknown": { "message": "Unknown tool: '$toolName'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Unknown tool: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Favorites cleared." },
|
"aiToolFavoritesCleared": { "message": "Favorites cleared." },
|
||||||
"aiToolFavoritesClearError": { "message": "Error clearing favorites: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Error clearing favorites: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recommendations cleared." },
|
"aiToolRecommendationsCleared": { "message": "Recommendations cleared." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Error clearing recommendations: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Error clearing recommendations: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Database deleted. The page will reload." },
|
"aiToolDatabaseDeleted": { "message": "Database deleted. The page will reload." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Error deleting the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Error deleting database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Close other tabs of the application." },
|
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Close other app tabs." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "All tokens have been updated successfully." },
|
"aiToolUpdateAllTokensSuccess": { "message": "All tokens updated successfully." },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Error updating tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Error updating tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Plex token added successfully." },
|
"aiToolAddPlexTokenSuccess": { "message": "Plex token added successfully." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Error adding the Plex token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Error adding Plex token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. The content is being updated.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. Content is updating.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionError": { "message": "Error changing the region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Error changing region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Viewing history cleared." },
|
"aiToolViewingHistoryCleared": { "message": "Viewing history cleared." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Error clearing the viewing history: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Error clearing viewing history: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiSystemPrompt_v3": { "message": "You are an expert film and series assistant called CinePlex. Your main function is to help users discover content and interact with their library. Follow these rules strictly: 1. **NEVER** pretend you have performed an action if you have not used a tool for it. For example, do not say 'I have downloaded X' if you have not used the download tool. 2. For recommendation or list requests (e.g., 'tell me 5 horror movies'), use your own knowledge to generate the list. Present it in numbered or bulleted format. After displaying the list, proactively ask the user if they want you to check for availability on their local servers and create an M3U file. 3. **ONLY** if the user confirms they want to check or download the list, use the `check_and_download_titles_list` tool. Do not use it without explicit confirmation. 4. For any other action such as navigating, getting statistics, or searching for a specific title, or filtering by resolution or container, use the appropriate tools. Always be concise, friendly, and efficient." },
|
"aiSystemPrompt_v3": { "message": "You are a movie and series expert assistant called CinePlex. Your main function is to help users discover content and interact with their library. Follow these rules rigorously: 1. **NEVER** invent that you have performed an action if you have not used a tool for it. For example, do not say 'I have downloaded X' if you have not used the download tool. 2. For recommendation requests or lists (e.g., 'tell me 5 horror movies'), use your own knowledge to generate the list. Present it in a numbered or bulleted format. After showing the list, proactively ask the user if they want you to check availability on their local servers and create an M3U file. 3. **ONLY** if the user confirms that they want to check or download the list, use the `check_and_download_titles_list` tool. Do not use it without explicit confirmation. 4. For any other action such as navigating, getting statistics, or searching for a specific title, use the appropriate tools. Always be concise, friendly, and efficient." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Please provide a list of titles to create the playlist." },
|
"aiToolM3UNoTitlesProvided": { "message": "Please provide a list of titles to create the playlist." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Checking the titles on your local servers..." },
|
"aiToolM3UCheckingTitles": { "message": "Checking titles on your local servers..." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "I haven't found any of the movies or series from the list on your local servers." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "I haven't found any of the movies or series from the list on your local servers." },
|
||||||
"aiToolM3UDownloadStarted": { "message": "Done! I found $1 of the $2 titles on your servers and have started the download of the M3U playlist.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"aiToolM3UDownloadStarted": { "message": "Done! I found $1 of $2 titles on your servers and started the M3U playlist download.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||||
"backToProviders": { "message": "Back to Providers" },
|
"backToProviders": { "message": "Back to Providers" },
|
||||||
"artistsCounterSingle": { "message": "$total$ Artist", "placeholders": { "total": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ Artist", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "Loading..." },
|
"artistsCounterLoading": { "message": "Loading..." },
|
||||||
@ -427,7 +423,7 @@
|
|||||||
"generatingAlbumM3U": { "message": "Generating M3U for \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Generating M3U for \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U for album \"$artist$\" generated.", "placeholders": { "artist": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U for album \"$artist$\" generated.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Retrying section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Retrying section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCCESS] Retry of \"$title$\" completed.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCESS] Retry for \"$title$\" completed.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[FINAL ERROR] Retry failed for \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[FINAL ERROR] Retry failed for \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Starting retry phase for $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Starting retry phase for $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "Token $token$... found $count$ servers.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "Token $token$... found $count$ servers.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
@ -436,14 +432,10 @@
|
|||||||
"errorDuringScan": { "message": "Error during scan: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Error during scan: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "Stopping Plex scan..." },
|
"stoppingPlexScan": { "message": "Stopping Plex scan..." },
|
||||||
"invalidTokenProvided": { "message": "Invalid token provided." },
|
"invalidTokenProvided": { "message": "Invalid token provided." },
|
||||||
"tokenAlreadyExists": { "message": "The token already exists." },
|
"tokenAlreadyExists": { "message": "Token already exists." },
|
||||||
"tokenAddedSuccessfully": { "message": "Token added successfully." },
|
"tokenAddedSuccessfully": { "message": "Token added successfully." },
|
||||||
"noStreamsFoundForSelection": { "message": "No streams found for the selection." },
|
"noStreamsFoundForSelection": { "message": "No streams found for selection." },
|
||||||
"autoplayBlocked": { "message": "Autoplay blocked." },
|
"autoplayBlocked": { "message": "Autoplay blocked." },
|
||||||
"page": { "message": "Page" },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"all": { "message": "All" },
|
"page": { "message": "Page" }
|
||||||
"userScore": { "message": "User Score" },
|
|
||||||
"duration": { "message": "Duration" },
|
|
||||||
"min": { "message": "Min" },
|
|
||||||
"max": { "message": "Max" }
|
|
||||||
}
|
}
|
@ -256,8 +256,6 @@
|
|||||||
"mainCast": {"message": "Reparto Principal"},
|
"mainCast": {"message": "Reparto Principal"},
|
||||||
"seasonsAndEpisodes": {"message": "Temporadas y Episodios"},
|
"seasonsAndEpisodes": {"message": "Temporadas y Episodios"},
|
||||||
"similarContent": {"message": "Contenido Similar"},
|
"similarContent": {"message": "Contenido Similar"},
|
||||||
"filmography": {"message": "Filmografía"},
|
|
||||||
"availableOn": {"message": "Disponible en"},
|
|
||||||
"episodesCount": {"message": "$count$ Episodios", "placeholders": {"count": {"content": "$1"}}},
|
"episodesCount": {"message": "$count$ Episodios", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"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"}}},
|
||||||
@ -291,8 +289,8 @@
|
|||||||
"jellyfinFetchFailed": { "message": "Error al obtener bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Error al obtener bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "No se encontraron bibliotecas de películas o series en Jellyfin." },
|
"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" } } },
|
"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" } } },
|
"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" } } },
|
"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" } } },
|
"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." },
|
"noJellyfinCredentials": { "message": "Credenciales de Jellyfin no configuradas." },
|
||||||
"notFoundOnJellyfin": { "message": "No se encontró \"$query$\" en Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "No se encontró \"$query$\" en Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
@ -341,8 +339,6 @@
|
|||||||
"aiToolSearchLibraryDesc": { "message": "Busca en la biblioteca de Plex del usuario películas o series por título." },
|
"aiToolSearchLibraryDesc": { "message": "Busca en la biblioteca de Plex del usuario películas o series por título." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "El título de la película o serie a buscar." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "El título de la película o serie a buscar." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "El tipo de contenido a buscar. Puede ser 'movie' para películas o 'series' para series. (Opcional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "El tipo de contenido a buscar. Puede ser 'movie' para películas o 'series' para series. (Opcional)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "La resolución del video a buscar (por ejemplo, '4k', '1080p'). (Opcional)." },
|
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "El formato contenedor del video a buscar (por ejemplo, 'mkv', 'mp4'). (Opcional)." },
|
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navega al usuario a una página específica de la interfaz de la aplicación." },
|
"aiToolNavigateToPageDesc": { "message": "Navega al usuario a una página específica de la interfaz de la aplicación." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "El nombre de la página a la que navegar, por ejemplo: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', o 'm3u-generator'." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "El nombre de la página a la que navegar, por ejemplo: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', o 'm3u-generator'." },
|
||||||
"aiToolGetUserStatsDesc": { "message": "Obtiene y muestra las estadísticas de la biblioteca del usuario, como el número total de películas, series y artistas únicos." },
|
"aiToolGetUserStatsDesc": { "message": "Obtiene y muestra las estadísticas de la biblioteca del usuario, como el número total de películas, series y artistas únicos." },
|
||||||
@ -377,27 +373,27 @@
|
|||||||
"aiToolClearAllFavoritesDesc": { "message": "Elimina todas las películas y series que el usuario ha marcado como favoritas." },
|
"aiToolClearAllFavoritesDesc": { "message": "Elimina todas las películas y series que el usuario ha marcado como favoritas." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Borra el historial de visualización del usuario de la página de historial." },
|
"aiToolClearViewingHistoryDesc": { "message": "Borra el historial de visualización del usuario de la página de historial." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpia la vista de recomendaciones y elimina las recomendaciones almacenadas en caché." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Limpia la vista de recomendaciones y elimina las recomendaciones almacenadas en caché." },
|
||||||
"aiToolSearchNotFound": { "message": "No se encontró '$query en tu biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "No se encontró '$query$' en tu biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navegado a la página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navegado a la página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Error al navegar a la página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Error al navegar a la página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Error al obtener estadísticas." },
|
"aiToolStatsError": { "message": "Error al obtener estadísticas." },
|
||||||
"aiToolItemNotFound": { "message": "No se encontró el elemento '$title.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "No se encontró el elemento '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Mostrando detalles de '$title.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Mostrando detalles de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "Añadido '$title a la lista de reproducción.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Añadido '$title$' a la lista de reproducción.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Añadido '$title a favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "Añadido '$title$' a favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "Eliminado '$title de favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Eliminado '$title$' de favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Mostrando recomendaciones." },
|
"aiToolRecommendationsSuccess": { "message": "Mostrando recomendaciones." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Género '$genre no encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Género '$genre$' no encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filtros aplicados correctamente." },
|
"aiToolApplyFiltersSuccess": { "message": "Filtros aplicados correctamente." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "El reproductor de música no está listo. Asegúrate de que tu biblioteca de música de Plex haya sido escaneada." },
|
"aiToolPlayMusicNotReady": { "message": "El reproductor de música no está listo. Asegúrate de que tu biblioteca de música de Plex haya sido escaneada." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name no encontrado.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name$' no encontrado.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "No se encontraron canciones para '$artist_name.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "No se encontraron canciones para '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Reproduciendo música de '$artist_name.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Reproduciendo música de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Historial de chat borrado." },
|
"aiToolChatHistoryCleared": { "message": "Historial de chat borrado." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "¿Estás seguro de que quieres eliminar la base de datos local? Esta acción es irreversible." },
|
"aiToolConfirmDeleteDatabase": { "message": "¿Estás seguro de que quieres eliminar la base de datos local? Esta acción es irreversible." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Eliminación de la base de datos cancelada." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Eliminación de la base de datos cancelada." },
|
||||||
"aiToolExecutionError": { "message": "Error al ejecutar la herramienta '$toolName: $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolExecutionError": { "message": "Error al ejecutar la herramienta '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolUnknown": { "message": "Herramienta desconocida: '$toolName.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Herramienta desconocida: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
|
"aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
|
||||||
"aiToolFavoritesClearError": { "message": "Error al eliminar los favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Error al eliminar los favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recomendaciones eliminadas." },
|
"aiToolRecommendationsCleared": { "message": "Recomendaciones eliminadas." },
|
||||||
@ -413,7 +409,7 @@
|
|||||||
"aiToolChangeRegionError": { "message": "Error al cambiar la región: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Error al cambiar la región: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Historial de visualización borrado." },
|
"aiToolViewingHistoryCleared": { "message": "Historial de visualización borrado." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Error al borrar el historial de visualización: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Error al borrar el historial de visualización: $message$", "placeholders": { "message": { "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, o filtrar por resolución o contenedor, usa las herramientas apropiadas. Sé siempre conciso, amigable y eficiente." },
|
"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." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Por favor, proporciona una lista de títulos para crear la lista de reproducción." },
|
"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..." },
|
"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." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "No he encontrado ninguna de las películas o series de la lista en tus servidores locales." },
|
||||||
@ -440,11 +436,6 @@
|
|||||||
"tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
|
"tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
|
||||||
"noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
|
"noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
|
||||||
"autoplayBlocked": { "message": "Reproducción automática bloqueada." },
|
"autoplayBlocked": { "message": "Reproducción automática bloqueada." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"welcomeToCinePlex": { "message": "Bienvenido a CinePlex" },
|
||||||
"page": { "message": "Página" },
|
"page": { "message": "Página" }
|
||||||
"all": { "message": "Todo" },
|
|
||||||
"userScore": { "message": "Puntuación" },
|
|
||||||
"duration": { "message": "Duración" },
|
|
||||||
"min": { "message": "Mín" },
|
|
||||||
"max": { "message": "Máx" }
|
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Scanne les serveurs Plex à la recherche de contenu et l'affiche dans l'interface" },
|
"appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
|
||||||
"appTagline": { "message": "Films, Séries et Musique" },
|
"appTagline": { "message": "Films, Séries et Musique" },
|
||||||
"appLocaleCode": { "message": "fr-FR" },
|
"appLocaleCode": { "message": "fr" },
|
||||||
"toggleNavigation": { "message": "Basculer la navigation" },
|
"toggleNavigation": { "message": "Basculer la navigation" },
|
||||||
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
||||||
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
||||||
@ -19,8 +19,8 @@
|
|||||||
"navM3uGenerator": { "message": "Générateur M3U" },
|
"navM3uGenerator": { "message": "Générateur M3U" },
|
||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
||||||
"addStream": { "message": "Ajouter un flux" },
|
"addStream": { "message": "Ajouter un stream" },
|
||||||
"moreInfo": { "message": "Plus d'infos" },
|
"moreInfo": { "message": "Plus d'informations" },
|
||||||
"popularMovies": { "message": "Films populaires" },
|
"popularMovies": { "message": "Films populaires" },
|
||||||
"allGenres": { "message": "Tous les genres" },
|
"allGenres": { "message": "Tous les genres" },
|
||||||
"allYears": { "message": "Toutes les années" },
|
"allYears": { "message": "Toutes les années" },
|
||||||
@ -29,11 +29,11 @@
|
|||||||
"sortRecent": { "message": "Les plus récents" },
|
"sortRecent": { "message": "Les plus récents" },
|
||||||
"loadMore": { "message": "Charger plus" },
|
"loadMore": { "message": "Charger plus" },
|
||||||
"photosBreadcrumbHome": { "message": "Albums" },
|
"photosBreadcrumbHome": { "message": "Albums" },
|
||||||
"selectServer": { "message": "Sélectionnez un serveur" },
|
"selectServer": { "message": "Sélectionner un serveur" },
|
||||||
"loading": { "message": "Chargement..." },
|
"loading": { "message": "Chargement..." },
|
||||||
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
||||||
"photosEmptyState": { "message": "Aucun album ou photo trouvé." },
|
"photosEmptyState": { "message": "Aucun album ou photo trouvé." },
|
||||||
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou vous assurer que vous disposez d'une photothèque dans Plex." },
|
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou assurez-vous d'avoir une bibliothèque de photos dans Plex." },
|
||||||
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
||||||
"statsAllTokens": { "message": "Tous les jetons" },
|
"statsAllTokens": { "message": "Tous les jetons" },
|
||||||
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
||||||
@ -42,14 +42,14 @@
|
|||||||
"statsUniqueMovies": { "message": "Films uniques" },
|
"statsUniqueMovies": { "message": "Films uniques" },
|
||||||
"statsUniqueSeries": { "message": "Séries uniques" },
|
"statsUniqueSeries": { "message": "Séries uniques" },
|
||||||
"statsUniqueArtists": { "message": "Artistes uniques" },
|
"statsUniqueArtists": { "message": "Artistes uniques" },
|
||||||
"statsTokenServers": { "message": "Serveurs de jetons" },
|
"statsTokenServers": { "message": "Serveurs du jeton" },
|
||||||
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
||||||
"statsChartByDecade": { "message": "Contenu par décennie" },
|
"statsChartByDecade": { "message": "Contenu par décennie" },
|
||||||
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
||||||
"historyTitle": { "message": "Historique de visionnage" },
|
"historyTitle": { "message": "Historique de visionnage" },
|
||||||
"clearHistory": { "message": "Tout effacer" },
|
"clearHistory": { "message": "Tout effacer" },
|
||||||
"consoleTitle": { "message": "Console d'analyse Plex" },
|
"consoleTitle": { "message": "Console de scan Plex" },
|
||||||
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
||||||
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
||||||
"close": { "message": "Fermer" },
|
"close": { "message": "Fermer" },
|
||||||
@ -57,51 +57,51 @@
|
|||||||
"previous": { "message": "Précédent" },
|
"previous": { "message": "Précédent" },
|
||||||
"next": { "message": "Suivant" },
|
"next": { "message": "Suivant" },
|
||||||
"notificationTemplateText": { "message": "Notification" },
|
"notificationTemplateText": { "message": "Notification" },
|
||||||
"settingsTitleFull": { "message": "Paramètres et configuration" },
|
"settingsTitleFull": { "message": "Réglages et Configuration" },
|
||||||
"settingsTabGeneral": { "message": "Général" },
|
"settingsTabGeneral": { "message": "Général" },
|
||||||
"settingsTabPlex": { "message": "Plex" },
|
"settingsTabPlex": { "message": "Plex" },
|
||||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||||
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
||||||
"settingsTabData": { "message": "Données" },
|
"settingsTabData": { "message": "Données" },
|
||||||
"settingsApiServer": { "message": "Paramètres API et serveur" },
|
"settingsApiServer": { "message": "Configuration API et serveur" },
|
||||||
"settingsTmdbApiLabel": { "message": "Clé API TMDB (facultatif)" },
|
"settingsTmdbApiLabel": { "message": "Clé API TMDB (Facultatif)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si ce champ est laissé vide" },
|
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si laissée vide" },
|
||||||
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (facultatif)" },
|
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Requis pour utiliser l'assistant IA" },
|
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
||||||
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
||||||
"allRegions": { "message": "Toutes les régions" },
|
"allRegions": { "message": "Toutes les régions" },
|
||||||
"settingsPhpUrlLabel": { "message": "URL du serveur pour l'ajout de flux" },
|
"settingsPhpUrlLabel": { "message": "URL du serveur pour ajouter des streams" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Mode clair" },
|
"settingsLightTheme": { "message": "Mode clair" },
|
||||||
"settingsShowHero": { "message": "Afficher la section d'accueil 'Hero'" },
|
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Analyse du contenu" },
|
"settingsScanContent": { "message": "Scan de contenu" },
|
||||||
"settingsScanDesc": { "message": "Sélectionnez les éléments à analyser et appuyez sur le bouton." },
|
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
||||||
"settingsScanMovies": { "message": "Films" },
|
"settingsScanMovies": { "message": "Films" },
|
||||||
"settingsScanShows": { "message": "Séries" },
|
"settingsScanShows": { "message": "Séries" },
|
||||||
"settingsScanArtists": { "message": "Musique" },
|
"settingsScanArtists": { "message": "Musique" },
|
||||||
"settingsScanPhotos": { "message": "Photos" },
|
"settingsScanPhotos": { "message": "Photos" },
|
||||||
"settingsSelectAll": { "message": "Tout sélectionner" },
|
"settingsSelectAll": { "message": "Tout sélectionner" },
|
||||||
"settingsStartScan": { "message": "Démarrer l'analyse" },
|
"settingsStartScan": { "message": "Lancer le scan" },
|
||||||
"settingsPlexTokens": { "message": "Jetons Plex" },
|
"settingsPlexTokens": { "message": "Jetons Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Modifiez la liste des jetons Plex (format JSON)." },
|
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Enregistrer les jetons" },
|
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
||||||
"settingsJellyfinTitle": { "message": "Paramètres Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour analyser son contenu." },
|
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
||||||
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
||||||
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
||||||
"jellyfinPassLabel": { "message": "Mot de passe" },
|
"jellyfinPassLabel": { "message": "Mot de passe" },
|
||||||
"jellyfinConnectAndScan": { "message": "Connecter et analyser" },
|
"jellyfinConnectAndScan": { "message": "Connecter et scanner" },
|
||||||
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour serveur" },
|
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
||||||
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Chemin d'enregistrement sur le serveur" },
|
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
||||||
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
||||||
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
||||||
"settingsPhpSecurity": { "message": "Sécurité (facultatif)" },
|
"settingsPhpSecurity": { "message": "Sécurité (Facultatif)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (recommandé)" },
|
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
||||||
@ -111,20 +111,20 @@
|
|||||||
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
||||||
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
||||||
"settingsClearContent": { "message": "Effacer les données de contenu local" },
|
"settingsClearContent": { "message": "Effacer les données de contenu local" },
|
||||||
"settingsClearContentDesc": { "message": "Cette action supprimera les films, les séries et la musique de la base de données locale, mais n'affectera pas vos favoris ni vos paramètres." },
|
"settingsClearContentDesc": { "message": "Cette action supprimera les films, séries et musiques de la base de données locale, mais n'affectera pas vos favoris ni vos paramètres." },
|
||||||
"settingsClose": { "message": "Fermer" },
|
"settingsClose": { "message": "Fermer" },
|
||||||
"settingsSave": { "message": "Enregistrer les paramètres" },
|
"settingsSave": { "message": "Enregistrer les paramètres" },
|
||||||
"musicSidenavTitle": { "message": "Musique Plex" },
|
"musicSidenavTitle": { "message": "Musique de Plex" },
|
||||||
"musicAllServers": { "message": "Tous les serveurs" },
|
"musicAllServers": { "message": "Tous les serveurs" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
||||||
"musicNothingPlaying": { "message": "Aucune lecture en cours" },
|
"musicNothingPlaying": { "message": "Rien ne joue" },
|
||||||
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
||||||
"musicToStart": { "message": "pour démarrer la lecture" },
|
"musicToStart": { "message": "pour commencer à jouer" },
|
||||||
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
||||||
"miniplayerVolume": { "message": "Volume" },
|
"miniplayerVolume": { "message": "Volume" },
|
||||||
"miniplayerShuffle": { "message": "Aléatoire" },
|
"miniplayerShuffle": { "message": "Lecture aléatoire" },
|
||||||
"miniplayerEqualizer": { "message": "Égaliseur" },
|
"miniplayerEqualizer": { "message": "Égaliseur" },
|
||||||
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
||||||
"eqTitle": { "message": "Égaliseur graphique" },
|
"eqTitle": { "message": "Égaliseur graphique" },
|
||||||
@ -134,8 +134,8 @@
|
|||||||
"eqPresetPop": { "message": "Pop" },
|
"eqPresetPop": { "message": "Pop" },
|
||||||
"eqPresetJazz": { "message": "Jazz" },
|
"eqPresetJazz": { "message": "Jazz" },
|
||||||
"eqPresetClassical": { "message": "Classique" },
|
"eqPresetClassical": { "message": "Classique" },
|
||||||
"eqPresetBassBoost": { "message": "Amplification des basses" },
|
"eqPresetBassBoost": { "message": "Accentuation des basses" },
|
||||||
"eqPreampLabel": { "message": "Préampli" },
|
"eqPreampLabel": { "message": "Préamplificateur" },
|
||||||
"infoModalTitle": { "message": "Informations" },
|
"infoModalTitle": { "message": "Informations" },
|
||||||
"infoModalFieldTitle": { "message": "Titre :" },
|
"infoModalFieldTitle": { "message": "Titre :" },
|
||||||
"infoModalFieldArtist": { "message": "Artiste :" },
|
"infoModalFieldArtist": { "message": "Artiste :" },
|
||||||
@ -149,7 +149,7 @@
|
|||||||
"lang_de": { "message": "Allemand" },
|
"lang_de": { "message": "Allemand" },
|
||||||
"lang_it": { "message": "Italien" },
|
"lang_it": { "message": "Italien" },
|
||||||
"lang_pt": { "message": "Portugais" },
|
"lang_pt": { "message": "Portugais" },
|
||||||
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctionnalités essentielles." },
|
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctions essentielles." },
|
||||||
"dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
|
"dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
|
||||||
"dbUpdateNeeded": { "message": "La base de données doit être mise à jour, veuillez recharger la page." },
|
"dbUpdateNeeded": { "message": "La base de données doit être mise à jour, veuillez recharger la page." },
|
||||||
"dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
|
"dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
|
||||||
@ -158,23 +158,23 @@
|
|||||||
"contentDataDeleted": { "message": "Données de contenu supprimées d'IndexedDB." },
|
"contentDataDeleted": { "message": "Données de contenu supprimées d'IndexedDB." },
|
||||||
"errorDeletingData": { "message": "Erreur lors de la suppression des données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Erreur lors de la suppression des données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
||||||
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour modification." },
|
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour l'édition." },
|
||||||
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour l'enregistrement." },
|
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
|
||||||
"invalidJsonFormat": { "message": "Format JSON non valide. Il doit être { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
||||||
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
||||||
"dbExported": { "message": "Base de données exportée avec succès." },
|
"dbExported": { "message": "Base de données exportée avec succès." },
|
||||||
"errorExportingDb": { "message": "Erreur lors de l'exportation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Erreur lors de l'exportation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "Le fichier ne contient pas d'objet JSON valide." },
|
"invalidJsonFile": { "message": "Le fichier ne contient pas d'objet JSON valide." },
|
||||||
"noDataToImport": { "message": "Le fichier ne contient aucune donnée pour les sections actuelles de la base de données." },
|
"noDataToImport": { "message": "Le fichier ne contient pas de données pour les sections de la base de données actuelle." },
|
||||||
"dbImported": { "message": "Base de données importée avec succès." },
|
"dbImported": { "message": "Base de données importée avec succès." },
|
||||||
"errorImportingDb": { "message": "Erreur lors de l'importation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Erreur lors de l'importation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Mise à jour de la vue avec les nouvelles données..." },
|
"updatingView": { "message": "Mise à jour de la vue avec les nouvelles données..." },
|
||||||
"confirmClearContent": { "message": "Êtes-vous sûr de vouloir supprimer les données de contenu local (films, séries, musique, etc.) ? Les favoris et les paramètres ne seront PAS supprimés." },
|
"confirmClearContent": { "message": "Êtes-vous sûr de vouloir supprimer les données de contenu local (films, séries, musique, etc.) ? Les favoris et les paramètres NE SERONT PAS supprimés." },
|
||||||
"trailerNotFound": { "message": "Aucune bande-annonce trouvée pour ce titre." },
|
"trailerNotFound": { "message": "Aucune bande-annonce trouvée pour ce titre." },
|
||||||
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action est irréversible." },
|
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action ne peut pas être annulée." },
|
||||||
"historyCleared": { "message": "Historique de visionnage effacé." },
|
"historyCleared": { "message": "Historique de visionnage effacé." },
|
||||||
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
||||||
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
||||||
@ -192,33 +192,33 @@
|
|||||||
"historyEmpty": { "message": "Votre historique est vide." },
|
"historyEmpty": { "message": "Votre historique est vide." },
|
||||||
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
||||||
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
||||||
"noRecommendations": { "message": "Nous avons besoin de mieux vous connaître pour vous faire des recommandations !" },
|
"noRecommendations": { "message": "Nous devons mieux vous connaître pour vous donner des recommandations !" },
|
||||||
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
||||||
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
||||||
"searchingActorContent": { "message": "Recherche de contenu de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Recherche de contenu de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorLoadingActorContent": { "message": "Impossible de charger le contenu pour $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
"errorLoadingActorContent": { "message": "Impossible de charger le contenu pour $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorAddingStream": { "message": "Erreur lors de l'ajout de flux : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Erreur lors de l'ajout de stream(s) : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"phpUrlNotConfigured": { "message": "L'URL du serveur PHP n'est pas configurée. Veuillez la configurer dans les paramètres." },
|
"phpUrlNotConfigured": { "message": "L'URL du serveur PHP n'est pas configurée. Veuillez la configurer dans les Paramètres." },
|
||||||
"searchingStreams": { "message": "Recherche de flux pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Recherche de streams pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Envoi de $count$ flux au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Flux ajouté(s) avec succès." },
|
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
||||||
"generatingM3U": { "message": "Génération de M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorGeneratingM3U": { "message": "Erreur lors de la génération de M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Erreur lors de la génération M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"settingsSavedSuccess": { "message": "Paramètres enregistrés avec succès." },
|
"settingsSavedSuccess": { "message": "Paramètres enregistrés avec succès." },
|
||||||
"errorSavingSettings": { "message": "Erreur lors de l'enregistrement des paramètres dans la base de données." },
|
"errorSavingSettings": { "message": "Erreur lors de l'enregistrement des paramètres dans la base de données." },
|
||||||
"languageChangeReload": { "message": "Langue modifiée. L'application va maintenant se recharger." },
|
"languageChangeReload": { "message": "Langue changée. L'application va maintenant être rechargée." },
|
||||||
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
||||||
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
||||||
"plexScanInProgress": { "message": "L'analyse Plex est déjà en cours." },
|
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
||||||
"plexScanStarting": { "message": "Démarrage de l'analyse Plex..." },
|
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
||||||
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
||||||
"clearingSections": { "message": "Effacement des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Phase d'analyse initiale terminée." },
|
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
||||||
"retryPhaseFinished": { "message": "Phase de nouvelle tentative terminée." },
|
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
||||||
"plexScanFinished": { "message": "Analyse terminée. Mise à jour du contenu..." },
|
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
||||||
"scanCancelled": { "message": "Analyse annulée par l'utilisateur." },
|
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
||||||
"scanCancelledInfo": { "message": "Analyse annulée." },
|
"scanCancelledInfo": { "message": "Scan annulé." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
||||||
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
||||||
@ -243,31 +243,29 @@
|
|||||||
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||||
"explore": {"message": "Explorer"},
|
"explore": {"message": "Explorer"},
|
||||||
"noGenre": {"message": "Non classé"},
|
"noGenre": {"message": "Sans catégorie"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "Aucun synopsis disponible."},
|
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
||||||
"director": {"message": "Réalisateur :"},
|
"director": {"message": "Réalisateur :"},
|
||||||
"writer": {"message": "Scénariste :"},
|
"writer": {"message": "Scénariste :"},
|
||||||
"viewOnImdb": {"message": "Voir sur IMDb"},
|
"viewOnImdb": {"message": "Voir sur IMDb"},
|
||||||
"watchTrailer": {"message": "Regarder la bande-annonce"},
|
"watchTrailer": {"message": "Voir la bande-annonce"},
|
||||||
"addToFavorites": {"message": "Ajouter aux favoris"},
|
"addToFavorites": {"message": "Ajouter aux favoris"},
|
||||||
"removeFromFavorites": {"message": "Retirer des favoris"},
|
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
||||||
"notAvailable": {"message": "Non disponible"},
|
"notAvailable": {"message": "Non disponible"},
|
||||||
"mainCast": {"message": "Distribution principale"},
|
"mainCast": {"message": "Distribution principale"},
|
||||||
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
||||||
"similarContent": {"message": "Contenu similaire"},
|
"similarContent": {"message": "Contenu similaire"},
|
||||||
"filmography": {"message": "Filmographie"},
|
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"availableOn": {"message": "Disponible sur"},
|
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"episodesCount": {"message": "$count$ épisodes", "placeholders": {"count": {"content": "$1"}}},
|
|
||||||
"seasonsCount": {"message": "$count$ saisons", "placeholders": {"count": {"content": "$1"}}},
|
|
||||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"noTrailerFound": {"message": "Aucune bande-annonce trouvée pour ce titre."},
|
"noTrailerFound": {"message": "Aucune bande-annonce trouvée pour ce titre."},
|
||||||
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
||||||
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
||||||
"invalidStreamInfo": {"message": "Informations non valides."},
|
"invalidStreamInfo": {"message": "Informations invalides."},
|
||||||
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
||||||
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
||||||
"notFoundOnServers": {"message": "\"$query$\" introuvable sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "À l'instant" },
|
"relativeTime_justNow": { "message": "À l'instant" },
|
||||||
"relativeTime_minutesAgo": { "message": "Il y a $count$ minutes", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "Il y a $count$ minutes", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "Il y a $count$ heures", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "Il y a $count$ heures", "placeholders": { "count": { "content": "$1" } } },
|
||||||
@ -275,35 +273,35 @@
|
|||||||
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
||||||
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
||||||
"errorServerResponse": { "message": "Réponse du serveur infructueuse." },
|
"errorServerResponse": { "message": "Réponse du serveur non réussie." },
|
||||||
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
||||||
"untitled": { "message": "Sans titre" },
|
"untitled": { "message": "Sans titre" },
|
||||||
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Aucun serveur photo" },
|
"noPhotoServers": { "message": "Aucun serveur photo" },
|
||||||
"jellyfinScanInProgress": { "message": "L'analyse Jellyfin est déjà en cours." },
|
"jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
|
||||||
"jellyfinScanning": { "message": "Analyse de Jellyfin..." },
|
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et le nom d'utilisateur de Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin à : $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
|
"jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
|
||||||
"jellyfinFetchFailed": { "message": "Erreur lors de la récupération des bibliothèques : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Erreur lors de la récupération des bibliothèques : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Aucune bibliothèque de films ou de séries trouvée dans Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "Aucune bibliothèque de films ou de séries trouvée dans Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName' analysée, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName$' scanné, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Erreur lors de l'analyse de la bibliothèque '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Erreur lors du scan de la bibliothèque '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Analyse Jellyfin terminée. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Informations d'identification Jellyfin non configurées." },
|
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
||||||
"notFoundOnJellyfin": { "message": "\"$query$\" introuvable sur Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"notFoundOnAnyServer": { "message": "\"$query$\" introuvable sur aucun serveur.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"localOnPlex": { "message": "Sur Plex" },
|
"localOnPlex": { "message": "Sur Plex" },
|
||||||
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
||||||
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
||||||
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
||||||
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir analysé votre serveur Jellyfin dans les paramètres." },
|
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
|
||||||
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
||||||
"activitySelectServer": { "message": "Sélectionnez un serveur" },
|
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
||||||
"activityCheckBtn": { "message": "Actualiser" },
|
"activityCheckBtn": { "message": "Actualiser" },
|
||||||
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
||||||
"activitySessionUser": { "message": "Utilisateur" },
|
"activitySessionUser": { "message": "Utilisateur" },
|
||||||
@ -318,7 +316,7 @@
|
|||||||
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
||||||
"availableOnPlex": { "message": "Disponible sur Plex" },
|
"availableOnPlex": { "message": "Disponible sur Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
||||||
"selectAServer": { "message": "Sélectionnez un serveur..." },
|
"selectAServer": { "message": "Sélectionner un serveur..." },
|
||||||
"downloadM3u": { "message": "Télécharger M3U" },
|
"downloadM3u": { "message": "Télécharger M3U" },
|
||||||
"m3uGenerator": { "message": "Générateur M3U" },
|
"m3uGenerator": { "message": "Générateur M3U" },
|
||||||
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
||||||
@ -330,74 +328,72 @@
|
|||||||
"chatOpen": { "message": "Ouvrir le chat" },
|
"chatOpen": { "message": "Ouvrir le chat" },
|
||||||
"chatTitle": { "message": "Assistant IA" },
|
"chatTitle": { "message": "Assistant IA" },
|
||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Saisissez votre message..." },
|
"chatPlaceholder": { "message": "Écrivez votre message..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Posez-moi des questions sur les films, les séries ou tout ce que vous voulez savoir." },
|
"chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Demandez-moi des informations sur les films, les séries ou tout ce que vous voulez savoir." },
|
||||||
"chatGoogleApiKeyMissing": { "message": "La clé API Google Gemini n'est pas configurée. Veuillez la définir dans les paramètres de l'extension pour utiliser l'assistant IA." },
|
"chatGoogleApiKeyMissing": { "message": "La clé API Google Gemini n'est pas configurée. Veuillez la configurer dans les paramètres de l'extension pour utiliser l'assistant IA." },
|
||||||
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse non valide. Veuillez réessayer." },
|
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse invalide. Veuillez réessayer." },
|
||||||
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
||||||
"downloadAll": { "message": "Tout télécharger" },
|
"downloadAll": { "message": "Tout télécharger" },
|
||||||
"download": { "message": "Télécharger" },
|
"download": { "message": "Télécharger" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou des séries par titre." },
|
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou séries par titre." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Le titre du film ou de la série à rechercher." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "Le titre du film ou de la série à rechercher." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Le type de contenu à rechercher. Peut être 'movie' pour les films ou 'series' pour les séries. (Facultatif)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "Le type de contenu à rechercher. Peut être 'movie' pour les films ou 'series' pour les séries. (Facultatif)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "La résolution vidéo à rechercher (par exemple, '4k', '1080p'). (Facultatif)." },
|
"aiToolNavigateToPageDesc": { "message": "Navigue l'utilisateur vers une page spécifique de l'interface de l'application." },
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "Le format de conteneur vidéo à rechercher (par exemple, 'mkv', 'mp4'). (Facultatif)." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Dirige l'utilisateur vers une page spécifique de l'interface de l'application." },
|
"aiToolGetUserStatsDesc": { "message": "Obtient et affiche les statistiques de la bibliothèque de l'utilisateur, telles que le nombre total de films, séries et artistes uniques." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page vers laquelle naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' ou 'm3u-generator'." },
|
|
||||||
"aiToolGetUserStatsDesc": { "message": "Récupère et affiche les statistiques de la bibliothèque de l'utilisateur, telles que le nombre total de films, de séries et d'artistes uniques." },
|
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Affiche la page de détails d'un film ou d'une série spécifique par son titre et son type." },
|
"aiToolShowItemDetailsDesc": { "message": "Affiche la page de détails d'un film ou d'une série spécifique par son titre et son type." },
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "Le titre exact du film ou de la série." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "Le titre exact du film ou de la série." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture actuelle de l'utilisateur pour le diffuser sur un serveur PHP configuré." },
|
"aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture actuelle de l'utilisateur pour la diffuser à un serveur PHP configuré." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolCheckAndDownloadDesc": { "message": "Vérifie la disponibilité d'une liste de titres de films ou de séries sur les serveurs locaux de l'utilisateur et, si trouvés, génère et télécharge un fichier de liste de lecture M3U avec les flux trouvés." },
|
"aiToolCheckAndDownloadDesc": { "message": "Vérifie la disponibilité d'une liste de titres de films ou de séries sur les serveurs locaux de l'utilisateur et, si trouvés, génère et télécharge un fichier de playlist M3U avec les streams trouvés." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un tableau de titres de films ou de séries à rechercher et à télécharger." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un tableau de titres de films ou de séries à rechercher et télécharger." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Le type de contenu de la liste. Doit être 'movie' ou 'series'." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Le type de contenu de la liste. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Le nom du fichier M3U à télécharger (par exemple, 'MaListe.m3u'). Si aucun nom n'est fourni, un nom par défaut sera utilisé." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Le nom du fichier M3U à télécharger (par exemple, 'MaListe.m3u'). S'il n'est pas fourni, un nom par défaut sera utilisé." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou supprime un film ou une série de la liste des favoris de l'utilisateur." },
|
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolGetRecommendationsDesc": { "message": "Génère et affiche une liste de recommandations de films ou de séries basées sur l'historique de visionnage et les favoris de l'utilisateur." },
|
"aiToolGetRecommendationsDesc": { "message": "Génère et affiche une liste de recommandations de films ou de séries basées sur l'historique de visionnage et les favoris de l'utilisateur." },
|
||||||
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle des films ou des séries, permettant d'affiner les résultats par type, genre, année et ordre de tri." },
|
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle des films ou des séries, permettant d'affiner les résultats par type, genre, année et ordre de classement." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "Le nom du genre par lequel filtrer (par exemple, 'Action', 'Drame')." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "Le nom du genre par lequel filtrer (par exemple, 'Action', 'Drame')." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "L'année de sortie par laquelle filtrer (par exemple, '2023')." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "L'année de sortie par laquelle filtrer (par exemple, '2023')." },
|
||||||
"aiToolApplyFiltersSortParamDesc": { "message": "Le critère de tri pour les résultats. Valeurs valides : 'popularity.desc' (populaires), 'vote_average.desc' (mieux notés), 'release_date.desc' (récents pour les films) ou 'first_air_date.desc' (récents pour les séries)." },
|
"aiToolApplyFiltersSortParamDesc": { "message": "Le critère de tri pour les résultats. Valeurs valides : 'popularity.desc' (populaires), 'vote_average.desc' (mieux notés), 'release_date.desc' (récents pour les films) ou 'first_air_date.desc' (récents pour les séries)." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Ouvre le lecteur de musique et commence à jouer les chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Ouvre le lecteur de musique et commence à jouer des chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons doivent être jouées." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation en cours avec l'assistant IA." },
|
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle avec l'assistant IA." },
|
||||||
"aiToolDeleteDatabaseDesc": { "message": "Supprime l'intégralité de la base de données locale de l'extension, y compris le contenu analysé, les paramètres et les favoris. Cette action est irréversible et rechargera l'application." },
|
"aiToolDeleteDatabaseDesc": { "message": "Supprime toute la base de données locale de l'extension, y compris le contenu scanné, les paramètres et les favoris. Cette action est irréversible et rechargera l'application." },
|
||||||
"aiToolUpdateAllTokensDesc": { "message": "Lance une analyse complète de tous les serveurs et bibliothèques Plex associés aux jetons configurés dans l'extension. Met à jour tous les films, séries, artistes et photos." },
|
"aiToolUpdateAllTokensDesc": { "message": "Lance un scan complet de tous les serveurs et bibliothèques Plex associés aux jetons configurés dans l'extension. Met à jour tous les films, séries, artistes et photos." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application d'analyser le contenu de nouveaux serveurs Plex." },
|
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne de jeton X-Plex à ajouter." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du jeton X-Plex à ajouter." },
|
||||||
"aiToolChangeRegionDesc": { "message": "Modifie la région utilisée pour la découverte de contenu dans l'API TMDB. Cela affectera les résultats affichés dans les sections des films et des séries, ainsi que les fournisseurs de streaming." },
|
"aiToolChangeRegionDesc": { "message": "Change la région utilisée pour la découverte de contenu dans l'API TMDB. Cela affectera les résultats affichés dans les sections de films et de séries, ainsi que les fournisseurs de streaming." },
|
||||||
"aiToolChangeRegionRegionParamDesc": { "message": "Le code de pays ISO 3166-1 à deux lettres pour la nouvelle région (par exemple, 'US' pour les États-Unis, 'ES' pour l'Espagne, 'MX' pour le Mexique)." },
|
"aiToolChangeRegionRegionParamDesc": { "message": "Le code pays ISO 3166-1 à deux lettres pour la nouvelle région (par exemple, 'US' pour les États-Unis, 'ES' pour l'Espagne, 'MX' pour le Mexique)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Efface l'historique de visionnage de l'utilisateur de la page d'historique." },
|
"aiToolClearViewingHistoryDesc": { "message": "Efface l'historique de visionnage de l'utilisateur de la page d'historique." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Efface la vue des recommandations et supprime les recommandations mises en cache." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Nettoie la vue des recommandations et supprime les recommandations mises en cache." },
|
||||||
"aiToolSearchNotFound": { "message": "'$query' introuvable dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
||||||
"aiToolItemNotFound": { "message": "Élément '$title' introuvable.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "L'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "'$title' ajouté à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "'$title' ajouté aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "'$title' supprimé des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre' introuvable.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filtres appliqués avec succès." },
|
"aiToolApplyFiltersSuccess": { "message": "Filtres appliqués avec succès." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "Le lecteur de musique n'est pas prêt. Assurez-vous que votre bibliothèque musicale Plex a été analysée." },
|
"aiToolPlayMusicNotReady": { "message": "Le lecteur de musique n'est pas prêt. Assurez-vous que votre bibliothèque musicale Plex a été scannée." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name' introuvable.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Lecture de la musique de '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Lecture de musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Historique du chat effacé." },
|
"aiToolChatHistoryCleared": { "message": "Historique du chat effacé." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "Êtes-vous sûr de vouloir supprimer la base de données locale ? Cette action est irréversible." },
|
"aiToolConfirmDeleteDatabase": { "message": "Êtes-vous sûr de vouloir supprimer la base de données locale ? Cette action est irréversible." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Suppression de la base de données annulée." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Suppression de la base de données annulée." },
|
||||||
"aiToolExecutionError": { "message": "Erreur lors de l'exécution de l'outil '$toolName' : $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolExecutionError": { "message": "Erreur lors de l'exécution de l'outil '$toolName$' : $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolUnknown": { "message": "Outil inconnu : '$toolName'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Outil inconnu : '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
||||||
"aiToolFavoritesClearError": { "message": "Erreur lors de l'effacement des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Erreur lors de l'effacement des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
|
"aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
|
||||||
@ -409,41 +405,37 @@
|
|||||||
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Erreur lors de l'ajout du jeton Plex : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Erreur lors de l'ajout du jeton Plex : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Région modifiée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Région changée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Erreur lors de l'effacement de l'historique de visionnage : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Erreur lors de l'effacement de l'historique de visionnage : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiSystemPrompt_v3": { "message": "Vous êtes un assistant expert en films et séries appelé CinePlex. Votre fonction principale est d'aider les utilisateurs à découvrir du contenu et à interagir avec leur bibliothèque. Suivez rigoureusement ces règles : 1. **N'INVENTEZ JAMAIS** avoir effectué une action si vous n'avez pas utilisé d'outil pour cela. Par exemple, ne dites pas 'J'ai téléchargé X' si vous n'avez pas utilisé l'outil de téléchargement. 2. Pour les demandes de recommandations ou de listes (par exemple, 'donnez-moi 5 films d'horreur'), utilisez vos propres connaissances pour générer la liste. Présentez-la sous forme de liste numérotée ou à puces. Après avoir affiché la liste, demandez de manière proactive à l'utilisateur s'il souhaite que vous vérifiiez la disponibilité sur ses serveurs locaux et que vous créiez un fichier M3U. 3. **UNIQUEMENT** si l'utilisateur confirme qu'il souhaite vérifier ou télécharger la liste, utilisez l'outil `check_and_download_titles_list`. Ne l'utilisez pas sans confirmation explicite. 4. Pour toute autre action telle que la navigation, l'obtention de statistiques, la recherche d'un titre spécifique ou le filtrage par résolution ou conteneur, utilisez les outils appropriés. Soyez toujours concis, amical et efficace." },
|
"aiSystemPrompt_v3": { "message": "Vous êtes un assistant expert en films et séries appelé CinePlex. Votre fonction principale est d'aider les utilisateurs à découvrir du contenu et à interagir avec leur bibliothèque. Suivez ces règles rigoureusement : 1. **NE JAMAIS** inventer que vous avez effectué une action si vous n'avez pas utilisé un outil pour cela. Par exemple, ne dites pas 'j'ai téléchargé X' si vous n'avez pas utilisé l'outil de téléchargement. 2. Pour les demandes de recommandations ou de listes (ex. 'dis-moi 5 films d'horreur'), utilisez vos propres connaissances pour générer la liste. Présentez-la sous forme numérotée ou à puces. Après avoir affiché la liste, demandez de manière proactive à l'utilisateur s'il souhaite que vous vérifiiez la disponibilité sur ses serveurs locaux et que vous créiez un fichier M3U. 3. **SEULEMENT** si l'utilisateur confirme qu'il souhaite vérifier ou télécharger la liste, utilisez l'outil `check_and_download_titles_list`. Ne l'utilisez pas sans confirmation explicite. 4. Pour toute autre action comme naviguer, obtenir des statistiques ou rechercher un titre spécifique, utilisez les outils appropriés. Soyez toujours concis, amical et efficace." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la liste de lecture." },
|
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Vérification des titres sur vos serveurs locaux..." },
|
"aiToolM3UCheckingTitles": { "message": "Vérification des titres sur vos serveurs locaux..." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveveurs locaux." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveurs locaux." },
|
||||||
"aiToolM3UDownloadStarted": { "message": "Terminé ! J'ai trouvé $1 des $2 titres sur vos serveurs et j'ai lancé le téléchargement de la liste de lecture M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"aiToolM3UDownloadStarted": { "message": "Fait ! J'ai trouvé $1 sur $2 titres sur vos serveurs et j'ai lancé le téléchargement de la playlist M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||||
"backToProviders": { "message": "Retour aux fournisseurs" },
|
"backToProviders": { "message": "Retour aux fournisseurs" },
|
||||||
"artistsCounterSingle": { "message": "$total$ artiste", "placeholders": { "total": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ Artiste", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "Chargement..." },
|
"artistsCounterLoading": { "message": "Chargement..." },
|
||||||
"downloadingSong": { "message": "Début du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Démarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "Génération de M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Génération M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Nouvelle tentative de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCCÈS] Nouvelle tentative pour \"$title$\" terminée.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERREUR FINALE] Échec de la nouvelle tentative pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Démarrage de la phase de nouvelle tentative pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "Jeton $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "Jeton $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"errorProcessingToken": { "message": "Erreur lors du traitement du jeton $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorProcessingToken": { "message": "Erreur lors du traitement du jeton $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"errorDuringScan": { "message": "Erreur pendant l'analyse : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "Arrêt de l'analyse Plex..." },
|
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
||||||
"invalidTokenProvided": { "message": "Jeton non valide fourni." },
|
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
||||||
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
||||||
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
||||||
"noStreamsFoundForSelection": { "message": "Aucun flux trouvé pour la sélection." },
|
"noStreamsFoundForSelection": { "message": "Aucun stream trouvé pour la sélection." },
|
||||||
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
||||||
"page": { "message": "Page" },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"all": { "message": "Tous" },
|
"page": { "message": "Page" }
|
||||||
"userScore": { "message": "Score des utilisateurs" },
|
|
||||||
"duration": { "message": "Durée" },
|
|
||||||
"min": { "message": "Min" },
|
|
||||||
"max": { "message": "Max" }
|
|
||||||
}
|
}
|
@ -1,449 +1,441 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Scansiona i server Plex alla ricerca di contenuti e li visualizza nell'interfaccia" },
|
"appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
|
||||||
"appTagline": { "message": "Film, Serie e Musica" },
|
"appTagline": { "message": "Films, Séries et Musique" },
|
||||||
"appLocaleCode": { "message": "it-IT" },
|
"appLocaleCode": { "message": "fr" },
|
||||||
"toggleNavigation": { "message": "Attiva/disattiva la navigazione" },
|
"toggleNavigation": { "message": "Basculer la navigation" },
|
||||||
"searchPlaceholder": { "message": "Cerca film o serie..." },
|
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
||||||
"openMusicPlayer": { "message": "Apri il lettore musicale" },
|
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
||||||
"settings": { "message": "Impostazioni" },
|
"settings": { "message": "Paramètres" },
|
||||||
"navMovies": { "message": "Film" },
|
"navMovies": { "message": "Films" },
|
||||||
"navSeries": { "message": "Serie" },
|
"navSeries": { "message": "Séries" },
|
||||||
"navProviders": { "message": "Provider" },
|
"navProviders": { "message": "Fournisseurs" },
|
||||||
"navPhotos": { "message": "Foto" },
|
"navPhotos": { "message": "Photos" },
|
||||||
"navStats": { "message": "Statistiche" },
|
"navStats": { "message": "Statistiques" },
|
||||||
"navFavorites": { "message": "Preferiti" },
|
"navFavorites": { "message": "Favoris" },
|
||||||
"navHistory": { "message": "Cronologia" },
|
"navHistory": { "message": "Historique" },
|
||||||
"navRecommendations": { "message": "Raccomandazioni" },
|
"navRecommendations": { "message": "Recommandations" },
|
||||||
"navMusic": { "message": "Musica" },
|
"navMusic": { "message": "Musique" },
|
||||||
"navM3uGenerator": { "message": "Generatore M3U" },
|
"navM3uGenerator": { "message": "Générateur M3U" },
|
||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Esplora migliaia di film e serie." },
|
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
||||||
"addStream": { "message": "Aggiungi streaming" },
|
"addStream": { "message": "Ajouter un stream" },
|
||||||
"moreInfo": { "message": "Più informazioni" },
|
"moreInfo": { "message": "Plus d'informations" },
|
||||||
"popularMovies": { "message": "Film popolari" },
|
"popularMovies": { "message": "Films populaires" },
|
||||||
"allGenres": { "message": "Tutti i generi" },
|
"allGenres": { "message": "Tous les genres" },
|
||||||
"allYears": { "message": "Tutti gli anni" },
|
"allYears": { "message": "Toutes les années" },
|
||||||
"sortPopular": { "message": "I più popolari" },
|
"sortPopular": { "message": "Les plus populaires" },
|
||||||
"sortTopRated": { "message": "I più votati" },
|
"sortTopRated": { "message": "Les mieux notés" },
|
||||||
"sortRecent": { "message": "I più recenti" },
|
"sortRecent": { "message": "Les plus récents" },
|
||||||
"loadMore": { "message": "Carica altro" },
|
"loadMore": { "message": "Charger plus" },
|
||||||
"photosBreadcrumbHome": { "message": "Album" },
|
"photosBreadcrumbHome": { "message": "Albums" },
|
||||||
"selectServer": { "message": "Seleziona un server" },
|
"selectServer": { "message": "Sélectionner un serveur" },
|
||||||
"loading": { "message": "Caricamento..." },
|
"loading": { "message": "Chargement..." },
|
||||||
"loadingLibraries": { "message": "Caricamento delle librerie..." },
|
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
||||||
"photosEmptyState": { "message": "Nessun album o foto trovati." },
|
"photosEmptyState": { "message": "Aucun album ou photo trouvé." },
|
||||||
"photosEmptyStateSub": { "message": "Seleziona un server o assicurati di avere una libreria di foto in Plex." },
|
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou assurez-vous d'avoir une bibliothèque de photos dans Plex." },
|
||||||
"statsTitle": { "message": "Statistiche della libreria" },
|
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
||||||
"statsAllTokens": { "message": "Tutti i token" },
|
"statsAllTokens": { "message": "Tous les jetons" },
|
||||||
"statsAnalyzing": { "message": "Analisi della tua libreria..." },
|
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
||||||
"statsActiveTokens": { "message": "Token attivi" },
|
"statsActiveTokens": { "message": "Jetons actifs" },
|
||||||
"statsServersFound": { "message": "Server trovati" },
|
"statsServersFound": { "message": "Serveurs trouvés" },
|
||||||
"statsUniqueMovies": { "message": "Film unici" },
|
"statsUniqueMovies": { "message": "Films uniques" },
|
||||||
"statsUniqueSeries": { "message": "Serie uniche" },
|
"statsUniqueSeries": { "message": "Séries uniques" },
|
||||||
"statsUniqueArtists": { "message": "Artisti unici" },
|
"statsUniqueArtists": { "message": "Artistes uniques" },
|
||||||
"statsTokenServers": { "message": "Server token" },
|
"statsTokenServers": { "message": "Serveurs du jeton" },
|
||||||
"statsChartMoviesByGenre": { "message": "Contenuti per genere (Film)" },
|
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Contenuti per genere (Serie)" },
|
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
||||||
"statsChartByDecade": { "message": "Contenuti per decennio" },
|
"statsChartByDecade": { "message": "Contenu par décennie" },
|
||||||
"recommendationsTitle": { "message": "Raccomandazioni per te" },
|
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
||||||
"historyTitle": { "message": "Cronologia visualizzazioni" },
|
"historyTitle": { "message": "Historique de visionnage" },
|
||||||
"clearHistory": { "message": "Cancella tutto" },
|
"clearHistory": { "message": "Tout effacer" },
|
||||||
"consoleTitle": { "message": "Console di scansione Plex" },
|
"consoleTitle": { "message": "Console de scan Plex" },
|
||||||
"footerCredit": { "message": "Un'interfaccia per il tuo universo Plex." },
|
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
||||||
"closeTrailer": { "message": "Chiudi trailer" },
|
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
||||||
"close": { "message": "Chiudi" },
|
"close": { "message": "Fermer" },
|
||||||
"photoViewer": { "message": "Visualizzatore di foto" },
|
"photoViewer": { "message": "Visionneuse de photos" },
|
||||||
"previous": { "message": "Precedente" },
|
"previous": { "message": "Précédent" },
|
||||||
"next": { "message": "Successivo" },
|
"next": { "message": "Suivant" },
|
||||||
"notificationTemplateText": { "message": "Notifica" },
|
"notificationTemplateText": { "message": "Notification" },
|
||||||
"settingsTitleFull": { "message": "Impostazioni e configurazione" },
|
"settingsTitleFull": { "message": "Réglages et Configuration" },
|
||||||
"settingsTabGeneral": { "message": "Generale" },
|
"settingsTabGeneral": { "message": "Général" },
|
||||||
"settingsTabPlex": { "message": "Plex" },
|
"settingsTabPlex": { "message": "Plex" },
|
||||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||||
"settingsTabPhpGen": { "message": "Generatore PHP" },
|
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
||||||
"settingsTabData": { "message": "Dati" },
|
"settingsTabData": { "message": "Données" },
|
||||||
"settingsApiServer": { "message": "Impostazioni API e server" },
|
"settingsApiServer": { "message": "Configuration API et serveur" },
|
||||||
"settingsTmdbApiLabel": { "message": "Chiave API TMDB (facoltativa)" },
|
"settingsTmdbApiLabel": { "message": "Clé API TMDB (Facultatif)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "La chiave predefinita verrà utilizzata se lasciata vuota" },
|
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si laissée vide" },
|
||||||
"settingsGoogleApiLabel": { "message": "Chiave API Google Gemini (facoltativa)" },
|
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Necessaria per utilizzare l'assistente AI" },
|
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
||||||
"settingsRegionLabel": { "message": "Regione per la scoperta di contenuti" },
|
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
||||||
"allRegions": { "message": "Tutte le regioni" },
|
"allRegions": { "message": "Toutes les régions" },
|
||||||
"settingsPhpUrlLabel": { "message": "URL del server per l'aggiunta di streaming" },
|
"settingsPhpUrlLabel": { "message": "URL du serveur pour ajouter des streams" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://tuo-server.com/percorso/dello/script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
||||||
"settingsInterface": { "message": "Interfaccia" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Modalità chiara" },
|
"settingsLightTheme": { "message": "Mode clair" },
|
||||||
"settingsShowHero": { "message": "Mostra la sezione di benvenuto 'Hero'" },
|
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Scansione dei contenuti" },
|
"settingsScanContent": { "message": "Scan de contenu" },
|
||||||
"settingsScanDesc": { "message": "Seleziona cosa scansionare e premi il pulsante." },
|
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
||||||
"settingsScanMovies": { "message": "Film" },
|
"settingsScanMovies": { "message": "Films" },
|
||||||
"settingsScanShows": { "message": "Serie" },
|
"settingsScanShows": { "message": "Séries" },
|
||||||
"settingsScanArtists": { "message": "Musica" },
|
"settingsScanArtists": { "message": "Musique" },
|
||||||
"settingsScanPhotos": { "message": "Foto" },
|
"settingsScanPhotos": { "message": "Photos" },
|
||||||
"settingsSelectAll": { "message": "Seleziona tutto" },
|
"settingsSelectAll": { "message": "Tout sélectionner" },
|
||||||
"settingsStartScan": { "message": "Avvia scansione" },
|
"settingsStartScan": { "message": "Lancer le scan" },
|
||||||
"settingsPlexTokens": { "message": "Token Plex" },
|
"settingsPlexTokens": { "message": "Jetons Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Modifica l'elenco dei token Plex (formato JSON)." },
|
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Salva token" },
|
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
||||||
"settingsJellyfinTitle": { "message": "Impostazioni Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Aggiungi i dettagli del tuo server Jellyfin per scansionarne il contenuto." },
|
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
||||||
"jellyfinUrlLabel": { "message": "URL del server Jellyfin" },
|
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
||||||
"jellyfinUserLabel": { "message": "Nome utente" },
|
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
||||||
"jellyfinPassLabel": { "message": "Password" },
|
"jellyfinPassLabel": { "message": "Mot de passe" },
|
||||||
"jellyfinConnectAndScan": { "message": "Connetti e scansiona" },
|
"jellyfinConnectAndScan": { "message": "Connecter et scanner" },
|
||||||
"settingsPhpGenTitle": { "message": "Generatore di script PHP per server" },
|
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
||||||
"settingsPhpFileOptions": { "message": "Opzioni file" },
|
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Percorso di salvataggio sul server" },
|
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Es: /var/www/html/liste (vuoto per la stessa cartella)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Nome file" },
|
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
||||||
"settingsPhpFileAction": { "message": "Azione file" },
|
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
||||||
"settingsPhpActionAppend": { "message": "Aggiungi alla fine del file (cumulativo)" },
|
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Sovrascrivi il file (ricomincia da capo)" },
|
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
||||||
"settingsPhpSecurity": { "message": "Sicurezza (facoltativa)" },
|
"settingsPhpSecurity": { "message": "Sécurité (Facultatif)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Usa chiave segreta (consigliato)" },
|
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Inserisci una chiave segreta sicura" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Codice generato" },
|
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "Il codice PHP generato apparirà qui." },
|
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
||||||
"settingsGenerateScript": { "message": "Genera script" },
|
"settingsGenerateScript": { "message": "Générer le script" },
|
||||||
"settingsCopyScript": { "message": "Copia script" },
|
"settingsCopyScript": { "message": "Copier le script" },
|
||||||
"settingsDataManagement": { "message": "Gestione del database locale" },
|
"settingsDataManagement": { "message": "Gestion de la base de données locale" },
|
||||||
"settingsImportDb": { "message": "Importa DB da file" },
|
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
||||||
"settingsExportDb": { "message": "Esporta DB su file" },
|
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
||||||
"settingsClearContent": { "message": "Cancella i dati dei contenuti locali" },
|
"settingsClearContent": { "message": "Effacer les données de contenu local" },
|
||||||
"settingsClearContentDesc": { "message": "Questa azione eliminerà film, serie e musica dal database locale, ma non influirà sui preferiti o sulle impostazioni." },
|
"settingsClearContentDesc": { "message": "Cette action supprimera les films, séries et musiques de la base de données locale, mais n'affectera pas vos favoris ni vos paramètres." },
|
||||||
"settingsClose": { "message": "Chiudi" },
|
"settingsClose": { "message": "Fermer" },
|
||||||
"settingsSave": { "message": "Salva impostazioni" },
|
"settingsSave": { "message": "Enregistrer les paramètres" },
|
||||||
"musicSidenavTitle": { "message": "Musica Plex" },
|
"musicSidenavTitle": { "message": "Musique de Plex" },
|
||||||
"musicAllServers": { "message": "Tutti i server" },
|
"musicAllServers": { "message": "Tous les serveurs" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Cerca un artista..." },
|
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Cerca nella discografia..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
||||||
"musicNothingPlaying": { "message": "Nessuna riproduzione in corso" },
|
"musicNothingPlaying": { "message": "Rien ne joue" },
|
||||||
"musicSelectSong": { "message": "Seleziona un brano" },
|
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
||||||
"musicToStart": { "message": "per avviare la riproduzione" },
|
"musicToStart": { "message": "pour commencer à jouer" },
|
||||||
"miniplayerDownloadSong": { "message": "Scarica brano" },
|
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Scarica album M3U" },
|
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
||||||
"miniplayerVolume": { "message": "Volume" },
|
"miniplayerVolume": { "message": "Volume" },
|
||||||
"miniplayerShuffle": { "message": "Casuale" },
|
"miniplayerShuffle": { "message": "Lecture aléatoire" },
|
||||||
"miniplayerEqualizer": { "message": "Equalizzatore" },
|
"miniplayerEqualizer": { "message": "Égaliseur" },
|
||||||
"miniplayerOpenList": { "message": "Apri elenco" },
|
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
||||||
"eqTitle": { "message": "Equalizzatore grafico" },
|
"eqTitle": { "message": "Égaliseur graphique" },
|
||||||
"eqPresetsLabel": { "message": "Preimpostazioni" },
|
"eqPresetsLabel": { "message": "Préréglages" },
|
||||||
"eqPresetFlat": { "message": "Piatto" },
|
"eqPresetFlat": { "message": "Plat" },
|
||||||
"eqPresetRock": { "message": "Rock" },
|
"eqPresetRock": { "message": "Rock" },
|
||||||
"eqPresetPop": { "message": "Pop" },
|
"eqPresetPop": { "message": "Pop" },
|
||||||
"eqPresetJazz": { "message": "Jazz" },
|
"eqPresetJazz": { "message": "Jazz" },
|
||||||
"eqPresetClassical": { "message": "Classica" },
|
"eqPresetClassical": { "message": "Classique" },
|
||||||
"eqPresetBassBoost": { "message": "Aumento dei bassi" },
|
"eqPresetBassBoost": { "message": "Accentuation des basses" },
|
||||||
"eqPreampLabel": { "message": "Preamplificatore" },
|
"eqPreampLabel": { "message": "Préamplificateur" },
|
||||||
"infoModalTitle": { "message": "Informazioni" },
|
"infoModalTitle": { "message": "Informations" },
|
||||||
"infoModalFieldTitle": { "message": "Titolo:" },
|
"infoModalFieldTitle": { "message": "Titre :" },
|
||||||
"infoModalFieldArtist": { "message": "Artista:" },
|
"infoModalFieldArtist": { "message": "Artiste :" },
|
||||||
"infoModalFieldAlbum": { "message": "Album:" },
|
"infoModalFieldAlbum": { "message": "Album :" },
|
||||||
"infoModalFieldSong": { "message": "Brano:" },
|
"infoModalFieldSong": { "message": "Chanson :" },
|
||||||
"infoModalFieldYear": { "message": "Anno:" },
|
"infoModalFieldYear": { "message": "Année :" },
|
||||||
"infoModalFieldGenre": { "message": "Genere:" },
|
"infoModalFieldGenre": { "message": "Genre :" },
|
||||||
"lang_en": { "message": "Inglese" },
|
"lang_en": { "message": "Anglais" },
|
||||||
"lang_es": { "message": "Spagnolo" },
|
"lang_es": { "message": "Espagnol" },
|
||||||
"lang_fr": { "message": "Francese" },
|
"lang_fr": { "message": "Français" },
|
||||||
"lang_de": { "message": "Tedesco" },
|
"lang_de": { "message": "Allemand" },
|
||||||
"lang_it": { "message": "Italiano" },
|
"lang_it": { "message": "Italien" },
|
||||||
"lang_pt": { "message": "Portoghese" },
|
"lang_pt": { "message": "Portugais" },
|
||||||
"essentialFeaturesNotSupported": { "message": "Il tuo browser non supporta le funzionalità essenziali." },
|
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctions essentielles." },
|
||||||
"dbAccessError": { "message": "Errore di accesso al database locale." },
|
"dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
|
||||||
"dbUpdateNeeded": { "message": "Il database deve essere aggiornato, ricarica la pagina." },
|
"dbUpdateNeeded": { "message": "La base de données doit être mise à jour, veuillez recharger la page." },
|
||||||
"dbBlocked": { "message": "Chiudi le altre schede di questa applicazione per continuare." },
|
"dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
|
||||||
"deletingContentData": { "message": "Eliminazione dei dati dei contenuti locali..." },
|
"deletingContentData": { "message": "Suppression des données de contenu local..." },
|
||||||
"noContentDataToDelete": { "message": "Nessun dato di contenuto da eliminare." },
|
"noContentDataToDelete": { "message": "Aucune donnée de contenu à supprimer." },
|
||||||
"contentDataDeleted": { "message": "Dati dei contenuti eliminati da IndexedDB." },
|
"contentDataDeleted": { "message": "Données de contenu supprimées d'IndexedDB." },
|
||||||
"errorDeletingData": { "message": "Errore durante l'eliminazione dei dati: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Erreur lors de la suppression des données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Editor di testo non disponibile." },
|
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
||||||
"errorLoadingTokens": { "message": "Errore durante il caricamento dei token per la modifica." },
|
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour l'édition." },
|
||||||
"errorLoadingTokensMessage": { "message": "Errore durante il caricamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Editor non disponibile per il salvataggio." },
|
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
|
||||||
"invalidJsonFormat": { "message": "Formato JSON non valido. Deve essere { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Token salvati correttamente." },
|
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
||||||
"errorSavingTokens": { "message": "Errore durante il salvataggio dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB non è disponibile." },
|
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
||||||
"dbExported": { "message": "Database esportato correttamente." },
|
"dbExported": { "message": "Base de données exportée avec succès." },
|
||||||
"errorExportingDb": { "message": "Errore durante l'esportazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Erreur lors de l'exportation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "Il file non contiene un oggetto JSON valido." },
|
"invalidJsonFile": { "message": "Le fichier ne contient pas d'objet JSON valide." },
|
||||||
"noDataToImport": { "message": "Il file non contiene dati per le sezioni correnti del database." },
|
"noDataToImport": { "message": "Le fichier ne contient pas de données pour les sections de la base de données actuelle." },
|
||||||
"dbImported": { "message": "Database importato correttamente." },
|
"dbImported": { "message": "Base de données importée avec succès." },
|
||||||
"errorImportingDb": { "message": "Errore durante l'importazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Erreur lors de l'importation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Aggiornamento della vista con i nuovi dati..." },
|
"updatingView": { "message": "Mise à jour de la vue avec les nouvelles données..." },
|
||||||
"confirmClearContent": { "message": "Sei sicuro di voler eliminare i dati dei contenuti locali (film, serie, musica, ecc.)? I preferiti e le impostazioni NON verranno eliminati." },
|
"confirmClearContent": { "message": "Êtes-vous sûr de vouloir supprimer les données de contenu local (films, séries, musique, etc.) ? Les favoris et les paramètres NE SERONT PAS supprimés." },
|
||||||
"trailerNotFound": { "message": "Nessun trailer trovato per questo titolo." },
|
"trailerNotFound": { "message": "Aucune bande-annonce trouvée pour ce titre." },
|
||||||
"confirmClearHistory": { "message": "Sei sicuro di voler cancellare tutta la cronologia delle visualizzazioni? Questa azione non può essere annullata." },
|
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action ne peut pas être annulée." },
|
||||||
"historyCleared": { "message": "Cronologia visualizzazioni cancellata." },
|
"historyCleared": { "message": "Historique de visionnage effacé." },
|
||||||
"historyItemDeleted": { "message": "Elemento eliminato dalla cronologia." },
|
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
||||||
"errorGeneratingScript": { "message": "Genera prima uno script per poterlo copiare." },
|
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
||||||
"scriptCopied": { "message": "Script PHP copiato negli appunti." },
|
"scriptCopied": { "message": "Script PHP copié dans le presse-papiers." },
|
||||||
"errorCopyingScript": { "message": "Errore durante la copia dello script." },
|
"errorCopyingScript": { "message": "Erreur lors de la copie du script." },
|
||||||
"scriptGenerated": { "message": "Script PHP generato." },
|
"scriptGenerated": { "message": "Script PHP généré." },
|
||||||
"errorLoadingAlbum": { "message": "Errore durante il caricamento dell'album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Erreur lors du chargement de l'album : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"noPhotoServerSelected": { "message": "Errore: non è stato selezionato alcun server di foto." },
|
"noPhotoServerSelected": { "message": "Erreur : Aucun serveur photo n'a été sélectionné." },
|
||||||
"loadingGenres": { "message": "Caricamento dei generi..." },
|
"loadingGenres": { "message": "Chargement des genres..." },
|
||||||
"errorLoadingGenres": { "message": "Errore durante il caricamento" },
|
"errorLoadingGenres": { "message": "Erreur de chargement" },
|
||||||
"noContentFound": { "message": "Nessun risultato trovato." },
|
"noContentFound": { "message": "Aucun résultat trouvé." },
|
||||||
"couldNotLoadContent": { "message": "Impossibile caricare il contenuto." },
|
"couldNotLoadContent": { "message": "Impossible de charger le contenu." },
|
||||||
"noFavorites": { "message": "Non hai ancora preferiti." },
|
"noFavorites": { "message": "Vous n'avez pas encore de favoris." },
|
||||||
"errorLoadingFavorites": { "message": "Errore durante il caricamento dei preferiti." },
|
"errorLoadingFavorites": { "message": "Erreur lors du chargement des favoris." },
|
||||||
"historyEmpty": { "message": "La tua cronologia è vuota." },
|
"historyEmpty": { "message": "Votre historique est vide." },
|
||||||
"historyEmptySub": { "message": "Esplora e guarda i contenuti perché appaiano qui." },
|
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
||||||
"errorGeneratingRecommendations": { "message": "Errore durante la generazione delle raccomandazioni." },
|
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
||||||
"noRecommendations": { "message": "Dobbiamo conoscerti meglio per darti consigli!" },
|
"noRecommendations": { "message": "Nous devons mieux vous connaître pour vous donner des recommandations !" },
|
||||||
"errorGeneratingStats": { "message": "Errore durante la generazione delle statistiche." },
|
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
||||||
"noServersForToken": { "message": "Nessun server associato trovato per questo token." },
|
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
||||||
"searchingActorContent": { "message": "Ricerca di contenuti di $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Recherche de contenu de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorLoadingActorContent": { "message": "Impossibile caricare i contenuti per $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
"errorLoadingActorContent": { "message": "Impossible de charger le contenu pour $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorAddingStream": { "message": "Errore durante l'aggiunta di streaming: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Erreur lors de l'ajout de stream(s) : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"phpUrlNotConfigured": { "message": "L'URL del server PHP non è configurato. Configuralo nelle Impostazioni." },
|
"phpUrlNotConfigured": { "message": "L'URL du serveur PHP n'est pas configurée. Veuillez la configurer dans les Paramètres." },
|
||||||
"searchingStreams": { "message": "Ricerca di streaming per \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Recherche de streams pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Invio di $count$ streaming al server...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Streaming aggiunto/i con successo." },
|
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
||||||
"generatingM3U": { "message": "Generazione di M3U per \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorGeneratingM3U": { "message": "Errore durante la generazione di M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Erreur lors de la génération M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"settingsSavedSuccess": { "message": "Impostazioni salvate correttamente." },
|
"settingsSavedSuccess": { "message": "Paramètres enregistrés avec succès." },
|
||||||
"errorSavingSettings": { "message": "Errore durante il salvataggio delle impostazioni nel database." },
|
"errorSavingSettings": { "message": "Erreur lors de l'enregistrement des paramètres dans la base de données." },
|
||||||
"languageChangeReload": { "message": "Lingua modificata. L'applicazione verrà ora ricaricata." },
|
"languageChangeReload": { "message": "Langue changée. L'application va maintenant être rechargée." },
|
||||||
"addedToFavorites": { "message": "Aggiunto ai preferiti." },
|
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
||||||
"removedFromFavorites": { "message": "Rimosso dai preferiti." },
|
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
||||||
"plexScanInProgress": { "message": "La scansione di Plex è già in corso." },
|
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
||||||
"plexScanStarting": { "message": "Avvio della scansione di Plex..." },
|
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
||||||
"noPlexTokens": { "message": "Nessun token Plex configurato." },
|
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
||||||
"clearingSections": { "message": "Cancellazione delle sezioni: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Fase di scansione iniziale completata." },
|
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
||||||
"retryPhaseFinished": { "message": "Fase di tentativi ripetuti terminata." },
|
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
||||||
"plexScanFinished": { "message": "Scansione terminata. Aggiornamento dei contenuti..." },
|
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
||||||
"scanCancelled": { "message": "Scansione annullata dall'utente." },
|
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
||||||
"scanCancelledInfo": { "message": "Scansione annullata." },
|
"scanCancelledInfo": { "message": "Scan annulé." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Errore durante l'inizializzazione del lettore musicale." },
|
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Errore critico durante il caricamento dei dati musicali." },
|
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
||||||
"errorLoadingArtists": { "message": "Errore durante il caricamento degli artisti." },
|
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
||||||
"dbUnavailableError": { "message": "Errore: database non disponibile." },
|
"dbUnavailableError": { "message": "Erreur : Base de données non disponible." },
|
||||||
"updatingMusicData": { "message": "Aggiornamento dei dati musicali..." },
|
"updatingMusicData": { "message": "Mise à jour des données musicales..." },
|
||||||
"musicDataUpdated": { "message": "Dati musicali aggiornati." },
|
"musicDataUpdated": { "message": "Données musicales mises à jour." },
|
||||||
"errorFetchingArtistSongs": { "message": "Errore durante il recupero dei brani dell'artista." },
|
"errorFetchingArtistSongs": { "message": "Erreur lors de la récupération des chansons de l'artiste." },
|
||||||
"errorLoadingSongs": { "message": "Errore durante il caricamento dei brani." },
|
"errorLoadingSongs": { "message": "Erreur lors du chargement des chansons." },
|
||||||
"noArtistsFound": { "message": "Nessun artista trovato." },
|
"noArtistsFound": { "message": "Aucun artiste trouvé." },
|
||||||
"shuffleOn": { "message": "Modalità casuale attivata." },
|
"shuffleOn": { "message": "Mode aléatoire activé." },
|
||||||
"shuffleOff": { "message": "Modalità casuale disattivata." },
|
"shuffleOff": { "message": "Mode aléatoire désactivé." },
|
||||||
"playbackError": { "message": "Errore di riproduzione" },
|
"playbackError": { "message": "Erreur de lecture" },
|
||||||
"errorLabel": { "message": "Errore" },
|
"errorLabel": { "message": "Erreur" },
|
||||||
"reloadingPage": { "message": "Ricaricamento della pagina..." },
|
"reloadingPage": { "message": "Rechargement de la page..." },
|
||||||
"viewed": { "message": "Visto" },
|
"viewed": { "message": "Vu" },
|
||||||
"local": { "message": "Locale" },
|
"local": { "message": "Local" },
|
||||||
"topRatedSort": {"message": "I più votati"},
|
"topRatedSort": {"message": "Les mieux notés"},
|
||||||
"recentSort": {"message": "Recenti"},
|
"recentSort": {"message": "Récents"},
|
||||||
"popularSort": {"message": "Popolari"},
|
"popularSort": {"message": "Populaires"},
|
||||||
"moviesSectionTitle": {"message": "Film"},
|
"moviesSectionTitle": {"message": "Films"},
|
||||||
"seriesSectionTitle": {"message": "Serie"},
|
"seriesSectionTitle": {"message": "Séries"},
|
||||||
"searchResultsFor": {"message": "Risultati per \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"contentFrom": {"message": "Contenuti di $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||||
"explore": {"message": "Esplora"},
|
"explore": {"message": "Explorer"},
|
||||||
"noGenre": {"message": "Senza categoria"},
|
"noGenre": {"message": "Sans catégorie"},
|
||||||
"synopsis": {"message": "Sinossi"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "Nessuna sinossi disponibile."},
|
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
||||||
"director": {"message": "Regista:"},
|
"director": {"message": "Réalisateur :"},
|
||||||
"writer": {"message": "Sceneggiatore:"},
|
"writer": {"message": "Scénariste :"},
|
||||||
"viewOnImdb": {"message": "Vedi su IMDb"},
|
"viewOnImdb": {"message": "Voir sur IMDb"},
|
||||||
"watchTrailer": {"message": "Guarda il trailer"},
|
"watchTrailer": {"message": "Voir la bande-annonce"},
|
||||||
"addToFavorites": {"message": "Aggiungi ai preferiti"},
|
"addToFavorites": {"message": "Ajouter aux favoris"},
|
||||||
"removeFromFavorites": {"message": "Rimuovi dai preferiti"},
|
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
||||||
"notAvailable": {"message": "Non disponibile"},
|
"notAvailable": {"message": "Non disponible"},
|
||||||
"mainCast": {"message": "Cast principale"},
|
"mainCast": {"message": "Distribution principale"},
|
||||||
"seasonsAndEpisodes": {"message": "Stagioni ed episodi"},
|
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
||||||
"similarContent": {"message": "Contenuti simili"},
|
"similarContent": {"message": "Contenu similaire"},
|
||||||
"filmography": {"message": "Filmografia"},
|
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"availableOn": {"message": "Disponibile su"},
|
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"episodesCount": {"message": "$count$ episodi", "placeholders": {"count": {"content": "$1"}}},
|
|
||||||
"seasonsCount": {"message": "$count$ stagioni", "placeholders": {"count": {"content": "$1"}}},
|
|
||||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"noTrailerFound": {"message": "Nessun trailer trovato per questo titolo."},
|
"noTrailerFound": {"message": "Aucune bande-annonce trouvée pour ce titre."},
|
||||||
"fatalInitError": {"message": "Errore fatale di inizializzazione"},
|
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
||||||
"fatalInitErrorSub": {"message": "Impossibile caricare l'applicazione."},
|
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
||||||
"invalidStreamInfo": {"message": "Informazioni non valide."},
|
"invalidStreamInfo": {"message": "Informations invalides."},
|
||||||
"dbUnavailableForStreams": {"message": "Database locale non disponibile."},
|
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
||||||
"noPlexServersForStreams": {"message": "Nessun server Plex."},
|
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
||||||
"notFoundOnServers": {"message": "\"$query$\" non trovato sui server Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "Poco fa" },
|
"relativeTime_justNow": { "message": "À l'instant" },
|
||||||
"relativeTime_minutesAgo": { "message": "$count$ minuti fa", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "Il y a $count$ minutes", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "$count$ ore fa", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "Il y a $count$ heures", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_yesterday": { "message": "Ieri" },
|
"relativeTime_yesterday": { "message": "Hier" },
|
||||||
"relativeTime_daysAgo": { "message": "$count$ giorni fa", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"errorLoadingDetails": { "message": "Errore durante il caricamento dei dettagli" },
|
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
||||||
"errorLoadingLocalContent": { "message": "Errore durante il caricamento del contenuto locale." },
|
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
||||||
"errorServerResponse": { "message": "Risposta del server non riuscita." },
|
"errorServerResponse": { "message": "Réponse du serveur non réussie." },
|
||||||
"errorPlexApi": { "message": "Errore $status$ dell'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Errore durante l'analisi dell'XML di Plex." },
|
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
||||||
"untitled": { "message": "Senza titolo" },
|
"untitled": { "message": "Sans titre" },
|
||||||
"itemCount": { "message": "$count$ elementi", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Nessun server di foto" },
|
"noPhotoServers": { "message": "Aucun serveur photo" },
|
||||||
"jellyfinScanInProgress": { "message": "La scansione di Jellyfin è già in corso." },
|
"jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
|
||||||
"jellyfinScanning": { "message": "Scansione di Jellyfin..." },
|
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Completa l'URL e il nome utente di Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "Connessione a Jellyfin in corso: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Autenticazione Jellyfin non riuscita: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Autenticazione Jellyfin riuscita." },
|
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Recupero delle librerie..." },
|
"jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
|
||||||
"jellyfinFetchFailed": { "message": "Errore durante il recupero delle librerie: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Erreur lors de la récupération des bibliothèques : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Nessuna libreria di film o serie trovata in Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "Aucune bibliothèque de films ou de séries trouvée dans Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ libreria/e multimediale/i trovata/e.", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Successo] '$libraryName' scansionata, $count$ titoli aggiunti.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName$' scanné, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Errore durante la scansione della libreria '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Erreur lors du scan de la bibliothèque '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Scansione Jellyfin completata. Aggiunti $movies$ film e $series$ serie.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Credenziali Jellyfin non configurate." },
|
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
||||||
"notFoundOnJellyfin": { "message": "\"$query$\" non trovato su Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"notFoundOnAnyServer": { "message": "\"$query$\" non trovato su nessun server.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"localOnPlex": { "message": "Su Plex" },
|
"localOnPlex": { "message": "Sur Plex" },
|
||||||
"searchOnPlex": { "message": "Cerca su Plex" },
|
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
||||||
"jellyfinTitle": { "message": "Contenuti Jellyfin" },
|
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
||||||
"noJellyfinContent": { "message": "Nessun contenuto Jellyfin trovato." },
|
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
||||||
"noJellyfinContentSub": { "message": "Assicurati di aver scansionato il tuo server Jellyfin nelle impostazioni." },
|
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
|
||||||
"activityViewerTitle": { "message": "Visualizzatore attività del server" },
|
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
||||||
"activitySelectServer": { "message": "Seleziona un server" },
|
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
||||||
"activityCheckBtn": { "message": "Aggiorna" },
|
"activityCheckBtn": { "message": "Actualiser" },
|
||||||
"activityNoSessions": { "message": "Nessuna sessione attiva su questo server." },
|
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
||||||
"activitySessionUser": { "message": "Utente" },
|
"activitySessionUser": { "message": "Utilisateur" },
|
||||||
"activitySessionDevice": { "message": "Dispositivo" },
|
"activitySessionDevice": { "message": "Appareil" },
|
||||||
"activitySessionContent": { "message": "Contenuto" },
|
"activitySessionContent": { "message": "Contenu" },
|
||||||
"activitySessionState": { "message": "Stato" },
|
"activitySessionState": { "message": "État" },
|
||||||
"activitySessionIdentifier": { "message": "Identificatore del client" },
|
"activitySessionIdentifier": { "message": "Identifiant du client" },
|
||||||
"activityCopyID": { "message": "Copia ID" },
|
"activityCopyID": { "message": "Copier l'ID" },
|
||||||
"activityError": { "message": "Impossibile ottenere l'attività del server." },
|
"activityError": { "message": "Impossible d'obtenir l'activité du serveur." },
|
||||||
"activityCopied": { "message": "Identificatore copiato negli appunti!" },
|
"activityCopied": { "message": "Identifiant copié dans le presse-papiers !" },
|
||||||
"activityCopyError": { "message": "Errore durante la copia dell'identificatore." },
|
"activityCopyError": { "message": "Erreur lors de la copie de l'identifiant." },
|
||||||
"noProvidersFound": { "message": "Nessun provider trovato." },
|
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
||||||
"availableOnPlex": { "message": "Disponibile su Plex" },
|
"availableOnPlex": { "message": "Disponible sur Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "Generatore di elenchi M3U" },
|
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
||||||
"selectAServer": { "message": "Seleziona un server..." },
|
"selectAServer": { "message": "Sélectionner un serveur..." },
|
||||||
"downloadM3u": { "message": "Scarica M3U" },
|
"downloadM3u": { "message": "Télécharger M3U" },
|
||||||
"m3uGenerator": { "message": "Generatore M3U" },
|
"m3uGenerator": { "message": "Générateur M3U" },
|
||||||
"selectLibraries": { "message": "Seleziona librerie" },
|
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
||||||
"howToUse": { "message": "Come usare" },
|
"howToUse": { "message": "Comment utiliser" },
|
||||||
"m3uInstruction1": { "message": "Scegli un server dall'elenco." },
|
"m3uInstruction1": { "message": "Choisissez un serveur dans la liste." },
|
||||||
"m3uInstruction2": { "message": "Seleziona una o più librerie da includere." },
|
"m3uInstruction2": { "message": "Sélectionnez une ou plusieurs bibliothèques à inclure." },
|
||||||
"m3uInstruction3": { "message": "Fai clic sul pulsante di download." },
|
"m3uInstruction3": { "message": "Cliquez sur le bouton de téléchargement." },
|
||||||
"m3uInstruction4": { "message": "Importa il file .m3u nel tuo lettore compatibile." },
|
"m3uInstruction4": { "message": "Importez le fichier .m3u dans votre lecteur compatible." },
|
||||||
"chatOpen": { "message": "Apri chat" },
|
"chatOpen": { "message": "Ouvrir le chat" },
|
||||||
"chatTitle": { "message": "Assistente AI" },
|
"chatTitle": { "message": "Assistant IA" },
|
||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Scrivi il tuo messaggio..." },
|
"chatPlaceholder": { "message": "Écrivez votre message..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Benvenuto! Sono il tuo assistente CinePlex. Chiedimi di film, serie o qualsiasi altra cosa tu voglia sapere." },
|
"chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Demandez-moi des informations sur les films, les séries ou tout ce que vous voulez savoir." },
|
||||||
"chatGoogleApiKeyMissing": { "message": "La chiave API di Google Gemini non è configurata. Impostala nelle impostazioni dell'estensione per utilizzare l'assistente AI." },
|
"chatGoogleApiKeyMissing": { "message": "La clé API Google Gemini n'est pas configurée. Veuillez la configurer dans les paramètres de l'extension pour utiliser l'assistant IA." },
|
||||||
"chatApiInvalidResponse": { "message": "L'API ha restituito una risposta non valida. Riprova." },
|
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse invalide. Veuillez réessayer." },
|
||||||
"chatApiError": { "message": "Errore di comunicazione con l'assistente AI" },
|
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
||||||
"downloadAll": { "message": "Scarica tutto" },
|
"downloadAll": { "message": "Tout télécharger" },
|
||||||
"download": { "message": "Scarica" },
|
"download": { "message": "Télécharger" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Cerca nella libreria Plex dell'utente film o serie per titolo." },
|
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou séries par titre." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Il titolo del film o della serie da cercare." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "Le titre du film ou de la série à rechercher." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Il tipo di contenuto da cercare. Può essere 'movie' per i film o 'series' per le serie. (Facoltativo)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "Le type de contenu à rechercher. Peut être 'movie' pour les films ou 'series' pour les séries. (Facultatif)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "La risoluzione video da cercare (ad es. '4k', '1080p'). (Facoltativo)." },
|
"aiToolNavigateToPageDesc": { "message": "Navigue l'utilisateur vers une page spécifique de l'interface de l'application." },
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "Il formato del contenitore video da cercare (ad es. 'mkv', 'mp4'). (Facoltativo)." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Indirizza l'utente a una pagina specifica dell'interfaccia dell'applicazione." },
|
"aiToolGetUserStatsDesc": { "message": "Obtient et affiche les statistiques de la bibliothèque de l'utilisateur, telles que le nombre total de films, séries et artistes uniques." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "Il nome della pagina a cui navigare, ad es.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' o 'm3u-generator'." },
|
"aiToolShowItemDetailsDesc": { "message": "Affiche la page de détails d'un film ou d'une série spécifique par son titre et son type." },
|
||||||
"aiToolGetUserStatsDesc": { "message": "Recupera e visualizza le statistiche della libreria dell'utente, come il numero totale di film, serie e artisti unici." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "Le titre exact du film ou de la série." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Visualizza la pagina dei dettagli di un film o di una serie specifica in base al titolo e al tipo." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "Il titolo esatto del film o della serie." },
|
"aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture actuelle de l'utilisateur pour la diffuser à un serveur PHP configuré." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Aggiunge un film o una serie alla playlist corrente dell'utente per lo streaming su un server PHP configurato." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Il titolo del film o della serie da aggiungere." },
|
"aiToolCheckAndDownloadDesc": { "message": "Vérifie la disponibilité d'une liste de titres de films ou de séries sur les serveurs locaux de l'utilisateur et, si trouvés, génère et télécharge un fichier de playlist M3U avec les streams trouvés." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un tableau de titres de films ou de séries à rechercher et télécharger." },
|
||||||
"aiToolCheckAndDownloadDesc": { "message": "Controlla la disponibilità di un elenco di titoli di film o serie sui server locali dell'utente e, se trovati, genera e scarica un file di playlist M3U con gli streaming trovati." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Le type de contenu de la liste. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un array di titoli di film o serie da cercare e scaricare." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Le nom du fichier M3U à télécharger (par exemple, 'MaListe.m3u'). S'il n'est pas fourni, un nom par défaut sera utilisé." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Il tipo di contenuto dell'elenco. Deve essere 'movie' o 'series'." },
|
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
||||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Il nome del file M3U da scaricare (ad es. 'MiaLista.m3u'). Se non fornito, verrà utilizzato un nome predefinito." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Aggiunge o rimuove un film o una serie dall'elenco dei preferiti dell'utente." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Il titolo del film o della serie." },
|
"aiToolGetRecommendationsDesc": { "message": "Génère et affiche une liste de recommandations de films ou de séries basées sur l'historique de visionnage et les favoris de l'utilisateur." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle des films ou des séries, permettant d'affiner les résultats par type, genre, année et ordre de classement." },
|
||||||
"aiToolGetRecommendationsDesc": { "message": "Genera e visualizza un elenco di consigli di film o serie basati sulla cronologia di visualizzazione e sui preferiti dell'utente." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
||||||
"aiToolApplyFiltersDesc": { "message": "Applica filtri alla visualizzazione corrente di film o serie, consentendo di affinare i risultati per tipo, genere, anno e ordine di ordinamento." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "Le nom du genre par lequel filtrer (par exemple, 'Action', 'Drame')." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Il tipo di contenuto a cui applicare i filtri. Deve essere 'movie' o 'series'." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "L'année de sortie par laquelle filtrer (par exemple, '2023')." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "Il nome del genere per cui filtrare (ad es. 'Azione', 'Drammatico')." },
|
"aiToolApplyFiltersSortParamDesc": { "message": "Le critère de tri pour les résultats. Valeurs valides : 'popularity.desc' (populaires), 'vote_average.desc' (mieux notés), 'release_date.desc' (récents pour les films) ou 'first_air_date.desc' (récents pour les séries)." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "L'anno di uscita per cui filtrare (ad es. '2023')." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Ouvre le lecteur de musique et commence à jouer des chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
||||||
"aiToolApplyFiltersSortParamDesc": { "message": "Il criterio di ordinamento per i risultati. Valori validi: 'popularity.desc' (popolari), 'vote_average.desc' (più votati), 'release_date.desc' (recenti per i film) o 'first_air_date.desc' (recenti per le serie)." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Apre il lettore musicale e avvia la riproduzione dei brani di un artista specifico dalla libreria dell'utente." },
|
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle avec l'assistant IA." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Il nome esatto dell'artista di cui si desidera riprodurre i brani." },
|
"aiToolDeleteDatabaseDesc": { "message": "Supprime toute la base de données locale de l'extension, y compris le contenu scanné, les paramètres et les favoris. Cette action est irréversible et rechargera l'application." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Cancella tutta la cronologia dei messaggi della conversazione corrente con l'assistente AI." },
|
"aiToolUpdateAllTokensDesc": { "message": "Lance un scan complet de tous les serveurs et bibliothèques Plex associés aux jetons configurés dans l'extension. Met à jour tous les films, séries, artistes et photos." },
|
||||||
"aiToolDeleteDatabaseDesc": { "message": "Elimina l'intero database locale dell'estensione, inclusi i contenuti scansionati, le impostazioni e i preferiti. Questa azione è irreversibile e ricaricherà l'applicazione." },
|
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
||||||
"aiToolUpdateAllTokensDesc": { "message": "Avvia una scansione completa di tutti i server e le librerie Plex associati ai token configurati nell'estensione. Aggiorna tutti i film, le serie, gli artisti e le foto." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du jeton X-Plex à ajouter." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Aggiunge un nuovo token X-Plex alla configurazione dell'estensione, consentendo all'applicazione di scansionare i contenuti di nuovi server Plex." },
|
"aiToolChangeRegionDesc": { "message": "Change la région utilisée pour la découverte de contenu dans l'API TMDB. Cela affectera les résultats affichés dans les sections de films et de séries, ainsi que les fournisseurs de streaming." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La stringa del token X-Plex da aggiungere." },
|
"aiToolChangeRegionRegionParamDesc": { "message": "Le code pays ISO 3166-1 à deux lettres pour la nouvelle région (par exemple, 'US' pour les États-Unis, 'ES' pour l'Espagne, 'MX' pour le Mexique)." },
|
||||||
"aiToolChangeRegionDesc": { "message": "Modifica la regione utilizzata per la scoperta di contenuti nell'API TMDB. Ciò influirà sui risultati visualizzati nelle sezioni di film e serie, nonché sui provider di streaming." },
|
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
||||||
"aiToolChangeRegionRegionParamDesc": { "message": "Il codice paese ISO 3166-1 a due lettere per la nuova regione (ad es. 'US' per gli Stati Uniti, 'ES' per la Spagna, 'MX' per il Messico)." },
|
"aiToolClearViewingHistoryDesc": { "message": "Efface l'historique de visionnage de l'utilisateur de la page d'historique." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Rimuove tutti i film e le serie che l'utente ha contrassegnato come preferiti." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Nettoie la vue des recommandations et supprime les recommandations mises en cache." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Cancella la cronologia di visualizzazione dell'utente dalla pagina della cronologia." },
|
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Svuota la vista dei consigli e rimuove i consigli memorizzati nella cache." },
|
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolSearchNotFound": { "message": "'$query' non trovato nella tua libreria.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigato alla pagina $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
||||||
"aiToolNavigateError": { "message": "Errore durante la navigazione alla pagina $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "L'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Errore nel recupero delle statistiche." },
|
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolItemNotFound": { "message": "Elemento '$title' non trovato.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Visualizzazione dei dettagli di '$title'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "Aggiunto '$title' alla playlist.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Aggiunto '$title' ai preferiti.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
||||||
"aiToolFavoriteRemoved": { "message": "Rimosso '$title' dai preferiti.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Visualizzazione dei consigli." },
|
"aiToolApplyFiltersSuccess": { "message": "Filtres appliqués avec succès." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genere '$genre' non trovato.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolPlayMusicNotReady": { "message": "Le lecteur de musique n'est pas prêt. Assurez-vous que votre bibliothèque musicale Plex a été scannée." },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filtri applicati correttamente." },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNotReady": { "message": "Il lettore musicale non è pronto. Assicurati che la tua libreria musicale di Plex sia stata scansionata." },
|
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name' non trovato.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Lecture de musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "Nessun brano trovato per '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolChatHistoryCleared": { "message": "Historique du chat effacé." },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Riproduzione di musica di '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolConfirmDeleteDatabase": { "message": "Êtes-vous sûr de vouloir supprimer la base de données locale ? Cette action est irréversible." },
|
||||||
"aiToolChatHistoryCleared": { "message": "Cronologia della chat cancellata." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Suppression de la base de données annulée." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "Sei sicuro di voler eliminare il database locale? Questa azione è irreversibile." },
|
"aiToolExecutionError": { "message": "Erreur lors de l'exécution de l'outil '$toolName$' : $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Eliminazione del database annullata." },
|
"aiToolUnknown": { "message": "Outil inconnu : '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolExecutionError": { "message": "Errore durante l'esecuzione dello strumento '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
||||||
"aiToolUnknown": { "message": "Strumento sconosciuto: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Erreur lors de l'effacement des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Preferiti cancellati." },
|
"aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
|
||||||
"aiToolFavoritesClearError": { "message": "Errore durante la cancellazione dei preferiti: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Erreur lors de l'effacement des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Consigli cancellati." },
|
"aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va être rechargée." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Errore durante la cancellazione dei consigli: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Erreur lors de la suppression de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Database eliminato. La pagina verrà ricaricata." },
|
"aiToolDatabaseDeleteBlocked": { "message": "La suppression de la base de données est bloquée. Fermez les autres onglets de l'application." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Errore durante l'eliminazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensSuccess": { "message": "Tous les jetons ont été mis à jour avec succès." },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "L'eliminazione del database è bloccata. Chiudi le altre schede dell'applicazione." },
|
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "Tutti i token sono stati aggiornati correttamente." },
|
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Errore durante l'aggiornamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Erreur lors de l'ajout du jeton Plex : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Token Plex aggiunto correttamente." },
|
"aiToolChangeRegionSuccess": { "message": "Région changée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenError": { "message": "Errore durante l'aggiunta del token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Regione modificata in $region$. Il contenuto è in fase di aggiornamento.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
||||||
"aiToolChangeRegionError": { "message": "Errore durante la modifica della regione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Erreur lors de l'effacement de l'historique de visionnage : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Cronologia visualizzazioni cancellata." },
|
"aiSystemPrompt_v3": { "message": "Vous êtes un assistant expert en films et séries appelé CinePlex. Votre fonction principale est d'aider les utilisateurs à découvrir du contenu et à interagir avec leur bibliothèque. Suivez ces règles rigoureusement : 1. **NE JAMAIS** inventer que vous avez effectué une action si vous n'avez pas utilisé un outil pour cela. Par exemple, ne dites pas 'j'ai téléchargé X' si vous n'avez pas utilisé l'outil de téléchargement. 2. Pour les demandes de recommandations ou de listes (ex. 'dis-moi 5 films d'horreur'), utilisez vos propres connaissances pour générer la liste. Présentez-la sous forme numérotée ou à puces. Après avoir affiché la liste, demandez de manière proactive à l'utilisateur s'il souhaite que vous vérifiiez la disponibilité sur ses serveurs locaux et que vous créiez un fichier M3U. 3. **SEULEMENT** si l'utilisateur confirme qu'il souhaite vérifier ou télécharger la liste, utilisez l'outil `check_and_download_titles_list`. Ne l'utilisez pas sans confirmation explicite. 4. Pour toute autre action comme naviguer, obtenir des statistiques ou rechercher un titre spécifique, utilisez les outils appropriés. Soyez toujours concis, amical et efficace." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Errore durante la cancellazione della cronologia di visualizzazione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
||||||
"aiSystemPrompt_v3": { "message": "Sei un assistente esperto di film e serie chiamato CinePlex. La tua funzione principale è aiutare gli utenti a scoprire contenuti e a interagire con la loro libreria. Segui rigorosamente queste regole: 1. **NON FINGERE MAI** di aver eseguito un'azione se non hai utilizzato uno strumento per farlo. Ad esempio, non dire 'Ho scaricato X' se non hai utilizzato lo strumento di download. 2. Per le richieste di consigli o elenchi (ad es. 'dimmi 5 film dell'orrore'), usa le tue conoscenze per generare l'elenco. Presentalo in formato numerato o puntato. Dopo aver visualizzato l'elenco, chiedi proattivamente all'utente se desidera che tu verifichi la disponibilità sui suoi server locali e crei un file M3U. 3. **SOLO** se l'utente conferma di voler controllare o scaricare l'elenco, utilizza lo strumento `check_and_download_titles_list`. Non utilizzarlo senza una conferma esplicita. 4. Per qualsiasi altra azione come la navigazione, l'ottenimento di statistiche, la ricerca di un titolo specifico o il filtraggio per risoluzione o contenitore, utilizza gli strumenti appropriati. Sii sempre conciso, amichevole ed efficiente." },
|
"aiToolM3UCheckingTitles": { "message": "Vérification des titres sur vos serveurs locaux..." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Fornisci un elenco di titoli per creare la playlist." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveurs locaux." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Controllo dei titoli sui tuoi server locali..." },
|
"aiToolM3UDownloadStarted": { "message": "Fait ! J'ai trouvé $1 sur $2 titres sur vos serveurs et j'ai lancé le téléchargement de la playlist M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Non ho trovato nessuno dei film o delle serie dell'elenco sui tuoi server locali." },
|
"backToProviders": { "message": "Retour aux fournisseurs" },
|
||||||
"aiToolM3UDownloadStarted": { "message": "Fatto! Ho trovato $1 dei $2 titoli sui tuoi server e ho avviato il download della playlist M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"artistsCounterSingle": { "message": "$total$ Artiste", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"backToProviders": { "message": "Torna ai provider" },
|
"artistsCounterLoading": { "message": "Chargement..." },
|
||||||
"artistsCounterSingle": { "message": "$total$ artista", "placeholders": { "total": { "content": "$1" } } },
|
"downloadingSong": { "message": "Démarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "Caricamento..." },
|
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"downloadingSong": { "message": "Avvio del download di \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Génération M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"errorDownloadingSong": { "message": "Errore durante il download di \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "Generazione di M3U per \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"retyingSection": { "message": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U per l'album \"$artist$\" generato.", "placeholders": { "artist": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Nuovo tentativo per la sezione \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"retrySuccess": { "message": "[SUCCESSO] Nuovo tentativo per \"$title$\" completato.", "placeholders": { "title": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERRORE FINALE] Tentativo fallito per \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "Jeton $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Avvio della fase di tentativi ripetuti per $count$ sezioni...", "placeholders": { "count": { "content": "$1" } } },
|
"errorProcessingToken": { "message": "Erreur lors du traitement du jeton $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"tokenFoundServers": { "message": "Token $token$... ha trovato $count$ server.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"errorProcessingToken": { "message": "Errore durante l'elaborazione del token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"plexScanFatalError": { "message": "ERRORE FATALE: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
||||||
"errorDuringScan": { "message": "Errore durante la scansione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
||||||
"stoppingPlexScan": { "message": "Arresto della scansione di Plex..." },
|
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
||||||
"invalidTokenProvided": { "message": "Token non valido fornito." },
|
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
||||||
"tokenAlreadyExists": { "message": "Il token esiste già." },
|
"noStreamsFoundForSelection": { "message": "Aucun stream trouvé pour la sélection." },
|
||||||
"tokenAddedSuccessfully": { "message": "Token aggiunto correttamente." },
|
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
||||||
"noStreamsFoundForSelection": { "message": "Nessuno streaming trovato per la selezione." },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"autoplayBlocked": { "message": "Riproduzione automatica bloccata." },
|
"page": { "message": "Page" }
|
||||||
"page": { "message": "Pagina" },
|
|
||||||
"all": { "message": "Tutti" },
|
|
||||||
"userScore": { "message": "Punteggio degli utenti" },
|
|
||||||
"duration": { "message": "Durata" },
|
|
||||||
"min": { "message": "Min" },
|
|
||||||
"max": { "message": "Max" }
|
|
||||||
}
|
}
|
@ -1,55 +1,55 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Examina servidores Plex em busca de conteúdo e o exibe na interface" },
|
"appDescription": { "message": "Scaneia servidores Plex para encontrar conteúdo e mostra-o na interface" },
|
||||||
"appTagline": { "message": "Filmes, Séries e Música" },
|
"appTagline": { "message": "Filmes, Séries e Música" },
|
||||||
"appLocaleCode": { "message": "pt-BR" },
|
"appLocaleCode": { "message": "pt-PT" },
|
||||||
"toggleNavigation": { "message": "Alternar navegação" },
|
"toggleNavigation": { "message": "Alternar Navegação" },
|
||||||
"searchPlaceholder": { "message": "Pesquisar filmes ou séries..." },
|
"searchPlaceholder": { "message": "Pesquisar filmes ou séries..." },
|
||||||
"openMusicPlayer": { "message": "Abrir reprodutor de música" },
|
"openMusicPlayer": { "message": "Abrir Reprodutor de Música" },
|
||||||
"settings": { "message": "Configurações" },
|
"settings": { "message": "Definições" },
|
||||||
"navMovies": { "message": "Filmes" },
|
"navMovies": { "message": "Filmes" },
|
||||||
"navSeries": { "message": "Séries" },
|
"navSeries": { "message": "Séries" },
|
||||||
"navProviders": { "message": "Provedores" },
|
"navProviders": { "message": "Fornecedores" },
|
||||||
"navPhotos": { "message": "Fotos" },
|
"navPhotos": { "message": "Fotos" },
|
||||||
"navStats": { "message": "Estatísticas" },
|
"navStats": { "message": "Estatísticas" },
|
||||||
"navFavorites": { "message": "Favoritos" },
|
"navFavorites": { "message": "Favoritos" },
|
||||||
"navHistory": { "message": "Histórico" },
|
"navHistory": { "message": "Histórico" },
|
||||||
"navRecommendations": { "message": "Recomendações" },
|
"navRecommendations": { "message": "Recomendações" },
|
||||||
"navMusic": { "message": "Música" },
|
"navMusic": { "message": "Música" },
|
||||||
"navM3uGenerator": { "message": "Gerador de M3U" },
|
"navM3uGenerator": { "message": "Gerador M3U" },
|
||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Explore milhares de filmes e séries." },
|
"heroSubtitle": { "message": "Explore milhares de filmes e séries." },
|
||||||
"addStream": { "message": "Adicionar stream" },
|
"addStream": { "message": "Adicionar Stream" },
|
||||||
"moreInfo": { "message": "Mais informações" },
|
"moreInfo": { "message": "Mais informações" },
|
||||||
"popularMovies": { "message": "Filmes populares" },
|
"popularMovies": { "message": "Filmes Populares" },
|
||||||
"allGenres": { "message": "Todos os gêneros" },
|
"allGenres": { "message": "Todos os géneros" },
|
||||||
"allYears": { "message": "Todos os anos" },
|
"allYears": { "message": "Todos os anos" },
|
||||||
"sortPopular": { "message": "Mais populares" },
|
"sortPopular": { "message": "Mais populares" },
|
||||||
"sortTopRated": { "message": "Mais bem avaliados" },
|
"sortTopRated": { "message": "Melhor avaliados" },
|
||||||
"sortRecent": { "message": "Mais recentes" },
|
"sortRecent": { "message": "Mais recentes" },
|
||||||
"loadMore": { "message": "Carregar mais" },
|
"loadMore": { "message": "Carregar mais" },
|
||||||
"photosBreadcrumbHome": { "message": "Álbuns" },
|
"photosBreadcrumbHome": { "message": "Álbuns" },
|
||||||
"selectServer": { "message": "Selecione um servidor" },
|
"selectServer": { "message": "Selecionar um servidor" },
|
||||||
"loading": { "message": "Carregando..." },
|
"loading": { "message": "A carregar..." },
|
||||||
"loadingLibraries": { "message": "Carregando bibliotecas..." },
|
"loadingLibraries": { "message": "A carregar bibliotecas..." },
|
||||||
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrado." },
|
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrada." },
|
||||||
"photosEmptyStateSub": { "message": "Selecione um servidor ou verifique se você tem uma biblioteca de fotos no Plex." },
|
"photosEmptyStateSub": { "message": "Por favor, selecione um servidor ou certifique-se de que tem uma biblioteca de fotos no Plex." },
|
||||||
"statsTitle": { "message": "Estatísticas da biblioteca" },
|
"statsTitle": { "message": "Estatísticas da Biblioteca" },
|
||||||
"statsAllTokens": { "message": "Todos os tokens" },
|
"statsAllTokens": { "message": "Todos os Tokens" },
|
||||||
"statsAnalyzing": { "message": "Analisando sua biblioteca..." },
|
"statsAnalyzing": { "message": "A analisar a sua biblioteca..." },
|
||||||
"statsActiveTokens": { "message": "Tokens ativos" },
|
"statsActiveTokens": { "message": "Tokens Ativos" },
|
||||||
"statsServersFound": { "message": "Servidores encontrados" },
|
"statsServersFound": { "message": "Servidores Encontrados" },
|
||||||
"statsUniqueMovies": { "message": "Filmes únicos" },
|
"statsUniqueMovies": { "message": "Filmes Únicos" },
|
||||||
"statsUniqueSeries": { "message": "Séries únicas" },
|
"statsUniqueSeries": { "message": "Séries Únicas" },
|
||||||
"statsUniqueArtists": { "message": "Artistas únicos" },
|
"statsUniqueArtists": { "message": "Artistas Únicos" },
|
||||||
"statsTokenServers": { "message": "Servidores de token" },
|
"statsTokenServers": { "message": "Servidores do Token" },
|
||||||
"statsChartMoviesByGenre": { "message": "Conteúdo por gênero (Filmes)" },
|
"statsChartMoviesByGenre": { "message": "Conteúdo por Género (Filmes)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Conteúdo por gênero (Séries)" },
|
"statsChartSeriesByGenre": { "message": "Conteúdo por Género (Séries)" },
|
||||||
"statsChartByDecade": { "message": "Conteúdo por década" },
|
"statsChartByDecade": { "message": "Conteúdo por Década" },
|
||||||
"recommendationsTitle": { "message": "Recomendações para você" },
|
"recommendationsTitle": { "message": "Recomendações para si" },
|
||||||
"historyTitle": { "message": "Histórico de visualização" },
|
"historyTitle": { "message": "Histórico de Visualização" },
|
||||||
"clearHistory": { "message": "Limpar tudo" },
|
"clearHistory": { "message": "Limpar Tudo" },
|
||||||
"consoleTitle": { "message": "Console de verificação do Plex" },
|
"consoleTitle": { "message": "Consola de Leitura Plex" },
|
||||||
"footerCredit": { "message": "Uma interface para o seu universo Plex." },
|
"footerCredit": { "message": "Uma interface para o seu universo Plex." },
|
||||||
"closeTrailer": { "message": "Fechar trailer" },
|
"closeTrailer": { "message": "Fechar trailer" },
|
||||||
"close": { "message": "Fechar" },
|
"close": { "message": "Fechar" },
|
||||||
@ -57,185 +57,185 @@
|
|||||||
"previous": { "message": "Anterior" },
|
"previous": { "message": "Anterior" },
|
||||||
"next": { "message": "Próximo" },
|
"next": { "message": "Próximo" },
|
||||||
"notificationTemplateText": { "message": "Notificação" },
|
"notificationTemplateText": { "message": "Notificação" },
|
||||||
"settingsTitleFull": { "message": "Configurações e ajustes" },
|
"settingsTitleFull": { "message": "Definições e Configuração" },
|
||||||
"settingsTabGeneral": { "message": "Geral" },
|
"settingsTabGeneral": { "message": "Geral" },
|
||||||
"settingsTabPlex": { "message": "Plex" },
|
"settingsTabPlex": { "message": "Plex" },
|
||||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||||
"settingsTabPhpGen": { "message": "Gerador de PHP" },
|
"settingsTabPhpGen": { "message": "Gerador PHP" },
|
||||||
"settingsTabData": { "message": "Dados" },
|
"settingsTabData": { "message": "Dados" },
|
||||||
"settingsApiServer": { "message": "Configurações de API e servidor" },
|
"settingsApiServer": { "message": "Configuração de API e Servidor" },
|
||||||
"settingsTmdbApiLabel": { "message": "Chave de API do TMDB (opcional)" },
|
"settingsTmdbApiLabel": { "message": "Chave de API TMDB (Opcional)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "A chave padrão será usada se o campo for deixado em branco" },
|
"settingsTmdbApiPlaceholder": { "message": "Será usada a chave padrão se deixado em branco" },
|
||||||
"settingsGoogleApiLabel": { "message": "Chave de API do Google Gemini (opcional)" },
|
"settingsGoogleApiLabel": { "message": "Chave de API Google Gemini (Opcional)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Necessária para usar o assistente de IA" },
|
"settingsGoogleApiPlaceholder": { "message": "Necessária para usar o assistente de IA" },
|
||||||
"settingsRegionLabel": { "message": "Região para descoberta de conteúdo" },
|
"settingsRegionLabel": { "message": "Região para descoberta de conteúdo" },
|
||||||
"allRegions": { "message": "Todas as regiões" },
|
"allRegions": { "message": "Todas as regiões" },
|
||||||
"settingsPhpUrlLabel": { "message": "URL do servidor para adicionar streams" },
|
"settingsPhpUrlLabel": { "message": "URL do Servidor para Adicionar Streams" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://seu-servidor.com/caminho/para/script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://o-seu-servidor.com/caminho/para/o-script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Modo claro" },
|
"settingsLightTheme": { "message": "Modo Claro" },
|
||||||
"settingsShowHero": { "message": "Mostrar seção de boas-vindas 'Hero'" },
|
"settingsShowHero": { "message": "Mostrar secção de boas-vindas 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Verificação de conteúdo" },
|
"settingsScanContent": { "message": "Análise de Conteúdo" },
|
||||||
"settingsScanDesc": { "message": "Selecione o que verificar e pressione o botão." },
|
"settingsScanDesc": { "message": "Selecione o que analisar e clique no botão." },
|
||||||
"settingsScanMovies": { "message": "Filmes" },
|
"settingsScanMovies": { "message": "Filmes" },
|
||||||
"settingsScanShows": { "message": "Séries" },
|
"settingsScanShows": { "message": "Séries" },
|
||||||
"settingsScanArtists": { "message": "Música" },
|
"settingsScanArtists": { "message": "Música" },
|
||||||
"settingsScanPhotos": { "message": "Fotos" },
|
"settingsScanPhotos": { "message": "Fotos" },
|
||||||
"settingsSelectAll": { "message": "Selecionar tudo" },
|
"settingsSelectAll": { "message": "Selecionar Tudo" },
|
||||||
"settingsStartScan": { "message": "Iniciar verificação" },
|
"settingsStartScan": { "message": "Iniciar Análise" },
|
||||||
"settingsPlexTokens": { "message": "Tokens do Plex" },
|
"settingsPlexTokens": { "message": "Tokens Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Edite a lista de tokens do Plex (formato JSON)." },
|
"settingsPlexTokensDesc": { "message": "Editar a lista de tokens Plex (formato JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Salvar tokens" },
|
"settingsSaveTokens": { "message": "Guardar Tokens" },
|
||||||
"settingsJellyfinTitle": { "message": "Configurações do Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Configuração Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Adicione os detalhes do seu servidor Jellyfin para verificar o conteúdo dele." },
|
"settingsJellyfinDesc": { "message": "Adicione os dados do seu servidor Jellyfin para analisar o seu conteúdo." },
|
||||||
"jellyfinUrlLabel": { "message": "URL do servidor Jellyfin" },
|
"jellyfinUrlLabel": { "message": "URL do Servidor Jellyfin" },
|
||||||
"jellyfinUserLabel": { "message": "Nome de usuário" },
|
"jellyfinUserLabel": { "message": "Nome de Utilizador" },
|
||||||
"jellyfinPassLabel": { "message": "Senha" },
|
"jellyfinPassLabel": { "message": "Palavra-passe" },
|
||||||
"jellyfinConnectAndScan": { "message": "Conectar e verificar" },
|
"jellyfinConnectAndScan": { "message": "Ligar e Analisar" },
|
||||||
"settingsPhpGenTitle": { "message": "Gerador de script PHP para servidor" },
|
"settingsPhpGenTitle": { "message": "Gerador de Script PHP para o Servidor" },
|
||||||
"settingsPhpFileOptions": { "message": "Opções de arquivo" },
|
"settingsPhpFileOptions": { "message": "Opções do Ficheiro" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Caminho para salvar no servidor" },
|
"settingsPhpSavePathLabel": { "message": "Caminho de Gravação no Servidor" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listas (em branco para a mesma pasta)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listas (em branco para a mesma pasta)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Nome do arquivo" },
|
"settingsPhpFilenameLabel": { "message": "Nome do Ficheiro" },
|
||||||
"settingsPhpFileAction": { "message": "Ação do arquivo" },
|
"settingsPhpFileAction": { "message": "Ação no Ficheiro" },
|
||||||
"settingsPhpActionAppend": { "message": "Anexar ao final do arquivo (cumulativo)" },
|
"settingsPhpActionAppend": { "message": "Adicionar ao fim do ficheiro (cumulativo)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Substituir o arquivo (começar do zero)" },
|
"settingsPhpActionOverwrite": { "message": "Sobrescrever o ficheiro (começar de novo)" },
|
||||||
"settingsPhpSecurity": { "message": "Segurança (opcional)" },
|
"settingsPhpSecurity": { "message": "Segurança (Opcional)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Usar chave secreta (recomendado)" },
|
"settingsPhpUseSecretKey": { "message": "Usar chave secreta (Recomendado)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Digite uma chave secreta segura" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Introduza uma chave secreta segura" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Código gerado" },
|
"settingsPhpGeneratedCode": { "message": "Código Gerado" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "O código PHP gerado aparecerá aqui." },
|
"settingsPhpGeneratedPlaceholder": { "message": "O código PHP gerado aparecerá aqui." },
|
||||||
"settingsGenerateScript": { "message": "Gerar script" },
|
"settingsGenerateScript": { "message": "Gerar Script" },
|
||||||
"settingsCopyScript": { "message": "Copiar script" },
|
"settingsCopyScript": { "message": "Copiar Script" },
|
||||||
"settingsDataManagement": { "message": "Gerenciamento do banco de dados local" },
|
"settingsDataManagement": { "message": "Gestão da Base de Dados Local" },
|
||||||
"settingsImportDb": { "message": "Importar banco de dados de um arquivo" },
|
"settingsImportDb": { "message": "Importar BD de Ficheiro" },
|
||||||
"settingsExportDb": { "message": "Exportar banco de dados para um arquivo" },
|
"settingsExportDb": { "message": "Exportar BD para Ficheiro" },
|
||||||
"settingsClearContent": { "message": "Limpar dados de conteúdo local" },
|
"settingsClearContent": { "message": "Limpar Dados de Conteúdo Local" },
|
||||||
"settingsClearContentDesc": { "message": "Esta ação excluirá filmes, séries e músicas do banco de dados local, mas não afetará seus favoritos ou suas configurações." },
|
"settingsClearContentDesc": { "message": "Esta ação apagará filmes, séries e música da base de dados local, mas não afetará os seus favoritos nem as suas definições." },
|
||||||
"settingsClose": { "message": "Fechar" },
|
"settingsClose": { "message": "Fechar" },
|
||||||
"settingsSave": { "message": "Salvar configurações" },
|
"settingsSave": { "message": "Guardar Definições" },
|
||||||
"musicSidenavTitle": { "message": "Música do Plex" },
|
"musicSidenavTitle": { "message": "Música do Plex" },
|
||||||
"musicAllServers": { "message": "Todos os servidores" },
|
"musicAllServers": { "message": "Todos os Servidores" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Pesquisar um artista..." },
|
"musicSearchArtistPlaceholder": { "message": "Pesquisar artista..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Pesquisar na discografia..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Pesquisar na discografia..." },
|
||||||
"musicNothingPlaying": { "message": "Nada tocando" },
|
"musicNothingPlaying": { "message": "Nada a reproduzir" },
|
||||||
"musicSelectSong": { "message": "Selecione uma música" },
|
"musicSelectSong": { "message": "Selecionar uma canção" },
|
||||||
"musicToStart": { "message": "para começar a tocar" },
|
"musicToStart": { "message": "para começar a reproduzir" },
|
||||||
"miniplayerDownloadSong": { "message": "Baixar música" },
|
"miniplayerDownloadSong": { "message": "Descarregar canção" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Baixar álbum M3U" },
|
"miniplayerDownloadAlbum": { "message": "Descarregar álbum M3U" },
|
||||||
"miniplayerVolume": { "message": "Volume" },
|
"miniplayerVolume": { "message": "Volume" },
|
||||||
"miniplayerShuffle": { "message": "Aleatório" },
|
"miniplayerShuffle": { "message": "Aleatório" },
|
||||||
"miniplayerEqualizer": { "message": "Equalizador" },
|
"miniplayerEqualizer": { "message": "Equalizador" },
|
||||||
"miniplayerOpenList": { "message": "Abrir lista" },
|
"miniplayerOpenList": { "message": "Abrir lista" },
|
||||||
"eqTitle": { "message": "Equalizador gráfico" },
|
"eqTitle": { "message": "Equalizador Gráfico" },
|
||||||
"eqPresetsLabel": { "message": "Predefinições" },
|
"eqPresetsLabel": { "message": "Predefinições" },
|
||||||
"eqPresetFlat": { "message": "Plano" },
|
"eqPresetFlat": { "message": "Plano" },
|
||||||
"eqPresetRock": { "message": "Rock" },
|
"eqPresetRock": { "message": "Rock" },
|
||||||
"eqPresetPop": { "message": "Pop" },
|
"eqPresetPop": { "message": "Pop" },
|
||||||
"eqPresetJazz": { "message": "Jazz" },
|
"eqPresetJazz": { "message": "Jazz" },
|
||||||
"eqPresetClassical": { "message": "Clássico" },
|
"eqPresetClassical": { "message": "Clássica" },
|
||||||
"eqPresetBassBoost": { "message": "Reforço de graves" },
|
"eqPresetBassBoost": { "message": "Reforço de Graves" },
|
||||||
"eqPreampLabel": { "message": "Pré-amplificador" },
|
"eqPreampLabel": { "message": "Pré-amplificador" },
|
||||||
"infoModalTitle": { "message": "Informações" },
|
"infoModalTitle": { "message": "Informações" },
|
||||||
"infoModalFieldTitle": { "message": "Título:" },
|
"infoModalFieldTitle": { "message": "Título:" },
|
||||||
"infoModalFieldArtist": { "message": "Artista:" },
|
"infoModalFieldArtist": { "message": "Artista:" },
|
||||||
"infoModalFieldAlbum": { "message": "Álbum:" },
|
"infoModalFieldAlbum": { "message": "Álbum:" },
|
||||||
"infoModalFieldSong": { "message": "Música:" },
|
"infoModalFieldSong": { "message": "Canção:" },
|
||||||
"infoModalFieldYear": { "message": "Ano:" },
|
"infoModalFieldYear": { "message": "Ano:" },
|
||||||
"infoModalFieldGenre": { "message": "Gênero:" },
|
"infoModalFieldGenre": { "message": "Género:" },
|
||||||
"lang_en": { "message": "Inglês" },
|
"lang_en": { "message": "Inglês" },
|
||||||
"lang_es": { "message": "Espanhol" },
|
"lang_es": { "message": "Espanhol" },
|
||||||
"lang_fr": { "message": "Francês" },
|
"lang_fr": { "message": "Francês" },
|
||||||
"lang_de": { "message": "Alemão" },
|
"lang_de": { "message": "Alemão" },
|
||||||
"lang_it": { "message": "Italiano" },
|
"lang_it": { "message": "Italiano" },
|
||||||
"lang_pt": { "message": "Português" },
|
"lang_pt": { "message": "Português" },
|
||||||
"essentialFeaturesNotSupported": { "message": "Seu navegador não suporta recursos essenciais." },
|
"essentialFeaturesNotSupported": { "message": "O seu navegador não suporta funções essenciais." },
|
||||||
"dbAccessError": { "message": "Erro ao acessar o banco de dados local." },
|
"dbAccessError": { "message": "Erro ao aceder à base de dados local." },
|
||||||
"dbUpdateNeeded": { "message": "O banco de dados precisa ser atualizado, recarregue a página." },
|
"dbUpdateNeeded": { "message": "A base de dados precisa de ser atualizada, por favor, recarregue a página." },
|
||||||
"dbBlocked": { "message": "Feche outras abas deste aplicativo para continuar." },
|
"dbBlocked": { "message": "Por favor, feche outros separadores desta aplicação para continuar." },
|
||||||
"deletingContentData": { "message": "Excluindo dados de conteúdo local..." },
|
"deletingContentData": { "message": "A apagar dados de conteúdo locais..." },
|
||||||
"noContentDataToDelete": { "message": "Nenhum dado de conteúdo para excluir." },
|
"noContentDataToDelete": { "message": "Não há dados de conteúdo para apagar." },
|
||||||
"contentDataDeleted": { "message": "Dados de conteúdo excluídos do IndexedDB." },
|
"contentDataDeleted": { "message": "Dados de conteúdo apagados do IndexedDB." },
|
||||||
"errorDeletingData": { "message": "Erro ao excluir dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Erro ao apagar dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Editor de texto não disponível." },
|
"aceEditorNotAvailable": { "message": "Editor de texto não disponível." },
|
||||||
"errorLoadingTokens": { "message": "Erro ao carregar tokens para edição." },
|
"errorLoadingTokens": { "message": "Erro ao carregar tokens para edição." },
|
||||||
"errorLoadingTokensMessage": { "message": "Erro ao carregar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Erro ao carregar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Editor não disponível para salvar." },
|
"aceEditorNotAvailableToSave": { "message": "Editor não disponível para guardar." },
|
||||||
"invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Tokens salvos com sucesso." },
|
"tokensSaved": { "message": "Tokens guardados com sucesso." },
|
||||||
"errorSavingTokens": { "message": "Erro ao salvar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Erro ao guardar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "O IndexedDB não está disponível." },
|
"dbNotAvailable": { "message": "IndexedDB não está disponível." },
|
||||||
"dbExported": { "message": "Banco de dados exportado com sucesso." },
|
"dbExported": { "message": "Base de dados exportada com sucesso." },
|
||||||
"errorExportingDb": { "message": "Erro ao exportar o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Erro ao exportar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "O arquivo não contém um objeto JSON válido." },
|
"invalidJsonFile": { "message": "O ficheiro não contém um objeto JSON válido." },
|
||||||
"noDataToImport": { "message": "O arquivo não contém dados para as seções atuais do banco de dados." },
|
"noDataToImport": { "message": "O ficheiro não contém dados para as secções da BD atual." },
|
||||||
"dbImported": { "message": "Banco de dados importado com sucesso." },
|
"dbImported": { "message": "Base de dados importada com sucesso." },
|
||||||
"errorImportingDb": { "message": "Erro ao importar o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Erro ao importar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Atualizando a visualização com novos dados..." },
|
"updatingView": { "message": "A atualizar a vista com os novos dados..." },
|
||||||
"confirmClearContent": { "message": "Tem certeza de que deseja excluir os dados de conteúdo local (filmes, séries, músicas, etc.)? Favoritos e configurações NÃO serão excluídos." },
|
"confirmClearContent": { "message": "Tem a certeza de que pretende apagar os dados de conteúdo locais (Filmes, Séries, Música, etc.)? Favoritos e Definições NÃO serão apagados." },
|
||||||
"trailerNotFound": { "message": "Nenhum trailer encontrado para este título." },
|
"trailerNotFound": { "message": "Não foi encontrado trailer para este título." },
|
||||||
"confirmClearHistory": { "message": "Tem certeza de que deseja limpar todo o seu histórico de visualização? Esta ação não pode ser desfeita." },
|
"confirmClearHistory": { "message": "Tem a certeza de que pretende apagar todo o seu histórico de visualização? Esta ação não pode ser desfeita." },
|
||||||
"historyCleared": { "message": "Histórico de visualização limpo." },
|
"historyCleared": { "message": "Histórico de visualização apagado." },
|
||||||
"historyItemDeleted": { "message": "Item excluído do histórico." },
|
"historyItemDeleted": { "message": "Item apagado do histórico." },
|
||||||
"errorGeneratingScript": { "message": "Primeiro, gere um script para poder copiá-lo." },
|
"errorGeneratingScript": { "message": "Primeiro, gere um script para poder copiá-lo." },
|
||||||
"scriptCopied": { "message": "Script PHP copiado para a área de transferência." },
|
"scriptCopied": { "message": "Script PHP copiado para a área de transferência." },
|
||||||
"errorCopyingScript": { "message": "Erro ao copiar o script." },
|
"errorCopyingScript": { "message": "Erro ao copiar o script." },
|
||||||
"scriptGenerated": { "message": "Script PHP gerado." },
|
"scriptGenerated": { "message": "Script PHP gerado." },
|
||||||
"errorLoadingAlbum": { "message": "Erro ao carregar o álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Erro ao carregar álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"noPhotoServerSelected": { "message": "Erro: nenhum servidor de fotos foi selecionado." },
|
"noPhotoServerSelected": { "message": "Erro: Nenhum servidor de fotos foi selecionado." },
|
||||||
"loadingGenres": { "message": "Carregando gêneros..." },
|
"loadingGenres": { "message": "A carregar géneros..." },
|
||||||
"errorLoadingGenres": { "message": "Erro ao carregar" },
|
"errorLoadingGenres": { "message": "Erro ao carregar" },
|
||||||
"noContentFound": { "message": "Nenhum resultado encontrado." },
|
"noContentFound": { "message": "Não foram encontrados resultados." },
|
||||||
"couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." },
|
"couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." },
|
||||||
"noFavorites": { "message": "Você ainda não tem favoritos." },
|
"noFavorites": { "message": "Ainda não tem favoritos." },
|
||||||
"errorLoadingFavorites": { "message": "Erro ao carregar os favoritos." },
|
"errorLoadingFavorites": { "message": "Erro ao carregar favoritos." },
|
||||||
"historyEmpty": { "message": "Seu histórico está vazio." },
|
"historyEmpty": { "message": "O seu histórico está vazio." },
|
||||||
"historyEmptySub": { "message": "Explore e assista a conteúdo para que ele apareça aqui." },
|
"historyEmptySub": { "message": "Explore e veja conteúdo para que apareça aqui." },
|
||||||
"errorGeneratingRecommendations": { "message": "Erro ao gerar recomendações." },
|
"errorGeneratingRecommendations": { "message": "Erro ao gerar recomendações." },
|
||||||
"noRecommendations": { "message": "Precisamos conhecê-lo melhor para dar recomendações!" },
|
"noRecommendations": { "message": "Precisamos de o conhecer melhor para lhe dar recomendações!" },
|
||||||
"errorGeneratingStats": { "message": "Erro ao gerar estatísticas." },
|
"errorGeneratingStats": { "message": "Erro ao gerar estatísticas." },
|
||||||
"noServersForToken": { "message": "Nenhum servidor associado encontrado para este token." },
|
"noServersForToken": { "message": "Não foram encontrados servidores associados para este token." },
|
||||||
"searchingActorContent": { "message": "Pesquisando conteúdo de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "A procurar conteúdo de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorLoadingActorContent": { "message": "Não foi possível carregar o conteúdo de $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
"errorLoadingActorContent": { "message": "Não foi possível carregar o conteúdo para $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorAddingStream": { "message": "Erro ao adicionar stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Erro ao adicionar stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"phpUrlNotConfigured": { "message": "A URL do servidor PHP não está configurada. Configure-a nas Configurações." },
|
"phpUrlNotConfigured": { "message": "O URL do servidor PHP não está configurado. Por favor, configure-o em Definições." },
|
||||||
"searchingStreams": { "message": "Pesquisando streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "A procurar streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Enviando $count$ stream(s) para o servidor...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "A enviar $count$ stream(s) para o servidor...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Stream(s) adicionado(s) com sucesso." },
|
"streamAddedSuccess": { "message": "Stream(s) adicionado(s) com sucesso." },
|
||||||
"generatingM3U": { "message": "Gerando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "A gerar M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" baixado.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorGeneratingM3U": { "message": "Erro ao gerar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Erro ao gerar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"settingsSavedSuccess": { "message": "Configurações salvas com sucesso." },
|
"settingsSavedSuccess": { "message": "Definições guardadas com sucesso." },
|
||||||
"errorSavingSettings": { "message": "Erro ao salvar as configurações no banco de dados." },
|
"errorSavingSettings": { "message": "Erro ao guardar as definições na base de dados." },
|
||||||
"languageChangeReload": { "message": "Idioma alterado. O aplicativo será recarregado agora." },
|
"languageChangeReload": { "message": "Idioma alterado. A aplicação será recarregada agora." },
|
||||||
"addedToFavorites": { "message": "Adicionado aos favoritos." },
|
"addedToFavorites": { "message": "Adicionado aos favoritos." },
|
||||||
"removedFromFavorites": { "message": "Removido dos favoritos." },
|
"removedFromFavorites": { "message": "Removido dos favoritos." },
|
||||||
"plexScanInProgress": { "message": "A verificação do Plex já está em andamento." },
|
"plexScanInProgress": { "message": "A análise do Plex já está em curso." },
|
||||||
"plexScanStarting": { "message": "Iniciando a verificação do Plex..." },
|
"plexScanStarting": { "message": "A iniciar análise do Plex..." },
|
||||||
"noPlexTokens": { "message": "Nenhum token do Plex configurado." },
|
"noPlexTokens": { "message": "Não há tokens Plex configurados." },
|
||||||
"clearingSections": { "message": "Limpando seções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "A limpar secções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Fase de verificação inicial concluída." },
|
"initialScanPhaseComplete": { "message": "Fase inicial de análise concluída." },
|
||||||
"retryPhaseFinished": { "message": "Fase de nova tentativa concluída." },
|
"retryPhaseFinished": { "message": "Fase de retentativas concluída." },
|
||||||
"plexScanFinished": { "message": "Verificação concluída. Atualizando conteúdo..." },
|
"plexScanFinished": { "message": "Análise concluída. A atualizar conteúdo..." },
|
||||||
"scanCancelled": { "message": "Verificação cancelada pelo usuário." },
|
"scanCancelled": { "message": "Análise cancelada pelo utilizador." },
|
||||||
"scanCancelledInfo": { "message": "Verificação cancelada." },
|
"scanCancelledInfo": { "message": "Análise cancelada." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Erro ao inicializar o reprodutor de música." },
|
"errorInitializingMusicPlayer": { "message": "Erro ao iniciar o reprodutor de música." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Erro crítico ao carregar os dados de música." },
|
"criticalErrorLoadingMusic": { "message": "Erro crítico ao carregar dados de música." },
|
||||||
"errorLoadingArtists": { "message": "Erro ao carregar os artistas." },
|
"errorLoadingArtists": { "message": "Erro ao carregar artistas." },
|
||||||
"dbUnavailableError": { "message": "Erro: banco de dados indisponível." },
|
"dbUnavailableError": { "message": "Erro: Base de dados não disponível." },
|
||||||
"updatingMusicData": { "message": "Atualizando dados de música..." },
|
"updatingMusicData": { "message": "A atualizar dados de música..." },
|
||||||
"musicDataUpdated": { "message": "Dados de música atualizados." },
|
"musicDataUpdated": { "message": "Dados de música atualizados." },
|
||||||
"errorFetchingArtistSongs": { "message": "Erro ao buscar as músicas do artista." },
|
"errorFetchingArtistSongs": { "message": "Erro ao obter as canções do artista." },
|
||||||
"errorLoadingSongs": { "message": "Erro ao carregar as músicas." },
|
"errorLoadingSongs": { "message": "Erro ao carregar canções." },
|
||||||
"noArtistsFound": { "message": "Nenhum artista encontrado." },
|
"noArtistsFound": { "message": "Não foram encontrados artistas." },
|
||||||
"shuffleOn": { "message": "Modo aleatório ativado." },
|
"shuffleOn": { "message": "Modo aleatório ativado." },
|
||||||
"shuffleOff": { "message": "Modo aleatório desativado." },
|
"shuffleOff": { "message": "Modo aleatório desativado." },
|
||||||
"playbackError": { "message": "Erro de reprodução" },
|
"playbackError": { "message": "Erro de reprodução" },
|
||||||
"errorLabel": { "message": "Erro" },
|
"errorLabel": { "message": "Erro" },
|
||||||
"reloadingPage": { "message": "Recarregando a página..." },
|
"reloadingPage": { "message": "A recarregar a página..." },
|
||||||
"viewed": { "message": "Visto" },
|
"viewed": { "message": "Visto" },
|
||||||
"local": { "message": "Local" },
|
"local": { "message": "Local" },
|
||||||
"topRatedSort": {"message": "Mais bem avaliados"},
|
"topRatedSort": {"message": "Melhor Avaliados"},
|
||||||
"recentSort": {"message": "Recentes"},
|
"recentSort": {"message": "Recentes"},
|
||||||
"popularSort": {"message": "Populares"},
|
"popularSort": {"message": "Populares"},
|
||||||
"moviesSectionTitle": {"message": "Filmes"},
|
"moviesSectionTitle": {"message": "Filmes"},
|
||||||
@ -245,205 +245,197 @@
|
|||||||
"explore": {"message": "Explorar"},
|
"explore": {"message": "Explorar"},
|
||||||
"noGenre": {"message": "Sem categoria"},
|
"noGenre": {"message": "Sem categoria"},
|
||||||
"synopsis": {"message": "Sinopse"},
|
"synopsis": {"message": "Sinopse"},
|
||||||
"noSynopsis": {"message": "Nenhuma sinopse disponível."},
|
"noSynopsis": {"message": "Não há sinopse disponível."},
|
||||||
"director": {"message": "Diretor:"},
|
"director": {"message": "Realizador:"},
|
||||||
"writer": {"message": "Roteirista:"},
|
"writer": {"message": "Argumentista:"},
|
||||||
"viewOnImdb": {"message": "Ver no IMDb"},
|
"viewOnImdb": {"message": "Ver no IMDb"},
|
||||||
"watchTrailer": {"message": "Assistir ao trailer"},
|
"watchTrailer": {"message": "Ver Trailer"},
|
||||||
"addToFavorites": {"message": "Adicionar aos favoritos"},
|
"addToFavorites": {"message": "Adicionar aos favoritos"},
|
||||||
"removeFromFavorites": {"message": "Remover dos favoritos"},
|
"removeFromFavorites": {"message": "Remover dos favoritos"},
|
||||||
"notAvailable": {"message": "Não disponível"},
|
"notAvailable": {"message": "Não disponível"},
|
||||||
"mainCast": {"message": "Elenco principal"},
|
"mainCast": {"message": "Elenco Principal"},
|
||||||
"seasonsAndEpisodes": {"message": "Temporadas e episódios"},
|
"seasonsAndEpisodes": {"message": "Temporadas e Episódios"},
|
||||||
"similarContent": {"message": "Conteúdo semelhante"},
|
"similarContent": {"message": "Conteúdo Semelhante"},
|
||||||
"filmography": {"message": "Filmografia"},
|
"episodesCount": {"message": "$count$ Episódios", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"availableOn": {"message": "Disponível em"},
|
"seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}},
|
||||||
"episodesCount": {"message": "$count$ episódios", "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": "Nenhum trailer encontrado para este título."},
|
"noTrailerFound": {"message": "Não foi encontrado trailer para este título."},
|
||||||
"fatalInitError": {"message": "Erro fatal de inicialização"},
|
"fatalInitError": {"message": "Erro fatal de inicialização"},
|
||||||
"fatalInitErrorSub": {"message": "Não foi possível carregar o aplicativo."},
|
"fatalInitErrorSub": {"message": "Não foi possível carregar a aplicação."},
|
||||||
"invalidStreamInfo": {"message": "Informações inválidas."},
|
"invalidStreamInfo": {"message": "Informação inválida."},
|
||||||
"dbUnavailableForStreams": {"message": "Banco de dados local indisponível."},
|
"dbUnavailableForStreams": {"message": "Base de dados local não disponível."},
|
||||||
"noPlexServersForStreams": {"message": "Nenhum servidor Plex."},
|
"noPlexServersForStreams": {"message": "Não há servidores Plex."},
|
||||||
"notFoundOnServers": {"message": "\"$query$\" não encontrado nos servidores Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "Não foi encontrado \"$query$\" nos servidores Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "Agora mesmo" },
|
"relativeTime_justNow": { "message": "Agora mesmo" },
|
||||||
"relativeTime_minutesAgo": { "message": "Há $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "Há $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "Há $count$ horas", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "Há $count$ horas", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_yesterday": { "message": "Ontem" },
|
"relativeTime_yesterday": { "message": "Ontem" },
|
||||||
"relativeTime_daysAgo": { "message": "Há $count$ dias", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_daysAgo": { "message": "Há $count$ dias", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"errorLoadingDetails": { "message": "Erro ao carregar os detalhes" },
|
"errorLoadingDetails": { "message": "Erro ao Carregar Detalhes" },
|
||||||
"errorLoadingLocalContent": { "message": "Erro ao carregar o conteúdo local." },
|
"errorLoadingLocalContent": { "message": "Erro ao carregar o conteúdo local." },
|
||||||
"errorServerResponse": { "message": "Resposta do servidor sem sucesso." },
|
"errorServerResponse": { "message": "Resposta não bem-sucedida do servidor." },
|
||||||
"errorPlexApi": { "message": "Erro $status$ da API do Plex.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Erro $status$ da API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Erro ao analisar o XML do Plex." },
|
"errorParsingPlexXml": { "message": "Erro ao analisar o XML Plex." },
|
||||||
"untitled": { "message": "Sem título" },
|
"untitled": { "message": "Sem título" },
|
||||||
"itemCount": { "message": "$count$ itens", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Nenhum servidor de fotos" },
|
"noPhotoServers": { "message": "Não há servidores de fotos" },
|
||||||
"jellyfinScanInProgress": { "message": "A verificação do Jellyfin já está em andamento." },
|
"jellyfinScanInProgress": { "message": "A análise do Jellyfin já está em curso." },
|
||||||
"jellyfinScanning": { "message": "Verificando o Jellyfin..." },
|
"jellyfinScanning": { "message": "A analisar Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Preencha a URL e o nome de usuário do Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Por favor, preencha o URL e o utilizador do Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "Conectando-se ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "A ligar ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "A autenticação do Jellyfin falhou: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Autenticação Jellyfin falhada: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Autenticação do Jellyfin bem-sucedida." },
|
"jellyfinAuthSuccess": { "message": "Autenticação Jellyfin bem-sucedida." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Buscando bibliotecas..." },
|
"jellyfinFetchingLibraries": { "message": "A obter bibliotecas..." },
|
||||||
"jellyfinFetchFailed": { "message": "Erro ao buscar bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Erro ao obter bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Nenhuma biblioteca de filmes ou séries encontrada no Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "Não foram encontradas bibliotecas de filmes ou séries no Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de mídia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de multimédia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] '$libraryName' verificada, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] '$libraryName$' analisada, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Erro ao verificar a biblioteca '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Erro ao analisar a biblioteca '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Verificação do Jellyfin concluída. Adicionados $movies$ filmes e $series$ séries.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Análise Jellyfin concluída. Adicionados $movies$ filmes e $series$ séries.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Credenciais do Jellyfin não configuradas." },
|
"noJellyfinCredentials": { "message": "Credenciais Jellyfin não configuradas." },
|
||||||
"notFoundOnJellyfin": { "message": "\"$query$\" não encontrado no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "Não foi encontrado \"$query$\" no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "\"$query$\" não encontrado em nenhum servidor.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "Não foi encontrado \"$query$\" em nenhum servidor.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"localOnPlex": { "message": "No Plex" },
|
"localOnPlex": { "message": "No Plex" },
|
||||||
"searchOnPlex": { "message": "Pesquisar no Plex" },
|
"searchOnPlex": { "message": "Pesquisar no Plex" },
|
||||||
"jellyfinTitle": { "message": "Conteúdo do Jellyfin" },
|
"jellyfinTitle": { "message": "Conteúdo do Jellyfin" },
|
||||||
"noJellyfinContent": { "message": "Nenhum conteúdo do Jellyfin encontrado." },
|
"noJellyfinContent": { "message": "Não foi encontrado conteúdo do Jellyfin." },
|
||||||
"noJellyfinContentSub": { "message": "Verifique se você verificou seu servidor Jellyfin nas configurações." },
|
"noJellyfinContentSub": { "message": "Certifique-se de que analisou o seu servidor Jellyfin nas definições." },
|
||||||
"activityViewerTitle": { "message": "Visualizador de atividades do servidor" },
|
"activityViewerTitle": { "message": "Visualizador de Atividade do Servidor" },
|
||||||
"activitySelectServer": { "message": "Selecione um servidor" },
|
"activitySelectServer": { "message": "Selecionar um servidor" },
|
||||||
"activityCheckBtn": { "message": "Atualizar" },
|
"activityCheckBtn": { "message": "Atualizar" },
|
||||||
"activityNoSessions": { "message": "Nenhuma sessão ativa neste servidor." },
|
"activityNoSessions": { "message": "Não há sessões ativas neste servidor." },
|
||||||
"activitySessionUser": { "message": "Usuário" },
|
"activitySessionUser": { "message": "Utilizador" },
|
||||||
"activitySessionDevice": { "message": "Dispositivo" },
|
"activitySessionDevice": { "message": "Dispositivo" },
|
||||||
"activitySessionContent": { "message": "Conteúdo" },
|
"activitySessionContent": { "message": "Conteúdo" },
|
||||||
"activitySessionState": { "message": "Estado" },
|
"activitySessionState": { "message": "Estado" },
|
||||||
"activitySessionIdentifier": { "message": "Identificador do cliente" },
|
"activitySessionIdentifier": { "message": "Identificador do Cliente" },
|
||||||
"activityCopyID": { "message": "Copiar ID" },
|
"activityCopyID": { "message": "Copiar ID" },
|
||||||
"activityError": { "message": "Não foi possível obter a atividade do servidor." },
|
"activityError": { "message": "Não foi possível obter a atividade do servidor." },
|
||||||
"activityCopied": { "message": "Identificador copiado para a área de transferência!" },
|
"activityCopied": { "message": "Identificador copiado para a área de transferência!" },
|
||||||
"activityCopyError": { "message": "Erro ao copiar o identificador." },
|
"activityCopyError": { "message": "Erro ao copiar o identificador." },
|
||||||
"noProvidersFound": { "message": "Nenhum provedor encontrado." },
|
"noProvidersFound": { "message": "Não foram encontrados fornecedores." },
|
||||||
"availableOnPlex": { "message": "Disponível no Plex" },
|
"availableOnPlex": { "message": "Disponível no Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "Gerador de listas M3U" },
|
"m3uGeneratorTitle": { "message": "Gerador de Listas M3U" },
|
||||||
"selectAServer": { "message": "Selecione um servidor..." },
|
"selectAServer": { "message": "Selecionar um servidor..." },
|
||||||
"downloadM3u": { "message": "Baixar M3U" },
|
"downloadM3u": { "message": "Descarregar M3U" },
|
||||||
"m3uGenerator": { "message": "Gerador de M3U" },
|
"m3uGenerator": { "message": "Gerador M3U" },
|
||||||
"selectLibraries": { "message": "Selecionar bibliotecas" },
|
"selectLibraries": { "message": "Selecionar Bibliotecas" },
|
||||||
"howToUse": { "message": "Como usar" },
|
"howToUse": { "message": "Como Usar" },
|
||||||
"m3uInstruction1": { "message": "Escolha um servidor na lista." },
|
"m3uInstruction1": { "message": "Escolha um servidor da lista." },
|
||||||
"m3uInstruction2": { "message": "Selecione uma ou mais bibliotecas para incluir." },
|
"m3uInstruction2": { "message": "Selecione uma ou mais bibliotecas para incluir." },
|
||||||
"m3uInstruction3": { "message": "Clique no botão de download." },
|
"m3uInstruction3": { "message": "Clique no botão de descarregar." },
|
||||||
"m3uInstruction4": { "message": "Importe o arquivo .m3u para o seu reprodutor compatível." },
|
"m3uInstruction4": { "message": "Importe o ficheiro .m3u para o seu reprodutor compatível." },
|
||||||
"chatOpen": { "message": "Abrir chat" },
|
"chatOpen": { "message": "Abrir Chat" },
|
||||||
"chatTitle": { "message": "Assistente de IA" },
|
"chatTitle": { "message": "Assistente IA" },
|
||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Digite sua mensagem..." },
|
"chatPlaceholder": { "message": "Escreva a sua mensagem..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Bem-vindo! Eu sou seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que você queira saber." },
|
"chatWelcome": { "message": "Bem-vindo! Sou o seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que queira saber." },
|
||||||
"chatGoogleApiKeyMissing": { "message": "A chave de API do Google Gemini não está configurada. Defina-a nas configurações da extensão para usar o assistente de IA." },
|
"chatGoogleApiKeyMissing": { "message": "A chave da API Google Gemini não está configurada. Por favor, configure-a nas definições da extensão para usar o assistente de IA." },
|
||||||
"chatApiInvalidResponse": { "message": "A API retornou uma resposta inválida. Tente novamente." },
|
"chatApiInvalidResponse": { "message": "A API devolveu uma resposta inválida. Por favor, tente novamente." },
|
||||||
"chatApiError": { "message": "Erro ao se comunicar com o assistente de IA" },
|
"chatApiError": { "message": "Erro ao comunicar com o assistente de IA" },
|
||||||
"downloadAll": { "message": "Baixar tudo" },
|
"downloadAll": { "message": "Descarregar tudo" },
|
||||||
"download": { "message": "Baixar" },
|
"download": { "message": "Descarregar" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex do usuário por filmes ou séries por título." },
|
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex do utilizador filmes ou séries por título." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "O título do filme ou série a ser pesquisado." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "O título do filme ou série a pesquisar." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "O tipo de conteúdo a ser pesquisado. Pode ser 'movie' para filmes ou 'series' para séries. (Opcional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "O tipo de conteúdo a pesquisar. Pode ser 'movie' para filmes ou 'series' para séries. (Opcional)." },
|
||||||
"aiToolSearchLibraryResolutionParamDesc": { "message": "A resolução de vídeo a ser pesquisada (por exemplo, '4k', '1080p'). (Opcional)." },
|
"aiToolNavigateToPageDesc": { "message": "Navega o utilizador para uma página específica da interface da aplicação." },
|
||||||
"aiToolSearchLibraryContainerParamDesc": { "message": "O formato do contêiner de vídeo a ser pesquisado (por exemplo, 'mkv', 'mp4'). (Opcional)." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "O nome da página para a qual navegar, por exemplo: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navega o usuário para uma página específica da interface do aplicativo." },
|
"aiToolGetUserStatsDesc": { "message": "Obtém e mostra as estatísticas da biblioteca do utilizador, como o número total de filmes, séries e artistas únicos." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "O nome da página para a qual navegar, por exemplo: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' ou 'm3u-generator'." },
|
"aiToolShowItemDetailsDesc": { "message": "Mostra a página de detalhes de um filme ou série específica pelo seu título e tipo." },
|
||||||
"aiToolGetUserStatsDesc": { "message": "Obtém e exibe as estatísticas da biblioteca do usuário, como o número total de filmes, séries e artistas únicos." },
|
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Exibe a página de detalhes de um filme ou série específica por seu título e tipo." },
|
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "O título exato do filme ou série." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "O título exato do filme ou série." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Adiciona um filme ou série à lista de reprodução atual do usuário para transmiti-lo para um servidor PHP configurado." },
|
"aiToolAddToPlaylistDesc": { "message": "Adiciona um filme ou série à lista de reprodução atual do utilizador para transmitir para um servidor PHP configurado." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "O título do filme ou série a ser adicionado." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "O título do filme ou série a adicionar." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
||||||
"aiToolCheckAndDownloadDesc": { "message": "Verifica a disponibilidade de uma lista de títulos de filmes ou séries nos servidores locais do usuário e, se encontrados, gera e baixa um arquivo de lista de reprodução M3U com os streams encontrados." },
|
"aiToolCheckAndDownloadDesc": { "message": "Verifica a disponibilidade de uma lista de títulos de filmes ou séries nos servidores locais do utilizador e, se encontrados, gera e descarrega um ficheiro de lista de reprodução M3U com os streams encontrados." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Uma matriz de títulos de filmes ou séries para pesquisar e baixar." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Uma matriz de títulos de filmes ou séries para pesquisar e descarregar." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "O tipo de conteúdo da lista. Deve ser 'movie' ou 'series'." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "O tipo de conteúdo da lista. Deve ser 'movie' ou 'series'." },
|
||||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "O nome do arquivo M3U a ser baixado (por exemplo, 'MinhaLista.m3u'). Se não for fornecido, um nome padrão será usado." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "O nome do ficheiro M3U a descarregar (por exemplo, 'MinhaLista.m3u'). Se não for fornecido, será usado um nome por defeito." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série da lista de favoritos do usuário." },
|
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série da lista de favoritos do utilizador." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "O título do filme ou série." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "O título do filme ou série." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "O tipo de conteúdo. Deve ser 'movie' ou 'series'." },
|
||||||
"aiToolGetRecommendationsDesc": { "message": "Gera e exibe uma lista de recomendações de filmes ou séries com base no histórico de visualização e nos favoritos do usuário." },
|
"aiToolGetRecommendationsDesc": { "message": "Gera e mostra uma lista de recomendações de filmes ou séries baseadas no histórico de visualização e nos favoritos do utilizador." },
|
||||||
"aiToolApplyFiltersDesc": { "message": "Aplica filtros à visualização atual de filmes ou séries, permitindo refinar os resultados por tipo, gênero, ano e ordem de classificação." },
|
"aiToolApplyFiltersDesc": { "message": "Aplica filtros à vista atual de filmes ou séries, permitindo refinar os resultados por tipo, género, ano e ordem de classificação." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "O tipo de conteúdo ao qual aplicar os filtros. Deve ser 'movie' ou 'series'." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "O tipo de conteúdo ao qual aplicar os filtros. Deve ser 'movie' ou 'series'." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "O nome do gênero pelo qual filtrar (por exemplo, 'Ação', 'Drama')." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "O nome do género pelo qual filtrar (por exemplo, 'Ação', 'Drama')." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "O ano de lançamento pelo qual filtrar (por exemplo, '2023')." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "O ano de lançamento pelo qual filtrar (por exemplo, '2023')." },
|
||||||
"aiToolApplyFiltersSortParamDesc": { "message": "O critério de classificação para os resultados. Valores válidos: 'popularity.desc' (populares), 'vote_average.desc' (mais bem avaliados), 'release_date.desc' (recentes para filmes) ou 'first_air_date.desc' (recentes para séries)." },
|
"aiToolApplyFiltersSortParamDesc": { "message": "O critério de ordenação para os resultados. Valores válidos: 'popularity.desc' (populares), 'vote_average.desc' (melhor avaliados), 'release_date.desc' (recentes para filmes) ou 'first_air_date.desc' (recentes para séries)." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Abre o reprodutor de música e começa a tocar músicas de um artista específico da biblioteca do usuário." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Abre o reprodutor de música e começa a reproduzir canções de um artista específico da biblioteca do utilizador." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "O nome exato do artista cujas músicas devem ser tocadas." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "O nome exato do artista cujas canções se deseja reproduzir." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Limpa todo o histórico de mensagens da conversa atual com o assistente de IA." },
|
"aiToolClearChatHistoryDesc": { "message": "Limpa todo o histórico de mensagens da conversa atual com o assistente de IA." },
|
||||||
"aiToolDeleteDatabaseDesc": { "message": "Exclui todo o banco de dados local da extensão, incluindo conteúdo verificado, configurações e favoritos. Esta ação é irreversível e recarregará o aplicativo." },
|
"aiToolDeleteDatabaseDesc": { "message": "Elimina toda a base de dados local da extensão, incluindo o conteúdo analisado, as definições e os favoritos. Esta ação é irreversível e recarregará a aplicação." },
|
||||||
"aiToolUpdateAllTokensDesc": { "message": "Inicia uma verificação completa de todos os servidores e bibliotecas Plex associados aos tokens configurados na extensão. Atualiza todos os filmes, séries, artistas e fotos." },
|
"aiToolUpdateAllTokensDesc": { "message": "Inicia uma análise completa de todos os servidores e bibliotecas Plex associados aos tokens configurados na extensão. Atualiza todos os filmes, séries, artistas e fotos." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Adiciona um novo token X-Plex à configuração da extensão, permitindo que o aplicativo verifique o conteúdo de novos servidores Plex." },
|
"aiToolAddPlexTokenDesc": { "message": "Adiciona um novo token X-Plex à configuração da extensão, permitindo que a aplicação analise conteúdo de novos servidores Plex." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "A string do token X-Plex a ser adicionada." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "A string do token X-Plex que se deseja adicionar." },
|
||||||
"aiToolChangeRegionDesc": { "message": "Altera a região usada para a descoberta de conteúdo na API do TMDB. Isso afetará os resultados exibidos nas seções de filmes e séries, bem como os provedores de streaming." },
|
"aiToolChangeRegionDesc": { "message": "Altera a região utilizada para a descoberta de conteúdo na API do TMDB. Isto afetará os resultados mostrados nas secções de filmes e séries, bem como os fornecedores de streaming." },
|
||||||
"aiToolChangeRegionRegionParamDesc": { "message": "O código de país de duas letras ISO 3166-1 para a nova região (por exemplo, 'US' para os Estados Unidos, 'ES' para a Espanha, 'MX' para o México)." },
|
"aiToolChangeRegionRegionParamDesc": { "message": "O código de país ISO 3166-1 de duas letras para a nova região (por exemplo, 'US' para Estados Unidos, 'PT' para Portugal, 'MX' para México)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Remove todos os filmes e séries que o usuário marcou como favoritos." },
|
"aiToolClearAllFavoritesDesc": { "message": "Elimina todos os filmes e séries que o utilizador marcou como favoritos." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Limpa o histórico de visualização do usuário da página de histórico." },
|
"aiToolClearViewingHistoryDesc": { "message": "Apaga o histórico de visualização do utilizador da página de histórico." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a visualização de recomendações e remove as recomendações em cache." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a vista de recomendações e elimina as recomendações em cache." },
|
||||||
"aiToolSearchNotFound": { "message": "'$query' não encontrado em sua biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "Não foi encontrado '$query$' na sua biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navegado para a página $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navegado para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Erro ao navegar para a página $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Erro ao navegar para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Erro ao obter estatísticas." },
|
"aiToolStatsError": { "message": "Erro ao obter estatísticas." },
|
||||||
"aiToolItemNotFound": { "message": "Item '$title' não encontrado.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Não foi encontrado o item '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Mostrando detalhes de '$title'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "A mostrar detalhes de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "Adicionado '$title' à lista de reprodução.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Adicionado '$title$' à lista de reprodução.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Adicionado '$title' aos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "Adicionado '$title$' aos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "Removido '$title' dos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Removido '$title$' dos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Mostrando recomendações." },
|
"aiToolRecommendationsSuccess": { "message": "A mostrar recomendações." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Gênero '$genre' não encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Género '$genre$' não encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filtros aplicados com sucesso." },
|
"aiToolApplyFiltersSuccess": { "message": "Filtros aplicados com sucesso." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "O reprodutor de música não está pronto. Verifique se a sua biblioteca de música do Plex foi verificada." },
|
"aiToolPlayMusicNotReady": { "message": "O reprodutor de música não está pronto. Certifique-se de que a sua biblioteca de música Plex foi analisada." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name' não encontrado.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name$' não encontrado.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "Nenhuma música encontrada para '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "Não foram encontradas canções para '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Tocando música de '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "A reproduzir música de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Histórico do chat limpo." },
|
"aiToolChatHistoryCleared": { "message": "Histórico do chat limpo." },
|
||||||
"aiToolConfirmDeleteDatabase": { "message": "Tem certeza de que deseja excluir o banco de dados local? Esta ação é irreversível." },
|
"aiToolConfirmDeleteDatabase": { "message": "Tem a certeza de que pretende eliminar a base de dados local? Esta ação é irreversível." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Exclusão do banco de dados cancelada." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Eliminação da base de dados cancelada." },
|
||||||
"aiToolExecutionError": { "message": "Erro ao executar a ferramenta '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolExecutionError": { "message": "Erro ao executar a ferramenta '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolUnknown": { "message": "Ferramenta desconhecida: '$toolName'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Ferramenta desconhecida: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolFavoritesCleared": { "message": "Favoritos limpos." },
|
"aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
|
||||||
"aiToolFavoritesClearError": { "message": "Erro ao limpar os favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Erro ao eliminar os favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recomendações limpas." },
|
"aiToolRecommendationsCleared": { "message": "Recomendações eliminadas." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Erro ao limpar as recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Erro ao eliminar as recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Banco de dados excluído. A página será recarregada." },
|
"aiToolDatabaseDeleted": { "message": "Base de dados eliminada. A página será recarregada." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Erro ao excluir o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Erro ao eliminar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "A exclusão do banco de dados está bloqueada. Feche outras abas do aplicativo." },
|
"aiToolDatabaseDeleteBlocked": { "message": "A eliminação da base de dados está bloqueada. Feche outros separadores da aplicação." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "Todos os tokens foram atualizados com sucesso." },
|
"aiToolUpdateAllTokensSuccess": { "message": "Todos os tokens foram atualizados com sucesso." },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Erro ao atualizar os tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Erro ao atualizar os tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Token do Plex adicionado com sucesso." },
|
"aiToolAddPlexTokenSuccess": { "message": "Token Plex adicionado com sucesso." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar o token do Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar o token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está sendo atualizado.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está a ser atualizado.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionError": { "message": "Erro ao alterar a região: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Erro ao alterar a região: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Histórico de visualização limpo." },
|
"aiToolViewingHistoryCleared": { "message": "Histórico de visualização apagado." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Erro ao limpar o histórico de visualização: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Erro ao apagar o histórico de visualização: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiSystemPrompt_v3": { "message": "Você é um assistente especialista em filmes e séries chamado CinePlex. Sua função principal é ajudar os usuários a descobrir conteúdo e interagir com sua biblioteca. Siga estas regras rigorosamente: 1. **NUNCA** finja que realizou uma ação se não usou uma ferramenta para isso. Por exemplo, não diga 'Eu baixei X' se não usou a ferramenta de download. 2. Para solicitações de recomendações ou listas (por exemplo, 'diga-me 5 filmes de terror'), use seu próprio conhecimento para gerar a lista. Apresente-a em formato numerado ou com marcadores. Depois de exibir a lista, pergunte proativamente ao usuário se ele deseja que você verifique a disponibilidade em seus servidores locais e crie um arquivo M3U. 3. **SOMENTE** se o usuário confirmar que deseja verificar ou baixar a lista, use a ferramenta `check_and_download_titles_list`. Não a use sem confirmação explícita. 4. Para qualquer outra ação, como navegar, obter estatísticas, pesquisar um título específico ou filtrar por resolução ou contêiner, use as ferramentas apropriadas. Seja sempre conciso, amigável e eficiente." },
|
"aiSystemPrompt_v3": { "message": "Você é um assistente especialista em filmes e séries chamado CinePlex. A sua função principal é ajudar os utilizadores a descobrir conteúdo e a interagir com a sua biblioteca. Siga estas regras rigorosamente: 1. **NUNCA** invente que realizou uma ação se não usou uma ferramenta para tal. Por exemplo, não diga 'descarreguei X' se não usou a ferramenta de descarregar. 2. Para pedidos de recomendações ou listas (ex. 'diga-me 5 filmes de terror'), use o seu próprio conhecimento para gerar a lista. Apresente-a em formato numerado ou com marcadores. Depois de mostrar a lista, pergunte proativamente ao utilizador se ele quer que verifique a disponibilidade nos seus servidores locais e crie um ficheiro M3U. 3. **APENAS** se o utilizador confirmar que quer verificar ou descarregar a lista, utilize a ferramenta `check_and_download_titles_list`. Não a utilize sem confirmação explícita. 4. Para qualquer outra ação como navegar, obter estatísticas ou procurar um título específico, utilize as ferramentas apropriadas. Seja sempre conciso, amigável e eficiente." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Forneça uma lista de títulos para criar a lista de reprodução." },
|
"aiToolM3UNoTitlesProvided": { "message": "Por favor, forneça uma lista de títulos para criar a lista de reprodução." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Verificando os títulos em seus servidores locais..." },
|
"aiToolM3UCheckingTitles": { "message": "A verificar os títulos nos seus servidores locais..." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não encontrei nenhum dos filmes ou séries da lista em seus servidores locais." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não encontrei nenhum dos filmes ou séries da lista nos seus servidores locais." },
|
||||||
"aiToolM3UDownloadStarted": { "message": "Pronto! Encontrei $1 de $2 títulos em seus servidores e iniciei o download da lista de reprodução M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"aiToolM3UDownloadStarted": { "message": "Feito! Encontrei $1 de $2 títulos nos seus servidores e iniciei o descarregamento da lista de reprodução M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||||
"backToProviders": { "message": "Voltar para os provedores" },
|
"backToProviders": { "message": "Voltar aos Fornecedores" },
|
||||||
"artistsCounterSingle": { "message": "$total$ artista", "placeholders": { "total": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ Artista", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "Carregando..." },
|
"artistsCounterLoading": { "message": "A carregar..." },
|
||||||
"downloadingSong": { "message": "Iniciando o download de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "A iniciar descarregamento de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" baixado.", "placeholders": { "title": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorDownloadingSong": { "message": "Erro ao baixar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Erro ao descarregar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "Gerando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "A gerar M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U para o álbum \"$artist$\" gerado.", "placeholders": { "artist": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U para o álbum \"$artist$\" gerado.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Tentando novamente a seção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "A tentar novamente a secção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCESSO] Nova tentativa de \"$title$\" concluída.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCESSO] Retentativa de \"$title$\" concluída.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERRO FINAL] A nova tentativa para \"$title$\" falhou: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[ERRO FINAL] A retentativa para \"$title$\" falhou: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Iniciando a fase de nova tentativa para $count$ seções...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "A iniciar fase de retentativas para $count$ secções...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "O token $token$... encontrou $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "Token $token$... encontrou $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"errorProcessingToken": { "message": "Erro ao processar o token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorProcessingToken": { "message": "Erro ao processar token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"plexScanFatalError": { "message": "ERRO FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"plexScanFatalError": { "message": "ERRO FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"errorDuringScan": { "message": "Erro durante a verificação: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Erro durante a análise: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "Parando a verificação do Plex..." },
|
"stoppingPlexScan": { "message": "A parar análise do Plex..." },
|
||||||
"invalidTokenProvided": { "message": "Token inválido fornecido." },
|
"invalidTokenProvided": { "message": "Token inválido fornecido." },
|
||||||
"tokenAlreadyExists": { "message": "O token já existe." },
|
"tokenAlreadyExists": { "message": "O token já existe." },
|
||||||
"tokenAddedSuccessfully": { "message": "Token adicionado com sucesso." },
|
"tokenAddedSuccessfully": { "message": "Token adicionado com sucesso." },
|
||||||
"noStreamsFoundForSelection": { "message": "Nenhum stream encontrado para a seleção." },
|
"noStreamsFoundForSelection": { "message": "Não foram encontrados streams para a seleção." },
|
||||||
"autoplayBlocked": { "message": "Reprodução automática bloqueada." },
|
"autoplayBlocked": { "message": "Reprodução automática bloqueada." },
|
||||||
"page": { "message": "Página" },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"all": { "message": "Todos" },
|
"page": { "message": "Página" }
|
||||||
"userScore": { "message": "Pontuação dos usuários" },
|
|
||||||
"duration": { "message": "Duração" },
|
|
||||||
"min": { "message": "Mín" },
|
|
||||||
"max": { "message": "Máx" }
|
|
||||||
}
|
}
|
@ -1,103 +0,0 @@
|
|||||||
.filter-popover-wrapper {
|
|
||||||
position: relative;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-popover {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
background-color: var(--secondary);
|
|
||||||
min-width: 280px;
|
|
||||||
box-shadow: var(--shadow);
|
|
||||||
padding: 1rem;
|
|
||||||
z-index: 100;
|
|
||||||
border-radius: var(--border-radius-md);
|
|
||||||
border: 1px solid var(--glass-border);
|
|
||||||
margin-top: 0.5rem; /* Add some space between button and popover */
|
|
||||||
}
|
|
||||||
|
|
||||||
.range-slider-container {
|
|
||||||
position: relative;
|
|
||||||
height: 20px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-track, .slider-fill {
|
|
||||||
position: absolute;
|
|
||||||
width: 100%;
|
|
||||||
height: 6px;
|
|
||||||
border-radius: 3px;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-track {
|
|
||||||
background-color: var(--glass);
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.slider-fill {
|
|
||||||
background-color: var(--accent);
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-popover .range-values {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
margin-top: 0.75rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
color: var(--text-secondary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-range {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
appearance: none;
|
|
||||||
width: 100%;
|
|
||||||
background: transparent;
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
margin: 0;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[id$="-max"].form-range {
|
|
||||||
z-index: 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[id$="-min"].form-range {
|
|
||||||
z-index: 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-range::-webkit-slider-thumb {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
appearance: none;
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: var(--accent-dark);
|
|
||||||
background-clip: padding-box;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 50%;
|
|
||||||
border: 3px solid var(--secondary);
|
|
||||||
pointer-events: auto;
|
|
||||||
transition: background-color 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-range::-webkit-slider-thumb:hover {
|
|
||||||
background-color: var(--accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-range::-moz-range-thumb {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background: var(--accent-dark);
|
|
||||||
background-clip: padding-box;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 50%;
|
|
||||||
border: 3px solid var(--secondary);
|
|
||||||
pointer-events: auto;
|
|
||||||
transition: background-color 0.2s;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form-range::-moz-range-thumb:hover {
|
|
||||||
background-color: var(--accent);
|
|
||||||
}
|
|
93
css/main.css
93
css/main.css
@ -3,51 +3,7 @@
|
|||||||
Generated and Refactored by Gemini
|
Generated and Refactored by Gemini
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.filter-group {
|
/* --- base.css --- */
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-group label {
|
|
||||||
font-size: 0.9rem;
|
|
||||||
color: var(--text-secondary);
|
|
||||||
white-space: nowrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-input {
|
|
||||||
width: 80px;
|
|
||||||
padding: 0.7rem 1rem;
|
|
||||||
font-size: 0.9rem;
|
|
||||||
color: var(--text-primary);
|
|
||||||
background-color: var(--secondary);
|
|
||||||
border: 1px solid var(--glass-border);
|
|
||||||
border-radius: 50px;
|
|
||||||
transition: var(--transition);
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-input::placeholder {
|
|
||||||
color: var(--text-secondary);
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-input:focus {
|
|
||||||
outline: none;
|
|
||||||
border-color: var(--accent);
|
|
||||||
box-shadow: 0 0 0 3px rgba(0, 224, 255, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Remove arrows from number input */
|
|
||||||
.filter-input::-webkit-outer-spin-button,
|
|
||||||
.filter-input::-webkit-inner-spin-button {
|
|
||||||
-webkit-appearance: none;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.filter-input[type=number] {
|
|
||||||
-moz-appearance: textfield;
|
|
||||||
}
|
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--primary: #0a0a0f;
|
--primary: #0a0a0f;
|
||||||
--secondary: #101116;
|
--secondary: #101116;
|
||||||
@ -1453,7 +1409,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
color: var(--text-secondary);
|
color: var(--text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid, .filmography-grid {
|
.similar-items-grid {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
|
||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
@ -1715,7 +1671,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid, .filmography-grid {
|
.similar-items-grid {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
@ -1778,7 +1734,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
height: 80px;
|
height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid, .filmography-grid {
|
.similar-items-grid {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
@ -2041,47 +1997,24 @@ body.sidebar-collapsed #main-container {
|
|||||||
background: var(--danger);
|
background: var(--danger);
|
||||||
}
|
}
|
||||||
|
|
||||||
.watch-providers-section {
|
|
||||||
margin-top: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.watch-providers-grid {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 1rem;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.provider-link {
|
|
||||||
display: block;
|
|
||||||
transition: var(--transition);
|
|
||||||
border-radius: var(--border-radius-md);
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.provider-link:hover {
|
|
||||||
transform: scale(1.1);
|
|
||||||
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.provider-logo {
|
|
||||||
display: block;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
border-radius: var(--border-radius-md);
|
|
||||||
background-color: var(--glass);
|
|
||||||
border: 1px solid var(--glass-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 576px) {
|
@media (max-width: 576px) {
|
||||||
.history-item {
|
.history-item {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.history-main-content {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.history-actions {
|
.history-actions {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
|
padding-top: 1rem;
|
||||||
|
border-top: 1px solid var(--glass-border);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,11 +21,9 @@ export class AITools {
|
|||||||
type: 'object',
|
type: 'object',
|
||||||
properties: {
|
properties: {
|
||||||
query: { type: 'string', description: _('aiToolSearchLibraryQueryParamDesc') },
|
query: { type: 'string', description: _('aiToolSearchLibraryQueryParamDesc') },
|
||||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolSearchLibraryTypeParamDesc') },
|
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolSearchLibraryTypeParamDesc') }
|
||||||
resolution: { type: 'string', description: _('aiToolSearchLibraryResolutionParamDesc') },
|
|
||||||
container: { type: 'string', description: _('aiToolSearchLibraryContainerParamDesc') }
|
|
||||||
},
|
},
|
||||||
required: []
|
required: ['query']
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -190,35 +188,22 @@ export class AITools {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
async "search_library"({ query, type, resolution, container }) {
|
async "search_library"({ query, type }) {
|
||||||
const movieEntries = await getFromDB('movies');
|
const movieEntries = await getFromDB('movies');
|
||||||
const seriesEntries = await getFromDB('series');
|
const seriesEntries = await getFromDB('series');
|
||||||
const allContent = [
|
const allContent = [
|
||||||
...movieEntries.flatMap(e => (e.titulos || []).map(t => ({ ...t, type: 'movie' }))),
|
...movieEntries.flatMap(e => (e.titulos || []).map(t => ({ ...t, type: 'movie' }))),
|
||||||
...seriesEntries.flatMap(e => (e.titulos || []).map(t => ({ ...t, type: 'series' })))
|
...seriesEntries.flatMap(e => (e.titulos || []).map(t => ({ ...t, type: 'series' })))
|
||||||
];
|
];
|
||||||
|
const searchTerm = query.toLowerCase().trim();
|
||||||
let results = allContent;
|
let results = allContent.filter(item => item.title.toLowerCase().includes(searchTerm));
|
||||||
|
|
||||||
if (query) {
|
|
||||||
const searchTerm = query.toLowerCase().trim();
|
|
||||||
results = allContent.filter(item => item.title.toLowerCase().includes(searchTerm));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type) {
|
if (type) {
|
||||||
results = results.filter(item => item.type === type);
|
results = results.filter(item => item.type === type);
|
||||||
}
|
}
|
||||||
if (resolution) {
|
|
||||||
results = results.filter(item => item.resolution && item.resolution.toLowerCase() === resolution.toLowerCase());
|
|
||||||
}
|
|
||||||
if (container) {
|
|
||||||
results = results.filter(item => item.container && item.container.toLowerCase() === container.toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (results.length === 0) {
|
if (results.length === 0) {
|
||||||
return JSON.stringify({ success: false, message: _('aiToolSearchNotFound', query) });
|
return JSON.stringify({ success: false, message: _('aiToolSearchNotFound', query) });
|
||||||
}
|
}
|
||||||
const formattedResults = results.slice(0, 10).map(item => ({ title: item.title, year: item.year, type: item.type, resolution: item.resolution, container: item.container }));
|
const formattedResults = results.slice(0, 10).map(item => ({ title: item.title, year: item.year, type: item.type }));
|
||||||
return JSON.stringify({ success: true, count: results.length, results: formattedResults });
|
return JSON.stringify({ success: true, count: results.length, results: formattedResults });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
65
js/api.js
65
js/api.js
@ -6,21 +6,25 @@ import { _ } from './utils.js';
|
|||||||
|
|
||||||
export async function fetchTMDB(endpoint, params = {}, signal) {
|
export async function fetchTMDB(endpoint, params = {}, signal) {
|
||||||
const region = state.settings.watchRegion || 'US';
|
const region = state.settings.watchRegion || 'US';
|
||||||
const lang = state.settings.language || 'en';
|
|
||||||
|
const regionToLangMap = {
|
||||||
|
'ES': 'es-ES', 'MX': 'es-MX',
|
||||||
|
'FR': 'fr-FR', 'CA': 'fr-CA',
|
||||||
|
'DE': 'de-DE',
|
||||||
|
'IT': 'it-IT',
|
||||||
|
'PT': 'pt-PT', 'BR': 'pt-BR',
|
||||||
|
'US': 'en-US', 'GB': 'en-GB'
|
||||||
|
};
|
||||||
|
|
||||||
|
const tmdbLang = regionToLangMap[region] || 'en-US';
|
||||||
|
|
||||||
const [path, existingQuery] = endpoint.split('?');
|
const [path, existingQuery] = endpoint.split('?');
|
||||||
const finalParams = new URLSearchParams(existingQuery);
|
const finalParams = new URLSearchParams(existingQuery);
|
||||||
|
|
||||||
finalParams.set('api_key', state.settings.apiKey);
|
finalParams.set('api_key', state.settings.apiKey);
|
||||||
finalParams.set('language', lang);
|
finalParams.set('language', tmdbLang);
|
||||||
finalParams.set('watch_region', region);
|
finalParams.set('watch_region', region);
|
||||||
|
|
||||||
// Añadir filtros de puntuación y duración
|
|
||||||
if (params.minScore) finalParams.set('vote_average.gte', params.minScore);
|
|
||||||
if (params.maxScore) finalParams.set('vote_average.lte', params.maxScore);
|
|
||||||
if (params.minDuration) finalParams.set('with_runtime.gte', params.minDuration);
|
|
||||||
if (params.maxDuration) finalParams.set('with_runtime.lte', params.maxDuration);
|
|
||||||
|
|
||||||
for (const [key, value] of Object.entries(params)) {
|
for (const [key, value] of Object.entries(params)) {
|
||||||
if (value) {
|
if (value) {
|
||||||
finalParams.set(key, value);
|
finalParams.set(key, value);
|
||||||
@ -167,7 +171,7 @@ export async function getMusicUrlsFromJellyfin(serverUrl, userId, token, artistI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAllStreamsFromPlex(busqueda, tipoContenido, year = null) {
|
export async function fetchAllStreamsFromPlex(busqueda, tipoContenido) {
|
||||||
if (!busqueda || !tipoContenido) return { success: false, streams: [], message: _('invalidStreamInfo') };
|
if (!busqueda || !tipoContenido) return { success: false, streams: [], message: _('invalidStreamInfo') };
|
||||||
if (!state.db) return { success: false, streams: [], message: _('dbUnavailableForStreams') };
|
if (!state.db) return { success: false, streams: [], message: _('dbUnavailableForStreams') };
|
||||||
|
|
||||||
@ -193,23 +197,10 @@ export async function fetchAllStreamsFromPlex(busqueda, tipoContenido, year = nu
|
|||||||
|
|
||||||
if (tipoContenido === 'movie') {
|
if (tipoContenido === 'movie') {
|
||||||
const videos = Array.from(xml.querySelectorAll("Video"));
|
const videos = Array.from(xml.querySelectorAll("Video"));
|
||||||
let videosToProcess = [];
|
let videosToProcess = videos;
|
||||||
|
const exactMatch = videos.find(v => v.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
||||||
if (year) {
|
if (exactMatch) {
|
||||||
const exactMatch = videos.find(v =>
|
videosToProcess = [exactMatch];
|
||||||
v.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase() &&
|
|
||||||
v.getAttribute('year') == year
|
|
||||||
);
|
|
||||||
if (exactMatch) {
|
|
||||||
videosToProcess = [exactMatch];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const exactMatch = videos.find(v => v.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
|
||||||
if (exactMatch) {
|
|
||||||
videosToProcess = [exactMatch];
|
|
||||||
} else {
|
|
||||||
videosToProcess = videos;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
videosToProcess.forEach(video => {
|
videosToProcess.forEach(video => {
|
||||||
@ -228,21 +219,9 @@ export async function fetchAllStreamsFromPlex(busqueda, tipoContenido, year = nu
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const directories = Array.from(xml.querySelectorAll('Directory[type="show"]'));
|
const directories = Array.from(xml.querySelectorAll('Directory[type="show"]'));
|
||||||
let directoryToProcess;
|
let directoryToProcess = directories.find(d => d.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
||||||
|
|
||||||
if(year){
|
|
||||||
directoryToProcess = directories.find(d =>
|
|
||||||
d.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase() &&
|
|
||||||
d.getAttribute('year') == year
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!directoryToProcess) {
|
|
||||||
directoryToProcess = directories.find(d => d.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!directoryToProcess && directories.length > 0) {
|
if (!directoryToProcess && directories.length > 0) {
|
||||||
directoryToProcess = directories[0];
|
directoryToProcess = directories[0];
|
||||||
}
|
}
|
||||||
@ -395,9 +374,9 @@ export async function fetchAllStreamsFromJellyfin(busqueda, tipoContenido) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAllAvailableStreams(title, type, year = null) {
|
export async function fetchAllAvailableStreams(title, type) {
|
||||||
const plexPromise = fetchAllStreamsFromPlex(title, type, year);
|
const plexPromise = fetchAllStreamsFromPlex(title, type);
|
||||||
const jellyfinPromise = fetchAllStreamsFromJellyfin(title, type); // Jellyfin no usa 'year' en su signature, lo he quitado para que no cause error si se le pasa.
|
const jellyfinPromise = fetchAllStreamsFromJellyfin(title, type);
|
||||||
|
|
||||||
const results = await Promise.allSettled([plexPromise, jellyfinPromise]);
|
const results = await Promise.allSettled([plexPromise, jellyfinPromise]);
|
||||||
|
|
||||||
|
@ -40,7 +40,6 @@ export class Chat {
|
|||||||
this.dom.header.addEventListener('mousedown', this.startDrag.bind(this));
|
this.dom.header.addEventListener('mousedown', this.startDrag.bind(this));
|
||||||
document.addEventListener('mousemove', this.drag.bind(this));
|
document.addEventListener('mousemove', this.drag.bind(this));
|
||||||
document.addEventListener('mouseup', this.stopDrag.bind(this));
|
document.addEventListener('mouseup', this.stopDrag.bind(this));
|
||||||
document.addEventListener('mouseleave', this.stopDrag.bind(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
toggle() {
|
toggle() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { state } from './state.js';
|
import { state } from './state.js';
|
||||||
import { switchView, resetView, showMainView, showItemDetails, showActorDetails, applyFilters, searchByActor, loadContent, toggleFavorite, addStreamToList, downloadM3U, showTrailer, closeTrailer, openSettingsModal, saveSettings, updateSectionTitle, generateStatistics, loadFavorites, loadLocalContent, phpScriptGenerator, initPhotosView, handlePhotoGridClick, handlePhotoTokenChange, showNextPhoto, showPrevPhoto, closePhotoLightbox, activateSettingsTab, deleteHistoryItem, clearAllHistory, getTrailerKey, initializeHeroSection } from './ui.js';
|
import { switchView, resetView, showMainView, showItemDetails, applyFilters, searchByActor, loadContent, toggleFavorite, addStreamToList, downloadM3U, showTrailer, closeTrailer, openSettingsModal, saveSettings, updateSectionTitle, generateStatistics, loadFavorites, loadLocalContent, phpScriptGenerator, initPhotosView, handlePhotoGridClick, handlePhotoTokenChange, showNextPhoto, showPrevPhoto, closePhotoLightbox, activateSettingsTab, deleteHistoryItem, clearAllHistory, getTrailerKey, initializeHeroSection } from './ui.js';
|
||||||
import { loadProviderContent, changeProviderPage, backToProviders } from './providers.js';
|
import { loadProviderContent, changeProviderPage, backToProviders } from './providers.js';
|
||||||
import { debounce, showNotification, _ } from './utils.js';
|
import { debounce, showNotification, _ } from './utils.js';
|
||||||
import { clearContentData, loadTokensToEditor, saveTokensFromEditor, exportDatabase, importDatabase } from './db.js';
|
import { clearContentData, loadTokensToEditor, saveTokensFromEditor, exportDatabase, importDatabase } from './db.js';
|
||||||
@ -74,99 +74,20 @@ export function setupEventListeners() {
|
|||||||
document.getElementById('search-input').addEventListener('keyup', debounce(async (e) => {
|
document.getElementById('search-input').addEventListener('keyup', debounce(async (e) => {
|
||||||
const query = e.target.value.trim();
|
const query = e.target.value.trim();
|
||||||
if (query === state.currentParams.query && state.currentView === 'search') return;
|
if (query === state.currentParams.query && state.currentView === 'search') return;
|
||||||
|
state.currentView = 'search';
|
||||||
if (!query) {
|
|
||||||
resetView();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state.currentView !== 'search') {
|
|
||||||
switchView('search');
|
|
||||||
}
|
|
||||||
|
|
||||||
state.currentParams.query = query;
|
state.currentParams.query = query;
|
||||||
state.currentPage = 1;
|
state.currentPage = 1;
|
||||||
updateSectionTitle();
|
if (!query) {
|
||||||
await loadContent();
|
switchView(state.currentParams.contentType === 'movie' ? 'movies' : 'series');
|
||||||
|
} else {
|
||||||
|
updateSectionTitle();
|
||||||
|
await loadContent();
|
||||||
|
}
|
||||||
}, 400));
|
}, 400));
|
||||||
|
|
||||||
document.getElementById('genre-filter').addEventListener('change', applyFilters);
|
document.getElementById('genre-filter').addEventListener('change', applyFilters);
|
||||||
document.getElementById('year-filter').addEventListener('change', applyFilters);
|
document.getElementById('year-filter').addEventListener('change', applyFilters);
|
||||||
document.getElementById('sort-filter').addEventListener('change', applyFilters);
|
document.getElementById('sort-filter').addEventListener('change', applyFilters);
|
||||||
// Filter Popover Logic
|
|
||||||
const durationBtn = document.getElementById('duration-filter-btn');
|
|
||||||
const scoreBtn = document.getElementById('score-filter-btn');
|
|
||||||
const durationPopover = document.getElementById('duration-popover');
|
|
||||||
const scorePopover = document.getElementById('score-popover');
|
|
||||||
|
|
||||||
const setupPopover = (button, popover) => {
|
|
||||||
if (!button || !popover) return;
|
|
||||||
button.addEventListener('click', (event) => {
|
|
||||||
event.stopPropagation();
|
|
||||||
const isVisible = popover.style.display === 'block';
|
|
||||||
// Close all popovers
|
|
||||||
document.querySelectorAll('.filter-popover').forEach(p => {
|
|
||||||
if (p !== popover) p.style.display = 'none';
|
|
||||||
});
|
|
||||||
// Toggle current popover
|
|
||||||
popover.style.display = isVisible ? 'none' : 'block';
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
setupPopover(durationBtn, durationPopover);
|
|
||||||
setupPopover(scoreBtn, scorePopover);
|
|
||||||
|
|
||||||
// Close popovers when clicking outside
|
|
||||||
window.addEventListener('click', (event) => {
|
|
||||||
if (!event.target.closest('.filter-popover') && !event.target.closest('#duration-filter-btn') && !event.target.closest('#score-filter-btn')) {
|
|
||||||
document.querySelectorAll('.filter-popover').forEach(p => p.style.display = 'none');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Range Slider Logic
|
|
||||||
function setupRangeSlider(minId, maxId, fillId, minValueId, maxValueId) {
|
|
||||||
const minSlider = document.getElementById(minId);
|
|
||||||
const maxSlider = document.getElementById(maxId);
|
|
||||||
const fill = document.getElementById(fillId);
|
|
||||||
const minValueDisplay = document.getElementById(minValueId);
|
|
||||||
const maxValueDisplay = document.getElementById(maxValueId);
|
|
||||||
|
|
||||||
if (!minSlider || !maxSlider || !fill || !minValueDisplay || !maxValueDisplay) return;
|
|
||||||
|
|
||||||
const updateFill = () => {
|
|
||||||
const min = parseFloat(minSlider.value);
|
|
||||||
const max = parseFloat(maxSlider.value);
|
|
||||||
const range = parseFloat(minSlider.max) - parseFloat(minSlider.min);
|
|
||||||
const left = ((min - parseFloat(minSlider.min)) / range) * 100;
|
|
||||||
const width = ((max - min) / range) * 100;
|
|
||||||
fill.style.left = `${left}%`;
|
|
||||||
fill.style.width = `${width}%`;
|
|
||||||
minValueDisplay.textContent = minSlider.value;
|
|
||||||
maxValueDisplay.textContent = maxSlider.value;
|
|
||||||
};
|
|
||||||
|
|
||||||
minSlider.addEventListener('input', () => {
|
|
||||||
if (parseFloat(minSlider.value) > parseFloat(maxSlider.value)) {
|
|
||||||
minSlider.value = maxSlider.value;
|
|
||||||
}
|
|
||||||
updateFill();
|
|
||||||
});
|
|
||||||
|
|
||||||
maxSlider.addEventListener('input', () => {
|
|
||||||
if (parseFloat(maxSlider.value) < parseFloat(minSlider.value)) {
|
|
||||||
maxSlider.value = minSlider.value;
|
|
||||||
}
|
|
||||||
updateFill();
|
|
||||||
});
|
|
||||||
|
|
||||||
minSlider.addEventListener('change', applyFilters);
|
|
||||||
maxSlider.addEventListener('change', applyFilters);
|
|
||||||
|
|
||||||
updateFill(); // Initial call
|
|
||||||
}
|
|
||||||
|
|
||||||
setupRangeSlider('duration-min', 'duration-max', 'duration-fill', 'duration-min-value', 'duration-max-value');
|
|
||||||
setupRangeSlider('score-min', 'score-max', 'score-fill', 'score-min-value', 'score-max-value');
|
|
||||||
document.getElementById('stats-token-filter').addEventListener('change', generateStatistics);
|
document.getElementById('stats-token-filter').addEventListener('change', generateStatistics);
|
||||||
document.getElementById('photos-token-select').addEventListener('change', handlePhotoTokenChange);
|
document.getElementById('photos-token-select').addEventListener('change', handlePhotoTokenChange);
|
||||||
document.getElementById('region-filter').addEventListener('change', saveSettings);
|
document.getElementById('region-filter').addEventListener('change', saveSettings);
|
||||||
@ -371,29 +292,17 @@ function handleMainViewClick(e) {
|
|||||||
|
|
||||||
if (actionBtn) {
|
if (actionBtn) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
const { id, type, year, name } = itemCard.dataset;
|
const { id, type } = itemCard.dataset;
|
||||||
const title = itemCard.querySelector('.item-title')?.textContent;
|
const title = itemCard.querySelector('.item-title')?.textContent;
|
||||||
if (actionBtn.classList.contains('info-btn')) {
|
if (actionBtn.classList.contains('info-btn')) showItemDetails(Number(id), type);
|
||||||
if (type === 'person') {
|
|
||||||
searchByActor(id, name);
|
|
||||||
} else {
|
|
||||||
showItemDetails(Number(id), type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (actionBtn.classList.contains('favorites-btn')) toggleFavorite(Number(id), type);
|
else if (actionBtn.classList.contains('favorites-btn')) toggleFavorite(Number(id), type);
|
||||||
else if (actionBtn.classList.contains('play-btn')) addStreamToList(title, type, year, actionBtn);
|
else if (actionBtn.classList.contains('play-btn')) addStreamToList(title, type, actionBtn);
|
||||||
else if (actionBtn.classList.contains('download-btn')) downloadM3U([{ title, type, year }], actionBtn);
|
else if (actionBtn.classList.contains('download-btn')) downloadM3U([{ title, type }], actionBtn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { id, type } = itemCard.dataset;
|
const { id, type } = itemCard.dataset;
|
||||||
if (id && type) {
|
if (id && type) showItemDetails(Number(id), type);
|
||||||
if (type === 'person') {
|
|
||||||
showActorDetails(Number(id));
|
|
||||||
} else {
|
|
||||||
showItemDetails(Number(id), type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleHistoryClick(e, historyItem) {
|
async function handleHistoryClick(e, historyItem) {
|
||||||
@ -444,7 +353,8 @@ async function handleDetailsClick(e) {
|
|||||||
const castCard = e.target.closest('.cast-card');
|
const castCard = e.target.closest('.cast-card');
|
||||||
if (castCard) {
|
if (castCard) {
|
||||||
const { actorId } = castCard.dataset;
|
const { actorId } = castCard.dataset;
|
||||||
if (actorId) showActorDetails(Number(actorId));
|
const actorName = castCard.querySelector('.cast-name').textContent;
|
||||||
|
if (actorId && actorName) await searchByActor(actorId, actorName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -468,4 +378,4 @@ async function handleDetailsClick(e) {
|
|||||||
downloadM3U(title, type, downloadM3uBtn);
|
downloadM3U(title, type, downloadM3uBtn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -64,22 +64,11 @@ export async function fetchItemsFromLibrary(url, userId, apiKey, library) {
|
|||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
const items = data.Items.map(item => {
|
const items = data.Items.map(item => {
|
||||||
const mediaStream = item.MediaStreams?.find(s => s.Type === 'Video');
|
|
||||||
const container = item.Container;
|
|
||||||
let resolution = null;
|
|
||||||
if (mediaStream && mediaStream.Height) {
|
|
||||||
if (mediaStream.Height >= 2160) resolution = '4k';
|
|
||||||
else if (mediaStream.Height >= 1080) resolution = '1080p';
|
|
||||||
else if (mediaStream.Height >= 720) resolution = '720p';
|
|
||||||
}
|
|
||||||
|
|
||||||
const baseItem = {
|
const baseItem = {
|
||||||
id: item.Id,
|
id: item.Id,
|
||||||
title: item.Name,
|
title: item.Name,
|
||||||
type: item.Type,
|
type: item.Type,
|
||||||
thumb: item.ImageTags?.Primary ? `${url}/Items/${item.Id}/Images/Primary?tag=${item.ImageTags.Primary}` : '',
|
thumb: item.ImageTags?.Primary ? `${url}/Items/${item.Id}/Images/Primary?tag=${item.ImageTags.Primary}` : ''
|
||||||
container: container,
|
|
||||||
resolution: resolution
|
|
||||||
};
|
};
|
||||||
if (!isMusic) {
|
if (!isMusic) {
|
||||||
baseItem.year = item.ProductionYear;
|
baseItem.year = item.ProductionYear;
|
||||||
|
15
js/main.js
15
js/main.js
@ -17,16 +17,7 @@ async function loadSettings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!state.settings.watchRegion) {
|
if (!state.settings.watchRegion) {
|
||||||
const langToRegionMap = {
|
state.settings.watchRegion = 'US';
|
||||||
'es': 'ES',
|
|
||||||
'en': 'US',
|
|
||||||
'fr': 'FR',
|
|
||||||
'de': 'DE',
|
|
||||||
'it': 'IT',
|
|
||||||
'pt': 'PT'
|
|
||||||
};
|
|
||||||
const userLang = chrome.i18n.getUILanguage().split('-')[0];
|
|
||||||
state.settings.watchRegion = langToRegionMap[userLang] || 'US';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state.settings.language) {
|
if (!state.settings.language) {
|
||||||
@ -44,9 +35,7 @@ async function loadSettings() {
|
|||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Could not load settings from DB, using defaults.", error);
|
console.error("Could not load settings from DB, using defaults.", error);
|
||||||
const userLang = chrome.i18n.getUILanguage();
|
state.settings.watchRegion = 'US';
|
||||||
const region = userLang.split('-')[1] || userLang.split('-')[0];
|
|
||||||
state.settings.watchRegion = region.toUpperCase();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
js/plex.js
23
js/plex.js
@ -86,22 +86,13 @@ async function parseAndStoreSectionItems(contentXml, storeName, serverData) {
|
|||||||
|
|
||||||
if (type === 'movie' || type === 'show') {
|
if (type === 'movie' || type === 'show') {
|
||||||
const itemSelector = type === 'movie' ? 'Video' : 'Directory';
|
const itemSelector = type === 'movie' ? 'Video' : 'Directory';
|
||||||
items = Array.from(contentXml.querySelectorAll(itemSelector)).map(el => {
|
items = Array.from(contentXml.querySelectorAll(itemSelector)).map(el => ({
|
||||||
const media = el.querySelector('Media');
|
id: el.getAttribute('ratingKey'),
|
||||||
const part = media?.querySelector('Part');
|
title: el.getAttribute('title'),
|
||||||
const container = part?.getAttribute('container');
|
year: el.getAttribute('year'),
|
||||||
const videoResolution = media?.getAttribute('videoResolution');
|
genre: el.querySelector('Genre')?.getAttribute('tag') || _('noGenre'),
|
||||||
|
type: type
|
||||||
return {
|
}));
|
||||||
id: el.getAttribute('ratingKey'),
|
|
||||||
title: el.getAttribute('title'),
|
|
||||||
year: el.getAttribute('year'),
|
|
||||||
genre: el.querySelector('Genre')?.getAttribute('tag') || _('noGenre'),
|
|
||||||
type: type,
|
|
||||||
container: container,
|
|
||||||
resolution: videoResolution
|
|
||||||
};
|
|
||||||
});
|
|
||||||
} else if (type === 'artist' || type === 'photo') {
|
} else if (type === 'artist' || type === 'photo') {
|
||||||
items = Array.from(contentXml.querySelectorAll('Directory')).map(el => ({
|
items = Array.from(contentXml.querySelectorAll('Directory')).map(el => ({
|
||||||
id: el.getAttribute('ratingKey'),
|
id: el.getAttribute('ratingKey'),
|
||||||
|
@ -101,31 +101,24 @@ export function renderProviders(providers) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getProviderItems(providerId, page = 1, mediaType = 'all') {
|
export async function getProviderItems(providerId, page = 1) {
|
||||||
try {
|
try {
|
||||||
const watchRegion = state.settings.watchRegion || 'US';
|
const watchRegion = state.settings.watchRegion || 'US';
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
with_watch_providers: providerId,
|
with_watch_providers: providerId,
|
||||||
watch_region: watchRegion,
|
watch_region: watchRegion,
|
||||||
page: page,
|
page: page,
|
||||||
};
|
};
|
||||||
|
|
||||||
let items = [];
|
const moviesResponse = await fetchTMDB('discover/movie', params);
|
||||||
let total_pages = 0;
|
const seriesResponse = await fetchTMDB('discover/tv', params);
|
||||||
|
|
||||||
if (mediaType === 'movie' || mediaType === 'all') {
|
const movies = moviesResponse.results.map(item => ({ ...item, media_type: 'movie' }));
|
||||||
const moviesResponse = await fetchTMDB('discover/movie', params);
|
const series = seriesResponse.results.map(item => ({ ...item, media_type: 'tv' }));
|
||||||
items.push(...moviesResponse.results.map(item => ({ ...item, media_type: 'movie' })));
|
|
||||||
total_pages = Math.max(total_pages, moviesResponse.total_pages);
|
const items = [...movies, ...series].sort((a, b) => b.popularity - a.popularity);
|
||||||
}
|
const total_pages = Math.max(moviesResponse.total_pages, seriesResponse.total_pages);
|
||||||
|
|
||||||
if (mediaType === 'tv' || mediaType === 'all') {
|
|
||||||
const seriesResponse = await fetchTMDB('discover/tv', params);
|
|
||||||
items.push(...seriesResponse.results.map(item => ({ ...item, media_type: 'tv' })));
|
|
||||||
total_pages = Math.max(total_pages, seriesResponse.total_pages);
|
|
||||||
}
|
|
||||||
|
|
||||||
items.sort((a, b) => b.popularity - a.popularity);
|
|
||||||
|
|
||||||
return { success: true, items, total_pages };
|
return { success: true, items, total_pages };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -134,9 +127,7 @@ export async function getProviderItems(providerId, page = 1, mediaType = 'all')
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let currentMediaType = 'all';
|
export async function loadProviderContent(providerId, providerName, page = 1) {
|
||||||
|
|
||||||
export async function loadProviderContent(providerId, providerName, page = 1, isFilterChange = false) {
|
|
||||||
currentProviderId = providerId;
|
currentProviderId = providerId;
|
||||||
currentPage = page;
|
currentPage = page;
|
||||||
|
|
||||||
@ -149,22 +140,6 @@ export async function loadProviderContent(providerId, providerName, page = 1, is
|
|||||||
const nextButton = document.getElementById('next-page');
|
const nextButton = document.getElementById('next-page');
|
||||||
const sectionTitle = document.querySelector('#providers-section .section-title');
|
const sectionTitle = document.querySelector('#providers-section .section-title');
|
||||||
const backButton = document.getElementById('back-to-providers');
|
const backButton = document.getElementById('back-to-providers');
|
||||||
|
|
||||||
if (!isFilterChange) {
|
|
||||||
const filterButtons = document.querySelectorAll('#provider-content-type-filter button');
|
|
||||||
filterButtons.forEach(button => {
|
|
||||||
button.replaceWith(button.cloneNode(true));
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelectorAll('#provider-content-type-filter button').forEach(button => {
|
|
||||||
button.addEventListener('click', () => {
|
|
||||||
document.querySelectorAll('#provider-content-type-filter button').forEach(btn => btn.classList.remove('active'));
|
|
||||||
button.classList.add('active');
|
|
||||||
currentMediaType = button.dataset.type;
|
|
||||||
loadProviderContent(currentProviderId, providerName, 1, true);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
providersGrid.style.display = 'none';
|
providersGrid.style.display = 'none';
|
||||||
itemsContainer.style.display = 'block';
|
itemsContainer.style.display = 'block';
|
||||||
@ -174,11 +149,11 @@ export async function loadProviderContent(providerId, providerName, page = 1, is
|
|||||||
itemsGrid.innerHTML = `<div class="col-12 text-center mt-5"><div class="spinner" style="position: static; margin: auto; display: block;"></div></div>`;
|
itemsGrid.innerHTML = `<div class="col-12 text-center mt-5"><div class="spinner" style="position: static; margin: auto; display: block;"></div></div>`;
|
||||||
paginationControls.style.display = 'none';
|
paginationControls.style.display = 'none';
|
||||||
|
|
||||||
const { success, items, total_pages } = await getProviderItems(providerId, page, currentMediaType);
|
const { success, items, total_pages } = await getProviderItems(providerId, page);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
totalPages = total_pages;
|
totalPages = total_pages;
|
||||||
renderGrid(items, false, 'provider-items', !isFilterChange);
|
renderGrid(items, false, 'provider-items');
|
||||||
|
|
||||||
if (totalPages > 1) {
|
if (totalPages > 1) {
|
||||||
paginationControls.style.display = 'flex';
|
paginationControls.style.display = 'flex';
|
||||||
|
38
plex.html
38
plex.html
@ -12,7 +12,6 @@
|
|||||||
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Orbitron:wght@500;600;700&display=swap"
|
href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700&family=Orbitron:wght@500;600;700&display=swap"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css">
|
||||||
<link rel="stylesheet" href="css/custom-filters.css">
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="unlocalized">
|
<body class="unlocalized">
|
||||||
@ -97,34 +96,6 @@
|
|||||||
<option value="vote_average.desc">__MSG_sortTopRated__</option>
|
<option value="vote_average.desc">__MSG_sortTopRated__</option>
|
||||||
<option id="sort-release-date" value="release_date.desc">__MSG_sortRecent__</option>
|
<option id="sort-release-date" value="release_date.desc">__MSG_sortRecent__</option>
|
||||||
</select>
|
</select>
|
||||||
<div class="filter-popover-wrapper">
|
|
||||||
<button type="button" class="btn btn-secondary" id="duration-filter-btn" data-i18n="duration_min">Duración (Min)</button>
|
|
||||||
<div id="duration-popover" class="filter-popover">
|
|
||||||
<div class="range-slider-container">
|
|
||||||
<div class="slider-track"></div>
|
|
||||||
<div class="slider-fill" id="duration-fill"></div>
|
|
||||||
<input type="range" class="form-range" id="duration-min" min="0" max="300" value="0">
|
|
||||||
<input type="range" class="form-range" id="duration-max" min="0" max="300" value="300">
|
|
||||||
</div>
|
|
||||||
<div class="range-values">
|
|
||||||
<span id="duration-min-value">0</span> - <span id="duration-max-value">300</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="filter-popover-wrapper">
|
|
||||||
<button type="button" class="btn btn-secondary" id="score-filter-btn" data-i18n="score">Puntuación</button>
|
|
||||||
<div id="score-popover" class="filter-popover">
|
|
||||||
<div class="range-slider-container">
|
|
||||||
<div class="slider-track"></div>
|
|
||||||
<div class="slider-fill" id="score-fill"></div>
|
|
||||||
<input type="range" class="form-range" id="score-min" min="0" max="10" step="0.1" value="0">
|
|
||||||
<input type="range" class="form-range" id="score-max" min="0" max="10" step="0.1" value="10">
|
|
||||||
</div>
|
|
||||||
<div class="range-values">
|
|
||||||
<span id="score-min-value">0</span> - <span id="score-max-value">10</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="content-grid" class="content-grid">
|
<div id="content-grid" class="content-grid">
|
||||||
<div class="col-12 text-center mt-5">
|
<div class="col-12 text-center mt-5">
|
||||||
@ -140,14 +111,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div id="providers-grid" class="providers-grid"></div>
|
<div id="providers-grid" class="providers-grid"></div>
|
||||||
<div id="provider-items-container" style="display: none;">
|
<div id="provider-items-container" style="display: none;">
|
||||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
<button id="back-to-providers" class="btn btn-secondary mb-3"><i class="fas fa-arrow-left me-2"></i>__MSG_backToProviders__</button>
|
||||||
<button id="back-to-providers" class="btn btn-secondary"><i class="fas fa-arrow-left me-2"></i>__MSG_backToProviders__</button>
|
|
||||||
<div id="provider-content-type-filter" class="btn-group">
|
|
||||||
<button type="button" class="btn btn-outline-primary active" data-type="all">__MSG_all__</button>
|
|
||||||
<button type="button" class="btn btn-outline-primary" data-type="movie">__MSG_navMovies__</button>
|
|
||||||
<button type="button" class="btn btn-outline-primary" data-type="tv">__MSG_navSeries__</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="provider-items" class="content-grid"></div>
|
<div id="provider-items" class="content-grid"></div>
|
||||||
<div id="pagination-controls" class="text-center mt-4" style="display: none;">
|
<div id="pagination-controls" class="text-center mt-4" style="display: none;">
|
||||||
<button id="prev-page" class="btn btn-primary">← __MSG_previous__</button>
|
<button id="prev-page" class="btn btn-primary">← __MSG_previous__</button>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user