Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
4dc6a89cfe | |||
ed6cb69add |
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Scannt Plex-Server nach Inhalten und zeigt diese in der Oberfläche an" },
|
"appDescription": { "message": "Sucht Plex-Server nach Inhalten und zeigt sie in der Benutzeroberfläche an" },
|
||||||
"appTagline": { "message": "Filme, Serien und Musik" },
|
"appTagline": { "message": "Filme, Serien und Musik" },
|
||||||
"appLocaleCode": { "message": "de" },
|
"appLocaleCode": { "message": "de-DE" },
|
||||||
"toggleNavigation": { "message": "Navigation umschalten" },
|
"toggleNavigation": { "message": "Navigation umschalten" },
|
||||||
"searchPlaceholder": { "message": "Filme oder Serien suchen..." },
|
"searchPlaceholder": { "message": "Suche nach Filmen oder Serien..." },
|
||||||
"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": "Entdecke Tausende von Filmen und Serien." },
|
"heroSubtitle": { "message": "Entdecken Sie Tausende von Filmen und Serien." },
|
||||||
"addStream": { "message": "Stream hinzufügen" },
|
"addStream": { "message": "Stream hinzufügen" },
|
||||||
"moreInfo": { "message": "Mehr Informationen" },
|
"moreInfo": { "message": "Mehr Info" },
|
||||||
"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": "Server auswählen" },
|
"selectServer": { "message": "Wählen Sie einen Server" },
|
||||||
"loading": { "message": "Laden..." },
|
"loading": { "message": "Laden..." },
|
||||||
"loadingLibraries": { "message": "Bibliotheken laden..." },
|
"loadingLibraries": { "message": "Lade Bibliotheken..." },
|
||||||
"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 Tokens" },
|
"statsAllTokens": { "message": "Alle Token" },
|
||||||
"statsAnalyzing": { "message": "Ihre Bibliothek wird analysiert..." },
|
"statsAnalyzing": { "message": "Analysiere deine Bibliothek..." },
|
||||||
"statsActiveTokens": { "message": "Aktive Tokens" },
|
"statsActiveTokens": { "message": "Aktive Token" },
|
||||||
"statsServersFound": { "message": "Server gefunden" },
|
"statsServersFound": { "message": "Gefundene Server" },
|
||||||
"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": "Inhalte nach Genre (Filme)" },
|
"statsChartMoviesByGenre": { "message": "Inhalt nach Genre (Filme)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Inhalte nach Genre (Serien)" },
|
"statsChartSeriesByGenre": { "message": "Inhalt nach Genre (Serien)" },
|
||||||
"statsChartByDecade": { "message": "Inhalte nach Jahrzehnt" },
|
"statsChartByDecade": { "message": "Inhalt nach Jahrzehnt" },
|
||||||
"recommendationsTitle": { "message": "Empfehlungen für Sie" },
|
"recommendationsTitle": { "message": "Empfehlungen für dich" },
|
||||||
"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": "Foto-Viewer" },
|
"photoViewer": { "message": "Fotobetrachter" },
|
||||||
"previous": { "message": "Vorherige" },
|
"previous": { "message": "Zurück" },
|
||||||
"next": { "message": "Nächste" },
|
"next": { "message": "Weiter" },
|
||||||
"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": "Standardschlüssel wird verwendet, wenn leer gelassen" },
|
"settingsTmdbApiPlaceholder": { "message": "Der Standardschlüssel wird verwendet, wenn das Feld leer gelassen wird" },
|
||||||
"settingsGoogleApiLabel": { "message": "Google Gemini API-Schlüssel (Optional)" },
|
"settingsGoogleApiLabel": { "message": "Google Gemini-API-Schlüssel (optional)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Erforderlich für die Nutzung des KI-Assistenten" },
|
"settingsGoogleApiPlaceholder": { "message": "Wird für die Nutzung des KI-Assistenten benötigt" },
|
||||||
"settingsRegionLabel": { "message": "Region für die Inhaltserkennung" },
|
"settingsRegionLabel": { "message": "Region für die Inhaltsentdeckung" },
|
||||||
"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/script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://ihr-server.com/pfad/zum/skript.php" },
|
||||||
"settingsInterface": { "message": "Oberfläche" },
|
"settingsInterface": { "message": "Benutzeroberfläche" },
|
||||||
"settingsLightTheme": { "message": "Heller Modus" },
|
"settingsLightTheme": { "message": "Heller Modus" },
|
||||||
"settingsShowHero": { "message": "Willkommensbereich 'Hero' anzeigen" },
|
"settingsShowHero": { "message": "Willkommensbereich 'Hero' anzeigen" },
|
||||||
"settingsScanContent": { "message": "Inhaltsscanning" },
|
"settingsScanContent": { "message": "Inhalt scannen" },
|
||||||
"settingsScanDesc": { "message": "Wählen Sie aus, was gescannt werden soll, und klicken Sie auf die Schaltfläche." },
|
"settingsScanDesc": { "message": "Wählen Sie aus, was gescannt werden soll, und drücken Sie die Taste." },
|
||||||
"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": "Alle auswählen" },
|
"settingsSelectAll": { "message": "Alles auswählen" },
|
||||||
"settingsStartScan": { "message": "Scan starten" },
|
"settingsStartScan": { "message": "Scan starten" },
|
||||||
"settingsPlexTokens": { "message": "Plex-Tokens" },
|
"settingsPlexTokens": { "message": "Plex-Token" },
|
||||||
"settingsPlexTokensDesc": { "message": "Bearbeiten Sie die Liste der Plex-Tokens (JSON-Format)." },
|
"settingsPlexTokensDesc": { "message": "Bearbeiten Sie die Liste der Plex-Token (JSON-Format)." },
|
||||||
"settingsSaveTokens": { "message": "Tokens speichern" },
|
"settingsSaveTokens": { "message": "Token speichern" },
|
||||||
"settingsJellyfinTitle": { "message": "Jellyfin-Konfiguration" },
|
"settingsJellyfinTitle": { "message": "Jellyfin-Einstellungen" },
|
||||||
"settingsJellyfinDesc": { "message": "Fügen Sie Ihre Jellyfin-Serverdaten hinzu, um deren Inhalte zu scannen." },
|
"settingsJellyfinDesc": { "message": "Fügen Sie Ihre Jellyfin-Serverdetails 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 den Server" },
|
"settingsPhpGenTitle": { "message": "PHP-Skript-Generator für 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 lassen für denselben Ordner)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Bsp.: /var/www/html/listen (leer für denselben Ordner)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Dateiname" },
|
"settingsPhpFilenameLabel": { "message": "Dateiname" },
|
||||||
"settingsPhpFileAction": { "message": "Dateiaktion" },
|
"settingsPhpFileAction": { "message": "Dateiaktion" },
|
||||||
"settingsPhpActionAppend": { "message": "An Dateiende anhängen (kumulativ)" },
|
"settingsPhpActionAppend": { "message": "Am Ende der Datei anfügen (kumulativ)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Datei überschreiben (neu beginnen)" },
|
"settingsPhpActionOverwrite": { "message": "Datei überschreiben (von vorne beginnen)" },
|
||||||
"settingsPhpSecurity": { "message": "Sicherheit (Optional)" },
|
"settingsPhpSecurity": { "message": "Sicherheit (optional)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Geheimen Schlüssel verwenden (Empfohlen)" },
|
"settingsPhpUseSecretKey": { "message": "Geheimschlüssel verwenden (empfohlen)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Geben Sie einen sicheren geheimen Schlüssel ein" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Geben Sie einen sicheren Geheimschlü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 Einstellungen." },
|
"settingsClearContentDesc": { "message": "Diese Aktion löscht Filme, Serien und Musik aus der lokalen Datenbank, hat aber keine Auswirkungen auf Ihre Favoriten oder Ihre 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": "Künstler suchen..." },
|
"musicSearchArtistPlaceholder": { "message": "Suche nach einem Künstler..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Diskografie durchsuchen..." },
|
"musicSearchDiscographyPlaceholder": { "message": "In Diskografie suchen..." },
|
||||||
"musicNothingPlaying": { "message": "Nichts wird abgespielt" },
|
"musicNothingPlaying": { "message": "Nichts wird abgespielt" },
|
||||||
"musicSelectSong": { "message": "Wählen Sie einen Song" },
|
"musicSelectSong": { "message": "Wählen Sie ein Lied" },
|
||||||
"musicToStart": { "message": "zum Abspielen" },
|
"musicToStart": { "message": "um die Wiedergabe zu starten" },
|
||||||
"miniplayerDownloadSong": { "message": "Song herunterladen" },
|
"miniplayerDownloadSong": { "message": "Lied herunterladen" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Album M3U herunterladen" },
|
"miniplayerDownloadAlbum": { "message": "M3U-Album 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-Verstärkung" },
|
"eqPresetBassBoost": { "message": "Bass-Boost" },
|
||||||
"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 der Daten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Fehler beim Löschen von Daten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Texteditor nicht verfügbar." },
|
"aceEditorNotAvailable": { "message": "Texteditor nicht verfügbar." },
|
||||||
"errorLoadingTokens": { "message": "Fehler beim Laden der Tokens zum Bearbeiten." },
|
"errorLoadingTokens": { "message": "Fehler beim Laden der Token zur Bearbeitung." },
|
||||||
"errorLoadingTokensMessage": { "message": "Fehler beim Laden der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Fehler beim Laden der Token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Editor nicht zum Speichern verfügbar." },
|
"aceEditorNotAvailableToSave": { "message": "Editor zum Speichern nicht verfügbar." },
|
||||||
"invalidJsonFormat": { "message": "Ungültiges JSON-Format. Muss { \"tokens\": [...] } sein" },
|
"invalidJsonFormat": { "message": "Ungültiges JSON-Format. Es muss { \"tokens\": [...] } sein" },
|
||||||
"tokensSaved": { "message": "Tokens erfolgreich gespeichert." },
|
"tokensSaved": { "message": "Token erfolgreich gespeichert." },
|
||||||
"errorSavingTokens": { "message": "Fehler beim Speichern der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Fehler beim Speichern der Token: $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 wird mit neuen Daten aktualisiert..." },
|
"updatingView": { "message": "Ansicht mit neuen Daten wird aktualisiert..." },
|
||||||
"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." },
|
"confirmClearContent": { "message": "Sind Sie sicher, dass Sie lokale 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": "Genres laden..." },
|
"loadingGenres": { "message": "Lade Genres..." },
|
||||||
"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": "Durchsuchen und schauen Sie Inhalte, damit sie hier erscheinen." },
|
"historyEmptySub": { "message": "Entdecken und sehen Sie sich Inhalte an, 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 Empfehlungen geben zu können!" },
|
"noRecommendations": { "message": "Wir müssen Sie besser kennenlernen, um Ihnen 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 Inhalt von $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Suche nach Inhalten 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 Streams für „$title$“", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Suche nach Streams für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Sende $count$ Stream(s) an den Server...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Sende $count$ Stream(s) an den Server...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Stream(s) erfolgreich hinzugefügt." },
|
"streamAddedSuccess": { "message": "Stream(s) erfolgreich hinzugefügt." },
|
||||||
"generatingM3U": { "message": "Generiere M3U für „$title$“", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Generiere M3U für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "„$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 Favoriten hinzugefügt." },
|
"addedToFavorites": { "message": "Zu den Favoriten hinzugefügt." },
|
||||||
"removedFromFavorites": { "message": "Aus Favoriten entfernt." },
|
"removedFromFavorites": { "message": "Aus den Favoriten entfernt." },
|
||||||
"plexScanInProgress": { "message": "Der Plex-Scan läuft bereits." },
|
"plexScanInProgress": { "message": "Plex-Scan läuft bereits." },
|
||||||
"plexScanStarting": { "message": "Plex-Scan wird gestartet..." },
|
"plexScanStarting": { "message": "Plex-Scan wird gestartet..." },
|
||||||
"noPlexTokens": { "message": "Keine Plex-Tokens konfiguriert." },
|
"noPlexTokens": { "message": "Keine Plex-Token konfiguriert." },
|
||||||
"clearingSections": { "message": "Abschnitte werden gelöscht: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Lösche Abschnitte: $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. Inhalte werden aktualisiert..." },
|
"plexScanFinished": { "message": "Scan abgeschlossen. Inhalt wird 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 Künstlersongs." },
|
"errorFetchingArtistSongs": { "message": "Fehler beim Abrufen der Lieder des Künstlers." },
|
||||||
"errorLoadingSongs": { "message": "Fehler beim Laden der Songs." },
|
"errorLoadingSongs": { "message": "Fehler beim Laden der Lieder." },
|
||||||
"noArtistsFound": { "message": "Keine Künstler gefunden." },
|
"noArtistsFound": { "message": "Keine Künstler gefunden." },
|
||||||
"shuffleOn": { "message": "Zufallswiedergabe aktiviert." },
|
"shuffleOn": { "message": "Zufallswiedergabe ein." },
|
||||||
"shuffleOff": { "message": "Zufallswiedergabe deaktiviert." },
|
"shuffleOff": { "message": "Zufallswiedergabe aus." },
|
||||||
"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,32 +240,34 @@
|
|||||||
"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": "Erkunden"},
|
"explore": {"message": "Entdecken"},
|
||||||
"noGenre": {"message": "Ohne Kategorie"},
|
"noGenre": {"message": "Ohne Kategorie"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Zusammenfassung"},
|
||||||
"noSynopsis": {"message": "Keine Synopsis verfügbar."},
|
"noSynopsis": {"message": "Keine Zusammenfassung verfügbar."},
|
||||||
"director": {"message": "Regisseur:"},
|
"director": {"message": "Regisseur:"},
|
||||||
"writer": {"message": "Drehbuchautor:"},
|
"writer": {"message": "Autor:"},
|
||||||
"viewOnImdb": {"message": "Auf IMDb ansehen"},
|
"viewOnImdb": {"message": "Auf IMDb ansehen"},
|
||||||
"watchTrailer": {"message": "Trailer ansehen"},
|
"watchTrailer": {"message": "Trailer ansehen"},
|
||||||
"addToFavorites": {"message": "Zu Favoriten hinzufügen"},
|
"addToFavorites": {"message": "Zu den Favoriten hinzufügen"},
|
||||||
"removeFromFavorites": {"message": "Aus Favoriten entfernen"},
|
"removeFromFavorites": {"message": "Aus den Favoriten entfernen"},
|
||||||
"notAvailable": {"message": "Nicht verfügbar"},
|
"notAvailable": {"message": "Nicht verfügbar"},
|
||||||
"mainCast": {"message": "Hauptdarsteller"},
|
"mainCast": {"message": "Hauptbesetzung"},
|
||||||
"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": "Anwendung konnte nicht geladen werden."},
|
"fatalInitErrorSub": {"message": "Die 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 vorhanden."},
|
"noPlexServersForStreams": {"message": "Keine Plex-Server."},
|
||||||
"notFoundOnServers": {"message": "„$query$“ wurde auf den Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "\"$query$\" auf 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" } } },
|
||||||
@ -273,35 +275,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": "Unerfolgreiche Serverantwort." },
|
"errorServerResponse": { "message": "Nicht erfolgreiche 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 der Plex-XML." },
|
"errorParsingPlexXml": { "message": "Fehler beim Parsen von Plex-XML." },
|
||||||
"untitled": { "message": "Unbetitelt" },
|
"untitled": { "message": "Ohne Titel" },
|
||||||
"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": "Der Jellyfin-Scan läuft bereits." },
|
"jellyfinScanInProgress": { "message": "Jellyfin-Scan läuft bereits." },
|
||||||
"jellyfinScanning": { "message": "Jellyfin wird gescannt..." },
|
"jellyfinScanning": { "message": "Scanne Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Bitte geben Sie die Jellyfin-URL und den Benutzernamen an." },
|
"jellyfinMissingCredentials": { "message": "Bitte vervollständigen Sie die Jellyfin-URL und den Benutzernamen." },
|
||||||
"jellyfinConnecting": { "message": "Verbindung zu Jellyfin wird hergestellt unter: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Verbinde mit Jellyfin 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": "Bibliotheken werden abgerufen..." },
|
"jellyfinFetchingLibraries": { "message": "Rufe Bibliotheken ab..." },
|
||||||
"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$“ wurde in Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "\"$query$\" auf Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "„$query$“ wurde auf keinem Server gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "\"$query$\" 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": "Server auswählen" },
|
"activitySelectServer": { "message": "Wählen Sie einen Server" },
|
||||||
"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" },
|
||||||
@ -310,19 +312,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": "Aktivität des Servers konnte nicht abgerufen werden." },
|
"activityError": { "message": "Serveraktivität 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": "Server auswählen..." },
|
"selectAServer": { "message": "Wählen Sie einen Server..." },
|
||||||
"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": "Anleitung" },
|
"howToUse": { "message": "Anwendung" },
|
||||||
"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 zum Einschließen aus." },
|
"m3uInstruction2": { "message": "Wählen Sie eine oder mehrere Bibliotheken aus, die einbezogen werden sollen." },
|
||||||
"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" },
|
||||||
@ -330,112 +332,118 @@
|
|||||||
"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 wissen möchten." },
|
"chatWelcome": { "message": "Willkommen! Ich bin Ihr CinePlex-Assistent. Fragen Sie mich nach Filmen, Serien oder allem, was Sie sonst noch wissen möchten." },
|
||||||
"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." },
|
"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." },
|
||||||
"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": "Sucht in der Plex-Bibliothek des Benutzers nach Filmen oder Serien nach Titel." },
|
"aiToolSearchLibraryDesc": { "message": "Durchsucht die Plex-Bibliothek des Benutzers nach Filmen oder Serien nach Titel." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Der Titel des Films oder der Serie, die gesucht werden soll." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "Der Titel des zu suchenden Films oder der zu suchenden Serie." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Der Typ des Inhalts, der gesucht werden soll. Kann 'movie' für Filme oder 'series' für Serien sein. (Optional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "Der Typ des zu suchenden Inhalts. 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, wie z.B. die Gesamtzahl der einzigartigen Filme, Serien und Künstler." },
|
"aiToolGetUserStatsDesc": { "message": "Ruft die Bibliotheksstatistiken des Benutzers ab und zeigt sie an, z. B. die Gesamtzahl der einzigartigen Filme, Serien und Künstler." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Detailseite eines bestimmten Films oder einer Serie nach Titel und Typ an." },
|
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Detailseite eines bestimmten Films oder einer bestimmten 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 Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "Der Typ des Inhalts. 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 Serie." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "Der Titel des hinzuzufügenden Films oder der hinzuzufügenden Serie." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "Der Typ des Inhalts. Muss 'movie' oder 'series' sein." },
|
||||||
"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." },
|
"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." },
|
||||||
"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'). Falls nicht angegeben, wird ein Standardname verwendet." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Der Name der herunterzuladenden M3U-Datei (z. B. 'MeineListe.m3u'). Wenn nicht angegeben, wird ein Standardname verwendet." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zur Favoritenliste des Benutzers hinzu oder entfernt sie." },
|
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zur Favoritenliste des Benutzers hinzu oder entfernt sie daraus." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Der Titel des Films oder der Serie." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "Der Typ des Inhalts. 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 Film- oder Serienansicht an, wodurch die Ergebnisse nach Typ, Genre, Jahr und Sortierreihenfolge verfeinert werden können." },
|
"aiToolApplyFiltersDesc": { "message": "Wendet Filter auf die aktuelle Ansicht von Filmen oder Serien an, um die Ergebnisse nach Typ, Genre, Jahr und Sortierreihenfolge zu verfeinern." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Der Inhaltstyp, auf den die Filter angewendet werden sollen. Muss 'movie' oder 'series' sein." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "Der Typ des Inhalts, 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' (beliebteste), 'vote_average.desc' (am besten bewertet), 'release_date.desc' (neueste für Filme) oder 'first_air_date.desc' (neueste für Serien)." },
|
"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)." },
|
||||||
"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 Tokens 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 Token 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, wodurch die Anwendung Inhalte von neuen Plex-Servern scannen kann." },
|
"aiToolAddPlexTokenDesc": { "message": "Fügt der Konfiguration der Erweiterung einen neuen X-Plex-Token hinzu, sodass die Anwendung Inhalte von neuen Plex-Servern scannen kann." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "Die X-Plex-Token-Zeichenfolge, die hinzugefügt werden soll." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "Die hinzuzufügende X-Plex-Token-Zeichenfolge." },
|
||||||
"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." },
|
"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." },
|
||||||
"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": "Leert die Empfehlungsansicht und löscht zwischengespeicherte Empfehlungen." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Löscht die Empfehlungsansicht und entfernt 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": "Details für „$title$“ werden angezeigt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Zeige Details für '$title'.", "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 Favoriten hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "'$title' zu den Favoriten hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "„$title$“ aus Favoriten entfernt.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "'$title' aus den Favoriten entfernt.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Empfehlungen werden angezeigt." },
|
"aiToolRecommendationsSuccess": { "message": "Zeige Empfehlungen an." },
|
||||||
"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 Songs für „$artist_name$“ gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "Keine Lieder 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": "Chat-Verlauf gelöscht." },
|
"aiToolChatHistoryCleared": { "message": "Chatverlauf 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 App-Tabs." },
|
"aiToolDatabaseDeleteBlocked": { "message": "Das Löschen der Datenbank ist blockiert. Schließen Sie andere Tabs der Anwendung." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "Alle Tokens erfolgreich aktualisiert." },
|
"aiToolUpdateAllTokensSuccess": { "message": "Alle Token wurden erfolgreich aktualisiert." },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Token: $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. Inhalt wird aktualisiert.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Region auf $region$ geändert. Der 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 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." },
|
"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." },
|
||||||
"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": "Titel werden auf Ihren lokalen Servern überprüft..." },
|
"aiToolM3UCheckingTitles": { "message": "Überprüfe die Titel auf Ihren lokalen Servern..." },
|
||||||
"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": "Erledigt! Ich habe $1 von $2 Titeln auf Ihren Servern gefunden und den M3U-Playlist-Download gestartet.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"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" } } },
|
||||||
"backToProviders": { "message": "Zurück zu Anbietern" },
|
"backToProviders": { "message": "Zurück zu den 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": "Download von „$title$“ wird gestartet", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Starte Download von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "„$title$“ heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorDownloadingSong": { "message": "Fehler beim Herunterladen von „$title$“", "placeholders": { "title": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Fehler beim Herunterladen von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "M3U für „$artist$“ wird generiert", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Generiere M3U für \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U für Album „$artist$“ generiert.", "placeholders": { "artist": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U für Album \"$artist$\" generiert.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Abschnitt „$title$“ wird erneut versucht", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Wiederhole Abschnitt \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[ERFOLG] Wiederholung für „$title$“ abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[ERFOLG] Wiederholung von \"$title$\" abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ENDGÜLTIGER FEHLER] Wiederholung fehlgeschlagen für „$title$“: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[FEHLER] Wiederholung für \"$title$\" fehlgeschlagen: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Wiederholungsphase für $count$ Abschnitte wird gestartet...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Starte Wiederholungsphase für $count$ Abschnitte...", "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 von Token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorProcessingToken": { "message": "Fehler beim Verarbeiten des Tokens $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ültiger Token bereitgestellt." },
|
"invalidTokenProvided": { "message": "Ungültiges Token angegeben." },
|
||||||
"tokenAlreadyExists": { "message": "Der Token existiert bereits." },
|
"tokenAlreadyExists": { "message": "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": "Automatische Wiedergabe blockiert." },
|
"autoplayBlocked": { "message": "Autoplay blockiert." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"page": { "message": "Seite" },
|
||||||
"page": { "message": "Seite" }
|
"all": { "message": "Alle" },
|
||||||
|
"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 to find content and displays it in the interface" },
|
"appDescription": { "message": "Scans Plex servers for content and displays it in the interface" },
|
||||||
"appTagline": { "message": "Movies, Series, and Music" },
|
"appTagline": { "message": "Movies, Series, and Music" },
|
||||||
"appLocaleCode": { "message": "en" },
|
"appLocaleCode": { "message": "en-US" },
|
||||||
"toggleNavigation": { "message": "Toggle Navigation" },
|
"toggleNavigation": { "message": "Toggle Navigation" },
|
||||||
"searchPlaceholder": { "message": "Search movies or series..." },
|
"searchPlaceholder": { "message": "Search for 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 Information" },
|
"moreInfo": { "message": "More info" },
|
||||||
"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 ensure you have a photo library in Plex." },
|
"photosEmptyStateSub": { "message": "Please select a server or make sure 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": "Default key will be used if left blank" },
|
"settingsTmdbApiPlaceholder": { "message": "The 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 AI assistant" },
|
"settingsGoogleApiPlaceholder": { "message": "Required to use the 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 click the button." },
|
"settingsScanDesc": { "message": "Select what to scan and press 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 Configuration" },
|
"settingsJellyfinTitle": { "message": "Jellyfin Settings" },
|
||||||
"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": "Server Save Path" },
|
"settingsPhpSavePathLabel": { "message": "Save Path on Server" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for same folder)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for the same folder)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "File Name" },
|
"settingsPhpFilenameLabel": { "message": "File Name" },
|
||||||
"settingsPhpFileAction": { "message": "File Action" },
|
"settingsPhpFileAction": { "message": "File Action" },
|
||||||
"settingsPhpActionAppend": { "message": "Append to file (cumulative)" },
|
"settingsPhpActionAppend": { "message": "Append to the end of the file (cumulative)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Overwrite file (start fresh)" },
|
"settingsPhpActionOverwrite": { "message": "Overwrite the file (start over)" },
|
||||||
"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": "Generated PHP code will appear here." },
|
"settingsPhpGeneratedPlaceholder": { "message": "The 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 settings." },
|
"settingsClearContentDesc": { "message": "This action will delete movies, series, and music from the local database, but will not affect your favorites or your 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 artist..." },
|
"musicSearchArtistPlaceholder": { "message": "Search for an artist..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Search discography..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Search in 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 album M3U" },
|
"miniplayerDownloadAlbum": { "message": "Download M3U album" },
|
||||||
"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 local database." },
|
"dbAccessError": { "message": "Error accessing the local database." },
|
||||||
"dbUpdateNeeded": { "message": "Database needs updating, please reload the page." },
|
"dbUpdateNeeded": { "message": "The database needs to be updated, please reload the page." },
|
||||||
"dbBlocked": { "message": "Please close other tabs of this app to continue." },
|
"dbBlocked": { "message": "Please close other tabs of this application 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 to save." },
|
"aceEditorNotAvailableToSave": { "message": "Editor not available for saving." },
|
||||||
"invalidJsonFormat": { "message": "Invalid JSON format. Must be { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Invalid JSON format. It 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 database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Error exporting the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "File does not contain a valid JSON object." },
|
"invalidJsonFile": { "message": "The file does not contain a valid JSON object." },
|
||||||
"noDataToImport": { "message": "File contains no data for current DB sections." },
|
"noDataToImport": { "message": "The file does not contain data for the current DB sections." },
|
||||||
"dbImported": { "message": "Database imported successfully." },
|
"dbImported": { "message": "Database imported successfully." },
|
||||||
"errorImportingDb": { "message": "Error importing database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Error importing the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Updating view with new data..." },
|
"updatingView": { "message": "Updating the 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 clear all your viewing history? This action cannot be undone." },
|
"confirmClearHistory": { "message": "Are you sure you want to delete 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 copy it." },
|
"errorGeneratingScript": { "message": "First generate a script to be able to copy it." },
|
||||||
"scriptCopied": { "message": "PHP script copied to clipboard." },
|
"scriptCopied": { "message": "PHP script copied to clipboard." },
|
||||||
"errorCopyingScript": { "message": "Error copying script." },
|
"errorCopyingScript": { "message": "Error copying the 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 selected." },
|
"noPhotoServerSelected": { "message": "Error: No photo server has been 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": "Browse and watch content for it to appear here." },
|
"historyEmptySub": { "message": "Explore and watch content for it to appear here." },
|
||||||
"errorGeneratingRecommendations": { "message": "Error generating recommendations." },
|
"errorGeneratingRecommendations": { "message": "Error generating recommendations." },
|
||||||
"noRecommendations": { "message": "We need to know you better to give you recommendations!" },
|
"noRecommendations": { "message": "We need to get 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 content for $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Searching for content by $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": "PHP server URL is not configured. Please configure it in Settings." },
|
"phpUrlNotConfigured": { "message": "The PHP server URL is not configured. Please configure it in Settings." },
|
||||||
"searchingStreams": { "message": "Searching streams for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Searching for streams for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Sending $count$ stream(s) to server...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Sending $count$ stream(s) to the 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 completed." },
|
"initialScanPhaseComplete": { "message": "Initial scan phase finished." },
|
||||||
"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 user." },
|
"scanCancelled": { "message": "Scan cancelled by the user." },
|
||||||
"scanCancelledInfo": { "message": "Scan cancelled." },
|
"scanCancelledInfo": { "message": "Scan cancelled." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Error initializing music player." },
|
"errorInitializingMusicPlayer": { "message": "Error initializing the 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 unavailable." },
|
"dbUnavailableError": { "message": "Error: Database not available." },
|
||||||
"updatingMusicData": { "message": "Updating music data..." },
|
"updatingMusicData": { "message": "Updating music data..." },
|
||||||
"musicDataUpdated": { "message": "Music data updated." },
|
"musicDataUpdated": { "message": "Music data updated." },
|
||||||
"errorFetchingArtistSongs": { "message": "Error fetching artist songs." },
|
"errorFetchingArtistSongs": { "message": "Error fetching the artist's 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 enabled." },
|
"shuffleOn": { "message": "Shuffle mode on." },
|
||||||
"shuffleOff": { "message": "Shuffle mode disabled." },
|
"shuffleOff": { "message": "Shuffle mode off." },
|
||||||
"playbackError": { "message": "Playback error" },
|
"playbackError": { "message": "Playback error" },
|
||||||
"errorLabel": { "message": "Error" },
|
"errorLabel": { "message": "Error" },
|
||||||
"reloadingPage": { "message": "Reloading page..." },
|
"reloadingPage": { "message": "Reloading the 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": "No category"},
|
"noGenre": {"message": "Uncategorized"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "No synopsis available."},
|
"noSynopsis": {"message": "No synopsis available."},
|
||||||
"director": {"message": "Director:"},
|
"director": {"message": "Director:"},
|
||||||
@ -256,6 +256,8 @@
|
|||||||
"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"}}},
|
||||||
@ -263,9 +265,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 unavailable."},
|
"dbUnavailableForStreams": {"message": "Local database not available."},
|
||||||
"noPlexServersForStreams": {"message": "No Plex servers."},
|
"noPlexServersForStreams": {"message": "No Plex servers."},
|
||||||
"notFoundOnServers": {"message": "Could not find \"$query$\" on Plex servers.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "\"$query$\" not found 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" } } },
|
||||||
@ -281,25 +283,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 fill in Jellyfin URL and username." },
|
"jellyfinMissingCredentials": { "message": "Please complete the 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(ies) found.", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ media library(s) 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": "Could not find \"$query$\" on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "\"$query$\" not found on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "Could not find \"$query$\" on any server.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "\"$query$\" not found 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 settings." },
|
"noJellyfinContentSub": { "message": "Make sure you have scanned your Jellyfin server in the 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" },
|
||||||
@ -312,7 +314,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 identifier." },
|
"activityCopyError": { "message": "Error copying the 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" },
|
||||||
@ -320,7 +322,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." },
|
||||||
@ -331,89 +333,91 @@
|
|||||||
"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": "Google Gemini API key is not configured. Please set it in the extension settings to use the AI assistant." },
|
"chatGoogleApiKeyMissing": { "message": "The 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. Can be 'movie' for movies or 'series' for series. (Optional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "The type of content to search for. It 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": "Retrieves and displays the user's library statistics, such as the total number of unique movies, series, and artists." },
|
"aiToolGetUserStatsDesc": { "message": "Gets and displays the user's library statistics, such as the total number of unique movies, series, and artists." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Displays the details page for a specific movie or series by its title and type." },
|
"aiToolShowItemDetailsDesc": { "message": "Displays the details page of 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. Must be 'movie' or 'series'." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "The type of content. It must be 'movie' or 'series'." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the user's current playlist to stream to a configured PHP server." },
|
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the user's current playlist to stream it 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. Must be 'movie' or 'series'." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "The type of content. It 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. Must be 'movie' or 'series'." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "The content type of the list. It 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. Must be 'movie' or 'series'." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "The type of content. It 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 movie or series view, allowing refinement of results by type, genre, year, and sort order." },
|
"aiToolApplyFiltersDesc": { "message": "Applies filters to the current view of movies or series, allowing to refine the results by type, genre, year, and sort order." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "The type of content to apply filters to. Must be 'movie' or 'series'." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "The type of content to apply the filters to. It 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 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)." },
|
"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)." },
|
||||||
"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 desired to be played." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "The exact name of the artist whose songs are 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 configured tokens 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 tokens configured 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 app to scan content from new Plex servers." },
|
"aiToolAddPlexTokenDesc": { "message": "Adds a new X-Plex token to the extension's configuration, allowing the application to scan content from new Plex servers." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "The X-Plex token string to add." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "The X-Plex token string to be added." },
|
||||||
"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." },
|
"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." },
|
||||||
"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)." },
|
"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)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Removes all movies and series the user has marked as favorites." },
|
"aiToolClearAllFavoritesDesc": { "message": "Removes all movies and series that 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": "Could not find '$query$' in your library.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "'$query$' not found in your library.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigated to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navigated to the $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Error navigating to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Error navigating to the $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 playlist.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Added '$title$' to the 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": "Music player is not ready. Make sure your Plex music library has been scanned." },
|
"aiToolPlayMusicNotReady": { "message": "The 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 database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Error deleting the database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Close other app tabs." },
|
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Close other tabs of the application." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "All tokens updated successfully." },
|
"aiToolUpdateAllTokensSuccess": { "message": "All tokens have been 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 Plex token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Error adding the Plex token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. Content is updating.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. The content is being updated.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionError": { "message": "Error changing region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Error changing the region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Viewing history cleared." },
|
"aiToolViewingHistoryCleared": { "message": "Viewing history cleared." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Error clearing viewing history: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Error clearing the viewing history: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"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." },
|
"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." },
|
||||||
"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 titles on your local servers..." },
|
"aiToolM3UCheckingTitles": { "message": "Checking the 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 $2 titles on your servers and started the M3U playlist download.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
"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" } } },
|
||||||
"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..." },
|
||||||
@ -423,7 +427,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 for \"$title$\" completed.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCESS] Retry of \"$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" } } },
|
||||||
@ -432,10 +436,14 @@
|
|||||||
"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": "Token already exists." },
|
"tokenAlreadyExists": { "message": "The token already exists." },
|
||||||
"tokenAddedSuccessfully": { "message": "Token added successfully." },
|
"tokenAddedSuccessfully": { "message": "Token added successfully." },
|
||||||
"noStreamsFoundForSelection": { "message": "No streams found for selection." },
|
"noStreamsFoundForSelection": { "message": "No streams found for the selection." },
|
||||||
"autoplayBlocked": { "message": "Autoplay blocked." },
|
"autoplayBlocked": { "message": "Autoplay blocked." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"page": { "message": "Page" },
|
||||||
"page": { "message": "Page" }
|
"all": { "message": "All" },
|
||||||
|
"userScore": { "message": "User Score" },
|
||||||
|
"duration": { "message": "Duration" },
|
||||||
|
"min": { "message": "Min" },
|
||||||
|
"max": { "message": "Max" }
|
||||||
}
|
}
|
@ -256,6 +256,8 @@
|
|||||||
"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"}}},
|
||||||
@ -289,8 +291,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" } } },
|
||||||
@ -339,6 +341,8 @@
|
|||||||
"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." },
|
||||||
@ -373,27 +377,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." },
|
||||||
@ -409,7 +413,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, 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, o filtrar por resolución o contenedor, 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." },
|
||||||
@ -436,6 +440,11 @@
|
|||||||
"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": "Bienvenido a CinePlex" },
|
"welcomeToCinePlex": { "message": "" },
|
||||||
"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 pour trouver du contenu et l'affiche dans l'interface" },
|
"appDescription": { "message": "Scanne les serveurs Plex à la recherche de contenu et l'affiche dans l'interface" },
|
||||||
"appTagline": { "message": "Films, Séries et Musique" },
|
"appTagline": { "message": "Films, Séries et Musique" },
|
||||||
"appLocaleCode": { "message": "fr" },
|
"appLocaleCode": { "message": "fr-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 stream" },
|
"addStream": { "message": "Ajouter un flux" },
|
||||||
"moreInfo": { "message": "Plus d'informations" },
|
"moreInfo": { "message": "Plus d'infos" },
|
||||||
"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électionner un serveur" },
|
"selectServer": { "message": "Sélectionnez 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 assurez-vous d'avoir une bibliothèque de photos dans Plex." },
|
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou vous assurer que vous disposez d'une photothèque 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 du jeton" },
|
"statsTokenServers": { "message": "Serveurs de jetons" },
|
||||||
"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 de scan Plex" },
|
"consoleTitle": { "message": "Console d'analyse 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": "Réglages et Configuration" },
|
"settingsTitleFull": { "message": "Paramètres 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": "Configuration API et serveur" },
|
"settingsApiServer": { "message": "Paramètres 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 laissée vide" },
|
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si ce champ est laissé vide" },
|
||||||
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (facultatif)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
"settingsGoogleApiPlaceholder": { "message": "Requis 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 ajouter des streams" },
|
"settingsPhpUrlLabel": { "message": "URL du serveur pour l'ajout de flux" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Mode clair" },
|
"settingsLightTheme": { "message": "Mode clair" },
|
||||||
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
"settingsShowHero": { "message": "Afficher la section d'accueil 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Scan de contenu" },
|
"settingsScanContent": { "message": "Analyse du contenu" },
|
||||||
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
"settingsScanDesc": { "message": "Sélectionnez les éléments à analyser et appuyez 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": "Lancer le scan" },
|
"settingsStartScan": { "message": "Démarrer l'analyse" },
|
||||||
"settingsPlexTokens": { "message": "Jetons Plex" },
|
"settingsPlexTokens": { "message": "Jetons Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
"settingsPlexTokensDesc": { "message": "Modifiez la liste des jetons Plex (format JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
"settingsSaveTokens": { "message": "Enregistrer les jetons" },
|
||||||
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Paramètres Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour analyser 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 scanner" },
|
"jellyfinConnectAndScan": { "message": "Connecter et analyser" },
|
||||||
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour serveur" },
|
||||||
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
"settingsPhpSavePathLabel": { "message": "Chemin d'enregistrement 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, séries et musiques de la base de données locale, mais n'affectera pas vos favoris ni vos paramètres." },
|
"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." },
|
||||||
"settingsClose": { "message": "Fermer" },
|
"settingsClose": { "message": "Fermer" },
|
||||||
"settingsSave": { "message": "Enregistrer les paramètres" },
|
"settingsSave": { "message": "Enregistrer les paramètres" },
|
||||||
"musicSidenavTitle": { "message": "Musique de Plex" },
|
"musicSidenavTitle": { "message": "Musique 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": "Rien ne joue" },
|
"musicNothingPlaying": { "message": "Aucune lecture en cours" },
|
||||||
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
||||||
"musicToStart": { "message": "pour commencer à jouer" },
|
"musicToStart": { "message": "pour démarrer la lecture" },
|
||||||
"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": "Lecture aléatoire" },
|
"miniplayerShuffle": { "message": "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": "Accentuation des basses" },
|
"eqPresetBassBoost": { "message": "Amplification des basses" },
|
||||||
"eqPreampLabel": { "message": "Préamplificateur" },
|
"eqPreampLabel": { "message": "Préampli" },
|
||||||
"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 fonctions essentielles." },
|
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctionnalités 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 l'édition." },
|
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour modification." },
|
||||||
"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 la sauvegarde." },
|
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour l'enregistrement." },
|
||||||
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Format JSON non valide. Il 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 pas de données pour les sections de la base de données actuelle." },
|
"noDataToImport": { "message": "Le fichier ne contient aucune donnée pour les sections actuelles de la base de données." },
|
||||||
"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 ne peut pas être annulée." },
|
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action est irréversible." },
|
||||||
"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 devons mieux vous connaître pour vous donner des recommandations !" },
|
"noRecommendations": { "message": "Nous avons besoin de mieux vous connaître pour vous faire 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 stream(s) : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Erreur lors de l'ajout de flux : $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 streams pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Recherche de flux pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Envoi de $count$ flux au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
"streamAddedSuccess": { "message": "Flux ajouté(s) avec succès." },
|
||||||
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Génération de 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 M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Erreur lors de la génération de 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 changée. L'application va maintenant être rechargée." },
|
"languageChangeReload": { "message": "Langue modifiée. L'application va maintenant se recharger." },
|
||||||
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
||||||
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
||||||
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
"plexScanInProgress": { "message": "L'analyse Plex est déjà en cours." },
|
||||||
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
"plexScanStarting": { "message": "Démarrage de l'analyse Plex..." },
|
||||||
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
||||||
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Effacement des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
"initialScanPhaseComplete": { "message": "Phase d'analyse initiale terminée." },
|
||||||
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
"retryPhaseFinished": { "message": "Phase de nouvelle tentative terminée." },
|
||||||
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
"plexScanFinished": { "message": "Analyse terminée. Mise à jour du contenu..." },
|
||||||
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
"scanCancelled": { "message": "Analyse annulée par l'utilisateur." },
|
||||||
"scanCancelledInfo": { "message": "Scan annulé." },
|
"scanCancelledInfo": { "message": "Analyse annulée." },
|
||||||
"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,29 +243,31 @@
|
|||||||
"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": "Sans catégorie"},
|
"noGenre": {"message": "Non classé"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Synopsis"},
|
||||||
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
"noSynopsis": {"message": "Aucun 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": "Voir la bande-annonce"},
|
"watchTrailer": {"message": "Regarder la bande-annonce"},
|
||||||
"addToFavorites": {"message": "Ajouter aux favoris"},
|
"addToFavorites": {"message": "Ajouter aux favoris"},
|
||||||
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
"removeFromFavorites": {"message": "Retirer 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"},
|
||||||
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
"filmography": {"message": "Filmographie"},
|
||||||
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
"availableOn": {"message": "Disponible sur"},
|
||||||
|
"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 invalides."},
|
"invalidStreamInfo": {"message": "Informations non valides."},
|
||||||
"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": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "\"$query$\" introuvable 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" } } },
|
||||||
@ -273,35 +275,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 non réussie." },
|
"errorServerResponse": { "message": "Réponse du serveur infructueuse." },
|
||||||
"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": "Le scan Jellyfin est déjà en cours." },
|
"jellyfinScanInProgress": { "message": "L'analyse Jellyfin est déjà en cours." },
|
||||||
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
"jellyfinScanning": { "message": "Analyse de Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et le nom d'utilisateur de Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Connexion à Jellyfin à : $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$' scanné, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName' analysée, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Erreur lors du scan de la bibliothèque '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Erreur lors de l'analyse de la bibliothèque '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Analyse Jellyfin terminée. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
"noJellyfinCredentials": { "message": "Informations d'identification Jellyfin non configurées." },
|
||||||
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnJellyfin": { "message": "\"$query$\" introuvable sur Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnAnyServer": { "message": "\"$query$\" introuvable 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 scanné votre serveur Jellyfin dans les paramètres." },
|
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir analysé votre serveur Jellyfin dans les paramètres." },
|
||||||
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
||||||
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
"activitySelectServer": { "message": "Sélectionnez 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" },
|
||||||
@ -316,7 +318,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électionner un serveur..." },
|
"selectAServer": { "message": "Sélectionnez 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" },
|
||||||
@ -328,72 +330,74 @@
|
|||||||
"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": "Écrivez votre message..." },
|
"chatPlaceholder": { "message": "Saisissez votre message..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"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." },
|
"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." },
|
||||||
"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." },
|
"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." },
|
||||||
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse invalide. Veuillez réessayer." },
|
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse non valide. 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 séries par titre." },
|
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou des 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)." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navigue l'utilisateur vers une page spécifique de l'interface de l'application." },
|
"aiToolSearchLibraryResolutionParamDesc": { "message": "La résolution vidéo à rechercher (par exemple, '4k', '1080p'). (Facultatif)." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
"aiToolSearchLibraryContainerParamDesc": { "message": "Le format de conteneur vidéo à rechercher (par exemple, 'mkv', 'mp4'). (Facultatif)." },
|
||||||
"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." },
|
"aiToolNavigateToPageDesc": { "message": "Dirige l'utilisateur vers une page spécifique de l'interface de l'application." },
|
||||||
|
"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 la diffuser à un serveur PHP configuré." },
|
"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é." },
|
||||||
"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 playlist M3U avec les streams 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 liste de lecture M3U avec les flux 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'). S'il n'est pas fourni, un nom par défaut sera utilisé." },
|
"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é." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou supprime 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 classement." },
|
"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." },
|
||||||
"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 des chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Ouvre le lecteur de musique et commence à jouer les chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons doivent être jouées." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle avec l'assistant IA." },
|
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation en cours avec l'assistant IA." },
|
||||||
"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." },
|
"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." },
|
||||||
"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." },
|
"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." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application d'analyser le contenu de nouveaux serveurs Plex." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du jeton X-Plex à ajouter." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne de jeton X-Plex à ajouter." },
|
||||||
"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." },
|
"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." },
|
||||||
"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)." },
|
"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)." },
|
||||||
"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": "Nettoie la vue des recommandations et supprime les recommandations mises en cache." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Efface la vue des recommandations et supprime les recommandations mises en cache." },
|
||||||
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "'$query' introuvable dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navigation 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'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Élément '$title' introuvable.", "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": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "'$title' ajouté à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteAdded": { "message": "'$title' ajouté aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "'$title' supprimé des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre' introuvable.", "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é scannée." },
|
"aiToolPlayMusicNotReady": { "message": "Le lecteur de musique n'est pas prêt. Assurez-vous que votre bibliothèque musicale Plex a été analysée." },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name' introuvable.", "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 musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Lecture de la 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." },
|
||||||
@ -405,37 +409,41 @@
|
|||||||
"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 changée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Région modifié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 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." },
|
"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." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la liste de lecture." },
|
||||||
"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 serveurs locaux." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveveurs locaux." },
|
||||||
"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" } } },
|
"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" } } },
|
||||||
"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émarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Début du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" téléchargé.", "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 M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Génération de 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": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Nouvelle tentative de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCÈS] Nouvelle tentative pour \"$title$\" terminée.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[ERREUR FINALE] Échec de la nouvelle tentative pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Démarrage de la phase de nouvelle tentative 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 le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Erreur pendant l'analyse : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
"stoppingPlexScan": { "message": "Arrêt de l'analyse Plex..." },
|
||||||
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
"invalidTokenProvided": { "message": "Jeton non valide 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 stream trouvé pour la sélection." },
|
"noStreamsFoundForSelection": { "message": "Aucun flux trouvé pour la sélection." },
|
||||||
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"page": { "message": "Page" },
|
||||||
"page": { "message": "Page" }
|
"all": { "message": "Tous" },
|
||||||
|
"userScore": { "message": "Score des utilisateurs" },
|
||||||
|
"duration": { "message": "Durée" },
|
||||||
|
"min": { "message": "Min" },
|
||||||
|
"max": { "message": "Max" }
|
||||||
}
|
}
|
@ -1,441 +1,449 @@
|
|||||||
{
|
{
|
||||||
"appName": { "message": "CinePlex" },
|
"appName": { "message": "CinePlex" },
|
||||||
"appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
|
"appDescription": { "message": "Scansiona i server Plex alla ricerca di contenuti e li visualizza nell'interfaccia" },
|
||||||
"appTagline": { "message": "Films, Séries et Musique" },
|
"appTagline": { "message": "Film, Serie e Musica" },
|
||||||
"appLocaleCode": { "message": "fr" },
|
"appLocaleCode": { "message": "it-IT" },
|
||||||
"toggleNavigation": { "message": "Basculer la navigation" },
|
"toggleNavigation": { "message": "Attiva/disattiva la navigazione" },
|
||||||
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
"searchPlaceholder": { "message": "Cerca film o serie..." },
|
||||||
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
"openMusicPlayer": { "message": "Apri il lettore musicale" },
|
||||||
"settings": { "message": "Paramètres" },
|
"settings": { "message": "Impostazioni" },
|
||||||
"navMovies": { "message": "Films" },
|
"navMovies": { "message": "Film" },
|
||||||
"navSeries": { "message": "Séries" },
|
"navSeries": { "message": "Serie" },
|
||||||
"navProviders": { "message": "Fournisseurs" },
|
"navProviders": { "message": "Provider" },
|
||||||
"navPhotos": { "message": "Photos" },
|
"navPhotos": { "message": "Foto" },
|
||||||
"navStats": { "message": "Statistiques" },
|
"navStats": { "message": "Statistiche" },
|
||||||
"navFavorites": { "message": "Favoris" },
|
"navFavorites": { "message": "Preferiti" },
|
||||||
"navHistory": { "message": "Historique" },
|
"navHistory": { "message": "Cronologia" },
|
||||||
"navRecommendations": { "message": "Recommandations" },
|
"navRecommendations": { "message": "Raccomandazioni" },
|
||||||
"navMusic": { "message": "Musique" },
|
"navMusic": { "message": "Musica" },
|
||||||
"navM3uGenerator": { "message": "Générateur M3U" },
|
"navM3uGenerator": { "message": "Generatore M3U" },
|
||||||
"heroWelcome": { "message": "" },
|
"heroWelcome": { "message": "" },
|
||||||
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
"heroSubtitle": { "message": "Esplora migliaia di film e serie." },
|
||||||
"addStream": { "message": "Ajouter un stream" },
|
"addStream": { "message": "Aggiungi streaming" },
|
||||||
"moreInfo": { "message": "Plus d'informations" },
|
"moreInfo": { "message": "Più informazioni" },
|
||||||
"popularMovies": { "message": "Films populaires" },
|
"popularMovies": { "message": "Film popolari" },
|
||||||
"allGenres": { "message": "Tous les genres" },
|
"allGenres": { "message": "Tutti i generi" },
|
||||||
"allYears": { "message": "Toutes les années" },
|
"allYears": { "message": "Tutti gli anni" },
|
||||||
"sortPopular": { "message": "Les plus populaires" },
|
"sortPopular": { "message": "I più popolari" },
|
||||||
"sortTopRated": { "message": "Les mieux notés" },
|
"sortTopRated": { "message": "I più votati" },
|
||||||
"sortRecent": { "message": "Les plus récents" },
|
"sortRecent": { "message": "I più recenti" },
|
||||||
"loadMore": { "message": "Charger plus" },
|
"loadMore": { "message": "Carica altro" },
|
||||||
"photosBreadcrumbHome": { "message": "Albums" },
|
"photosBreadcrumbHome": { "message": "Album" },
|
||||||
"selectServer": { "message": "Sélectionner un serveur" },
|
"selectServer": { "message": "Seleziona un server" },
|
||||||
"loading": { "message": "Chargement..." },
|
"loading": { "message": "Caricamento..." },
|
||||||
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
"loadingLibraries": { "message": "Caricamento delle librerie..." },
|
||||||
"photosEmptyState": { "message": "Aucun album ou photo trouvé." },
|
"photosEmptyState": { "message": "Nessun album o foto trovati." },
|
||||||
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou assurez-vous d'avoir une bibliothèque de photos dans Plex." },
|
"photosEmptyStateSub": { "message": "Seleziona un server o assicurati di avere una libreria di foto in Plex." },
|
||||||
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
"statsTitle": { "message": "Statistiche della libreria" },
|
||||||
"statsAllTokens": { "message": "Tous les jetons" },
|
"statsAllTokens": { "message": "Tutti i token" },
|
||||||
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
"statsAnalyzing": { "message": "Analisi della tua libreria..." },
|
||||||
"statsActiveTokens": { "message": "Jetons actifs" },
|
"statsActiveTokens": { "message": "Token attivi" },
|
||||||
"statsServersFound": { "message": "Serveurs trouvés" },
|
"statsServersFound": { "message": "Server trovati" },
|
||||||
"statsUniqueMovies": { "message": "Films uniques" },
|
"statsUniqueMovies": { "message": "Film unici" },
|
||||||
"statsUniqueSeries": { "message": "Séries uniques" },
|
"statsUniqueSeries": { "message": "Serie uniche" },
|
||||||
"statsUniqueArtists": { "message": "Artistes uniques" },
|
"statsUniqueArtists": { "message": "Artisti unici" },
|
||||||
"statsTokenServers": { "message": "Serveurs du jeton" },
|
"statsTokenServers": { "message": "Server token" },
|
||||||
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
"statsChartMoviesByGenre": { "message": "Contenuti per genere (Film)" },
|
||||||
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
"statsChartSeriesByGenre": { "message": "Contenuti per genere (Serie)" },
|
||||||
"statsChartByDecade": { "message": "Contenu par décennie" },
|
"statsChartByDecade": { "message": "Contenuti per decennio" },
|
||||||
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
"recommendationsTitle": { "message": "Raccomandazioni per te" },
|
||||||
"historyTitle": { "message": "Historique de visionnage" },
|
"historyTitle": { "message": "Cronologia visualizzazioni" },
|
||||||
"clearHistory": { "message": "Tout effacer" },
|
"clearHistory": { "message": "Cancella tutto" },
|
||||||
"consoleTitle": { "message": "Console de scan Plex" },
|
"consoleTitle": { "message": "Console di scansione Plex" },
|
||||||
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
"footerCredit": { "message": "Un'interfaccia per il tuo universo Plex." },
|
||||||
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
"closeTrailer": { "message": "Chiudi trailer" },
|
||||||
"close": { "message": "Fermer" },
|
"close": { "message": "Chiudi" },
|
||||||
"photoViewer": { "message": "Visionneuse de photos" },
|
"photoViewer": { "message": "Visualizzatore di foto" },
|
||||||
"previous": { "message": "Précédent" },
|
"previous": { "message": "Precedente" },
|
||||||
"next": { "message": "Suivant" },
|
"next": { "message": "Successivo" },
|
||||||
"notificationTemplateText": { "message": "Notification" },
|
"notificationTemplateText": { "message": "Notifica" },
|
||||||
"settingsTitleFull": { "message": "Réglages et Configuration" },
|
"settingsTitleFull": { "message": "Impostazioni e configurazione" },
|
||||||
"settingsTabGeneral": { "message": "Général" },
|
"settingsTabGeneral": { "message": "Generale" },
|
||||||
"settingsTabPlex": { "message": "Plex" },
|
"settingsTabPlex": { "message": "Plex" },
|
||||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||||
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
"settingsTabPhpGen": { "message": "Generatore PHP" },
|
||||||
"settingsTabData": { "message": "Données" },
|
"settingsTabData": { "message": "Dati" },
|
||||||
"settingsApiServer": { "message": "Configuration API et serveur" },
|
"settingsApiServer": { "message": "Impostazioni API e server" },
|
||||||
"settingsTmdbApiLabel": { "message": "Clé API TMDB (Facultatif)" },
|
"settingsTmdbApiLabel": { "message": "Chiave API TMDB (facoltativa)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si laissée vide" },
|
"settingsTmdbApiPlaceholder": { "message": "La chiave predefinita verrà utilizzata se lasciata vuota" },
|
||||||
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
"settingsGoogleApiLabel": { "message": "Chiave API Google Gemini (facoltativa)" },
|
||||||
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
"settingsGoogleApiPlaceholder": { "message": "Necessaria per utilizzare l'assistente AI" },
|
||||||
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
"settingsRegionLabel": { "message": "Regione per la scoperta di contenuti" },
|
||||||
"allRegions": { "message": "Toutes les régions" },
|
"allRegions": { "message": "Tutte le regioni" },
|
||||||
"settingsPhpUrlLabel": { "message": "URL du serveur pour ajouter des streams" },
|
"settingsPhpUrlLabel": { "message": "URL del server per l'aggiunta di streaming" },
|
||||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://tuo-server.com/percorso/dello/script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interfaccia" },
|
||||||
"settingsLightTheme": { "message": "Mode clair" },
|
"settingsLightTheme": { "message": "Modalità chiara" },
|
||||||
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
"settingsShowHero": { "message": "Mostra la sezione di benvenuto 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Scan de contenu" },
|
"settingsScanContent": { "message": "Scansione dei contenuti" },
|
||||||
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
"settingsScanDesc": { "message": "Seleziona cosa scansionare e premi il pulsante." },
|
||||||
"settingsScanMovies": { "message": "Films" },
|
"settingsScanMovies": { "message": "Film" },
|
||||||
"settingsScanShows": { "message": "Séries" },
|
"settingsScanShows": { "message": "Serie" },
|
||||||
"settingsScanArtists": { "message": "Musique" },
|
"settingsScanArtists": { "message": "Musica" },
|
||||||
"settingsScanPhotos": { "message": "Photos" },
|
"settingsScanPhotos": { "message": "Foto" },
|
||||||
"settingsSelectAll": { "message": "Tout sélectionner" },
|
"settingsSelectAll": { "message": "Seleziona tutto" },
|
||||||
"settingsStartScan": { "message": "Lancer le scan" },
|
"settingsStartScan": { "message": "Avvia scansione" },
|
||||||
"settingsPlexTokens": { "message": "Jetons Plex" },
|
"settingsPlexTokens": { "message": "Token Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
"settingsPlexTokensDesc": { "message": "Modifica l'elenco dei token Plex (formato JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
"settingsSaveTokens": { "message": "Salva token" },
|
||||||
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Impostazioni Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
"settingsJellyfinDesc": { "message": "Aggiungi i dettagli del tuo server Jellyfin per scansionarne il contenuto." },
|
||||||
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
"jellyfinUrlLabel": { "message": "URL del server Jellyfin" },
|
||||||
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
"jellyfinUserLabel": { "message": "Nome utente" },
|
||||||
"jellyfinPassLabel": { "message": "Mot de passe" },
|
"jellyfinPassLabel": { "message": "Password" },
|
||||||
"jellyfinConnectAndScan": { "message": "Connecter et scanner" },
|
"jellyfinConnectAndScan": { "message": "Connetti e scansiona" },
|
||||||
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
"settingsPhpGenTitle": { "message": "Generatore di script PHP per server" },
|
||||||
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
"settingsPhpFileOptions": { "message": "Opzioni file" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
"settingsPhpSavePathLabel": { "message": "Percorso di salvataggio sul server" },
|
||||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
"settingsPhpSavePathPlaceholder": { "message": "Es: /var/www/html/liste (vuoto per la stessa cartella)" },
|
||||||
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
"settingsPhpFilenameLabel": { "message": "Nome file" },
|
||||||
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
"settingsPhpFileAction": { "message": "Azione file" },
|
||||||
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
"settingsPhpActionAppend": { "message": "Aggiungi alla fine del file (cumulativo)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
"settingsPhpActionOverwrite": { "message": "Sovrascrivi il file (ricomincia da capo)" },
|
||||||
"settingsPhpSecurity": { "message": "Sécurité (Facultatif)" },
|
"settingsPhpSecurity": { "message": "Sicurezza (facoltativa)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
|
"settingsPhpUseSecretKey": { "message": "Usa chiave segreta (consigliato)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Inserisci una chiave segreta sicura" },
|
||||||
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
"settingsPhpGeneratedCode": { "message": "Codice generato" },
|
||||||
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
"settingsPhpGeneratedPlaceholder": { "message": "Il codice PHP generato apparirà qui." },
|
||||||
"settingsGenerateScript": { "message": "Générer le script" },
|
"settingsGenerateScript": { "message": "Genera script" },
|
||||||
"settingsCopyScript": { "message": "Copier le script" },
|
"settingsCopyScript": { "message": "Copia script" },
|
||||||
"settingsDataManagement": { "message": "Gestion de la base de données locale" },
|
"settingsDataManagement": { "message": "Gestione del database locale" },
|
||||||
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
"settingsImportDb": { "message": "Importa DB da file" },
|
||||||
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
"settingsExportDb": { "message": "Esporta DB su file" },
|
||||||
"settingsClearContent": { "message": "Effacer les données de contenu local" },
|
"settingsClearContent": { "message": "Cancella i dati dei contenuti locali" },
|
||||||
"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." },
|
"settingsClearContentDesc": { "message": "Questa azione eliminerà film, serie e musica dal database locale, ma non influirà sui preferiti o sulle impostazioni." },
|
||||||
"settingsClose": { "message": "Fermer" },
|
"settingsClose": { "message": "Chiudi" },
|
||||||
"settingsSave": { "message": "Enregistrer les paramètres" },
|
"settingsSave": { "message": "Salva impostazioni" },
|
||||||
"musicSidenavTitle": { "message": "Musique de Plex" },
|
"musicSidenavTitle": { "message": "Musica Plex" },
|
||||||
"musicAllServers": { "message": "Tous les serveurs" },
|
"musicAllServers": { "message": "Tutti i server" },
|
||||||
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
"musicSearchArtistPlaceholder": { "message": "Cerca un artista..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Cerca nella discografia..." },
|
||||||
"musicNothingPlaying": { "message": "Rien ne joue" },
|
"musicNothingPlaying": { "message": "Nessuna riproduzione in corso" },
|
||||||
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
"musicSelectSong": { "message": "Seleziona un brano" },
|
||||||
"musicToStart": { "message": "pour commencer à jouer" },
|
"musicToStart": { "message": "per avviare la riproduzione" },
|
||||||
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
"miniplayerDownloadSong": { "message": "Scarica brano" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
"miniplayerDownloadAlbum": { "message": "Scarica album M3U" },
|
||||||
"miniplayerVolume": { "message": "Volume" },
|
"miniplayerVolume": { "message": "Volume" },
|
||||||
"miniplayerShuffle": { "message": "Lecture aléatoire" },
|
"miniplayerShuffle": { "message": "Casuale" },
|
||||||
"miniplayerEqualizer": { "message": "Égaliseur" },
|
"miniplayerEqualizer": { "message": "Equalizzatore" },
|
||||||
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
"miniplayerOpenList": { "message": "Apri elenco" },
|
||||||
"eqTitle": { "message": "Égaliseur graphique" },
|
"eqTitle": { "message": "Equalizzatore grafico" },
|
||||||
"eqPresetsLabel": { "message": "Préréglages" },
|
"eqPresetsLabel": { "message": "Preimpostazioni" },
|
||||||
"eqPresetFlat": { "message": "Plat" },
|
"eqPresetFlat": { "message": "Piatto" },
|
||||||
"eqPresetRock": { "message": "Rock" },
|
"eqPresetRock": { "message": "Rock" },
|
||||||
"eqPresetPop": { "message": "Pop" },
|
"eqPresetPop": { "message": "Pop" },
|
||||||
"eqPresetJazz": { "message": "Jazz" },
|
"eqPresetJazz": { "message": "Jazz" },
|
||||||
"eqPresetClassical": { "message": "Classique" },
|
"eqPresetClassical": { "message": "Classica" },
|
||||||
"eqPresetBassBoost": { "message": "Accentuation des basses" },
|
"eqPresetBassBoost": { "message": "Aumento dei bassi" },
|
||||||
"eqPreampLabel": { "message": "Préamplificateur" },
|
"eqPreampLabel": { "message": "Preamplificatore" },
|
||||||
"infoModalTitle": { "message": "Informations" },
|
"infoModalTitle": { "message": "Informazioni" },
|
||||||
"infoModalFieldTitle": { "message": "Titre :" },
|
"infoModalFieldTitle": { "message": "Titolo:" },
|
||||||
"infoModalFieldArtist": { "message": "Artiste :" },
|
"infoModalFieldArtist": { "message": "Artista:" },
|
||||||
"infoModalFieldAlbum": { "message": "Album:" },
|
"infoModalFieldAlbum": { "message": "Album:" },
|
||||||
"infoModalFieldSong": { "message": "Chanson :" },
|
"infoModalFieldSong": { "message": "Brano:" },
|
||||||
"infoModalFieldYear": { "message": "Année :" },
|
"infoModalFieldYear": { "message": "Anno:" },
|
||||||
"infoModalFieldGenre": { "message": "Genre :" },
|
"infoModalFieldGenre": { "message": "Genere:" },
|
||||||
"lang_en": { "message": "Anglais" },
|
"lang_en": { "message": "Inglese" },
|
||||||
"lang_es": { "message": "Espagnol" },
|
"lang_es": { "message": "Spagnolo" },
|
||||||
"lang_fr": { "message": "Français" },
|
"lang_fr": { "message": "Francese" },
|
||||||
"lang_de": { "message": "Allemand" },
|
"lang_de": { "message": "Tedesco" },
|
||||||
"lang_it": { "message": "Italien" },
|
"lang_it": { "message": "Italiano" },
|
||||||
"lang_pt": { "message": "Portugais" },
|
"lang_pt": { "message": "Portoghese" },
|
||||||
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctions essentielles." },
|
"essentialFeaturesNotSupported": { "message": "Il tuo browser non supporta le funzionalità essenziali." },
|
||||||
"dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
|
"dbAccessError": { "message": "Errore di accesso al database locale." },
|
||||||
"dbUpdateNeeded": { "message": "La base de données doit être mise à jour, veuillez recharger la page." },
|
"dbUpdateNeeded": { "message": "Il database deve essere aggiornato, ricarica la pagina." },
|
||||||
"dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
|
"dbBlocked": { "message": "Chiudi le altre schede di questa applicazione per continuare." },
|
||||||
"deletingContentData": { "message": "Suppression des données de contenu local..." },
|
"deletingContentData": { "message": "Eliminazione dei dati dei contenuti locali..." },
|
||||||
"noContentDataToDelete": { "message": "Aucune donnée de contenu à supprimer." },
|
"noContentDataToDelete": { "message": "Nessun dato di contenuto da eliminare." },
|
||||||
"contentDataDeleted": { "message": "Données de contenu supprimées d'IndexedDB." },
|
"contentDataDeleted": { "message": "Dati dei contenuti eliminati da IndexedDB." },
|
||||||
"errorDeletingData": { "message": "Erreur lors de la suppression des données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Errore durante l'eliminazione dei dati: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
"aceEditorNotAvailable": { "message": "Editor di testo non disponibile." },
|
||||||
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour l'édition." },
|
"errorLoadingTokens": { "message": "Errore durante il caricamento dei token per la modifica." },
|
||||||
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingTokensMessage": { "message": "Errore durante il caricamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
|
"aceEditorNotAvailableToSave": { "message": "Editor non disponibile per il salvataggio." },
|
||||||
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Formato JSON non valido. Deve essere { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
"tokensSaved": { "message": "Token salvati correttamente." },
|
||||||
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Errore durante il salvataggio dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
"dbNotAvailable": { "message": "IndexedDB non è disponibile." },
|
||||||
"dbExported": { "message": "Base de données exportée avec succès." },
|
"dbExported": { "message": "Database esportato correttamente." },
|
||||||
"errorExportingDb": { "message": "Erreur lors de l'exportation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Errore durante l'esportazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "Le fichier ne contient pas d'objet JSON valide." },
|
"invalidJsonFile": { "message": "Il file non contiene un oggetto JSON valido." },
|
||||||
"noDataToImport": { "message": "Le fichier ne contient pas de données pour les sections de la base de données actuelle." },
|
"noDataToImport": { "message": "Il file non contiene dati per le sezioni correnti del database." },
|
||||||
"dbImported": { "message": "Base de données importée avec succès." },
|
"dbImported": { "message": "Database importato correttamente." },
|
||||||
"errorImportingDb": { "message": "Erreur lors de l'importation de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Errore durante l'importazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "Mise à jour de la vue avec les nouvelles données..." },
|
"updatingView": { "message": "Aggiornamento della vista con i nuovi dati..." },
|
||||||
"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": "Sei sicuro di voler eliminare i dati dei contenuti locali (film, serie, musica, ecc.)? I preferiti e le impostazioni NON verranno eliminati." },
|
||||||
"trailerNotFound": { "message": "Aucune bande-annonce trouvée pour ce titre." },
|
"trailerNotFound": { "message": "Nessun trailer trovato per questo titolo." },
|
||||||
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action ne peut pas être annulée." },
|
"confirmClearHistory": { "message": "Sei sicuro di voler cancellare tutta la cronologia delle visualizzazioni? Questa azione non può essere annullata." },
|
||||||
"historyCleared": { "message": "Historique de visionnage effacé." },
|
"historyCleared": { "message": "Cronologia visualizzazioni cancellata." },
|
||||||
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
"historyItemDeleted": { "message": "Elemento eliminato dalla cronologia." },
|
||||||
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
"errorGeneratingScript": { "message": "Genera prima uno script per poterlo copiare." },
|
||||||
"scriptCopied": { "message": "Script PHP copié dans le presse-papiers." },
|
"scriptCopied": { "message": "Script PHP copiato negli appunti." },
|
||||||
"errorCopyingScript": { "message": "Erreur lors de la copie du script." },
|
"errorCopyingScript": { "message": "Errore durante la copia dello script." },
|
||||||
"scriptGenerated": { "message": "Script PHP généré." },
|
"scriptGenerated": { "message": "Script PHP generato." },
|
||||||
"errorLoadingAlbum": { "message": "Erreur lors du chargement de l'album : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Errore durante il caricamento dell'album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"noPhotoServerSelected": { "message": "Erreur : Aucun serveur photo n'a été sélectionné." },
|
"noPhotoServerSelected": { "message": "Errore: non è stato selezionato alcun server di foto." },
|
||||||
"loadingGenres": { "message": "Chargement des genres..." },
|
"loadingGenres": { "message": "Caricamento dei generi..." },
|
||||||
"errorLoadingGenres": { "message": "Erreur de chargement" },
|
"errorLoadingGenres": { "message": "Errore durante il caricamento" },
|
||||||
"noContentFound": { "message": "Aucun résultat trouvé." },
|
"noContentFound": { "message": "Nessun risultato trovato." },
|
||||||
"couldNotLoadContent": { "message": "Impossible de charger le contenu." },
|
"couldNotLoadContent": { "message": "Impossibile caricare il contenuto." },
|
||||||
"noFavorites": { "message": "Vous n'avez pas encore de favoris." },
|
"noFavorites": { "message": "Non hai ancora preferiti." },
|
||||||
"errorLoadingFavorites": { "message": "Erreur lors du chargement des favoris." },
|
"errorLoadingFavorites": { "message": "Errore durante il caricamento dei preferiti." },
|
||||||
"historyEmpty": { "message": "Votre historique est vide." },
|
"historyEmpty": { "message": "La tua cronologia è vuota." },
|
||||||
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
"historyEmptySub": { "message": "Esplora e guarda i contenuti perché appaiano qui." },
|
||||||
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
"errorGeneratingRecommendations": { "message": "Errore durante la generazione delle raccomandazioni." },
|
||||||
"noRecommendations": { "message": "Nous devons mieux vous connaître pour vous donner des recommandations !" },
|
"noRecommendations": { "message": "Dobbiamo conoscerti meglio per darti consigli!" },
|
||||||
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
"errorGeneratingStats": { "message": "Errore durante la generazione delle statistiche." },
|
||||||
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
"noServersForToken": { "message": "Nessun server associato trovato per questo token." },
|
||||||
"searchingActorContent": { "message": "Recherche de contenu de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Ricerca di contenuti di $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorLoadingActorContent": { "message": "Impossible de charger le contenu pour $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
"errorLoadingActorContent": { "message": "Impossibile caricare i contenuti per $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||||
"errorAddingStream": { "message": "Erreur lors de l'ajout de stream(s) : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorAddingStream": { "message": "Errore durante l'aggiunta di streaming: $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 del server PHP non è configurato. Configuralo nelle Impostazioni." },
|
||||||
"searchingStreams": { "message": "Recherche de streams pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Ricerca di streaming per \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Invio di $count$ streaming al server...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
"streamAddedSuccess": { "message": "Streaming aggiunto/i con successo." },
|
||||||
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Generazione di M3U per \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorGeneratingM3U": { "message": "Erreur lors de la génération M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorGeneratingM3U": { "message": "Errore durante la generazione di M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"settingsSavedSuccess": { "message": "Paramètres enregistrés avec succès." },
|
"settingsSavedSuccess": { "message": "Impostazioni salvate correttamente." },
|
||||||
"errorSavingSettings": { "message": "Erreur lors de l'enregistrement des paramètres dans la base de données." },
|
"errorSavingSettings": { "message": "Errore durante il salvataggio delle impostazioni nel database." },
|
||||||
"languageChangeReload": { "message": "Langue changée. L'application va maintenant être rechargée." },
|
"languageChangeReload": { "message": "Lingua modificata. L'applicazione verrà ora ricaricata." },
|
||||||
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
"addedToFavorites": { "message": "Aggiunto ai preferiti." },
|
||||||
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
"removedFromFavorites": { "message": "Rimosso dai preferiti." },
|
||||||
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
"plexScanInProgress": { "message": "La scansione di Plex è già in corso." },
|
||||||
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
"plexScanStarting": { "message": "Avvio della scansione di Plex..." },
|
||||||
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
"noPlexTokens": { "message": "Nessun token Plex configurato." },
|
||||||
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Cancellazione delle sezioni: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
"initialScanPhaseComplete": { "message": "Fase di scansione iniziale completata." },
|
||||||
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
"retryPhaseFinished": { "message": "Fase di tentativi ripetuti terminata." },
|
||||||
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
"plexScanFinished": { "message": "Scansione terminata. Aggiornamento dei contenuti..." },
|
||||||
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
"scanCancelled": { "message": "Scansione annullata dall'utente." },
|
||||||
"scanCancelledInfo": { "message": "Scan annulé." },
|
"scanCancelledInfo": { "message": "Scansione annullata." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
"errorInitializingMusicPlayer": { "message": "Errore durante l'inizializzazione del lettore musicale." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
"criticalErrorLoadingMusic": { "message": "Errore critico durante il caricamento dei dati musicali." },
|
||||||
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
"errorLoadingArtists": { "message": "Errore durante il caricamento degli artisti." },
|
||||||
"dbUnavailableError": { "message": "Erreur : Base de données non disponible." },
|
"dbUnavailableError": { "message": "Errore: database non disponibile." },
|
||||||
"updatingMusicData": { "message": "Mise à jour des données musicales..." },
|
"updatingMusicData": { "message": "Aggiornamento dei dati musicali..." },
|
||||||
"musicDataUpdated": { "message": "Données musicales mises à jour." },
|
"musicDataUpdated": { "message": "Dati musicali aggiornati." },
|
||||||
"errorFetchingArtistSongs": { "message": "Erreur lors de la récupération des chansons de l'artiste." },
|
"errorFetchingArtistSongs": { "message": "Errore durante il recupero dei brani dell'artista." },
|
||||||
"errorLoadingSongs": { "message": "Erreur lors du chargement des chansons." },
|
"errorLoadingSongs": { "message": "Errore durante il caricamento dei brani." },
|
||||||
"noArtistsFound": { "message": "Aucun artiste trouvé." },
|
"noArtistsFound": { "message": "Nessun artista trovato." },
|
||||||
"shuffleOn": { "message": "Mode aléatoire activé." },
|
"shuffleOn": { "message": "Modalità casuale attivata." },
|
||||||
"shuffleOff": { "message": "Mode aléatoire désactivé." },
|
"shuffleOff": { "message": "Modalità casuale disattivata." },
|
||||||
"playbackError": { "message": "Erreur de lecture" },
|
"playbackError": { "message": "Errore di riproduzione" },
|
||||||
"errorLabel": { "message": "Erreur" },
|
"errorLabel": { "message": "Errore" },
|
||||||
"reloadingPage": { "message": "Rechargement de la page..." },
|
"reloadingPage": { "message": "Ricaricamento della pagina..." },
|
||||||
"viewed": { "message": "Vu" },
|
"viewed": { "message": "Visto" },
|
||||||
"local": { "message": "Local" },
|
"local": { "message": "Locale" },
|
||||||
"topRatedSort": {"message": "Les mieux notés"},
|
"topRatedSort": {"message": "I più votati"},
|
||||||
"recentSort": {"message": "Récents"},
|
"recentSort": {"message": "Recenti"},
|
||||||
"popularSort": {"message": "Populaires"},
|
"popularSort": {"message": "Popolari"},
|
||||||
"moviesSectionTitle": {"message": "Films"},
|
"moviesSectionTitle": {"message": "Film"},
|
||||||
"seriesSectionTitle": {"message": "Séries"},
|
"seriesSectionTitle": {"message": "Serie"},
|
||||||
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
"searchResultsFor": {"message": "Risultati per \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
"contentFrom": {"message": "Contenuti di $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||||
"explore": {"message": "Explorer"},
|
"explore": {"message": "Esplora"},
|
||||||
"noGenre": {"message": "Sans catégorie"},
|
"noGenre": {"message": "Senza categoria"},
|
||||||
"synopsis": {"message": "Synopsis"},
|
"synopsis": {"message": "Sinossi"},
|
||||||
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
"noSynopsis": {"message": "Nessuna sinossi disponibile."},
|
||||||
"director": {"message": "Réalisateur :"},
|
"director": {"message": "Regista:"},
|
||||||
"writer": {"message": "Scénariste :"},
|
"writer": {"message": "Sceneggiatore:"},
|
||||||
"viewOnImdb": {"message": "Voir sur IMDb"},
|
"viewOnImdb": {"message": "Vedi su IMDb"},
|
||||||
"watchTrailer": {"message": "Voir la bande-annonce"},
|
"watchTrailer": {"message": "Guarda il trailer"},
|
||||||
"addToFavorites": {"message": "Ajouter aux favoris"},
|
"addToFavorites": {"message": "Aggiungi ai preferiti"},
|
||||||
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
"removeFromFavorites": {"message": "Rimuovi dai preferiti"},
|
||||||
"notAvailable": {"message": "Non disponible"},
|
"notAvailable": {"message": "Non disponibile"},
|
||||||
"mainCast": {"message": "Distribution principale"},
|
"mainCast": {"message": "Cast principale"},
|
||||||
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
"seasonsAndEpisodes": {"message": "Stagioni ed episodi"},
|
||||||
"similarContent": {"message": "Contenu similaire"},
|
"similarContent": {"message": "Contenuti simili"},
|
||||||
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
"filmography": {"message": "Filmografia"},
|
||||||
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
"availableOn": {"message": "Disponibile su"},
|
||||||
|
"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": "Aucune bande-annonce trouvée pour ce titre."},
|
"noTrailerFound": {"message": "Nessun trailer trovato per questo titolo."},
|
||||||
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
"fatalInitError": {"message": "Errore fatale di inizializzazione"},
|
||||||
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
"fatalInitErrorSub": {"message": "Impossibile caricare l'applicazione."},
|
||||||
"invalidStreamInfo": {"message": "Informations invalides."},
|
"invalidStreamInfo": {"message": "Informazioni non valide."},
|
||||||
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
"dbUnavailableForStreams": {"message": "Database locale non disponibile."},
|
||||||
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
"noPlexServersForStreams": {"message": "Nessun server Plex."},
|
||||||
"notFoundOnServers": {"message": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "\"$query$\" non trovato sui server Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||||
"relativeTime_justNow": { "message": "À l'instant" },
|
"relativeTime_justNow": { "message": "Poco fa" },
|
||||||
"relativeTime_minutesAgo": { "message": "Il y a $count$ minutes", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_minutesAgo": { "message": "$count$ minuti fa", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_hoursAgo": { "message": "Il y a $count$ heures", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_hoursAgo": { "message": "$count$ ore fa", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"relativeTime_yesterday": { "message": "Hier" },
|
"relativeTime_yesterday": { "message": "Ieri" },
|
||||||
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
"relativeTime_daysAgo": { "message": "$count$ giorni fa", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
"errorLoadingDetails": { "message": "Errore durante il caricamento dei dettagli" },
|
||||||
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
"errorLoadingLocalContent": { "message": "Errore durante il caricamento del contenuto locale." },
|
||||||
"errorServerResponse": { "message": "Réponse du serveur non réussie." },
|
"errorServerResponse": { "message": "Risposta del server non riuscita." },
|
||||||
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Errore $status$ dell'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
"errorParsingPlexXml": { "message": "Errore durante l'analisi dell'XML di Plex." },
|
||||||
"untitled": { "message": "Sans titre" },
|
"untitled": { "message": "Senza titolo" },
|
||||||
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ elementi", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Aucun serveur photo" },
|
"noPhotoServers": { "message": "Nessun server di foto" },
|
||||||
"jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
|
"jellyfinScanInProgress": { "message": "La scansione di Jellyfin è già in corso." },
|
||||||
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
"jellyfinScanning": { "message": "Scansione di Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Completa l'URL e il nome utente di Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Connessione a Jellyfin in corso: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "Autenticazione Jellyfin non riuscita: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
"jellyfinAuthSuccess": { "message": "Autenticazione Jellyfin riuscita." },
|
||||||
"jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
|
"jellyfinFetchingLibraries": { "message": "Recupero delle librerie..." },
|
||||||
"jellyfinFetchFailed": { "message": "Erreur lors de la récupération des bibliothèques : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Errore durante il recupero delle librerie: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Aucune bibliothèque de films ou de séries trouvée dans Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "Nessuna libreria di film o serie trovata in Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": {"count": {"content": "$1"}}},
|
"jellyfinLibrariesFound": { "message": "$count$ libreria/e multimediale/i trovata/e.", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName$' scanné, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Successo] '$libraryName' scansionata, $count$ titoli aggiunti.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Erreur lors du scan de la bibliothèque '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Errore durante la scansione della libreria '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Scansione Jellyfin completata. Aggiunti $movies$ film e $series$ serie.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
"noJellyfinCredentials": { "message": "Credenziali Jellyfin non configurate." },
|
||||||
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnJellyfin": { "message": "\"$query$\" non trovato su Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnAnyServer": { "message": "\"$query$\" non trovato su nessun server.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"localOnPlex": { "message": "Sur Plex" },
|
"localOnPlex": { "message": "Su Plex" },
|
||||||
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
"searchOnPlex": { "message": "Cerca su Plex" },
|
||||||
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
"jellyfinTitle": { "message": "Contenuti Jellyfin" },
|
||||||
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
"noJellyfinContent": { "message": "Nessun contenuto Jellyfin trovato." },
|
||||||
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
|
"noJellyfinContentSub": { "message": "Assicurati di aver scansionato il tuo server Jellyfin nelle impostazioni." },
|
||||||
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
"activityViewerTitle": { "message": "Visualizzatore attività del server" },
|
||||||
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
"activitySelectServer": { "message": "Seleziona un server" },
|
||||||
"activityCheckBtn": { "message": "Actualiser" },
|
"activityCheckBtn": { "message": "Aggiorna" },
|
||||||
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
"activityNoSessions": { "message": "Nessuna sessione attiva su questo server." },
|
||||||
"activitySessionUser": { "message": "Utilisateur" },
|
"activitySessionUser": { "message": "Utente" },
|
||||||
"activitySessionDevice": { "message": "Appareil" },
|
"activitySessionDevice": { "message": "Dispositivo" },
|
||||||
"activitySessionContent": { "message": "Contenu" },
|
"activitySessionContent": { "message": "Contenuto" },
|
||||||
"activitySessionState": { "message": "État" },
|
"activitySessionState": { "message": "Stato" },
|
||||||
"activitySessionIdentifier": { "message": "Identifiant du client" },
|
"activitySessionIdentifier": { "message": "Identificatore del client" },
|
||||||
"activityCopyID": { "message": "Copier l'ID" },
|
"activityCopyID": { "message": "Copia ID" },
|
||||||
"activityError": { "message": "Impossible d'obtenir l'activité du serveur." },
|
"activityError": { "message": "Impossibile ottenere l'attività del server." },
|
||||||
"activityCopied": { "message": "Identifiant copié dans le presse-papiers !" },
|
"activityCopied": { "message": "Identificatore copiato negli appunti!" },
|
||||||
"activityCopyError": { "message": "Erreur lors de la copie de l'identifiant." },
|
"activityCopyError": { "message": "Errore durante la copia dell'identificatore." },
|
||||||
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
"noProvidersFound": { "message": "Nessun provider trovato." },
|
||||||
"availableOnPlex": { "message": "Disponible sur Plex" },
|
"availableOnPlex": { "message": "Disponibile su Plex" },
|
||||||
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
"m3uGeneratorTitle": { "message": "Generatore di elenchi M3U" },
|
||||||
"selectAServer": { "message": "Sélectionner un serveur..." },
|
"selectAServer": { "message": "Seleziona un server..." },
|
||||||
"downloadM3u": { "message": "Télécharger M3U" },
|
"downloadM3u": { "message": "Scarica M3U" },
|
||||||
"m3uGenerator": { "message": "Générateur M3U" },
|
"m3uGenerator": { "message": "Generatore M3U" },
|
||||||
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
"selectLibraries": { "message": "Seleziona librerie" },
|
||||||
"howToUse": { "message": "Comment utiliser" },
|
"howToUse": { "message": "Come usare" },
|
||||||
"m3uInstruction1": { "message": "Choisissez un serveur dans la liste." },
|
"m3uInstruction1": { "message": "Scegli un server dall'elenco." },
|
||||||
"m3uInstruction2": { "message": "Sélectionnez une ou plusieurs bibliothèques à inclure." },
|
"m3uInstruction2": { "message": "Seleziona una o più librerie da includere." },
|
||||||
"m3uInstruction3": { "message": "Cliquez sur le bouton de téléchargement." },
|
"m3uInstruction3": { "message": "Fai clic sul pulsante di download." },
|
||||||
"m3uInstruction4": { "message": "Importez le fichier .m3u dans votre lecteur compatible." },
|
"m3uInstruction4": { "message": "Importa il file .m3u nel tuo lettore compatibile." },
|
||||||
"chatOpen": { "message": "Ouvrir le chat" },
|
"chatOpen": { "message": "Apri chat" },
|
||||||
"chatTitle": { "message": "Assistant IA" },
|
"chatTitle": { "message": "Assistente AI" },
|
||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Écrivez votre message..." },
|
"chatPlaceholder": { "message": "Scrivi il tuo messaggio..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"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." },
|
"chatWelcome": { "message": "Benvenuto! Sono il tuo assistente CinePlex. Chiedimi di film, serie o qualsiasi altra cosa tu voglia sapere." },
|
||||||
"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." },
|
"chatGoogleApiKeyMissing": { "message": "La chiave API di Google Gemini non è configurata. Impostala nelle impostazioni dell'estensione per utilizzare l'assistente AI." },
|
||||||
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse invalide. Veuillez réessayer." },
|
"chatApiInvalidResponse": { "message": "L'API ha restituito una risposta non valida. Riprova." },
|
||||||
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
"chatApiError": { "message": "Errore di comunicazione con l'assistente AI" },
|
||||||
"downloadAll": { "message": "Tout télécharger" },
|
"downloadAll": { "message": "Scarica tutto" },
|
||||||
"download": { "message": "Télécharger" },
|
"download": { "message": "Scarica" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou séries par titre." },
|
"aiToolSearchLibraryDesc": { "message": "Cerca nella libreria Plex dell'utente film o serie per titolo." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Le titre du film ou de la série à rechercher." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "Il titolo del film o della serie da cercare." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Le type de contenu à rechercher. Peut être 'movie' pour les films ou 'series' pour les séries. (Facultatif)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "Il tipo di contenuto da cercare. Può essere 'movie' per i film o 'series' per le serie. (Facoltativo)." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navigue l'utilisateur vers une page spécifique de l'interface de l'application." },
|
"aiToolSearchLibraryResolutionParamDesc": { "message": "La risoluzione video da cercare (ad es. '4k', '1080p'). (Facoltativo)." },
|
||||||
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
"aiToolSearchLibraryContainerParamDesc": { "message": "Il formato del contenitore video da cercare (ad es. 'mkv', 'mp4'). (Facoltativo)." },
|
||||||
"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." },
|
"aiToolNavigateToPageDesc": { "message": "Indirizza l'utente a una pagina specifica dell'interfaccia dell'applicazione." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Affiche la page de détails d'un film ou d'une série spécifique par son titre et son type." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "Il nome della pagina a cui navigare, ad es.: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' o 'm3u-generator'." },
|
||||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "Le titre exact du film ou de la série." },
|
"aiToolGetUserStatsDesc": { "message": "Recupera e visualizza le statistiche della libreria dell'utente, come il numero totale di film, serie e artisti unici." },
|
||||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolShowItemDetailsDesc": { "message": "Visualizza la pagina dei dettagli di un film o di una serie specifica in base al titolo e al tipo." },
|
||||||
"aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture actuelle de l'utilisateur pour la diffuser à un serveur PHP configuré." },
|
"aiToolShowItemDetailsTitleParamDesc": { "message": "Il titolo esatto del film o della serie." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
"aiToolShowItemDetailsTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
||||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolAddToPlaylistDesc": { "message": "Aggiunge un film o una serie alla playlist corrente dell'utente per lo streaming su un server PHP configurato." },
|
||||||
"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." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "Il titolo del film o della serie da aggiungere." },
|
||||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un tableau de titres de films ou de séries à rechercher et télécharger." },
|
"aiToolAddToPlaylistTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
||||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Le type de contenu de la liste. Doit être 'movie' ou 'series'." },
|
"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." },
|
||||||
"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é." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Un array di titoli di film o serie da cercare e scaricare." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
"aiToolCheckAndDownloadTypeParamDesc": { "message": "Il tipo di contenuto dell'elenco. Deve essere 'movie' o 'series'." },
|
||||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Il nome del file M3U da scaricare (ad es. 'MiaLista.m3u'). Se non fornito, verrà utilizzato un nome predefinito." },
|
||||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Le type de contenu. Doit être 'movie' ou 'series'." },
|
"aiToolToggleFavoriteDesc": { "message": "Aggiunge o rimuove un film o una serie dall'elenco dei preferiti dell'utente." },
|
||||||
"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." },
|
"aiToolToggleFavoriteTitleParamDesc": { "message": "Il titolo del film o della serie." },
|
||||||
"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." },
|
"aiToolToggleFavoriteTypeParamDesc": { "message": "Il tipo di contenuto. Deve essere 'movie' o 'series'." },
|
||||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
"aiToolGetRecommendationsDesc": { "message": "Genera e visualizza un elenco di consigli di film o serie basati sulla cronologia di visualizzazione e sui preferiti dell'utente." },
|
||||||
"aiToolApplyFiltersGenreParamDesc": { "message": "Le nom du genre par lequel filtrer (par exemple, 'Action', 'Drame')." },
|
"aiToolApplyFiltersDesc": { "message": "Applica filtri alla visualizzazione corrente di film o serie, consentendo di affinare i risultati per tipo, genere, anno e ordine di ordinamento." },
|
||||||
"aiToolApplyFiltersYearParamDesc": { "message": "L'année de sortie par laquelle filtrer (par exemple, '2023')." },
|
"aiToolApplyFiltersTypeParamDesc": { "message": "Il tipo di contenuto a cui applicare i filtri. Deve essere 'movie' o 'series'." },
|
||||||
"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)." },
|
"aiToolApplyFiltersGenreParamDesc": { "message": "Il nome del genere per cui filtrare (ad es. 'Azione', 'Drammatico')." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Ouvre le lecteur de musique et commence à jouer des chansons d'un artiste spécifique de la bibliothèque de l'utilisateur." },
|
"aiToolApplyFiltersYearParamDesc": { "message": "L'anno di uscita per cui filtrare (ad es. '2023')." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
"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)." },
|
||||||
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle avec l'assistant IA." },
|
"aiToolPlayMusicByArtistDesc": { "message": "Apre il lettore musicale e avvia la riproduzione dei brani di un artista specifico dalla libreria dell'utente." },
|
||||||
"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." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Il nome esatto dell'artista di cui si desidera riprodurre i brani." },
|
||||||
"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." },
|
"aiToolClearChatHistoryDesc": { "message": "Cancella tutta la cronologia dei messaggi della conversazione corrente con l'assistente AI." },
|
||||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
"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." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du jeton X-Plex à ajouter." },
|
"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." },
|
||||||
"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." },
|
"aiToolAddPlexTokenDesc": { "message": "Aggiunge un nuovo token X-Plex alla configurazione dell'estensione, consentendo all'applicazione di scansionare i contenuti di nuovi server Plex." },
|
||||||
"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)." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "La stringa del token X-Plex da aggiungere." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
"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." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Efface l'historique de visionnage de l'utilisateur de la page d'historique." },
|
"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)." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Nettoie la vue des recommandations et supprime les recommandations mises en cache." },
|
"aiToolClearAllFavoritesDesc": { "message": "Rimuove tutti i film e le serie che l'utente ha contrassegnato come preferiti." },
|
||||||
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolClearViewingHistoryDesc": { "message": "Cancella la cronologia di visualizzazione dell'utente dalla pagina della cronologia." },
|
||||||
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolClearRecommendationsViewDesc": { "message": "Svuota la vista dei consigli e rimuove i consigli memorizzati nella cache." },
|
||||||
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "'$query' non trovato nella tua libreria.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
"aiToolNavigateSuccess": { "message": "Navigato alla pagina $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolItemNotFound": { "message": "L'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Errore durante la navigazione alla pagina $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolStatsError": { "message": "Errore nel recupero delle statistiche." },
|
||||||
"aiToolAddToPlaylistSuccess": { "message": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Elemento '$title' non trovato.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Visualizzazione dei dettagli di '$title'.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolAddToPlaylistSuccess": { "message": "Aggiunto '$title' alla playlist.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
"aiToolFavoriteAdded": { "message": "Aggiunto '$title' ai preferiti.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
"aiToolFavoriteRemoved": { "message": "Rimosso '$title' dai preferiti.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolApplyFiltersSuccess": { "message": "Filtres appliqués avec succès." },
|
"aiToolRecommendationsSuccess": { "message": "Visualizzazione dei consigli." },
|
||||||
"aiToolPlayMusicNotReady": { "message": "Le lecteur de musique n'est pas prêt. Assurez-vous que votre bibliothèque musicale Plex a été scannée." },
|
"aiToolApplyFiltersGenreNotFound": { "message": "Genere '$genre' non trovato.", "placeholders": { "genre": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolApplyFiltersSuccess": { "message": "Filtri applicati correttamente." },
|
||||||
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNotReady": { "message": "Il lettore musicale non è pronto. Assicurati che la tua libreria musicale di Plex sia stata scansionata." },
|
||||||
"aiToolPlayMusicSuccess": { "message": "Lecture de musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicArtistNotFound": { "message": "Artista '$artist_name' non trovato.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolChatHistoryCleared": { "message": "Historique du chat effacé." },
|
"aiToolPlayMusicNoSongs": { "message": "Nessun brano trovato per '$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." },
|
"aiToolPlayMusicSuccess": { "message": "Riproduzione di musica di '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Suppression de la base de données annulée." },
|
"aiToolChatHistoryCleared": { "message": "Cronologia della chat cancellata." },
|
||||||
"aiToolExecutionError": { "message": "Erreur lors de l'exécution de l'outil '$toolName$' : $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
"aiToolConfirmDeleteDatabase": { "message": "Sei sicuro di voler eliminare il database locale? Questa azione è irreversibile." },
|
||||||
"aiToolUnknown": { "message": "Outil inconnu : '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
"aiToolDeleteDatabaseCancelled": { "message": "Eliminazione del database annullata." },
|
||||||
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
"aiToolExecutionError": { "message": "Errore durante l'esecuzione dello strumento '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"aiToolFavoritesClearError": { "message": "Erreur lors de l'effacement des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUnknown": { "message": "Strumento sconosciuto: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
|
"aiToolFavoritesCleared": { "message": "Preferiti cancellati." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Erreur lors de l'effacement des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Errore durante la cancellazione dei preferiti: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va être rechargée." },
|
"aiToolRecommendationsCleared": { "message": "Consigli cancellati." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Erreur lors de la suppression de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Errore durante la cancellazione dei consigli: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "La suppression de la base de données est bloquée. Fermez les autres onglets de l'application." },
|
"aiToolDatabaseDeleted": { "message": "Database eliminato. La pagina verrà ricaricata." },
|
||||||
"aiToolUpdateAllTokensSuccess": { "message": "Tous les jetons ont été mis à jour avec succès." },
|
"aiToolDatabaseDeleteError": { "message": "Errore durante l'eliminazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteBlocked": { "message": "L'eliminazione del database è bloccata. Chiudi le altre schede dell'applicazione." },
|
||||||
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
"aiToolUpdateAllTokensSuccess": { "message": "Tutti i token sono stati aggiornati correttamente." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Erreur lors de l'ajout du jeton Plex : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolUpdateAllTokensError": { "message": "Errore durante l'aggiornamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Région changée en $region$. Le contenu est en cours de mise à jour.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolAddPlexTokenSuccess": { "message": "Token Plex aggiunto correttamente." },
|
||||||
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Errore durante l'aggiunta del token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
"aiToolChangeRegionSuccess": { "message": "Regione modificata in $region$. Il contenuto è in fase di aggiornamento.", "placeholders": { "region": { "content": "$1" } } },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Erreur lors de l'effacement de l'historique de visionnage : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolChangeRegionError": { "message": "Errore durante la modifica della regione: $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 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." },
|
"aiToolViewingHistoryCleared": { "message": "Cronologia visualizzazioni cancellata." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
"aiToolViewingHistoryClearError": { "message": "Errore durante la cancellazione della cronologia di visualizzazione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolM3UCheckingTitles": { "message": "Vérification des titres sur vos serveurs locaux..." },
|
"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." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Je n'ai trouvé aucun des films ou séries de la liste sur vos serveurs locaux." },
|
"aiToolM3UNoTitlesProvided": { "message": "Fornisci un elenco di titoli per creare la playlist." },
|
||||||
"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" } } },
|
"aiToolM3UCheckingTitles": { "message": "Controllo dei titoli sui tuoi server locali..." },
|
||||||
"backToProviders": { "message": "Retour aux fournisseurs" },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Non ho trovato nessuno dei film o delle serie dell'elenco sui tuoi server locali." },
|
||||||
"artistsCounterSingle": { "message": "$total$ Artiste", "placeholders": { "total": { "content": "$1" } } },
|
"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" } } },
|
||||||
"artistsCounterLoading": { "message": "Chargement..." },
|
"backToProviders": { "message": "Torna ai provider" },
|
||||||
"downloadingSong": { "message": "Démarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ artista", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
"artistsCounterLoading": { "message": "Caricamento..." },
|
||||||
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Avvio del download di \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "Génération M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Errore durante il download di \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retyingSection": { "message": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Generazione di M3U per \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
"albumM3UGenerated": { "message": "M3U per l'album \"$artist$\" generato.", "placeholders": { "artist": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retyingSection": { "message": "Nuovo tentativo per la sezione \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCCESSO] Nuovo tentativo per \"$title$\" completato.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "Jeton $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"retryError": { "message": "[ERRORE FINALE] Tentativo fallito per \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"errorProcessingToken": { "message": "Erreur lors du traitement du jeton $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"startingRetryPhase": { "message": "Avvio della fase di tentativi ripetuti per $count$ sezioni...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"tokenFoundServers": { "message": "Token $token$... ha trovato $count$ server.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorProcessingToken": { "message": "Errore durante l'elaborazione del token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
"plexScanFatalError": { "message": "ERRORE FATALE: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
"errorDuringScan": { "message": "Errore durante la scansione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
"stoppingPlexScan": { "message": "Arresto della scansione di Plex..." },
|
||||||
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
"invalidTokenProvided": { "message": "Token non valido fornito." },
|
||||||
"noStreamsFoundForSelection": { "message": "Aucun stream trouvé pour la sélection." },
|
"tokenAlreadyExists": { "message": "Il token esiste già." },
|
||||||
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
"tokenAddedSuccessfully": { "message": "Token aggiunto correttamente." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"noStreamsFoundForSelection": { "message": "Nessuno streaming trovato per la selezione." },
|
||||||
"page": { "message": "Page" }
|
"autoplayBlocked": { "message": "Riproduzione automatica bloccata." },
|
||||||
|
"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": "Scaneia servidores Plex para encontrar conteúdo e mostra-o na interface" },
|
"appDescription": { "message": "Examina servidores Plex em busca de conteúdo e o exibe na interface" },
|
||||||
"appTagline": { "message": "Filmes, Séries e Música" },
|
"appTagline": { "message": "Filmes, Séries e Música" },
|
||||||
"appLocaleCode": { "message": "pt-PT" },
|
"appLocaleCode": { "message": "pt-BR" },
|
||||||
"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": "Definições" },
|
"settings": { "message": "Configurações" },
|
||||||
"navMovies": { "message": "Filmes" },
|
"navMovies": { "message": "Filmes" },
|
||||||
"navSeries": { "message": "Séries" },
|
"navSeries": { "message": "Séries" },
|
||||||
"navProviders": { "message": "Fornecedores" },
|
"navProviders": { "message": "Provedores" },
|
||||||
"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 M3U" },
|
"navM3uGenerator": { "message": "Gerador de 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": "Melhor avaliados" },
|
"sortTopRated": { "message": "Mais bem 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": "Selecionar um servidor" },
|
"selectServer": { "message": "Selecione um servidor" },
|
||||||
"loading": { "message": "A carregar..." },
|
"loading": { "message": "Carregando..." },
|
||||||
"loadingLibraries": { "message": "A carregar bibliotecas..." },
|
"loadingLibraries": { "message": "Carregando bibliotecas..." },
|
||||||
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrada." },
|
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrado." },
|
||||||
"photosEmptyStateSub": { "message": "Por favor, selecione um servidor ou certifique-se de que tem uma biblioteca de fotos no Plex." },
|
"photosEmptyStateSub": { "message": "Selecione um servidor ou verifique se você 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": "A analisar a sua biblioteca..." },
|
"statsAnalyzing": { "message": "Analisando 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 do Token" },
|
"statsTokenServers": { "message": "Servidores de 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 si" },
|
"recommendationsTitle": { "message": "Recomendações para você" },
|
||||||
"historyTitle": { "message": "Histórico de Visualização" },
|
"historyTitle": { "message": "Histórico de visualização" },
|
||||||
"clearHistory": { "message": "Limpar Tudo" },
|
"clearHistory": { "message": "Limpar tudo" },
|
||||||
"consoleTitle": { "message": "Consola de Leitura Plex" },
|
"consoleTitle": { "message": "Console de verificação do 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": "Definições e Configuração" },
|
"settingsTitleFull": { "message": "Configurações e ajustes" },
|
||||||
"settingsTabGeneral": { "message": "Geral" },
|
"settingsTabGeneral": { "message": "Geral" },
|
||||||
"settingsTabPlex": { "message": "Plex" },
|
"settingsTabPlex": { "message": "Plex" },
|
||||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||||
"settingsTabPhpGen": { "message": "Gerador PHP" },
|
"settingsTabPhpGen": { "message": "Gerador de PHP" },
|
||||||
"settingsTabData": { "message": "Dados" },
|
"settingsTabData": { "message": "Dados" },
|
||||||
"settingsApiServer": { "message": "Configuração de API e Servidor" },
|
"settingsApiServer": { "message": "Configurações de API e servidor" },
|
||||||
"settingsTmdbApiLabel": { "message": "Chave de API TMDB (Opcional)" },
|
"settingsTmdbApiLabel": { "message": "Chave de API do TMDB (opcional)" },
|
||||||
"settingsTmdbApiPlaceholder": { "message": "Será usada a chave padrão se deixado em branco" },
|
"settingsTmdbApiPlaceholder": { "message": "A chave padrão será usada se o campo for deixado em branco" },
|
||||||
"settingsGoogleApiLabel": { "message": "Chave de API Google Gemini (Opcional)" },
|
"settingsGoogleApiLabel": { "message": "Chave de API do 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://o-seu-servidor.com/caminho/para/o-script.php" },
|
"settingsPhpUrlPlaceholder": { "message": "https://seu-servidor.com/caminho/para/script.php" },
|
||||||
"settingsInterface": { "message": "Interface" },
|
"settingsInterface": { "message": "Interface" },
|
||||||
"settingsLightTheme": { "message": "Modo Claro" },
|
"settingsLightTheme": { "message": "Modo claro" },
|
||||||
"settingsShowHero": { "message": "Mostrar secção de boas-vindas 'Hero'" },
|
"settingsShowHero": { "message": "Mostrar seção de boas-vindas 'Hero'" },
|
||||||
"settingsScanContent": { "message": "Análise de Conteúdo" },
|
"settingsScanContent": { "message": "Verificação de conteúdo" },
|
||||||
"settingsScanDesc": { "message": "Selecione o que analisar e clique no botão." },
|
"settingsScanDesc": { "message": "Selecione o que verificar e pressione o 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 Análise" },
|
"settingsStartScan": { "message": "Iniciar verificação" },
|
||||||
"settingsPlexTokens": { "message": "Tokens Plex" },
|
"settingsPlexTokens": { "message": "Tokens do Plex" },
|
||||||
"settingsPlexTokensDesc": { "message": "Editar a lista de tokens Plex (formato JSON)." },
|
"settingsPlexTokensDesc": { "message": "Edite a lista de tokens do Plex (formato JSON)." },
|
||||||
"settingsSaveTokens": { "message": "Guardar Tokens" },
|
"settingsSaveTokens": { "message": "Salvar tokens" },
|
||||||
"settingsJellyfinTitle": { "message": "Configuração Jellyfin" },
|
"settingsJellyfinTitle": { "message": "Configurações do Jellyfin" },
|
||||||
"settingsJellyfinDesc": { "message": "Adicione os dados do seu servidor Jellyfin para analisar o seu conteúdo." },
|
"settingsJellyfinDesc": { "message": "Adicione os detalhes do seu servidor Jellyfin para verificar o conteúdo dele." },
|
||||||
"jellyfinUrlLabel": { "message": "URL do Servidor Jellyfin" },
|
"jellyfinUrlLabel": { "message": "URL do servidor Jellyfin" },
|
||||||
"jellyfinUserLabel": { "message": "Nome de Utilizador" },
|
"jellyfinUserLabel": { "message": "Nome de usuário" },
|
||||||
"jellyfinPassLabel": { "message": "Palavra-passe" },
|
"jellyfinPassLabel": { "message": "Senha" },
|
||||||
"jellyfinConnectAndScan": { "message": "Ligar e Analisar" },
|
"jellyfinConnectAndScan": { "message": "Conectar e verificar" },
|
||||||
"settingsPhpGenTitle": { "message": "Gerador de Script PHP para o Servidor" },
|
"settingsPhpGenTitle": { "message": "Gerador de script PHP para servidor" },
|
||||||
"settingsPhpFileOptions": { "message": "Opções do Ficheiro" },
|
"settingsPhpFileOptions": { "message": "Opções de arquivo" },
|
||||||
"settingsPhpSavePathLabel": { "message": "Caminho de Gravação no Servidor" },
|
"settingsPhpSavePathLabel": { "message": "Caminho para salvar 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 Ficheiro" },
|
"settingsPhpFilenameLabel": { "message": "Nome do arquivo" },
|
||||||
"settingsPhpFileAction": { "message": "Ação no Ficheiro" },
|
"settingsPhpFileAction": { "message": "Ação do arquivo" },
|
||||||
"settingsPhpActionAppend": { "message": "Adicionar ao fim do ficheiro (cumulativo)" },
|
"settingsPhpActionAppend": { "message": "Anexar ao final do arquivo (cumulativo)" },
|
||||||
"settingsPhpActionOverwrite": { "message": "Sobrescrever o ficheiro (começar de novo)" },
|
"settingsPhpActionOverwrite": { "message": "Substituir o arquivo (começar do zero)" },
|
||||||
"settingsPhpSecurity": { "message": "Segurança (Opcional)" },
|
"settingsPhpSecurity": { "message": "Segurança (opcional)" },
|
||||||
"settingsPhpUseSecretKey": { "message": "Usar chave secreta (Recomendado)" },
|
"settingsPhpUseSecretKey": { "message": "Usar chave secreta (recomendado)" },
|
||||||
"settingsPhpSecretKeyPlaceholder": { "message": "Introduza uma chave secreta segura" },
|
"settingsPhpSecretKeyPlaceholder": { "message": "Digite 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": "Gestão da Base de Dados Local" },
|
"settingsDataManagement": { "message": "Gerenciamento do banco de dados local" },
|
||||||
"settingsImportDb": { "message": "Importar BD de Ficheiro" },
|
"settingsImportDb": { "message": "Importar banco de dados de um arquivo" },
|
||||||
"settingsExportDb": { "message": "Exportar BD para Ficheiro" },
|
"settingsExportDb": { "message": "Exportar banco de dados para um arquivo" },
|
||||||
"settingsClearContent": { "message": "Limpar Dados de Conteúdo Local" },
|
"settingsClearContent": { "message": "Limpar dados de conteúdo local" },
|
||||||
"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." },
|
"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." },
|
||||||
"settingsClose": { "message": "Fechar" },
|
"settingsClose": { "message": "Fechar" },
|
||||||
"settingsSave": { "message": "Guardar Definições" },
|
"settingsSave": { "message": "Salvar configuraçõ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 artista..." },
|
"musicSearchArtistPlaceholder": { "message": "Pesquisar um artista..." },
|
||||||
"musicSearchDiscographyPlaceholder": { "message": "Pesquisar na discografia..." },
|
"musicSearchDiscographyPlaceholder": { "message": "Pesquisar na discografia..." },
|
||||||
"musicNothingPlaying": { "message": "Nada a reproduzir" },
|
"musicNothingPlaying": { "message": "Nada tocando" },
|
||||||
"musicSelectSong": { "message": "Selecionar uma canção" },
|
"musicSelectSong": { "message": "Selecione uma música" },
|
||||||
"musicToStart": { "message": "para começar a reproduzir" },
|
"musicToStart": { "message": "para começar a tocar" },
|
||||||
"miniplayerDownloadSong": { "message": "Descarregar canção" },
|
"miniplayerDownloadSong": { "message": "Baixar música" },
|
||||||
"miniplayerDownloadAlbum": { "message": "Descarregar álbum M3U" },
|
"miniplayerDownloadAlbum": { "message": "Baixar á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ássica" },
|
"eqPresetClassical": { "message": "Clássico" },
|
||||||
"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": "Canção:" },
|
"infoModalFieldSong": { "message": "Música:" },
|
||||||
"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": "O seu navegador não suporta funções essenciais." },
|
"essentialFeaturesNotSupported": { "message": "Seu navegador não suporta recursos essenciais." },
|
||||||
"dbAccessError": { "message": "Erro ao aceder à base de dados local." },
|
"dbAccessError": { "message": "Erro ao acessar o banco de dados local." },
|
||||||
"dbUpdateNeeded": { "message": "A base de dados precisa de ser atualizada, por favor, recarregue a página." },
|
"dbUpdateNeeded": { "message": "O banco de dados precisa ser atualizado, recarregue a página." },
|
||||||
"dbBlocked": { "message": "Por favor, feche outros separadores desta aplicação para continuar." },
|
"dbBlocked": { "message": "Feche outras abas deste aplicativo para continuar." },
|
||||||
"deletingContentData": { "message": "A apagar dados de conteúdo locais..." },
|
"deletingContentData": { "message": "Excluindo dados de conteúdo local..." },
|
||||||
"noContentDataToDelete": { "message": "Não há dados de conteúdo para apagar." },
|
"noContentDataToDelete": { "message": "Nenhum dado de conteúdo para excluir." },
|
||||||
"contentDataDeleted": { "message": "Dados de conteúdo apagados do IndexedDB." },
|
"contentDataDeleted": { "message": "Dados de conteúdo excluídos do IndexedDB." },
|
||||||
"errorDeletingData": { "message": "Erro ao apagar dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDeletingData": { "message": "Erro ao excluir 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 guardar." },
|
"aceEditorNotAvailableToSave": { "message": "Editor não disponível para salvar." },
|
||||||
"invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" },
|
"invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" },
|
||||||
"tokensSaved": { "message": "Tokens guardados com sucesso." },
|
"tokensSaved": { "message": "Tokens salvos com sucesso." },
|
||||||
"errorSavingTokens": { "message": "Erro ao guardar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorSavingTokens": { "message": "Erro ao salvar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"dbNotAvailable": { "message": "IndexedDB não está disponível." },
|
"dbNotAvailable": { "message": "O IndexedDB não está disponível." },
|
||||||
"dbExported": { "message": "Base de dados exportada com sucesso." },
|
"dbExported": { "message": "Banco de dados exportado com sucesso." },
|
||||||
"errorExportingDb": { "message": "Erro ao exportar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorExportingDb": { "message": "Erro ao exportar o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"invalidJsonFile": { "message": "O ficheiro não contém um objeto JSON válido." },
|
"invalidJsonFile": { "message": "O arquivo não contém um objeto JSON válido." },
|
||||||
"noDataToImport": { "message": "O ficheiro não contém dados para as secções da BD atual." },
|
"noDataToImport": { "message": "O arquivo não contém dados para as seções atuais do banco de dados." },
|
||||||
"dbImported": { "message": "Base de dados importada com sucesso." },
|
"dbImported": { "message": "Banco de dados importado com sucesso." },
|
||||||
"errorImportingDb": { "message": "Erro ao importar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorImportingDb": { "message": "Erro ao importar o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"updatingView": { "message": "A atualizar a vista com os novos dados..." },
|
"updatingView": { "message": "Atualizando a visualização com novos dados..." },
|
||||||
"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." },
|
"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." },
|
||||||
"trailerNotFound": { "message": "Não foi encontrado trailer para este título." },
|
"trailerNotFound": { "message": "Nenhum trailer encontrado para este título." },
|
||||||
"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." },
|
"confirmClearHistory": { "message": "Tem certeza de que deseja limpar todo o seu histórico de visualização? Esta ação não pode ser desfeita." },
|
||||||
"historyCleared": { "message": "Histórico de visualização apagado." },
|
"historyCleared": { "message": "Histórico de visualização limpo." },
|
||||||
"historyItemDeleted": { "message": "Item apagado do histórico." },
|
"historyItemDeleted": { "message": "Item excluído 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 álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorLoadingAlbum": { "message": "Erro ao carregar o á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": "A carregar géneros..." },
|
"loadingGenres": { "message": "Carregando gêneros..." },
|
||||||
"errorLoadingGenres": { "message": "Erro ao carregar" },
|
"errorLoadingGenres": { "message": "Erro ao carregar" },
|
||||||
"noContentFound": { "message": "Não foram encontrados resultados." },
|
"noContentFound": { "message": "Nenhum resultado encontrado." },
|
||||||
"couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." },
|
"couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." },
|
||||||
"noFavorites": { "message": "Ainda não tem favoritos." },
|
"noFavorites": { "message": "Você ainda não tem favoritos." },
|
||||||
"errorLoadingFavorites": { "message": "Erro ao carregar favoritos." },
|
"errorLoadingFavorites": { "message": "Erro ao carregar os favoritos." },
|
||||||
"historyEmpty": { "message": "O seu histórico está vazio." },
|
"historyEmpty": { "message": "Seu histórico está vazio." },
|
||||||
"historyEmptySub": { "message": "Explore e veja conteúdo para que apareça aqui." },
|
"historyEmptySub": { "message": "Explore e assista a conteúdo para que ele apareça aqui." },
|
||||||
"errorGeneratingRecommendations": { "message": "Erro ao gerar recomendações." },
|
"errorGeneratingRecommendations": { "message": "Erro ao gerar recomendações." },
|
||||||
"noRecommendations": { "message": "Precisamos de o conhecer melhor para lhe dar recomendações!" },
|
"noRecommendations": { "message": "Precisamos conhecê-lo melhor para dar recomendações!" },
|
||||||
"errorGeneratingStats": { "message": "Erro ao gerar estatísticas." },
|
"errorGeneratingStats": { "message": "Erro ao gerar estatísticas." },
|
||||||
"noServersForToken": { "message": "Não foram encontrados servidores associados para este token." },
|
"noServersForToken": { "message": "Nenhum servidor associado encontrado para este token." },
|
||||||
"searchingActorContent": { "message": "A procurar conteúdo de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
"searchingActorContent": { "message": "Pesquisando 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" } } },
|
"errorLoadingActorContent": { "message": "Não foi possível carregar o conteúdo de $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": "O URL do servidor PHP não está configurado. Por favor, configure-o em Definições." },
|
"phpUrlNotConfigured": { "message": "A URL do servidor PHP não está configurada. Configure-a nas Configurações." },
|
||||||
"searchingStreams": { "message": "A procurar streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"searchingStreams": { "message": "Pesquisando streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"sendingStreams": { "message": "A enviar $count$ stream(s) para o servidor...", "placeholders": { "count": { "content": "$1" } } },
|
"sendingStreams": { "message": "Enviando $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": "A gerar M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"generatingM3U": { "message": "Gerando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"m3uDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
"m3uDownloaded": { "message": "\"$title$\" baixado.", "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": "Definições guardadas com sucesso." },
|
"settingsSavedSuccess": { "message": "Configurações salvas com sucesso." },
|
||||||
"errorSavingSettings": { "message": "Erro ao guardar as definições na base de dados." },
|
"errorSavingSettings": { "message": "Erro ao salvar as configurações no banco de dados." },
|
||||||
"languageChangeReload": { "message": "Idioma alterado. A aplicação será recarregada agora." },
|
"languageChangeReload": { "message": "Idioma alterado. O aplicativo será recarregado agora." },
|
||||||
"addedToFavorites": { "message": "Adicionado aos favoritos." },
|
"addedToFavorites": { "message": "Adicionado aos favoritos." },
|
||||||
"removedFromFavorites": { "message": "Removido dos favoritos." },
|
"removedFromFavorites": { "message": "Removido dos favoritos." },
|
||||||
"plexScanInProgress": { "message": "A análise do Plex já está em curso." },
|
"plexScanInProgress": { "message": "A verificação do Plex já está em andamento." },
|
||||||
"plexScanStarting": { "message": "A iniciar análise do Plex..." },
|
"plexScanStarting": { "message": "Iniciando a verificação do Plex..." },
|
||||||
"noPlexTokens": { "message": "Não há tokens Plex configurados." },
|
"noPlexTokens": { "message": "Nenhum token do Plex configurado." },
|
||||||
"clearingSections": { "message": "A limpar secções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
"clearingSections": { "message": "Limpando seções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||||
"initialScanPhaseComplete": { "message": "Fase inicial de análise concluída." },
|
"initialScanPhaseComplete": { "message": "Fase de verificação inicial concluída." },
|
||||||
"retryPhaseFinished": { "message": "Fase de retentativas concluída." },
|
"retryPhaseFinished": { "message": "Fase de nova tentativa concluída." },
|
||||||
"plexScanFinished": { "message": "Análise concluída. A atualizar conteúdo..." },
|
"plexScanFinished": { "message": "Verificação concluída. Atualizando conteúdo..." },
|
||||||
"scanCancelled": { "message": "Análise cancelada pelo utilizador." },
|
"scanCancelled": { "message": "Verificação cancelada pelo usuário." },
|
||||||
"scanCancelledInfo": { "message": "Análise cancelada." },
|
"scanCancelledInfo": { "message": "Verificação cancelada." },
|
||||||
"errorInitializingMusicPlayer": { "message": "Erro ao iniciar o reprodutor de música." },
|
"errorInitializingMusicPlayer": { "message": "Erro ao inicializar o reprodutor de música." },
|
||||||
"criticalErrorLoadingMusic": { "message": "Erro crítico ao carregar dados de música." },
|
"criticalErrorLoadingMusic": { "message": "Erro crítico ao carregar os dados de música." },
|
||||||
"errorLoadingArtists": { "message": "Erro ao carregar artistas." },
|
"errorLoadingArtists": { "message": "Erro ao carregar os artistas." },
|
||||||
"dbUnavailableError": { "message": "Erro: Base de dados não disponível." },
|
"dbUnavailableError": { "message": "Erro: banco de dados indisponível." },
|
||||||
"updatingMusicData": { "message": "A atualizar dados de música..." },
|
"updatingMusicData": { "message": "Atualizando dados de música..." },
|
||||||
"musicDataUpdated": { "message": "Dados de música atualizados." },
|
"musicDataUpdated": { "message": "Dados de música atualizados." },
|
||||||
"errorFetchingArtistSongs": { "message": "Erro ao obter as canções do artista." },
|
"errorFetchingArtistSongs": { "message": "Erro ao buscar as músicas do artista." },
|
||||||
"errorLoadingSongs": { "message": "Erro ao carregar canções." },
|
"errorLoadingSongs": { "message": "Erro ao carregar as músicas." },
|
||||||
"noArtistsFound": { "message": "Não foram encontrados artistas." },
|
"noArtistsFound": { "message": "Nenhum artista encontrado." },
|
||||||
"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": "A recarregar a página..." },
|
"reloadingPage": { "message": "Recarregando a página..." },
|
||||||
"viewed": { "message": "Visto" },
|
"viewed": { "message": "Visto" },
|
||||||
"local": { "message": "Local" },
|
"local": { "message": "Local" },
|
||||||
"topRatedSort": {"message": "Melhor Avaliados"},
|
"topRatedSort": {"message": "Mais bem avaliados"},
|
||||||
"recentSort": {"message": "Recentes"},
|
"recentSort": {"message": "Recentes"},
|
||||||
"popularSort": {"message": "Populares"},
|
"popularSort": {"message": "Populares"},
|
||||||
"moviesSectionTitle": {"message": "Filmes"},
|
"moviesSectionTitle": {"message": "Filmes"},
|
||||||
@ -245,197 +245,205 @@
|
|||||||
"explore": {"message": "Explorar"},
|
"explore": {"message": "Explorar"},
|
||||||
"noGenre": {"message": "Sem categoria"},
|
"noGenre": {"message": "Sem categoria"},
|
||||||
"synopsis": {"message": "Sinopse"},
|
"synopsis": {"message": "Sinopse"},
|
||||||
"noSynopsis": {"message": "Não há sinopse disponível."},
|
"noSynopsis": {"message": "Nenhuma sinopse disponível."},
|
||||||
"director": {"message": "Realizador:"},
|
"director": {"message": "Diretor:"},
|
||||||
"writer": {"message": "Argumentista:"},
|
"writer": {"message": "Roteirista:"},
|
||||||
"viewOnImdb": {"message": "Ver no IMDb"},
|
"viewOnImdb": {"message": "Ver no IMDb"},
|
||||||
"watchTrailer": {"message": "Ver Trailer"},
|
"watchTrailer": {"message": "Assistir ao 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"},
|
||||||
"episodesCount": {"message": "$count$ Episódios", "placeholders": {"count": {"content": "$1"}}},
|
"filmography": {"message": "Filmografia"},
|
||||||
"seasonsCount": {"message": "$count$ Temporadas", "placeholders": {"count": {"content": "$1"}}},
|
"availableOn": {"message": "Disponível em"},
|
||||||
|
"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": "Não foi encontrado trailer para este título."},
|
"noTrailerFound": {"message": "Nenhum trailer encontrado 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 a aplicação."},
|
"fatalInitErrorSub": {"message": "Não foi possível carregar o aplicativo."},
|
||||||
"invalidStreamInfo": {"message": "Informação inválida."},
|
"invalidStreamInfo": {"message": "Informações inválidas."},
|
||||||
"dbUnavailableForStreams": {"message": "Base de dados local não disponível."},
|
"dbUnavailableForStreams": {"message": "Banco de dados local indisponível."},
|
||||||
"noPlexServersForStreams": {"message": "Não há servidores Plex."},
|
"noPlexServersForStreams": {"message": "Nenhum servidor Plex."},
|
||||||
"notFoundOnServers": {"message": "Não foi encontrado \"$query$\" nos servidores Plex.", "placeholders": {"query": {"content": "$1"}}},
|
"notFoundOnServers": {"message": "\"$query$\" não encontrado 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 Detalhes" },
|
"errorLoadingDetails": { "message": "Erro ao carregar os detalhes" },
|
||||||
"errorLoadingLocalContent": { "message": "Erro ao carregar o conteúdo local." },
|
"errorLoadingLocalContent": { "message": "Erro ao carregar o conteúdo local." },
|
||||||
"errorServerResponse": { "message": "Resposta não bem-sucedida do servidor." },
|
"errorServerResponse": { "message": "Resposta do servidor sem sucesso." },
|
||||||
"errorPlexApi": { "message": "Erro $status$ da API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
"errorPlexApi": { "message": "Erro $status$ da API do Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||||
"errorParsingPlexXml": { "message": "Erro ao analisar o XML Plex." },
|
"errorParsingPlexXml": { "message": "Erro ao analisar o XML do Plex." },
|
||||||
"untitled": { "message": "Sem título" },
|
"untitled": { "message": "Sem título" },
|
||||||
"itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
|
"itemCount": { "message": "$count$ itens", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"noPhotoServers": { "message": "Não há servidores de fotos" },
|
"noPhotoServers": { "message": "Nenhum servidor de fotos" },
|
||||||
"jellyfinScanInProgress": { "message": "A análise do Jellyfin já está em curso." },
|
"jellyfinScanInProgress": { "message": "A verificação do Jellyfin já está em andamento." },
|
||||||
"jellyfinScanning": { "message": "A analisar Jellyfin..." },
|
"jellyfinScanning": { "message": "Verificando o Jellyfin..." },
|
||||||
"jellyfinMissingCredentials": { "message": "Por favor, preencha o URL e o utilizador do Jellyfin." },
|
"jellyfinMissingCredentials": { "message": "Preencha a URL e o nome de usuário do Jellyfin." },
|
||||||
"jellyfinConnecting": { "message": "A ligar ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
"jellyfinConnecting": { "message": "Conectando-se ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||||
"jellyfinAuthFailed": { "message": "Autenticação Jellyfin falhada: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinAuthFailed": { "message": "A autenticação do Jellyfin falhou: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinAuthSuccess": { "message": "Autenticação Jellyfin bem-sucedida." },
|
"jellyfinAuthSuccess": { "message": "Autenticação do Jellyfin bem-sucedida." },
|
||||||
"jellyfinFetchingLibraries": { "message": "A obter bibliotecas..." },
|
"jellyfinFetchingLibraries": { "message": "Buscando bibliotecas..." },
|
||||||
"jellyfinFetchFailed": { "message": "Erro ao obter bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"jellyfinFetchFailed": { "message": "Erro ao buscar bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"jellyfinNoMediaLibraries": { "message": "Não foram encontradas bibliotecas de filmes ou séries no Jellyfin." },
|
"jellyfinNoMediaLibraries": { "message": "Nenhuma biblioteca de filmes ou séries encontrada no Jellyfin." },
|
||||||
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de multimédia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de mídia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] '$libraryName$' analisada, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] '$libraryName' verificada, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"jellyfinLibraryScanFailed": { "message": "Erro ao analisar a biblioteca '$libraryName$'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
"jellyfinLibraryScanFailed": { "message": "Erro ao verificar a biblioteca '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||||
"jellyfinScanSuccess": { "message": "Análise Jellyfin concluída. Adicionados $movies$ filmes e $series$ séries.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
"jellyfinScanSuccess": { "message": "Verificação do Jellyfin concluída. Adicionados $movies$ filmes e $series$ séries.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||||
"noJellyfinCredentials": { "message": "Credenciais Jellyfin não configuradas." },
|
"noJellyfinCredentials": { "message": "Credenciais do Jellyfin não configuradas." },
|
||||||
"notFoundOnJellyfin": { "message": "Não foi encontrado \"$query$\" no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnJellyfin": { "message": "\"$query$\" não encontrado no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"notFoundOnAnyServer": { "message": "Não foi encontrado \"$query$\" em nenhum servidor.", "placeholders": { "query": { "content": "$1" } } },
|
"notFoundOnAnyServer": { "message": "\"$query$\" não encontrado 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": "Não foi encontrado conteúdo do Jellyfin." },
|
"noJellyfinContent": { "message": "Nenhum conteúdo do Jellyfin encontrado." },
|
||||||
"noJellyfinContentSub": { "message": "Certifique-se de que analisou o seu servidor Jellyfin nas definições." },
|
"noJellyfinContentSub": { "message": "Verifique se você verificou seu servidor Jellyfin nas configurações." },
|
||||||
"activityViewerTitle": { "message": "Visualizador de Atividade do Servidor" },
|
"activityViewerTitle": { "message": "Visualizador de atividades do servidor" },
|
||||||
"activitySelectServer": { "message": "Selecionar um servidor" },
|
"activitySelectServer": { "message": "Selecione um servidor" },
|
||||||
"activityCheckBtn": { "message": "Atualizar" },
|
"activityCheckBtn": { "message": "Atualizar" },
|
||||||
"activityNoSessions": { "message": "Não há sessões ativas neste servidor." },
|
"activityNoSessions": { "message": "Nenhuma sessão ativa neste servidor." },
|
||||||
"activitySessionUser": { "message": "Utilizador" },
|
"activitySessionUser": { "message": "Usuário" },
|
||||||
"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": "Não foram encontrados fornecedores." },
|
"noProvidersFound": { "message": "Nenhum provedor encontrado." },
|
||||||
"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": "Selecionar um servidor..." },
|
"selectAServer": { "message": "Selecione um servidor..." },
|
||||||
"downloadM3u": { "message": "Descarregar M3U" },
|
"downloadM3u": { "message": "Baixar M3U" },
|
||||||
"m3uGenerator": { "message": "Gerador M3U" },
|
"m3uGenerator": { "message": "Gerador de M3U" },
|
||||||
"selectLibraries": { "message": "Selecionar Bibliotecas" },
|
"selectLibraries": { "message": "Selecionar bibliotecas" },
|
||||||
"howToUse": { "message": "Como Usar" },
|
"howToUse": { "message": "Como usar" },
|
||||||
"m3uInstruction1": { "message": "Escolha um servidor da lista." },
|
"m3uInstruction1": { "message": "Escolha um servidor na 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 descarregar." },
|
"m3uInstruction3": { "message": "Clique no botão de download." },
|
||||||
"m3uInstruction4": { "message": "Importe o ficheiro .m3u para o seu reprodutor compatível." },
|
"m3uInstruction4": { "message": "Importe o arquivo .m3u para o seu reprodutor compatível." },
|
||||||
"chatOpen": { "message": "Abrir Chat" },
|
"chatOpen": { "message": "Abrir chat" },
|
||||||
"chatTitle": { "message": "Assistente IA" },
|
"chatTitle": { "message": "Assistente de IA" },
|
||||||
"chatClose": { "message": "X" },
|
"chatClose": { "message": "X" },
|
||||||
"chatPlaceholder": { "message": "Escreva a sua mensagem..." },
|
"chatPlaceholder": { "message": "Digite sua mensagem..." },
|
||||||
"chatSend": { "message": "➤" },
|
"chatSend": { "message": "➤" },
|
||||||
"chatWelcome": { "message": "Bem-vindo! Sou o seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que queira saber." },
|
"chatWelcome": { "message": "Bem-vindo! Eu sou seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que você queira saber." },
|
||||||
"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." },
|
"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." },
|
||||||
"chatApiInvalidResponse": { "message": "A API devolveu uma resposta inválida. Por favor, tente novamente." },
|
"chatApiInvalidResponse": { "message": "A API retornou uma resposta inválida. Tente novamente." },
|
||||||
"chatApiError": { "message": "Erro ao comunicar com o assistente de IA" },
|
"chatApiError": { "message": "Erro ao se comunicar com o assistente de IA" },
|
||||||
"downloadAll": { "message": "Descarregar tudo" },
|
"downloadAll": { "message": "Baixar tudo" },
|
||||||
"download": { "message": "Descarregar" },
|
"download": { "message": "Baixar" },
|
||||||
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex do utilizador filmes ou séries por título." },
|
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex do usuário por filmes ou séries por título." },
|
||||||
"aiToolSearchLibraryQueryParamDesc": { "message": "O título do filme ou série a pesquisar." },
|
"aiToolSearchLibraryQueryParamDesc": { "message": "O título do filme ou série a ser pesquisado." },
|
||||||
"aiToolSearchLibraryTypeParamDesc": { "message": "O tipo de conteúdo a pesquisar. Pode ser 'movie' para filmes ou 'series' para séries. (Opcional)." },
|
"aiToolSearchLibraryTypeParamDesc": { "message": "O tipo de conteúdo a ser pesquisado. Pode ser 'movie' para filmes ou 'series' para séries. (Opcional)." },
|
||||||
"aiToolNavigateToPageDesc": { "message": "Navega o utilizador para uma página específica da interface da aplicação." },
|
"aiToolSearchLibraryResolutionParamDesc": { "message": "A resolução de vídeo a ser pesquisada (por exemplo, '4k', '1080p'). (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'." },
|
"aiToolSearchLibraryContainerParamDesc": { "message": "O formato do contêiner de vídeo a ser pesquisado (por exemplo, 'mkv', 'mp4'). (Opcional)." },
|
||||||
"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." },
|
"aiToolNavigateToPageDesc": { "message": "Navega o usuário para uma página específica da interface do aplicativo." },
|
||||||
"aiToolShowItemDetailsDesc": { "message": "Mostra a página de detalhes de um filme ou série específica pelo seu título e tipo." },
|
"aiToolNavigateToPagePageParamDesc": { "message": "O nome da página para a qual navegar, por exemplo: 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers' ou 'm3u-generator'." },
|
||||||
|
"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 utilizador para transmitir para um servidor PHP configurado." },
|
"aiToolAddToPlaylistDesc": { "message": "Adiciona um filme ou série à lista de reprodução atual do usuário para transmiti-lo para um servidor PHP configurado." },
|
||||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "O título do filme ou série a adicionar." },
|
"aiToolAddToPlaylistTitleParamDesc": { "message": "O título do filme ou série a ser adicionado." },
|
||||||
"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 utilizador e, se encontrados, gera e descarrega um ficheiro 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 usuário e, se encontrados, gera e baixa um arquivo 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 descarregar." },
|
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Uma matriz de títulos de filmes ou séries para pesquisar e baixar." },
|
||||||
"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 ficheiro M3U a descarregar (por exemplo, 'MinhaLista.m3u'). Se não for fornecido, será usado um nome por defeito." },
|
"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." },
|
||||||
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série da lista de favoritos do utilizador." },
|
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série da lista de favoritos do usuário." },
|
||||||
"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 mostra uma lista de recomendações de filmes ou séries baseadas no histórico de visualização e nos favoritos do utilizador." },
|
"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." },
|
||||||
"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." },
|
"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." },
|
||||||
"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 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)." },
|
"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)." },
|
||||||
"aiToolPlayMusicByArtistDesc": { "message": "Abre o reprodutor de música e começa a reproduzir canções de um artista específico da biblioteca do utilizador." },
|
"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." },
|
||||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "O nome exato do artista cujas canções se deseja reproduzir." },
|
"aiToolPlayMusicByArtistNameParamDesc": { "message": "O nome exato do artista cujas músicas devem ser tocadas." },
|
||||||
"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": "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." },
|
"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." },
|
||||||
"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." },
|
"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." },
|
||||||
"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." },
|
"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." },
|
||||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "A string do token X-Plex que se deseja adicionar." },
|
"aiToolAddPlexTokenTokenParamDesc": { "message": "A string do token X-Plex a ser adicionada." },
|
||||||
"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." },
|
"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." },
|
||||||
"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)." },
|
"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)." },
|
||||||
"aiToolClearAllFavoritesDesc": { "message": "Elimina todos os filmes e séries que o utilizador marcou como favoritos." },
|
"aiToolClearAllFavoritesDesc": { "message": "Remove todos os filmes e séries que o usuário marcou como favoritos." },
|
||||||
"aiToolClearViewingHistoryDesc": { "message": "Apaga o histórico de visualização do utilizador da página de histórico." },
|
"aiToolClearViewingHistoryDesc": { "message": "Limpa o histórico de visualização do usuário da página de histórico." },
|
||||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a vista de recomendações e elimina as recomendações em cache." },
|
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a visualização de recomendações e remove as recomendações em cache." },
|
||||||
"aiToolSearchNotFound": { "message": "Não foi encontrado '$query$' na sua biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
"aiToolSearchNotFound": { "message": "'$query' não encontrado em sua biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
||||||
"aiToolNavigateSuccess": { "message": "Navegado para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateSuccess": { "message": "Navegado para a página $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolNavigateError": { "message": "Erro ao navegar para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
"aiToolNavigateError": { "message": "Erro ao navegar para a página $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||||
"aiToolStatsError": { "message": "Erro ao obter estatísticas." },
|
"aiToolStatsError": { "message": "Erro ao obter estatísticas." },
|
||||||
"aiToolItemNotFound": { "message": "Não foi encontrado o item '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolItemNotFound": { "message": "Item '$title' não encontrado.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"aiToolShowItemDetailsSuccess": { "message": "A mostrar detalhes de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
"aiToolShowItemDetailsSuccess": { "message": "Mostrando 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": "A mostrar recomendações." },
|
"aiToolRecommendationsSuccess": { "message": "Mostrando 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. Certifique-se de que a sua biblioteca de música Plex foi analisada." },
|
"aiToolPlayMusicNotReady": { "message": "O reprodutor de música não está pronto. Verifique se a sua biblioteca de música do Plex foi verificada." },
|
||||||
"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": "Não foram encontradas canções para '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicNoSongs": { "message": "Nenhuma música encontrada para '$artist_name'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||||
"aiToolPlayMusicSuccess": { "message": "A reproduzir música de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
"aiToolPlayMusicSuccess": { "message": "Tocando 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 a certeza de que pretende eliminar a base de dados local? Esta ação é irreversível." },
|
"aiToolConfirmDeleteDatabase": { "message": "Tem certeza de que deseja excluir o banco de dados local? Esta ação é irreversível." },
|
||||||
"aiToolDeleteDatabaseCancelled": { "message": "Eliminação da base de dados cancelada." },
|
"aiToolDeleteDatabaseCancelled": { "message": "Exclusão do banco 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 eliminados." },
|
"aiToolFavoritesCleared": { "message": "Favoritos limpos." },
|
||||||
"aiToolFavoritesClearError": { "message": "Erro ao eliminar os favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolFavoritesClearError": { "message": "Erro ao limpar os favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolRecommendationsCleared": { "message": "Recomendações eliminadas." },
|
"aiToolRecommendationsCleared": { "message": "Recomendações limpas." },
|
||||||
"aiToolRecommendationsClearError": { "message": "Erro ao eliminar as recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolRecommendationsClearError": { "message": "Erro ao limpar as recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleted": { "message": "Base de dados eliminada. A página será recarregada." },
|
"aiToolDatabaseDeleted": { "message": "Banco de dados excluído. A página será recarregada." },
|
||||||
"aiToolDatabaseDeleteError": { "message": "Erro ao eliminar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolDatabaseDeleteError": { "message": "Erro ao excluir o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolDatabaseDeleteBlocked": { "message": "A eliminação da base de dados está bloqueada. Feche outros separadores da aplicação." },
|
"aiToolDatabaseDeleteBlocked": { "message": "A exclusão do banco de dados está bloqueada. Feche outras abas do aplicativo." },
|
||||||
"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 Plex adicionado com sucesso." },
|
"aiToolAddPlexTokenSuccess": { "message": "Token do Plex adicionado com sucesso." },
|
||||||
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar o token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar o token do Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está a ser atualizado.", "placeholders": { "region": { "content": "$1" } } },
|
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está sendo 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 apagado." },
|
"aiToolViewingHistoryCleared": { "message": "Histórico de visualização limpo." },
|
||||||
"aiToolViewingHistoryClearError": { "message": "Erro ao apagar o histórico de visualização: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"aiToolViewingHistoryClearError": { "message": "Erro ao limpar 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. 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." },
|
"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." },
|
||||||
"aiToolM3UNoTitlesProvided": { "message": "Por favor, forneça uma lista de títulos para criar a lista de reprodução." },
|
"aiToolM3UNoTitlesProvided": { "message": "Forneça uma lista de títulos para criar a lista de reprodução." },
|
||||||
"aiToolM3UCheckingTitles": { "message": "A verificar os títulos nos seus servidores locais..." },
|
"aiToolM3UCheckingTitles": { "message": "Verificando os títulos em seus servidores locais..." },
|
||||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não encontrei nenhum dos filmes ou séries da lista nos seus servidores locais." },
|
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não encontrei nenhum dos filmes ou séries da lista em seus servidores locais." },
|
||||||
"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" } } },
|
"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" } } },
|
||||||
"backToProviders": { "message": "Voltar aos Fornecedores" },
|
"backToProviders": { "message": "Voltar para os provedores" },
|
||||||
"artistsCounterSingle": { "message": "$total$ Artista", "placeholders": { "total": { "content": "$1" } } },
|
"artistsCounterSingle": { "message": "$total$ artista", "placeholders": { "total": { "content": "$1" } } },
|
||||||
"artistsCounterLoading": { "message": "A carregar..." },
|
"artistsCounterLoading": { "message": "Carregando..." },
|
||||||
"downloadingSong": { "message": "A iniciar descarregamento de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"downloadingSong": { "message": "Iniciando o download de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"songDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
"songDownloaded": { "message": "\"$title$\" baixado.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"errorDownloadingSong": { "message": "Erro ao descarregar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"errorDownloadingSong": { "message": "Erro ao baixar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"generatingAlbumM3U": { "message": "A gerar M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
"generatingAlbumM3U": { "message": "Gerando 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": "A tentar novamente a secção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
"retyingSection": { "message": "Tentando novamente a seção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retrySuccess": { "message": "[SUCESSO] Retentativa de \"$title$\" concluída.", "placeholders": { "title": { "content": "$1" } } },
|
"retrySuccess": { "message": "[SUCESSO] Nova tentativa de \"$title$\" concluída.", "placeholders": { "title": { "content": "$1" } } },
|
||||||
"retryError": { "message": "[ERRO FINAL] A retentativa para \"$title$\" falhou: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
"retryError": { "message": "[ERRO FINAL] A nova tentativa para \"$title$\" falhou: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||||
"startingRetryPhase": { "message": "A iniciar fase de retentativas para $count$ secções...", "placeholders": { "count": { "content": "$1" } } },
|
"startingRetryPhase": { "message": "Iniciando a fase de nova tentativa para $count$ seções...", "placeholders": { "count": { "content": "$1" } } },
|
||||||
"tokenFoundServers": { "message": "Token $token$... encontrou $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
"tokenFoundServers": { "message": "O token $token$... encontrou $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||||
"errorProcessingToken": { "message": "Erro ao processar token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
"errorProcessingToken": { "message": "Erro ao processar o 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 análise: $message$", "placeholders": { "message": { "content": "$1" } } },
|
"errorDuringScan": { "message": "Erro durante a verificação: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||||
"stoppingPlexScan": { "message": "A parar análise do Plex..." },
|
"stoppingPlexScan": { "message": "Parando a verificação 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": "Não foram encontrados streams para a seleção." },
|
"noStreamsFoundForSelection": { "message": "Nenhum stream encontrado para a seleção." },
|
||||||
"autoplayBlocked": { "message": "Reprodução automática bloqueada." },
|
"autoplayBlocked": { "message": "Reprodução automática bloqueada." },
|
||||||
"welcomeToCinePlex": { "message": "" },
|
"page": { "message": "Página" },
|
||||||
"page": { "message": "Página" }
|
"all": { "message": "Todos" },
|
||||||
|
"userScore": { "message": "Pontuação dos usuários" },
|
||||||
|
"duration": { "message": "Duração" },
|
||||||
|
"min": { "message": "Mín" },
|
||||||
|
"max": { "message": "Máx" }
|
||||||
}
|
}
|
103
css/custom-filters.css
Normal file
103
css/custom-filters.css
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
.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,7 +3,51 @@
|
|||||||
Generated and Refactored by Gemini
|
Generated and Refactored by Gemini
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* --- base.css --- */
|
.filter-group {
|
||||||
|
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;
|
||||||
@ -1409,7 +1453,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
color: var(--text-secondary);
|
color: var(--text-secondary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid {
|
.similar-items-grid, .filmography-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;
|
||||||
@ -1671,7 +1715,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
gap: 1.5rem;
|
gap: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid {
|
.similar-items-grid, .filmography-grid {
|
||||||
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
@ -1734,7 +1778,7 @@ body.sidebar-collapsed #main-container {
|
|||||||
height: 80px;
|
height: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.similar-items-grid {
|
.similar-items-grid, .filmography-grid {
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(2, 1fr);
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
@ -1997,24 +2041,47 @@ 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,9 +21,11 @@ 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: ['query']
|
required: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -188,22 +190,35 @@ export class AITools {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
async "search_library"({ query, type }) {
|
async "search_library"({ query, type, resolution, container }) {
|
||||||
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' })))
|
||||||
];
|
];
|
||||||
|
|
||||||
|
let results = allContent;
|
||||||
|
|
||||||
|
if (query) {
|
||||||
const searchTerm = query.toLowerCase().trim();
|
const searchTerm = query.toLowerCase().trim();
|
||||||
let results = allContent.filter(item => item.title.toLowerCase().includes(searchTerm));
|
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 }));
|
const formattedResults = results.slice(0, 10).map(item => ({ title: item.title, year: item.year, type: item.type, resolution: item.resolution, container: item.container }));
|
||||||
return JSON.stringify({ success: true, count: results.length, results: formattedResults });
|
return JSON.stringify({ success: true, count: results.length, results: formattedResults });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
57
js/api.js
57
js/api.js
@ -6,25 +6,21 @@ 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', tmdbLang);
|
finalParams.set('language', lang);
|
||||||
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);
|
||||||
@ -171,7 +167,7 @@ export async function getMusicUrlsFromJellyfin(serverUrl, userId, token, artistI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAllStreamsFromPlex(busqueda, tipoContenido) {
|
export async function fetchAllStreamsFromPlex(busqueda, tipoContenido, year = null) {
|
||||||
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') };
|
||||||
|
|
||||||
@ -197,10 +193,23 @@ export async function fetchAllStreamsFromPlex(busqueda, tipoContenido) {
|
|||||||
|
|
||||||
if (tipoContenido === 'movie') {
|
if (tipoContenido === 'movie') {
|
||||||
const videos = Array.from(xml.querySelectorAll("Video"));
|
const videos = Array.from(xml.querySelectorAll("Video"));
|
||||||
let videosToProcess = videos;
|
let videosToProcess = [];
|
||||||
|
|
||||||
|
if (year) {
|
||||||
|
const exactMatch = videos.find(v =>
|
||||||
|
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());
|
const exactMatch = videos.find(v => v.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
||||||
if (exactMatch) {
|
if (exactMatch) {
|
||||||
videosToProcess = [exactMatch];
|
videosToProcess = [exactMatch];
|
||||||
|
} else {
|
||||||
|
videosToProcess = videos;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
videosToProcess.forEach(video => {
|
videosToProcess.forEach(video => {
|
||||||
@ -221,7 +230,19 @@ export async function fetchAllStreamsFromPlex(busqueda, tipoContenido) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const directories = Array.from(xml.querySelectorAll('Directory[type="show"]'));
|
const directories = Array.from(xml.querySelectorAll('Directory[type="show"]'));
|
||||||
let directoryToProcess = directories.find(d => d.getAttribute('title')?.toLowerCase() === busqueda.toLowerCase());
|
let directoryToProcess;
|
||||||
|
|
||||||
|
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];
|
||||||
}
|
}
|
||||||
@ -374,9 +395,9 @@ export async function fetchAllStreamsFromJellyfin(busqueda, tipoContenido) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function fetchAllAvailableStreams(title, type) {
|
export async function fetchAllAvailableStreams(title, type, year = null) {
|
||||||
const plexPromise = fetchAllStreamsFromPlex(title, type);
|
const plexPromise = fetchAllStreamsFromPlex(title, type, year);
|
||||||
const jellyfinPromise = fetchAllStreamsFromJellyfin(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 results = await Promise.allSettled([plexPromise, jellyfinPromise]);
|
const results = await Promise.allSettled([plexPromise, jellyfinPromise]);
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ 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, 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, 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 { 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,20 +74,99 @@ 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;
|
||||||
if (!query) {
|
|
||||||
switchView(state.currentParams.contentType === 'movie' ? 'movies' : 'series');
|
|
||||||
} else {
|
|
||||||
updateSectionTitle();
|
updateSectionTitle();
|
||||||
await loadContent();
|
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);
|
||||||
@ -292,17 +371,29 @@ function handleMainViewClick(e) {
|
|||||||
|
|
||||||
if (actionBtn) {
|
if (actionBtn) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
const { id, type } = itemCard.dataset;
|
const { id, type, year, name } = itemCard.dataset;
|
||||||
const title = itemCard.querySelector('.item-title')?.textContent;
|
const title = itemCard.querySelector('.item-title')?.textContent;
|
||||||
if (actionBtn.classList.contains('info-btn')) showItemDetails(Number(id), type);
|
if (actionBtn.classList.contains('info-btn')) {
|
||||||
|
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, actionBtn);
|
else if (actionBtn.classList.contains('play-btn')) addStreamToList(title, type, year, actionBtn);
|
||||||
else if (actionBtn.classList.contains('download-btn')) downloadM3U([{ title, type }], actionBtn);
|
else if (actionBtn.classList.contains('download-btn')) downloadM3U([{ title, type, year }], actionBtn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { id, type } = itemCard.dataset;
|
const { id, type } = itemCard.dataset;
|
||||||
if (id && type) showItemDetails(Number(id), type);
|
if (id && type) {
|
||||||
|
if (type === 'person') {
|
||||||
|
showActorDetails(Number(id));
|
||||||
|
} else {
|
||||||
|
showItemDetails(Number(id), type);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function handleHistoryClick(e, historyItem) {
|
async function handleHistoryClick(e, historyItem) {
|
||||||
@ -353,8 +444,7 @@ 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;
|
||||||
const actorName = castCard.querySelector('.cast-name').textContent;
|
if (actorId) showActorDetails(Number(actorId));
|
||||||
if (actorId && actorName) await searchByActor(actorId, actorName);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,11 +64,22 @@ 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,7 +17,16 @@ async function loadSettings() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!state.settings.watchRegion) {
|
if (!state.settings.watchRegion) {
|
||||||
state.settings.watchRegion = 'US';
|
const langToRegionMap = {
|
||||||
|
'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) {
|
||||||
@ -35,7 +44,9 @@ 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);
|
||||||
state.settings.watchRegion = 'US';
|
const userLang = chrome.i18n.getUILanguage();
|
||||||
|
const region = userLang.split('-')[1] || userLang.split('-')[0];
|
||||||
|
state.settings.watchRegion = region.toUpperCase();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
15
js/plex.js
15
js/plex.js
@ -86,13 +86,22 @@ 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');
|
||||||
|
const part = media?.querySelector('Part');
|
||||||
|
const container = part?.getAttribute('container');
|
||||||
|
const videoResolution = media?.getAttribute('videoResolution');
|
||||||
|
|
||||||
|
return {
|
||||||
id: el.getAttribute('ratingKey'),
|
id: el.getAttribute('ratingKey'),
|
||||||
title: el.getAttribute('title'),
|
title: el.getAttribute('title'),
|
||||||
year: el.getAttribute('year'),
|
year: el.getAttribute('year'),
|
||||||
genre: el.querySelector('Genre')?.getAttribute('tag') || _('noGenre'),
|
genre: el.querySelector('Genre')?.getAttribute('tag') || _('noGenre'),
|
||||||
type: type
|
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,24 +101,31 @@ export function renderProviders(providers) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getProviderItems(providerId, page = 1) {
|
export async function getProviderItems(providerId, page = 1, mediaType = 'all') {
|
||||||
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 = [];
|
||||||
|
let total_pages = 0;
|
||||||
|
|
||||||
|
if (mediaType === 'movie' || mediaType === 'all') {
|
||||||
const moviesResponse = await fetchTMDB('discover/movie', params);
|
const moviesResponse = await fetchTMDB('discover/movie', params);
|
||||||
|
items.push(...moviesResponse.results.map(item => ({ ...item, media_type: 'movie' })));
|
||||||
|
total_pages = Math.max(total_pages, moviesResponse.total_pages);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mediaType === 'tv' || mediaType === 'all') {
|
||||||
const seriesResponse = await fetchTMDB('discover/tv', params);
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
const movies = moviesResponse.results.map(item => ({ ...item, media_type: 'movie' }));
|
items.sort((a, b) => b.popularity - a.popularity);
|
||||||
const series = seriesResponse.results.map(item => ({ ...item, media_type: 'tv' }));
|
|
||||||
|
|
||||||
const items = [...movies, ...series].sort((a, b) => b.popularity - a.popularity);
|
|
||||||
const total_pages = Math.max(moviesResponse.total_pages, seriesResponse.total_pages);
|
|
||||||
|
|
||||||
return { success: true, items, total_pages };
|
return { success: true, items, total_pages };
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -127,7 +134,9 @@ export async function getProviderItems(providerId, page = 1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function loadProviderContent(providerId, providerName, page = 1) {
|
let currentMediaType = 'all';
|
||||||
|
|
||||||
|
export async function loadProviderContent(providerId, providerName, page = 1, isFilterChange = false) {
|
||||||
currentProviderId = providerId;
|
currentProviderId = providerId;
|
||||||
currentPage = page;
|
currentPage = page;
|
||||||
|
|
||||||
@ -141,6 +150,22 @@ export async function loadProviderContent(providerId, providerName, page = 1) {
|
|||||||
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';
|
||||||
backButton.style.display = 'block';
|
backButton.style.display = 'block';
|
||||||
@ -149,11 +174,11 @@ export async function loadProviderContent(providerId, providerName, page = 1) {
|
|||||||
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);
|
const { success, items, total_pages } = await getProviderItems(providerId, page, currentMediaType);
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
totalPages = total_pages;
|
totalPages = total_pages;
|
||||||
renderGrid(items, false, 'provider-items');
|
renderGrid(items, false, 'provider-items', !isFilterChange);
|
||||||
|
|
||||||
if (totalPages > 1) {
|
if (totalPages > 1) {
|
||||||
paginationControls.style.display = 'flex';
|
paginationControls.style.display = 'flex';
|
||||||
|
38
plex.html
38
plex.html
@ -12,6 +12,7 @@
|
|||||||
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">
|
||||||
@ -96,6 +97,34 @@
|
|||||||
<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">
|
||||||
@ -111,7 +140,14 @@
|
|||||||
</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;">
|
||||||
<button id="back-to-providers" class="btn btn-secondary mb-3"><i class="fas fa-arrow-left me-2"></i>__MSG_backToProviders__</button>
|
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||||
|
<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