{ "appName": { "message": "CinePlex" }, "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-PT" }, "toggleNavigation": { "message": "Alternar Navegação" }, "searchPlaceholder": { "message": "Pesquisar filmes ou séries..." }, "openMusicPlayer": { "message": "Abrir Reprodutor de Música" }, "settings": { "message": "Definições" }, "navMovies": { "message": "Filmes" }, "navSeries": { "message": "Séries" }, "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" }, "popularMovies": { "message": "Filmes Populares" }, "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": "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": "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)" }, "statsChartByDecade": { "message": "Conteúdo por Década" }, "recommendationsTitle": { "message": "Recomendações para si" }, "historyTitle": { "message": "Histórico de Visualização" }, "clearHistory": { "message": "Limpar Tudo" }, "consoleTitle": { "message": "Consola de Leitura Plex" }, "footerCredit": { "message": "Uma interface para o seu universo Plex." }, "closeTrailer": { "message": "Fechar trailer" }, "close": { "message": "Fechar" }, "photoViewer": { "message": "Visualizador de fotos" }, "previous": { "message": "Anterior" }, "next": { "message": "Próximo" }, "notificationTemplateText": { "message": "Notificação" }, "settingsTitleFull": { "message": "Definições e Configuração" }, "settingsTabGeneral": { "message": "Geral" }, "settingsTabPlex": { "message": "Plex" }, "settingsTabJellyfin": { "message": "Jellyfin" }, "settingsTabPhpGen": { "message": "Gerador PHP" }, "settingsTabData": { "message": "Dados" }, "settingsApiServer": { "message": "Configuração de API e Servidor" }, "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://o-seu-servidor.com/caminho/para/o-script.php" }, "settingsInterface": { "message": "Interface" }, "settingsLightTheme": { "message": "Modo Claro" }, "settingsShowHero": { "message": "Mostrar secção de boas-vindas 'Hero'" }, "settingsScanContent": { "message": "Análise de Conteúdo" }, "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 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 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 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": "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": "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 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": "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 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" }, "eqPresetRock": { "message": "Rock" }, "eqPresetPop": { "message": "Pop" }, "eqPresetJazz": { "message": "Jazz" }, "eqPresetClassical": { "message": "Clássica" }, "eqPresetBassBoost": { "message": "Reforço de Graves" }, "eqPreampLabel": { "message": "Pré-amplificador" }, "infoModalTitle": { "message": "Informações" }, "infoModalFieldTitle": { "message": "Título:" }, "infoModalFieldArtist": { "message": "Artista:" }, "infoModalFieldAlbum": { "message": "Álbum:" }, "infoModalFieldSong": { "message": "Canção:" }, "infoModalFieldYear": { "message": "Ano:" }, "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": "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 para edição." }, "errorLoadingTokensMessage": { "message": "Erro ao carregar tokens: $message$", "placeholders": { "message": { "content": "$1" } } }, "aceEditorNotAvailableToSave": { "message": "Editor não disponível para guardar." }, "invalidJsonFormat": { "message": "Formato JSON inválido. Deve ser { \"tokens\": [...] }" }, "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 álbum: $message$", "placeholders": { "message": { "content": "$1" } } }, "noPhotoServerSelected": { "message": "Erro: Nenhum servidor de fotos foi selecionado." }, "loadingGenres": { "message": "A carregar géneros..." }, "errorLoadingGenres": { "message": "Erro ao carregar" }, "noContentFound": { "message": "Não foram encontrados resultados." }, "couldNotLoadContent": { "message": "Não foi possível carregar o conteúdo." }, "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 de o conhecer melhor para lhe dar recomendações!" }, "errorGeneratingStats": { "message": "Erro ao gerar estatísticas." }, "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": "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": "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": "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 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." }, "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: 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 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." }, "playbackError": { "message": "Erro de reprodução" }, "errorLabel": { "message": "Erro" }, "reloadingPage": { "message": "A recarregar a página..." }, "viewed": { "message": "Visto" }, "local": { "message": "Local" }, "topRatedSort": {"message": "Melhor Avaliados"}, "recentSort": {"message": "Recentes"}, "popularSort": {"message": "Populares"}, "moviesSectionTitle": {"message": "Filmes"}, "seriesSectionTitle": {"message": "Séries"}, "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"}, "synopsis": {"message": "Sinopse"}, "noSynopsis": {"message": "Não há sinopse disponível."}, "director": {"message": "Realizador:"}, "writer": {"message": "Argumentista:"}, "viewOnImdb": {"message": "Ver no IMDb"}, "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 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": "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": "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_yesterday": { "message": "Ontem" }, "relativeTime_daysAgo": { "message": "Há $count$ dias", "placeholders": { "count": { "content": "$1" } } }, "errorLoadingDetails": { "message": "Erro ao Carregar Detalhes" }, "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$ 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": "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": "Selecionar um servidor" }, "activityCheckBtn": { "message": "Atualizar" }, "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 obter a atividade do servidor." }, "activityCopied": { "message": "Identificador copiado para a área de transferência!" }, "activityCopyError": { "message": "Erro ao copiar o identificador." }, "noProvidersFound": { "message": "Não foram encontrados fornecedores." }, "availableOnPlex": { "message": "Disponível no Plex" }, "m3uGeneratorTitle": { "message": "Gerador de Listas M3U" }, "selectAServer": { "message": "Selecionar um servidor..." }, "downloadM3u": { "message": "Descarregar M3U" }, "m3uGenerator": { "message": "Gerador M3U" }, "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 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": "Escreva a sua mensagem..." }, "chatSend": { "message": "➤" }, "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 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" } } }, "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" } }