change OpenAI to Gemini (Assitant)
This commit is contained in:
parent
2449a07cae
commit
c4d80d31eb
@ -1,10 +1,10 @@
|
||||
{
|
||||
"appName": { "message": "CinePlex" },
|
||||
"appDescription": { "message": "Sucht auf Plex-Servern nach Inhalten und zeigt sie in der Benutzeroberfläche an" },
|
||||
"appTagline": { "message": "Filme, Serien & Musik" },
|
||||
"appLocaleCode": { "message": "de-DE" },
|
||||
"appDescription": { "message": "Scannt Plex-Server nach Inhalten und zeigt diese in der Oberfläche an" },
|
||||
"appTagline": { "message": "Filme, Serien und Musik" },
|
||||
"appLocaleCode": { "message": "de" },
|
||||
"toggleNavigation": { "message": "Navigation umschalten" },
|
||||
"searchPlaceholder": { "message": "Suche nach Filmen oder Serien..." },
|
||||
"searchPlaceholder": { "message": "Filme oder Serien suchen..." },
|
||||
"openMusicPlayer": { "message": "Musik-Player öffnen" },
|
||||
"settings": { "message": "Einstellungen" },
|
||||
"navMovies": { "message": "Filme" },
|
||||
@ -16,10 +16,11 @@
|
||||
"navHistory": { "message": "Verlauf" },
|
||||
"navRecommendations": { "message": "Empfehlungen" },
|
||||
"navMusic": { "message": "Musik" },
|
||||
"navM3uGenerator": { "message": "M3U-Generator" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Entdecke Tausende von Filmen und Serien." },
|
||||
"addStream": { "message": "Stream hinzufügen" },
|
||||
"moreInfo": { "message": "Mehr Infos" },
|
||||
"moreInfo": { "message": "Mehr Informationen" },
|
||||
"popularMovies": { "message": "Beliebte Filme" },
|
||||
"allGenres": { "message": "Alle Genres" },
|
||||
"allYears": { "message": "Alle Jahre" },
|
||||
@ -28,34 +29,33 @@
|
||||
"sortRecent": { "message": "Neueste" },
|
||||
"loadMore": { "message": "Mehr laden" },
|
||||
"photosBreadcrumbHome": { "message": "Alben" },
|
||||
"selectServer": { "message": "Einen Server auswählen" },
|
||||
"loading": { "message": "Lädt..." },
|
||||
"loadingLibraries": { "message": "Bibliotheken werden geladen..." },
|
||||
"selectServer": { "message": "Server auswählen" },
|
||||
"loading": { "message": "Laden..." },
|
||||
"loadingLibraries": { "message": "Bibliotheken laden..." },
|
||||
"photosEmptyState": { "message": "Keine Alben oder Fotos gefunden." },
|
||||
"photosEmptyStateSub": { "message": "Bitte wähle einen Server aus oder stelle sicher, dass du eine Fotobibliothek in Plex hast." },
|
||||
"photosEmptyStateSub": { "message": "Bitte wählen Sie einen Server aus oder stellen Sie sicher, dass Sie eine Fotobibliothek in Plex haben." },
|
||||
"statsTitle": { "message": "Bibliotheksstatistiken" },
|
||||
"statsAllTokens": { "message": "Alle Tokens" },
|
||||
"statsAnalyzing": { "message": "Analysiere deine Bibliothek..." },
|
||||
"statsAnalyzing": { "message": "Ihre Bibliothek wird analysiert..." },
|
||||
"statsActiveTokens": { "message": "Aktive Tokens" },
|
||||
"statsServersFound": { "message": "Gefundene Server" },
|
||||
"statsServersFound": { "message": "Server gefunden" },
|
||||
"statsUniqueMovies": { "message": "Einzigartige Filme" },
|
||||
"statsUniqueSeries": { "message": "Einzigartige Serien" },
|
||||
"statsUniqueArtists": { "message": "Einzigartige Künstler" },
|
||||
"statsTokenServers": { "message": "Server des Tokens" },
|
||||
"statsChartMoviesByGenre": { "message": "Inhalt nach Genre (Filme)" },
|
||||
"statsChartSeriesByGenre": { "message": "Inhalt nach Genre (Serien)" },
|
||||
"statsChartByDecade": { "message": "Inhalt nach Jahrzehnt" },
|
||||
"recommendationsTitle": { "message": "Empfehlungen für dich" },
|
||||
"statsTokenServers": { "message": "Token-Server" },
|
||||
"statsChartMoviesByGenre": { "message": "Inhalte nach Genre (Filme)" },
|
||||
"statsChartSeriesByGenre": { "message": "Inhalte nach Genre (Serien)" },
|
||||
"statsChartByDecade": { "message": "Inhalte nach Jahrzehnt" },
|
||||
"recommendationsTitle": { "message": "Empfehlungen für Sie" },
|
||||
"historyTitle": { "message": "Wiedergabeverlauf" },
|
||||
"clearHistory": { "message": "Alles löschen" },
|
||||
"consoleTitle": { "message": "Plex Scan-Konsole" },
|
||||
"footerCredit": { "message": "Eine Oberfläche für dein Plex-Universum." },
|
||||
"backButton": { "message": "Zurück" },
|
||||
"consoleTitle": { "message": "Plex-Scan-Konsole" },
|
||||
"footerCredit": { "message": "Eine Oberfläche für Ihr Plex-Universum." },
|
||||
"closeTrailer": { "message": "Trailer schließen" },
|
||||
"close": { "message": "Schließen" },
|
||||
"photoViewer": { "message": "Fotoanzeige" },
|
||||
"previous": { "message": "Zurück" },
|
||||
"next": { "message": "Weiter" },
|
||||
"photoViewer": { "message": "Foto-Viewer" },
|
||||
"previous": { "message": "Vorherige" },
|
||||
"next": { "message": "Nächste" },
|
||||
"notificationTemplateText": { "message": "Benachrichtigung" },
|
||||
"settingsTitleFull": { "message": "Einstellungen und Konfiguration" },
|
||||
"settingsTabGeneral": { "message": "Allgemein" },
|
||||
@ -63,48 +63,46 @@
|
||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||
"settingsTabPhpGen": { "message": "PHP-Generator" },
|
||||
"settingsTabData": { "message": "Daten" },
|
||||
"settingsApiServer": { "message": "API- und Serverkonfiguration" },
|
||||
"settingsApiServer": { "message": "API- und Server-Einstellungen" },
|
||||
"settingsTmdbApiLabel": { "message": "TMDB API-Schlüssel (Optional)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Verwendet den Standardschlüssel, wenn leer gelassen" },
|
||||
"openaiApiKey": { "message": "OpenAI API-Schlüssel" },
|
||||
"settingsTmdbLangLabel": { "message": "Sprache für TMDB & UI" },
|
||||
"settingsRegionLabel": { "message": "Region für Anbieter" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Standardschlüssel wird verwendet, wenn leer gelassen" },
|
||||
"settingsGoogleApiLabel": { "message": "Google Gemini API-Schlüssel (Optional)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Erforderlich für die Nutzung des KI-Assistenten" },
|
||||
"settingsRegionLabel": { "message": "Region für die Inhaltserkennung" },
|
||||
"allRegions": { "message": "Alle Regionen" },
|
||||
"loadingRegions": { "message": "Regionen werden geladen..." },
|
||||
"errorLoadingRegions": { "message": "Fehler beim Laden der Regionen" },
|
||||
"settingsPhpUrlLabel": { "message": "Server-URL zum Hinzufügen von Streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://dein-server.com/pfad/zum/script.php" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://ihr-server.com/pfad/zum/script.php" },
|
||||
"settingsInterface": { "message": "Oberfläche" },
|
||||
"settingsLightTheme": { "message": "Heller Modus" },
|
||||
"settingsShowHero": { "message": "Willkommensbereich \"Hero\" anzeigen" },
|
||||
"settingsScanContent": { "message": "Inhaltsscan" },
|
||||
"settingsScanDesc": { "message": "Wähle aus, was gescannt werden soll, und drücke die Taste." },
|
||||
"settingsShowHero": { "message": "Willkommensbereich 'Hero' anzeigen" },
|
||||
"settingsScanContent": { "message": "Inhaltsscanning" },
|
||||
"settingsScanDesc": { "message": "Wählen Sie aus, was gescannt werden soll, und klicken Sie auf die Schaltfläche." },
|
||||
"settingsScanMovies": { "message": "Filme" },
|
||||
"settingsScanShows": { "message": "Serien" },
|
||||
"settingsScanArtists": { "message": "Musik" },
|
||||
"settingsScanPhotos": { "message": "Fotos" },
|
||||
"settingsSelectAll": { "message": "Alles auswählen" },
|
||||
"settingsSelectAll": { "message": "Alle auswählen" },
|
||||
"settingsStartScan": { "message": "Scan starten" },
|
||||
"settingsPlexTokens": { "message": "Plex-Tokens" },
|
||||
"settingsPlexTokensDesc": { "message": "Bearbeite die Liste der Plex-Tokens (JSON-Format)." },
|
||||
"settingsPlexTokensDesc": { "message": "Bearbeiten Sie die Liste der Plex-Tokens (JSON-Format)." },
|
||||
"settingsSaveTokens": { "message": "Tokens speichern" },
|
||||
"settingsJellyfinTitle": { "message": "Jellyfin-Einstellungen" },
|
||||
"settingsJellyfinDesc": { "message": "Füge die Daten deines Jellyfin-Servers hinzu, um dessen Inhalt zu scannen." },
|
||||
"settingsJellyfinTitle": { "message": "Jellyfin-Konfiguration" },
|
||||
"settingsJellyfinDesc": { "message": "Fügen Sie Ihre Jellyfin-Serverdaten hinzu, um deren Inhalte zu scannen." },
|
||||
"jellyfinUrlLabel": { "message": "Jellyfin Server-URL" },
|
||||
"jellyfinUserLabel": { "message": "Benutzername" },
|
||||
"jellyfinPassLabel": { "message": "Passwort" },
|
||||
"jellyfinConnectAndScan": { "message": "Verbinden und Scannen" },
|
||||
"settingsPhpGenTitle": { "message": "PHP-Server-Skript-Generator" },
|
||||
"jellyfinConnectAndScan": { "message": "Verbinden und scannen" },
|
||||
"settingsPhpGenTitle": { "message": "PHP-Skript-Generator für den Server" },
|
||||
"settingsPhpFileOptions": { "message": "Dateioptionen" },
|
||||
"settingsPhpSavePathLabel": { "message": "Speicherpfad auf dem Server" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Bsp: /var/www/html/listen (leer für denselben Ordner)" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Bsp.: /var/www/html/listen (leer lassen für denselben Ordner)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Dateiname" },
|
||||
"settingsPhpFileAction": { "message": "Dateiaktion" },
|
||||
"settingsPhpActionAppend": { "message": "An das Ende der Datei anhängen (kumulativ)" },
|
||||
"settingsPhpActionAppend": { "message": "An Dateiende anhängen (kumulativ)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Datei überschreiben (neu beginnen)" },
|
||||
"settingsPhpSecurity": { "message": "Sicherheit (Optional)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Geheimschlüssel verwenden (Empfohlen)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Gib einen sicheren Geheimschlüssel ein" },
|
||||
"settingsPhpUseSecretKey": { "message": "Geheimen Schlüssel verwenden (Empfohlen)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Geben Sie einen sicheren geheimen Schlüssel ein" },
|
||||
"settingsPhpGeneratedCode": { "message": "Generierter Code" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "Der generierte PHP-Code wird hier angezeigt." },
|
||||
"settingsGenerateScript": { "message": "Skript generieren" },
|
||||
@ -113,20 +111,20 @@
|
||||
"settingsImportDb": { "message": "DB aus Datei importieren" },
|
||||
"settingsExportDb": { "message": "DB in Datei exportieren" },
|
||||
"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 deine 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 Einstellungen." },
|
||||
"settingsClose": { "message": "Schließen" },
|
||||
"settingsSave": { "message": "Einstellungen speichern" },
|
||||
"musicSidenavTitle": { "message": "Plex Musik" },
|
||||
"musicAllServers": { "message": "Alle Server" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Künstler suchen..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "In Diskografie suchen..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Diskografie durchsuchen..." },
|
||||
"musicNothingPlaying": { "message": "Nichts wird abgespielt" },
|
||||
"musicSelectSong": { "message": "Wähle ein Lied" },
|
||||
"musicToStart": { "message": "um die Wiedergabe zu starten" },
|
||||
"miniplayerDownloadSong": { "message": "Lied herunterladen" },
|
||||
"miniplayerDownloadAlbum": { "message": "M3U-Album herunterladen" },
|
||||
"musicSelectSong": { "message": "Wählen Sie einen Song" },
|
||||
"musicToStart": { "message": "zum Abspielen" },
|
||||
"miniplayerDownloadSong": { "message": "Song herunterladen" },
|
||||
"miniplayerDownloadAlbum": { "message": "Album M3U herunterladen" },
|
||||
"miniplayerVolume": { "message": "Lautstärke" },
|
||||
"miniplayerShuffle": { "message": "Zufall" },
|
||||
"miniplayerShuffle": { "message": "Zufallswiedergabe" },
|
||||
"miniplayerEqualizer": { "message": "Equalizer" },
|
||||
"miniplayerOpenList": { "message": "Liste öffnen" },
|
||||
"eqTitle": { "message": "Grafischer Equalizer" },
|
||||
@ -136,9 +134,9 @@
|
||||
"eqPresetPop": { "message": "Pop" },
|
||||
"eqPresetJazz": { "message": "Jazz" },
|
||||
"eqPresetClassical": { "message": "Klassik" },
|
||||
"eqPresetBassBoost": { "message": "Bass-Boost" },
|
||||
"eqPresetBassBoost": { "message": "Bass-Verstärkung" },
|
||||
"eqPreampLabel": { "message": "Vorverstärker" },
|
||||
"infoModalTitle": { "message": "Information" },
|
||||
"infoModalTitle": { "message": "Informationen" },
|
||||
"infoModalFieldTitle": { "message": "Titel:" },
|
||||
"infoModalFieldArtist": { "message": "Künstler:" },
|
||||
"infoModalFieldAlbum": { "message": "Album:" },
|
||||
@ -151,18 +149,18 @@
|
||||
"lang_de": { "message": "Deutsch" },
|
||||
"lang_it": { "message": "Italienisch" },
|
||||
"lang_pt": { "message": "Portugiesisch" },
|
||||
"essentialFeaturesNotSupported": { "message": "Dein Browser unterstützt wesentliche Funktionen nicht." },
|
||||
"essentialFeaturesNotSupported": { "message": "Ihr Browser unterstützt keine wesentlichen Funktionen." },
|
||||
"dbAccessError": { "message": "Fehler beim Zugriff auf die lokale Datenbank." },
|
||||
"dbUpdateNeeded": { "message": "Die Datenbank muss aktualisiert werden, bitte lade die Seite neu." },
|
||||
"dbBlocked": { "message": "Bitte schließe andere Tabs dieser Anwendung, um fortzufahren." },
|
||||
"dbUpdateNeeded": { "message": "Die Datenbank muss aktualisiert werden, bitte laden Sie die Seite neu." },
|
||||
"dbBlocked": { "message": "Bitte schließen Sie andere Tabs dieser Anwendung, um fortzufahren." },
|
||||
"deletingContentData": { "message": "Lokale Inhaltsdaten werden gelöscht..." },
|
||||
"noContentDataToDelete": { "message": "Keine Inhaltsdaten zum Löschen." },
|
||||
"noContentDataToDelete": { "message": "Keine Inhaltsdaten zum Löschen vorhanden." },
|
||||
"contentDataDeleted": { "message": "Inhaltsdaten aus IndexedDB gelöscht." },
|
||||
"errorDeletingData": { "message": "Fehler beim Löschen der Daten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailable": { "message": "Texteditor nicht verfügbar." },
|
||||
"errorLoadingTokens": { "message": "Fehler beim Laden der Tokens in den Editor." },
|
||||
"errorLoadingTokens": { "message": "Fehler beim Laden der Tokens zum Bearbeiten." },
|
||||
"errorLoadingTokensMessage": { "message": "Fehler beim Laden der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor zum Speichern nicht verfügbar." },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor nicht zum Speichern verfügbar." },
|
||||
"invalidJsonFormat": { "message": "Ungültiges JSON-Format. Muss { \"tokens\": [...] } sein" },
|
||||
"tokensSaved": { "message": "Tokens erfolgreich gespeichert." },
|
||||
"errorSavingTokens": { "message": "Fehler beim Speichern der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
@ -174,253 +172,270 @@
|
||||
"dbImported": { "message": "Datenbank erfolgreich importiert." },
|
||||
"errorImportingDb": { "message": "Fehler beim Importieren der Datenbank: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"updatingView": { "message": "Ansicht wird mit neuen Daten aktualisiert..." },
|
||||
"confirmClearContent": { "message": "Bist du sicher, dass du die lokalen Inhaltsdaten (Filme, Serien, Musik usw.) löschen möchtest? Favoriten und Einstellungen werden NICHT gelöscht." },
|
||||
"trailerNotFound": { "message": "Für diesen Titel wurde kein Trailer gefunden." },
|
||||
"confirmClearHistory": { "message": "Bist du sicher, dass du deinen gesamten Wiedergabeverlauf löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden." },
|
||||
"confirmClearContent": { "message": "Sind Sie sicher, dass Sie die lokalen Inhaltsdaten (Filme, Serien, Musik usw.) löschen möchten? Favoriten und Einstellungen werden NICHT gelöscht." },
|
||||
"trailerNotFound": { "message": "Kein Trailer für diesen Titel gefunden." },
|
||||
"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." },
|
||||
"historyItemDeleted": { "message": "Eintrag aus dem Verlauf gelöscht." },
|
||||
"errorGeneratingScript": { "message": "Generiere zuerst ein Skript, um es kopieren zu können." },
|
||||
"historyItemDeleted": { "message": "Element aus dem Verlauf gelöscht." },
|
||||
"errorGeneratingScript": { "message": "Generieren Sie zuerst ein Skript, um es kopieren zu können." },
|
||||
"scriptCopied": { "message": "PHP-Skript in die Zwischenablage kopiert." },
|
||||
"errorCopyingScript": { "message": "Fehler beim Kopieren des Skripts." },
|
||||
"scriptGenerated": { "message": "PHP-Skript generiert." },
|
||||
"errorLoadingAlbum": { "message": "Fehler beim Laden des Albums: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Fehler: Es wurde kein Fotoserver ausgewählt." },
|
||||
"loadingGenres": { "message": "Lade Genres..." },
|
||||
"loadingGenres": { "message": "Genres laden..." },
|
||||
"errorLoadingGenres": { "message": "Fehler beim Laden" },
|
||||
"noContentFound": { "message": "Keine Ergebnisse gefunden." },
|
||||
"couldNotLoadContent": { "message": "Inhalt konnte nicht geladen werden." },
|
||||
"noFavorites": { "message": "Du hast noch keine Favoriten." },
|
||||
"noFavorites": { "message": "Sie haben noch keine Favoriten." },
|
||||
"errorLoadingFavorites": { "message": "Fehler beim Laden der Favoriten." },
|
||||
"historyEmpty": { "message": "Dein Verlauf ist leer." },
|
||||
"historyEmptySub": { "message": "Durchsuche und schaue Inhalte an, damit sie hier erscheinen." },
|
||||
"errorGeneratingRecommendations": { "message": "Fehler beim Erstellen von Empfehlungen." },
|
||||
"noRecommendations": { "message": "Wir müssen dich besser kennenlernen, um dir Empfehlungen geben zu können!" },
|
||||
"errorGeneratingStats": { "message": "Fehler beim Erstellen von Statistiken." },
|
||||
"historyEmpty": { "message": "Ihr Verlauf ist leer." },
|
||||
"historyEmptySub": { "message": "Durchsuchen und schauen Sie Inhalte, damit sie hier erscheinen." },
|
||||
"errorGeneratingRecommendations": { "message": "Fehler beim Generieren von Empfehlungen." },
|
||||
"noRecommendations": { "message": "Wir müssen Sie besser kennenlernen, um Empfehlungen geben zu können!" },
|
||||
"errorGeneratingStats": { "message": "Fehler beim Generieren von Statistiken." },
|
||||
"noServersForToken": { "message": "Keine zugehörigen Server für dieses Token gefunden." },
|
||||
"searchingActorContent": { "message": "Suche nach Inhalten von $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"searchingActorContent": { "message": "Suche Inhalt von $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorLoadingActorContent": { "message": "Inhalt für $actorName$ konnte nicht geladen werden.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorAddingStream": { "message": "Fehler beim Hinzufügen von Stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "Die PHP-Server-URL ist nicht konfiguriert. Bitte richte sie in den Einstellungen ein." },
|
||||
"searchingStreams": { "message": "Suche nach Streams für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"sendingStreams": { "message": "Sende $count$ Stream(s) an den Server...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream(s) erfolgreich hinzugefügt." },
|
||||
"generatingM3U": { "message": "Generiere M3U für \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "\"\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Fehler beim Generieren der M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"generatingM3U": { "message": "Generiere M3U für „$title$“", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "„$title$“ heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Fehler beim Generieren von M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Einstellungen erfolgreich gespeichert." },
|
||||
"errorSavingSettings": { "message": "Fehler beim Speichern der Einstellungen in der Datenbank." },
|
||||
"languageChangeReload": { "message": "Sprache geändert. Die Anwendung wird jetzt neu geladen." },
|
||||
"addedToFavorites": { "message": "Zu Favoriten hinzugefügt." },
|
||||
"removedFromFavorites": { "message": "Aus Favoriten entfernen." },
|
||||
"plexScanInProgress": { "message": "Plex-Scan läuft bereits." },
|
||||
"plexScanStarting": { "message": "Starte Plex-Scan..." },
|
||||
"removedFromFavorites": { "message": "Aus Favoriten entfernt." },
|
||||
"plexScanInProgress": { "message": "Der Plex-Scan läuft bereits." },
|
||||
"plexScanStarting": { "message": "Plex-Scan wird gestartet..." },
|
||||
"noPlexTokens": { "message": "Keine Plex-Tokens konfiguriert." },
|
||||
"clearingSections": { "message": "Lösche Abschnitte: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Abschnitte gelöscht." },
|
||||
"tokenFoundServers": { "message": "Token $token$... hat $count$ Server gefunden.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Fehler bei der Verarbeitung von Token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Initiale Scan-Phase abgeschlossen." },
|
||||
"clearingSections": { "message": "Abschnitte werden gelöscht: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"initialScanPhaseComplete": { "message": "Erste Scanphase abgeschlossen." },
|
||||
"retryPhaseFinished": { "message": "Wiederholungsphase abgeschlossen." },
|
||||
"plexScanFinished": { "message": "Scan abgeschlossen. Aktualisiere Inhalte..." },
|
||||
"plexScanFatalError": { "message": "FATALER FEHLER: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"plexScanFinished": { "message": "Scan abgeschlossen. Inhalte werden aktualisiert..." },
|
||||
"scanCancelled": { "message": "Scan vom Benutzer abgebrochen." },
|
||||
"scanCancelledInfo": { "message": "Scan abgebrochen." },
|
||||
"retyingSection": { "message": "Wiederhole Abschnitt \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[ERFOLG] Wiederholung von \"$title$\" abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[FINALER FEHLER] Wiederholung für \"$title$\" fehlgeschlagen: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"noRetriesPending": { "message": "Keine ausstehenden Wiederholungen." },
|
||||
"startingRetryPhase": { "message": "Starte Wiederholungsphase für $count$ Abschnitte...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Wiederholungsphase abgebrochen." },
|
||||
"errorInitializingMusicPlayer": { "message": "Fehler beim Initialisieren des Musik-Players." },
|
||||
"criticalErrorLoadingMusic": { "message": "Kritischer Fehler beim Laden der Musikdaten." },
|
||||
"errorLoadingArtists": { "message": "Fehler beim Laden der Künstler." },
|
||||
"dbUnavailableError": { "message": "Fehler: Datenbank nicht verfügbar." },
|
||||
"updatingMusicData": { "message": "Aktualisiere Musikdaten..." },
|
||||
"updatingMusicData": { "message": "Musikdaten werden aktualisiert..." },
|
||||
"musicDataUpdated": { "message": "Musikdaten aktualisiert." },
|
||||
"errorFetchingArtistSongs": { "message": "Fehler beim Abrufen der Lieder des Künstlers." },
|
||||
"errorLoadingSongs": { "message": "Fehler beim Laden der Lieder." },
|
||||
"errorFetchingArtistSongs": { "message": "Fehler beim Abrufen der Künstlersongs." },
|
||||
"errorLoadingSongs": { "message": "Fehler beim Laden der Songs." },
|
||||
"noArtistsFound": { "message": "Keine Künstler gefunden." },
|
||||
"artistsCounter": { "message": "$start$-$end$ von $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Künstler", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Lädt..." },
|
||||
"noSongsFound": { "message": "Keine Lieder gefunden." },
|
||||
"shuffleOn": { "message": "Zufallsmodus aktiviert." },
|
||||
"shuffleOff": { "message": "Zufallsmodus deaktiviert." },
|
||||
"downloadingSong": { "message": "Starte Download von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"\"$title$\" heruntergeladen.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Fehler beim Herunterladen von \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generiere M3U für \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U für Album \"$artist$\" generiert.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"shuffleOn": { "message": "Zufallswiedergabe aktiviert." },
|
||||
"shuffleOff": { "message": "Zufallswiedergabe deaktiviert." },
|
||||
"playbackError": { "message": "Wiedergabefehler" },
|
||||
"errorLabel": { "message": "Fehler" },
|
||||
"reloadingPage": { "message": "Seite wird neu geladen..." },
|
||||
"viewed": { "message": "Gesehen" },
|
||||
"local": { "message": "Lokal" },
|
||||
"topRatedSort": {"message": "Bestbewertet"},
|
||||
"topRatedSort": {"message": "Am besten bewertet"},
|
||||
"recentSort": {"message": "Neueste"},
|
||||
"popularSort": {"message": "Beliebte"},
|
||||
"popularSort": {"message": "Beliebteste"},
|
||||
"moviesSectionTitle": {"message": "Filme"},
|
||||
"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"}}},
|
||||
"explore": {"message": "Entdecken"},
|
||||
"noGenre": {"message": "Unkategorisiert"},
|
||||
"synopsis": {"message": "Zusammenfassung"},
|
||||
"noSynopsis": {"message": "Keine Zusammenfassung verfügbar."},
|
||||
"explore": {"message": "Erkunden"},
|
||||
"noGenre": {"message": "Ohne Kategorie"},
|
||||
"synopsis": {"message": "Synopsis"},
|
||||
"noSynopsis": {"message": "Keine Synopsis verfügbar."},
|
||||
"director": {"message": "Regisseur:"},
|
||||
"writer": {"message": "Autor:"},
|
||||
"writer": {"message": "Drehbuchautor:"},
|
||||
"viewOnImdb": {"message": "Auf IMDb ansehen"},
|
||||
"watchTrailer": {"message": "Trailer ansehen"},
|
||||
"addToFavorites": {"message": "Zu Favoriten hinzufügen"},
|
||||
"removeFromFavorites": {"message": "Aus Favoriten entfernen"},
|
||||
"notAvailable": {"message": "Nicht verfügbar"},
|
||||
"mainCast": {"message": "Hauptbesetzung"},
|
||||
"seasonsAndEpisodes": {"message": "Staffeln & Episoden"},
|
||||
"mainCast": {"message": "Hauptdarsteller"},
|
||||
"seasonsAndEpisodes": {"message": "Staffeln und Episoden"},
|
||||
"similarContent": {"message": "Ähnlicher Inhalt"},
|
||||
"episodesCount": {"message": "$count$ Episoden", "placeholders": {"count": {"content": "$1"}}},
|
||||
"seasonsCount": {"message": "$count$ Staffeln", "placeholders": {"count": {"content": "$1"}}},
|
||||
"runtimeMinutes": {"message": "$count$ Min.", "placeholders": {"count": {"content": "$1"}}},
|
||||
"noTrailerFound": {"message": "Für diesen Titel wurde kein Trailer gefunden."}, "fatalInitError": {"message": "Fataler Initialisierungsfehler"},
|
||||
"fatalInitErrorSub": {"message": "Die Anwendung konnte nicht geladen werden."},
|
||||
"invalidStreamInfo": {"message": "Ungültige Information."},
|
||||
"runtimeMinutes": {"message": "$count$ Min", "placeholders": {"count": {"content": "$1"}}},
|
||||
"noTrailerFound": {"message": "Kein Trailer für diesen Titel gefunden."},
|
||||
"fatalInitError": {"message": "Fataler Initialisierungsfehler"},
|
||||
"fatalInitErrorSub": {"message": "Anwendung konnte nicht geladen werden."},
|
||||
"invalidStreamInfo": {"message": "Ungültige Informationen."},
|
||||
"dbUnavailableForStreams": {"message": "Lokale Datenbank nicht verfügbar."},
|
||||
"noPlexServersForStreams": {"message": "Keine Plex-Server."},
|
||||
"notFoundOnServers": {"message": "\"query$\" auf Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"noPlexServersForStreams": {"message": "Keine Plex-Server vorhanden."},
|
||||
"notFoundOnServers": {"message": "„$query$“ wurde auf den Plex-Servern nicht gefunden.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "Gerade eben" },
|
||||
"relativeTime_minutesAgo": { "message": "Vor $count$ Minuten", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_hoursAgo": { "message": "Vor $count$ Stunden", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_yesterday": { "message": "Gestern" },
|
||||
"relativeTime_daysAgo": { "message": "Vor $count$ Tagen", "placeholders": { "count": { "content": "$1" } } },
|
||||
"errorLoadingDetails": { "message": "Fehler beim Laden der Details" },
|
||||
"errorLoadingLocalContent": { "message": "Fehler beim Laden lokaler Inhalte." },
|
||||
"errorServerResponse": { "message": "Nicht erfolgreiche Antwort vom Server." },
|
||||
"errorPlexApi": { "message": "Fehler $status$ von der Plex-API.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Fehler beim Parsen von Plex-XML." },
|
||||
"untitled": { "message": "Ohne Titel" },
|
||||
"errorLoadingLocalContent": { "message": "Fehler beim Laden des lokalen Inhalts." },
|
||||
"errorServerResponse": { "message": "Unerfolgreiche Serverantwort." },
|
||||
"errorPlexApi": { "message": "Plex API-Fehler $status$.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Fehler beim Parsen der Plex-XML." },
|
||||
"untitled": { "message": "Unbetitelt" },
|
||||
"itemCount": { "message": "$count$ Elemente", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Keine Foto-Server" },
|
||||
"jellyfinScanInProgress": { "message": "Jellyfin-Scan läuft bereits." },
|
||||
"jellyfinScanning": { "message": "Scanne Jellyfin..." },
|
||||
"jellyfinMissingCredentials": { "message": "Bitte vervollständige die Jellyfin-URL und den Benutzernamen." },
|
||||
"jellyfinConnecting": { "message": "Verbinde mit Jellyfin unter: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Keine Fotoserver" },
|
||||
"jellyfinScanInProgress": { "message": "Der Jellyfin-Scan läuft bereits." },
|
||||
"jellyfinScanning": { "message": "Jellyfin wird gescannt..." },
|
||||
"jellyfinMissingCredentials": { "message": "Bitte geben Sie die Jellyfin-URL und den Benutzernamen an." },
|
||||
"jellyfinConnecting": { "message": "Verbindung zu Jellyfin wird hergestellt unter: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Jellyfin-Authentifizierung fehlgeschlagen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Jellyfin-Authentifizierung erfolgreich." },
|
||||
"jellyfinFetchingLibraries": { "message": "Bibliotheken werden abgerufen..." },
|
||||
"jellyfinFetchFailed": { "message": "Fehler beim Abrufen der Bibliotheken: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "Keine Film- oder Serienbibliotheken auf Jellyfin gefunden." },
|
||||
"jellyfinNoMediaLibraries": { "message": "Keine Film- oder Serienbibliotheken in Jellyfin gefunden." },
|
||||
"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" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Fehler beim Scannen der Bibliothek '$libraryName.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"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." },
|
||||
"notFoundOnJellyfin": { "message": "\"query$\" auf Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "\"query$\" auf keinem Server gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnJellyfin": { "message": "„$query$“ wurde in Jellyfin nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "„$query$“ wurde auf keinem Server gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"localOnPlex": { "message": "Auf Plex" },
|
||||
"searchOnPlex": { "message": "Auf Plex suchen" },
|
||||
"jellyfinTitle": { "message": "Jellyfin-Inhalt" },
|
||||
"noJellyfinContent": { "message": "Kein Jellyfin-Inhalt gefunden." },
|
||||
"noJellyfinContentSub": { "message": "Stelle sicher, dass du deinen Jellyfin-Server in den Einstellungen gescannt hast." },
|
||||
"noJellyfinContentSub": { "message": "Stellen Sie sicher, dass Sie Ihren Jellyfin-Server in den Einstellungen gescannt haben." },
|
||||
"activityViewerTitle": { "message": "Server-Aktivitätsanzeige" },
|
||||
"activitySelectServer": { "message": "Wählen Sie einen Server aus" },
|
||||
"activitySelectServer": { "message": "Server auswählen" },
|
||||
"activityCheckBtn": { "message": "Aktualisieren" },
|
||||
"activityNoSessions": { "message": "Keine aktiven Sitzungen auf diesem Server." },
|
||||
"activitySessionUser": { "message": "Benutzer" },
|
||||
"activitySessionDevice": { "message": "Gerät" },
|
||||
"activitySessionContent": { "message": "Inhalt" },
|
||||
"activitySessionState": { "message": "Status" },
|
||||
"activitySessionIdentifier": { "message": "Client-Kennung" },
|
||||
"activitySessionIdentifier": { "message": "Client-Identifikator" },
|
||||
"activityCopyID": { "message": "ID kopieren" },
|
||||
"activityError": { "message": "Serveraktivität konnte nicht abgerufen werden." },
|
||||
"activityCopied": { "message": "Kennung in die Zwischenablage kopiert!" },
|
||||
"activityCopyError": { "message": "Fehler beim Kopieren der Kennung." },
|
||||
"activityError": { "message": "Aktivität des Servers konnte nicht abgerufen werden." },
|
||||
"activityCopied": { "message": "Identifikator in die Zwischenablage kopiert!" },
|
||||
"activityCopyError": { "message": "Fehler beim Kopieren des Identifikators." },
|
||||
"noProvidersFound": { "message": "Keine Anbieter gefunden." },
|
||||
"availableOnPlex": { "message": "Auf Plex verfügbar" },
|
||||
"navM3uGenerator": { "message": "M3U-Generator" },
|
||||
"m3uGeneratorTitle": { "message": "M3U-Wiedergabelisten-Generator" },
|
||||
"selectAServer": { "message": "Wählen Sie einen Server aus..." },
|
||||
"availableOnPlex": { "message": "Verfügbar auf Plex" },
|
||||
"m3uGeneratorTitle": { "message": "M3U-Listen-Generator" },
|
||||
"selectAServer": { "message": "Server auswählen..." },
|
||||
"downloadM3u": { "message": "M3U herunterladen" },
|
||||
"m3uGenerator": { "message": "M3U-Generator" },
|
||||
"selectServer": { "message": "Server auswählen" },
|
||||
"selectLibraries": { "message": "Bibliotheken auswählen" },
|
||||
"howToUse": { "message": "Anleitung" },
|
||||
"m3uInstruction1": { "message": "Wählen Sie einen Server aus der Liste aus." },
|
||||
"m3uInstruction2": { "message": "Wählen Sie eine oder mehrere Bibliotheken aus, die Sie einschließen möchten." },
|
||||
"m3uInstruction1": { "message": "Wählen Sie einen Server aus der Liste." },
|
||||
"m3uInstruction2": { "message": "Wählen Sie eine oder mehrere Bibliotheken zum Einschließen aus." },
|
||||
"m3uInstruction3": { "message": "Klicken Sie auf die Download-Schaltfläche." },
|
||||
"m3uInstruction4": { "message": "Importieren Sie die .m3u-Datei in Ihren kompatiblen Player." },
|
||||
"settingsRegionLabel": { "message": "Region für die Inhaltsentdeckung" },
|
||||
"allRegions": { "message": "Alle Regionen" },
|
||||
"chatOpen": { "message": "Chat öffnen" },
|
||||
"chatTitle": { "message": "KI-Assistent" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Nachricht eingeben..." },
|
||||
"chatPlaceholder": { "message": "Geben Sie Ihre Nachricht ein..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Entschuldigung, ich konnte keine Antwort erhalten. Bitte versuchen Sie es erneut." },
|
||||
"chatWelcome": { "message": "Willkommen! Ich bin Ihr CinePlex-Assistent. Fragen Sie mich nach Filmen, Serien oder allem, was Sie sonst noch wissen möchten." },
|
||||
"chatApiKeyMissing": { "message": "Der OpenAI-API-Schlüssel ist nicht festgelegt. Bitte konfigurieren Sie ihn in den Erweiterungseinstellungen." },
|
||||
"chatWelcome": { "message": "Willkommen! Ich bin Ihr CinePlex-Assistent. Fragen Sie mich nach Filmen, Serien oder allem, was Sie wissen möchten." },
|
||||
"chatGoogleApiKeyMissing": { "message": "Der Google Gemini API-Schlüssel ist nicht konfiguriert. Bitte richten Sie ihn in den Erweiterungseinstellungen ein, um den KI-Assistenten zu verwenden." },
|
||||
"chatApiInvalidResponse": { "message": "Die API hat eine ungültige Antwort zurückgegeben. Bitte versuchen Sie es erneut." },
|
||||
"chatApiError": { "message": "Fehler bei der Kommunikation mit dem KI-Assistenten" },
|
||||
"downloadAll": { "message": "Alles herunterladen" },
|
||||
"download": { "message": "Herunterladen" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Durchsucht die Plex-Bibliothek nach Filmen oder Serien." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "Der zu suchende Titel." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "Die Art des zu suchenden Inhalts (Film oder Serie)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navigiert zu einer bestimmten Seite in der Anwendung." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "Die Seite, zu der navigiert werden soll." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Ruft Benutzerstatistiken ab." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Details eines Films oder einer Serie an." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "Die Art des Inhalts (Film oder Serie)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Fügt einen Film oder eine Serie zur Wiedergabeliste hinzu." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "Die Art des Inhalts (Film oder Serie)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Lädt die Wiedergabeliste für einen Film oder eine Serie herunter." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "Die Art des Inhalts (Film oder Serie)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zu den Favoriten hinzu oder entfernt sie daraus." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "Die Art des Inhalts (Film oder Serie)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Ruft Empfehlungen für den Benutzer ab." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Wendet Filter auf die aktuelle Ansicht an." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "Die Art des zu filternden Inhalts (Film oder Serie)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "Das zu filternde Genre." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "Das zu filternde Jahr." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "Die Reihenfolge, in der die Ergebnisse sortiert werden sollen." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Spielt Musik von einem bestimmten Künstler ab." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "Der Name des Künstlers." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Löscht den Chat-Verlauf." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Löscht die Datenbank der Erweiterung." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Aktualisiert alle Plex-Token." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Fügt einen neuen Plex-Token hinzu." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "Der hinzuzufügende Plex-Token." },
|
||||
"aiToolChangeRegionDesc": { "message": "Ändert die Region für die Inhaltsentdeckung." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "Der zweibuchstabige Regionscode (z. B. US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Löscht alle Benutzerfavoriten." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Löscht die Empfehlungsansicht." },
|
||||
"aiToolSearchLibraryDesc": { "message": "Sucht in der Plex-Bibliothek des Benutzers nach Filmen oder Serien nach Titel." },
|
||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Der Titel des Films oder der Serie, die gesucht werden soll." },
|
||||
"aiToolSearchLibraryTypeParamDesc": { "message": "Der Typ des Inhalts, der gesucht werden soll. Kann 'movie' für Filme oder 'series' für Serien sein. (Optional)." },
|
||||
"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'." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Ruft die Bibliotheksstatistiken des Benutzers ab und zeigt sie an, wie z.B. die Gesamtzahl der einzigartigen Filme, Serien und Künstler." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Zeigt die Detailseite eines bestimmten Films oder einer Serie nach Titel und Typ an." },
|
||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "Der genaue Titel des Films oder der Serie." },
|
||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Fügt einen Film oder eine Serie zur aktuellen Wiedergabeliste des Benutzers hinzu, um sie an einen konfigurierten PHP-Server zu streamen." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Der Titel des hinzuzufügenden Films oder der Serie." },
|
||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "Der Inhaltstyp. 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." },
|
||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Ein Array von Film- oder Serientiteln zum Suchen und Herunterladen." },
|
||||
"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." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Fügt einen Film oder eine Serie zur Favoritenliste des Benutzers hinzu oder entfernt sie." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Der Titel des Films oder der Serie." },
|
||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "Der Inhaltstyp. Muss 'movie' oder 'series' sein." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Generiert und zeigt eine Liste von Film- oder Serienempfehlungen basierend auf dem Wiedergabeverlauf und den Favoriten des Benutzers an." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Wendet Filter auf die aktuelle Film- oder Serienansicht an, wodurch die Ergebnisse nach Typ, Genre, Jahr und Sortierreihenfolge verfeinert werden können." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Der Inhaltstyp, auf den die Filter angewendet werden sollen. Muss 'movie' oder 'series' sein." },
|
||||
"aiToolApplyFiltersGenreParamDesc": { "message": "Der Name des Genres, nach dem gefiltert werden soll (z.B. 'Action', 'Drama')." },
|
||||
"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)." },
|
||||
"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." },
|
||||
"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." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Startet einen vollständigen Scan aller Plex-Server und Bibliotheken, die mit den in der Erweiterung konfigurierten Tokens verknüpft sind. Aktualisiert alle Filme, Serien, Künstler und Fotos." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Fügt der Konfiguration der Erweiterung einen neuen X-Plex-Token hinzu, wodurch die Anwendung Inhalte von neuen Plex-Servern scannen kann." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "Die X-Plex-Token-Zeichenfolge, die hinzugefügt werden soll." },
|
||||
"aiToolChangeRegionDesc": { "message": "Ändert die Region, die für die Inhaltserkennung in der TMDB-API verwendet wird. Dies wirkt sich auf die in den Film- und Serienabschnitten angezeigten Ergebnisse sowie auf Streaming-Anbieter aus." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "Der zweibuchstabige ISO 3166-1 Ländercode für die neue Region (z.B. 'US' für die Vereinigten Staaten, 'ES' für Spanien, 'MX' für Mexiko)." },
|
||||
"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." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Leert die Empfehlungsansicht und löscht zwischengespeicherte Empfehlungen." },
|
||||
"aiToolSearchNotFound": { "message": "„$query$“ in Ihrer Bibliothek nicht gefunden.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"aiToolNavigateSuccess": { "message": "Zur Seite „$page$“ navigiert.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolNavigateError": { "message": "Fehler beim Navigieren zur Seite „$page$“.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolStatsError": { "message": "Fehler beim Abrufen der Statistiken." },
|
||||
"aiToolItemNotFound": { "message": "Element „$title$“ nicht gefunden.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolShowItemDetailsSuccess": { "message": "Details für „$title$“ werden angezeigt.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolAddToPlaylistSuccess": { "message": "„$title$“ zur Wiedergabeliste hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteAdded": { "message": "„$title$“ zu Favoriten hinzugefügt.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "„$title$“ aus Favoriten entfernt.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "Empfehlungen werden angezeigt." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre „$genre$“ nicht gefunden.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"aiToolApplyFiltersSuccess": { "message": "Filter erfolgreich angewendet." },
|
||||
"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" } } },
|
||||
"aiToolPlayMusicNoSongs": { "message": "Keine Songs für „$artist_name$“ gefunden.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolPlayMusicSuccess": { "message": "Spiele Musik von „$artist_name$“.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolChatHistoryCleared": { "message": "Chat-Verlauf gelöscht." },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favoriten gelöscht." },
|
||||
"aiToolFavoritesClearError": { "message": "Fehler beim Löschen der Favoriten: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Empfehlungen gelöscht." },
|
||||
"aiToolRecommendationsClearError": { "message": "Fehler beim Löschen der Empfehlungen: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Datenbank gelöscht. Die Seite wird jetzt 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" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "Das Löschen der Datenbank ist blockiert. Bitte schließen Sie andere Tabs der Anwendung." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Alle Token wurden erfolgreich aktualisiert." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "Das Löschen der Datenbank ist blockiert. Schließen Sie andere App-Tabs." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Alle Tokens erfolgreich aktualisiert." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Fehler beim Aktualisieren der Tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Plex-Token erfolgreich hinzugefügt." },
|
||||
"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" } } },
|
||||
"aiToolChangeRegionError": { "message": "Fehler beim Ändern der Region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "Sie sind ein erfahrener Film- und Serienassistent namens CinePlex. Ihre Hauptfunktion ist es, Benutzern bei der Interaktion mit ihrer Medienbibliothek und der Entdeckung von Inhalten zu helfen. Befolgen Sie diese Regeln: 1. Wenn ein Benutzer nach einer Liste oder Empfehlung fragt (z. B. 'nennen Sie mir 5 Horrorfilme', 'die besten Science-Fiction-Serien'), MÜSSEN Sie Ihr eigenes Wissen verwenden, um die Liste zu erstellen und sie in einem nummerierten oder Aufzählungsformat darzustellen. VERWENDEN Sie KEINE Werkzeuge für diese anfängliche Entdeckungsaufgabe. 2. Nachdem Sie die Liste präsentiert haben, wenn der Benutzer Sie bittet, sie herunterzuladen, zu überprüfen oder eine M3U zu erstellen, DANN und nur dann, verwenden Sie das Werkzeug 'generate_m3u_from_titles_list' und übergeben Sie ihm die Titel, die Sie gerade erwähnt haben. 3. Für jede andere Aktion wie das Navigieren in der App, das Abrufen von Statistiken oder die Suche nach einem BESTIMMTEN TITEL in der Bibliothek des Benutzers, verwenden Sie die entsprechenden Werkzeuge. Seien Sie prägnant, freundlich und effizient." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "Die Liste der zu verarbeitenden Titel ist leer." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "Anscheinend haben Sie keinen der Titel aus dieser Liste auf Ihren lokalen Servern." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "Der zu suchende Inhaltstyp: 'movie' oder 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "Ein benutzerdefinierter Dateiname für die heruntergeladene M3U-Wiedergabeliste." },
|
||||
"aiToolGenerateM3USuccess": { "message": "Verstanden! Ich erstelle eine M3U-Wiedergabeliste mit $1 Elementen. Der Download sollte in Kürze beginnen.", "placeholders": { "1": { "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. **BEHAUPTEN** Sie **NIEMALS**, eine Aktion ausgeführt zu haben, wenn Sie dafür kein Werkzeug verwendet haben. Sagen Sie zum Beispiel nicht 'Ich habe X heruntergeladen', wenn Sie das Download-Werkzeug nicht verwendet haben. 2. Bei Anfragen nach Empfehlungen oder Listen (z. B. 'gib mir 5 Horrorfilme') verwenden Sie Ihr eigenes Wissen, um die Liste zu erstellen. Präsentieren Sie sie in einem nummerierten oder Aufzählungsformat. Nachdem Sie die Liste angezeigt haben, fragen Sie den Benutzer proaktiv, ob er möchte, dass Sie die Verfügbarkeit auf seinen lokalen Servern überprüfen und eine M3U-Datei erstellen. 3. **NUR** wenn der Benutzer bestätigt, dass er die Liste überprüfen oder herunterladen möchte, verwenden Sie das Werkzeug `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 oder die Suche nach einem bestimmten Titel verwenden Sie die entsprechenden Werkzeuge. Seien Sie immer prägnant, freundlich und effizient." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Überprüft eine Liste von Film- oder Serientiteln mit den lokalen Servern des Benutzers und generiert und lädt bei Übereinstimmungen eine M3U-Wiedergabelistendatei herunter." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Eine Liste von Film- oder Serientiteln zum Überprüfen und Herunterladen." },
|
||||
"aiToolViewingHistoryCleared": { "message": "Wiedergabeverlauf gelöscht." },
|
||||
"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." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Bitte geben Sie eine Liste von Titeln an, um die Wiedergabeliste zu erstellen." },
|
||||
"aiToolM3UCheckingTitles": { "message": "Überprüfe die Titel auf deinen lokalen Servern..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Ich konnte keinen der Filme oder Serien aus der Liste auf deinen lokalen Servern finden." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Fertig! Ich habe $1 der $2 Titel auf deinen Servern gefunden und den Download der M3U-Wiedergabeliste gestartet.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
|
||||
"aiToolM3UCheckingTitles": { "message": "Titel werden auf Ihren lokalen Servern überprüft..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Ich habe keinen der Filme oder Serien aus der Liste auf Ihren lokalen Servern gefunden." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Erledigt! Ich habe $1 von $2 Titeln auf Ihren Servern gefunden und den M3U-Playlist-Download gestartet.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||
"backToProviders": { "message": "Zurück zu Anbietern" },
|
||||
"artistsCounterSingle": { "message": "$total$ Künstler", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Laden..." },
|
||||
"downloadingSong": { "message": "Download von „$title$“ wird gestartet", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "„$title$“ heruntergeladen.", "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" } } },
|
||||
"albumM3UGenerated": { "message": "M3U für Album „$artist$“ generiert.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "Abschnitt „$title$“ wird erneut versucht", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[ERFOLG] Wiederholung für „$title$“ abgeschlossen.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ENDGÜLTIGER FEHLER] Wiederholung fehlgeschlagen für „$title$“: $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"startingRetryPhase": { "message": "Wiederholungsphase für $count$ Abschnitte wird gestartet...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"tokenFoundServers": { "message": "Token $token$... hat $count$ Server gefunden.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Fehler beim Verarbeiten von Token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"plexScanFatalError": { "message": "FATALER FEHLER: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Fehler während des Scans: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "Plex-Scan wird gestoppt..." },
|
||||
"invalidTokenProvided": { "message": "Ungültiger Token bereitgestellt." },
|
||||
"tokenAlreadyExists": { "message": "Der Token existiert bereits." },
|
||||
"tokenAddedSuccessfully": { "message": "Token erfolgreich hinzugefügt." },
|
||||
"noStreamsFoundForSelection": { "message": "Keine Streams für die Auswahl gefunden." },
|
||||
"autoplayBlocked": { "message": "Automatische Wiedergabe blockiert." },
|
||||
"welcomeToCinePlex": { "message": "" },
|
||||
"page": { "message": "Seite" }
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
"appName": { "message": "CinePlex" },
|
||||
"appDescription": { "message": "Scans Plex servers to find content and displays it in the interface" },
|
||||
"appTagline": { "message": "Movies, Series & Music" },
|
||||
"appLocaleCode": { "message": "en-US" },
|
||||
"appTagline": { "message": "Movies, Series, and Music" },
|
||||
"appLocaleCode": { "message": "en" },
|
||||
"toggleNavigation": { "message": "Toggle Navigation" },
|
||||
"searchPlaceholder": { "message": "Search for movies or series..." },
|
||||
"searchPlaceholder": { "message": "Search movies or series..." },
|
||||
"openMusicPlayer": { "message": "Open Music Player" },
|
||||
"settings": { "message": "Settings" },
|
||||
"navMovies": { "message": "Movies" },
|
||||
@ -16,10 +16,11 @@
|
||||
"navHistory": { "message": "History" },
|
||||
"navRecommendations": { "message": "Recommendations" },
|
||||
"navMusic": { "message": "Music" },
|
||||
"navM3uGenerator": { "message": "M3U Generator" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Explore thousands of movies and series." },
|
||||
"addStream": { "message": "Add Stream" },
|
||||
"moreInfo": { "message": "More Info" },
|
||||
"moreInfo": { "message": "More Information" },
|
||||
"popularMovies": { "message": "Popular Movies" },
|
||||
"allGenres": { "message": "All Genres" },
|
||||
"allYears": { "message": "All Years" },
|
||||
@ -32,7 +33,7 @@
|
||||
"loading": { "message": "Loading..." },
|
||||
"loadingLibraries": { "message": "Loading libraries..." },
|
||||
"photosEmptyState": { "message": "No albums or photos found." },
|
||||
"photosEmptyStateSub": { "message": "Please select a server or make sure you have a photo library in Plex." },
|
||||
"photosEmptyStateSub": { "message": "Please select a server or ensure you have a photo library in Plex." },
|
||||
"statsTitle": { "message": "Library Statistics" },
|
||||
"statsAllTokens": { "message": "All Tokens" },
|
||||
"statsAnalyzing": { "message": "Analyzing your library..." },
|
||||
@ -41,16 +42,15 @@
|
||||
"statsUniqueMovies": { "message": "Unique Movies" },
|
||||
"statsUniqueSeries": { "message": "Unique Series" },
|
||||
"statsUniqueArtists": { "message": "Unique Artists" },
|
||||
"statsTokenServers": { "message": "Token's Servers" },
|
||||
"statsTokenServers": { "message": "Token Servers" },
|
||||
"statsChartMoviesByGenre": { "message": "Content by Genre (Movies)" },
|
||||
"statsChartSeriesByGenre": { "message": "Content by Genre (Series)" },
|
||||
"statsChartByDecade": { "message": "Content by Decade" },
|
||||
"recommendationsTitle": { "message": "Recommendations For You" },
|
||||
"recommendationsTitle": { "message": "Recommendations for you" },
|
||||
"historyTitle": { "message": "Viewing History" },
|
||||
"clearHistory": { "message": "Clear All" },
|
||||
"consoleTitle": { "message": "Plex Scan Console" },
|
||||
"footerCredit": { "message": "An interface for your Plex universe." },
|
||||
"backButton": { "message": "Back" },
|
||||
"closeTrailer": { "message": "Close trailer" },
|
||||
"close": { "message": "Close" },
|
||||
"photoViewer": { "message": "Photo Viewer" },
|
||||
@ -63,18 +63,20 @@
|
||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||
"settingsTabPhpGen": { "message": "PHP Generator" },
|
||||
"settingsTabData": { "message": "Data" },
|
||||
"settingsApiServer": { "message": "API and Server Configuration" },
|
||||
"settingsApiServer": { "message": "API and Server Settings" },
|
||||
"settingsTmdbApiLabel": { "message": "TMDB API Key (Optional)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Will use default key if left blank" },
|
||||
"openaiApiKey": { "message": "OpenAI API Key" },
|
||||
"settingsTmdbLangLabel": { "message": "Language for TMDB & UI" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Default key will be used if left blank" },
|
||||
"settingsGoogleApiLabel": { "message": "Google Gemini API Key (Optional)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Required to use AI assistant" },
|
||||
"settingsRegionLabel": { "message": "Region for content discovery" },
|
||||
"allRegions": { "message": "All Regions" },
|
||||
"settingsPhpUrlLabel": { "message": "Server URL for Adding Streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://your-server.com/path/to/script.php" },
|
||||
"settingsInterface": { "message": "Interface" },
|
||||
"settingsLightTheme": { "message": "Light Mode" },
|
||||
"settingsShowHero": { "message": "Show 'Hero' welcome section" },
|
||||
"settingsScanContent": { "message": "Content Scanning" },
|
||||
"settingsScanDesc": { "message": "Select what to scan and press the button." },
|
||||
"settingsScanContent": { "message": "Content Scan" },
|
||||
"settingsScanDesc": { "message": "Select what to scan and click the button." },
|
||||
"settingsScanMovies": { "message": "Movies" },
|
||||
"settingsScanShows": { "message": "Series" },
|
||||
"settingsScanArtists": { "message": "Music" },
|
||||
@ -84,25 +86,25 @@
|
||||
"settingsPlexTokens": { "message": "Plex Tokens" },
|
||||
"settingsPlexTokensDesc": { "message": "Edit the list of Plex tokens (JSON format)." },
|
||||
"settingsSaveTokens": { "message": "Save Tokens" },
|
||||
"settingsJellyfinTitle": { "message": "Jellyfin Settings" },
|
||||
"settingsJellyfinTitle": { "message": "Jellyfin Configuration" },
|
||||
"settingsJellyfinDesc": { "message": "Add your Jellyfin server details to scan its content." },
|
||||
"jellyfinUrlLabel": { "message": "Jellyfin Server URL" },
|
||||
"jellyfinUserLabel": { "message": "Username" },
|
||||
"jellyfinPassLabel": { "message": "Password" },
|
||||
"jellyfinConnectAndScan": { "message": "Connect and Scan" },
|
||||
"settingsPhpGenTitle": { "message": "PHP Server Script Generator" },
|
||||
"settingsPhpGenTitle": { "message": "PHP Script Generator for Server" },
|
||||
"settingsPhpFileOptions": { "message": "File Options" },
|
||||
"settingsPhpSavePathLabel": { "message": "Save Path on Server" },
|
||||
"settingsPhpSavePathLabel": { "message": "Server Save Path" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/lists (blank for same folder)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Filename" },
|
||||
"settingsPhpFilenameLabel": { "message": "File Name" },
|
||||
"settingsPhpFileAction": { "message": "File Action" },
|
||||
"settingsPhpActionAppend": { "message": "Append to the end of the file (cumulative)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Overwrite the file (start fresh)" },
|
||||
"settingsPhpActionAppend": { "message": "Append to file (cumulative)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Overwrite file (start fresh)" },
|
||||
"settingsPhpSecurity": { "message": "Security (Optional)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Use secret key (Recommended)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Enter a secure secret key" },
|
||||
"settingsPhpGeneratedCode": { "message": "Generated Code" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "The generated PHP code will appear here." },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "Generated PHP code will appear here." },
|
||||
"settingsGenerateScript": { "message": "Generate Script" },
|
||||
"settingsCopyScript": { "message": "Copy Script" },
|
||||
"settingsDataManagement": { "message": "Local Database Management" },
|
||||
@ -115,12 +117,12 @@
|
||||
"musicSidenavTitle": { "message": "Plex Music" },
|
||||
"musicAllServers": { "message": "All Servers" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Search artist..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Search in discography..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Search discography..." },
|
||||
"musicNothingPlaying": { "message": "Nothing playing" },
|
||||
"musicSelectSong": { "message": "Select a song" },
|
||||
"musicToStart": { "message": "to start playing" },
|
||||
"miniplayerDownloadSong": { "message": "Download song" },
|
||||
"miniplayerDownloadAlbum": { "message": "Download M3U album" },
|
||||
"miniplayerDownloadAlbum": { "message": "Download album M3U" },
|
||||
"miniplayerVolume": { "message": "Volume" },
|
||||
"miniplayerShuffle": { "message": "Shuffle" },
|
||||
"miniplayerEqualizer": { "message": "Equalizer" },
|
||||
@ -133,7 +135,7 @@
|
||||
"eqPresetJazz": { "message": "Jazz" },
|
||||
"eqPresetClassical": { "message": "Classical" },
|
||||
"eqPresetBassBoost": { "message": "Bass Boost" },
|
||||
"eqPreampLabel": { "message": "Pre-Amp" },
|
||||
"eqPreampLabel": { "message": "Preamp" },
|
||||
"infoModalTitle": { "message": "Information" },
|
||||
"infoModalFieldTitle": { "message": "Title:" },
|
||||
"infoModalFieldArtist": { "message": "Artist:" },
|
||||
@ -148,39 +150,39 @@
|
||||
"lang_it": { "message": "Italian" },
|
||||
"lang_pt": { "message": "Portuguese" },
|
||||
"essentialFeaturesNotSupported": { "message": "Your browser does not support essential features." },
|
||||
"dbAccessError": { "message": "Error accessing the local database." },
|
||||
"dbUpdateNeeded": { "message": "The database needs to be updated, please reload the page." },
|
||||
"dbBlocked": { "message": "Please close other tabs of this application to continue." },
|
||||
"dbAccessError": { "message": "Error accessing local database." },
|
||||
"dbUpdateNeeded": { "message": "Database needs updating, please reload the page." },
|
||||
"dbBlocked": { "message": "Please close other tabs of this app to continue." },
|
||||
"deletingContentData": { "message": "Deleting local content data..." },
|
||||
"noContentDataToDelete": { "message": "No content data to delete." },
|
||||
"contentDataDeleted": { "message": "Content data deleted from IndexedDB." },
|
||||
"errorDeletingData": { "message": "Error deleting data: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailable": { "message": "Text editor not available." },
|
||||
"errorLoadingTokens": { "message": "Error loading tokens to editor." },
|
||||
"errorLoadingTokens": { "message": "Error loading tokens for editing." },
|
||||
"errorLoadingTokensMessage": { "message": "Error loading tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor not available for saving." },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor not available to save." },
|
||||
"invalidJsonFormat": { "message": "Invalid JSON format. Must be { \"tokens\": [...] }" },
|
||||
"tokensSaved": { "message": "Tokens saved successfully." },
|
||||
"errorSavingTokens": { "message": "Error saving tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "IndexedDB is not available." },
|
||||
"dbExported": { "message": "Database exported successfully." },
|
||||
"errorExportingDb": { "message": "Error exporting database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"invalidJsonFile": { "message": "The file does not contain a valid JSON object." },
|
||||
"noDataToImport": { "message": "The file does not contain data for the current DB sections." },
|
||||
"invalidJsonFile": { "message": "File does not contain a valid JSON object." },
|
||||
"noDataToImport": { "message": "File contains no data for current DB sections." },
|
||||
"dbImported": { "message": "Database imported successfully." },
|
||||
"errorImportingDb": { "message": "Error importing database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"updatingView": { "message": "Updating view with new data..." },
|
||||
"confirmClearContent": { "message": "Are you sure you want to delete local content data (Movies, Series, Music, etc.)? Favorites and Settings will NOT be deleted." },
|
||||
"trailerNotFound": { "message": "No trailer found for this title." },
|
||||
"confirmClearHistory": { "message": "Are you sure you want to delete your entire viewing history? This action cannot be undone." },
|
||||
"confirmClearHistory": { "message": "Are you sure you want to clear all your viewing history? This action cannot be undone." },
|
||||
"historyCleared": { "message": "Viewing history cleared." },
|
||||
"historyItemDeleted": { "message": "Item deleted from history." },
|
||||
"errorGeneratingScript": { "message": "First, generate a script to be able to copy it." },
|
||||
"errorGeneratingScript": { "message": "First generate a script to copy it." },
|
||||
"scriptCopied": { "message": "PHP script copied to clipboard." },
|
||||
"errorCopyingScript": { "message": "Error copying script." },
|
||||
"scriptGenerated": { "message": "PHP script generated." },
|
||||
"errorLoadingAlbum": { "message": "Error loading album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Error: No photo server has been selected." },
|
||||
"noPhotoServerSelected": { "message": "Error: No photo server selected." },
|
||||
"loadingGenres": { "message": "Loading genres..." },
|
||||
"errorLoadingGenres": { "message": "Error loading" },
|
||||
"noContentFound": { "message": "No results found." },
|
||||
@ -193,14 +195,14 @@
|
||||
"noRecommendations": { "message": "We need to know you better to give you recommendations!" },
|
||||
"errorGeneratingStats": { "message": "Error generating statistics." },
|
||||
"noServersForToken": { "message": "No associated servers found for this token." },
|
||||
"searchingActorContent": { "message": "Searching for content from $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"searchingActorContent": { "message": "Searching content for $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorLoadingActorContent": { "message": "Could not load content for $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorAddingStream": { "message": "Error adding stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "The PHP server URL is not configured. Please set it up in Settings." },
|
||||
"searchingStreams": { "message": "Searching for streams for \"$title$\"...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Sending $count$ stream(s) to the server...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "PHP server URL is not configured. Please configure it in Settings." },
|
||||
"searchingStreams": { "message": "Searching streams for \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Sending $count$ stream(s) to server...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"errorGeneratingM3U": { "message": "Error generating M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Settings saved successfully." },
|
||||
@ -212,42 +214,22 @@
|
||||
"plexScanStarting": { "message": "Starting Plex scan..." },
|
||||
"noPlexTokens": { "message": "No Plex tokens configured." },
|
||||
"clearingSections": { "message": "Clearing sections: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Sections cleared." },
|
||||
"tokenFoundServers": { "message": "Token $token$... found $count$ servers.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Error processing token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Initial scan phase completed." },
|
||||
"retryPhaseFinished": { "message": "Retry phase finished." },
|
||||
"plexScanFinished": { "message": "Plex scan finished. Updating content..." },
|
||||
"plexScanFatalError": { "message": "FATAL ERROR: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Error during scan: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"plexScanFinished": { "message": "Scan finished. Updating content..." },
|
||||
"scanCancelled": { "message": "Scan cancelled by user." },
|
||||
"scanCancelledInfo": { "message": "Scan cancelled." },
|
||||
"retyingSection": { "message": "Retrying section \"$title$\"...", "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" } } },
|
||||
"noRetriesPending": { "message": "No pending retries." },
|
||||
"startingRetryPhase": { "message": "Starting retry phase for $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Retry phase cancelled." },
|
||||
"errorInitializingMusicPlayer": { "message": "Error initializing music player." },
|
||||
"criticalErrorLoadingMusic": { "message": "Critical error loading music data." },
|
||||
"errorLoadingArtists": { "message": "Error loading artists." },
|
||||
"dbUnavailableError": { "message": "Error: Database not available." },
|
||||
"dbUnavailableError": { "message": "Error: Database unavailable." },
|
||||
"updatingMusicData": { "message": "Updating music data..." },
|
||||
"musicDataUpdated": { "message": "Music data updated." },
|
||||
"errorFetchingArtistSongs": { "message": "Error getting artist's songs." },
|
||||
"errorFetchingArtistSongs": { "message": "Error fetching artist songs." },
|
||||
"errorLoadingSongs": { "message": "Error loading songs." },
|
||||
"noArtistsFound": { "message": "No artists found." },
|
||||
"artistsCounter": { "message": "$start$-$end$ of $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Artists", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Loading..." },
|
||||
"noSongsFound": { "message": "No songs found." },
|
||||
"shuffleOn": { "message": "Shuffle mode enabled." },
|
||||
"shuffleOff": { "message": "Shuffle mode disabled." },
|
||||
"downloadingSong": { "message": "Starting download of \"$title$\"...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Error downloading \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generating M3U for \"$artist$\"...", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U for album \"$artist$\" generated.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"playbackError": { "message": "Playback error" },
|
||||
"errorLabel": { "message": "Error" },
|
||||
"reloadingPage": { "message": "Reloading page..." },
|
||||
@ -261,29 +243,29 @@
|
||||
"searchResultsFor": {"message": "Results for \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||
"contentFrom": {"message": "Content from $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||
"explore": {"message": "Explore"},
|
||||
"noGenre": {"message": "Uncategorized"},
|
||||
"noGenre": {"message": "No category"},
|
||||
"synopsis": {"message": "Synopsis"},
|
||||
"noSynopsis": {"message": "No synopsis available."},
|
||||
"director": {"message": "Director:"},
|
||||
"writer": {"message": "Writer:"},
|
||||
"viewOnImdb": {"message": "View on IMDb"},
|
||||
"watchTrailer": {"message": "Watch Trailer"},
|
||||
"addToFavorites": {"message": "Favorite"},
|
||||
"removeFromFavorites": {"message": "Unfavorite"},
|
||||
"notAvailable": {"message": "Not Available"},
|
||||
"addToFavorites": {"message": "Add to favorites"},
|
||||
"removeFromFavorites": {"message": "Remove from favorites"},
|
||||
"notAvailable": {"message": "Not available"},
|
||||
"mainCast": {"message": "Main Cast"},
|
||||
"seasonsAndEpisodes": {"message": "Seasons & Episodes"},
|
||||
"seasonsAndEpisodes": {"message": "Seasons and Episodes"},
|
||||
"similarContent": {"message": "Similar Content"},
|
||||
"episodesCount": {"message": "$count$ Episodes", "placeholders": {"count": {"content": "$1"}}},
|
||||
"seasonsCount": {"message": "$count$ Seasons", "placeholders": {"count": {"content": "$1"}}},
|
||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||
"noTrailerFound": {"message": "No trailer was found for this title."},
|
||||
"fatalInitError": {"message": "Fatal Initialization Error"},
|
||||
"fatalInitErrorSub": {"message": "The application could not be loaded."},
|
||||
"noTrailerFound": {"message": "No trailer found for this title."},
|
||||
"fatalInitError": {"message": "Fatal initialization error"},
|
||||
"fatalInitErrorSub": {"message": "Could not load the application."},
|
||||
"invalidStreamInfo": {"message": "Invalid information."},
|
||||
"dbUnavailableForStreams": {"message": "Local database not available."},
|
||||
"dbUnavailableForStreams": {"message": "Local database unavailable."},
|
||||
"noPlexServersForStreams": {"message": "No Plex servers."},
|
||||
"notFoundOnServers": {"message": "\"$query$\" not found on servers.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"notFoundOnServers": {"message": "Could not find \"$query$\" on Plex servers.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "Just now" },
|
||||
"relativeTime_minutesAgo": { "message": "$count$ minutes ago", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_hoursAgo": { "message": "$count$ hours ago", "placeholders": { "count": { "content": "$1" } } },
|
||||
@ -291,33 +273,33 @@
|
||||
"relativeTime_daysAgo": { "message": "$count$ days ago", "placeholders": { "count": { "content": "$1" } } },
|
||||
"errorLoadingDetails": { "message": "Error Loading Details" },
|
||||
"errorLoadingLocalContent": { "message": "Error loading local content." },
|
||||
"errorServerResponse": { "message": "Unsuccessful response from server." },
|
||||
"errorPlexApi": { "message": "Error $status$ from Plex API.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorServerResponse": { "message": "Unsuccessful server response." },
|
||||
"errorPlexApi": { "message": "Plex API error $status$.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Error parsing Plex XML." },
|
||||
"untitled": { "message": "Untitled" },
|
||||
"itemCount": { "message": "$count$ items", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "No photo servers" },
|
||||
"jellyfinScanInProgress": { "message": "Jellyfin scan is already in progress." },
|
||||
"jellyfinScanning": { "message": "Scanning Jellyfin..." },
|
||||
"jellyfinMissingCredentials": { "message": "Please complete the Jellyfin URL and username." },
|
||||
"jellyfinMissingCredentials": { "message": "Please fill in Jellyfin URL and username." },
|
||||
"jellyfinConnecting": { "message": "Connecting to Jellyfin at: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Jellyfin authentication failed: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Jellyfin authentication successful." },
|
||||
"jellyfinFetchingLibraries": { "message": "Fetching libraries..." },
|
||||
"jellyfinFetchFailed": { "message": "Failed to fetch libraries: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "No movie or series libraries found on Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ media library(s) found.", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Success] Scanned '$libraryName, added $count$ titles.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Failed to scan library '$libraryName.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||
"jellyfinFetchFailed": { "message": "Error fetching libraries: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "No movie or series libraries found in Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ media library(ies) found.", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Success] '$libraryName$' scanned, $count$ titles added.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"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" } } },
|
||||
"noJellyfinCredentials": { "message": "Jellyfin credentials not configured." },
|
||||
"notFoundOnJellyfin": { "message": "\"$query$\" not found on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "\"$query$\" not found on any server.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnJellyfin": { "message": "Could not find \"$query$\" on Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "Could not find \"$query$\" on any server.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"localOnPlex": { "message": "On Plex" },
|
||||
"searchOnPlex": { "message": "Search on Plex" },
|
||||
"jellyfinTitle": { "message": "Jellyfin Content" },
|
||||
"noJellyfinContent": { "message": "No Jellyfin content found." },
|
||||
"noJellyfinContentSub": { "message": "Make sure you have scanned your Jellyfin server in the settings." },
|
||||
"noJellyfinContentSub": { "message": "Make sure you have scanned your Jellyfin server in settings." },
|
||||
"activityViewerTitle": { "message": "Server Activity Viewer" },
|
||||
"activitySelectServer": { "message": "Select a server" },
|
||||
"activityCheckBtn": { "message": "Refresh" },
|
||||
@ -328,96 +310,132 @@
|
||||
"activitySessionState": { "message": "State" },
|
||||
"activitySessionIdentifier": { "message": "Client Identifier" },
|
||||
"activityCopyID": { "message": "Copy ID" },
|
||||
"activityError": { "message": "Could not fetch server activity." },
|
||||
"activityError": { "message": "Could not get server activity." },
|
||||
"activityCopied": { "message": "Identifier copied to clipboard!" },
|
||||
"activityCopyError": { "message": "Failed to copy identifier." },
|
||||
"activityCopyError": { "message": "Error copying identifier." },
|
||||
"noProvidersFound": { "message": "No providers found." },
|
||||
"availableOnPlex": { "message": "Available on Plex" },
|
||||
"navM3uGenerator": { "message": "M3U Generator" },
|
||||
"m3uGeneratorTitle": { "message": "M3U Playlist Generator" },
|
||||
"m3uGeneratorTitle": { "message": "M3U List Generator" },
|
||||
"selectAServer": { "message": "Select a server..." },
|
||||
"downloadM3u": { "message": "Download M3U" },
|
||||
"m3uGenerator": { "message": "M3U Generator" },
|
||||
"selectServer": { "message": "Select Server" },
|
||||
"selectLibraries": { "message": "Select Libraries" },
|
||||
"howToUse": { "message": "How to Use" },
|
||||
"howToUse": { "message": "How To Use" },
|
||||
"m3uInstruction1": { "message": "Choose a server from the list." },
|
||||
"m3uInstruction2": { "message": "Select one or more libraries to include." },
|
||||
"m3uInstruction3": { "message": "Click the download button." },
|
||||
"m3uInstruction4": { "message": "Import the .m3u file into your compatible player." },
|
||||
"settingsRegionLabel": { "message": "Region for content discovery" },
|
||||
"allRegions": { "message": "All regions" },
|
||||
"chatOpen": { "message": "Open Chat" },
|
||||
"chatTitle": { "message": "AI Assistant" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Type your message..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Sorry, I couldn't get a response. Please try again." },
|
||||
"chatWelcome": { "message": "Welcome! I'm your CinePlex assistant. Ask me about movies, series, or anything else you'd like to know." },
|
||||
"chatApiKeyMissing": { "message": "OpenAI API key is not set. Please configure it in the extension settings." },
|
||||
"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." },
|
||||
"chatApiInvalidResponse": { "message": "The API returned an invalid response. Please try again." },
|
||||
"chatApiError": { "message": "Error communicating with the AI assistant" },
|
||||
"downloadAll": { "message": "Download All" },
|
||||
"downloadAll": { "message": "Download all" },
|
||||
"download": { "message": "Download" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Searches the Plex library for movies or series." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "The title to search for." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "The type of content to search for (movie or series)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navigates to a specific page in the application." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "The page to navigate to." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Gets user statistics." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Shows the details of a movie or series." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "The title of the movie or series." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "The type of content (movie or series)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the playlist." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "The title of the movie or series." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "The type of content (movie or series)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Downloads the playlist for a movie or series." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "The title of the movie or series." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "The type of content (movie or series)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Adds or removes a movie or series from favorites." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "The title of the movie or series." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "The type of content (movie or series)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Gets recommendations for the user." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applies filters to the current view." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "The type of content to filter (movie or series)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "The genre to filter by." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "The year to filter by." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "The order in which to sort the results." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Plays music by a specific artist." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "The name of the artist." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Clears the chat history." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Deletes the extension's database." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Updates all Plex tokens." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Adds a new Plex token." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "The Plex token to add." },
|
||||
"aiToolChangeRegionDesc": { "message": "Changes the region for content discovery." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "The two-letter region code (e.g., US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Clears all user favorites." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Clears the recommendations view." },
|
||||
"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." },
|
||||
"aiToolSearchLibraryTypeParamDesc": { "message": "The type of content to search for. Can be 'movie' for movies or 'series' for series. (Optional)." },
|
||||
"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'." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Retrieves and displays the user's library statistics, such as the total number of unique movies, series, and artists." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Displays the details page for a specific movie or series by its title and type." },
|
||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "The exact title of the movie or series." },
|
||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Adds a movie or series to the user's current playlist to stream to a configured PHP server." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "The title of the movie or series to add." },
|
||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Checks the availability of a list of movie or series titles on the user's local servers and, if found, generates and downloads an M3U playlist file with the found streams." },
|
||||
"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'." },
|
||||
"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." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "The title of the movie or series." },
|
||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "The type of content. Must be 'movie' or 'series'." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Generates and displays a list of movie or series recommendations based on the user's viewing history and favorites." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applies filters to the current movie or series view, allowing refinement of results by type, genre, year, and sort order." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "The type of content to apply filters to. Must be 'movie' or 'series'." },
|
||||
"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')." },
|
||||
"aiToolApplyFiltersSortParamDesc": { "message": "The sort criterion for the results. Valid values: 'popularity.desc' (popular), 'vote_average.desc' (top rated), 'release_date.desc' (recent for movies) or 'first_air_date.desc' (recent for series)." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Opens the music player and starts playing songs by a specific artist from the user's library." },
|
||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "The exact name of the artist whose songs are desired to be played." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Clears all message history from the current conversation with the AI assistant." },
|
||||
"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." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Adds a new X-Plex token to the extension's configuration, allowing the app to scan content from new Plex servers." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "The X-Plex token string to add." },
|
||||
"aiToolChangeRegionDesc": { "message": "Changes the region used for content discovery in the TMDB API. This will affect results displayed in movie and series sections, as well as streaming providers." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "The two-letter ISO 3166-1 country code for the new region (e.g., 'US' for United States, 'ES' for Spain, 'MX' for Mexico)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Removes all movies and series the user has marked as favorites." },
|
||||
"aiToolClearViewingHistoryDesc": { "message": "Clears the user's viewing history from the history page." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Clears the recommendations view and removes cached recommendations." },
|
||||
"aiToolSearchNotFound": { "message": "Could not find '$query$' in your library.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"aiToolNavigateSuccess": { "message": "Navigated to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolNavigateError": { "message": "Error navigating to $page$ page.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolStatsError": { "message": "Error getting statistics." },
|
||||
"aiToolItemNotFound": { "message": "Item '$title$' not found.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolShowItemDetailsSuccess": { "message": "Showing details for '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolAddToPlaylistSuccess": { "message": "Added '$title$' to playlist.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteAdded": { "message": "Added '$title$' to favorites.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "Removed '$title$' from favorites.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "Showing recommendations." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' not found.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"aiToolApplyFiltersSuccess": { "message": "Filters applied successfully." },
|
||||
"aiToolPlayMusicNotReady": { "message": "Music player is not ready. Make sure your Plex music library has been scanned." },
|
||||
"aiToolPlayMusicArtistNotFound": { "message": "Artist '$artist_name$' not found.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"aiToolChatHistoryCleared": { "message": "Chat history cleared." },
|
||||
"aiToolConfirmDeleteDatabase": { "message": "Are you sure you want to delete the local database? This action is irreversible." },
|
||||
"aiToolDeleteDatabaseCancelled": { "message": "Database deletion cancelled." },
|
||||
"aiToolExecutionError": { "message": "Error executing tool '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"aiToolUnknown": { "message": "Unknown tool: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favorites cleared." },
|
||||
"aiToolFavoritesClearError": { "message": "Error clearing favorites: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Recommendations cleared." },
|
||||
"aiToolRecommendationsClearError": { "message": "Error clearing recommendations: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Database deleted. The page will now reload." },
|
||||
"aiToolDatabaseDeleted": { "message": "Database deleted. The page will reload." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Error deleting database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Please close other tabs of the application." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "All tokens have been updated successfully." },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "Database deletion is blocked. Close other app tabs." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "All tokens updated successfully." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Error updating tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Plex token added successfully." },
|
||||
"aiToolAddPlexTokenError": { "message": "Error adding Plex token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. Content is being updated.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Region changed to $region$. Content is updating.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolChangeRegionError": { "message": "Error changing region: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "You are an expert film and series assistant named CinePlex. Your main function is to help users interact with their media library and discover content. Follow these rules: 1. When a user asks for a list or recommendation (e.g., 'tell me 5 horror movies', 'the best science fiction series'), you MUST use your own knowledge to generate the list and present it in a numbered or bulleted format. DO NOT use tools for this initial discovery task. 2. After presenting the list, if the user asks you to download it, check it, or create an M3U, THEN and only then, use the 'generate_m3u_from_titles_list' tool, passing it the titles you just mentioned. 3. For any other action such as navigating the app, getting statistics, or searching for a SPECIFIC TITLE in the user's library, use the appropriate tools. Be concise, friendly, and efficient." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "The list of titles to process is empty." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "It seems you don't have any of the titles from that list on your local servers." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "The type of content to search for: 'movie' or 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "A custom filename for the downloaded M3U playlist." },
|
||||
"aiToolGenerateM3USuccess": { "message": "Got it! I'm generating an M3U playlist with $1 items. The download should start shortly.", "placeholders": { "1": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v3": { "message": "You are an expert film and series assistant named CinePlex. Your main function is to help users discover content and interact with their library. Follow these rules rigorously: 1. **NEVER** claim to have performed an action if you haven't used a tool for it. For example, do not say 'I have downloaded X' if you have not used the download tool. 2. For requests for recommendations or lists (e.g., 'give 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 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 like navigating, getting statistics, or searching for a specific title, use the appropriate tools. Always be concise, friendly, and efficient." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Checks a list of movie or series titles against the user's local servers and, if matches are found, generates and downloads an M3U playlist file." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "A list of movie or series titles to check and download." },
|
||||
"aiToolViewingHistoryCleared": { "message": "Viewing history cleared." },
|
||||
"aiToolViewingHistoryClearError": { "message": "Error clearing 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." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Please provide a list of titles to create the playlist." },
|
||||
"aiToolM3UCheckingTitles": { "message": "Checking the titles on your local servers..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "I couldn't find any of the movies or series from the list on your local servers." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Done! I found $1 of the $2 titles on your servers and have started the download of the M3U playlist.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
|
||||
"aiToolM3UCheckingTitles": { "message": "Checking titles on your local servers..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "I haven't found any of the movies or series from the list on your local servers." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Done! I found $1 of $2 titles on your servers and started the M3U playlist download.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||
"backToProviders": { "message": "Back to Providers" },
|
||||
"artistsCounterSingle": { "message": "$total$ Artist", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Loading..." },
|
||||
"downloadingSong": { "message": "Starting download of \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" downloaded.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Error downloading \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generating M3U for \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U for album \"$artist$\" generated.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "Retrying section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCCESS] Retry for \"$title$\" completed.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[FINAL ERROR] Retry failed for \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"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" } } },
|
||||
"errorProcessingToken": { "message": "Error processing token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"plexScanFatalError": { "message": "FATAL ERROR: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Error during scan: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "Stopping Plex scan..." },
|
||||
"invalidTokenProvided": { "message": "Invalid token provided." },
|
||||
"tokenAlreadyExists": { "message": "Token already exists." },
|
||||
"tokenAddedSuccessfully": { "message": "Token added successfully." },
|
||||
"noStreamsFoundForSelection": { "message": "No streams found for selection." },
|
||||
"autoplayBlocked": { "message": "Autoplay blocked." },
|
||||
"welcomeToCinePlex": { "message": "" },
|
||||
"page": { "message": "Page" }
|
||||
}
|
@ -16,6 +16,7 @@
|
||||
"navHistory": { "message": "Historial" },
|
||||
"navRecommendations": { "message": "Recomendaciones" },
|
||||
"navMusic": { "message": "Música" },
|
||||
"navM3uGenerator": { "message": "Generador M3U" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Explora miles de películas y series." },
|
||||
"addStream": { "message": "Añadir Stream" },
|
||||
@ -50,7 +51,6 @@
|
||||
"clearHistory": { "message": "Borrar Todo" },
|
||||
"consoleTitle": { "message": "Consola de Escaneo Plex" },
|
||||
"footerCredit": { "message": "Una interfaz para tu universo Plex." },
|
||||
"backButton": { "message": "Atrás" },
|
||||
"closeTrailer": { "message": "Cerrar tráiler" },
|
||||
"close": { "message": "Cerrar" },
|
||||
"photoViewer": { "message": "Visor de fotos" },
|
||||
@ -66,8 +66,10 @@
|
||||
"settingsApiServer": { "message": "Configuración de API y Servidor" },
|
||||
"settingsTmdbApiLabel": { "message": "Clave de API de TMDB (Opcional)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Se usará la clave por defecto si se deja en blanco" },
|
||||
"openaiApiKey": { "message": "Clave API de OpenAI" },
|
||||
"settingsTmdbLangLabel": { "message": "Idioma para TMDB y la interfaz" },
|
||||
"settingsGoogleApiLabel": { "message": "Clave de API de Google Gemini (Opcional)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Necesaria para usar el asistente de IA" },
|
||||
"settingsRegionLabel": { "message": "Región para descubrimiento de contenido" },
|
||||
"allRegions": { "message": "Todas las regiones" },
|
||||
"settingsPhpUrlLabel": { "message": "URL del Servidor para Añadir Streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://tu-servidor.com/ruta/al/script.php" },
|
||||
"settingsInterface": { "message": "Interfaz" },
|
||||
@ -201,7 +203,7 @@
|
||||
"sendingStreams": { "message": "Enviando $count$ stream(s) al servidor...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream(s) añadido(s) con éxito." },
|
||||
"generatingM3U": { "message": "Generando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "\"\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Error al generar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Ajustes guardados correctamente." },
|
||||
"errorSavingSettings": { "message": "Error al guardar los ajustes en la base de datos." },
|
||||
@ -212,22 +214,11 @@
|
||||
"plexScanStarting": { "message": "Iniciando escaneo Plex..." },
|
||||
"noPlexTokens": { "message": "No hay tokens de Plex configurados." },
|
||||
"clearingSections": { "message": "Limpiando secciones: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Secciones limpiadas." },
|
||||
"tokenFoundServers": { "message": "Token $token$... encontró $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Error procesando token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Fase de escaneo inicial finalizada." },
|
||||
"retryPhaseFinished": { "message": "Fase de reintentos finalizada." },
|
||||
"plexScanFinished": { "message": "Escaneo finalizado. Actualizando contenido..." },
|
||||
"plexScanFatalError": { "message": "ERROR FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"scanCancelled": { "message": "Escaneo cancelado por el usuario." },
|
||||
"scanCancelledInfo": { "message": "Escaneo cancelado." },
|
||||
"retyingSection": { "message": "Reintentando sección \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[ÉXITO] Reintento de \"$title$\" completado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERROR FINAL] Falló el reintento para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"noRetriesPending": { "message": "No hay reintentos pendientes." },
|
||||
"startingRetryPhase": { "message": "Iniciando fase de reintentos para $count$ secciones...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Fase de reintentos cancelada." },
|
||||
"errorInitializingMusicPlayer": { "message": "Error inicializando el reproductor de música." },
|
||||
"criticalErrorLoadingMusic": { "message": "Error crítico al cargar datos de música." },
|
||||
"errorLoadingArtists": { "message": "Error al cargar artistas." },
|
||||
@ -237,17 +228,8 @@
|
||||
"errorFetchingArtistSongs": { "message": "Error al obtener las canciones del artista." },
|
||||
"errorLoadingSongs": { "message": "Error cargando canciones." },
|
||||
"noArtistsFound": { "message": "No se encontraron artistas." },
|
||||
"artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Artistas", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Cargando..." },
|
||||
"noSongsFound": { "message": "No se encontraron canciones." },
|
||||
"shuffleOn": { "message": "Modo aleatorio activado." },
|
||||
"shuffleOff": { "message": "Modo aleatorio desactivado." },
|
||||
"downloadingSong": { "message": "Iniciando descarga de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U para el álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"playbackError": { "message": "Error de reproducción" },
|
||||
"errorLabel": { "message": "Error" },
|
||||
"reloadingPage": { "message": "Recargando la página..." },
|
||||
@ -333,67 +315,85 @@
|
||||
"activityCopyError": { "message": "Error al copiar el identificador." },
|
||||
"noProvidersFound": { "message": "No se encontraron proveedores." },
|
||||
"availableOnPlex": { "message": "Disponible en Plex" },
|
||||
"navM3uGenerator": { "message": "Generador M3U" },
|
||||
"m3uGeneratorTitle": { "message": "Generador de Listas M3U" },
|
||||
"selectAServer": { "message": "Selecciona un servidor..." },
|
||||
"downloadM3u": { "message": "Descargar M3U" },
|
||||
"m3uGenerator": { "message": "Generador M3U" },
|
||||
"selectServer": { "message": "Seleccionar Servidor" },
|
||||
"selectLibraries": { "message": "Seleccionar Bibliotecas" },
|
||||
"howToUse": { "message": "Cómo Usar" },
|
||||
"m3uInstruction1": { "message": "Elige un servidor de la lista." },
|
||||
"m3uInstruction2": { "message": "Selecciona una o más bibliotecas para incluir." },
|
||||
"m3uInstruction3": { "message": "Haz clic en el botón de descarga." },
|
||||
"m3uInstruction4": { "message": "Importa el archivo .m3u en tu reproductor compatible." },
|
||||
"settingsRegionLabel": { "message": "Región para descubrimiento de contenido" },
|
||||
"allRegions": { "message": "Todas las regiones" },
|
||||
"chatOpen": { "message": "Abrir Chat" },
|
||||
"chatTitle": { "message": "Asistente IA" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Escribe tu mensaje..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Lo siento, no pude obtener una respuesta. Inténtalo de nuevo." },
|
||||
"chatWelcome": { "message": "¡Bienvenido! Soy tu asistente de CinePlex. Pregúntame sobre películas, series o cualquier otra cosa que quieras saber." },
|
||||
"chatApiKeyMissing": { "message": "La clave de la API de OpenAI no está configurada. Por favor, configúrala en los ajustes de la extensión." },
|
||||
"chatGoogleApiKeyMissing": { "message": "La clave de la API de Google Gemini no está configurada. Por favor, configúrala en los ajustes de la extensión para usar el asistente de IA." },
|
||||
"chatApiInvalidResponse": { "message": "La API ha devuelto una respuesta no válida. Por favor, inténtalo de nuevo." },
|
||||
"chatApiError": { "message": "Error al comunicarse con el asistente de IA" },
|
||||
"downloadAll": { "message": "Descargar todo" },
|
||||
"download": { "message": "Descargar" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Busca en la biblioteca de Plex películas o series." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "El título a buscar." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "El tipo de contenido a buscar (película o serie)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navega a una página específica de la aplicación." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "La página a la que navegar." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Obtiene estadísticas del usuario." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Muestra los detalles de una película o serie." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "El título de la película o serie." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "El tipo de contenido (película o serie)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Añade una película o serie a la lista de reproducción." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "El título de la película o serie." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "El tipo de contenido (película o serie)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Descarga la lista de reproducción de una película o serie." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "El título de la película o serie." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "El tipo de contenido (película o serie)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Añade o quita una película o serie de favoritos." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "El título de la película o serie." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "El tipo de contenido (película o serie)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Obtiene recomendaciones para el usuario." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Aplica filtros a la vista actual." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "El tipo de contenido a filtrar (película o serie)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "El género a filtrar." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "El año a filtrar." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "El orden en que se mostrarán los resultados." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Reproduce música de un artista específico." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "El nombre del artista." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Borra el historial de chat." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Borra la base de datos de la extensión." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Actualiza todos los tokens de Plex." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Añade un nuevo token de Plex." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "El token de Plex a añadir." },
|
||||
"aiToolChangeRegionDesc": { "message": "Cambia la región para el descubrimiento de contenido." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "El código de región de dos letras (por ejemplo, US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Borra todos los favoritos del usuario." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpia la vista de recomendaciones." },
|
||||
"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." },
|
||||
"aiToolSearchLibraryTypeParamDesc": { "message": "El tipo de contenido a buscar. Puede ser 'movie' para películas o 'series' para series. (Opcional)." },
|
||||
"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'." },
|
||||
"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." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Muestra la página de detalles de una película o serie específica por su título y tipo." },
|
||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "El título exacto de la película o serie." },
|
||||
"aiToolShowItemDetailsTypeParamDesc": { "message": "El tipo de contenido. Debe ser 'movie' o 'series'." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Añade una película o serie a la lista de reproducción actual del usuario para transmitirla a un servidor PHP configurado." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "El título de la película o serie a añadir." },
|
||||
"aiToolAddToPlaylistTypeParamDesc": { "message": "El tipo de contenido. Debe ser 'movie' o 'series'." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Comprueba la disponibilidad de una lista de títulos de películas o series en los servidores locales del usuario y, si se encuentran, genera y descarga un archivo de lista de reproducción M3U con los streams encontrados." },
|
||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Una matriz de títulos de películas o series para buscar y descargar." },
|
||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "El tipo de contenido de la lista. Debe ser 'movie' o 'series'." },
|
||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "El nombre del archivo M3U a descargar (por ejemplo, 'MiLista.m3u'). Si no se proporciona, se usará un nombre por defecto." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Añade o quita una película o serie de la lista de favoritos del usuario." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "El título de la película o serie." },
|
||||
"aiToolToggleFavoriteTypeParamDesc": { "message": "El tipo de contenido. Debe ser 'movie' o 'series'." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Genera y muestra una lista de recomendaciones de películas o series basadas en el historial de visualización y los favoritos del usuario." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Aplica filtros a la vista actual de películas o series, permitiendo refinar los resultados por tipo, género, año y orden de clasificación." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "El tipo de contenido al que aplicar los filtros. Debe ser 'movie' o 'series'." },
|
||||
"aiToolApplyFiltersGenreParamDesc": { "message": "El nombre del género por el que filtrar (por ejemplo, 'Acción', 'Drama')." },
|
||||
"aiToolApplyFiltersYearParamDesc": { "message": "El año de lanzamiento por el que filtrar (por ejemplo, '2023')." },
|
||||
"aiToolApplyFiltersSortParamDesc": { "message": "El criterio de ordenación para los resultados. Valores válidos: 'popularity.desc' (populares), 'vote_average.desc' (mejor valoradas), 'release_date.desc' (recientes para películas) o 'first_air_date.desc' (recientes para series)." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Abre el reproductor de música y comienza a reproducir canciones de un artista específico de la biblioteca del usuario." },
|
||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "El nombre exacto del artista cuyas canciones se desean reproducir." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Borra todo el historial de mensajes de la conversación actual con el asistente de IA." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Elimina toda la base de datos local de la extensión, incluyendo el contenido escaneado, los ajustes y los favoritos. Esta acción es irreversible y recargará la aplicación." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Inicia un escaneo completo de todos los servidores y bibliotecas de Plex asociados con los tokens configurados en la extensión. Actualiza todas las películas, series, artistas y fotos." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Añade un nuevo token X-Plex a la configuración de la extensión, permitiendo que la aplicación escanee contenido de nuevos servidores Plex." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La cadena del token X-Plex que se desea añadir." },
|
||||
"aiToolChangeRegionDesc": { "message": "Cambia la región utilizada para el descubrimiento de contenido en la API de TMDB. Esto afectará a los resultados mostrados en las secciones de películas y series, así como a los proveedores de streaming." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "El código de país ISO 3166-1 de dos letras para la nueva región (por ejemplo, 'US' para Estados Unidos, 'ES' para España, 'MX' para México)." },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"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" } } },
|
||||
"aiToolStatsError": { "message": "Error al obtener estadísticas." },
|
||||
"aiToolItemNotFound": { "message": "No se encontró el elemento '$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" } } },
|
||||
"aiToolFavoriteAdded": { "message": "Añadido '$title$' a favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "Eliminado '$title$' de favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "Mostrando recomendaciones." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Género '$genre$' no encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolPlayMusicSuccess": { "message": "Reproduciendo música de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolUnknown": { "message": "Herramienta desconocida: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
|
||||
"aiToolFavoritesClearError": { "message": "Error al eliminar los favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Recomendaciones eliminadas." },
|
||||
@ -407,17 +407,35 @@
|
||||
"aiToolAddPlexTokenError": { "message": "Error al añadir el token de Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Región cambiada a $region$. El contenido se está actualizando.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolChangeRegionError": { "message": "Error al cambiar la región: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "Eres un asistente experto en cine y series llamado CinePlex. Tu función principal es ayudar a los usuarios a interactuar con su biblioteca de medios y descubrir contenido. Sigue estas reglas: 1. Cuando un usuario pida una lista o recomendación (ej. 'dime 5 películas de terror', 'las mejores series de ciencia ficción'), DEBES usar tu propio conocimiento para generar la lista y presentarla en un formato numerado o con viñetas. NO uses herramientas para esta tarea inicial de descubrimiento. 2. Después de presentar la lista, si el usuario te pide que la descargues, la compruebes o crees un M3U, ENTONCES y solo entonces, utiliza la herramienta 'generate_m3u_from_titles_list' pasándole los títulos que acabas de mencionar. 3. Para cualquier otra acción como navegar por la app, obtener estadísticas o buscar un TÍTULO ESPECÍFICO en la biblioteca del usuario, utiliza las herramientas apropiadas. Sé conciso, amigable y eficiente." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "La lista de títulos para procesar está vacía." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "Parece que no tienes ninguno de los títulos de esa lista en tus servidores locales." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "El tipo de contenido a buscar: 'movie' o 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "Un nombre de archivo personalizado para la lista de reproducción M3U descargada." },
|
||||
"aiToolGenerateM3USuccess": { "message": "¡Entendido! Estoy generando una lista de reproducción M3U con $1 elementos. La descarga debería comenzar en breve.", "placeholders": { "1": { "content": "$1" } } },
|
||||
"aiToolViewingHistoryCleared": { "message": "Historial de visualización borrado." },
|
||||
"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." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Comprueba una lista de títulos de películas o series en los servidores locales del usuario y, si se encuentran coincidencias, genera y descarga un archivo de lista de reproducción M3U." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Una lista de títulos de películas o series para comprobar y descargar." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Por favor, proporciona una lista de títulos para crear la lista de reproducción." },
|
||||
"aiToolM3UCheckingTitles": { "message": "Comprobando los títulos en tus servidores locales..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "No he encontrado ninguna de las películas o series de la lista en tus servidores locales." },
|
||||
"aiToolM3UDownloadStarted": { "message": "¡Hecho! He encontrado $1 de los $2 títulos en tus servidores y he iniciado la descarga de la lista de reproducción M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
|
||||
"aiToolM3UDownloadStarted": { "message": "¡Hecho! He encontrado $1 de los $2 títulos en tus servidores y he iniciado la descarga de la lista de reproducción M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||
"backToProviders": { "message": "Volver a Proveedores" },
|
||||
"artistsCounterSingle": { "message": "$total$ Artista", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Cargando..." },
|
||||
"downloadingSong": { "message": "Iniciando descarga de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" descargado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Error al descargar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U para el álbum \"$artist$\" generado.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "Reintentando sección \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[ÉXITO] Reintento de \"$title$\" completado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERROR FINAL] Falló el reintento para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"startingRetryPhase": { "message": "Iniciando fase de reintentos para $count$ secciones...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"tokenFoundServers": { "message": "Token $token$... encontró $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Error procesando token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"plexScanFatalError": { "message": "ERROR FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Error durante el escaneo: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "Deteniendo escaneo Plex..." },
|
||||
"invalidTokenProvided": { "message": "Token inválido proporcionado." },
|
||||
"tokenAlreadyExists": { "message": "El token ya existe." },
|
||||
"tokenAddedSuccessfully": { "message": "Token añadido correctamente." },
|
||||
"noStreamsFoundForSelection": { "message": "No se encontraron streams para la selección." },
|
||||
"autoplayBlocked": { "message": "Reproducción automática bloqueada." },
|
||||
"welcomeToCinePlex": { "message": "Bienvenido a CinePlex" },
|
||||
"page": { "message": "Página" }
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"appName": { "message": "CinePlex" },
|
||||
"appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
|
||||
"appTagline": { "message": "Films, Séries & Musique" },
|
||||
"appLocaleCode": { "message": "fr-FR" },
|
||||
"toggleNavigation": { "message": "Basculer la Navigation" },
|
||||
"appTagline": { "message": "Films, Séries et Musique" },
|
||||
"appLocaleCode": { "message": "fr" },
|
||||
"toggleNavigation": { "message": "Basculer la navigation" },
|
||||
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
||||
"openMusicPlayer": { "message": "Ouvrir le Lecteur de Musique" },
|
||||
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
||||
"settings": { "message": "Paramètres" },
|
||||
"navMovies": { "message": "Films" },
|
||||
"navSeries": { "message": "Séries" },
|
||||
@ -16,11 +16,12 @@
|
||||
"navHistory": { "message": "Historique" },
|
||||
"navRecommendations": { "message": "Recommandations" },
|
||||
"navMusic": { "message": "Musique" },
|
||||
"navM3uGenerator": { "message": "Générateur M3U" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
||||
"addStream": { "message": "Ajouter le flux" },
|
||||
"moreInfo": { "message": "Plus d'infos" },
|
||||
"popularMovies": { "message": "Films Populaires" },
|
||||
"addStream": { "message": "Ajouter un stream" },
|
||||
"moreInfo": { "message": "Plus d'informations" },
|
||||
"popularMovies": { "message": "Films populaires" },
|
||||
"allGenres": { "message": "Tous les genres" },
|
||||
"allYears": { "message": "Toutes les années" },
|
||||
"sortPopular": { "message": "Les plus populaires" },
|
||||
@ -28,206 +29,196 @@
|
||||
"sortRecent": { "message": "Les plus récents" },
|
||||
"loadMore": { "message": "Charger plus" },
|
||||
"photosBreadcrumbHome": { "message": "Albums" },
|
||||
"selectServer": { "message": "Sélectionnez un serveur" },
|
||||
"selectServer": { "message": "Sélectionner un serveur" },
|
||||
"loading": { "message": "Chargement..." },
|
||||
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
||||
"photosEmptyState": { "message": "Aucun album ou photo trouvé." },
|
||||
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou vous assurer d'avoir une bibliothèque de photos dans Plex." },
|
||||
"statsTitle": { "message": "Statistiques de la Bibliothèque" },
|
||||
"statsAllTokens": { "message": "Tous les Tokens" },
|
||||
"photosEmptyStateSub": { "message": "Veuillez sélectionner un serveur ou assurez-vous d'avoir une bibliothèque de photos dans Plex." },
|
||||
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
||||
"statsAllTokens": { "message": "Tous les jetons" },
|
||||
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
||||
"statsActiveTokens": { "message": "Tokens Actifs" },
|
||||
"statsServersFound": { "message": "Serveurs Trouvés" },
|
||||
"statsUniqueMovies": { "message": "Films Uniques" },
|
||||
"statsUniqueSeries": { "message": "Séries Uniques" },
|
||||
"statsUniqueArtists": { "message": "Artistes Uniques" },
|
||||
"statsTokenServers": { "message": "Serveurs du Token" },
|
||||
"statsChartMoviesByGenre": { "message": "Contenu par Genre (Films)" },
|
||||
"statsChartSeriesByGenre": { "message": "Contenu par Genre (Séries)" },
|
||||
"statsChartByDecade": { "message": "Contenu par Décennie" },
|
||||
"statsActiveTokens": { "message": "Jetons actifs" },
|
||||
"statsServersFound": { "message": "Serveurs trouvés" },
|
||||
"statsUniqueMovies": { "message": "Films uniques" },
|
||||
"statsUniqueSeries": { "message": "Séries uniques" },
|
||||
"statsUniqueArtists": { "message": "Artistes uniques" },
|
||||
"statsTokenServers": { "message": "Serveurs du jeton" },
|
||||
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
||||
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
||||
"statsChartByDecade": { "message": "Contenu par décennie" },
|
||||
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
||||
"historyTitle": { "message": "Historique de Visionnage" },
|
||||
"historyTitle": { "message": "Historique de visionnage" },
|
||||
"clearHistory": { "message": "Tout effacer" },
|
||||
"consoleTitle": { "message": "Console de Scan Plex" },
|
||||
"consoleTitle": { "message": "Console de scan Plex" },
|
||||
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
||||
"backButton": { "message": "Retour" },
|
||||
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
||||
"close": { "message": "Fermer" },
|
||||
"photoViewer": { "message": "Visionneuse de photos" },
|
||||
"previous": { "message": "Précédent" },
|
||||
"next": { "message": "Suivant" },
|
||||
"notificationTemplateText": { "message": "Notification" },
|
||||
"settingsTitleFull": { "message": "Paramètres et Configuration" },
|
||||
"settingsTitleFull": { "message": "Réglages et Configuration" },
|
||||
"settingsTabGeneral": { "message": "Général" },
|
||||
"settingsTabPlex": { "message": "Plex" },
|
||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
||||
"settingsTabData": { "message": "Données" },
|
||||
"settingsApiServer": { "message": "Configuration API et Serveur" },
|
||||
"settingsTmdbApiLabel": { "message": "Clé API de TMDB (Optionnel)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Utilisera la clé par défaut si laissé vide" },
|
||||
"openaiApiKey": { "message": "Clé API OpenAI" },
|
||||
"settingsTmdbLangLabel": { "message": "Langue pour TMDB & UI" },
|
||||
"settingsPhpUrlLabel": { "message": "URL du Serveur pour Ajout de Flux" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/script.php" },
|
||||
"settingsApiServer": { "message": "Configuration API et serveur" },
|
||||
"settingsTmdbApiLabel": { "message": "Clé API TMDB (Facultatif)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si laissée vide" },
|
||||
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
||||
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
||||
"allRegions": { "message": "Toutes les régions" },
|
||||
"settingsPhpUrlLabel": { "message": "URL du serveur pour ajouter des streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
||||
"settingsInterface": { "message": "Interface" },
|
||||
"settingsLightTheme": { "message": "Mode Clair" },
|
||||
"settingsShowHero": { "message": "Afficher la section d'accueil \"Hero\"" },
|
||||
"settingsScanContent": { "message": "Scan de Contenu" },
|
||||
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et appuyez sur le bouton." },
|
||||
"settingsLightTheme": { "message": "Mode clair" },
|
||||
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
||||
"settingsScanContent": { "message": "Scan de contenu" },
|
||||
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
||||
"settingsScanMovies": { "message": "Films" },
|
||||
"settingsScanShows": { "message": "Séries" },
|
||||
"settingsScanArtists": { "message": "Musique" },
|
||||
"settingsScanPhotos": { "message": "Photos" },
|
||||
"settingsSelectAll": { "message": "Tout sélectionner" },
|
||||
"settingsStartScan": { "message": "Démarrer le Scan" },
|
||||
"settingsPlexTokens": { "message": "Tokens Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Modifiez la liste des tokens Plex (format JSON)." },
|
||||
"settingsSaveTokens": { "message": "Sauvegarder les Tokens" },
|
||||
"settingsJellyfinTitle": { "message": "Paramètres Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Ajoutez les informations de votre serveur Jellyfin pour scanner son contenu." },
|
||||
"settingsStartScan": { "message": "Lancer le scan" },
|
||||
"settingsPlexTokens": { "message": "Jetons Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
||||
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
||||
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
||||
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
||||
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
||||
"jellyfinPassLabel": { "message": "Mot de passe" },
|
||||
"jellyfinConnectAndScan": { "message": "Connecter et Scanner" },
|
||||
"settingsPhpGenTitle": { "message": "Générateur de Script PHP pour Serveur" },
|
||||
"settingsPhpFileOptions": { "message": "Options du Fichier" },
|
||||
"settingsPhpSavePathLabel": { "message": "Chemin de Sauvegarde sur le Serveur" },
|
||||
"jellyfinConnectAndScan": { "message": "Connecter et scanner" },
|
||||
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
||||
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
||||
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nom du Fichier" },
|
||||
"settingsPhpFileAction": { "message": "Action sur le Fichier" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
||||
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
||||
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir à zéro)" },
|
||||
"settingsPhpSecurity": { "message": "Sécurité (Optionnel)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
||||
"settingsPhpSecurity": { "message": "Sécurité (Facultatif)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Entrez une clé secrète sécurisée" },
|
||||
"settingsPhpGeneratedCode": { "message": "Code Généré" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
||||
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
||||
"settingsGenerateScript": { "message": "Générer le Script" },
|
||||
"settingsCopyScript": { "message": "Copier le Script" },
|
||||
"settingsDataManagement": { "message": "Gestion de la Base de Données Locale" },
|
||||
"settingsImportDb": { "message": "Importer BD depuis un Fichier" },
|
||||
"settingsExportDb": { "message": "Exporter BD vers un Fichier" },
|
||||
"settingsClearContent": { "message": "Effacer les Données de Contenu Locales" },
|
||||
"settingsClearContentDesc": { "message": "Cette action supprimera les films, séries et musiques de la base de données locale, mais n'affectera pas vos favoris ou paramètres." },
|
||||
"settingsGenerateScript": { "message": "Générer le script" },
|
||||
"settingsCopyScript": { "message": "Copier le script" },
|
||||
"settingsDataManagement": { "message": "Gestion de la base de données locale" },
|
||||
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
||||
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
||||
"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." },
|
||||
"settingsClose": { "message": "Fermer" },
|
||||
"settingsSave": { "message": "Sauvegarder les Paramètres" },
|
||||
"musicSidenavTitle": { "message": "Plex Musique" },
|
||||
"musicAllServers": { "message": "Tous les Serveurs" },
|
||||
"settingsSave": { "message": "Enregistrer les paramètres" },
|
||||
"musicSidenavTitle": { "message": "Musique de Plex" },
|
||||
"musicAllServers": { "message": "Tous les serveurs" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
||||
"musicNothingPlaying": { "message": "Aucune lecture en cours" },
|
||||
"musicNothingPlaying": { "message": "Rien ne joue" },
|
||||
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
||||
"musicToStart": { "message": "pour commencer la lecture" },
|
||||
"musicToStart": { "message": "pour commencer à jouer" },
|
||||
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
||||
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
||||
"miniplayerVolume": { "message": "Volume" },
|
||||
"miniplayerShuffle": { "message": "Aléatoire" },
|
||||
"miniplayerShuffle": { "message": "Lecture aléatoire" },
|
||||
"miniplayerEqualizer": { "message": "Égaliseur" },
|
||||
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
||||
"eqTitle": { "message": "Égaliseur Graphique" },
|
||||
"eqTitle": { "message": "Égaliseur graphique" },
|
||||
"eqPresetsLabel": { "message": "Préréglages" },
|
||||
"eqPresetFlat": { "message": "Plat" },
|
||||
"eqPresetRock": { "message": "Rock" },
|
||||
"eqPresetPop": { "message": "Pop" },
|
||||
"eqPresetJazz": { "message": "Jazz" },
|
||||
"eqPresetClassical": { "message": "Classique" },
|
||||
"eqPresetBassBoost": { "message": "Renforcement des Basses" },
|
||||
"eqPreampLabel": { "message": "Pré-Amp" },
|
||||
"infoModalTitle": { "message": "Information" },
|
||||
"infoModalFieldTitle": { "message": "Titre:" },
|
||||
"infoModalFieldArtist": { "message": "Artiste:" },
|
||||
"infoModalFieldAlbum": { "message": "Album:" },
|
||||
"infoModalFieldSong": { "message": "Chanson:" },
|
||||
"infoModalFieldYear": { "message": "Année:" },
|
||||
"infoModalFieldGenre": { "message": "Genre:" },
|
||||
"eqPresetBassBoost": { "message": "Accentuation des basses" },
|
||||
"eqPreampLabel": { "message": "Préamplificateur" },
|
||||
"infoModalTitle": { "message": "Informations" },
|
||||
"infoModalFieldTitle": { "message": "Titre :" },
|
||||
"infoModalFieldArtist": { "message": "Artiste :" },
|
||||
"infoModalFieldAlbum": { "message": "Album :" },
|
||||
"infoModalFieldSong": { "message": "Chanson :" },
|
||||
"infoModalFieldYear": { "message": "Année :" },
|
||||
"infoModalFieldGenre": { "message": "Genre :" },
|
||||
"lang_en": { "message": "Anglais" },
|
||||
"lang_es": { "message": "Espagnol" },
|
||||
"lang_fr": { "message": "Français" },
|
||||
"lang_de": { "message": "Allemand" },
|
||||
"lang_it": { "message": "Italien" },
|
||||
"lang_pt": { "message": "Portugais" },
|
||||
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctionnalités essentielles." },
|
||||
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctions essentielles." },
|
||||
"dbAccessError": { "message": "Erreur d'accès à la base de données locale." },
|
||||
"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." },
|
||||
"deletingContentData": { "message": "Suppression des données de contenu locales..." },
|
||||
"deletingContentData": { "message": "Suppression des données de contenu local..." },
|
||||
"noContentDataToDelete": { "message": "Aucune donnée de contenu à supprimer." },
|
||||
"contentDataDeleted": { "message": "Données de contenu supprimées de 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" } } },
|
||||
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
||||
"errorLoadingTokens": { "message": "Erreur lors du chargement des tokens pour l'édition." },
|
||||
"errorLoadingTokensMessage": { "message": "Erreur de chargement des tokens : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour l'édition." },
|
||||
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
|
||||
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
||||
"tokensSaved": { "message": "Tokens sauvegardés avec succès." },
|
||||
"errorSavingTokens": { "message": "Erreur lors de la sauvegarde des tokens : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
||||
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
||||
"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" } } },
|
||||
"invalidJsonFile": { "message": "Le fichier ne contient pas un objet JSON valide." },
|
||||
"noDataToImport": { "message": "Le fichier ne contient pas de données pour les sections actuelles de la BD." },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"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 locales (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." },
|
||||
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action est irréversible." },
|
||||
"confirmClearHistory": { "message": "Êtes-vous sûr de vouloir effacer tout votre historique de visionnage ? Cette action ne peut pas être annulée." },
|
||||
"historyCleared": { "message": "Historique de visionnage effacé." },
|
||||
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
||||
"errorGeneratingScript": { "message": "Générez d'abord un script avant de pouvoir le copier." },
|
||||
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
||||
"scriptCopied": { "message": "Script PHP copié dans le presse-papiers." },
|
||||
"errorCopyingScript": { "message": "Erreur lors de la copie du script." },
|
||||
"scriptGenerated": { "message": "Script PHP généré." },
|
||||
"errorLoadingAlbum": { "message": "Erreur lors du chargement de l'album : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Erreur : Aucun serveur de photos n'a été sélectionné." },
|
||||
"noPhotoServerSelected": { "message": "Erreur : Aucun serveur photo n'a été sélectionné." },
|
||||
"loadingGenres": { "message": "Chargement des genres..." },
|
||||
"errorLoadingGenres": { "message": "Erreur de chargement" },
|
||||
"noContentFound": { "message": "Aucun résultat trouvé." },
|
||||
"couldNotLoadContent": { "message": "Impossible de charger le contenu." },
|
||||
"noFavorites": { "message": "Vous n'avez pas encore de favoris." },
|
||||
"errorLoadingFavorites": { "message": "Erreur lors du chargement des favoris." },
|
||||
"historyEmpty": { "message": "Votre historique est isEmpty." },
|
||||
"historyEmptySub": { "message": "Parcourez et regardez du contenu pour qu'il apparaisse ici." },
|
||||
"historyEmpty": { "message": "Votre historique est vide." },
|
||||
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
||||
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
||||
"noRecommendations": { "message": "Nous avons besoin de mieux vous connaître pour vous faire des recommandations !" },
|
||||
"noRecommendations": { "message": "Nous devons mieux vous connaître pour vous donner des recommandations !" },
|
||||
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
||||
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce token." },
|
||||
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
||||
"searchingActorContent": { "message": "Recherche de contenu de $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 du ou des flux : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorAddingStream": { "message": "Erreur lors de l'ajout de stream(s) : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "L'URL du serveur PHP n'est pas configurée. Veuillez la configurer dans les Paramètres." },
|
||||
"searchingStreams": { "message": "Recherche de flux pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Envoi de $count$ flux au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Flux ajouté(s) avec succès." },
|
||||
"generatingM3U": { "message": "Génération du M3U pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "M3U pour \"$title$\" téléchargé.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Erreur lors de la génération du M3U : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Paramètres sauvegardés avec succès." },
|
||||
"errorSavingSettings": { "message": "Erreur lors de la sauvegarde des paramètres dans la base de données." },
|
||||
"languageChangeReload": { "message": "Langue modifiée. L'application va maintenant se recharger." },
|
||||
"searchingStreams": { "message": "Recherche de streams pour \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
||||
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "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" } } },
|
||||
"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." },
|
||||
"languageChangeReload": { "message": "Langue changée. L'application va maintenant être rechargée." },
|
||||
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
||||
"removedFromFavorites": { "message": "Retiré des favoris." },
|
||||
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
||||
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
||||
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
||||
"noPlexTokens": { "message": "Aucun token Plex configuré." },
|
||||
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
||||
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Sections nettoyées." },
|
||||
"tokenFoundServers": { "message": "Le token $token$... a trouvé $count$ serveurs.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Erreur lors du traitement du token $token$... : $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
||||
"retryPhaseFinished": { "message": "Phase de relance terminée." },
|
||||
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
||||
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
||||
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
||||
"scanCancelledInfo": { "message": "Scan annulé." },
|
||||
"retyingSection": { "message": "Nouvelle tentative pour la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCCÈS] Relance de \"$title$\" terminée.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERREUR FINALE] Échec de la nouvelle tentative pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"noRetriesPending": { "message": "Aucune relance en attente." },
|
||||
"startingRetryPhase": { "message": "Démarrage de la phase de relance pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Phase de relance annulée." },
|
||||
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
||||
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
||||
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
||||
@ -237,23 +228,14 @@
|
||||
"errorFetchingArtistSongs": { "message": "Erreur lors de la récupération des chansons de l'artiste." },
|
||||
"errorLoadingSongs": { "message": "Erreur lors du chargement des chansons." },
|
||||
"noArtistsFound": { "message": "Aucun artiste trouvé." },
|
||||
"artistsCounter": { "message": "$start$-$end$ sur $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Artistes", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Chargement..." },
|
||||
"noSongsFound": { "message": "Aucune chanson trouvée." },
|
||||
"shuffleOn": { "message": "Mode aléatoire activé." },
|
||||
"shuffleOff": { "message": "Mode aléatoire désactivé." },
|
||||
"downloadingSong": { "message": "Début du téléchargement de \"$title$\"", "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" } } },
|
||||
"generatingAlbumM3U": { "message": "Génération du M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U de l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"playbackError": { "message": "Erreur de lecture" },
|
||||
"errorLabel": { "message": "Erreur" },
|
||||
"reloadingPage": { "message": "Rechargement de la page..." },
|
||||
"viewed": { "message": "Vu" },
|
||||
"local": { "message": "Local" },
|
||||
"topRatedSort": {"message": "Mieux notés"},
|
||||
"topRatedSort": {"message": "Les mieux notés"},
|
||||
"recentSort": {"message": "Récents"},
|
||||
"popularSort": {"message": "Populaires"},
|
||||
"moviesSectionTitle": {"message": "Films"},
|
||||
@ -261,163 +243,199 @@
|
||||
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||
"explore": {"message": "Explorer"},
|
||||
"noGenre": {"message": "Non classé"},
|
||||
"noGenre": {"message": "Sans catégorie"},
|
||||
"synopsis": {"message": "Synopsis"},
|
||||
"noSynopsis": {"message": "Aucun synopsis disponible."},
|
||||
"director": {"message": "Réalisateur:"},
|
||||
"writer": {"message": "Scénariste:"},
|
||||
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
||||
"director": {"message": "Réalisateur :"},
|
||||
"writer": {"message": "Scénariste :"},
|
||||
"viewOnImdb": {"message": "Voir sur IMDb"},
|
||||
"watchTrailer": {"message": "Voir la bande-annonce"},
|
||||
"addToFavorites": {"message": "Ajouter aux favoris"},
|
||||
"removeFromFavorites": {"message": "Retirer des favoris"},
|
||||
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
||||
"notAvailable": {"message": "Non disponible"},
|
||||
"mainCast": {"message": "Distribution Principale"},
|
||||
"seasonsAndEpisodes": {"message": "Saisons & Épisodes"},
|
||||
"similarContent": {"message": "Contenu Similaire"},
|
||||
"mainCast": {"message": "Distribution principale"},
|
||||
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
||||
"similarContent": {"message": "Contenu similaire"},
|
||||
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
||||
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||
"noTrailerFound": {"message": "Aucune bande-annonce n'a été trouvée pour ce titre."},
|
||||
"fatalInitError": {"message": "Erreur d'Initialisation Fatale"},
|
||||
"fatalInitErrorSub": {"message": "L'application n'a pas pu être chargée."},
|
||||
"invalidStreamInfo": {"message": "Information invalide."},
|
||||
"noTrailerFound": {"message": "Aucune bande-annonce trouvée pour ce titre."},
|
||||
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
||||
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
||||
"invalidStreamInfo": {"message": "Informations invalides."},
|
||||
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
||||
"noPlexServersForStreams": {"message": "Pas de serveurs Plex."},
|
||||
"notFoundOnServers": {"message": "\"query$\" non trouvé sur les serveurs.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
||||
"notFoundOnServers": {"message": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "À l'instant" },
|
||||
"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_yesterday": { "message": "Hier" },
|
||||
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
||||
"errorLoadingDetails": { "message": "Erreur de Chargement des Détails" },
|
||||
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
||||
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
||||
"errorServerResponse": { "message": "Réponse non réussie du serveur." },
|
||||
"errorServerResponse": { "message": "Réponse du serveur non réussie." },
|
||||
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Erreur d'analyse du XML de Plex." },
|
||||
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
||||
"untitled": { "message": "Sans titre" },
|
||||
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Aucun serveur de photos" },
|
||||
"noPhotoServers": { "message": "Aucun serveur photo" },
|
||||
"jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
|
||||
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et le nom d'utilisateur de Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin à : $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
||||
"jellyfinFetchingLibraries": { "message": "Récupération des bibliothèques..." },
|
||||
"jellyfinFetchFailed": { "message": "Échec 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 sur Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ bibliothèque(s) multimédia(s) trouvée(s).", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName scannée, $count$ titres ajoutés.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Échec du scan de la bibliothèque '$libraryName.", "placeholders": { "libraryName": { "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." },
|
||||
"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" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Erreur lors du scan 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" } } },
|
||||
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
||||
"notFoundOnJellyfin": { "message": "\"query$\" non trouvé sur Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "\"query$\" non trouvé sur aucun serveur.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"localOnPlex": { "message": "Sur Plex" },
|
||||
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
||||
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
||||
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
||||
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
|
||||
"activityViewerTitle": { "message": "Visualiseur d'Activité du Serveur" },
|
||||
"activitySelectServer": { "message": "Sélectionnez un serveur" },
|
||||
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
||||
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
||||
"activityCheckBtn": { "message": "Actualiser" },
|
||||
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
||||
"activitySessionUser": { "message": "Utilisateur" },
|
||||
"activitySessionDevice": { "message": "Appareil" },
|
||||
"activitySessionContent": { "message": "Contenu" },
|
||||
"activitySessionState": { "message": "État" },
|
||||
"activitySessionIdentifier": { "message": "Identifiant du Client" },
|
||||
"activitySessionIdentifier": { "message": "Identifiant du client" },
|
||||
"activityCopyID": { "message": "Copier l'ID" },
|
||||
"activityError": { "message": "Impossible de récupérer l'activité du serveur." },
|
||||
"activityError": { "message": "Impossible d'obtenir l'activité du serveur." },
|
||||
"activityCopied": { "message": "Identifiant copié dans le presse-papiers !" },
|
||||
"activityCopyError": { "message": "Échec de la copie de l'identifiant." },
|
||||
"activityCopyError": { "message": "Erreur lors de la copie de l'identifiant." },
|
||||
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
||||
"availableOnPlex": { "message": "Disponible sur Plex" },
|
||||
"navM3uGenerator": { "message": "Générateur M3U" },
|
||||
"m3uGeneratorTitle": { "message": "Générateur de Listes de Lecture M3U" },
|
||||
"selectAServer": { "message": "Sélectionnez un serveur..." },
|
||||
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
||||
"selectAServer": { "message": "Sélectionner un serveur..." },
|
||||
"downloadM3u": { "message": "Télécharger M3U" },
|
||||
"m3uGenerator": { "message": "Générateur M3U" },
|
||||
"selectServer": { "message": "Sélectionner le Serveur" },
|
||||
"selectLibraries": { "message": "Sélectionner les Bibliothèques" },
|
||||
"howToUse": { "message": "Comment Utiliser" },
|
||||
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
||||
"howToUse": { "message": "Comment utiliser" },
|
||||
"m3uInstruction1": { "message": "Choisissez un serveur dans la liste." },
|
||||
"m3uInstruction2": { "message": "Sélectionnez une ou plusieurs bibliothèques à inclure." },
|
||||
"m3uInstruction3": { "message": "Cliquez sur le bouton de téléchargement." },
|
||||
"m3uInstruction4": { "message": "Importez le fichier .m3u dans votre lecteur compatible." },
|
||||
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
||||
"allRegions": { "message": "Toutes les régions" },
|
||||
"chatOpen": { "message": "Ouvrir le chat" },
|
||||
"chatTitle": { "message": "Assistant IA" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Écrivez votre message..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Désolé, je n'ai pas pu obtenir de réponse. Veuillez réessayer." },
|
||||
"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." },
|
||||
"chatApiKeyMissing": { "message": "La clé API OpenAI n'est pas définie. Veuillez la configurer dans les paramètres de l'extension." },
|
||||
"chatApiInvalidResponse": { "message": "L'API a renvoyé une réponse non valide. Veuillez réessayer." },
|
||||
"chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Demandez-moi des informations sur les films, les séries ou tout ce que vous voulez savoir." },
|
||||
"chatGoogleApiKeyMissing": { "message": "La clé API Google Gemini n'est pas configurée. Veuillez la configurer 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." },
|
||||
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
||||
"downloadAll": { "message": "Tout télécharger" },
|
||||
"download": { "message": "Télécharger" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex des films ou des séries." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "Le titre à rechercher." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "Le type de contenu à rechercher (film ou série)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navigue vers une page spécifique de l'application." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "La page vers laquelle naviguer." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Obtient les statistiques de l'utilisateur." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Affiche les détails d'un film ou d'une série." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "Le titre du film ou de la série." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "Le type de contenu (film ou série)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Ajoute un film ou une série à la liste de lecture." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "Le titre du film ou de la série." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "Le type de contenu (film ou série)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Télécharge la liste de lecture d'un film ou d'une série." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "Le titre du film ou de la série." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "Le type de contenu (film ou série)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou supprime un film ou une série des favoris." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "Le titre du film ou de la série." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "Le type de contenu (film ou série)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Obtient des recommandations pour l'utilisateur." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "Le type de contenu à filtrer (film ou série)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "Le genre par lequel filtrer." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "L'année par laquelle filtrer." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "L'ordre dans lequel trier les résultats." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Joue de la musique d'un artiste spécifique." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "Le nom de l'artiste." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Efface l'historique du chat." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Supprime la base de données de l'extension." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Met à jour tous les jetons Plex." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton Plex." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "Le jeton Plex à ajouter." },
|
||||
"aiToolChangeRegionDesc": { "message": "Change la région pour la découverte de contenu." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "Le code de région à deux lettres (par exemple, US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Efface tous les favoris de l'utilisateur." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Efface la vue des recommandations." },
|
||||
"aiToolSearchLibraryDesc": { "message": "Recherche dans la bibliothèque Plex de l'utilisateur des films ou séries par titre." },
|
||||
"aiToolSearchLibraryQueryParamDesc": { "message": "Le titre du film ou de la série à rechercher." },
|
||||
"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." },
|
||||
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
||||
"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." },
|
||||
"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." },
|
||||
"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é." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
||||
"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." },
|
||||
"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'." },
|
||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Le nom du fichier M3U à télécharger (par exemple, 'MaListe.m3u'). S'il n'est pas fourni, un nom par défaut sera utilisé." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
||||
"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." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle des films ou des séries, permettant d'affiner les résultats par type, genre, année et ordre de classement." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
||||
"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')." },
|
||||
"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." },
|
||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle 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." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Lance un scan complet de tous les serveurs et bibliothèques Plex associés aux jetons configurés dans l'extension. Met à jour tous les films, séries, artistes et photos." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du 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." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "Le code pays ISO 3166-1 à deux lettres pour la nouvelle région (par exemple, 'US' pour les États-Unis, 'ES' pour l'Espagne, 'MX' pour le Mexique)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
||||
"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." },
|
||||
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
||||
"aiToolItemNotFound": { "message": "L'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolAddToPlaylistSuccess": { "message": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"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." },
|
||||
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolPlayMusicSuccess": { "message": "Lecture de musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolUnknown": { "message": "Outil inconnu : '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
||||
"aiToolFavoritesClearError": { "message": "Erreur lors de la suppression 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." },
|
||||
"aiToolRecommendationsClearError": { "message": "Erreur lors de la suppression des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va maintenant se recharger." },
|
||||
"aiToolRecommendationsClearError": { "message": "Erreur lors de l'effacement des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va être rechargée." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Erreur lors de la suppression de la base de données : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "La suppression de la base de données est bloquée. Veuillez fermer les autres onglets de l'application." },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "La suppression de la base de données est bloquée. Fermez les autres onglets de l'application." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Tous les jetons ont été mis à jour avec succès." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
||||
"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" } } },
|
||||
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "Vous êtes un assistant expert en films et séries nommé CinePlex. Votre fonction principale est d'aider les utilisateurs à interagir avec leur médiathèque et à découvrir du contenu. Suivez ces règles : 1. Lorsqu'un utilisateur demande une liste ou une recommandation (par exemple, 'donnez-moi 5 films d'horreur', 'les meilleures séries de science-fiction'), vous DEVEZ utiliser vos propres connaissances pour générer la liste et la présenter sous forme de liste numérotée ou à puces. N'UTILISEZ PAS d'outils pour cette tâche de découverte initiale. 2. Après avoir présenté la liste, si l'utilisateur vous demande de la télécharger, de la vérifier ou de créer un M3U, ALORS et seulement alors, utilisez l'outil 'generate_m3u_from_titles_list' en lui passant les titres que vous venez de mentionner. 3. Pour toute autre action telle que la navigation dans l'application, l'obtention de statistiques ou la recherche d'un TITRE SPÉCIFIQUE dans la bibliothèque de l'utilisateur, utilisez les outils appropriés. Soyez concis, amical et efficace." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "La liste des titres à traiter est vide." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "Il semble que vous n'ayez aucun des titres de cette liste sur vos serveurs locaux." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "Le type de contenu à rechercher : 'movie' ou 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "Un nom de fichier personnalisé pour la liste de lecture M3U téléchargée." },
|
||||
"aiToolGenerateM3USuccess": { "message": "Compris ! Je génère une liste de lecture M3U avec $1 éléments. Le téléchargement devrait commencer sous peu.", "placeholders": { "1": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v3": { "message": "Vous êtes un assistant expert en films et séries nommé 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. **NE JAMAIS** prétendre 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 pro-activement à 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 la navigation, l'obtention de statistiques ou la recherche d'un titre spécifique, utilisez les outils appropriés. Soyez toujours concis, amical et efficace." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Vérifie une liste de titres de films ou de séries par rapport aux serveurs locaux de l'utilisateur et, si des correspondances sont trouvées, génère et télécharge un fichier de liste de lecture M3U." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Une liste de titres de films ou de séries à vérifier et à télécharger." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la liste de lecture." },
|
||||
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
||||
"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." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
||||
"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." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Terminé ! J'ai trouvé $1 des $2 titres sur vos serveurs et j'ai commencé le téléchargement de la liste de lecture M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
|
||||
"aiToolM3UDownloadStarted": { "message": "Fait ! J'ai trouvé $1 sur $2 titres sur vos serveurs et j'ai lancé le téléchargement de la playlist M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||
"backToProviders": { "message": "Retour aux fournisseurs" },
|
||||
"artistsCounterSingle": { "message": "$total$ Artiste", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Chargement..." },
|
||||
"downloadingSong": { "message": "Démarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Génération M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
||||
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
||||
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
||||
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
||||
"noStreamsFoundForSelection": { "message": "Aucun stream trouvé pour la sélection." },
|
||||
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
||||
"welcomeToCinePlex": { "message": "" },
|
||||
"page": { "message": "Page" }
|
||||
}
|
@ -1,423 +1,441 @@
|
||||
{
|
||||
"appName": { "message": "CinePlex" },
|
||||
"appDescription": { "message": "Analizza i server Plex per trovare contenuti e li visualizza nell'interfaccia" },
|
||||
"appTagline": { "message": "Film, Serie TV e Musica" },
|
||||
"appLocaleCode": { "message": "it-IT" },
|
||||
"toggleNavigation": { "message": "Mostra/Nascondi Navigazione" },
|
||||
"searchPlaceholder": { "message": "Cerca film o serie TV..." },
|
||||
"openMusicPlayer": { "message": "Apri Lettore Musicale" },
|
||||
"settings": { "message": "Impostazioni" },
|
||||
"navMovies": { "message": "Film" },
|
||||
"navSeries": { "message": "Serie TV" },
|
||||
"navProviders": { "message": "Fornitori" },
|
||||
"navPhotos": { "message": "Foto" },
|
||||
"navStats": { "message": "Statistiche" },
|
||||
"navFavorites": { "message": "Preferiti" },
|
||||
"navHistory": { "message": "Cronologia" },
|
||||
"navRecommendations": { "message": "Consigliati" },
|
||||
"navMusic": { "message": "Musica" },
|
||||
"appDescription": { "message": "Scanne les serveurs Plex pour trouver du contenu et l'affiche dans l'interface" },
|
||||
"appTagline": { "message": "Films, Séries et Musique" },
|
||||
"appLocaleCode": { "message": "fr" },
|
||||
"toggleNavigation": { "message": "Basculer la navigation" },
|
||||
"searchPlaceholder": { "message": "Rechercher des films ou des séries..." },
|
||||
"openMusicPlayer": { "message": "Ouvrir le lecteur de musique" },
|
||||
"settings": { "message": "Paramètres" },
|
||||
"navMovies": { "message": "Films" },
|
||||
"navSeries": { "message": "Séries" },
|
||||
"navProviders": { "message": "Fournisseurs" },
|
||||
"navPhotos": { "message": "Photos" },
|
||||
"navStats": { "message": "Statistiques" },
|
||||
"navFavorites": { "message": "Favoris" },
|
||||
"navHistory": { "message": "Historique" },
|
||||
"navRecommendations": { "message": "Recommandations" },
|
||||
"navMusic": { "message": "Musique" },
|
||||
"navM3uGenerator": { "message": "Générateur M3U" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Esplora migliaia di film e serie TV." },
|
||||
"addStream": { "message": "Aggiungi Stream" },
|
||||
"moreInfo": { "message": "Più informazioni" },
|
||||
"popularMovies": { "message": "Film Popolari" },
|
||||
"allGenres": { "message": "Tutti i Generi" },
|
||||
"allYears": { "message": "Tutti gli Anni" },
|
||||
"sortPopular": { "message": "Più Popolari" },
|
||||
"sortTopRated": { "message": "Più Votati" },
|
||||
"sortRecent": { "message": "Più Recenti" },
|
||||
"loadMore": { "message": "Carica Altri" },
|
||||
"photosBreadcrumbHome": { "message": "Album" },
|
||||
"selectServer": { "message": "Seleziona un server" },
|
||||
"loading": { "message": "Caricamento in corso..." },
|
||||
"loadingLibraries": { "message": "Caricamento librerie in corso..." },
|
||||
"photosEmptyState": { "message": "Nessun album o foto trovati." },
|
||||
"photosEmptyStateSub": { "message": "Seleziona un server o assicurati di avere una libreria di foto su Plex." },
|
||||
"statsTitle": { "message": "Statistiche della Libreria" },
|
||||
"statsAllTokens": { "message": "Tutti i Token" },
|
||||
"statsAnalyzing": { "message": "Analisi della tua libreria in corso..." },
|
||||
"statsActiveTokens": { "message": "Token Attivi" },
|
||||
"statsServersFound": { "message": "Server Trovati" },
|
||||
"statsUniqueMovies": { "message": "Film Unici" },
|
||||
"statsUniqueSeries": { "message": "Serie TV Uniche" },
|
||||
"statsUniqueArtists": { "message": "Artisti Unici" },
|
||||
"statsTokenServers": { "message": "Server del Token" },
|
||||
"statsChartMoviesByGenre": { "message": "Contenuti per Genere (Film)" },
|
||||
"statsChartSeriesByGenre": { "message": "Contenuti per Genere (Serie TV)" },
|
||||
"statsChartByDecade": { "message": "Contenuti per Decennio" },
|
||||
"recommendationsTitle": { "message": "Consigliati per Te" },
|
||||
"historyTitle": { "message": "Cronologia di Visione" },
|
||||
"clearHistory": { "message": "Cancella Tutto" },
|
||||
"consoleTitle": { "message": "Console di Scansione Plex" },
|
||||
"footerCredit": { "message": "Un'interfaccia per il tuo universo Plex." },
|
||||
"backButton": { "message": "Indietro" },
|
||||
"closeTrailer": { "message": "Chiudi trailer" },
|
||||
"close": { "message": "Chiudi" },
|
||||
"photoViewer": { "message": "Visualizzatore Foto" },
|
||||
"previous": { "message": "Precedente" },
|
||||
"next": { "message": "Successivo" },
|
||||
"notificationTemplateText": { "message": "Notifica" },
|
||||
"settingsTitleFull": { "message": "Impostazioni e Configurazione" },
|
||||
"settingsTabGeneral": { "message": "Generale" },
|
||||
"heroSubtitle": { "message": "Explorez des milliers de films et de séries." },
|
||||
"addStream": { "message": "Ajouter un stream" },
|
||||
"moreInfo": { "message": "Plus d'informations" },
|
||||
"popularMovies": { "message": "Films populaires" },
|
||||
"allGenres": { "message": "Tous les genres" },
|
||||
"allYears": { "message": "Toutes les années" },
|
||||
"sortPopular": { "message": "Les plus populaires" },
|
||||
"sortTopRated": { "message": "Les mieux notés" },
|
||||
"sortRecent": { "message": "Les plus récents" },
|
||||
"loadMore": { "message": "Charger plus" },
|
||||
"photosBreadcrumbHome": { "message": "Albums" },
|
||||
"selectServer": { "message": "Sélectionner un serveur" },
|
||||
"loading": { "message": "Chargement..." },
|
||||
"loadingLibraries": { "message": "Chargement des bibliothèques..." },
|
||||
"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." },
|
||||
"statsTitle": { "message": "Statistiques de la bibliothèque" },
|
||||
"statsAllTokens": { "message": "Tous les jetons" },
|
||||
"statsAnalyzing": { "message": "Analyse de votre bibliothèque..." },
|
||||
"statsActiveTokens": { "message": "Jetons actifs" },
|
||||
"statsServersFound": { "message": "Serveurs trouvés" },
|
||||
"statsUniqueMovies": { "message": "Films uniques" },
|
||||
"statsUniqueSeries": { "message": "Séries uniques" },
|
||||
"statsUniqueArtists": { "message": "Artistes uniques" },
|
||||
"statsTokenServers": { "message": "Serveurs du jeton" },
|
||||
"statsChartMoviesByGenre": { "message": "Contenu par genre (Films)" },
|
||||
"statsChartSeriesByGenre": { "message": "Contenu par genre (Séries)" },
|
||||
"statsChartByDecade": { "message": "Contenu par décennie" },
|
||||
"recommendationsTitle": { "message": "Recommandations pour vous" },
|
||||
"historyTitle": { "message": "Historique de visionnage" },
|
||||
"clearHistory": { "message": "Tout effacer" },
|
||||
"consoleTitle": { "message": "Console de scan Plex" },
|
||||
"footerCredit": { "message": "Une interface pour votre univers Plex." },
|
||||
"closeTrailer": { "message": "Fermer la bande-annonce" },
|
||||
"close": { "message": "Fermer" },
|
||||
"photoViewer": { "message": "Visionneuse de photos" },
|
||||
"previous": { "message": "Précédent" },
|
||||
"next": { "message": "Suivant" },
|
||||
"notificationTemplateText": { "message": "Notification" },
|
||||
"settingsTitleFull": { "message": "Réglages et Configuration" },
|
||||
"settingsTabGeneral": { "message": "Général" },
|
||||
"settingsTabPlex": { "message": "Plex" },
|
||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||
"settingsTabPhpGen": { "message": "Generatore PHP" },
|
||||
"settingsTabData": { "message": "Dati" },
|
||||
"settingsApiServer": { "message": "Configurazione API e Server" },
|
||||
"settingsTmdbApiLabel": { "message": "Chiave API TMDB (Opzionale)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Verrà usata la chiave predefinita se lasciato vuoto" },
|
||||
"openaiApiKey": { "message": "Chiave API OpenAI" },
|
||||
"settingsTmdbLangLabel": { "message": "Lingua per TMDB e Interfaccia" },
|
||||
"settingsPhpUrlLabel": { "message": "URL del server per aggiungere gli stream" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://tuo-server.com/percorso/dello/script.php" },
|
||||
"settingsInterface": { "message": "Interfaccia" },
|
||||
"settingsLightTheme": { "message": "Modalità Chiara" },
|
||||
"settingsShowHero": { "message": "Mostra sezione di benvenuto 'Hero'" },
|
||||
"settingsScanContent": { "message": "Scansione Contenuti" },
|
||||
"settingsScanDesc": { "message": "Seleziona cosa scansionare e premi il pulsante." },
|
||||
"settingsScanMovies": { "message": "Film" },
|
||||
"settingsScanShows": { "message": "Serie TV" },
|
||||
"settingsScanArtists": { "message": "Musica" },
|
||||
"settingsScanPhotos": { "message": "Foto" },
|
||||
"settingsSelectAll": { "message": "Seleziona Tutto" },
|
||||
"settingsStartScan": { "message": "Avvia Scansione" },
|
||||
"settingsPlexTokens": { "message": "Token Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Modifica la lista dei token Plex (formato JSON)." },
|
||||
"settingsSaveTokens": { "message": "Salva Token" },
|
||||
"settingsJellyfinTitle": { "message": "Impostazioni Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Aggiungi i dati del tuo server Jellyfin per scansionarne il contenuto." },
|
||||
"jellyfinUrlLabel": { "message": "URL Server Jellyfin" },
|
||||
"jellyfinUserLabel": { "message": "Nome utente" },
|
||||
"jellyfinPassLabel": { "message": "Password" },
|
||||
"jellyfinConnectAndScan": { "message": "Connetti e Scansiona" },
|
||||
"settingsPhpGenTitle": { "message": "Generatore di Script PHP per Server" },
|
||||
"settingsPhpFileOptions": { "message": "Opzioni File" },
|
||||
"settingsPhpSavePathLabel": { "message": "Percorso di salvataggio sul server" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Es: /var/www/html/lists (vuoto per la stessa cartella)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nome file" },
|
||||
"settingsPhpFileAction": { "message": "Azione sul file" },
|
||||
"settingsPhpActionAppend": { "message": "Aggiungi alla fine del file (cumulativo)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Sovrascrivi il file (ricomincia da capo)" },
|
||||
"settingsPhpSecurity": { "message": "Sicurezza (Opzionale)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Usa chiave segreta (Consigliato)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Inserisci una chiave segreta sicura" },
|
||||
"settingsPhpGeneratedCode": { "message": "Codice Generato" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "Il codice PHP generato apparirà qui." },
|
||||
"settingsGenerateScript": { "message": "Genera Script" },
|
||||
"settingsCopyScript": { "message": "Copia Script" },
|
||||
"settingsDataManagement": { "message": "Gestione Database Locale" },
|
||||
"settingsImportDb": { "message": "Importa DB da File" },
|
||||
"settingsExportDb": { "message": "Esporta DB su File" },
|
||||
"settingsClearContent": { "message": "Cancella Dati Locali dei Contenuti" },
|
||||
"settingsClearContentDesc": { "message": "Questa azione eliminerà film, serie TV e musica dal database locale, ma non influenzerà i tuoi preferiti o le impostazioni." },
|
||||
"settingsClose": { "message": "Chiudi" },
|
||||
"settingsSave": { "message": "Salva Impostazioni" },
|
||||
"musicSidenavTitle": { "message": "Musica Plex" },
|
||||
"musicAllServers": { "message": "Tutti i Server" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Cerca artista..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Cerca nella discografia..." },
|
||||
"musicNothingPlaying": { "message": "Nessuna riproduzione in corso" },
|
||||
"musicSelectSong": { "message": "Seleziona un brano" },
|
||||
"musicToStart": { "message": "per avviare la riproduzione" },
|
||||
"miniplayerDownloadSong": { "message": "Scarica brano" },
|
||||
"miniplayerDownloadAlbum": { "message": "Scarica album M3U" },
|
||||
"settingsTabPhpGen": { "message": "Générateur PHP" },
|
||||
"settingsTabData": { "message": "Données" },
|
||||
"settingsApiServer": { "message": "Configuration API et serveur" },
|
||||
"settingsTmdbApiLabel": { "message": "Clé API TMDB (Facultatif)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "La clé par défaut sera utilisée si laissée vide" },
|
||||
"settingsGoogleApiLabel": { "message": "Clé API Google Gemini (Facultatif)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Nécessaire pour utiliser l'assistant IA" },
|
||||
"settingsRegionLabel": { "message": "Région pour la découverte de contenu" },
|
||||
"allRegions": { "message": "Toutes les régions" },
|
||||
"settingsPhpUrlLabel": { "message": "URL du serveur pour ajouter des streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://votre-serveur.com/chemin/vers/le-script.php" },
|
||||
"settingsInterface": { "message": "Interface" },
|
||||
"settingsLightTheme": { "message": "Mode clair" },
|
||||
"settingsShowHero": { "message": "Afficher la section de bienvenue 'Hero'" },
|
||||
"settingsScanContent": { "message": "Scan de contenu" },
|
||||
"settingsScanDesc": { "message": "Sélectionnez ce que vous voulez scanner et cliquez sur le bouton." },
|
||||
"settingsScanMovies": { "message": "Films" },
|
||||
"settingsScanShows": { "message": "Séries" },
|
||||
"settingsScanArtists": { "message": "Musique" },
|
||||
"settingsScanPhotos": { "message": "Photos" },
|
||||
"settingsSelectAll": { "message": "Tout sélectionner" },
|
||||
"settingsStartScan": { "message": "Lancer le scan" },
|
||||
"settingsPlexTokens": { "message": "Jetons Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Modifier la liste des jetons Plex (format JSON)." },
|
||||
"settingsSaveTokens": { "message": "Sauvegarder les jetons" },
|
||||
"settingsJellyfinTitle": { "message": "Configuration Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Ajoutez les détails de votre serveur Jellyfin pour scanner son contenu." },
|
||||
"jellyfinUrlLabel": { "message": "URL du serveur Jellyfin" },
|
||||
"jellyfinUserLabel": { "message": "Nom d'utilisateur" },
|
||||
"jellyfinPassLabel": { "message": "Mot de passe" },
|
||||
"jellyfinConnectAndScan": { "message": "Connecter et scanner" },
|
||||
"settingsPhpGenTitle": { "message": "Générateur de script PHP pour le serveur" },
|
||||
"settingsPhpFileOptions": { "message": "Options de fichier" },
|
||||
"settingsPhpSavePathLabel": { "message": "Chemin de sauvegarde sur le serveur" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listes (vide pour le même dossier)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nom de fichier" },
|
||||
"settingsPhpFileAction": { "message": "Action sur le fichier" },
|
||||
"settingsPhpActionAppend": { "message": "Ajouter à la fin du fichier (cumulatif)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Écraser le fichier (repartir de zéro)" },
|
||||
"settingsPhpSecurity": { "message": "Sécurité (Facultatif)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Utiliser une clé secrète (Recommandé)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Saisissez une clé secrète sécurisée" },
|
||||
"settingsPhpGeneratedCode": { "message": "Code généré" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "Le code PHP généré apparaîtra ici." },
|
||||
"settingsGenerateScript": { "message": "Générer le script" },
|
||||
"settingsCopyScript": { "message": "Copier le script" },
|
||||
"settingsDataManagement": { "message": "Gestion de la base de données locale" },
|
||||
"settingsImportDb": { "message": "Importer la base de données depuis un fichier" },
|
||||
"settingsExportDb": { "message": "Exporter la base de données vers un fichier" },
|
||||
"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." },
|
||||
"settingsClose": { "message": "Fermer" },
|
||||
"settingsSave": { "message": "Enregistrer les paramètres" },
|
||||
"musicSidenavTitle": { "message": "Musique de Plex" },
|
||||
"musicAllServers": { "message": "Tous les serveurs" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Rechercher un artiste..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Rechercher dans la discographie..." },
|
||||
"musicNothingPlaying": { "message": "Rien ne joue" },
|
||||
"musicSelectSong": { "message": "Sélectionnez une chanson" },
|
||||
"musicToStart": { "message": "pour commencer à jouer" },
|
||||
"miniplayerDownloadSong": { "message": "Télécharger la chanson" },
|
||||
"miniplayerDownloadAlbum": { "message": "Télécharger l'album M3U" },
|
||||
"miniplayerVolume": { "message": "Volume" },
|
||||
"miniplayerShuffle": { "message": "Riproduzione Casuale" },
|
||||
"miniplayerEqualizer": { "message": "Equalizzatore" },
|
||||
"miniplayerOpenList": { "message": "Apri lista" },
|
||||
"eqTitle": { "message": "Equalizzatore Grafico" },
|
||||
"eqPresetsLabel": { "message": "Preimpostazioni" },
|
||||
"eqPresetFlat": { "message": "Piatto" },
|
||||
"miniplayerShuffle": { "message": "Lecture aléatoire" },
|
||||
"miniplayerEqualizer": { "message": "Égaliseur" },
|
||||
"miniplayerOpenList": { "message": "Ouvrir la liste" },
|
||||
"eqTitle": { "message": "Égaliseur graphique" },
|
||||
"eqPresetsLabel": { "message": "Préréglages" },
|
||||
"eqPresetFlat": { "message": "Plat" },
|
||||
"eqPresetRock": { "message": "Rock" },
|
||||
"eqPresetPop": { "message": "Pop" },
|
||||
"eqPresetJazz": { "message": "Jazz" },
|
||||
"eqPresetClassical": { "message": "Classica" },
|
||||
"eqPresetBassBoost": { "message": "Aumento Bassi" },
|
||||
"eqPreampLabel": { "message": "Pre-Amp" },
|
||||
"infoModalTitle": { "message": "Informazioni" },
|
||||
"infoModalFieldTitle": { "message": "Titolo:" },
|
||||
"infoModalFieldArtist": { "message": "Artista:" },
|
||||
"infoModalFieldAlbum": { "message": "Album:" },
|
||||
"infoModalFieldSong": { "message": "Brano:" },
|
||||
"infoModalFieldYear": { "message": "Anno:" },
|
||||
"infoModalFieldGenre": { "message": "Genere:" },
|
||||
"lang_en": { "message": "Inglese" },
|
||||
"lang_es": { "message": "Spagnolo" },
|
||||
"lang_fr": { "message": "Francese" },
|
||||
"lang_de": { "message": "Tedesco" },
|
||||
"lang_it": { "message": "Italiano" },
|
||||
"lang_pt": { "message": "Portoghese" },
|
||||
"essentialFeaturesNotSupported": { "message": "Il tuo browser non supporta le funzionalità essenziali." },
|
||||
"dbAccessError": { "message": "Errore di accesso al database locale." },
|
||||
"dbUpdateNeeded": { "message": "Il database deve essere aggiornato, si prega di ricaricare la pagina." },
|
||||
"dbBlocked": { "message": "Per continuare, chiudi le altre schede di questa applicazione." },
|
||||
"deletingContentData": { "message": "Cancellazione dei dati locali dei contenuti in corso..." },
|
||||
"noContentDataToDelete": { "message": "Nessun dato di contenuto da cancellare." },
|
||||
"contentDataDeleted": { "message": "Dati dei contenuti cancellati da IndexedDB." },
|
||||
"errorDeletingData": { "message": "Errore durante la cancellazione dei dati: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailable": { "message": "Editor di testo non disponibile." },
|
||||
"errorLoadingTokens": { "message": "Errore nel caricamento dei token nell'editor." },
|
||||
"errorLoadingTokensMessage": { "message": "Errore nel caricamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor non disponibile per il salvataggio." },
|
||||
"invalidJsonFormat": { "message": "Formato JSON non valido. Deve essere { \"tokens\": [...] }" },
|
||||
"tokensSaved": { "message": "Token salvati con successo." },
|
||||
"errorSavingTokens": { "message": "Errore nel salvataggio dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "IndexedDB non è disponibile." },
|
||||
"dbExported": { "message": "Database esportato con successo." },
|
||||
"errorExportingDb": { "message": "Errore durante l'esportazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"invalidJsonFile": { "message": "Il file non contiene un oggetto JSON valido." },
|
||||
"noDataToImport": { "message": "Il file non contiene dati per le sezioni correnti del DB." },
|
||||
"dbImported": { "message": "Database importato con successo." },
|
||||
"errorImportingDb": { "message": "Errore durante l'importazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"updatingView": { "message": "Aggiornamento della vista con i nuovi dati in corso..." },
|
||||
"confirmClearContent": { "message": "Sei sicuro di voler cancellare i dati locali dei contenuti (Film, Serie TV, Musica, ecc.)? Preferiti e Impostazioni NON verranno eliminati." },
|
||||
"trailerNotFound": { "message": "Nessun trailer trovato per questo titolo." },
|
||||
"confirmClearHistory": { "message": "Sei sicuro di voler cancellare tutta la cronologia di visione? Questa azione non può essere annullata." },
|
||||
"historyCleared": { "message": "Cronologia di visione cancellata." },
|
||||
"historyItemDeleted": { "message": "Elemento cancellato dalla cronologia." },
|
||||
"errorGeneratingScript": { "message": "Prima genera uno script per poterlo copiare." },
|
||||
"scriptCopied": { "message": "Script PHP copiato negli appunti." },
|
||||
"errorCopyingScript": { "message": "Errore durante la copia dello script." },
|
||||
"scriptGenerated": { "message": "Script PHP generato." },
|
||||
"errorLoadingAlbum": { "message": "Errore nel caricamento dell'album: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Errore: Nessun server di foto è stato selezionato." },
|
||||
"loadingGenres": { "message": "Caricamento generi in corso..." },
|
||||
"errorLoadingGenres": { "message": "Errore nel caricamento" },
|
||||
"noContentFound": { "message": "Nessun risultato trovato." },
|
||||
"couldNotLoadContent": { "message": "Impossibile caricare il contenuto." },
|
||||
"noFavorites": { "message": "Non hai ancora nessun preferito." },
|
||||
"errorLoadingFavorites": { "message": "Errore nel caricamento dei preferiti." },
|
||||
"historyEmpty": { "message": "La tua cronologia è vuota." },
|
||||
"historyEmptySub": { "message": "Sfoglia e guarda contenuti perché appaiano qui." },
|
||||
"errorGeneratingRecommendations": { "message": "Errore nella generazione dei consigliati." },
|
||||
"noRecommendations": { "message": "Dobbiamo conoscerti meglio per darti dei consigli!" },
|
||||
"errorGeneratingStats": { "message": "Errore nella generazione delle statistiche." },
|
||||
"noServersForToken": { "message": "Nessun server associato trovato per questo token." },
|
||||
"searchingActorContent": { "message": "Ricerca dei contenuti di $actorName$ in corso", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorLoadingActorContent": { "message": "Impossibile caricare i contenuti di $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorAddingStream": { "message": "Errore nell'aggiungere stream: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "L'URL del server PHP non è configurato. Per favore, impostalo nelle Impostazioni." },
|
||||
"searchingStreams": { "message": "Ricerca di stream per \"$title$\" in corso...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Invio di $count$ stream al server in corso...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream aggiunti con successo." },
|
||||
"generatingM3U": { "message": "Generazione M3U per \"$title$\" in corso...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "M3U per \"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Errore nella generazione dell'M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Impostazioni salvate con successo." },
|
||||
"errorSavingSettings": { "message": "Errore nel salvataggio delle impostazioni nel database." },
|
||||
"languageChangeReload": { "message": "Lingua cambiata. L'applicazione verrà ora ricaricata." },
|
||||
"addedToFavorites": { "message": "Aggiunto ai preferiti." },
|
||||
"removedFromFavorites": { "message": "Rimosso dai preferiti." },
|
||||
"plexScanInProgress": { "message": "Scansione Plex già in corso." },
|
||||
"plexScanStarting": { "message": "Avvio scansione Plex in corso..." },
|
||||
"noPlexTokens": { "message": "Nessun token Plex configurato." },
|
||||
"clearingSections": { "message": "Pulizia sezioni: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Sezioni pulite." },
|
||||
"tokenFoundServers": { "message": "Token $token$... ha trovato $count$ server.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Errore nell'elaborazione del token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Fase di scansione iniziale completata." },
|
||||
"retryPhaseFinished": { "message": "Fase di nuovo tentativo terminata." },
|
||||
"plexScanFinished": { "message": "Scansione Plex terminata. Aggiornamento dei contenuti in corso..." },
|
||||
"plexScanFatalError": { "message": "ERRORE FATALE: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Errore durante la scansione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"scanCancelled": { "message": "Scansione annullata dall'utente." },
|
||||
"scanCancelledInfo": { "message": "Scansione annullata." },
|
||||
"retyingSection": { "message": "Nuovo tentativo per la sezione \"$title$\"...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCCESSO] Nuovo tentativo per \"$title$\" completato.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERRORE FINALE] Nuovo tentativo fallito per \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"noRetriesPending": { "message": "Nessun nuovo tentativo in sospeso." },
|
||||
"startingRetryPhase": { "message": "Avvio fase di nuovo tentativo per $count$ sezioni...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Fase di nuovo tentativo annullata." },
|
||||
"errorInitializingMusicPlayer": { "message": "Errore durante l'inizializzazione del lettore musicale." },
|
||||
"criticalErrorLoadingMusic": { "message": "Errore critico nel caricamento dei dati musicali." },
|
||||
"errorLoadingArtists": { "message": "Errore nel caricamento degli artisti." },
|
||||
"dbUnavailableError": { "message": "Errore: Database non disponibile." },
|
||||
"updatingMusicData": { "message": "Aggiornamento dati musicali in corso..." },
|
||||
"musicDataUpdated": { "message": "Dati musicali aggiornati." },
|
||||
"errorFetchingArtistSongs": { "message": "Errore nel recupero dei brani dell'artista." },
|
||||
"errorLoadingSongs": { "message": "Errore nel caricamento dei brani." },
|
||||
"noArtistsFound": { "message": "Nessun artista trovato." },
|
||||
"artistsCounter": { "message": "$start$-$end$ di $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Artisti", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Caricamento..." },
|
||||
"noSongsFound": { "message": "Nessun brano trovato." },
|
||||
"shuffleOn": { "message": "Modalità riproduzione casuale attivata." },
|
||||
"shuffleOff": { "message": "Modalità riproduzione casuale disattivata." },
|
||||
"downloadingSong": { "message": "Avvio download di \"$title$\"...", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" scaricato.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Errore durante il download di \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Generazione M3U per \"$artist$\"...", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U per l'album \"$artist$\" generato.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"playbackError": { "message": "Errore di riproduzione" },
|
||||
"errorLabel": { "message": "Errore" },
|
||||
"reloadingPage": { "message": "Ricaricamento pagina in corso..." },
|
||||
"viewed": { "message": "Visto" },
|
||||
"local": { "message": "Locale" },
|
||||
"topRatedSort": {"message": "Più Votati"},
|
||||
"recentSort": {"message": "Recenti"},
|
||||
"popularSort": {"message": "Popolari"},
|
||||
"moviesSectionTitle": {"message": "Film"},
|
||||
"seriesSectionTitle": {"message": "Serie TV"},
|
||||
"searchResultsFor": {"message": "Risultati per \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||
"contentFrom": {"message": "Contenuti di $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||
"explore": {"message": "Esplora"},
|
||||
"noGenre": {"message": "Senza Categoria"},
|
||||
"synopsis": {"message": "Sinossi"},
|
||||
"noSynopsis": {"message": "Nessuna sinossi disponibile."},
|
||||
"director": {"message": "Regista:"},
|
||||
"writer": {"message": "Sceneggiatore:"},
|
||||
"viewOnImdb": {"message": "Vedi su IMDb"},
|
||||
"watchTrailer": {"message": "Guarda Trailer"},
|
||||
"addToFavorites": {"message": "Aggiungi ai preferiti"},
|
||||
"removeFromFavorites": {"message": "Rimuovi dai preferiti"},
|
||||
"notAvailable": {"message": "Non Disponibile"},
|
||||
"mainCast": {"message": "Cast Principale"},
|
||||
"seasonsAndEpisodes": {"message": "Stagioni ed Episodi"},
|
||||
"similarContent": {"message": "Contenuti Simili"},
|
||||
"episodesCount": {"message": "$count$ Episodi", "placeholders": {"count": {"content": "$1"}}},
|
||||
"seasonsCount": {"message": "$count$ Stagioni", "placeholders": {"count": {"content": "$1"}}},
|
||||
"eqPresetClassical": { "message": "Classique" },
|
||||
"eqPresetBassBoost": { "message": "Accentuation des basses" },
|
||||
"eqPreampLabel": { "message": "Préamplificateur" },
|
||||
"infoModalTitle": { "message": "Informations" },
|
||||
"infoModalFieldTitle": { "message": "Titre :" },
|
||||
"infoModalFieldArtist": { "message": "Artiste :" },
|
||||
"infoModalFieldAlbum": { "message": "Album :" },
|
||||
"infoModalFieldSong": { "message": "Chanson :" },
|
||||
"infoModalFieldYear": { "message": "Année :" },
|
||||
"infoModalFieldGenre": { "message": "Genre :" },
|
||||
"lang_en": { "message": "Anglais" },
|
||||
"lang_es": { "message": "Espagnol" },
|
||||
"lang_fr": { "message": "Français" },
|
||||
"lang_de": { "message": "Allemand" },
|
||||
"lang_it": { "message": "Italien" },
|
||||
"lang_pt": { "message": "Portugais" },
|
||||
"essentialFeaturesNotSupported": { "message": "Votre navigateur ne prend pas en charge les fonctions essentielles." },
|
||||
"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." },
|
||||
"dbBlocked": { "message": "Veuillez fermer les autres onglets de cette application pour continuer." },
|
||||
"deletingContentData": { "message": "Suppression des données de contenu local..." },
|
||||
"noContentDataToDelete": { "message": "Aucune donnée de contenu à supprimer." },
|
||||
"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" } } },
|
||||
"aceEditorNotAvailable": { "message": "Éditeur de texte non disponible." },
|
||||
"errorLoadingTokens": { "message": "Erreur lors du chargement des jetons pour l'édition." },
|
||||
"errorLoadingTokensMessage": { "message": "Erreur lors du chargement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Éditeur non disponible pour la sauvegarde." },
|
||||
"invalidJsonFormat": { "message": "Format JSON invalide. Doit être { \"tokens\": [...] }" },
|
||||
"tokensSaved": { "message": "Jetons enregistrés avec succès." },
|
||||
"errorSavingTokens": { "message": "Erreur lors de l'enregistrement des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "IndexedDB n'est pas disponible." },
|
||||
"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" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"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." },
|
||||
"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." },
|
||||
"historyCleared": { "message": "Historique de visionnage effacé." },
|
||||
"historyItemDeleted": { "message": "Élément supprimé de l'historique." },
|
||||
"errorGeneratingScript": { "message": "Générez d'abord un script pour pouvoir le copier." },
|
||||
"scriptCopied": { "message": "Script PHP copié dans le presse-papiers." },
|
||||
"errorCopyingScript": { "message": "Erreur lors de la copie du script." },
|
||||
"scriptGenerated": { "message": "Script PHP généré." },
|
||||
"errorLoadingAlbum": { "message": "Erreur lors du chargement de l'album : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Erreur : Aucun serveur photo n'a été sélectionné." },
|
||||
"loadingGenres": { "message": "Chargement des genres..." },
|
||||
"errorLoadingGenres": { "message": "Erreur de chargement" },
|
||||
"noContentFound": { "message": "Aucun résultat trouvé." },
|
||||
"couldNotLoadContent": { "message": "Impossible de charger le contenu." },
|
||||
"noFavorites": { "message": "Vous n'avez pas encore de favoris." },
|
||||
"errorLoadingFavorites": { "message": "Erreur lors du chargement des favoris." },
|
||||
"historyEmpty": { "message": "Votre historique est vide." },
|
||||
"historyEmptySub": { "message": "Explorez et regardez du contenu pour qu'il apparaisse ici." },
|
||||
"errorGeneratingRecommendations": { "message": "Erreur lors de la génération des recommandations." },
|
||||
"noRecommendations": { "message": "Nous devons mieux vous connaître pour vous donner des recommandations !" },
|
||||
"errorGeneratingStats": { "message": "Erreur lors de la génération des statistiques." },
|
||||
"noServersForToken": { "message": "Aucun serveur associé trouvé pour ce jeton." },
|
||||
"searchingActorContent": { "message": "Recherche de contenu de $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" } } },
|
||||
"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" } } },
|
||||
"sendingStreams": { "message": "Envoi de $count$ stream(s) au serveur...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream(s) ajouté(s) avec succès." },
|
||||
"generatingM3U": { "message": "Génération M3U pour \"$title$\"", "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" } } },
|
||||
"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." },
|
||||
"languageChangeReload": { "message": "Langue changée. L'application va maintenant être rechargée." },
|
||||
"addedToFavorites": { "message": "Ajouté aux favoris." },
|
||||
"removedFromFavorites": { "message": "Supprimé des favoris." },
|
||||
"plexScanInProgress": { "message": "Le scan Plex est déjà en cours." },
|
||||
"plexScanStarting": { "message": "Démarrage du scan Plex..." },
|
||||
"noPlexTokens": { "message": "Aucun jeton Plex configuré." },
|
||||
"clearingSections": { "message": "Nettoyage des sections : $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"initialScanPhaseComplete": { "message": "Phase de scan initiale terminée." },
|
||||
"retryPhaseFinished": { "message": "Phase de réessais terminée." },
|
||||
"plexScanFinished": { "message": "Scan terminé. Mise à jour du contenu..." },
|
||||
"scanCancelled": { "message": "Scan annulé par l'utilisateur." },
|
||||
"scanCancelledInfo": { "message": "Scan annulé." },
|
||||
"errorInitializingMusicPlayer": { "message": "Erreur lors de l'initialisation du lecteur de musique." },
|
||||
"criticalErrorLoadingMusic": { "message": "Erreur critique lors du chargement des données musicales." },
|
||||
"errorLoadingArtists": { "message": "Erreur lors du chargement des artistes." },
|
||||
"dbUnavailableError": { "message": "Erreur : Base de données non disponible." },
|
||||
"updatingMusicData": { "message": "Mise à jour des données musicales..." },
|
||||
"musicDataUpdated": { "message": "Données musicales mises à jour." },
|
||||
"errorFetchingArtistSongs": { "message": "Erreur lors de la récupération des chansons de l'artiste." },
|
||||
"errorLoadingSongs": { "message": "Erreur lors du chargement des chansons." },
|
||||
"noArtistsFound": { "message": "Aucun artiste trouvé." },
|
||||
"shuffleOn": { "message": "Mode aléatoire activé." },
|
||||
"shuffleOff": { "message": "Mode aléatoire désactivé." },
|
||||
"playbackError": { "message": "Erreur de lecture" },
|
||||
"errorLabel": { "message": "Erreur" },
|
||||
"reloadingPage": { "message": "Rechargement de la page..." },
|
||||
"viewed": { "message": "Vu" },
|
||||
"local": { "message": "Local" },
|
||||
"topRatedSort": {"message": "Les mieux notés"},
|
||||
"recentSort": {"message": "Récents"},
|
||||
"popularSort": {"message": "Populaires"},
|
||||
"moviesSectionTitle": {"message": "Films"},
|
||||
"seriesSectionTitle": {"message": "Séries"},
|
||||
"searchResultsFor": {"message": "Résultats pour \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||
"contentFrom": {"message": "Contenu de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||
"explore": {"message": "Explorer"},
|
||||
"noGenre": {"message": "Sans catégorie"},
|
||||
"synopsis": {"message": "Synopsis"},
|
||||
"noSynopsis": {"message": "Aucune synopsis disponible."},
|
||||
"director": {"message": "Réalisateur :"},
|
||||
"writer": {"message": "Scénariste :"},
|
||||
"viewOnImdb": {"message": "Voir sur IMDb"},
|
||||
"watchTrailer": {"message": "Voir la bande-annonce"},
|
||||
"addToFavorites": {"message": "Ajouter aux favoris"},
|
||||
"removeFromFavorites": {"message": "Supprimer des favoris"},
|
||||
"notAvailable": {"message": "Non disponible"},
|
||||
"mainCast": {"message": "Distribution principale"},
|
||||
"seasonsAndEpisodes": {"message": "Saisons et épisodes"},
|
||||
"similarContent": {"message": "Contenu similaire"},
|
||||
"episodesCount": {"message": "$count$ Épisodes", "placeholders": {"count": {"content": "$1"}}},
|
||||
"seasonsCount": {"message": "$count$ Saisons", "placeholders": {"count": {"content": "$1"}}},
|
||||
"runtimeMinutes": {"message": "$count$ min", "placeholders": {"count": {"content": "$1"}}},
|
||||
"noTrailerFound": {"message": "Nessun trailer trovato per questo titolo."},
|
||||
"fatalInitError": {"message": "Errore Fatale di Inizializzazione"},
|
||||
"fatalInitErrorSub": {"message": "Impossibile caricare l'applicazione."},
|
||||
"invalidStreamInfo": {"message": "Informazioni non valide."},
|
||||
"dbUnavailableForStreams": {"message": "Database locale non disponibile."},
|
||||
"noPlexServersForStreams": {"message": "Nessun server Plex."},
|
||||
"notFoundOnServers": {"message": "\"$query$\" non trovato sui server.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "Poco fa" },
|
||||
"relativeTime_minutesAgo": { "message": "$count$ minuti fa", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_hoursAgo": { "message": "$count$ ore fa", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_yesterday": { "message": "Ieri" },
|
||||
"relativeTime_daysAgo": { "message": "$count$ giorni fa", "placeholders": { "count": { "content": "$1" } } },
|
||||
"errorLoadingDetails": { "message": "Errore nel Caricamento dei Dettagli" },
|
||||
"errorLoadingLocalContent": { "message": "Errore nel caricamento del contenuto locale." },
|
||||
"errorServerResponse": { "message": "Risposta non riuscita dal server." },
|
||||
"errorPlexApi": { "message": "Errore $status$ dall'API di Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Errore nell'analisi dell'XML di Plex." },
|
||||
"untitled": { "message": "Senza titolo" },
|
||||
"itemCount": { "message": "$count$ elementi", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Nessun server di foto" },
|
||||
"jellyfinScanInProgress": { "message": "Scansione Jellyfin già in corso." },
|
||||
"jellyfinScanning": { "message": "Scansione di Jellyfin in corso..." },
|
||||
"jellyfinMissingCredentials": { "message": "Per favor, completa l'URL e il nome utente di Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "Connessione a Jellyfin a: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Autenticazione Jellyfin fallita: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Autenticazione Jellyfin riuscita." },
|
||||
"jellyfinFetchingLibraries": { "message": "Recupero delle librerie..." },
|
||||
"jellyfinFetchFailed": { "message": "Recupero delle librerie fallito: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "Nessuna libreria di film o serie trovata su Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ libreria(e) multimediale(i) trovata(e).", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Successo] Scansionata '$libraryName, aggiunti $count$ titoli.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Scansione della libreria '$libraryName fallita.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||
"jellyfinScanSuccess": { "message": "Scansione Jellyfin completata. Aggiunti $movies$ film e $series$ serie.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||
"noJellyfinCredentials": { "message": "Credenziali di Jellyfin non configurate." },
|
||||
"notFoundOnJellyfin": { "message": "\"$query$\" non trovato su Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "\"$query$\" non trovato su nessun server.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"localOnPlex": { "message": "Su Plex" },
|
||||
"searchOnPlex": { "message": "Cerca su Plex" },
|
||||
"jellyfinTitle": { "message": "Contenuto Jellyfin" },
|
||||
"noJellyfinContent": { "message": "Nessun contenuto Jellyfin trovato." },
|
||||
"noJellyfinContentSub": { "message": "Assicurati di aver scansionato il tuo server Jellyfin nelle impostazioni." },
|
||||
"activityViewerTitle": { "message": "Visualizzatore Attività Server" },
|
||||
"activitySelectServer": { "message": "Seleziona un server" },
|
||||
"activityCheckBtn": { "message": "Aggiorna" },
|
||||
"activityNoSessions": { "message": "Nessuna sessione attiva su questo server." },
|
||||
"activitySessionUser": { "message": "Utente" },
|
||||
"activitySessionDevice": { "message": "Dispositivo" },
|
||||
"activitySessionContent": { "message": "Contenuto" },
|
||||
"activitySessionState": { "message": "Stato" },
|
||||
"activitySessionIdentifier": { "message": "Identificatore Client" },
|
||||
"activityCopyID": { "message": "Copia ID" },
|
||||
"activityError": { "message": "Impossibile recuperare l'attività del server." },
|
||||
"activityCopied": { "message": "Identificatore copiato negli appunti!" },
|
||||
"activityCopyError": { "message": "Copia dell'identificatore non riuscita." },
|
||||
"noProvidersFound": { "message": "Nessun fornitore trovato." },
|
||||
"availableOnPlex": { "message": "Disponibile su Plex" },
|
||||
"navM3uGenerator": { "message": "Generatore M3U" },
|
||||
"m3uGeneratorTitle": { "message": "Generatore di Playlist M3U" },
|
||||
"selectAServer": { "message": "Seleziona un server..." },
|
||||
"downloadM3u": { "message": "Scarica M3U" },
|
||||
"m3uGenerator": { "message": "Generatore M3U" },
|
||||
"selectServer": { "message": "Seleziona Server" },
|
||||
"selectLibraries": { "message": "Seleziona Librerie" },
|
||||
"howToUse": { "message": "Come Usare" },
|
||||
"m3uInstruction1": { "message": "Scegli un server dalla lista." },
|
||||
"m3uInstruction2": { "message": "Seleziona una o più librerie da includere." },
|
||||
"m3uInstruction3": { "message": "Clicca sul pulsante di download." },
|
||||
"m3uInstruction4": { "message": "Importa il file .m3u nel tuo lettore compatibile." },
|
||||
"settingsRegionLabel": { "message": "Regione per la scoperta di contenuti" },
|
||||
"allRegions": { "message": "Tutte le regioni" },
|
||||
"chatOpen": { "message": "Apri chat" },
|
||||
"chatTitle": { "message": "Assistente AI" },
|
||||
"noTrailerFound": {"message": "Aucune bande-annonce trouvée pour ce titre."},
|
||||
"fatalInitError": {"message": "Erreur d'initialisation fatale"},
|
||||
"fatalInitErrorSub": {"message": "Impossible de charger l'application."},
|
||||
"invalidStreamInfo": {"message": "Informations invalides."},
|
||||
"dbUnavailableForStreams": {"message": "Base de données locale non disponible."},
|
||||
"noPlexServersForStreams": {"message": "Aucun serveur Plex."},
|
||||
"notFoundOnServers": {"message": "Impossible de trouver \"$query$\" sur les serveurs Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "À l'instant" },
|
||||
"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_yesterday": { "message": "Hier" },
|
||||
"relativeTime_daysAgo": { "message": "Il y a $count$ jours", "placeholders": { "count": { "content": "$1" } } },
|
||||
"errorLoadingDetails": { "message": "Erreur lors du chargement des détails" },
|
||||
"errorLoadingLocalContent": { "message": "Erreur lors du chargement du contenu local." },
|
||||
"errorServerResponse": { "message": "Réponse du serveur non réussie." },
|
||||
"errorPlexApi": { "message": "Erreur $status$ de l'API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Erreur lors de l'analyse du XML Plex." },
|
||||
"untitled": { "message": "Sans titre" },
|
||||
"itemCount": { "message": "$count$ éléments", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Aucun serveur photo" },
|
||||
"jellyfinScanInProgress": { "message": "Le scan Jellyfin est déjà en cours." },
|
||||
"jellyfinScanning": { "message": "Scan de Jellyfin en cours..." },
|
||||
"jellyfinMissingCredentials": { "message": "Veuillez compléter l'URL et l'utilisateur de Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "Connexion à Jellyfin en cours : $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Échec de l'authentification Jellyfin : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Authentification Jellyfin réussie." },
|
||||
"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" } } },
|
||||
"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"}}},
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Succès] '$libraryName$' scanné, $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" } } },
|
||||
"jellyfinScanSuccess": { "message": "Scan Jellyfin terminé. $movies$ films et $series$ séries ajoutés.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||
"noJellyfinCredentials": { "message": "Identifiants Jellyfin non configurés." },
|
||||
"notFoundOnJellyfin": { "message": "Impossible de trouver \"$query$\" sur Jellyfin.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"notFoundOnAnyServer": { "message": "Impossible de trouver \"$query$\" sur aucun serveur.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"localOnPlex": { "message": "Sur Plex" },
|
||||
"searchOnPlex": { "message": "Rechercher sur Plex" },
|
||||
"jellyfinTitle": { "message": "Contenu Jellyfin" },
|
||||
"noJellyfinContent": { "message": "Aucun contenu Jellyfin trouvé." },
|
||||
"noJellyfinContentSub": { "message": "Assurez-vous d'avoir scanné votre serveur Jellyfin dans les paramètres." },
|
||||
"activityViewerTitle": { "message": "Visionneuse d'activité du serveur" },
|
||||
"activitySelectServer": { "message": "Sélectionner un serveur" },
|
||||
"activityCheckBtn": { "message": "Actualiser" },
|
||||
"activityNoSessions": { "message": "Aucune session active sur ce serveur." },
|
||||
"activitySessionUser": { "message": "Utilisateur" },
|
||||
"activitySessionDevice": { "message": "Appareil" },
|
||||
"activitySessionContent": { "message": "Contenu" },
|
||||
"activitySessionState": { "message": "État" },
|
||||
"activitySessionIdentifier": { "message": "Identifiant du client" },
|
||||
"activityCopyID": { "message": "Copier l'ID" },
|
||||
"activityError": { "message": "Impossible d'obtenir l'activité du serveur." },
|
||||
"activityCopied": { "message": "Identifiant copié dans le presse-papiers !" },
|
||||
"activityCopyError": { "message": "Erreur lors de la copie de l'identifiant." },
|
||||
"noProvidersFound": { "message": "Aucun fournisseur trouvé." },
|
||||
"availableOnPlex": { "message": "Disponible sur Plex" },
|
||||
"m3uGeneratorTitle": { "message": "Générateur de listes M3U" },
|
||||
"selectAServer": { "message": "Sélectionner un serveur..." },
|
||||
"downloadM3u": { "message": "Télécharger M3U" },
|
||||
"m3uGenerator": { "message": "Générateur M3U" },
|
||||
"selectLibraries": { "message": "Sélectionner les bibliothèques" },
|
||||
"howToUse": { "message": "Comment utiliser" },
|
||||
"m3uInstruction1": { "message": "Choisissez un serveur dans la liste." },
|
||||
"m3uInstruction2": { "message": "Sélectionnez une ou plusieurs bibliothèques à inclure." },
|
||||
"m3uInstruction3": { "message": "Cliquez sur le bouton de téléchargement." },
|
||||
"m3uInstruction4": { "message": "Importez le fichier .m3u dans votre lecteur compatible." },
|
||||
"chatOpen": { "message": "Ouvrir le chat" },
|
||||
"chatTitle": { "message": "Assistant IA" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Scrivi il tuo messaggio..." },
|
||||
"chatPlaceholder": { "message": "Écrivez votre message..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Spiacenti, non sono riuscito a ottenere una risposta. Per favore, riprova." },
|
||||
"chatWelcome": { "message": "Benvenuto! Sono il tuo assistente CinePlex. Chiedimi di film, serie o qualsiasi altra cosa tu voglia sapere." },
|
||||
"chatApiKeyMissing": { "message": "La chiave API di OpenAI non è impostata. Configurala nelle impostazioni dell'estensione." },
|
||||
"chatApiInvalidResponse": { "message": "L'API ha restituito una risposta non valida. Per favore, riprova." },
|
||||
"chatApiError": { "message": "Errore di comunicazione con l'assistente AI" },
|
||||
"downloadAll": { "message": "Scarica tutto" },
|
||||
"download": { "message": "Scarica" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Cerca nella libreria Plex film o serie." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "Il titolo da cercare." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "Il tipo di contenuto da cercare (film o serie)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Naviga a una pagina specifica dell'applicazione." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "La pagina a cui navigare." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Ottiene le statistiche dell'utente." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Mostra i dettagli di un film o di una serie." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "Il titolo del film o della serie." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "Il tipo di contenuto (film o serie)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Aggiunge un film o una serie alla playlist." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "Il titolo del film o della serie." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "Il tipo di contenuto (film o serie)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Scarica la playlist di un film o di una serie." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "Il titolo del film o della serie." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "Il tipo di contenuto (film o serie)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Aggiunge o rimuove un film o una serie dai preferiti." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "Il titolo del film o della serie." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "Il tipo di contenuto (film o serie)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Ottiene consigli per l'utente." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applica filtri alla vista corrente." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "Il tipo di contenuto da filtrare (film o serie)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "Il genere per cui filtrare." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "L'anno per cui filtrare." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "L'ordine in cui ordinare i risultati." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Riproduce la musica di un artista specifico." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "Il nome dell'artista." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Cancella la cronologia della chat." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Elimina il database dell'estensione." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Aggiorna tutti i token Plex." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Aggiunge un nuovo token Plex." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "Il token Plex da aggiungere." },
|
||||
"aiToolChangeRegionDesc": { "message": "Cambia la regione per la scoperta di contenuti." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "Il codice regionale a due lettere (ad es. US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Cancella tutti i preferiti dell'utente." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Cancella la vista dei consigliati." },
|
||||
"aiToolFavoritesCleared": { "message": "Preferiti cancellati." },
|
||||
"aiToolFavoritesClearError": { "message": "Errore durante la cancellazione dei preferiti: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Consigliati cancellati." },
|
||||
"aiToolRecommendationsClearError": { "message": "Errore durante la cancellazione dei consigliati: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Database eliminato. La pagina verrà ricaricata." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Errore durante l'eliminazione del database: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "L'eliminazione del database è bloccata. Chiudere le altre schede dell'applicazione." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Tutti i token sono stati aggiornati con successo." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Errore durante l'aggiornamento dei token: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Token Plex aggiunto con successo." },
|
||||
"aiToolAddPlexTokenError": { "message": "Errore durante l'aggiunta del token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Regione cambiata in $region$. Il contenuto è in fase di aggiornamento.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolChangeRegionError": { "message": "Errore durante la modifica della regione: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "Sei un assistente esperto di film e serie chiamato CinePlex. La tua funzione principale è aiutare gli utenti a interagire con la loro libreria multimediale e scoprire contenuti. Segui queste regole: 1. Quando un utente chiede un elenco o una raccomandazione (ad es. 'dimmi 5 film dell'orrore', 'le migliori serie di fantascienza'), DEVI usare le tue conoscenze per generare l'elenco e presentarlo in un formato numerato o puntato. NON usare strumenti per questa attività di scoperta iniziale. 2. Dopo aver presentato l'elenco, se l'utente ti chiede di scaricarlo, controllarlo o creare un M3U, ALLORA e solo allora, usa lo strumento 'generate_m3u_from_titles_list' passandogli i titoli che hai appena menzionato. 3. Per qualsiasi altra azione come navigare nell'app, ottenere statistiche o cercare un TITOLO SPECIFICO nella libreria dell'utente, usa gli strumenti appropriati. Sii conciso, amichevole ed efficiente." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "L'elenco dei titoli da elaborare è vuoto." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "Sembra che tu non abbia nessuno dei titoli di quell'elenco sui tuoi server locali." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "Il tipo di contenuto da cercare: 'movie' o 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "Un nome file personalizzato per la playlist M3U scaricata." },
|
||||
"aiToolGenerateM3USuccess": { "message": "Capito! Sto generando una playlist M3U con $1 elementi. Il download dovrebbe iniziare a breve.", "placeholders": { "1": { "content": "$1" } } },
|
||||
"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** affermare 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 raccomandazioni o elenchi (ad es. 'dammi 5 film dell'orrore'), usa le tue conoscenze per generare l'elenco. Presentalo in formato numerato o puntato. Dopo aver mostrato 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 o la ricerca di un titolo specifico, utilizza gli strumenti appropriati. Sii sempre conciso, amichevole ed efficiente." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Controlla un elenco di titoli di film o serie rispetto ai server locali dell'utente e, se vengono trovate corrispondenze, genera e scarica un file di playlist M3U." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Un elenco di titoli di film o serie da controllare e scaricare." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Fornisci un elenco di titoli per creare la playlist." },
|
||||
"aiToolM3UCheckingTitles": { "message": "Controllo dei titoli sui tuoi server locali..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Non sono riuscito a trovare nessuno dei film o delle serie dell'elenco sui tuoi server locali." },
|
||||
"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" } } }
|
||||
"chatWelcome": { "message": "Bienvenue ! Je suis votre assistant CinePlex. Demandez-moi des informations sur les films, les séries ou tout ce que vous voulez savoir." },
|
||||
"chatGoogleApiKeyMissing": { "message": "La clé API Google Gemini n'est pas configurée. Veuillez la configurer 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." },
|
||||
"chatApiError": { "message": "Erreur de communication avec l'assistant IA" },
|
||||
"downloadAll": { "message": "Tout 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." },
|
||||
"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)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navigue l'utilisateur vers une page spécifique de l'interface de l'application." },
|
||||
"aiToolNavigateToPagePageParamDesc": { "message": "Le nom de la page à naviguer, par exemple : 'movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', ou 'm3u-generator'." },
|
||||
"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." },
|
||||
"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." },
|
||||
"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é." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "Le titre du film ou de la série à ajouter." },
|
||||
"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." },
|
||||
"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'." },
|
||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "Le nom du fichier M3U à télécharger (par exemple, 'MaListe.m3u'). S'il n'est pas fourni, un nom par défaut sera utilisé." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Ajoute ou retire un film ou une série de la liste des favoris de l'utilisateur." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "Le titre du film ou de la série." },
|
||||
"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." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Applique des filtres à la vue actuelle des films ou des séries, permettant d'affiner les résultats par type, genre, année et ordre de classement." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "Le type de contenu auquel appliquer les filtres. Doit être 'movie' ou 'series'." },
|
||||
"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')." },
|
||||
"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." },
|
||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "Le nom exact de l'artiste dont les chansons sont à jouer." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Efface tout l'historique des messages de la conversation actuelle 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." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Lance un scan complet de tous les serveurs et bibliothèques Plex associés aux jetons configurés dans l'extension. Met à jour tous les films, séries, artistes et photos." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Ajoute un nouveau jeton X-Plex à la configuration de l'extension, permettant à l'application de scanner le contenu des nouveaux serveurs Plex." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "La chaîne du 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." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "Le code pays ISO 3166-1 à deux lettres pour la nouvelle région (par exemple, 'US' pour les États-Unis, 'ES' pour l'Espagne, 'MX' pour le Mexique)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Supprime tous les films et séries que l'utilisateur a marqués comme favoris." },
|
||||
"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." },
|
||||
"aiToolSearchNotFound": { "message": "Impossible de trouver '$query$' dans votre bibliothèque.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"aiToolNavigateSuccess": { "message": "Navigué vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolNavigateError": { "message": "Erreur lors de la navigation vers la page $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolStatsError": { "message": "Erreur lors de l'obtention des statistiques." },
|
||||
"aiToolItemNotFound": { "message": "L'élément '$title$' n'a pas été trouvé.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolShowItemDetailsSuccess": { "message": "Affichage des détails de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolAddToPlaylistSuccess": { "message": "Ajouté '$title$' à la liste de lecture.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteAdded": { "message": "Ajouté '$title$' aux favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "Supprimé '$title$' des favoris.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "Affichage des recommandations." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Genre '$genre$' non trouvé.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"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." },
|
||||
"aiToolPlayMusicArtistNotFound": { "message": "Artiste '$artist_name$' non trouvé.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolPlayMusicNoSongs": { "message": "Aucune chanson trouvée pour '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"aiToolPlayMusicSuccess": { "message": "Lecture de musique de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolUnknown": { "message": "Outil inconnu : '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favoris effacés." },
|
||||
"aiToolFavoritesClearError": { "message": "Erreur lors de l'effacement des favoris : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Recommandations effacées." },
|
||||
"aiToolRecommendationsClearError": { "message": "Erreur lors de l'effacement des recommandations : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Base de données supprimée. La page va être rechargée." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Erreur lors de la suppression de la base de données : $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." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Tous les jetons ont été mis à jour avec succès." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Erreur lors de la mise à jour des jetons : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Jeton Plex ajouté avec succès." },
|
||||
"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" } } },
|
||||
"aiToolChangeRegionError": { "message": "Erreur lors du changement de région : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolViewingHistoryCleared": { "message": "Historique de visionnage effacé." },
|
||||
"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." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Veuillez fournir une liste de titres pour créer la playlist." },
|
||||
"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." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Fait ! J'ai trouvé $1 sur $2 titres sur vos serveurs et j'ai lancé le téléchargement de la playlist M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } },
|
||||
"backToProviders": { "message": "Retour aux fournisseurs" },
|
||||
"artistsCounterSingle": { "message": "$total$ Artiste", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Chargement..." },
|
||||
"downloadingSong": { "message": "Démarrage du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" téléchargée.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Erreur lors du téléchargement de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Génération M3U pour \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U pour l'album \"$artist$\" généré.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "Nouvel essai de la section \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCCÈS] Nouvel essai pour \"$title$\" terminé.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERREUR FINALE] L'essai a échoué pour \"$title$\" : $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"startingRetryPhase": { "message": "Démarrage de la phase de réessais pour $count$ sections...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"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" } } },
|
||||
"plexScanFatalError": { "message": "ERREUR FATALE : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Erreur pendant le scan : $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "Arrêt du scan Plex..." },
|
||||
"invalidTokenProvided": { "message": "Jeton invalide fourni." },
|
||||
"tokenAlreadyExists": { "message": "Le jeton existe déjà." },
|
||||
"tokenAddedSuccessfully": { "message": "Jeton ajouté avec succès." },
|
||||
"noStreamsFoundForSelection": { "message": "Aucun stream trouvé pour la sélection." },
|
||||
"autoplayBlocked": { "message": "Lecture automatique bloquée." },
|
||||
"welcomeToCinePlex": { "message": "" },
|
||||
"page": { "message": "Page" }
|
||||
}
|
@ -1,133 +1,135 @@
|
||||
{
|
||||
"appName": { "message": "CinePlex" },
|
||||
"appDescription": { "message": "Analisa servidores Plex para encontrar conteúdo e o exibe na interface" },
|
||||
"appDescription": { "message": "Scaneia servidores Plex para encontrar conteúdo e mostra-o na interface" },
|
||||
"appTagline": { "message": "Filmes, Séries e Música" },
|
||||
"appLocaleCode": { "message": "pt-BR" },
|
||||
"appLocaleCode": { "message": "pt-PT" },
|
||||
"toggleNavigation": { "message": "Alternar Navegação" },
|
||||
"searchPlaceholder": { "message": "Pesquisar filmes ou séries..." },
|
||||
"openMusicPlayer": { "message": "Abrir Player de Música" },
|
||||
"settings": { "message": "Configurações" },
|
||||
"openMusicPlayer": { "message": "Abrir Reprodutor de Música" },
|
||||
"settings": { "message": "Definições" },
|
||||
"navMovies": { "message": "Filmes" },
|
||||
"navSeries": { "message": "Séries" },
|
||||
"navProviders": { "message": "Provedores" },
|
||||
"navProviders": { "message": "Fornecedores" },
|
||||
"navPhotos": { "message": "Fotos" },
|
||||
"navStats": { "message": "Estatísticas" },
|
||||
"navFavorites": { "message": "Favoritos" },
|
||||
"navHistory": { "message": "Histórico" },
|
||||
"navRecommendations": { "message": "Recomendações" },
|
||||
"navMusic": { "message": "Música" },
|
||||
"navM3uGenerator": { "message": "Gerador M3U" },
|
||||
"heroWelcome": { "message": "" },
|
||||
"heroSubtitle": { "message": "Explore milhares de filmes e séries." },
|
||||
"addStream": { "message": "Adicionar Stream" },
|
||||
"moreInfo": { "message": "Mais Informações" },
|
||||
"moreInfo": { "message": "Mais informações" },
|
||||
"popularMovies": { "message": "Filmes Populares" },
|
||||
"allGenres": { "message": "Todos os Gêneros" },
|
||||
"allYears": { "message": "Todos os Anos" },
|
||||
"sortPopular": { "message": "Mais Populares" },
|
||||
"sortTopRated": { "message": "Mais Bem Avaliados" },
|
||||
"sortRecent": { "message": "Mais Recentes" },
|
||||
"loadMore": { "message": "Carregar Mais" },
|
||||
"allGenres": { "message": "Todos os géneros" },
|
||||
"allYears": { "message": "Todos os anos" },
|
||||
"sortPopular": { "message": "Mais populares" },
|
||||
"sortTopRated": { "message": "Melhor avaliados" },
|
||||
"sortRecent": { "message": "Mais recentes" },
|
||||
"loadMore": { "message": "Carregar mais" },
|
||||
"photosBreadcrumbHome": { "message": "Álbuns" },
|
||||
"selectServer": { "message": "Selecione um servidor" },
|
||||
"loading": { "message": "Carregando..." },
|
||||
"loadingLibraries": { "message": "Carregando bibliotecas..." },
|
||||
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrado." },
|
||||
"photosEmptyStateSub": { "message": "Por favor, selecione um servidor ou certifique-se de que você tem uma biblioteca de fotos no Plex." },
|
||||
"selectServer": { "message": "Selecionar um servidor" },
|
||||
"loading": { "message": "A carregar..." },
|
||||
"loadingLibraries": { "message": "A carregar bibliotecas..." },
|
||||
"photosEmptyState": { "message": "Nenhum álbum ou foto encontrada." },
|
||||
"photosEmptyStateSub": { "message": "Por favor, selecione um servidor ou certifique-se de que tem uma biblioteca de fotos no Plex." },
|
||||
"statsTitle": { "message": "Estatísticas da Biblioteca" },
|
||||
"statsAllTokens": { "message": "Todos os Tokens" },
|
||||
"statsAnalyzing": { "message": "Analisando sua biblioteca..." },
|
||||
"statsAnalyzing": { "message": "A analisar a sua biblioteca..." },
|
||||
"statsActiveTokens": { "message": "Tokens Ativos" },
|
||||
"statsServersFound": { "message": "Servidores Encontrados" },
|
||||
"statsUniqueMovies": { "message": "Filmes Únicos" },
|
||||
"statsUniqueSeries": { "message": "Séries Únicas" },
|
||||
"statsUniqueArtists": { "message": "Artistas Únicos" },
|
||||
"statsTokenServers": { "message": "Servidores do Token" },
|
||||
"statsChartMoviesByGenre": { "message": "Conteúdo por Gênero (Filmes)" },
|
||||
"statsChartSeriesByGenre": { "message": "Conteúdo por Gênero (Séries)" },
|
||||
"statsChartMoviesByGenre": { "message": "Conteúdo por Género (Filmes)" },
|
||||
"statsChartSeriesByGenre": { "message": "Conteúdo por Género (Séries)" },
|
||||
"statsChartByDecade": { "message": "Conteúdo por Década" },
|
||||
"recommendationsTitle": { "message": "Recomendações para Você" },
|
||||
"recommendationsTitle": { "message": "Recomendações para si" },
|
||||
"historyTitle": { "message": "Histórico de Visualização" },
|
||||
"clearHistory": { "message": "Limpar Tudo" },
|
||||
"consoleTitle": { "message": "Console de Análise do Plex" },
|
||||
"consoleTitle": { "message": "Consola de Leitura Plex" },
|
||||
"footerCredit": { "message": "Uma interface para o seu universo Plex." },
|
||||
"backButton": { "message": "Voltar" },
|
||||
"closeTrailer": { "message": "Fechar trailer" },
|
||||
"close": { "message": "Fechar" },
|
||||
"photoViewer": { "message": "Visualizador de Fotos" },
|
||||
"photoViewer": { "message": "Visualizador de fotos" },
|
||||
"previous": { "message": "Anterior" },
|
||||
"next": { "message": "Próximo" },
|
||||
"notificationTemplateText": { "message": "Notificação" },
|
||||
"settingsTitleFull": { "message": "Configurações e Ajustes" },
|
||||
"settingsTitleFull": { "message": "Definições e Configuração" },
|
||||
"settingsTabGeneral": { "message": "Geral" },
|
||||
"settingsTabPlex": { "message": "Plex" },
|
||||
"settingsTabJellyfin": { "message": "Jellyfin" },
|
||||
"settingsTabPhpGen": { "message": "Gerador de PHP" },
|
||||
"settingsTabPhpGen": { "message": "Gerador PHP" },
|
||||
"settingsTabData": { "message": "Dados" },
|
||||
"settingsApiServer": { "message": "Configuração de API e Servidor" },
|
||||
"settingsTmdbApiLabel": { "message": "Chave da API do TMDB (Opcional)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Usará a chave padrão se deixado em branco" },
|
||||
"openaiApiKey": { "message": "Chave da API OpenAI" },
|
||||
"settingsTmdbLangLabel": { "message": "Idioma para TMDB e Interface" },
|
||||
"settingsTmdbApiLabel": { "message": "Chave de API TMDB (Opcional)" },
|
||||
"settingsTmdbApiPlaceholder": { "message": "Será usada a chave padrão se deixado em branco" },
|
||||
"settingsGoogleApiLabel": { "message": "Chave de API Google Gemini (Opcional)" },
|
||||
"settingsGoogleApiPlaceholder": { "message": "Necessária para usar o assistente de IA" },
|
||||
"settingsRegionLabel": { "message": "Região para descoberta de conteúdo" },
|
||||
"allRegions": { "message": "Todas as regiões" },
|
||||
"settingsPhpUrlLabel": { "message": "URL do Servidor para Adicionar Streams" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://seu-servidor.com/caminho/para/script.php" },
|
||||
"settingsPhpUrlPlaceholder": { "message": "https://o-seu-servidor.com/caminho/para/o-script.php" },
|
||||
"settingsInterface": { "message": "Interface" },
|
||||
"settingsLightTheme": { "message": "Modo Claro" },
|
||||
"settingsShowHero": { "message": "Mostrar seção de boas-vindas 'Hero'" },
|
||||
"settingsShowHero": { "message": "Mostrar secção de boas-vindas 'Hero'" },
|
||||
"settingsScanContent": { "message": "Análise de Conteúdo" },
|
||||
"settingsScanDesc": { "message": "Selecione o que analisar e pressione o botão." },
|
||||
"settingsScanDesc": { "message": "Selecione o que analisar e clique no botão." },
|
||||
"settingsScanMovies": { "message": "Filmes" },
|
||||
"settingsScanShows": { "message": "Séries" },
|
||||
"settingsScanArtists": { "message": "Música" },
|
||||
"settingsScanPhotos": { "message": "Fotos" },
|
||||
"settingsSelectAll": { "message": "Selecionar Tudo" },
|
||||
"settingsStartScan": { "message": "Iniciar Análise" },
|
||||
"settingsPlexTokens": { "message": "Tokens do Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Edite a lista de tokens do Plex (formato JSON)." },
|
||||
"settingsSaveTokens": { "message": "Salvar Tokens" },
|
||||
"settingsJellyfinTitle": { "message": "Configurações do Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Adicione os detalhes do seu servidor Jellyfin para analisar seu conteúdo." },
|
||||
"settingsPlexTokens": { "message": "Tokens Plex" },
|
||||
"settingsPlexTokensDesc": { "message": "Editar a lista de tokens Plex (formato JSON)." },
|
||||
"settingsSaveTokens": { "message": "Guardar Tokens" },
|
||||
"settingsJellyfinTitle": { "message": "Configuração Jellyfin" },
|
||||
"settingsJellyfinDesc": { "message": "Adicione os dados do seu servidor Jellyfin para analisar o seu conteúdo." },
|
||||
"jellyfinUrlLabel": { "message": "URL do Servidor Jellyfin" },
|
||||
"jellyfinUserLabel": { "message": "Nome de usuário" },
|
||||
"jellyfinPassLabel": { "message": "Senha" },
|
||||
"jellyfinConnectAndScan": { "message": "Conectar e Analisar" },
|
||||
"settingsPhpGenTitle": { "message": "Gerador de Script PHP para Servidor" },
|
||||
"settingsPhpFileOptions": { "message": "Opções de Arquivo" },
|
||||
"settingsPhpSavePathLabel": { "message": "Caminho para Salvar no Servidor" },
|
||||
"jellyfinUserLabel": { "message": "Nome de Utilizador" },
|
||||
"jellyfinPassLabel": { "message": "Palavra-passe" },
|
||||
"jellyfinConnectAndScan": { "message": "Ligar e Analisar" },
|
||||
"settingsPhpGenTitle": { "message": "Gerador de Script PHP para o Servidor" },
|
||||
"settingsPhpFileOptions": { "message": "Opções do Ficheiro" },
|
||||
"settingsPhpSavePathLabel": { "message": "Caminho de Gravação no Servidor" },
|
||||
"settingsPhpSavePathPlaceholder": { "message": "Ex: /var/www/html/listas (em branco para a mesma pasta)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nome do Arquivo" },
|
||||
"settingsPhpFileAction": { "message": "Ação no Arquivo" },
|
||||
"settingsPhpActionAppend": { "message": "Anexar ao final do arquivo (cumulativo)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Sobrescrever o arquivo (começar do zero)" },
|
||||
"settingsPhpFilenameLabel": { "message": "Nome do Ficheiro" },
|
||||
"settingsPhpFileAction": { "message": "Ação no Ficheiro" },
|
||||
"settingsPhpActionAppend": { "message": "Adicionar ao fim do ficheiro (cumulativo)" },
|
||||
"settingsPhpActionOverwrite": { "message": "Sobrescrever o ficheiro (começar de novo)" },
|
||||
"settingsPhpSecurity": { "message": "Segurança (Opcional)" },
|
||||
"settingsPhpUseSecretKey": { "message": "Usar chave secreta (Recomendado)" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Digite uma chave secreta segura" },
|
||||
"settingsPhpSecretKeyPlaceholder": { "message": "Introduza uma chave secreta segura" },
|
||||
"settingsPhpGeneratedCode": { "message": "Código Gerado" },
|
||||
"settingsPhpGeneratedPlaceholder": { "message": "O código PHP gerado aparecerá aqui." },
|
||||
"settingsGenerateScript": { "message": "Gerar Script" },
|
||||
"settingsCopyScript": { "message": "Copiar Script" },
|
||||
"settingsDataManagement": { "message": "Gerenciamento do Banco de Dados Local" },
|
||||
"settingsImportDb": { "message": "Importar BD de um Arquivo" },
|
||||
"settingsExportDb": { "message": "Exportar BD para um Arquivo" },
|
||||
"settingsDataManagement": { "message": "Gestão da Base de Dados Local" },
|
||||
"settingsImportDb": { "message": "Importar BD de Ficheiro" },
|
||||
"settingsExportDb": { "message": "Exportar BD para Ficheiro" },
|
||||
"settingsClearContent": { "message": "Limpar Dados de Conteúdo Local" },
|
||||
"settingsClearContentDesc": { "message": "Esta ação excluirá filmes, séries e músicas do banco de dados local, mas não afetará seus favoritos ou configurações." },
|
||||
"settingsClearContentDesc": { "message": "Esta ação apagará filmes, séries e música da base de dados local, mas não afetará os seus favoritos nem as suas definições." },
|
||||
"settingsClose": { "message": "Fechar" },
|
||||
"settingsSave": { "message": "Salvar Configurações" },
|
||||
"settingsSave": { "message": "Guardar Definições" },
|
||||
"musicSidenavTitle": { "message": "Música do Plex" },
|
||||
"musicAllServers": { "message": "Todos os Servidores" },
|
||||
"musicSearchArtistPlaceholder": { "message": "Pesquisar artista..." },
|
||||
"musicSearchDiscographyPlaceholder": { "message": "Pesquisar na discografia..." },
|
||||
"musicNothingPlaying": { "message": "Nada tocando" },
|
||||
"musicSelectSong": { "message": "Selecione uma música" },
|
||||
"musicToStart": { "message": "para começar a tocar" },
|
||||
"miniplayerDownloadSong": { "message": "Baixar música" },
|
||||
"miniplayerDownloadAlbum": { "message": "Baixar álbum M3U" },
|
||||
"musicNothingPlaying": { "message": "Nada a reproduzir" },
|
||||
"musicSelectSong": { "message": "Selecionar uma canção" },
|
||||
"musicToStart": { "message": "para começar a reproduzir" },
|
||||
"miniplayerDownloadSong": { "message": "Descarregar canção" },
|
||||
"miniplayerDownloadAlbum": { "message": "Descarregar álbum M3U" },
|
||||
"miniplayerVolume": { "message": "Volume" },
|
||||
"miniplayerShuffle": { "message": "Aleatório" },
|
||||
"miniplayerEqualizer": { "message": "Equalizador" },
|
||||
"miniplayerOpenList": { "message": "Abrir lista" },
|
||||
"eqTitle": { "message": "Equalizador Gráfico" },
|
||||
"eqPresetsLabel": { "message": "Predefinições" },
|
||||
"eqPresetFlat": { "message": "Plano (Flat)" },
|
||||
"eqPresetFlat": { "message": "Plano" },
|
||||
"eqPresetRock": { "message": "Rock" },
|
||||
"eqPresetPop": { "message": "Pop" },
|
||||
"eqPresetJazz": { "message": "Jazz" },
|
||||
@ -138,122 +140,102 @@
|
||||
"infoModalFieldTitle": { "message": "Título:" },
|
||||
"infoModalFieldArtist": { "message": "Artista:" },
|
||||
"infoModalFieldAlbum": { "message": "Álbum:" },
|
||||
"infoModalFieldSong": { "message": "Música:" },
|
||||
"infoModalFieldSong": { "message": "Canção:" },
|
||||
"infoModalFieldYear": { "message": "Ano:" },
|
||||
"infoModalFieldGenre": { "message": "Gênero:" },
|
||||
"infoModalFieldGenre": { "message": "Género:" },
|
||||
"lang_en": { "message": "Inglês" },
|
||||
"lang_es": { "message": "Espanhol" },
|
||||
"lang_fr": { "message": "Francês" },
|
||||
"lang_de": { "message": "Alemão" },
|
||||
"lang_it": { "message": "Italiano" },
|
||||
"lang_pt": { "message": "Português" },
|
||||
"essentialFeaturesNotSupported": { "message": "Seu navegador não suporta recursos essenciais." },
|
||||
"dbAccessError": { "message": "Erro ao acessar o banco de dados local." },
|
||||
"dbUpdateNeeded": { "message": "O banco de dados precisa ser atualizado, por favor, recarregue a página." },
|
||||
"dbBlocked": { "message": "Por favor, feche outras abas desta aplicação para continuar." },
|
||||
"deletingContentData": { "message": "Excluindo dados de conteúdo local..." },
|
||||
"noContentDataToDelete": { "message": "Nenhum dado de conteúdo para excluir." },
|
||||
"contentDataDeleted": { "message": "Dados de conteúdo excluídos do IndexedDB." },
|
||||
"errorDeletingData": { "message": "Erro ao excluir dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"essentialFeaturesNotSupported": { "message": "O seu navegador não suporta funções essenciais." },
|
||||
"dbAccessError": { "message": "Erro ao aceder à base de dados local." },
|
||||
"dbUpdateNeeded": { "message": "A base de dados precisa de ser atualizada, por favor, recarregue a página." },
|
||||
"dbBlocked": { "message": "Por favor, feche outros separadores desta aplicação para continuar." },
|
||||
"deletingContentData": { "message": "A apagar dados de conteúdo locais..." },
|
||||
"noContentDataToDelete": { "message": "Não há dados de conteúdo para apagar." },
|
||||
"contentDataDeleted": { "message": "Dados de conteúdo apagados do IndexedDB." },
|
||||
"errorDeletingData": { "message": "Erro ao apagar dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailable": { "message": "Editor de texto não disponível." },
|
||||
"errorLoadingTokens": { "message": "Erro ao carregar tokens no editor." },
|
||||
"errorLoadingTokens": { "message": "Erro ao carregar tokens para edição." },
|
||||
"errorLoadingTokensMessage": { "message": "Erro ao carregar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor não disponível para salvar." },
|
||||
"aceEditorNotAvailableToSave": { "message": "Editor não disponível para guardar." },
|
||||
"invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" },
|
||||
"tokensSaved": { "message": "Tokens salvos com sucesso." },
|
||||
"errorSavingTokens": { "message": "Erro ao salvar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "O IndexedDB não está disponível." },
|
||||
"dbExported": { "message": "Banco de dados exportado com sucesso." },
|
||||
"errorExportingDb": { "message": "Erro ao exportar banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"invalidJsonFile": { "message": "O arquivo não contém um objeto JSON válido." },
|
||||
"noDataToImport": { "message": "O arquivo não contém dados para as seções atuais do BD." },
|
||||
"dbImported": { "message": "Banco de dados importado com sucesso." },
|
||||
"errorImportingDb": { "message": "Erro ao importar banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"updatingView": { "message": "Atualizando a visualização com novos dados..." },
|
||||
"confirmClearContent": { "message": "Tem certeza de que deseja excluir os dados de conteúdo local (Filmes, Séries, Músicas, etc.)? Favoritos e Configurações NÃO serão excluídos." },
|
||||
"trailerNotFound": { "message": "Nenhum trailer encontrado para este título." },
|
||||
"confirmClearHistory": { "message": "Tem certeza de que deseja excluir todo o seu histórico de visualização? Esta ação não pode ser desfeita." },
|
||||
"historyCleared": { "message": "Histórico de visualização limpo." },
|
||||
"historyItemDeleted": { "message": "Item excluído do histórico." },
|
||||
"tokensSaved": { "message": "Tokens guardados com sucesso." },
|
||||
"errorSavingTokens": { "message": "Erro ao guardar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"dbNotAvailable": { "message": "IndexedDB não está disponível." },
|
||||
"dbExported": { "message": "Base de dados exportada com sucesso." },
|
||||
"errorExportingDb": { "message": "Erro ao exportar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"invalidJsonFile": { "message": "O ficheiro 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." },
|
||||
"dbImported": { "message": "Base de dados importada com sucesso." },
|
||||
"errorImportingDb": { "message": "Erro ao importar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"updatingView": { "message": "A atualizar a vista com os 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." },
|
||||
"trailerNotFound": { "message": "Não foi encontrado trailer 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." },
|
||||
"historyCleared": { "message": "Histórico de visualização apagado." },
|
||||
"historyItemDeleted": { "message": "Item apagado do histórico." },
|
||||
"errorGeneratingScript": { "message": "Primeiro, gere um script para poder copiá-lo." },
|
||||
"scriptCopied": { "message": "Script PHP copiado para a área de transferência." },
|
||||
"errorCopyingScript": { "message": "Erro ao copiar o script." },
|
||||
"scriptGenerated": { "message": "Script PHP gerado." },
|
||||
"errorLoadingAlbum": { "message": "Erro ao carregar o álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorLoadingAlbum": { "message": "Erro ao carregar álbum: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"noPhotoServerSelected": { "message": "Erro: Nenhum servidor de fotos foi selecionado." },
|
||||
"loadingGenres": { "message": "Carregando gêneros..." },
|
||||
"loadingGenres": { "message": "A carregar géneros..." },
|
||||
"errorLoadingGenres": { "message": "Erro ao carregar" },
|
||||
"noContentFound": { "message": "Nenhum resultado encontrado." },
|
||||
"noContentFound": { "message": "Não foram encontrados resultados." },
|
||||
"couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." },
|
||||
"noFavorites": { "message": "Você ainda não tem favoritos." },
|
||||
"errorLoadingFavorites": { "message": "Erro ao carregar os favoritos." },
|
||||
"historyEmpty": { "message": "Seu histórico está vazio." },
|
||||
"historyEmptySub": { "message": "Navegue e assista a conteúdos para que eles apareçam aqui." },
|
||||
"noFavorites": { "message": "Ainda não tem favoritos." },
|
||||
"errorLoadingFavorites": { "message": "Erro ao carregar favoritos." },
|
||||
"historyEmpty": { "message": "O seu histórico está vazio." },
|
||||
"historyEmptySub": { "message": "Explore e veja conteúdo para que apareça aqui." },
|
||||
"errorGeneratingRecommendations": { "message": "Erro ao gerar recomendações." },
|
||||
"noRecommendations": { "message": "Precisamos te conhecer melhor para dar recomendações!" },
|
||||
"noRecommendations": { "message": "Precisamos de o conhecer melhor para lhe dar recomendações!" },
|
||||
"errorGeneratingStats": { "message": "Erro ao gerar estatísticas." },
|
||||
"noServersForToken": { "message": "Nenhum servidor associado encontrado para este token." },
|
||||
"searchingActorContent": { "message": "Buscando conteúdo de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorLoadingActorContent": { "message": "Não foi possível carregar o conteúdo de $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"noServersForToken": { "message": "Não foram encontrados servidores associados para este token." },
|
||||
"searchingActorContent": { "message": "A procurar conteúdo de $actorName$", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorLoadingActorContent": { "message": "Não foi possível carregar o conteúdo para $actorName$.", "placeholders": { "actorName": { "content": "$1" } } },
|
||||
"errorAddingStream": { "message": "Erro ao adicionar stream(s): $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "A URL do servidor PHP não está configurada. Por favor, configure-a nas Configurações." },
|
||||
"searchingStreams": { "message": "Buscando streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "Enviando $count$ stream(s) para o servidor...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"phpUrlNotConfigured": { "message": "O URL do servidor PHP não está configurado. Por favor, configure-o em Definições." },
|
||||
"searchingStreams": { "message": "A procurar streams para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"sendingStreams": { "message": "A enviar $count$ stream(s) para o servidor...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"streamAddedSuccess": { "message": "Stream(s) adicionado(s) com sucesso." },
|
||||
"generatingM3U": { "message": "Gerando M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "M3U para \"$title$\" baixado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingM3U": { "message": "A gerar M3U para \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"m3uDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorGeneratingM3U": { "message": "Erro ao gerar M3U: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"settingsSavedSuccess": { "message": "Configurações salvas com sucesso." },
|
||||
"errorSavingSettings": { "message": "Erro ao salvar as configurações no banco de dados." },
|
||||
"settingsSavedSuccess": { "message": "Definições guardadas com sucesso." },
|
||||
"errorSavingSettings": { "message": "Erro ao guardar as definições na base de dados." },
|
||||
"languageChangeReload": { "message": "Idioma alterado. A aplicação será recarregada agora." },
|
||||
"addedToFavorites": { "message": "Adicionado aos favoritos." },
|
||||
"removedFromFavorites": { "message": "Removido dos favoritos." },
|
||||
"plexScanInProgress": { "message": "A análise do Plex já está em andamento." },
|
||||
"plexScanStarting": { "message": "Iniciando análise do Plex..." },
|
||||
"noPlexTokens": { "message": "Nenhum token do Plex configurado." },
|
||||
"clearingSections": { "message": "Limpando seções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"sectionsCleared": { "message": "Seções limpas." },
|
||||
"tokenFoundServers": { "message": "Token $token$... encontrou $count$ servidores.", "placeholders": { "token": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"errorProcessingToken": { "message": "Erro ao processar o token $token$...: $message$", "placeholders": { "token": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"initialScanPhaseComplete": { "message": "Fase de análise inicial concluída." },
|
||||
"retryPhaseFinished": { "message": "Fase de nova tentativa concluída." },
|
||||
"plexScanFinished": { "message": "Análise do Plex concluída. Atualizando conteúdo..." },
|
||||
"plexScanFatalError": { "message": "ERRO FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Erro durante a análise: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"scanCancelled": { "message": "Análise cancelada pelo usuário." },
|
||||
"plexScanInProgress": { "message": "A análise do Plex já está em curso." },
|
||||
"plexScanStarting": { "message": "A iniciar análise do Plex..." },
|
||||
"noPlexTokens": { "message": "Não há tokens Plex configurados." },
|
||||
"clearingSections": { "message": "A limpar secções: $sections$", "placeholders": { "sections": { "content": "$1" } } },
|
||||
"initialScanPhaseComplete": { "message": "Fase inicial de análise concluída." },
|
||||
"retryPhaseFinished": { "message": "Fase de retentativas concluída." },
|
||||
"plexScanFinished": { "message": "Análise concluída. A atualizar conteúdo..." },
|
||||
"scanCancelled": { "message": "Análise cancelada pelo utilizador." },
|
||||
"scanCancelledInfo": { "message": "Análise cancelada." },
|
||||
"retyingSection": { "message": "Tentando novamente a seção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCESSO] Nova tentativa de \"$title$\" concluída.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retryError": { "message": "[ERRO FINAL] A nova tentativa falhou para \"$title$\": $message$", "placeholders": { "title": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"noRetriesPending": { "message": "Nenhuma nova tentativa pendente." },
|
||||
"startingRetryPhase": { "message": "Iniciando fase de nova tentativa para $count$ seções...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"retryPhaseCancelled": { "message": "Fase de nova tentativa cancelada." },
|
||||
"errorInitializingMusicPlayer": { "message": "Erro ao inicializar o player de música." },
|
||||
"errorInitializingMusicPlayer": { "message": "Erro ao iniciar o reprodutor de música." },
|
||||
"criticalErrorLoadingMusic": { "message": "Erro crítico ao carregar dados de música." },
|
||||
"errorLoadingArtists": { "message": "Erro ao carregar artistas." },
|
||||
"dbUnavailableError": { "message": "Erro: Banco de dados não disponível." },
|
||||
"updatingMusicData": { "message": "Atualizando dados de música..." },
|
||||
"dbUnavailableError": { "message": "Erro: Base de dados não disponível." },
|
||||
"updatingMusicData": { "message": "A atualizar dados de música..." },
|
||||
"musicDataUpdated": { "message": "Dados de música atualizados." },
|
||||
"errorFetchingArtistSongs": { "message": "Erro ao obter as músicas do artista." },
|
||||
"errorLoadingSongs": { "message": "Erro ao carregar as músicas." },
|
||||
"noArtistsFound": { "message": "Nenhum artista encontrado." },
|
||||
"artistsCounter": { "message": "$start$-$end$ de $total$", "placeholders": { "start": { "content": "$1" }, "end": { "content": "$2" }, "total": { "content": "$3" } } },
|
||||
"artistsCounterSingle": { "message": "$total$ Artistas", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "Carregando..." },
|
||||
"noSongsFound": { "message": "Nenhuma música encontrada." },
|
||||
"errorFetchingArtistSongs": { "message": "Erro ao obter as canções do artista." },
|
||||
"errorLoadingSongs": { "message": "Erro ao carregar canções." },
|
||||
"noArtistsFound": { "message": "Não foram encontrados artistas." },
|
||||
"shuffleOn": { "message": "Modo aleatório ativado." },
|
||||
"shuffleOff": { "message": "Modo aleatório desativado." },
|
||||
"downloadingSong": { "message": "Iniciando download de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" baixado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Erro ao baixar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "Gerando M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U para o álbum \"$artist$\" gerado.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"playbackError": { "message": "Erro de reprodução" },
|
||||
"errorLabel": { "message": "Erro" },
|
||||
"reloadingPage": { "message": "Recarregando página..." },
|
||||
"reloadingPage": { "message": "A recarregar a página..." },
|
||||
"viewed": { "message": "Visto" },
|
||||
"local": { "message": "Local" },
|
||||
"topRatedSort": {"message": "Mais Bem Avaliados"},
|
||||
"topRatedSort": {"message": "Melhor Avaliados"},
|
||||
"recentSort": {"message": "Recentes"},
|
||||
"popularSort": {"message": "Populares"},
|
||||
"moviesSectionTitle": {"message": "Filmes"},
|
||||
@ -261,163 +243,199 @@
|
||||
"searchResultsFor": {"message": "Resultados para \"$query$\"", "placeholders": {"query": {"content": "$1"}}},
|
||||
"contentFrom": {"message": "Conteúdo de $actor$", "placeholders": {"actor": {"content": "$1"}}},
|
||||
"explore": {"message": "Explorar"},
|
||||
"noGenre": {"message": "Sem Categoria"},
|
||||
"noGenre": {"message": "Sem categoria"},
|
||||
"synopsis": {"message": "Sinopse"},
|
||||
"noSynopsis": {"message": "Nenhuma sinopse disponível."},
|
||||
"director": {"message": "Diretor:"},
|
||||
"writer": {"message": "Roteirista:"},
|
||||
"noSynopsis": {"message": "Não há sinopse disponível."},
|
||||
"director": {"message": "Realizador:"},
|
||||
"writer": {"message": "Argumentista:"},
|
||||
"viewOnImdb": {"message": "Ver no IMDb"},
|
||||
"watchTrailer": {"message": "Assistir ao Trailer"},
|
||||
"addToFavorites": {"message": "Favoritar"},
|
||||
"removeFromFavorites": {"message": "Desfavoritar"},
|
||||
"notAvailable": {"message": "Não Disponível"},
|
||||
"watchTrailer": {"message": "Ver Trailer"},
|
||||
"addToFavorites": {"message": "Adicionar aos favoritos"},
|
||||
"removeFromFavorites": {"message": "Remover dos favoritos"},
|
||||
"notAvailable": {"message": "Não disponível"},
|
||||
"mainCast": {"message": "Elenco Principal"},
|
||||
"seasonsAndEpisodes": {"message": "Temporadas e Episódios"},
|
||||
"similarContent": {"message": "Conteúdo Similar"},
|
||||
"similarContent": {"message": "Conteúdo Semelhante"},
|
||||
"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"}}},
|
||||
"noTrailerFound": {"message": "Nenhum trailer foi encontrado para este título."},
|
||||
"fatalInitError": {"message": "Erro Fatal de Inicialização"},
|
||||
"fatalInitErrorSub": {"message": "A aplicação não pôde ser carregada."},
|
||||
"noTrailerFound": {"message": "Não foi encontrado trailer para este título."},
|
||||
"fatalInitError": {"message": "Erro fatal de inicialização"},
|
||||
"fatalInitErrorSub": {"message": "Não foi possível carregar a aplicação."},
|
||||
"invalidStreamInfo": {"message": "Informação inválida."},
|
||||
"dbUnavailableForStreams": {"message": "Banco de dados local não disponível."},
|
||||
"noPlexServersForStreams": {"message": "Nenhum servidor Plex."},
|
||||
"notFoundOnServers": {"message": "\"$query$\" não encontrado nos servidores.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"dbUnavailableForStreams": {"message": "Base de dados local não disponível."},
|
||||
"noPlexServersForStreams": {"message": "Não há servidores Plex."},
|
||||
"notFoundOnServers": {"message": "Não foi encontrado \"$query$\" nos servidores Plex.", "placeholders": {"query": {"content": "$1"}}},
|
||||
"relativeTime_justNow": { "message": "Agora mesmo" },
|
||||
"relativeTime_minutesAgo": { "message": "há $count$ minutos", "placeholders": { "count": { "content": "$1" } } },
|
||||
"relativeTime_hoursAgo": { "message": "há $count$ horas", "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_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" },
|
||||
"errorLoadingLocalContent": { "message": "Erro ao carregar conteúdo local." },
|
||||
"errorServerResponse": { "message": "Resposta sem sucesso do servidor." },
|
||||
"errorPlexApi": { "message": "Erro $status$ da API do Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Erro ao analisar o XML do Plex." },
|
||||
"errorLoadingLocalContent": { "message": "Erro ao carregar o conteúdo local." },
|
||||
"errorServerResponse": { "message": "Resposta não bem-sucedida do servidor." },
|
||||
"errorPlexApi": { "message": "Erro $status$ da API Plex.", "placeholders": { "status": { "content": "$1" } } },
|
||||
"errorParsingPlexXml": { "message": "Erro ao analisar o XML Plex." },
|
||||
"untitled": { "message": "Sem título" },
|
||||
"itemCount": { "message": "$count$ itens", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Nenhum servidor de fotos" },
|
||||
"jellyfinScanInProgress": { "message": "A análise do Jellyfin já está em andamento." },
|
||||
"jellyfinScanning": { "message": "Analisando Jellyfin..." },
|
||||
"jellyfinMissingCredentials": { "message": "Por favor, complete a URL e o nome de usuário do Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "Conectando ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "A autenticação do Jellyfin falhou: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Autenticação do Jellyfin bem-sucedida." },
|
||||
"jellyfinFetchingLibraries": { "message": "Buscando bibliotecas..." },
|
||||
"jellyfinFetchFailed": { "message": "Falha ao buscar bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "Nenhuma biblioteca de filmes ou séries encontrada no Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de mídia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] Análise de '$libraryName' concluída, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Falha ao analisar a biblioteca '$libraryName'.", "placeholders": { "libraryName": { "content": "$1" } } },
|
||||
"jellyfinScanSuccess": { "message": "Análise do Jellyfin concluída. Adicionados $movies$ filmes e $series$ séries.", "placeholders": { "movies": { "content": "$1" }, "series": { "content": "$2" } } },
|
||||
"noJellyfinCredentials": { "message": "Credenciais do Jellyfin não configuradas." },
|
||||
"notFoundOnJellyfin": { "message": "\"$query$\" não encontrado no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "\"$query$\" não encontrado em nenhum servidor.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"itemCount": { "message": "$count$ elementos", "placeholders": { "count": { "content": "$1" } } },
|
||||
"noPhotoServers": { "message": "Não há servidores de fotos" },
|
||||
"jellyfinScanInProgress": { "message": "A análise do Jellyfin já está em curso." },
|
||||
"jellyfinScanning": { "message": "A analisar Jellyfin..." },
|
||||
"jellyfinMissingCredentials": { "message": "Por favor, preencha o URL e o utilizador do Jellyfin." },
|
||||
"jellyfinConnecting": { "message": "A ligar ao Jellyfin em: $url$", "placeholders": { "url": { "content": "$1" } } },
|
||||
"jellyfinAuthFailed": { "message": "Autenticação Jellyfin falhada: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinAuthSuccess": { "message": "Autenticação Jellyfin bem-sucedida." },
|
||||
"jellyfinFetchingLibraries": { "message": "A obter bibliotecas..." },
|
||||
"jellyfinFetchFailed": { "message": "Erro ao obter bibliotecas: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"jellyfinNoMediaLibraries": { "message": "Não foram encontradas bibliotecas de filmes ou séries no Jellyfin." },
|
||||
"jellyfinLibrariesFound": { "message": "$count$ biblioteca(s) de multimédia encontrada(s).", "placeholders": { "count": { "content": "$1" } } },
|
||||
"jellyfinLibraryScanSuccess": { "message": "[Sucesso] '$libraryName$' analisada, $count$ títulos adicionados.", "placeholders": { "libraryName": { "content": "$1" }, "count": { "content": "$2" } } },
|
||||
"jellyfinLibraryScanFailed": { "message": "Erro ao analisar 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" } } },
|
||||
"noJellyfinCredentials": { "message": "Credenciais Jellyfin não configuradas." },
|
||||
"notFoundOnJellyfin": { "message": "Não foi encontrado \"$query$\" no Jellyfin.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"notFoundOnAnyServer": { "message": "Não foi encontrado \"$query$\" em nenhum servidor.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"localOnPlex": { "message": "No Plex" },
|
||||
"searchOnPlex": { "message": "Pesquisar no Plex" },
|
||||
"jellyfinTitle": { "message": "Conteúdo do Jellyfin" },
|
||||
"noJellyfinContent": { "message": "Nenhum conteúdo do Jellyfin encontrado." },
|
||||
"noJellyfinContentSub": { "message": "Certifique-se de que você analisou seu servidor Jellyfin nas configurações." },
|
||||
"noJellyfinContent": { "message": "Não foi encontrado conteúdo do Jellyfin." },
|
||||
"noJellyfinContentSub": { "message": "Certifique-se de que analisou o seu servidor Jellyfin nas definições." },
|
||||
"activityViewerTitle": { "message": "Visualizador de Atividade do Servidor" },
|
||||
"activitySelectServer": { "message": "Selecione um servidor" },
|
||||
"activitySelectServer": { "message": "Selecionar um servidor" },
|
||||
"activityCheckBtn": { "message": "Atualizar" },
|
||||
"activityNoSessions": { "message": "Nenhuma sessão ativa neste servidor." },
|
||||
"activitySessionUser": { "message": "Usuário" },
|
||||
"activityNoSessions": { "message": "Não há sessões ativas neste servidor." },
|
||||
"activitySessionUser": { "message": "Utilizador" },
|
||||
"activitySessionDevice": { "message": "Dispositivo" },
|
||||
"activitySessionContent": { "message": "Conteúdo" },
|
||||
"activitySessionState": { "message": "Estado" },
|
||||
"activitySessionIdentifier": { "message": "Identificador do Cliente" },
|
||||
"activityCopyID": { "message": "Copiar ID" },
|
||||
"activityError": { "message": "Não foi possível buscar 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!" },
|
||||
"activityCopyError": { "message": "Falha ao copiar o identificador." },
|
||||
"noProvidersFound": { "message": "Nenhum provedor encontrado." },
|
||||
"activityCopyError": { "message": "Erro ao copiar o identificador." },
|
||||
"noProvidersFound": { "message": "Não foram encontrados fornecedores." },
|
||||
"availableOnPlex": { "message": "Disponível no Plex" },
|
||||
"navM3uGenerator": { "message": "Gerador M3U" },
|
||||
"m3uGeneratorTitle": { "message": "Gerador de Lista de Reprodução M3U" },
|
||||
"selectAServer": { "message": "Selecione um servidor..." },
|
||||
"downloadM3u": { "message": "Baixar M3U" },
|
||||
"m3uGeneratorTitle": { "message": "Gerador de Listas M3U" },
|
||||
"selectAServer": { "message": "Selecionar um servidor..." },
|
||||
"downloadM3u": { "message": "Descarregar M3U" },
|
||||
"m3uGenerator": { "message": "Gerador M3U" },
|
||||
"selectServer": { "message": "Selecionar Servidor" },
|
||||
"selectLibraries": { "message": "Selecionar Bibliotecas" },
|
||||
"howToUse": { "message": "Como Usar" },
|
||||
"m3uInstruction1": { "message": "Escolha um servidor da lista." },
|
||||
"m3uInstruction2": { "message": "Selecione uma ou mais bibliotecas para incluir." },
|
||||
"m3uInstruction3": { "message": "Clique no botão de download." },
|
||||
"m3uInstruction4": { "message": "Importe o arquivo .m3u para o seu reprodutor compatível." },
|
||||
"settingsRegionLabel": { "message": "Região para descoberta de conteúdo" },
|
||||
"allRegions": { "message": "Todas as regiões" },
|
||||
"chatOpen": { "message": "Abrir chat" },
|
||||
"chatTitle": { "message": "Assistente de IA" },
|
||||
"m3uInstruction3": { "message": "Clique no botão de descarregar." },
|
||||
"m3uInstruction4": { "message": "Importe o ficheiro .m3u para o seu reprodutor compatível." },
|
||||
"chatOpen": { "message": "Abrir Chat" },
|
||||
"chatTitle": { "message": "Assistente IA" },
|
||||
"chatClose": { "message": "X" },
|
||||
"chatPlaceholder": { "message": "Digite sua mensagem..." },
|
||||
"chatPlaceholder": { "message": "Escreva a sua mensagem..." },
|
||||
"chatSend": { "message": "➤" },
|
||||
"chatGptError": { "message": "Desculpe, não consegui obter uma resposta. Por favor, tente novamente." },
|
||||
"chatWelcome": { "message": "Bem-vindo! Eu sou seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que você queira saber." },
|
||||
"chatApiKeyMissing": { "message": "A chave da API OpenAI não está definida. Configure-a nas configurações da extensão." },
|
||||
"chatApiInvalidResponse": { "message": "A API retornou uma resposta inválida. Por favor, tente novamente." },
|
||||
"chatApiError": { "message": "Erro ao se comunicar com o assistente de IA" },
|
||||
"downloadAll": { "message": "Baixar tudo" },
|
||||
"download": { "message": "Baixar" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex por filmes ou séries." },
|
||||
"aiToolSearchLibraryQueryDesc": { "message": "O título a ser pesquisado." },
|
||||
"aiToolSearchLibraryTypeDesc": { "message": "O tipo de conteúdo a ser pesquisado (filme ou série)." },
|
||||
"aiToolNavigateToPageDesc": { "message": "Navega para uma página específica no aplicativo." },
|
||||
"aiToolNavigateToPagePageDesc": { "message": "A página para a qual navegar." },
|
||||
"aiToolGetUserStatsDesc": { "message": "Obtém estatísticas do usuário." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Mostra os detalhes de um filme ou série." },
|
||||
"aiToolShowItemDetailsTitleDesc": { "message": "O título do filme ou série." },
|
||||
"aiToolShowItemDetailsTypeDesc": { "message": "O tipo de conteúdo (filme ou série)." },
|
||||
"aiToolAddToPlaylistDesc": { "message": "Adiciona um filme ou série à lista de reprodução." },
|
||||
"aiToolAddToPlaylistTitleDesc": { "message": "O título do filme ou série." },
|
||||
"aiToolAddToPlaylistTypeDesc": { "message": "O tipo de conteúdo (filme ou série)." },
|
||||
"aiToolDownloadPlaylistDesc": { "message": "Baixa a lista de reprodução de um filme ou série." },
|
||||
"aiToolDownloadPlaylistTitleDesc": { "message": "O título do filme ou série." },
|
||||
"aiToolDownloadPlaylistTypeDesc": { "message": "O tipo de conteúdo (filme ou série)." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série dos favoritos." },
|
||||
"aiToolToggleFavoriteTitleDesc": { "message": "O título do filme ou série." },
|
||||
"aiToolToggleFavoriteTypeDesc": { "message": "O tipo de conteúdo (filme ou série)." },
|
||||
"aiToolGetRecommendationsDesc": { "message": "Obtém recomendações para o usuário." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Aplica filtros à visualização atual." },
|
||||
"aiToolApplyFiltersTypeDesc": { "message": "O tipo de conteúdo a ser filtrado (filme ou série)." },
|
||||
"aiToolApplyFiltersGenreDesc": { "message": "O gênero pelo qual filtrar." },
|
||||
"aiToolApplyFiltersYearDesc": { "message": "O ano pelo qual filtrar." },
|
||||
"aiToolApplyFiltersSortDesc": { "message": "A ordem na qual os resultados devem ser classificados." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Toca música de um artista específico." },
|
||||
"aiToolPlayMusicByArtistNameDesc": { "message": "O nome do artista." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Limpa o histórico de bate-papo." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Exclui o banco de dados da extensão." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Atualiza todos os tokens do Plex." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Adiciona um novo token do Plex." },
|
||||
"aiToolAddPlexTokenTokenDesc": { "message": "O token do Plex a ser adicionado." },
|
||||
"aiToolChangeRegionDesc": { "message": "Altera a região para descoberta de conteúdo." },
|
||||
"aiToolChangeRegionRegionDesc": { "message": "O código de região de duas letras (por exemplo, US, ES, FR)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Limpa todos os favoritos do usuário." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a visualização de recomendações." },
|
||||
"aiToolFavoritesCleared": { "message": "Favoritos limpos." },
|
||||
"aiToolFavoritesClearError": { "message": "Erro ao limpar favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Recomendações limpas." },
|
||||
"aiToolRecommendationsClearError": { "message": "Erro ao limpar recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Banco de dados excluído. A página será recarregada agora." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Erro ao excluir o banco de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "A exclusão do banco de dados está bloqueada. Feche outras abas do aplicativo." },
|
||||
"chatWelcome": { "message": "Bem-vindo! Sou o seu assistente CinePlex. Pergunte-me sobre filmes, séries ou qualquer outra coisa que queira saber." },
|
||||
"chatGoogleApiKeyMissing": { "message": "A chave da API Google Gemini não está configurada. Por favor, configure-a nas definições da extensão para usar o assistente de IA." },
|
||||
"chatApiInvalidResponse": { "message": "A API devolveu uma resposta inválida. Por favor, tente novamente." },
|
||||
"chatApiError": { "message": "Erro ao comunicar com o assistente de IA" },
|
||||
"downloadAll": { "message": "Descarregar tudo" },
|
||||
"download": { "message": "Descarregar" },
|
||||
"aiToolSearchLibraryDesc": { "message": "Pesquisa na biblioteca Plex do utilizador filmes ou séries por título." },
|
||||
"aiToolSearchLibraryQueryParamDesc": { "message": "O título do filme ou série a pesquisar." },
|
||||
"aiToolSearchLibraryTypeParamDesc": { "message": "O tipo de conteúdo a pesquisar. 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." },
|
||||
"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 mostra as estatísticas da biblioteca do utilizador, como o número total de filmes, séries e artistas únicos." },
|
||||
"aiToolShowItemDetailsDesc": { "message": "Mostra a página de detalhes de um filme ou série específica pelo seu título e tipo." },
|
||||
"aiToolShowItemDetailsTitleParamDesc": { "message": "O título exato do filme ou série." },
|
||||
"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." },
|
||||
"aiToolAddToPlaylistTitleParamDesc": { "message": "O título do filme ou série a adicionar." },
|
||||
"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." },
|
||||
"aiToolCheckAndDownloadTitlesParamDesc": { "message": "Uma matriz de títulos de filmes ou séries para pesquisar e descarregar." },
|
||||
"aiToolCheckAndDownloadTypeParamDesc": { "message": "O tipo de conteúdo da lista. Deve ser 'movie' ou 'series'." },
|
||||
"aiToolCheckAndDownloadFilenameParamDesc": { "message": "O nome do ficheiro M3U a descarregar (por exemplo, 'MinhaLista.m3u'). Se não for fornecido, será usado um nome por defeito." },
|
||||
"aiToolToggleFavoriteDesc": { "message": "Adiciona ou remove um filme ou série da lista de favoritos do utilizador." },
|
||||
"aiToolToggleFavoriteTitleParamDesc": { "message": "O título do filme ou série." },
|
||||
"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." },
|
||||
"aiToolApplyFiltersDesc": { "message": "Aplica filtros à vista atual de filmes ou séries, permitindo refinar os resultados por tipo, género, ano e ordem de classificação." },
|
||||
"aiToolApplyFiltersTypeParamDesc": { "message": "O tipo de conteúdo ao qual aplicar os filtros. Deve ser 'movie' ou 'series'." },
|
||||
"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')." },
|
||||
"aiToolApplyFiltersSortParamDesc": { "message": "O critério de ordenação para os resultados. Valores válidos: 'popularity.desc' (populares), 'vote_average.desc' (melhor avaliados), 'release_date.desc' (recentes para filmes) ou 'first_air_date.desc' (recentes para séries)." },
|
||||
"aiToolPlayMusicByArtistDesc": { "message": "Abre o reprodutor de música e começa a reproduzir canções de um artista específico da biblioteca do utilizador." },
|
||||
"aiToolPlayMusicByArtistNameParamDesc": { "message": "O nome exato do artista cujas canções se deseja reproduzir." },
|
||||
"aiToolClearChatHistoryDesc": { "message": "Limpa todo o histórico de mensagens da conversa atual com o assistente de IA." },
|
||||
"aiToolDeleteDatabaseDesc": { "message": "Elimina toda a base de dados local da extensão, incluindo o conteúdo analisado, as definições e os favoritos. Esta ação é irreversível e recarregará a aplicação." },
|
||||
"aiToolUpdateAllTokensDesc": { "message": "Inicia uma análise completa de todos os servidores e bibliotecas Plex associados aos tokens configurados na extensão. Atualiza todos os filmes, séries, artistas e fotos." },
|
||||
"aiToolAddPlexTokenDesc": { "message": "Adiciona um novo token X-Plex à configuração da extensão, permitindo que a aplicação analise conteúdo de novos servidores Plex." },
|
||||
"aiToolAddPlexTokenTokenParamDesc": { "message": "A string do token X-Plex que se deseja adicionar." },
|
||||
"aiToolChangeRegionDesc": { "message": "Altera a região utilizada para a descoberta de conteúdo na API do TMDB. Isto afetará os resultados mostrados nas secções de filmes e séries, bem como os fornecedores de streaming." },
|
||||
"aiToolChangeRegionRegionParamDesc": { "message": "O código de país ISO 3166-1 de duas letras para a nova região (por exemplo, 'US' para Estados Unidos, 'PT' para Portugal, 'MX' para México)." },
|
||||
"aiToolClearAllFavoritesDesc": { "message": "Elimina todos os filmes e séries que o utilizador marcou como favoritos." },
|
||||
"aiToolClearViewingHistoryDesc": { "message": "Apaga o histórico de visualização do utilizador da página de histórico." },
|
||||
"aiToolClearRecommendationsViewDesc": { "message": "Limpa a vista de recomendações e elimina as recomendações em cache." },
|
||||
"aiToolSearchNotFound": { "message": "Não foi encontrado '$query$' na sua biblioteca.", "placeholders": { "query": { "content": "$1" } } },
|
||||
"aiToolNavigateSuccess": { "message": "Navegado para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolNavigateError": { "message": "Erro ao navegar para a página de $page$.", "placeholders": { "page": { "content": "$1" } } },
|
||||
"aiToolStatsError": { "message": "Erro ao obter estatísticas." },
|
||||
"aiToolItemNotFound": { "message": "Não foi encontrado o item '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolShowItemDetailsSuccess": { "message": "A mostrar detalhes de '$title$'.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolAddToPlaylistSuccess": { "message": "Adicionado '$title$' à lista de reprodução.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteAdded": { "message": "Adicionado '$title$' aos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolFavoriteRemoved": { "message": "Removido '$title$' dos favoritos.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"aiToolRecommendationsSuccess": { "message": "A mostrar recomendações." },
|
||||
"aiToolApplyFiltersGenreNotFound": { "message": "Género '$genre$' não encontrado.", "placeholders": { "genre": { "content": "$1" } } },
|
||||
"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." },
|
||||
"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" } } },
|
||||
"aiToolPlayMusicSuccess": { "message": "A reproduzir música de '$artist_name$'.", "placeholders": { "artist_name": { "content": "$1" } } },
|
||||
"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." },
|
||||
"aiToolDeleteDatabaseCancelled": { "message": "Eliminação da base de dados cancelada." },
|
||||
"aiToolExecutionError": { "message": "Erro ao executar a ferramenta '$toolName$': $message$", "placeholders": { "toolName": { "content": "$1" }, "message": { "content": "$2" } } },
|
||||
"aiToolUnknown": { "message": "Ferramenta desconhecida: '$toolName$'.", "placeholders": { "toolName": { "content": "$1" } } },
|
||||
"aiToolFavoritesCleared": { "message": "Favoritos eliminados." },
|
||||
"aiToolFavoritesClearError": { "message": "Erro ao eliminar os favoritos: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolRecommendationsCleared": { "message": "Recomendações eliminadas." },
|
||||
"aiToolRecommendationsClearError": { "message": "Erro ao eliminar as recomendações: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleted": { "message": "Base de dados eliminada. A página será recarregada." },
|
||||
"aiToolDatabaseDeleteError": { "message": "Erro ao eliminar a base de dados: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolDatabaseDeleteBlocked": { "message": "A eliminação da base de dados está bloqueada. Feche outros separadores da aplicação." },
|
||||
"aiToolUpdateAllTokensSuccess": { "message": "Todos os tokens foram atualizados com sucesso." },
|
||||
"aiToolUpdateAllTokensError": { "message": "Erro ao atualizar tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Token do Plex adicionado com sucesso." },
|
||||
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar token do Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está sendo atualizado.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolUpdateAllTokensError": { "message": "Erro ao atualizar os tokens: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolAddPlexTokenSuccess": { "message": "Token Plex adicionado com sucesso." },
|
||||
"aiToolAddPlexTokenError": { "message": "Erro ao adicionar o token Plex: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiToolChangeRegionSuccess": { "message": "Região alterada para $region$. O conteúdo está a ser atualizado.", "placeholders": { "region": { "content": "$1" } } },
|
||||
"aiToolChangeRegionError": { "message": "Erro ao alterar a região: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v2": { "message": "Você é um assistente especialista em filmes e séries chamado CinePlex. Sua função principal é ajudar os usuários a interagir com sua biblioteca de mídia e descobrir conteúdo. Siga estas regras: 1. Quando um usuário pedir uma lista ou recomendação (por exemplo, 'diga-me 5 filmes de terror', 'as melhores séries de ficção científica'), você DEVE usar seu próprio conhecimento para gerar a lista e apresentá-la em formato numerado ou com marcadores. NÃO use ferramentas para esta tarefa inicial de descoberta. 2. Depois de apresentar a lista, se o usuário pedir para você baixá-la, verificá-la ou criar um M3U, ENTÃO e somente então, use a ferramenta 'generate_m3u_from_titles_list', passando a ela os títulos que você acabou de mencionar. 3. Para qualquer outra ação, como navegar no aplicativo, obter estatísticas ou pesquisar um TÍTULO ESPECÍFICO na biblioteca do usuário, use as ferramentas apropriadas. Seja conciso, amigável e eficiente." },
|
||||
"aiToolSearchLibraryDesc_v2": { "message": "A lista de títulos a processar está vazia." },
|
||||
"aiToolM3UNoLocalMatches": { "message": "Parece que você não tem nenhum dos títulos dessa lista em seus servidores locais." },
|
||||
"aiToolGenerateM3UTypeDesc": { "message": "O tipo de conteúdo a ser pesquisado: 'movie' ou 'series'." },
|
||||
"aiToolGenerateM3UFilenameDesc": { "message": "Um nome de arquivo personalizado para a lista de reprodução M3U baixada." },
|
||||
"aiToolGenerateM3USuccess": { "message": "Entendido! Estou gerando uma lista de reprodução M3U com $1 itens. O download deve começar em breve.", "placeholders": { "1": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v3": { "message": "Você é um assistente especialista em filmes e séries chamado CinePlex. Sua função principal é ajudar os usuários a descobrir conteúdo e interagir com sua biblioteca. Siga estas regras rigorosamente: 1. **NUNCA** afirme ter realizado uma ação se não tiver usado uma ferramenta para isso. Por exemplo, não diga 'eu baixei X' se não tiver usado a ferramenta de download. 2. Para solicitações de recomendações ou listas (por exemplo, 'me dê 5 filmes de terror'), use seu próprio conhecimento para gerar a lista. Apresente-a em formato numerado ou com marcadores. Após mostrar 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 ou pesquisar um título específico, use as ferramentas apropriadas. Seja sempre conciso, amigável e eficiente." },
|
||||
"aiToolCheckAndDownloadDesc": { "message": "Verifica uma lista de títulos de filmes ou séries nos servidores locais do usuário e, se encontrar correspondências, gera e baixa um arquivo de lista de reprodução M3U." },
|
||||
"aiToolGenerateM3UFromTitlesTitlesDesc": { "message": "Uma lista de títulos de filmes ou séries para verificar e baixar." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Forneça uma lista de títulos para criar a lista de reprodução." },
|
||||
"aiToolM3UCheckingTitles": { "message": "Verificando os títulos em seus servidores locais..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não consegui encontrar nenhum dos filmes ou séries da lista em seus servidores locais." },
|
||||
"aiToolM3UDownloadStarted": { "message": "Feito! Encontrei $1 dos $2 títulos em seus servidores e iniciei o download da lista de reprodução M3U.", "placeholders": { "1": { "content": "$1" }, "2": { "content": "$2" } } }
|
||||
"aiToolViewingHistoryCleared": { "message": "Histórico de visualização apagado." },
|
||||
"aiToolViewingHistoryClearError": { "message": "Erro ao apagar o histórico de visualização: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"aiSystemPrompt_v3": { "message": "Você é um assistente especialista em filmes e séries chamado CinePlex. A sua função principal é ajudar os utilizadores a descobrir conteúdo e a interagir com a sua biblioteca. Siga estas regras rigorosamente: 1. **NUNCA** invente que realizou uma ação se não usou uma ferramenta para tal. Por exemplo, não diga 'descarreguei X' se não usou a ferramenta de descarregar. 2. Para pedidos de recomendações ou listas (ex. 'diga-me 5 filmes de terror'), use o seu próprio conhecimento para gerar a lista. Apresente-a em formato numerado ou com marcadores. Depois de mostrar a lista, pergunte proativamente ao utilizador se ele quer que verifique a disponibilidade nos seus servidores locais e crie um ficheiro M3U. 3. **APENAS** se o utilizador confirmar que quer verificar ou descarregar a lista, utilize a ferramenta `check_and_download_titles_list`. Não a utilize sem confirmação explícita. 4. Para qualquer outra ação como navegar, obter estatísticas ou procurar um título específico, utilize as ferramentas apropriadas. Seja sempre conciso, amigável e eficiente." },
|
||||
"aiToolM3UNoTitlesProvided": { "message": "Por favor, 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..." },
|
||||
"aiToolM3UNoLocalMatchesForDownload": { "message": "Não encontrei nenhum dos filmes ou séries da lista nos 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" } } },
|
||||
"backToProviders": { "message": "Voltar aos Fornecedores" },
|
||||
"artistsCounterSingle": { "message": "$total$ Artista", "placeholders": { "total": { "content": "$1" } } },
|
||||
"artistsCounterLoading": { "message": "A carregar..." },
|
||||
"downloadingSong": { "message": "A iniciar descarregamento de \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"songDownloaded": { "message": "\"$title$\" descarregado.", "placeholders": { "title": { "content": "$1" } } },
|
||||
"errorDownloadingSong": { "message": "Erro ao descarregar \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"generatingAlbumM3U": { "message": "A gerar M3U para \"$artist$\"", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"albumM3UGenerated": { "message": "M3U para o álbum \"$artist$\" gerado.", "placeholders": { "artist": { "content": "$1" } } },
|
||||
"retyingSection": { "message": "A tentar novamente a secção \"$title$\"", "placeholders": { "title": { "content": "$1" } } },
|
||||
"retrySuccess": { "message": "[SUCESSO] Retentativa 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" } } },
|
||||
"startingRetryPhase": { "message": "A iniciar fase de retentativas para $count$ secções...", "placeholders": { "count": { "content": "$1" } } },
|
||||
"tokenFoundServers": { "message": "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" } } },
|
||||
"plexScanFatalError": { "message": "ERRO FATAL: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"errorDuringScan": { "message": "Erro durante a análise: $message$", "placeholders": { "message": { "content": "$1" } } },
|
||||
"stoppingPlexScan": { "message": "A parar análise do Plex..." },
|
||||
"invalidTokenProvided": { "message": "Token inválido fornecido." },
|
||||
"tokenAlreadyExists": { "message": "O token já existe." },
|
||||
"tokenAddedSuccessfully": { "message": "Token adicionado com sucesso." },
|
||||
"noStreamsFoundForSelection": { "message": "Não foram encontrados streams para a seleção." },
|
||||
"autoplayBlocked": { "message": "Reprodução automática bloqueada." },
|
||||
"welcomeToCinePlex": { "message": "" },
|
||||
"page": { "message": "Página" }
|
||||
}
|
352
js/ai-tools.js
352
js/ai-tools.js
@ -15,229 +15,175 @@ export class AITools {
|
||||
get toolDefinitions() {
|
||||
return [
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'search_library',
|
||||
description: _('aiToolSearchLibraryDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
query: { type: 'string', description: _('aiToolSearchLibraryQueryDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolSearchLibraryTypeDesc') }
|
||||
name: 'search_library',
|
||||
description: _('aiToolSearchLibraryDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
query: { type: 'string', description: _('aiToolSearchLibraryQueryParamDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolSearchLibraryTypeParamDesc') }
|
||||
},
|
||||
required: ['query']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'navigate_to_page',
|
||||
description: _('aiToolNavigateToPageDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
page: {
|
||||
type: 'string',
|
||||
enum: ['movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', 'm3u-generator'],
|
||||
description: _('aiToolNavigateToPagePageParamDesc')
|
||||
}
|
||||
},
|
||||
required: ['page']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'get_user_stats',
|
||||
description: _('aiToolGetUserStatsDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
name: 'show_item_details',
|
||||
description: _('aiToolShowItemDetailsDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolShowItemDetailsTitleParamDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolShowItemDetailsTypeParamDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'add_to_playlist',
|
||||
description: _('aiToolAddToPlaylistDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolAddToPlaylistTitleParamDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolAddToPlaylistTypeParamDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'check_and_download_titles_list',
|
||||
description: _('aiToolCheckAndDownloadDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
titles: {
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: _('aiToolCheckAndDownloadTitlesParamDesc')
|
||||
},
|
||||
required: ['query']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'navigate_to_page',
|
||||
description: _('aiToolNavigateToPageDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
page: {
|
||||
type: 'string',
|
||||
enum: ['movies', 'series', 'stats', 'favorites', 'history', 'recommendations', 'photos', 'providers', 'm3u-generator'],
|
||||
description: _('aiToolNavigateToPagePageDesc')
|
||||
}
|
||||
type: {
|
||||
type: 'string',
|
||||
enum: ['movie', 'series'],
|
||||
description: _('aiToolCheckAndDownloadTypeParamDesc')
|
||||
},
|
||||
required: ['page']
|
||||
}
|
||||
filename: { type: 'string', description: _('aiToolCheckAndDownloadFilenameParamDesc') }
|
||||
},
|
||||
required: ['titles', 'type']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'get_user_stats',
|
||||
description: _('aiToolGetUserStatsDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
name: 'toggle_favorite',
|
||||
description: _('aiToolToggleFavoriteDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolToggleFavoriteTitleParamDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolToggleFavoriteTypeParamDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'show_item_details',
|
||||
description: _('aiToolShowItemDetailsDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolShowItemDetailsTitleDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolShowItemDetailsTypeDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
name: 'get_recommendations',
|
||||
description: _('aiToolGetRecommendationsDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
name: 'apply_filters',
|
||||
description: _('aiToolApplyFiltersDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolApplyFiltersTypeParamDesc') },
|
||||
genre: { type: 'string', description: _('aiToolApplyFiltersGenreParamDesc') },
|
||||
year: { type: 'string', description: _('aiToolApplyFiltersYearParamDesc') },
|
||||
sort: { type: 'string', enum: ['popularity.desc', 'vote_average.desc', 'release_date.desc', 'first_air_date.desc'], description: _('aiToolApplyFiltersSortParamDesc') }
|
||||
},
|
||||
required: ['type']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'add_to_playlist',
|
||||
description: _('aiToolAddToPlaylistDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolAddToPlaylistTitleDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolAddToPlaylistTypeDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
name: 'play_music_by_artist',
|
||||
description: _('aiToolPlayMusicByArtistDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
artist_name: { type: 'string', description: _('aiToolPlayMusicByArtistNameParamDesc') }
|
||||
},
|
||||
required: ['artist_name']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'check_and_download_titles_list',
|
||||
description: _('aiToolCheckAndDownloadDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
titles: {
|
||||
type: 'array',
|
||||
items: { type: 'string' },
|
||||
description: _('aiToolGenerateM3UFromTitlesTitlesDesc')
|
||||
},
|
||||
type: {
|
||||
type: 'string',
|
||||
enum: ['movie', 'series'],
|
||||
description: _('aiToolGenerateM3UTypeDesc')
|
||||
},
|
||||
filename: { type: 'string', description: _('aiToolGenerateM3UFilenameDesc') }
|
||||
},
|
||||
required: ['titles', 'type']
|
||||
}
|
||||
name: 'clear_chat_history',
|
||||
description: _('aiToolClearChatHistoryDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
name: 'delete_database',
|
||||
description: _('aiToolDeleteDatabaseDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
name: 'update_all_tokens',
|
||||
description: _('aiToolUpdateAllTokensDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
name: 'add_plex_token',
|
||||
description: _('aiToolAddPlexTokenDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
token: { type: 'string', description: _('aiToolAddPlexTokenTokenParamDesc') }
|
||||
},
|
||||
required: ['token']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'toggle_favorite',
|
||||
description: _('aiToolToggleFavoriteDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
title: { type: 'string', description: _('aiToolToggleFavoriteTitleDesc') },
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolToggleFavoriteTypeDesc') }
|
||||
},
|
||||
required: ['title', 'type']
|
||||
}
|
||||
name: 'change_region',
|
||||
description: _('aiToolChangeRegionDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
region: { type: 'string', description: _('aiToolChangeRegionRegionParamDesc') }
|
||||
},
|
||||
required: ['region']
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'get_recommendations',
|
||||
description: _('aiToolGetRecommendationsDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
name: 'clear_all_favorites',
|
||||
description: _('aiToolClearAllFavoritesDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'apply_filters',
|
||||
description: _('aiToolApplyFiltersDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
type: { type: 'string', enum: ['movie', 'series'], description: _('aiToolApplyFiltersTypeDesc') },
|
||||
genre: { type: 'string', description: _('aiToolApplyFiltersGenreDesc') },
|
||||
year: { type: 'string', description: _('aiToolApplyFiltersYearDesc') },
|
||||
sort: { type: 'string', enum: ['popularity.desc', 'vote_average.desc', 'release_date.desc', 'first_air_date.desc'], description: _('aiToolApplyFiltersSortDesc') }
|
||||
},
|
||||
required: ['type']
|
||||
}
|
||||
}
|
||||
name: 'clear_viewing_history',
|
||||
description: _('aiToolClearViewingHistoryDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'play_music_by_artist',
|
||||
description: _('aiToolPlayMusicByArtistDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
artist_name: { type: 'string', description: _('aiToolPlayMusicByArtistNameDesc') }
|
||||
},
|
||||
required: ['artist_name']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'clear_chat_history',
|
||||
description: _('aiToolClearChatHistoryDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'delete_database',
|
||||
description: _('aiToolDeleteDatabaseDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'update_all_tokens',
|
||||
description: _('aiToolUpdateAllTokensDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'add_plex_token',
|
||||
description: _('aiToolAddPlexTokenDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
token: { type: 'string', description: _('aiToolAddPlexTokenTokenDesc') }
|
||||
},
|
||||
required: ['token']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'change_region',
|
||||
description: _('aiToolChangeRegionDesc'),
|
||||
parameters: {
|
||||
type: 'object',
|
||||
properties: {
|
||||
region: { type: 'string', description: _('aiToolChangeRegionRegionDesc') }
|
||||
},
|
||||
required: ['region']
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'clear_all_favorites',
|
||||
description: _('aiToolClearAllFavoritesDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'clear_viewing_history',
|
||||
description: "Clears the user's content viewing history from the history page.",
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
},
|
||||
{
|
||||
type: 'function',
|
||||
function: {
|
||||
name: 'clear_recommendations_view',
|
||||
description: _('aiToolClearRecommendationsViewDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
name: 'clear_recommendations_view',
|
||||
description: _('aiToolClearRecommendationsViewDesc'),
|
||||
parameters: { type: 'object', properties: {} }
|
||||
}
|
||||
];
|
||||
}
|
||||
@ -483,9 +429,9 @@ export class AITools {
|
||||
async "clear_viewing_history"() {
|
||||
try {
|
||||
clearAllHistory();
|
||||
return JSON.stringify({ success: true, message: "Viewing history has been cleared." });
|
||||
return JSON.stringify({ success: true, message: _('aiToolViewingHistoryCleared') });
|
||||
} catch (error) {
|
||||
return JSON.stringify({ success: false, message: `Failed to clear viewing history: ${error.message}` });
|
||||
return JSON.stringify({ success: false, message: _('aiToolViewingHistoryClearError', error.message) });
|
||||
}
|
||||
}
|
||||
|
||||
@ -537,7 +483,7 @@ export class AITools {
|
||||
|
||||
async executeTool(toolCall) {
|
||||
const functionName = toolCall.function.name;
|
||||
const args = JSON.parse(toolCall.function.arguments);
|
||||
const args = toolCall.function.arguments;
|
||||
|
||||
if (typeof this[functionName] === 'function') {
|
||||
this.chat.addTypingIndicator();
|
||||
@ -545,7 +491,7 @@ export class AITools {
|
||||
const result = await this[functionName](args);
|
||||
return result;
|
||||
} catch (error) {
|
||||
const errorMessage = _('aiToolExecutionError', functionName, error.message);
|
||||
const errorMessage = _('aiToolExecutionError', [functionName, error.message]);
|
||||
this.chat.addMessage(errorMessage, 'tool-result', true, functionName);
|
||||
return JSON.stringify({ success: false, error: errorMessage });
|
||||
} finally {
|
||||
|
103
js/chat.js
103
js/chat.js
@ -62,7 +62,7 @@ export class Chat {
|
||||
if (this.conversationHistory.length === 0) {
|
||||
const welcomeMessage = _('chatWelcome');
|
||||
this.addMessage(welcomeMessage, 'assistant');
|
||||
this.conversationHistory.push({ role: 'assistant', content: welcomeMessage });
|
||||
this.conversationHistory.push({ role: 'model', parts: [{ text: welcomeMessage }] });
|
||||
}
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ export class Chat {
|
||||
if (!userInput) return;
|
||||
|
||||
this.addMessage(userInput, 'user');
|
||||
this.conversationHistory.push({ role: 'user', content: userInput });
|
||||
this.conversationHistory.push({ role: 'user', parts: [{ text: userInput }] });
|
||||
this.dom.input.value = '';
|
||||
this.autoResizeTextarea();
|
||||
this.dom.sendBtn.disabled = true;
|
||||
@ -88,12 +88,12 @@ export class Chat {
|
||||
this.addTypingIndicator();
|
||||
|
||||
try {
|
||||
const response = await this.getOpenAIResponseWithTools();
|
||||
const response = await this.getAIResponseWithTools();
|
||||
this.removeTypingIndicator();
|
||||
|
||||
if (response) {
|
||||
this.addMessage(response, 'assistant');
|
||||
this.conversationHistory.push({ role: 'assistant', content: response });
|
||||
this.conversationHistory.push({ role: 'model', parts: [{ text: response }] });
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
@ -119,7 +119,7 @@ export class Chat {
|
||||
if (sender === 'assistant') {
|
||||
icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm-2.5-5h5v2h-5v-2z"/></svg>';
|
||||
} else {
|
||||
icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="20" height="20"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/></svg>';
|
||||
icon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="20" height="20"><path d="M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.08-.73-1.69-.98l-.38-2.65C14.46 2.18 14.25 2 14 2h-4c-.25 0-.46.18-.49.42l-.38 2.65c-.61.25-1.17.59-1.69.98l-2.49-1c-.23-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64l2.11 1.65c-.04.32-.07.65-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12-.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.08.73 1.69.98l.38 2.65c.03.24.24.42.49.42h4c.25 0 .46-.18.49-.42l.38-2.65c.61-.25 1.17-.59 1.69-.98l2.49 1c.23.09.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z"/></svg>';
|
||||
}
|
||||
avatar.innerHTML = icon;
|
||||
wrapper.appendChild(avatar);
|
||||
@ -162,61 +162,86 @@ export class Chat {
|
||||
if (indicator) indicator.remove();
|
||||
}
|
||||
|
||||
async getOpenAIResponseWithTools() {
|
||||
const apiKey = state.settings.openaiApiKey;
|
||||
async getAIResponseWithTools() {
|
||||
const apiKey = state.settings.googleApiKey;
|
||||
if (!apiKey) {
|
||||
return _('chatApiKeyMissing');
|
||||
return _('chatGoogleApiKeyMissing');
|
||||
}
|
||||
|
||||
const systemPrompt = _('aiSystemPrompt_v3');
|
||||
const messagesForApi = [
|
||||
{ role: 'system', content: systemPrompt },
|
||||
...this.conversationHistory
|
||||
];
|
||||
const tools = [{
|
||||
functionDeclarations: this.aiTools.toolDefinitions
|
||||
}];
|
||||
|
||||
const model = "gemini-2.5-flash";
|
||||
const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent`;
|
||||
|
||||
try {
|
||||
const response = await fetch('https://api.proxyapi.ru/openai/v1/chat/completions', {
|
||||
const response = await fetch(url, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${apiKey}`
|
||||
'x-goog-api-key': apiKey
|
||||
},
|
||||
body: JSON.stringify({
|
||||
model: 'gpt-3.5-turbo',
|
||||
messages: messagesForApi,
|
||||
tools: this.aiTools.toolDefinitions,
|
||||
tool_choice: 'auto',
|
||||
max_tokens: 400,
|
||||
temperature: 0.7
|
||||
contents: this.conversationHistory,
|
||||
tools: tools,
|
||||
system_instruction: {
|
||||
parts: [{ text: systemPrompt }]
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json().catch(() => ({}));
|
||||
throw new Error(errorData?.error?.message || `Error HTTP ${response.status}`);
|
||||
const errorMessage = errorData?.error?.message || `Error HTTP ${response.status}`;
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const message = data.choices[0].message;
|
||||
|
||||
if (!data.candidates || !data.candidates.length || !data.candidates[0].content || !data.candidates[0].content.parts) {
|
||||
console.error("Respuesta inesperada de la API:", data);
|
||||
throw new Error(_('chatApiInvalidResponse'));
|
||||
}
|
||||
|
||||
if (message.tool_calls) {
|
||||
this.conversationHistory.push(message);
|
||||
for (const toolCall of message.tool_calls) {
|
||||
const toolResult = await this.aiTools.executeTool(toolCall);
|
||||
this.conversationHistory.push({ role: 'tool', tool_call_id: toolCall.id, name: toolCall.function.name, content: toolResult });
|
||||
}
|
||||
// Now call the API again with the tool results
|
||||
return await this.getOpenAIResponseWithTools();
|
||||
} else if (message.content) {
|
||||
return message.content;
|
||||
const candidate = data.candidates[0];
|
||||
const part = candidate.content.parts[0];
|
||||
|
||||
if (part.functionCall) {
|
||||
this.conversationHistory.push(candidate.content);
|
||||
const toolCall = {
|
||||
id: `call_${Date.now()}`,
|
||||
function: {
|
||||
name: part.functionCall.name,
|
||||
arguments: part.functionCall.args,
|
||||
},
|
||||
};
|
||||
|
||||
const toolResult = await this.aiTools.executeTool(toolCall);
|
||||
|
||||
this.conversationHistory.push({
|
||||
role: 'tool',
|
||||
parts: [{
|
||||
functionResponse: {
|
||||
name: part.functionCall.name,
|
||||
response: JSON.parse(toolResult)
|
||||
}
|
||||
}]
|
||||
});
|
||||
|
||||
return await this.getAIResponseWithTools();
|
||||
} else if (part.text) {
|
||||
return part.text;
|
||||
} else {
|
||||
return _('chatApiInvalidResponse');
|
||||
return _('chatApiNoTextResponse');
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('OpenAI API call failed:', error);
|
||||
showNotification(_('chatApiError') + `: ${error.message}`, 'error');
|
||||
return _('chatApiError') + `: ${error.message}`;
|
||||
console.error('Fallo en la llamada a la API de Google AI:', error);
|
||||
const errorMessage = _('chatApiError') + `: ${error.message}`;
|
||||
showNotification(errorMessage, 'error');
|
||||
return errorMessage;
|
||||
}
|
||||
}
|
||||
|
||||
@ -276,6 +301,6 @@ export class Chat {
|
||||
this.dom.messagesContainer.innerHTML = '';
|
||||
const welcomeMessage = _('chatWelcome');
|
||||
this.addMessage(welcomeMessage, 'assistant');
|
||||
this.conversationHistory.push({ role: 'assistant', content: welcomeMessage });
|
||||
this.conversationHistory.push({ role: 'model', parts: [{ text: welcomeMessage }] });
|
||||
}
|
||||
}
|
||||
}
|
@ -2,5 +2,4 @@ export const config = {
|
||||
defaultApiKey: '4e44d9029b1270a757cddc766a1bcb63',
|
||||
dbName: 'PlexDB',
|
||||
dbVersion: 9,
|
||||
defaultOpenaiApiKey: 'sk-r5HgSL5o102oGaXEuF13P5sNqpLtDVDq',
|
||||
};
|
@ -7,7 +7,7 @@ export const state = {
|
||||
settings: {
|
||||
id: 'user_settings',
|
||||
apiKey: '',
|
||||
openaiApiKey: config.defaultOpenaiApiKey || '',
|
||||
googleApiKey: '',
|
||||
theme: 'dark',
|
||||
showHero: true,
|
||||
language: 'es',
|
||||
|
4
js/ui.js
4
js/ui.js
@ -1571,7 +1571,7 @@ export function activateSettingsTab(tabId) {
|
||||
|
||||
export function openSettingsModal() {
|
||||
document.getElementById('tmdbApiKey').value = state.settings.apiKey;
|
||||
document.getElementById('openaiApiKey').value = state.settings.openaiApiKey || '';
|
||||
document.getElementById('googleApiKey').value = state.settings.googleApiKey || '';
|
||||
document.getElementById('phpScriptUrl').value = state.settings.phpScriptUrl || '';
|
||||
document.getElementById('lightModeToggle').checked = state.settings.theme === 'light';
|
||||
document.getElementById('showHeroToggle').checked = state.settings.showHero;
|
||||
@ -1598,7 +1598,7 @@ export async function saveSettings() {
|
||||
const newSettings = {
|
||||
id: 'user_settings',
|
||||
apiKey: document.getElementById('tmdbApiKey').value.trim(),
|
||||
openaiApiKey: document.getElementById('openaiApiKey').value.trim(),
|
||||
googleApiKey: document.getElementById('googleApiKey').value.trim(),
|
||||
theme: document.getElementById('lightModeToggle').checked ? 'light' : 'dark',
|
||||
showHero: document.getElementById('showHeroToggle').checked,
|
||||
phpScriptUrl: document.getElementById('phpScriptUrl').value.trim(),
|
||||
|
@ -399,9 +399,8 @@
|
||||
<input type="password" class="form-control" id="tmdbApiKey" placeholder="__MSG_settingsTmdbApiPlaceholder__">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="openaiApiKey" class="form-label">__MSG_settingsOpenAiApiLabel__</label>
|
||||
<label for="openaiApiKey" class="form-label">__MSG_openaiApiKey__</label>
|
||||
<input type="password" class="form-control" id="openaiApiKey" placeholder="__MSG_settingsOpenAiApiPlaceholder__">
|
||||
<label for="googleApiKey" class="form-label">__MSG_settingsGoogleApiLabel__</label>
|
||||
<input type="password" class="form-control" id="googleApiKey" placeholder="__MSG_settingsGoogleApiPlaceholder__">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="region-filter" class="form-label">__MSG_settingsRegionLabel__</label>
|
||||
|
Loading…
x
Reference in New Issue
Block a user