From c95d7f1808db40328a65dc2992180b48e71350fb Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 29 Sep 2026 15:43:58 +0200 Subject: [PATCH] Translated using Weblate (Portuguese (Brazil)) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (46 of 46 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (62 of 62 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (759 of 759 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (508 of 508 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (141 of 141 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (277 of 277 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1366 of 1366 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (119 of 119 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (87 of 87 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (145 of 145 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (68 of 68 strings) Update translation files Updated by "Cleanup translation files" add-on in Weblate. Update translation files Updated by "Cleanup translation files" add-on in Weblate. Co-authored-by: Hosted Weblate Co-authored-by: Ítalo Peixoto Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-cameras/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/config-global/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-classificationmodel/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-events/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-explore/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-exports/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-live/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-motionsearch/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-replay/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-settings/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/ Translate-URL: https://hosted.weblate.org/projects/frigate-nvr/views-system/pt_BR/ Translation: Frigate NVR/Config - Cameras Translation: Frigate NVR/Config - Global Translation: Frigate NVR/views-classificationmodel Translation: Frigate NVR/views-events Translation: Frigate NVR/views-explore Translation: Frigate NVR/views-exports Translation: Frigate NVR/views-live Translation: Frigate NVR/views-motionSearch Translation: Frigate NVR/views-replay Translation: Frigate NVR/views-settings Translation: Frigate NVR/views-system --- web/public/locales/pt-BR/config/cameras.json | 4 + web/public/locales/pt-BR/config/global.json | 673 ++++++++- .../pt-BR/views/classificationModel.json | 80 +- web/public/locales/pt-BR/views/events.json | 38 +- web/public/locales/pt-BR/views/explore.json | 64 +- web/public/locales/pt-BR/views/exports.json | 93 +- web/public/locales/pt-BR/views/live.json | 37 +- .../locales/pt-BR/views/motionSearch.json | 81 +- web/public/locales/pt-BR/views/replay.json | 43 +- web/public/locales/pt-BR/views/settings.json | 1252 ++++++++++++++++- web/public/locales/pt-BR/views/system.json | 191 ++- 11 files changed, 2483 insertions(+), 73 deletions(-) diff --git a/web/public/locales/pt-BR/config/cameras.json b/web/public/locales/pt-BR/config/cameras.json index 858dbf17f6..d2206afcca 100644 --- a/web/public/locales/pt-BR/config/cameras.json +++ b/web/public/locales/pt-BR/config/cameras.json @@ -664,6 +664,10 @@ "response_style": { "label": "Estilo de resposta", "description": "Estilo de escrita pré-definido para revisão de descrições geradas. A predefinição ajusta o tom e nível de detalhes do título, resumo e descrição das cenas; 'default' deixa o prompt interno sem alterações." + }, + "frame_mode": { + "label": "Modo de quadros", + "description": "Como os quadros são apresentados ao modelo. 'frames' envia o prompt seguido dos quadros, o que serve para modelos que acompanham bem uma sequência por conta própria. 'annotated_frames' rotula cada quadro e intercala notas derivadas do rastreamento de objetos, o que ajuda modelos que perdem o fio de atividades que se repetem ou se invertem." } } }, diff --git a/web/public/locales/pt-BR/config/global.json b/web/public/locales/pt-BR/config/global.json index 0b6c214f1a..6723afdc4f 100644 --- a/web/public/locales/pt-BR/config/global.json +++ b/web/public/locales/pt-BR/config/global.json @@ -56,6 +56,11 @@ "labelmap": { "label": "Personalização de etiquetas de áudio", "description": "Sobrepõe ou re-mapeia entradas para mesclar ao lablemap de áudio padrão." + }, + "description": "Configurações da detecção de eventos baseada em áudio para todas as câmeras; podem ser substituídas por câmera.", + "enabled": { + "label": "Habilitar detecção de áudio", + "description": "Habilita ou desabilita a detecção de eventos de áudio em todas as câmeras; pode ser substituído por câmera." } }, "auth": { @@ -88,6 +93,22 @@ "refresh_time": { "label": "Janela de atualização da sessão", "description": "Quando uma seção está a poucos segundos da expiração, atualizar para o tempo total." + }, + "trusted_proxies": { + "label": "Proxies confiáveis", + "description": "Lista de IPs de proxies confiáveis usados para determinar o IP do cliente na limitação de taxa." + }, + "hash_iterations": { + "label": "Iterações de hash", + "description": "Número de iterações PBKDF2-SHA256 a serem usadas ao gerar o hash das senhas dos usuários." + }, + "roles": { + "label": "Mapeamentos de funções", + "description": "Mapeia funções para listas de câmeras. Uma lista vazia concede acesso a todas as câmeras para a função." + }, + "admin_first_time_login": { + "label": "Sinalizador de primeiro acesso do administrador", + "description": "Quando verdadeiro, a interface pode exibir na página de login um link de ajuda informando aos usuários como entrar após a redefinição da senha do administrador. " } }, "audio_transcription": { @@ -100,11 +121,28 @@ "enabled": { "label": "Habilitar a transcrição de áudio", "description": "Ativar ou desativar a transcrição automática de áudio para todas as câmeras; pode ser configurado individualmente por câmera." + }, + "language": { + "label": "Idioma da transcrição", + "description": "Código de idioma usado para transcrição/tradução (por exemplo, 'en' para inglês) ou 'auto' para que o modelo o detecte. Consulte https://whisper-api.com/docs/languages/ para ver os códigos de idioma compatíveis." + }, + "device": { + "label": "Dispositivo de transcrição", + "description": "Chave do dispositivo (CPU/GPU) em que o modelo de transcrição será executado. Atualmente, apenas GPUs NVIDIA com CUDA são compatíveis com a transcrição." + }, + "model_size": { + "label": "Tamanho do modelo", + "description": "Tamanho do modelo a ser usado na transcrição offline de eventos de áudio." + }, + "model": { + "label": "Modelo de transcrição de áudio ou nome do provedor de IA generativa", + "description": "O backend de transcrição: 'whisper' para os modelos locais integrados do Frigate, ou o nome de um provedor de IA generativa com a função transcribe." } }, "detect": { "enabled": { - "label": "Ativar detecção de objetos" + "label": "Ativar detecção de objetos", + "description": "Habilita ou desabilita a detecção de objetos para todas as câmeras; pode ser substituído por câmera." }, "height": { "label": "Detectar altura", @@ -168,11 +206,45 @@ "face_recognition": { "label": "Reconhecimento facial", "enabled": { - "label": "Ativar reconhecimento facial" + "label": "Ativar reconhecimento facial", + "description": "Habilita ou desabilita o reconhecimento facial para todas as câmeras; pode ser substituído por câmera." }, "min_area": { "label": "Área mínima do rosto", "description": "Área mínima (em pixels) da caixa delimitadora de um rosto detectado necessária para tentar o reconhecimento." + }, + "description": "Configurações de detecção e reconhecimento facial para todas as câmeras; podem ser substituídas por câmera.", + "model_size": { + "label": "Tamanho do modelo", + "description": "Tamanho do modelo a ser usado nos embeddings faciais (small/large); o maior pode exigir GPU." + }, + "unknown_score": { + "description": "Limite de distância abaixo do qual um rosto é considerado uma possível correspondência (quanto maior, mais rigoroso).", + "label": "Limite de pontuação para desconhecido" + }, + "detection_threshold": { + "label": "Limite de detecção", + "description": "Confiança mínima de detecção necessária para considerar válida uma detecção de rosto." + }, + "recognition_threshold": { + "label": "Limite de reconhecimento", + "description": "Limite de distância entre embeddings faciais para considerar que dois rostos correspondem." + }, + "min_faces": { + "label": "Mínimo de rostos", + "description": "Número mínimo de reconhecimentos faciais necessários antes de aplicar um sub-rótulo reconhecido a uma pessoa." + }, + "save_attempts": { + "label": "Tentativas a salvar", + "description": "Número de tentativas de reconhecimento facial a manter para a interface de reconhecimentos recentes." + }, + "blur_confidence_filter": { + "description": "Ajusta as pontuações de confiança com base no desfoque da imagem para reduzir falsos positivos em rostos de baixa qualidade.", + "label": "Filtro de confiança por desfoque" + }, + "device": { + "label": "Dispositivo", + "description": "Esta é uma substituição, para escolher um dispositivo específico. Consulte https://onnxruntime.ai/docs/execution-providers/ para mais informações" } }, "ffmpeg": { @@ -243,7 +315,9 @@ "label": "Argumentos de entrada", "description": "Argumentos de entrada específicos para este fluxo." } - } + }, + "label": "FFmpeg", + "description": "Configurações do FFmpeg, incluindo caminho do binário, argumentos, opções de hwaccel e argumentos de saída por função." }, "birdseye": { "order": { @@ -259,6 +333,42 @@ "modes": { "label": "Tipos de Atividade", "description": "Tipos de atividade que incluem câmeras em modo panorâmico." + }, + "restream": { + "label": "Restream RTSP", + "description": "Retransmite a saída do Birdseye como um feed RTSP; habilitar isto manterá o Birdseye em execução contínua." + }, + "width": { + "description": "Largura de saída (em pixels) do quadro composto do Birdseye.", + "label": "Largura" + }, + "height": { + "label": "Altura", + "description": "Altura de saída (em pixels) do quadro composto do Birdseye." + }, + "quality": { + "label": "Qualidade de codificação", + "description": "Qualidade de codificação do feed mpeg1 do Birdseye (1 é a maior qualidade, 31 a menor)." + }, + "inactivity_threshold": { + "label": "Limite de inatividade", + "description": "Segundos de inatividade após os quais uma câmera deixará de ser exibida no Birdseye." + }, + "layout": { + "label": "Layout", + "description": "Opções de layout para a composição do Birdseye.", + "scaling_factor": { + "label": "Fator de escala", + "description": "Fator de escala usado pelo cálculo de layout (intervalo de 1,0 a 5,0)." + }, + "max_cameras": { + "description": "Número máximo de câmeras exibidas ao mesmo tempo no Birdseye; mostra as câmeras mais recentes.", + "label": "Máximo de câmeras" + } + }, + "idle_heartbeat_fps": { + "label": "FPS do heartbeat em inatividade", + "description": "Quadros por segundo com os quais o último quadro composto do Birdseye é reenviado quando ocioso; defina como 0 para desabilitar." } }, "live": { @@ -274,11 +384,13 @@ "quality": { "description": "Qualidade de codificação para o fluxo jsmpeg (1 para a mais alta, 31 para a mais baixa).", "label": "Qualidade da transmissão" - } + }, + "description": "Configurações para controlar a resolução e a qualidade do stream ao vivo jsmpeg. Isto não afeta as câmeras com restream que usam o go2rtc para a visualização ao vivo." }, "motion": { "enabled": { - "label": "Ativar detecção de movimento" + "label": "Ativar detecção de movimento", + "description": "Habilita ou desabilita a detecção de movimento para todas as câmeras; pode ser substituído por câmera." }, "threshold": { "label": "Limiar de movimento", @@ -327,13 +439,15 @@ "raw_mask": { "label": "Máscara Bruta" }, - "label": "Detecção de movimento" + "label": "Detecção de movimento", + "description": "Configurações padrão de detecção de movimento aplicadas às câmeras, a menos que sejam substituídas por câmera." }, "objects": { "label": "Objetos", "description": "Configurações padrão de rastreamento de objetos, incluindo quais rótulos rastrear e filtros por objeto.", "track": { - "label": "Objetos a rastrear" + "label": "Objetos a rastrear", + "description": "Lista de rótulos de objetos a serem rastreados em todas as câmeras; pode ser substituída por câmera." }, "filters": { "label": "Filtros de objeto", @@ -424,11 +538,47 @@ "label": "Estado original da GenAI", "description": "Indica se a GenAI foi habilitada na configuração estática original." } + }, + "filters_attribute": { + "label": "Filtros de atributos", + "description": "Filtros aplicados aos atributos detectados para reduzir falsos positivos (área, proporção, confiança).", + "min_area": { + "label": "Área mínima do atributo", + "description": "Área mínima da caixa delimitadora (pixels ou porcentagem) exigida para este atributo. Pode ser em pixels (inteiro) ou porcentagem (decimal entre 0,000001 e 0,99)." + }, + "max_area": { + "label": "Área máxima do atributo", + "description": "Área máxima da caixa delimitadora (pixels ou porcentagem) permitida para este atributo. Pode ser em pixels (inteiro) ou porcentagem (decimal entre 0,000001 e 0,99)." + }, + "min_ratio": { + "description": "Proporção mínima entre largura e altura exigida para que a caixa delimitadora seja considerada.", + "label": "Proporção mínima" + }, + "max_ratio": { + "label": "Proporção máxima", + "description": "Proporção máxima entre largura e altura permitida para que a caixa delimitadora seja considerada." + }, + "threshold": { + "label": "Limite de confiança", + "description": "Limite de confiança média de detecção necessário para que o atributo seja considerado um verdadeiro positivo." + }, + "min_score": { + "label": "Confiança mínima", + "description": "Confiança mínima de detecção em um único quadro necessária para associar este atributo ao seu objeto pai." + }, + "mask": { + "label": "Máscara do filtro", + "description": "Coordenadas do polígono que definem onde este filtro se aplica dentro do quadro." + }, + "raw_mask": { + "label": "Máscara bruta" + } } }, "lpr": { "enabled": { - "label": "Ativar LPR" + "label": "Ativar LPR", + "description": "Habilita ou desabilita o reconhecimento de placas de veículos para todas as câmeras; pode ser substituído por câmera." }, "expire_time": { "label": "Segundos para expirar", @@ -443,12 +593,59 @@ "description": "Nível de aprimoramento (0-10) a ser aplicado aos recortes da placa antes do OCR; valores mais altos nem sempre melhoram os resultados, e níveis acima de 5 podem funcionar apenas com placas noturnas, devendo ser utilizados com cautela." }, "label": "Reconhecimento de placa veicular", - "description": "Configurações de reconhecimento de placa veicular, incluindo limites de detecção, formatação e placas conhecidas." + "description": "Configurações de reconhecimento de placa veicular, incluindo limites de detecção, formatação e placas conhecidas.", + "model_size": { + "label": "Tamanho do modelo", + "description": "Tamanho do modelo usado para detecção/reconhecimento de texto. A maioria dos usuários deve usar 'small'." + }, + "detection_threshold": { + "description": "Limite de confiança de detecção para iniciar o OCR em uma suspeita de placa.", + "label": "Limite de detecção" + }, + "recognition_threshold": { + "label": "Limite de reconhecimento", + "description": "Limite de confiança necessário para que o texto da placa reconhecida seja anexado como sub-rótulo." + }, + "min_plate_length": { + "label": "Tamanho mínimo da placa", + "description": "Número mínimo de caracteres que uma placa reconhecida deve conter para ser considerada válida." + }, + "format": { + "label": "Regex do formato da placa", + "description": "Regex opcional para validar as placas reconhecidas em relação a um formato esperado." + }, + "match_distance": { + "label": "Distância de correspondência", + "description": "Número de caracteres diferentes permitidos ao comparar as placas detectadas com as placas conhecidas." + }, + "known_plates": { + "description": "Lista de placas ou regexes a serem rastreadas ou alertadas de forma especial.", + "label": "Placas conhecidas" + }, + "debug_save_plates": { + "label": "Salvar placas para depuração", + "description": "Salva as imagens recortadas das placas para depurar o desempenho do LPR." + }, + "device": { + "label": "Dispositivo", + "description": "Esta é uma substituição, para escolher um dispositivo específico. Consulte https://onnxruntime.ai/docs/execution-providers/ para mais informações" + }, + "replace_rules": { + "label": "Regras de substituição", + "description": "Regras de substituição por regex usadas para normalizar as placas detectadas antes da comparação.", + "pattern": { + "label": "Padrão regex" + }, + "replacement": { + "label": "Texto de substituição" + } + } }, "record": { "label": "Gravação", "enabled": { - "label": "Ativar gravação" + "label": "Ativar gravação", + "description": "Habilita ou desabilita a gravação para todas as câmeras; pode ser substituído por câmera." }, "expire_interval": { "label": "Intervalo de limpeza de gravação", @@ -592,7 +789,8 @@ "description": "Modo de retenção: all (salvar todos os segmentos), motion (salvar segmentos com movimento), ou active_objects (salvar segmentos com objetos ativos)." } } - } + }, + "description": "Configurações de gravação e retenção aplicadas às câmeras, a menos que sejam substituídas por câmera." }, "review": { "label": "Rever", @@ -600,7 +798,8 @@ "label": "Configuração de alertas", "description": "Configurações sobre quais objetos monitorados geram alertas e como os alertas são retidos.", "enabled": { - "label": "Ativar alertas" + "label": "Ativar alertas", + "description": "Habilita ou desabilita a geração de alertas para todas as câmeras; pode ser substituído por câmera." }, "labels": { "label": "Etiquetas de alerta", @@ -623,7 +822,8 @@ "label": "Configuração de detecções", "description": "Configurações que definem para quais objetos rastreados são geradas detecções (sem gerar alerta) e como essas detecções são retidas.", "enabled": { - "label": "Ativar detecções" + "label": "Ativar detecções", + "description": "Habilita ou desabilita os eventos de detecção para todas as câmeras; pode ser substituído por câmera." }, "labels": { "label": "Rótulos de detecção", @@ -684,8 +884,13 @@ "response_style": { "label": "Estilo de resposta", "description": "Estilo de escrita pré-definido para revisão de descrições geradas. A predefinição ajusta o tom e nível de detalhes do título, resumo e descrição das cenas; 'default' deixa o prompt interno sem alterações." + }, + "frame_mode": { + "label": "Modo de quadros", + "description": "Como os quadros são apresentados ao modelo. 'frames' envia o prompt seguido dos quadros, o que serve para modelos que acompanham bem uma sequência por conta própria. 'annotated_frames' rotula cada quadro e intercala notas derivadas do rastreamento de objetos, o que ajuda modelos que perdem o fio de atividades que se repetem ou se invertem." } - } + }, + "description": "Configurações que controlam alertas, detecções e resumos de revisão por IA generativa usados pela interface e pelo armazenamento." }, "semantic_search": { "label": "Busca semântica", @@ -716,12 +921,34 @@ "label": "Acionar ações", "description": "Lista de ações a serem executadas quando o gatilho for acionado (notificação, sub-rótulo, atributo)." } + }, + "description": "Configurações da Busca semântica, que cria e consulta embeddings de objetos para encontrar itens semelhantes.", + "enabled": { + "label": "Habilitar busca semântica", + "description": "Habilita ou desabilita o recurso de busca semântica." + }, + "reindex": { + "description": "Aciona uma reindexação completa dos objetos rastreados históricos no banco de dados de embeddings.", + "label": "Reindexar na inicialização" + }, + "model": { + "description": "O modelo de embeddings a ser usado na busca semântica (por exemplo, 'jinav1') ou o nome de um provedor de IA generativa com a função embeddings.", + "label": "Modelo de busca semântica ou nome do provedor de IA generativa" + }, + "model_size": { + "label": "Tamanho do modelo", + "description": "Selecione o tamanho do modelo; 'small' é executado na CPU e 'large' normalmente exige GPU." + }, + "device": { + "label": "Dispositivo", + "description": "Esta é uma substituição, para escolher um dispositivo específico. Consulte https://onnxruntime.ai/docs/execution-providers/ para mais informações" } }, "snapshots": { "label": "Instantâneas", "enabled": { - "label": "Habilitar instantâneas" + "label": "Habilitar instantâneas", + "description": "Habilita ou desabilita o salvamento de snapshots para todas as câmeras; pode ser substituído por câmera." }, "timestamp": { "label": "Sobreposição de marca de tempo", @@ -758,11 +985,13 @@ "quality": { "label": "Qualidade da captura", "description": "Qualidade de codificação das capturas salvas (0-100)." - } + }, + "description": "Configurações dos snapshots de objetos rastreados gerados pela API para todas as câmeras; podem ser substituídas por câmera." }, "notifications": { "enabled": { - "label": "Ativar notificações" + "label": "Ativar notificações", + "description": "Habilita ou desabilita as notificações de todas as câmeras; pode ser substituído por câmera." }, "email": { "label": "Notificação por E-mail", @@ -776,7 +1005,8 @@ "cooldown": { "label": "Intervalo de espera", "description": "Intervalo (em segundos) entre notificações para evitar o envio excessivo de mensagens aos destinatários." - } + }, + "description": "Configurações para habilitar e controlar as notificações de todas as câmeras; podem ser substituídas por câmera." }, "onvif": { "label": "ONVIF", @@ -887,18 +1117,415 @@ "effect": { "label": "Efeito da marcação de tempo", "description": "Efeito visual para o texto do marcação de tempo (nenhum, sólido, sombra)." - } + }, + "description": "Opções de estilo dos carimbos de data/hora exibidos no feed, aplicadas à visualização de depuração e aos snapshots." }, "mqtt": { - "label": "MQTT" + "label": "MQTT", + "description": "Configurações para conectar e publicar telemetria, snapshots e detalhes de eventos em um broker MQTT.", + "enabled": { + "label": "Habilitar MQTT", + "description": "Habilita ou desabilita a integração MQTT para estados, eventos e snapshots." + }, + "host": { + "label": "Host MQTT", + "description": "Nome de host ou endereço IP do broker MQTT." + }, + "port": { + "label": "Porta MQTT", + "description": "Porta do broker MQTT (geralmente 1883 para MQTT sem criptografia)." + }, + "topic_prefix": { + "description": "Prefixo de tópico MQTT para todos os tópicos do Frigate; deve ser único se você executar várias instâncias.", + "label": "Prefixo do tópico" + }, + "client_id": { + "label": "ID do cliente", + "description": "Identificador do cliente usado ao se conectar ao broker MQTT; deve ser único para cada instância." + }, + "stats_interval": { + "label": "Intervalo de estatísticas", + "description": "Intervalo, em segundos, para publicar estatísticas do sistema e das câmeras no MQTT." + }, + "user": { + "label": "Usuário MQTT", + "description": "Usuário MQTT opcional; pode ser fornecido por variáveis de ambiente ou segredos." + }, + "password": { + "label": "Senha MQTT", + "description": "Senha MQTT opcional; pode ser fornecida por variáveis de ambiente ou segredos." + }, + "tls_ca_certs": { + "description": "Caminho para o certificado da CA para conexões TLS com o broker (para certificados autoassinados).", + "label": "Certificados CA do TLS" + }, + "tls_client_cert": { + "label": "Certificado do cliente", + "description": "Caminho do certificado do cliente para autenticação mútua TLS; não defina usuário/senha ao usar certificados de cliente." + }, + "tls_client_key": { + "label": "Chave do cliente", + "description": "Caminho da chave privada do certificado do cliente." + }, + "tls_insecure": { + "label": "TLS inseguro", + "description": "Permite conexões TLS inseguras ignorando a verificação do nome do host (não recomendado)." + }, + "qos": { + "label": "QoS do MQTT", + "description": "Nível de Qualidade de Serviço para publicações/assinaturas MQTT (0, 1 ou 2)." + } }, "profiles": { - "label": "Perfis" + "label": "Perfis", + "description": "Definições de perfis nomeados com nomes amigáveis. Os perfis das câmeras devem referenciar os nomes definidos aqui.", + "friendly_name": { + "label": "Nome amigável", + "description": "Nome de exibição deste perfil mostrado na interface." + } }, "camera_ui": { - "label": "Interface da Câmera" + "label": "Interface da Câmera", + "description": "Ordem de exibição e visibilidade desta câmera na interface. A ordem afeta o painel padrão. Para um controle mais detalhado, use grupos de câmeras.", + "order": { + "label": "Ordem na interface", + "description": "Ordem numérica usada para ordenar a câmera na interface (painel padrão e listas); números maiores aparecem depois." + }, + "dashboard": { + "label": "Mostrar no painel ao vivo", + "description": "Alterna se esta câmera fica visível no painel ao vivo padrão de Todas as câmeras. A câmera continua disponível em todos os outros lugares da interface, incluindo grupos de câmeras e configurações." + }, + "review": { + "label": "Mostrar na revisão", + "description": "Alterna se esta câmera fica visível na revisão (a página de revisão e seu filtro de câmeras, a revisão de movimento e a visualização de histórico)." + } }, "ui": { - "label": "UI" + "label": "UI", + "description": "Preferências da interface do usuário, como fuso horário, formatação de hora/data e unidades.", + "timezone": { + "description": "Fuso horário opcional a ser exibido em toda a interface (usa o horário local do navegador se não for definido).", + "label": "Fuso horário" + }, + "time_format": { + "label": "Formato de hora", + "description": "Formato de hora a ser usado na interface (browser, 12hour ou 24hour)." + }, + "unit_system": { + "label": "Sistema de unidades", + "description": "Sistema de unidades para exibição (metric ou imperial), usado na interface e no MQTT." + } + }, + "database": { + "description": "Configurações do banco de dados SQLite usado pelo Frigate para armazenar os metadados de objetos rastreados e de gravações.", + "path": { + "label": "Caminho do banco de dados", + "description": "Caminho no sistema de arquivos onde o arquivo do banco de dados SQLite do Frigate será armazenado." + }, + "label": "Banco de dados" + }, + "go2rtc": { + "label": "go2rtc", + "description": "Configurações do serviço de restreaming go2rtc integrado, usado para retransmissão e tradução de streams ao vivo." + }, + "networking": { + "label": "Rede", + "description": "Configurações relacionadas à rede, como a habilitação de IPv6 nos endpoints do Frigate.", + "ipv6": { + "label": "Configuração de IPv6", + "description": "Configurações específicas de IPv6 para os serviços de rede do Frigate.", + "enabled": { + "description": "Habilita o suporte a IPv6 nos serviços do Frigate (API e interface), quando aplicável.", + "label": "Habilitar IPv6" + } + }, + "listen": { + "description": "Configuração das portas de escuta internas e externas. Destina-se a usuários avançados. Na maioria dos casos, recomenda-se alterar a seção de portas do seu arquivo Docker Compose.", + "internal": { + "label": "Porta interna", + "description": "Porta de escuta interna do Frigate (padrão 5000)." + }, + "label": "Configuração das portas de escuta", + "external": { + "label": "Porta externa", + "description": "Porta de escuta externa do Frigate (padrão 8971)." + } + } + }, + "proxy": { + "label": "Proxy", + "header_map": { + "label": "Mapeamento de cabeçalhos", + "description": "Mapeia os cabeçalhos recebidos do proxy para os campos de usuário e função do Frigate na autenticação via proxy.", + "user": { + "description": "Cabeçalho que contém o nome de usuário autenticado fornecido pelo proxy de origem.", + "label": "Cabeçalho de usuário" + }, + "role": { + "label": "Cabeçalho de função", + "description": "Cabeçalho que contém a função ou os grupos do usuário autenticado fornecidos pelo proxy de origem." + }, + "role_map": { + "label": "Mapeamento de funções", + "description": "Mapeia os valores de grupo do proxy de origem para funções do Frigate (por exemplo, mapear grupos de administradores para a função admin)." + } + }, + "description": "Configurações para integrar o Frigate atrás de um proxy reverso que repassa cabeçalhos de usuário autenticado.", + "logout_url": { + "label": "URL de logout", + "description": "URL para a qual os usuários são redirecionados ao sair pelo proxy." + }, + "auth_secret": { + "label": "Segredo do proxy", + "description": "Segredo opcional verificado no cabeçalho X-Proxy-Secret para validar proxies confiáveis." + }, + "default_role": { + "description": "Função padrão atribuída aos usuários autenticados por proxy quando nenhum mapeamento de função se aplica. Defina como 'none' para negar acesso a usuários não mapeados.", + "label": "Função padrão" + }, + "separator": { + "label": "Caractere separador", + "description": "Caractere usado para dividir vários valores fornecidos nos cabeçalhos do proxy." + } + }, + "telemetry": { + "label": "Telemetria", + "description": "Opções de telemetria e estatísticas do sistema, incluindo o monitoramento de GPU e de largura de banda de rede.", + "network_interfaces": { + "label": "Interfaces de rede", + "description": "Lista de prefixos de nomes de interfaces de rede a serem monitoradas para as estatísticas de largura de banda." + }, + "stats": { + "label": "Estatísticas do sistema", + "description": "Opções para habilitar/desabilitar a coleta de várias estatísticas do sistema e da GPU.", + "amd_gpu_stats": { + "label": "Estatísticas da GPU AMD", + "description": "Habilita a coleta de estatísticas da GPU AMD, se houver uma GPU AMD presente." + }, + "intel_gpu_stats": { + "label": "Estatísticas da GPU Intel", + "description": "Habilita a coleta de estatísticas da GPU Intel, se houver uma GPU Intel presente." + }, + "network_bandwidth": { + "label": "Largura de banda de rede", + "description": "Habilita o monitoramento da largura de banda de rede por processo para os processos ffmpeg das câmeras e para os detectores (requer capabilities)." + }, + "intel_gpu_device": { + "description": "Endereço do barramento PCI ou caminho do dispositivo DRM (por ex., /dev/dri/card1) usado para fixar as estatísticas da GPU Intel em um dispositivo específico quando houver vários.", + "label": "Dispositivo da GPU Intel" + } + }, + "version_check": { + "description": "Habilita uma verificação externa para detectar se há uma versão mais recente do Frigate disponível.", + "label": "Verificação de versão" + } + }, + "tls": { + "label": "TLS", + "description": "Configurações de TLS para os endpoints web do Frigate (porta 8971).", + "enabled": { + "label": "Habilitar TLS", + "description": "Habilita o TLS para a interface web e a API do Frigate na porta TLS configurada." + } + }, + "genai": { + "label": "Configuração de IA generativa", + "description": "Configurações dos provedores de IA generativa integrados, usados para gerar descrições de objetos e resumos de revisão.", + "api_key": { + "label": "Chave de API", + "description": "Chave de API exigida por alguns provedores (também pode ser definida por variáveis de ambiente)." + }, + "base_url": { + "label": "URL base", + "description": "URL base para provedores auto-hospedados ou compatíveis (por exemplo, uma instância do Ollama)." + }, + "model": { + "label": "Modelo", + "description": "O modelo do provedor a ser usado para gerar descrições ou resumos." + }, + "provider": { + "label": "Provedor", + "description": "O provedor de IA generativa a ser usado (por exemplo: ollama, gemini, openai)." + }, + "roles": { + "label": "Funções", + "description": "Funções da IA generativa (chat, descriptions, embeddings, transcribe); um provedor por função. Apenas chat, descriptions e embeddings são concedidas por padrão; transcribe deve ser listada explicitamente." + }, + "provider_options": { + "label": "Opções do provedor", + "description": "Opções adicionais específicas do provedor a serem passadas ao cliente de IA generativa." + }, + "runtime_options": { + "label": "Opções de execução", + "description": "Opções de execução passadas ao provedor a cada chamada de inferência." + } + }, + "classification": { + "label": "Classificação de objetos", + "description": "Configurações dos modelos de classificação usados para refinar os rótulos de objetos ou classificar estados.", + "bird": { + "label": "Configuração da classificação de pássaros", + "description": "Configurações específicas dos modelos de classificação de pássaros.", + "enabled": { + "label": "Classificação de pássaros", + "description": "Habilita ou desabilita a classificação de pássaros." + }, + "threshold": { + "description": "Pontuação mínima de classificação necessária para aceitar uma classificação de pássaro.", + "label": "Pontuação mínima" + } + }, + "custom": { + "label": "Modelos de classificação personalizados", + "enabled": { + "label": "Habilitar modelo", + "description": "Habilita ou desabilita o modelo de classificação personalizado." + }, + "description": "Configuração dos modelos de classificação personalizados usados para detecção de objetos ou de estados.", + "name": { + "label": "Nome do modelo", + "description": "Identificador do modelo de classificação personalizado a ser usado." + }, + "threshold": { + "label": "Limite de pontuação", + "description": "Limite de pontuação usado para alterar o estado da classificação." + }, + "save_attempts": { + "label": "Tentativas a salvar", + "description": "Quantas tentativas de classificação salvar para a interface de classificações recentes." + }, + "object_config": { + "objects": { + "label": "Classificar objetos", + "description": "Lista de tipos de objeto nos quais executar a classificação de objetos." + }, + "classification_type": { + "description": "Tipo de classificação aplicado: 'sub_label' (adiciona um sub_label) ou outros tipos compatíveis.", + "label": "Tipo de classificação" + } + }, + "state_config": { + "cameras": { + "label": "Câmeras de classificação", + "description": "Recorte e configurações por câmera para executar a classificação de estados.", + "crop": { + "label": "Recorte da classificação", + "description": "Coordenadas do recorte a serem usadas para executar a classificação nesta câmera." + } + }, + "motion": { + "label": "Executar ao detectar movimento", + "description": "Se verdadeiro, executa a classificação quando movimento for detectado dentro do recorte especificado." + }, + "interval": { + "label": "Intervalo de classificação", + "description": "Intervalo (em segundos) entre as execuções periódicas de classificação de estados." + } + } + } + }, + "camera_groups": { + "description": "Configuração dos grupos de câmeras nomeados usados para organizar as câmeras na interface.", + "cameras": { + "label": "Lista de câmeras", + "description": "Lista dos nomes das câmeras incluídas neste grupo." + }, + "label": "Grupos de câmeras", + "icon": { + "label": "Ícone do grupo", + "description": "Ícone usado para representar o grupo de câmeras na interface." + }, + "order": { + "label": "Ordem de classificação", + "description": "Ordem numérica usada para ordenar os grupos de câmeras na interface; números maiores aparecem depois." + } + }, + "camera_mqtt": { + "label": "MQTT", + "description": "Configurações de publicação de imagens via MQTT.", + "enabled": { + "description": "Habilita a publicação de snapshots dos objetos nos tópicos MQTT para esta câmera.", + "label": "Enviar imagem" + }, + "timestamp": { + "label": "Adicionar carimbo de data/hora", + "description": "Sobrepõe um carimbo de data/hora nas imagens publicadas no MQTT." + }, + "bounding_box": { + "label": "Adicionar caixa delimitadora", + "description": "Desenha caixas delimitadoras nas imagens publicadas via MQTT." + }, + "crop": { + "label": "Recortar imagem", + "description": "Recorta as imagens publicadas no MQTT para a caixa delimitadora do objeto detectado." + }, + "height": { + "label": "Altura da imagem", + "description": "Altura (em pixels) para redimensionar as imagens publicadas via MQTT." + }, + "required_zones": { + "description": "Zonas em que um objeto deve entrar para que uma imagem seja publicada no MQTT.", + "label": "Zonas obrigatórias" + }, + "quality": { + "label": "Qualidade JPEG", + "description": "Qualidade JPEG das imagens publicadas no MQTT (0-100)." + } + }, + "active_profile": { + "label": "Perfil ativo", + "description": "Nome do perfil atualmente ativo. Apenas em tempo de execução, não é gravado no YAML." + }, + "models": { + "label": "Modelos de detecção", + "scene": { + "label": "Cena do modelo", + "description": "O ambiente da câmera para o qual este modelo é usado. As câmeras selecionam um modelo definindo detect.scene com um valor correspondente, e 'all' é usado por qualquer câmera que não defina um." + }, + "description": "Modelos de detecção de objetos e o hardware em que cada um é executado. As câmeras escolhem um modelo fazendo a correspondência entre o detect.scene delas e o scene do modelo.", + "devices": { + "label": "Hardware de detecção", + "description": "Hardware em que este modelo é executado, no formato '' ou ':' (por exemplo, 'edgetpu:pci:0' ou 'openvino:GPU'). Listar o mesmo dispositivo mais de uma vez executa processos de inferência adicionais nele." + }, + "path": { + "label": "Caminho do modelo personalizado do detector de objetos", + "description": "Caminho para um arquivo de modelo de detecção personalizado (ou plus:// para modelos do Frigate+)." + }, + "labelmap_path": { + "description": "Caminho para um arquivo de labelmap que associa classes numéricas a rótulos de texto para o detector.", + "label": "Mapa de rótulos do detector de objetos personalizado" + }, + "width": { + "label": "Largura de entrada do modelo de detecção de objetos", + "description": "Largura do tensor de entrada do modelo, em pixels." + }, + "height": { + "label": "Altura de entrada do modelo de detecção de objetos", + "description": "Altura do tensor de entrada do modelo, em pixels." + }, + "labelmap": { + "label": "Personalização do labelmap", + "description": "Substituições ou remapeamentos de entradas a serem mesclados ao labelmap padrão." + }, + "attributes_map": { + "label": "Mapa de rótulos de objetos para seus rótulos de atributos", + "description": "Mapeamento de rótulos de objetos para rótulos de atributos usado para anexar metadados (por exemplo, 'car' -> ['license_plate'])." + }, + "input_tensor": { + "label": "Formato do tensor de entrada do modelo", + "description": "Formato de tensor esperado pelo modelo: 'nhwc' ou 'nchw'." + }, + "input_pixel_format": { + "label": "Formato de cor dos pixels de entrada do modelo", + "description": "Espaço de cor dos pixels esperado pelo modelo: 'rgb', 'bgr' ou 'yuv'." + }, + "input_dtype": { + "label": "Tipo de dado de entrada do modelo", + "description": "Tipo de dado do tensor de entrada do modelo (por exemplo, 'float32')." + }, + "model_type": { + "label": "Tipo de modelo de detecção de objetos", + "description": "Tipo de arquitetura do modelo detector (ssd, yolox, yolonas, yolo-generic, rfdetr, dfine), usado por alguns detectores para otimização." + } } } diff --git a/web/public/locales/pt-BR/views/classificationModel.json b/web/public/locales/pt-BR/views/classificationModel.json index fd3caf4f19..9943029ec7 100644 --- a/web/public/locales/pt-BR/views/classificationModel.json +++ b/web/public/locales/pt-BR/views/classificationModel.json @@ -134,7 +134,85 @@ "wizard": { "title": "Criar nova classificação", "steps": { - "nameAndDefine": "Nomear e definir" + "nameAndDefine": "Nomear e definir", + "stateArea": "Área de estado", + "chooseExamples": "Escolher exemplos" + }, + "step1": { + "description": "Modelos de estado monitoram áreas fixas da câmera em busca de mudanças (por ex., porta aberta/fechada). Modelos de objeto adicionam classificações aos objetos detectados (por ex., animais conhecidos, entregadores etc.).", + "name": "Nome", + "namePlaceholder": "Digite o nome do modelo...", + "type": "Tipo", + "typeState": "Estado", + "typeObject": "Objeto", + "objectLabel": "Rótulo do objeto", + "objectLabelPlaceholder": "Selecione o tipo de objeto...", + "classificationType": "Tipo de classificação", + "classificationTypeTip": "Saiba mais sobre os tipos de classificação", + "classificationTypeDesc": "Sub-rótulos adicionam texto extra ao rótulo do objeto (por ex., 'Pessoa: UPS'). Atributos são metadados pesquisáveis armazenados separadamente nos metadados do objeto.", + "classificationSubLabel": "Sub-rótulo", + "classificationAttribute": "Atributo", + "classes": "Classes", + "classesTip": "Saiba mais sobre as classes", + "classesStateDesc": "Defina os diferentes estados em que a área da sua câmera pode estar. Por exemplo: 'aberto' e 'fechado' para um portão de garagem.", + "classesObjectDesc": "Defina as diferentes categorias em que os objetos detectados serão classificados. Por exemplo: 'entregador', 'morador', 'estranho' para a classificação de pessoas.", + "classPlaceholder": "Digite o nome da classe...", + "errors": { + "nameRequired": "O nome do modelo é obrigatório", + "nameLength": "O nome do modelo deve ter no máximo 64 caracteres", + "nameOnlyNumbers": "O nome do modelo não pode conter apenas números", + "classRequired": "É necessária pelo menos 1 classe", + "classesUnique": "Os nomes das classes devem ser únicos", + "stateRequiresTwoClasses": "Modelos de estado exigem pelo menos 2 classes", + "objectLabelRequired": "Selecione um rótulo de objeto", + "objectTypeRequired": "Selecione um tipo de classificação", + "noneNotAllowed": "A classe 'none' não é permitida" + }, + "states": "Estados" + }, + "step2": { + "description": "Selecione as câmeras e defina a área a ser monitorada em cada uma. O modelo classificará o estado dessas áreas.", + "cameras": "Câmeras", + "selectCamera": "Selecionar câmera", + "noCameras": "Clique em + para adicionar câmeras", + "selectCameraPrompt": "Selecione uma câmera da lista para definir sua área de monitoramento" + }, + "step3": { + "selectImagesPrompt": "Selecione todas as imagens com: {{className}}", + "selectImagesDescription": "Clique nas imagens para selecioná-las. Clique em Continuar quando terminar esta classe.", + "generating": { + "title": "Gerando imagens de amostra", + "description": "O Frigate está extraindo imagens representativas das suas gravações. Isso pode levar um momento..." + }, + "training": { + "title": "Treinando modelo", + "description": "Seu modelo está sendo treinado em segundo plano. Feche esta janela e o modelo começará a funcionar assim que o treinamento for concluído." + }, + "retryGenerate": "Tentar gerar novamente", + "noImages": "Nenhuma imagem de amostra gerada", + "classifying": "Classificando e treinando...", + "trainingStarted": "Treinamento iniciado com sucesso", + "errors": { + "noCameras": "Nenhuma câmera configurada", + "noObjectLabel": "Nenhum rótulo de objeto selecionado", + "generateFailed": "Falha ao gerar exemplos: {{error}}", + "generationFailed": "A geração falhou. Tente novamente.", + "classifyFailed": "Falha ao classificar as imagens: {{error}}" + }, + "generateSuccess": "Imagens de amostra geradas com sucesso", + "allImagesRequired_one": "Classifique todas as imagens. Falta {{count}} imagem.", + "allImagesRequired_many": "Classifique todas as imagens. Faltam {{count}} de imagens.", + "allImagesRequired_other": "Classifique todas as imagens. Faltam {{count}} imagens.", + "modelCreated": "Modelo criado com sucesso. Use a visualização de Classificações recentes para adicionar imagens dos estados que faltam e, em seguida, treine o modelo.", + "missingStatesWarning": { + "description": "Nem todas as classes têm exemplos. Tente gerar novos exemplos para encontrar a classe ausente, ou continue e use a visualização de Classificações recentes para adicionar imagens depois.", + "title": "Exemplos de classes ausentes" + }, + "refreshExamples": "Gerar novos exemplos", + "refreshConfirm": { + "title": "Gerar novos exemplos?", + "description": "Isso gerará um novo conjunto de imagens e limpará todas as seleções, incluindo as classes anteriores. Você precisará selecionar novamente os exemplos de todas as classes." + } } }, "disabled": "Desativado" diff --git a/web/public/locales/pt-BR/views/events.json b/web/public/locales/pt-BR/views/events.json index ff2d44b523..089bbc760b 100644 --- a/web/public/locales/pt-BR/views/events.json +++ b/web/public/locales/pt-BR/views/events.json @@ -25,7 +25,9 @@ "noFoundForTimePeriod": "Nenhum evento encontrado neste período." }, "recordings": { - "documentTitle": "Gravações - Frigate" + "documentTitle": "Gravações - Frigate", + "invalidSharedLink": "Não foi possível abrir o link da gravação com carimbo de data/hora devido a um erro de análise.", + "invalidSharedCamera": "Não foi possível abrir o link da gravação com carimbo de data/hora devido a uma câmera desconhecida ou não autorizada." }, "calendarFilter": { "last24Hours": "Últimas 24 horas" @@ -35,10 +37,10 @@ "button": "Novos Itens para Revisar", "label": "Ver novos itens para revisão" }, - "selected_one": "{{count}} selecionado(s)", + "selected_one": "{{count}} selecionados", "documentTitle": "Revisar - Frigate", "markAsReviewed": "Marcar como Revisado", - "selected_other": "{{count}} selecionado(s)", + "selected_other": "{{count}} selecionados", "camera": "Câmera", "detected": "detectado", "detail": { @@ -62,5 +64,33 @@ "zoomOut": "Diminuir o zoom", "select_all": "Todos", "normalActivity": "Normal", - "needsReview": "Precisa de revisão" + "needsReview": "Precisa de revisão", + "securityConcern": "Questão de segurança", + "motionSearch": { + "menuItem": "Busca de movimento", + "openMenu": "Opções da câmera" + }, + "motionPreviews": { + "menuItem": "Ver prévias de movimento", + "title": "Prévias de movimento: {{camera}}", + "mobileSettingsTitle": "Configurações da prévia de movimento", + "mobileSettingsDesc": "Ajuste a velocidade de reprodução, o escurecimento e o recorte, e escolha uma data para revisar clipes apenas com movimento.", + "dimAria": "Ajustar a intensidade do escurecimento", + "dim": "Escurecer", + "speed": "Velocidade", + "dimDesc": "Aumente o escurecimento para aumentar a visibilidade da área de movimento.", + "speedAria": "Selecione a velocidade de reprodução da prévia", + "speedDesc": "Escolha a rapidez com que os clipes de prévia são reproduzidos.", + "back": "Voltar", + "empty": "Nenhuma prévia disponível", + "noPreview": "Prévia indisponível", + "seekAria": "Ir para {{time}} no player de {{camera}}", + "filterDesc": "Selecione áreas para mostrar apenas os clipes com movimento nessas regiões.", + "filterClear": "Limpar", + "filter": "Filtro", + "crop": "Recortar para o filtro", + "cropAria": "Alterna o recorte das prévias para as áreas filtradas", + "cropDesc": "Amplia as prévias nas áreas de filtro selecionadas em vez de mostrar o quadro completo." + }, + "subOnlyQuality": "Apenas gravações de baixa qualidade estão disponíveis neste intervalo de tempo" } diff --git a/web/public/locales/pt-BR/views/explore.json b/web/public/locales/pt-BR/views/explore.json index 669fd9b828..cddd7f9f8a 100644 --- a/web/public/locales/pt-BR/views/explore.json +++ b/web/public/locales/pt-BR/views/explore.json @@ -49,13 +49,15 @@ "regenerate": "Uma nova descrição foi solicitada do {{provider}}. Dependendo da velocidade do seu fornecedor, a nova descrição pode levar algum tempo para regenerar.", "updatedSublabel": "Sub-rótulo atualizado com sucesso.", "updatedLPR": "Placa de identificação atualizada com sucesso.", - "audioTranscription": "Transcrição de áudio requisitada com sucesso. Dependendo da velocidade de seu servidor Frigate, a transcrição pode demorar um tempo para completar." + "audioTranscription": "Transcrição de áudio requisitada com sucesso. Dependendo da velocidade de seu servidor Frigate, a transcrição pode demorar um tempo para completar.", + "updatedAttributes": "Atributos atualizados com sucesso." }, "error": { "regenerate": "Falha ao ligar para {{provider}} para uma descrição nova: {{errorMessage}}", "updatedSublabelFailed": "Falha ao atualizar sub-rótulo: {{errorMessage}}", "updatedLPRFailed": "Falha ao atualizar placa de identificação: {{errorMessage}}", - "audioTranscription": "Falha ao requisitar transcrição de áudio: {{errorMessage}}" + "audioTranscription": "Falha ao requisitar transcrição de áudio: {{errorMessage}}", + "updatedAttributesFailed": "Falha ao atualizar os atributos: {{errorMessage}}" } } }, @@ -103,7 +105,16 @@ }, "score": { "label": "Pontuação" - } + }, + "editAttributes": { + "title": "Editar atributos", + "desc": "Selecione os atributos de classificação para este(a) {{label}}" + }, + "title": { + "label": "Título" + }, + "attributes": "Atributos de classificação", + "scoreInfo": "Informações da pontuação" }, "trackedObjectDetails": "Detalhes do Objeto Rastreado", "type": { @@ -147,12 +158,36 @@ "audioTranscription": { "label": "Transcrever", "aria": "Solicitar transcrição de áudio" + }, + "showObjectDetails": { + "label": "Mostrar trajeto do objeto" + }, + "hideObjectDetails": { + "label": "Ocultar trajeto do objeto" + }, + "viewTrackingDetails": { + "label": "Ver detalhes do rastreamento", + "aria": "Mostrar os detalhes do rastreamento" + }, + "downloadCleanSnapshot": { + "aria": "Baixar snapshot limpo", + "label": "Baixar snapshot limpo" + }, + "debugReplay": { + "label": "Replay de depuração", + "aria": "Ver este objeto rastreado na visualização de replay de depuração" + }, + "more": { + "aria": "Mais" } }, "dialog": { "confirmDelete": { "title": "Confirmar Exclusão", "desc": "Deletar esse objeto rastreado remove a captura de imagem, os embeddings salvos, e os detalhes de rastreamento associados. Gravações desse objeto rastreado na visualização de Histórico NÃO serão deletadas.

Tem certeza que deseja prosseguir?" + }, + "toast": { + "error": "Erro ao excluir este objeto rastreado: {{errorMessage}}" } }, "noTrackedObjects": "Nenhum Objeto Rastreado Encontrado", @@ -167,7 +202,9 @@ "success": "Objeto rastreado deletado com sucesso.", "error": "Falha ao detectar objeto rastreado {{errorMessage}}" } - } + }, + "previousTrackedObject": "Objeto rastreado anterior", + "nextTrackedObject": "Próximo objeto rastreado" }, "aiAnalysis": { "title": "Análise de IA" @@ -191,14 +228,29 @@ "header": { "zones": "Zonas", "area": "Área", - "ratio": "Proporção" + "ratio": "Proporção", + "score": "Pontuação", + "computedScore": "Pontuação calculada", + "topScore": "Maior pontuação", + "toggleAdvancedScores": "Alternar pontuações avançadas" } }, "title": "Detalhes de Rastreamento", "createObjectMask": "Criar máscara de objeto", "annotationSettings": { "showAllZones": { - "title": "Mostrar todas as Zonas" + "title": "Mostrar todas as Zonas", + "desc": "Sempre mostrar zonas nos quadros em que os objetos entraram em uma zona." + }, + "title": "Configurações de anotação", + "offset": { + "label": "Deslocamento de anotação", + "desc": "Esses dados vêm do feed de detecção da sua câmera, mas são sobrepostos às imagens do feed de gravação. É improvável que os dois streams estejam perfeitamente sincronizados. Como resultado, a caixa delimitadora e a filmagem não se alinharão perfeitamente. Você pode usar esta configuração para deslocar as anotações para frente ou para trás no tempo, alinhando-as melhor com a filmagem gravada.", + "millisecondsToOffset": "Milissegundos para deslocar as anotações de detecção. Padrão: 0", + "tips": "Diminua o valor se a reprodução do vídeo estiver adiantada em relação às caixas e aos pontos do trajeto, e aumente o valor se a reprodução estiver atrasada em relação a eles. Este valor pode ser negativo.", + "toast": { + "success": "O deslocamento de anotação de {{camera}} foi salvo no arquivo de configuração." + } } }, "carousel": { diff --git a/web/public/locales/pt-BR/views/exports.json b/web/public/locales/pt-BR/views/exports.json index 83a5c298b2..7907775035 100644 --- a/web/public/locales/pt-BR/views/exports.json +++ b/web/public/locales/pt-BR/views/exports.json @@ -14,7 +14,9 @@ "toast": { "error": { "renameExportFailed": "Falha ao renomear exportação: {{errorMessage}}", - "assignCaseFailed": "Falha ao atualizar atribuição ao caso: {{errorMessage}}" + "assignCaseFailed": "Falha ao atualizar atribuição ao caso: {{errorMessage}}", + "caseSaveFailed": "Falha ao salvar o caso: {{errorMessage}}", + "caseDeleteFailed": "Falha ao excluir o caso: {{errorMessage}}" } }, "tooltip": { @@ -36,5 +38,92 @@ "newCaseOption": "Criar novo caso", "nameLabel": "Nome do caso", "descriptionLabel": "Descrição" - } + }, + "toolbar": { + "newCase": "Novo caso", + "addExport": "Adicionar exportação", + "deleteCase": "Excluir caso", + "editCase": "Editar caso" + }, + "deleteCase": { + "label": "Excluir caso", + "desc": "Tem certeza de que deseja excluir {{caseName}}?", + "descKeepExports": "As exportações continuarão disponíveis como exportações sem categoria.", + "deleteExports": "Excluir também as exportações", + "descDeleteExports": "Todas as exportações deste caso serão excluídas permanentemente." + }, + "caseCard": { + "emptyCase": "Nenhuma exportação ainda" + }, + "jobCard": { + "defaultName": "Exportação de {{camera}}", + "queued": "Na fila", + "running": "Em execução", + "preparing": "Preparando", + "encoding": "Codificando", + "encodingRetry": "Codificando (nova tentativa)", + "finalizing": "Finalizando", + "copying": "Copiando", + "merging": "Mesclando" + }, + "caseView": { + "noDescription": "Sem descrição", + "createdAt": "Criado {{value}}", + "exportCount_one": "1 exportação", + "exportCount_other": "{{count}} exportações", + "cameraCount_one": "1 câmera", + "showMore": "Mostrar mais", + "showLess": "Mostrar menos", + "emptyTitle": "Este caso está vazio", + "cameraCount_other": "{{count}} câmeras", + "emptyDescription": "Adicione exportações sem categoria existentes para manter o caso organizado.", + "emptyDescriptionNoExports": "Ainda não há exportações sem categoria disponíveis para adicionar." + }, + "bulkActions": { + "deleteNow": "Excluir agora", + "addToCase": "Adicionar ao caso", + "moveToCase": "Mover para o caso", + "delete": "Excluir", + "removeFromCase": "Remover do caso" + }, + "bulkDelete": { + "desc_one": "Tem certeza de que deseja excluir {{count}} exportação?", + "title": "Excluir exportações", + "desc_other": "Tem certeza de que deseja excluir {{count}} exportações?" + }, + "bulkRemoveFromCase": { + "title": "Remover do caso", + "desc_other": "Remover {{count}} exportações deste caso?", + "descKeepExports": "As exportações serão movidas para sem categoria.", + "desc_one": "Remover {{count}} exportação deste caso?", + "descDeleteExports": "As exportações serão excluídas permanentemente.", + "deleteExports": "Excluir as exportações em vez disso" + }, + "caseEditor": { + "createTitle": "Criar caso", + "editTitle": "Editar caso", + "descriptionPlaceholder": "Adicione notas ou contexto para este caso", + "namePlaceholder": "Nome do caso" + }, + "addExportDialog": { + "searchPlaceholder": "Pesquisar exportações sem categoria", + "title": "Adicionar exportação a {{caseName}}", + "empty": "Nenhuma exportação sem categoria corresponde a esta pesquisa.", + "addButton_one": "Adicionar 1 exportação", + "addButton_other": "Adicionar {{count}} exportações", + "adding": "Adicionando..." + }, + "bulkToast": { + "success": { + "delete": "Exportações excluídas com sucesso", + "remove": "Exportações removidas do caso com sucesso", + "reassign": "Atribuição de caso atualizada com sucesso" + }, + "error": { + "deleteFailed": "Falha ao excluir as exportações: {{errorMessage}}", + "reassignFailed": "Falha ao atualizar a atribuição de caso: {{errorMessage}}" + } + }, + "selected_one": "{{count}} selecionados", + "selected_other": "{{count}} selecionados" } diff --git a/web/public/locales/pt-BR/views/live.json b/web/public/locales/pt-BR/views/live.json index 2c00059932..0fecb554dd 100644 --- a/web/public/locales/pt-BR/views/live.json +++ b/web/public/locales/pt-BR/views/live.json @@ -6,7 +6,12 @@ "lowBandwidthMode": "Modo de baixa largura de banda", "twoWayTalk": { "enable": "Habilitar Fala em Dois Sentidos", - "disable": "Desabilitar Fala em Dois Sentidos" + "disable": "Desabilitar Fala em Dois Sentidos", + "error": { + "microphone": "A conversa bidirecional não conseguiu acessar o seu microfone", + "refused": "A conversa bidirecional falhou ao iniciar. Consulte o console do navegador para mais detalhes." + }, + "requiresWebRTC": "A conversa bidirecional exige WebRTC, que não está disponível" }, "cameraAudio": { "enable": "Habilitar Áudio da Câmera", @@ -131,14 +136,40 @@ }, "lowBandwidth": { "tips": "A transmissão ao vivo está em modo de economia de dados devido a erros de buffering ou de transmissão.", - "resetStream": "Resetar transmissão" + "resetStream": "Resetar transmissão", + "force": { + "label": "Forçar modo de baixa largura de banda", + "desc": "Sempre reproduz o feed de baixa largura de banda integrado do Frigate em vez do stream selecionado. Funciona em qualquer conexão, mas tem qualidade inferior e não tem áudio." + } }, "playInBackground": { "label": "Reproduzir em segundo plano", "tips": "Habilitar essa opção para continuar a transmissão quando o reprodutor estiver oculto." }, "debug": { - "picker": "A seleção da transmissão fica indisponível em modo de depuração. A visualização de depuração sempre usa o papel de detecção atribuído à transmissão." + "picker": "A seleção da transmissão fica indisponível em modo de depuração. A visualização de depuração sempre usa o papel de detecção atribuído à transmissão.", + "technology": "A seleção da tecnologia de stream não está disponível no modo de depuração." + }, + "mode": "Tecnologia de streaming", + "technology": { + "name": { + "mse": "MSE", + "webrtc": "WebRTC", + "jsmpeg": "JSMpeg" + }, + "description": "Escolha a sua tecnologia de streaming preferida. O Frigate ainda pode recorrer ao modo de baixa largura de banda em caso de erros de reprodução ou de rede.", + "tips": { + "mse": "Padrão recomendado, ampla compatibilidade e reprodução fluida", + "webrtc": "Requer configuração adicional e não é compatível com todos os dispositivos" + }, + "unavailable": { + "not-configured": "O WebRTC não está configurado. Defina candidates ou ice_servers do WebRTC no go2rtc.", + "unreachable": "O WebRTC não conseguiu se conectar. Verifique se a porta 8555 está acessível e se qualquer servidor STUN/TURN está correto.", + "video-codec": "O codec de vídeo deste stream não é compatível com o WebRTC neste navegador.", + "audio-codec": "O codec de áudio deste stream não é compatível com o WebRTC. Transcodifique para opus ou G.711 com o go2rtc.", + "checking": "Verificando a disponibilidade do WebRTC…", + "browser": "Seu navegador não é compatível com WebRTC." + } } }, "cameraSettings": { diff --git a/web/public/locales/pt-BR/views/motionSearch.json b/web/public/locales/pt-BR/views/motionSearch.json index 0967ef424b..399fd988e9 100644 --- a/web/public/locales/pt-BR/views/motionSearch.json +++ b/web/public/locales/pt-BR/views/motionSearch.json @@ -1 +1,80 @@ -{} +{ + "title": "Busca de movimento", + "documentTitle": "Busca de movimento - Frigate", + "description": "Desenhe um polígono para definir a região de interesse e especifique um intervalo de tempo para buscar mudanças de movimento nessa região.", + "startSearch": "Iniciar busca", + "searchStarted": "Busca iniciada", + "searchCancelled": "Busca cancelada", + "cancelSearch": "Cancelar", + "selectCamera": "A busca de movimento está carregando", + "searching": "Busca em andamento.", + "noResultsYet": "Execute uma busca para encontrar mudanças de movimento na região selecionada", + "noChangesFound": "Nenhuma alteração de pixels detectada na região selecionada", + "searchComplete": "Busca concluída", + "framesProcessed": "{{count}} quadros processados", + "changesFound_one": "Encontrada {{count}} mudança de movimento", + "changesFound_many": "Encontradas {{count}} mudanças de movimento", + "changesFound_other": "Encontradas {{count}} mudanças de movimento", + "jumpToTime": "Ir para este momento", + "results": "Resultados", + "showSegmentHeatmap": "Mapa de calor", + "newSearch": "Nova busca", + "clearResults": "Limpar resultados", + "clearROI": "Limpar polígono", + "polygonControls": { + "points_one": "{{count}} ponto", + "points_many": "{{count}} pontos", + "points_other": "{{count}} pontos", + "undo": "Desfazer último ponto", + "reset": "Redefinir polígono", + "drawMode": "Desenhar", + "moveMode": "Mover" + }, + "motionHeatmapLabel": "Mapa de calor de movimento", + "dialog": { + "title": "Busca de movimento", + "cameraLabel": "Câmera", + "previewAlt": "Prévia da câmera {{camera}}" + }, + "timeRange": { + "title": "Intervalo da busca", + "start": "Hora de início", + "end": "Hora de término" + }, + "settings": { + "title": "Configurações da busca", + "parallelMode": "Modo paralelo", + "parallelModeDesc": "Verifica vários intervalos de gravação ao mesmo tempo (mais rápido; usa mais recursos de decodificação)", + "threshold": "Limite de sensibilidade", + "thresholdDesc": "Valores menores detectam mudanças menores (1-255)", + "minArea": "Área mínima de mudança", + "minAreaDesc": "Tamanho mínimo de uma única região em movimento, como porcentagem da região de interesse", + "maxResultsDesc": "Parar após esta quantidade de carimbos de data/hora correspondentes", + "maxResults": "Máximo de resultados" + }, + "errors": { + "noCamera": "Selecione uma câmera", + "noROI": "Desenhe uma região de interesse", + "noTimeRange": "Selecione um intervalo de tempo", + "invalidTimeRange": "A hora de término deve ser posterior à hora de início", + "polygonTooSmall": "O polígono deve ter pelo menos 3 pontos", + "searchFailed": "Falha na busca: {{message}}", + "unknown": "Erro desconhecido" + }, + "changePercentage": "{{percentage}}% alterado", + "metrics": { + "title": "Métricas da busca", + "segmentsScanned": "Segmentos verificados", + "segmentsProcessed": "Processados", + "segmentsSkippedInactive": "Ignorados (sem atividade)", + "segmentsSkippedHeatmap": "Ignorados (sem sobreposição com a ROI)", + "fallbackFullRange": "Varredura completa de contingência", + "framesDecoded": "Quadros decodificados", + "wallTime": "Tempo de busca", + "segmentErrors": "Erros de segmento", + "seconds": "{{seconds}}s", + "minutesSeconds": "{{minutes}}min {{seconds}}s", + "scanSummary": "{{segments}} segmentos · {{time}}" + }, + "scanning": "Verificando {{time}}" +} diff --git a/web/public/locales/pt-BR/views/replay.json b/web/public/locales/pt-BR/views/replay.json index 58ccb6963e..5cd1c5c123 100644 --- a/web/public/locales/pt-BR/views/replay.json +++ b/web/public/locales/pt-BR/views/replay.json @@ -14,6 +14,47 @@ "custom": "Personalizada" }, "startButton": "Iniciar Reprodução", - "selectFromTimeline": "Selecionar" + "selectFromTimeline": "Selecionar", + "startLabel": "Início", + "endLabel": "Fim", + "toast": { + "error": "Falha ao iniciar o replay de depuração: {{error}}", + "stopError": "Falha ao interromper o replay de depuração: {{error}}", + "goToReplay": "Ir para o replay", + "alreadyActive": "Já existe uma sessão de replay ativa", + "noRecordings": "Nenhuma gravação encontrada no intervalo de tempo selecionado" + }, + "starting": "Iniciando replay..." + }, + "page": { + "noSession": "Nenhuma sessão de replay de depuração ativa", + "noSessionDesc": "Inicie um replay de depuração na visualização de Histórico clicando no botão Ações da barra de ferramentas e escolhendo Replay de depuração.", + "goToRecordings": "Ir para o histórico", + "sourceCamera": "Câmera de origem", + "initializingReplay": "Inicializando replay de depuração...", + "stoppingReplay": "Interrompendo replay de depuração...", + "replayCamera": "Câmera de replay", + "confirmStop": { + "title": "Interromper replay de depuração?", + "description": "Isso interromperá a sessão e limpará todos os dados temporários. Tem certeza?", + "confirm": "Interromper replay", + "cancel": "Cancelar" + }, + "stopReplay": "Interromper replay", + "activity": "Atividade", + "objects": "Lista de objetos", + "audioDetections": "Detecções de áudio", + "activeTracking": "Rastreamento ativo", + "noActivity": "Nenhuma atividade detectada", + "noActiveTracking": "Nenhum rastreamento ativo", + "configuration": "Configuração", + "configurationDesc": "Ajuste com precisão as configurações de detecção de movimento e rastreamento de objetos da câmera de replay de depuração. Nenhuma alteração é salva no seu arquivo de configuração do Frigate.", + "preparingClip": "Preparando o clipe…", + "preparingClipDesc": "O Frigate está juntando as gravações do intervalo de tempo selecionado. Isso pode levar um minuto para intervalos mais longos.", + "startingCamera": "Iniciando replay de depuração…", + "startError": { + "back": "Voltar ao histórico", + "title": "Falha ao iniciar o replay de depuração" + } } } diff --git a/web/public/locales/pt-BR/views/settings.json b/web/public/locales/pt-BR/views/settings.json index dbae312cc1..588ba45981 100644 --- a/web/public/locales/pt-BR/views/settings.json +++ b/web/public/locales/pt-BR/views/settings.json @@ -78,7 +78,17 @@ "cameraAudioTranscription": "Transcrição de áudio", "cameraNotifications": "Notificações", "cameraLivePlayback": "Reprodução ao vivo", - "cameraUi": "Interface da Câmera" + "cameraUi": "Interface da Câmera", + "cameraBirdseye": "Birdseye", + "cameraFaceRecognition": "Reconhecimento facial", + "cameraLpr": "Reconhecimento de placas de veículos", + "cameraMqttConfig": "MQTT", + "cameraOnvif": "ONVIF", + "cameraTimestampStyle": "Estilo do carimbo de data/hora", + "cameraMqtt": "MQTT da câmera", + "mediaSync": "Sincronização de mídia", + "regionGrid": "Grade de regiões", + "maintenance": "Manutenção" }, "dialog": { "unsavedChanges": { @@ -140,11 +150,50 @@ "toast": { "success": { "clearStoredLayout": "Layout deletado para {{cameraName}}", - "clearStreamingSettings": "Ajustes de streaming para todos os grupos de câmera limpados." + "clearStreamingSettings": "Ajustes de streaming para todos os grupos de câmera limpados.", + "exportUiSettings": "Configurações exportadas", + "importUiSettings": "Configurações importadas" }, "error": { "clearStoredLayoutFailed": "Não foi possível apagar o layout:{{errorMessage}}", - "clearStreamingSettingsFailed": "Não foi possível apagar os ajustes de streaming:{{errorMessage}}" + "clearStreamingSettingsFailed": "Não foi possível apagar os ajustes de streaming:{{errorMessage}}", + "exportUiSettingsFailed": "Falha ao exportar as configurações", + "importNothingToApply": "Falha ao importar as configurações: o arquivo não contém configurações", + "importWrongType": "Falha ao importar as configurações: o arquivo não é uma exportação de configurações do Frigate", + "importUnsupportedVersion": "Falha ao importar as configurações: o arquivo exige uma versão mais recente do Frigate", + "importInvalidJson": "Falha ao importar as configurações: o arquivo não é um JSON válido", + "importUiSettingsFailed": "Falha ao importar as configurações", + "importInvalidSchema": "Falha ao importar as configurações: o arquivo está malformado" + } + }, + "backupRestore": { + "transfer": { + "label": "Arquivo de configurações do dispositivo", + "desc": "Os layouts de grupos de câmeras, as configurações de streaming e as preferências da interface são armazenados no seu navegador. Exporte-os para um arquivo para fazer backup ou para movê-los para outro dispositivo.", + "export": "Exportar configurações", + "import": "Importar configurações" + }, + "title": "Backup e restauração", + "importDialog": { + "title": "Importar configurações", + "desc": "Escolha o que aplicar a partir deste arquivo. O Frigate será recarregado quando a importação terminar.", + "exportedFrom": "Exportado em {{date}} da versão de configuração {{version}} do Frigate", + "layouts_one": "Layouts de grupos de câmeras ({{count}} grupo)", + "layouts_many": "Layouts de grupos de câmeras ({{count}} grupos)", + "layouts_other": "Layouts de grupos de câmeras ({{count}} grupos)", + "preferences_one": "Preferências da interface ({{count}} configuração)", + "preferences_many": "Preferências da interface ({{count}} configurações)", + "preferences_other": "Preferências da interface ({{count}} configurações)", + "streaming_one": "Configurações de streaming ({{count}} câmera)", + "streaming_many": "Configurações de streaming ({{count}} câmeras)", + "streaming_other": "Configurações de streaming ({{count}} câmeras)", + "unknownCameras_one": "A câmera {{cameras}} não existe neste servidor. Suas configurações de streaming serão ignoradas.", + "unknownCameras_many": "As câmeras {{cameras}} não existem neste servidor. Suas configurações de streaming serão ignoradas.", + "unknownCameras_other": "As câmeras {{cameras}} não existem neste servidor. Suas configurações de streaming serão ignoradas.", + "confirm": "Importar", + "unknownGroups_one": "O grupo de câmeras {{groups}} não existe neste servidor. Suas configurações serão salvas, mas não serão usadas.", + "unknownGroups_many": "Os grupos de câmeras {{groups}} não existem neste servidor. Suas configurações serão salvas, mas não serão usadas.", + "unknownGroups_other": "Os grupos de câmeras {{groups}} não existem neste servidor. Suas configurações serão salvas, mas não serão usadas." } } }, @@ -229,7 +278,8 @@ "mustNotBeSameWithCamera": "O nome da zona não pode ser igual ao nome da câmera.", "alreadyExists": "Uma zona com esse noma já existe para essa câmera.", "mustNotContainPeriod": "O nome da zona não pode conter ponto final.", - "hasIllegalCharacter": "O nome da zona contém caracteres ilegais." + "hasIllegalCharacter": "O nome da zona contém caracteres ilegais.", + "mustHaveAtLeastOneLetter": "O nome da zona deve ter pelo menos uma letra." } }, "distance": { @@ -269,6 +319,26 @@ }, "error": { "mustBeFinished": "O desenho do polígono deve ser finalizado antes de salvar." + }, + "type": { + "zone": "zona", + "motion_mask": "máscara de movimento", + "object_mask": "máscara de objeto" + }, + "revertOverride": { + "title": "Reverter para a configuração base", + "desc": "Isso removerá a substituição do perfil para {{type}} {{name}} e reverterá para a configuração base." + } + }, + "id": { + "error": { + "mustNotBeEmpty": "O ID não pode estar vazio.", + "alreadyExists": "Já existe uma máscara com este ID para esta câmera." + } + }, + "name": { + "error": { + "mustNotBeEmpty": "O nome não pode estar vazio." } } }, @@ -323,6 +393,10 @@ }, "toast": { "success": "A zona ({{zoneName}}) foi salva." + }, + "enabled": { + "title": "Habilitada", + "description": "Indica se esta zona está ativa e habilitada no arquivo de configuração. Se estiver desabilitada, não poderá ser habilitada por MQTT. Zonas desabilitadas são ignoradas durante a execução." } }, "objectMasks": { @@ -349,7 +423,12 @@ "point_one": "{{count}} ponto", "point_many": "{{count}} pontos", "point_other": "{{count}} pontos", - "clickDrawPolygon": "Clique para desenhar um polígono na imagem." + "clickDrawPolygon": "Clique para desenhar um polígono na imagem.", + "name": { + "description": "Um nome amigável opcional para esta máscara de objeto.", + "placeholder": "Digite um nome...", + "title": "Nome" + } }, "motionMasks": { "label": "Máscara de Movimento", @@ -376,8 +455,24 @@ "title": "{{polygonName}} foi salvo.", "noName": "Máscara de Movimento salva." } + }, + "defaultName": "Máscara de movimento {{number}}", + "name": { + "title": "Nome", + "description": "Um nome amigável opcional para esta máscara de movimento.", + "placeholder": "Digite um nome..." } - } + }, + "disabledInConfig": "O item está desabilitado no arquivo de configuração", + "masks": { + "enabled": { + "description": "Indica se esta máscara está habilitada no arquivo de configuração. Se estiver desabilitada, não poderá ser habilitada por MQTT. Máscaras desabilitadas são ignoradas durante a execução.", + "title": "Habilitada" + } + }, + "profileBase": "(base)", + "profileOverride": "(substituição)", + "addDisabledProfile": "Adicione primeiro à configuração base e, em seguida, substitua no perfil" }, "motionDetectionTuner": { "desc": { @@ -500,7 +595,13 @@ "medium": "Mediana", "strong": "Forte", "veryStrong": "Muito Forte" - } + }, + "requirements": { + "title": "Requisitos da senha:", + "length": "Pelo menos 12 caracteres" + }, + "hide": "Ocultar senha", + "show": "Mostrar senha" }, "newPassword": { "title": "Senha Nova", @@ -515,6 +616,10 @@ "title": "Nome de Usuário", "desc": "Apenas letras, números, pontos e sublinhados são permitidos.", "placeholder": "Digite o nome de usuário" + }, + "currentPassword": { + "title": "Senha atual", + "placeholder": "Digite sua senha atual" } }, "createUser": { @@ -533,7 +638,12 @@ "doNotMatch": "As senhas não correspondem", "updatePassword": "Atualizar Senha para {{username}}", "setPassword": "Definir Senha", - "desc": "Crie uma senha forte para proteger essa conta." + "desc": "Crie uma senha forte para proteger essa conta.", + "incorrectCurrentPassword": "A senha atual está incorreta", + "multiDeviceAdmin": "Você também pode forçar todos os usuários a se autenticarem novamente imediatamente rotacionando seu segredo JWT.", + "passwordVerificationFailed": "Falha ao verificar a senha", + "multiDeviceWarning": "Quaisquer outros dispositivos em que você esteja conectado precisarão fazer login novamente em até {{refresh_time}}.", + "currentPasswordRequired": "A senha atual é obrigatória" }, "changeRole": { "title": "Alterar Papel do Usuário", @@ -586,8 +696,8 @@ "desc": "O Frigate pode enviar notificações push nativamente ao seu dispositivo quando estiver sendo executado no navegador ou instalado como um PWA." }, "notificationUnavailable": { - "title": "Notificações Indisponíveis", - "desc": "Notificações push da Web exigem um contexto seguro (https://…). Essa é uma limitação do navegador. Acesse o Frigate com seguraça para usar as notificações." + "desc": "As notificações push da Web exigem um contexto seguro (https://…). Isso é uma limitação do navegador. Acesse o Frigate de forma segura para usar as notificações.", + "descPwa": "No iOS, as notificações push da Web só estão disponíveis quando o Frigate está instalado na Tela de Início. Abra o menu Compartilhar, escolha Adicionar à Tela de Início e, em seguida, abra o Frigate pelo novo ícone para registrar este dispositivo para receber notificações." }, "globalSettings": { "title": "Configurações Globais", @@ -636,7 +746,15 @@ "modelType": "Tipo de Modelo", "trainDate": "Data do Treinamento", "baseModel": "Modelo Base", - "modelSelect": "Os seus modelos disponíveis no Frigate+ podem ser selecionados aqui. Note que apenas modelos compatíveis com a sua configuração atual de detector podem ser selecionados." + "modelSelect": "Os seus modelos disponíveis no Frigate+ podem ser selecionados aqui. Note que apenas modelos compatíveis com a sua configuração atual de detector podem ser selecionados.", + "noModelLoaded": "Nenhum modelo Frigate+ está carregado no momento.", + "selectModel": "Selecione um modelo", + "noModelsAvailable": "Nenhum modelo disponível", + "filter": { + "ariaLabel": "Filtrar modelos por tipo", + "baseModels": "Modelos base", + "fineTunedModels": "Modelos ajustados" + } }, "snapshotConfig": { "title": "Configuração de Captura de Imagem", @@ -652,7 +770,15 @@ "toast": { "success": "As configurações do Frigate+ foram salvas. Reinicie o Frigate para aplicar as alterações.", "error": "Falha ao salvar as alterações de configuração: {{errorMessage}}" - } + }, + "description": "O Frigate+ é um serviço por assinatura que oferece acesso a recursos e funcionalidades adicionais para a sua instância do Frigate, incluindo a possibilidade de usar modelos personalizados de detecção de objetos treinados com os seus próprios dados. Você pode gerenciar as configurações do seu modelo Frigate+ aqui.", + "cardTitles": { + "api": "API", + "currentModel": "Modelo atual", + "otherModels": "Outros modelos", + "configuration": "Configuração" + }, + "changeInDetectorsAndModel": "Alterar modelo" }, "triggers": { "documentTitle": "Gatilhos", @@ -677,7 +803,9 @@ "description": "Descrição" }, "actions": { - "notification": "Enviar Notificação" + "notification": "Enviar Notificação", + "sub_label": "Adicionar sub-rótulo", + "attribute": "Adicionar atributo" }, "dialog": { "createTrigger": { @@ -700,14 +828,17 @@ "minLength": "O campo precisa ter no mínimo 2 caracteres.", "invalidCharacters": "O campo pode contar apenas letras, números, sublinhados, e hifens.", "alreadyExists": "Um gatilho com esse nome já existe para essa câmera." - } + }, + "description": "Digite um nome exclusivo ou uma descrição para identificar este gatilho" }, "enabled": { "description": "Habilitar ou desabilitar esse gatilho" }, "type": { "title": "Tipo", - "placeholder": "Selecionar o tipo de gatilho" + "placeholder": "Selecionar o tipo de gatilho", + "description": "Disparar quando uma descrição semelhante de objeto rastreado for detectada", + "thumbnail": "Disparar quando uma miniatura semelhante de objeto rastreado for detectada" }, "content": { "title": "Conteúdo", @@ -724,7 +855,8 @@ "error": { "min": "O limitar deve ser no mínimo 0", "max": "O limiar deve ser no mínimo 1" - } + }, + "desc": "Defina o limite de similaridade para este gatilho. Um limite maior exige uma correspondência mais próxima para disparar o gatilho." }, "actions": { "title": "Ações", @@ -748,8 +880,24 @@ } }, "semanticSearch": { - "title": "Busca Semântica desativada", "desc": "Busca Semântica deve estar habilitada para usar os Gatilhos." + }, + "wizard": { + "title": "Criar gatilho", + "step1": { + "description": "Configure as definições básicas do seu gatilho." + }, + "step2": { + "description": "Configure o conteúdo que acionará esta ação." + }, + "step3": { + "description": "Configure o limite e as ações para este gatilho." + }, + "steps": { + "nameAndType": "Nome e tipo", + "configureData": "Configurar dados", + "thresholdAndActions": "Limite e ações" + } } }, "roles": { @@ -820,7 +968,8 @@ "steps": { "nameAndConnection": "Nome e Conexão", "streamConfiguration": "Configuração de Stream", - "validationAndTesting": "Validação e Teste" + "validationAndTesting": "Validação e Teste", + "probeOrSnapshot": "Sondagem ou instantâneo" }, "save": { "success": "Nova câmera {{cameraName}} salva com sucesso.", @@ -858,8 +1007,164 @@ "nameRequired": "Nome para a câmera requerido", "nameLength": "O nome da câmera deve ter 64 caracteres ou menos", "invalidCharacters": "Nome da câmera contém caracteres inválidos", - "nameExists": "Nome da câmera já existe" + "nameExists": "Nome da câmera já existe", + "customUrlRtspRequired": "URLs personalizadas devem começar com \"rtsp://\" ou \"rtsps://\". A configuração manual é necessária para streams de câmera que não sejam RTSP." + }, + "connectionSettings": "Configurações de conexão", + "detectionMethod": "Método de detecção de streams", + "onvifPort": "Porta ONVIF", + "probeMode": "Sondar câmera", + "manualMode": "Seleção manual", + "detectionMethodDescription": "Sonde a câmera com ONVIF (se houver suporte) para encontrar as URLs de stream da câmera ou selecione manualmente a marca da câmera para usar URLs predefinidas. Para inserir uma URL RTSP personalizada, escolha o método manual e selecione \"Outra\".", + "onvifPortDescription": "Para câmeras com suporte a ONVIF, geralmente é 80 ou 8080.", + "useDigestAuth": "Usar autenticação digest", + "useDigestAuthDescription": "Use a autenticação HTTP digest para o ONVIF. Algumas câmeras podem exigir um usuário/senha ONVIF dedicado em vez do usuário admin padrão." + }, + "step2": { + "testSuccess": "Teste de conexão bem-sucedido!", + "description": "Sonde a câmera em busca de streams disponíveis ou configure manualmente com base no método de detecção selecionado.", + "testFailed": "O teste de conexão falhou. Verifique os dados informados e tente novamente.", + "testFailedTitle": "Falha no teste", + "connected": "Conectado", + "notConnected": "Não conectado", + "streamDetails": "Detalhes do stream", + "probing": "Sondando câmera...", + "testing": { + "probingMetadata": "Sondando metadados da câmera...", + "fetchingSnapshot": "Obtendo instantâneo da câmera..." + }, + "retry": "Tentar novamente", + "probeFailed": "Falha ao sondar a câmera: {{error}}", + "probingDevice": "Sondando dispositivo...", + "probeSuccessful": "Sondagem bem-sucedida", + "probeError": "Erro de sondagem", + "probeNoSuccess": "Sondagem malsucedida", + "manufacturer": "Fabricante", + "deviceInfo": "Informações do dispositivo", + "model": "Modelo", + "firmware": "Firmware", + "profiles": "Perfis", + "ptzSupport": "Suporte a PTZ", + "autotrackingSupport": "Suporte a rastreamento automático", + "presets": "Predefinições", + "rtspCandidates": "Candidatas de RTSP", + "rtspCandidatesDescription": "As seguintes URLs RTSP foram encontradas na sondagem da câmera. Teste a conexão para ver os metadados do stream.", + "noRtspCandidates": "Nenhuma URL RTSP foi encontrada na câmera. Suas credenciais podem estar incorretas, ou a câmera pode não oferecer suporte a ONVIF ou ao método usado para obter as URLs RTSP. Volte e insira a URL RTSP manualmente.", + "candidateStreamTitle": "Candidata {{number}}", + "useCandidate": "Usar", + "uriCopy": "Copiar", + "uriCopied": "URI copiada para a área de transferência", + "testConnection": "Testar conexão", + "toggleUriView": "Clique para alternar a visualização da URI completa", + "errors": { + "hostRequired": "O host/endereço IP é obrigatório" } + }, + "step3": { + "description": "Configure recursos, funções dos streams e adicione streams extras para a sua câmera.", + "streamTitle": "Stream {{number}}", + "roles": "Funções", + "streamsTitle": "Streams da câmera", + "addStream": "Adicionar stream", + "addAnotherStream": "Adicionar outro stream", + "streamUrl": "URL do stream", + "streamUrlPlaceholder": "rtsp://usuario:senha@host:porta/caminho", + "selectStream": "Selecione um stream", + "searchCandidates": "Pesquisar candidatas...", + "noStreamFound": "Nenhum stream encontrado", + "resolution": "Resolução", + "url": "URL", + "selectResolution": "Selecione a resolução", + "quality": "Qualidade", + "roleLabels": { + "detect": "Detecção de objetos", + "record": "Gravação", + "audio": "Áudio" + }, + "selectQuality": "Selecione a qualidade", + "testStream": "Testar conexão", + "testSuccess": "Teste do stream bem-sucedido!", + "testFailed": "O teste do stream falhou", + "testFailedTitle": "Falha no teste", + "connected": "Conectado", + "featuresTitle": "Recursos", + "rolesPopover": { + "title": "Funções do stream", + "detect": "Feed principal para detecção de objetos.", + "record": "Salva segmentos do feed de vídeo de acordo com as configurações de gravação.", + "audio": "Feed para detecção baseada em áudio.", + "record_sub": "Gravações de menor qualidade para reprodução adaptativa e retenção estendida (normalmente o substream da câmera)." + }, + "featuresPopover": { + "title": "Recursos do stream", + "description": "Use o restreaming do go2rtc para reduzir as conexões com a sua câmera." + }, + "notConnected": "Não conectado", + "detectRoleWarning": "Pelo menos um stream deve ter a função \"detect\" para prosseguir.", + "go2rtc": "Reduzir conexões com a câmera", + "appleCompatibility": { + "title": "Melhorar a reprodução em dispositivos Apple", + "description": "Ative esta opção se você assiste às gravações no Safari ou em um iPhone, iPad ou Mac." + }, + "ptz": { + "title": "Habilitar controles PTZ", + "detectedNote": "Foi detectado suporte a PTZ via ONVIF. Se esta for uma câmera PTZ, habilitar esta opção permitirá controlar as funções de pan/tilt/zoom da câmera pela interface.", + "host": "Host ONVIF", + "port": "Porta ONVIF", + "connectionDetails": "Detalhes da conexão ONVIF", + "password": "Senha ONVIF", + "hostRequiredWarning": "Um host e uma porta ONVIF são necessários quando os controles PTZ estão habilitados.", + "username": "Usuário ONVIF" + } + }, + "step4": { + "estimatedBandwidth": "Largura de banda estimada", + "streamValidationFailed": "A validação do stream {{number}} falhou", + "issues": { + "noAudioWarning": "Nenhum áudio detectado neste stream; as gravações não terão áudio.", + "title": "Validação do stream", + "videoCodecGood": "O codec de vídeo é {{codec}}.", + "resolutionLow": "Uma resolução de {{resolution}} pode ser baixa demais para a detecção confiável de objetos pequenos.", + "brands": { + "reolink-http": "Os streams HTTP da Reolink devem usar o FFmpeg para melhor compatibilidade. Habilite 'Usar modo de compatibilidade de stream' para este stream.", + "reolink-rtsp": "O RTSP da Reolink não é recomendado. Habilite o HTTP nas configurações de firmware da câmera e reinicie o assistente." + }, + "audioCodecGood": "O codec de áudio é {{codec}}.", + "resolutionHigh": "Uma resolução de {{resolution}} pode aumentar o uso de recursos.", + "audioCodecRecordError": "O codec de áudio AAC é necessário para oferecer suporte a áudio nas gravações.", + "audioCodecRequired": "Um stream de áudio é necessário para oferecer suporte à detecção de áudio.", + "restreamingWarning": "Reduzir as conexões com a câmera para o stream de gravação pode aumentar levemente o uso de CPU.", + "dahua": { + "substreamWarning": "O substream 1 está travado em uma resolução baixa. Muitas câmeras Dahua / Amcrest / EmpireTech oferecem suporte a substreams adicionais que precisam ser habilitados nas configurações da câmera. Recomenda-se verificar e utilizar esses streams, se disponíveis." + }, + "hikvision": { + "substreamWarning": "O substream 1 está travado em uma resolução baixa. Muitas câmeras Hikvision oferecem suporte a substreams adicionais que precisam ser habilitados nas configurações da câmera. Recomenda-se verificar e utilizar esses streams, se disponíveis." + }, + "resolutionUnknown": "Não foi possível sondar a resolução deste stream. Você deve definir manualmente a resolução de detecção em Configurações ou na sua configuração." + }, + "notTested": "Não testado", + "ffmpegModuleDescription": "Se o stream não carregar após várias tentativas, tente habilitar esta opção. Quando habilitada, o Frigate usará o módulo ffmpeg com o go2rtc. Isso pode oferecer melhor compatibilidade com alguns streams de câmera.", + "none": "Nenhum", + "streamValidated": "Stream {{number}} validado com sucesso", + "saveAndApply": "Salvar nova câmera", + "reload": "Recarregar", + "roles": "Funções", + "description": "Validação e análise finais antes de salvar sua nova câmera. Conecte cada stream antes de salvar.", + "connectAllStreams": "Conectar todos os streams", + "validationTitle": "Validação dos streams", + "reconnectionPartial": "Alguns streams falharam ao reconectar.", + "streamUnavailable": "Pré-visualização do stream indisponível", + "reconnectionSuccess": "Reconexão bem-sucedida.", + "connecting": "Conectando...", + "streamTitle": "Stream {{number}}", + "valid": "Válido", + "failed": "Falhou", + "connectingStream": "Conectando", + "disconnectStream": "Desconectar", + "ffmpegModule": "Usar modo de compatibilidade de stream", + "connectStream": "Conectar", + "saveError": "Configuração inválida. Verifique suas configurações.", + "error": "Erro" } }, "button": { @@ -869,12 +1174,917 @@ "overriddenBaseConfigTooltip": "O perfil {{profile}} substitui as configurações desta seção", "overriddenBaseConfigNoDeltas": "O perfil {{profile}} substitui esta seção, mas nenhum valor de campo difere da configuração base.", "overriddenInCameras": { - "profilePrefix": "{{profile}} perfil: {{fields}}" - } + "profilePrefix": "{{profile}} perfil: {{fields}}", + "tooltip_one": "{{count}} câmera substitui valores nesta seção. Clique para ver os detalhes.", + "tooltip_many": "{{count}} câmeras substituem valores nesta seção. Clique para ver os detalhes.", + "tooltip_other": "{{count}} câmeras substituem valores nesta seção. Clique para ver os detalhes.", + "label_one": "Substituído em {{count}} câmera", + "label_many": "Substituído em {{count}} câmeras", + "label_other": "Substituído em {{count}} câmeras", + "heading_one": "Esta seção global tem campos que são substituídos em {{count}} câmera.", + "heading_many": "Esta seção global tem campos que são substituídos em {{count}} câmeras.", + "heading_other": "Esta seção global tem campos que são substituídos em {{count}} câmeras.", + "othersField_one": "{{count}} outra", + "othersField_many": "{{count}} outras", + "othersField_other": "{{count}} outras" + }, + "overriddenGlobalHeading_one": "Esta câmera substitui {{count}} campo da configuração global:", + "overriddenGlobalHeading_many": "Esta câmera substitui {{count}} campos da configuração global:", + "overriddenGlobalHeading_other": "Esta câmera substitui {{count}} campos da configuração global:", + "overriddenBaseConfigHeading_one": "O perfil {{profile}} substitui {{count}} campo da configuração base:", + "overriddenBaseConfigHeading_many": "O perfil {{profile}} substitui {{count}} campos da configuração base:", + "overriddenBaseConfigHeading_other": "O perfil {{profile}} substitui {{count}} campos da configuração base:", + "overriddenGlobalNoDeltas": "Esta câmera substitui a configuração global, mas nenhum valor de campo é diferente.", + "overriddenLive": "Substituído (ao vivo)", + "overriddenLiveTooltip": "Esta câmera está sendo executada com um valor diferente do salvo na sua configuração, que é o exibido aqui. A visualização ao vivo, o MQTT ou um perfil ativo podem alterá-lo enquanto o Frigate está em execução.", + "overriddenLiveValue": "Valor em execução: {{value}}" }, "menuDot": { "overrideGlobal": "Esta seção substitui a configuração global", "overrideProfile": "Esta seção é substituída pelo perfil {{profile}}", "unsaved": "Esta seção contém alterações não salvas" + }, + "cameraManagement": { + "title": "Gerenciar câmeras", + "addCamera": "Adicionar nova câmera", + "editCamera": "Editar câmera:", + "selectCamera": "Selecione uma câmera", + "backToSettings": "Voltar para as configurações da câmera", + "streams": { + "title": "Estado e detalhes da câmera", + "enableSuccess": "{{cameraName}} habilitada. Reinicie o Frigate para aplicar.", + "reorderHandle": "Arraste para reordenar", + "saving": "Salvando…", + "saved": "Salvo", + "details": { + "title": "Editar detalhes da câmera", + "edit": "Editar detalhes da câmera", + "friendlyNameLabel": "Nome de exibição", + "friendlyNameHelp": "Nome amigável exibido para esta câmera em toda a interface do Frigate. Deixe em branco para usar o ID da câmera.", + "description": "Atualize o nome de exibição, a URL externa e a visibilidade usados por esta câmera em toda a interface do Frigate.", + "webuiUrlLabel": "URL da interface web da câmera", + "webuiUrlHelp": "URL para acessar diretamente a interface web da câmera a partir da visualização de depuração. Deixe em branco para desabilitar o link.", + "webuiUrlInvalid": "Deve ser uma URL válida (por ex., https://exemplo.com).", + "dashboardLabel": "Mostrar no painel ao vivo", + "dashboardHelp": "Mostra esta câmera no painel ao vivo padrão de Todas as câmeras. Ela continua disponível em todos os outros lugares, incluindo grupos de câmeras.", + "reviewLabel": "Mostrar na revisão", + "reviewHelp": "Mostra esta câmera na Revisão, incluindo o filtro de câmeras, a revisão de movimento e a visualização de histórico." + }, + "label": "Estado da câmera", + "disabledSubheading": "Desabilitada na configuração", + "status": { + "on": "Ligada", + "off": "Desligada", + "disabled": "Desabilitada" + }, + "description": "Defina o estado de operação de cada câmera.

Ligada: os streams são processados normalmente.
Desligada: pausa temporariamente o processamento. Não persiste entre reinicializações do Frigate.
Desabilitada: interrompe o processamento e salva a alteração na sua configuração. É necessário reiniciar para reabilitar uma câmera desabilitada.

Observação: desabilitar não afeta os restreams do go2rtc.

Arraste a alça para reordenar as câmeras ativas conforme aparecem em toda a interface, incluindo o painel ao vivo e os menus de seleção de câmera.", + "disableSuccess": "{{cameraName}} desabilitada e salva na configuração." + }, + "cameraConfig": { + "add": "Adicionar câmera", + "edit": "Editar câmera", + "description": "Configure as definições da câmera, incluindo as entradas de stream e suas funções.", + "name": "Nome da câmera", + "nameRequired": "O nome da câmera é obrigatório", + "nameLength": "O nome da câmera deve ter menos de 64 caracteres.", + "namePlaceholder": "ex.: porta_da_frente ou Visão do quintal", + "enabled": "Habilitada", + "ffmpeg": { + "inputs": "Streams de entrada", + "path": "Caminho do stream", + "pathRequired": "O caminho do stream é obrigatório", + "pathPlaceholder": "rtsp://...", + "roles": "Funções", + "rolesRequired": "Pelo menos uma função é obrigatória", + "rolesUnique": "Cada função (áudio, detecção, gravação) só pode ser atribuída a um stream", + "addInput": "Adicionar stream de entrada", + "removeInput": "Remover stream de entrada", + "inputsRequired": "Pelo menos um stream de entrada é obrigatório" + }, + "go2rtcStreams": "Streams do go2rtc", + "streamUrls": "URLs de stream", + "addUrl": "Adicionar URL", + "addGo2rtcStream": "Adicionar stream do go2rtc", + "toast": { + "success": "Câmera {{cameraName}} salva com sucesso" + } + }, + "deleteCamera": "Excluir câmera", + "deleteCameraDialog": { + "title": "Excluir câmera", + "description": "Excluir uma câmera removerá permanentemente todas as gravações, objetos rastreados e a configuração dessa câmera. Talvez ainda seja necessário remover manualmente os streams do go2rtc associados a esta câmera.", + "selectPlaceholder": "Escolha a câmera…", + "confirmWarning": "A exclusão de {{cameraName}} não pode ser desfeita.", + "deleteExports": "Excluir também as exportações desta câmera", + "confirmButton": "Excluir permanentemente", + "success": "Câmera {{cameraName}} excluída com sucesso", + "error": "Falha ao excluir a câmera {{cameraName}}", + "confirmTitle": "Tem certeza?" + }, + "profiles": { + "selectLabel": "Selecionar perfil", + "description": "Configure quais câmeras são ligadas ou desligadas quando um perfil é ativado. As câmeras definidas como \"Herdar\" mantêm o estado padrão.", + "inherit": "Herdar", + "title": "Substituições de câmera por perfil", + "on": "Ligada", + "off": "Desligada" + }, + "cameraType": { + "title": "Tipo de câmera", + "description": "Defina o tipo de cada câmera. Câmeras LPR dedicadas são câmeras de finalidade única, com zoom óptico potente, para capturar placas de veículos distantes. A maioria das câmeras deve usar o tipo normal, a menos que a câmera seja específica para LPR e tenha uma visão bem focada nas placas.", + "normal": "Normal", + "dedicatedLpr": "LPR dedicada", + "saveSuccess": "Tipo de câmera atualizado para {{cameraName}}. Reinicie o Frigate para aplicar as alterações.", + "label": "Tipo de câmera" + }, + "description": "Adicione, edite e exclua câmeras, controle o estado de cada câmera e configure substituições por perfil e por tipo de câmera. Para configurar streams, detecção, movimento e outras configurações específicas da câmera, escolha a seção desejada em Configuração da câmera.", + "clone": { + "sectionDescription": "Copie a configuração de uma câmera para outra câmera ou para uma nova.", + "button": "Clonar configurações", + "title": "Clonar configurações da câmera", + "sectionTitle": "Clonar configurações", + "source": { + "label": "Câmera de origem", + "placeholder": "Selecione uma câmera de origem", + "required": "Selecione uma câmera de origem" + }, + "description": "Copie a configuração de uma câmera para uma ou mais outras câmeras ou para uma nova câmera. A identidade (nome, nome amigável, URL da interface web, ordem de exibição) nunca é copiada.", + "target": { + "legend": "Destino", + "newRadio": "Nova câmera", + "newNameLabel": "Nome da câmera", + "newNamePlaceholder": "ex.: porta_dos_fundos ou Porta dos fundos", + "newNameRequired": "O nome da câmera é obrigatório", + "newNameInvalid": "Nome de câmera inválido", + "newNameCollision": "Já existe uma câmera com este nome", + "newStreamsForced": "Os streams sempre são copiados para uma nova câmera.", + "existingCamerasRadio": "Câmeras existentes", + "allCameras": "Todas as câmeras", + "existingPlaceholder": "Selecione pelo menos uma câmera", + "existingDisabled": "Não há outras câmeras para as quais copiar" + }, + "categories": { + "description": "Escolha quais configurações copiar da câmera de origem.", + "legend": "Configurações a clonar", + "selectAll": "Selecionar tudo", + "selectNone": "Limpar seleção", + "resetDefaults": "Redefinir para os padrões", + "general": "Geral", + "spatial": "Configurações espaciais", + "streams": "Streams", + "spatialWarningTitle": "Incompatibilidade de resolução", + "spatialWarning": "A resolução de detecção da câmera de origem {{srcCamera}} ({{srcWidth}}×{{srcHeight}}) difere de: {{cameras}}. Os polígonos podem não se alinhar nessas câmeras. Estes padrões estão desativados; habilite para copiar como estão.", + "items": { + "record": "Gravação", + "snapshots": "Snapshots", + "motion": "Detecção de movimento", + "objects": "Objetos", + "review": "Revisão", + "audio": "Detecção de áudio", + "audio_transcription": "Transcrição de áudio", + "notifications": "Notificações", + "birdseye": "Birdseye", + "timestamp_style": "Estilo do carimbo de data/hora", + "mqtt": "MQTT", + "onvif": "ONVIF", + "face_recognition": "Reconhecimento facial", + "lpr": "Reconhecimento de placas de veículos", + "semantic_search": "Busca semântica", + "genai": "IA generativa", + "type": "Tipo de câmera (normal / LPR dedicada)", + "profiles": "Perfis", + "detect": "Dimensões de detecção", + "motion_mask": "Máscaras de movimento", + "zones": "Zonas", + "ffmpeg_live": "URLs e funções dos streams", + "object_masks": "Máscaras de objeto" + }, + "restartHint": "Reinicialização necessária" + }, + "footer": { + "changeCount_one": "{{count}} alteração será aplicada", + "changeCount_many": "{{count}} alterações serão aplicadas", + "changeCount_other": "{{count}} alterações serão aplicadas", + "restartNeeded": "Será necessária uma reinicialização para algumas alterações.", + "liveOnly": "Todas as alterações serão aplicadas ao vivo, sem reinicialização.", + "submit": "Clonar", + "submitting": "Clonando…" + }, + "toast": { + "success": "Configurações copiadas para {{cameraName}}", + "successMulti_one": "Configurações copiadas para {{count}} câmera", + "successMulti_many": "Configurações copiadas para {{count}} câmeras", + "successMulti_other": "Configurações copiadas para {{count}} câmeras", + "successWithRestart": "Configurações copiadas para {{cameraName}}. Reinicie o Frigate para aplicar todas as alterações.", + "successMultiWithRestart_one": "Configurações copiadas para {{count}} câmera. Reinicie o Frigate para aplicar todas as alterações.", + "successMultiWithRestart_many": "Configurações copiadas para {{count}} câmeras. Reinicie o Frigate para aplicar todas as alterações.", + "successMultiWithRestart_other": "Configurações copiadas para {{count}} câmeras. Reinicie o Frigate para aplicar todas as alterações.", + "partialFailure": "{{successCount}} seções aplicadas; '{{failedSection}}' falhou: {{errorMessage}}", + "newCameraPartialFailure": "A câmera {{cameraName}} foi criada, mas algumas configurações não puderam ser copiadas: {{errorMessage}}", + "partialFailureMulti": "Copiado para {{successCount}} câmera(s); falhou em {{failed}}: {{errorMessage}}", + "sourceMissing": "A câmera de origem não existe mais", + "submitError": "Falha ao clonar a câmera: {{errorMessage}}" + } + } + }, + "cameraReview": { + "title": "Configurações de revisão da câmera", + "object_descriptions": { + "title": "Descrições de objetos por IA generativa", + "desc": "Habilita/desabilita temporariamente as descrições de objetos por IA generativa nesta câmera até o Frigate ser reiniciado. Quando desabilitado, descrições geradas por IA não serão solicitadas para os objetos rastreados desta câmera." + }, + "review_descriptions": { + "title": "Descrições de revisão por IA generativa", + "desc": "Habilita/desabilita temporariamente as descrições de revisão por IA generativa nesta câmera até o Frigate ser reiniciado. Quando desabilitado, descrições geradas por IA não serão solicitadas para os itens de revisão desta câmera." + }, + "review": { + "title": "Revisão", + "desc": "Habilita/desabilita temporariamente alertas e detecções nesta câmera até o Frigate ser reiniciado. Quando desabilitado, nenhum novo item de revisão será gerado. ", + "alerts": "Alertas ", + "detections": "Detecções " + }, + "reviewClassification": { + "title": "Classificação de revisão", + "desc": "O Frigate categoriza os itens de revisão como Alertas e Detecções. Por padrão, todos os objetos pessoa e carro são considerados Alertas. Você pode refinar a categorização dos seus itens de revisão configurando zonas obrigatórias para eles.", + "noDefinedZones": "Nenhuma zona foi definida para esta câmera.", + "objectAlertsTips": "Todos os objetos {{alertsLabels}} em {{cameraName}} serão exibidos como Alertas.", + "zoneObjectAlertsTips": "Todos os objetos {{alertsLabels}} detectados em {{zone}} em {{cameraName}} serão exibidos como Alertas.", + "objectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados em {{cameraName}} serão exibidos como Detecções, independentemente da zona em que estejam.", + "zoneObjectDetectionsTips": { + "text": "Todos os objetos {{detectionsLabels}} não categorizados em {{zone}} em {{cameraName}} serão exibidos como Detecções.", + "notSelectDetections": "Todos os objetos {{detectionsLabels}} detectados em {{zone}} em {{cameraName}} que não sejam categorizados como Alertas serão exibidos como Detecções, independentemente da zona em que estejam.", + "regardlessOfZoneObjectDetectionsTips": "Todos os objetos {{detectionsLabels}} não categorizados em {{cameraName}} serão exibidos como Detecções, independentemente da zona em que estejam." + }, + "unsavedChanges": "Configurações de classificação de revisão não salvas para {{camera}}", + "selectAlertsZones": "Selecione as zonas para Alertas", + "selectDetectionsZones": "Selecione as zonas para Detecções", + "limitDetections": "Limitar detecções a zonas específicas", + "toast": { + "success": "A configuração de classificação de revisão foi salva. Reinicie o Frigate para aplicar as alterações." + } + } + }, + "maintenance": { + "sync": { + "error": "Falha ao iniciar a sincronização", + "title": "Sincronização de mídia", + "desc": "O Frigate limpará periodicamente a mídia em intervalos regulares, de acordo com a sua configuração de retenção. É normal ver alguns arquivos órfãos enquanto o Frigate está em execução. Use este recurso para remover do disco os arquivos de mídia órfãos que não são mais referenciados no banco de dados.", + "alreadyRunning": "Já existe uma sincronização em andamento", + "startTime": "Hora de início", + "started": "Sincronização de mídia iniciada.", + "currentStatus": "Status", + "jobId": "ID do trabalho", + "statusLabel": "Status", + "endTime": "Hora de término", + "results": "Resultados", + "errorLabel": "Erro", + "mediaTypes": "Tipos de mídia", + "allMedia": "Todas as mídias", + "dryRun": "Simulação", + "dryRunEnabled": "Nenhum arquivo será excluído", + "dryRunDisabled": "Os arquivos serão excluídos", + "force": "Forçar", + "forceDesc": "Ignora o limite de segurança e conclui a sincronização mesmo que mais de 50% dos arquivos sejam excluídos.", + "running": "Sincronização em andamento...", + "start": "Iniciar sincronização", + "status": { + "queued": "Na fila", + "running": "Em execução", + "completed": "Concluído", + "failed": "Falhou", + "notRunning": "Não está em execução" + }, + "inProgress": "A sincronização está em andamento. Esta página está desabilitada.", + "resultsFields": { + "filesChecked": "Arquivos verificados", + "orphansFound": "Órfãos encontrados", + "orphansDeleted": "Órfãos excluídos", + "aborted": "Abortado. A exclusão ultrapassaria o limite de segurança.", + "error": "Erro", + "totals": "Totais", + "spaceToReclaim": "Espaço a recuperar", + "spaceReclaimed": "Espaço recuperado" + }, + "event_snapshots": "Snapshots de objetos rastreados", + "event_thumbnails": "Miniaturas de objetos rastreados", + "review_thumbnails": "Miniaturas de revisão", + "previews": "Prévias", + "exports": "Exportações", + "recordings": "Gravações", + "verbose": "Detalhado", + "verboseDesc": "Grava em disco uma lista completa dos arquivos órfãos para revisão." + }, + "title": "Manutenção", + "regionGrid": { + "title": "Grade de regiões", + "desc": "A grade de regiões é uma otimização que aprende onde objetos de diferentes tamanhos costumam aparecer no campo de visão de cada câmera. O Frigate usa esses dados para dimensionar de forma eficiente as regiões de detecção. A grade é construída automaticamente ao longo do tempo a partir dos dados dos objetos rastreados.", + "clearConfirmTitle": "Limpar grade de regiões", + "clear": "Limpar grade de regiões", + "clearConfirmDesc": "Não é recomendado limpar a grade de regiões, a menos que você tenha alterado recentemente o tamanho do modelo do detector ou a posição física da câmera e esteja tendo problemas de rastreamento de objetos. A grade será reconstruída automaticamente ao longo do tempo conforme os objetos forem rastreados. É necessário reiniciar o Frigate para que as alterações tenham efeito.", + "clearSuccess": "Grade de regiões limpa com sucesso", + "clearError": "Falha ao limpar a grade de regiões", + "restartRequired": "É necessário reiniciar para que as alterações na grade de regiões tenham efeito" + } + }, + "saveAllPreview": { + "title": "Alterações a serem salvas", + "empty": "Nenhuma alteração pendente.", + "triggerLabel": "Revisar alterações pendentes", + "scope": { + "label": "Escopo", + "global": "Global", + "camera": "Câmera: {{cameraName}}" + }, + "field": { + "label": "Campo" + }, + "value": { + "label": "Novo valor", + "reset": "Redefinir" + }, + "profile": { + "label": "Perfil" + } + }, + "configForm": { + "global": { + "title": "Configurações globais", + "description": "Estas configurações se aplicam a todas as câmeras, a menos que sejam substituídas nas configurações específicas de cada câmera." + }, + "camera": { + "title": "Configurações da câmera", + "description": "Estas configurações se aplicam apenas a esta câmera e substituem as configurações globais.", + "noCameras": "Nenhuma câmera disponível" + }, + "advancedSettingsCount": "Configurações avançadas ({{count}})", + "advancedCount": "Avançado ({{count}})", + "showAdvanced": "Mostrar configurações avançadas", + "tabs": { + "sharedDefaults": "Padrões compartilhados", + "system": "Sistema", + "integrations": "Integrações" + }, + "additionalProperties": { + "keyLabel": "Chave", + "valueLabel": "Valor", + "keyPlaceholder": "Nova chave", + "remove": "Remover", + "providerNamePlaceholder": "ex.: openai", + "providerNameLabel": "Nome do provedor", + "variableNameLabel": "Nome da variável", + "variableNamePlaceholder": "ex.: MINHA_VARIAVEL", + "loggerNameLabel": "Nome do logger", + "loggerNamePlaceholder": "ex.: frigate.record", + "keyPatternError": "Use apenas letras, números, hifens e sublinhados (sem espaços)" + }, + "timezone": { + "defaultOption": "Usar fuso horário do navegador" + }, + "roleMap": { + "empty": "Nenhum mapeamento de funções", + "roleLabel": "Função", + "groupsLabel": "Grupos", + "addMapping": "Adicionar mapeamento de função", + "remove": "Remover" + }, + "ffmpegArgs": { + "preset": "Predefinição", + "manual": "Argumentos manuais", + "inherit": "Herdar da configuração da câmera", + "selectPreset": "Selecionar predefinição", + "manualPlaceholder": "Digite os argumentos do FFmpeg", + "none": "Nenhum", + "useGlobalSetting": "Herdar da configuração global", + "presetLabels": { + "preset-rpi-64-h264": "Raspberry Pi (H.264)", + "preset-vaapi": "VAAPI (GPU Intel/AMD)", + "preset-rpi-64-h265": "Raspberry Pi (H.265)", + "preset-intel-qsv-h264": "Intel QuickSync (H.264)", + "preset-intel-qsv-h265": "Intel QuickSync (H.265)", + "preset-nvidia": "GPU NVIDIA", + "preset-jetson-h264": "NVIDIA Jetson (H.264)", + "preset-jetson-h265": "NVIDIA Jetson (H.265)", + "preset-rkmpp": "Rockchip RKMPP", + "preset-http-jpeg-generic": "HTTP JPEG (Genérico)", + "preset-http-mjpeg-generic": "HTTP MJPEG (Genérico)", + "preset-rtmp-generic": "RTMP (Genérico)", + "preset-rtsp-generic": "RTSP (Genérico)", + "preset-rtsp-restream": "RTSP - Restream do go2rtc", + "preset-rtsp-restream-low-latency": "RTSP - Restream do go2rtc (baixa latência)", + "preset-rtsp-udp": "RTSP - UDP", + "preset-http-reolink": "HTTP - Câmeras Reolink", + "preset-rtsp-blue-iris": "RTSP - Blue Iris", + "preset-record-generic-audio-copy": "Gravação (Genérico + copiar áudio)", + "preset-record-generic-audio-aac": "Gravação (Genérico + áudio para AAC)", + "preset-record-generic": "Gravação (Genérico, sem áudio)", + "preset-record-jpeg": "Gravação - Câmeras JPEG", + "preset-record-ubiquiti": "Gravação - Câmeras Ubiquiti", + "preset-record-mjpeg": "Gravação - Câmeras MJPEG", + "preset-apple-silicon-h264": "Apple Silicon (H.264)", + "preset-apple-silicon-h265": "Apple Silicon (H.265)" + }, + "sameAsRecord": "Igual aos argumentos de saída da gravação" + }, + "cameraInputs": { + "itemTitle": "Stream {{index}}", + "sourceMode": { + "manual": "Caminho de entrada manual", + "go2rtcStreamLabel": "Stream do go2rtc", + "go2rtcStreamPlaceholder": "Selecione um stream do go2rtc", + "noGo2rtcStreams": "Nenhum stream do go2rtc configurado", + "go2rtcStreamSearch": "Pesquisar streams...", + "restream": "Restream (go2rtc)", + "availableStreams": "Streams disponíveis", + "noMatchingStreams": "Nenhum stream correspondente" + } + }, + "restartRequiredField": "Reinicialização necessária", + "restartRequiredFooter": "Configuração alterada - reinicialização necessária", + "sections": { + "detect": "Detecção", + "record": "Gravação", + "snapshots": "Snapshots", + "motion": "Movimento", + "objects": "Objetos", + "review": "Revisão", + "audio": "Áudio", + "notifications": "Notificações", + "live": "Visualização ao vivo", + "timestamp_style": "Carimbos de data/hora", + "mqtt": "MQTT", + "database": "Banco de dados", + "telemetry": "Telemetria", + "auth": "Autenticação", + "tls": "TLS", + "proxy": "Proxy", + "go2rtc": "go2rtc", + "ffmpeg": "FFmpeg", + "detectors": "Detectores", + "model": "Modelo", + "semantic_search": "Busca semântica", + "genai": "IA generativa", + "face_recognition": "Reconhecimento facial", + "lpr": "Reconhecimento de placas de veículos", + "birdseye": "Birdseye", + "masksAndZones": "Máscaras / Zonas" + }, + "detect": { + "title": "Configurações de detecção" + }, + "record": { + "title": "Configurações de gravação" + }, + "snapshots": { + "title": "Configurações de snapshots" + }, + "motion": { + "title": "Configurações de movimento" + }, + "objects": { + "title": "Configurações de objetos" + }, + "audioLabels": { + "summary": "{{count}} rótulos de áudio selecionados", + "empty": "Nenhum rótulo de áudio disponível" + }, + "objectLabels": { + "summary": "{{count}} tipos de objeto selecionados", + "empty": "Nenhum rótulo de objeto disponível" + }, + "filters": { + "objectFieldLabel": "{{field}} para {{label}}" + }, + "zoneNames": { + "summary": "{{count}} selecionados", + "empty": "Nenhuma zona disponível" + }, + "inputRoles": { + "summary": "{{count}} funções selecionadas", + "empty": "Nenhuma função disponível", + "options": { + "detect": "Detecção", + "record": "Gravação", + "audio": "Áudio", + "record_sub": "Gravação (substream)" + }, + "roleInUse": "Já atribuído a outro stream", + "recordSubConflict": "Um stream não pode ter as funções record e record_sub ao mesmo tempo" + }, + "review": { + "title": "Configurações de revisão" + }, + "audio": { + "title": "Configurações de áudio" + }, + "notifications": { + "title": "Configurações de notificações" + }, + "live": { + "title": "Configurações da visualização ao vivo" + }, + "timestamp_style": { + "title": "Configurações de carimbo de data/hora" + }, + "searchPlaceholder": "Pesquisar...", + "genaiRoles": { + "options": { + "embeddings": "Embedding", + "descriptions": "Descrições", + "chat": "Chat", + "transcribe": "Transcrição" + } + }, + "semanticSearchModel": { + "placeholder": "Selecionar modelo…", + "builtIn": "Modelos integrados", + "genaiProviders": "Provedores de IA generativa" + }, + "reviewLabels": { + "empty": "Nenhum rótulo disponível", + "summary": "{{count}} rótulos selecionados" + }, + "addCustomLabel": "Adicionar rótulo personalizado...", + "genaiModel": { + "placeholder": "Selecione ou digite um modelo…", + "search": "Pesquise ou digite um modelo…", + "noModels": "Nenhum modelo disponível", + "available": "Modelos disponíveis", + "useCustom": "Usar \"{{value}}\"", + "refresh": "Atualizar modelos", + "probeFailed": "Falha ao sondar os modelos", + "fetchedModels": "Lista de modelos obtida com sucesso" + }, + "knownPlates": { + "namePlaceholder": "ex.: Carro da esposa", + "platePlaceholder": "Número da placa ou regex", + "detected": "Placas detectadas", + "assignedTo": "Atribuído a {{name}}", + "noneDetected": "Nenhuma placa detectada ainda", + "useCustom": "Usar \"{{value}}\"", + "search": "Pesquise ou digite uma placa" + }, + "semanticSearchModelSize": { + "notApplicable": "Não se aplica a provedores de IA generativa" + }, + "liveStreams": { + "streamNameLabel": "Nome do stream", + "streamNamePlaceholder": "ex.: Stream principal em HD", + "go2rtcStreamPlaceholder": "Selecione um stream do go2rtc", + "go2rtcStreamSearch": "Pesquise ou digite um nome de stream…", + "go2rtcStreamLabel": "Stream do go2rtc", + "noGo2rtcStreams": "Nenhum stream do go2rtc configurado", + "availableStreams": "Streams disponíveis", + "useCustom": "Usar \"{{value}}\"", + "addStream": "Adicionar stream" + }, + "ptzPresets": { + "placeholder": "Selecione ou digite uma predefinição...", + "search": "Pesquise ou digite uma predefinição...", + "noPresets": "Nenhuma predefinição disponível", + "useCustom": "Usar \"{{value}}\"", + "available": "Predefinições da câmera" + }, + "defaultRole": { + "admin": "Administrador", + "viewer": "Visualizador", + "none": "Nenhum (negar acesso)" + }, + "birdseyeModes": { + "summary": "{{count}} selecionados", + "options": { + "continuous": "Contínua", + "motion": "Movimento", + "all_objects": "Todos os objetos", + "alerts": "Alertas", + "detections": "Detecções" + } + }, + "audioTranscriptionModel": { + "placeholder": "Selecionar modelo…", + "builtIn": "Modelos integrados", + "genaiProviders": "Provedores de IA generativa" + }, + "audioTranscriptionModelSize": { + "notApplicable": "Não se aplica a provedores de IA generativa" + } + }, + "globalConfig": { + "title": "Configuração global", + "description": "Configure as definições globais que se aplicam a todas as câmeras, a menos que sejam substituídas.", + "toast": { + "success": "Configurações globais salvas com sucesso", + "error": "Falha ao salvar as configurações globais", + "validationError": "Falha na validação" + } + }, + "cameraConfig": { + "title": "Configuração da câmera", + "description": "Configure as definições de cada câmera individualmente. As configurações substituem os padrões globais.", + "overriddenBadge": "Substituído", + "resetToGlobal": "Redefinir para o global", + "toast": { + "success": "Configurações da câmera salvas com sucesso", + "error": "Falha ao salvar as configurações da câmera" + } + }, + "toast": { + "success": "Configurações salvas com sucesso", + "successRestartRequired": "Configurações salvas com sucesso. Reinicie o Frigate para aplicar as alterações.", + "error": "Falha ao salvar as configurações", + "validationError": "Falha na validação: {{message}}", + "resetSuccess": "Redefinir para os padrões globais", + "resetError": "Falha ao redefinir as configurações", + "saveAllSuccess_one": "Salva {{count}} seção com sucesso.", + "saveAllSuccess_many": "Todas as {{count}} seções foram salvas com sucesso.", + "saveAllSuccess_other": "Todas as {{count}} seções foram salvas com sucesso.", + "saveAllPartial_one": "{{successCount}} de {{totalCount}} seção salva. {{failCount}} falharam.", + "saveAllPartial_many": "{{successCount}} de {{totalCount}} seções salvas. {{failCount}} falharam.", + "saveAllPartial_other": "{{successCount}} de {{totalCount}} seções salvas. {{failCount}} falharam.", + "saveAllFailure": "Falha ao salvar todas as seções.", + "applied": "Configurações aplicadas com sucesso", + "saveAllSuccessRestartRequired_one": "Salva {{count}} seção com sucesso. Reinicie o Frigate para aplicar as alterações.", + "saveAllSuccessRestartRequired_many": "Todas as {{count}} seções foram salvas com sucesso. Reinicie o Frigate para aplicar as alterações.", + "saveAllSuccessRestartRequired_other": "Todas as {{count}} seções foram salvas com sucesso. Reinicie o Frigate para aplicar as alterações." + }, + "unsavedChanges": "Você tem alterações não salvas", + "confirmReset": "Confirmar redefinição", + "resetToDefaultDescription": "Isto redefinirá todas as configurações desta seção para seus valores padrão. Esta ação não pode ser desfeita.", + "resetToGlobalDescription": "Isto redefinirá as configurações desta seção para os padrões globais. Esta ação não pode ser desfeita.", + "profiles": { + "title": "Perfis", + "activeProfile": "Perfil ativo", + "noActiveProfile": "Nenhum perfil ativo", + "active": "Ativo", + "activated": "Perfil '{{profile}}' ativado", + "activateFailed": "Falha ao definir o perfil", + "deactivated": "Perfil desativado", + "noProfiles": "Nenhum perfil definido.", + "noOverrides": "Nenhuma substituição", + "cameraCount_one": "{{count}} câmera", + "cameraCount_many": "{{count}} câmeras", + "cameraCount_other": "{{count}} câmeras", + "baseConfig": "Configuração base", + "addProfile": "Adicionar perfil", + "newProfile": "Novo perfil", + "profileNamePlaceholder": "ex.: Armado, Ausente, Modo noturno", + "friendlyNameLabel": "Nome do perfil", + "profileIdDescription": "Identificador interno usado na configuração e nas automações", + "profileIdLabel": "ID do perfil", + "nameInvalid": "Apenas letras minúsculas, números e sublinhados são permitidos", + "nameDuplicate": "Já existe um perfil com este nome", + "error": { + "mustBeAtLeastTwoCharacters": "Deve ter pelo menos 2 caracteres", + "mustNotContainPeriod": "Não deve conter pontos", + "alreadyExists": "Já existe um perfil com este ID" + }, + "renameProfile": "Renomear perfil", + "renameSuccess": "Perfil renomeado para '{{profile}}'", + "deleteProfile": "Excluir perfil", + "deleteSuccess": "Perfil '{{profile}}' excluído", + "createSuccess": "Perfil '{{profile}}' criado", + "removeOverride": "Remover substituição do perfil", + "deleteSection": "Excluir substituições da seção", + "deleteSectionConfirm": "Remover as substituições de {{section}} do perfil {{profile}} em {{camera}}?", + "deleteProfileConfirm": "Excluir o perfil \"{{profile}}\" de todas as câmeras? Isso não pode ser desfeito.", + "enableSwitch": "Habilitar perfis", + "deleteSectionSuccess": "Substituições de {{section}} removidas para {{profile}}", + "enabledDescription": "Os perfis estão habilitados. Crie um novo perfil abaixo, acesse uma seção de configuração da câmera para fazer as alterações e salve para que elas tenham efeito.", + "disabledDescription": "Os perfis permitem definir conjuntos nomeados de substituições da configuração das câmeras (por ex., armado, ausente, noite) que podem ser ativados sob demanda.", + "columnCamera": "Câmera", + "columnOverrides": "Substituições de perfil" + }, + "go2rtcStreams": { + "title": "Streams do go2rtc", + "description": "Gerencie as configurações de stream do go2rtc para o restreaming das câmeras. Cada stream tem um nome e uma ou mais URLs de origem.", + "addStream": "Adicionar stream", + "addStreamDesc": "Digite um nome para o novo stream. Esse nome será usado para referenciar o stream na configuração da sua câmera.", + "addUrl": "Adicionar URL", + "streamName": "Nome do stream", + "streamNamePlaceholder": "ex.: porta_da_frente", + "streamUrlPlaceholder": "ex.: rtsp://usuario:senha@192.168.1.100/stream", + "deleteStreamConfirm": "Tem certeza de que deseja excluir o stream \"{{streamName}}\"? As câmeras que fazem referência a este stream podem parar de funcionar.", + "noStreams": "Nenhum stream do go2rtc configurado. Adicione um stream para começar.", + "deleteStream": "Excluir stream", + "validation": { + "nameDuplicate": "Já existe um stream com este nome", + "nameRequired": "O nome do stream é obrigatório", + "nameInvalid": "O nome do stream só pode conter letras, números, sublinhados e hifens", + "urlRequired": "Pelo menos uma URL é obrigatória" + }, + "renameStream": "Renomear stream", + "renameStreamDesc": "Digite um novo nome para este stream. Renomear um stream pode quebrar câmeras ou outros streams que o referenciam pelo nome.", + "newStreamName": "Novo nome do stream", + "ffmpeg": { + "useFfmpegModule": "Usar modo de compatibilidade (ffmpeg)", + "audio": "Áudio", + "video": "Vídeo", + "hardware": "Aceleração de hardware", + "videoCopy": "Copiar", + "videoH264": "Transcodificar para H.264", + "videoH265": "Transcodificar para H.265", + "videoExclude": "Excluir", + "audioCopy": "Copiar", + "audioAac": "Transcodificar para AAC", + "audioOpus": "Transcodificar para Opus", + "audioPcmu": "Transcodificar para PCM μ-law", + "audioPcm": "Transcodificar para PCM", + "audioPcma": "Transcodificar para PCM A-law", + "audioMp3": "Transcodificar para MP3", + "audioExclude": "Excluir", + "hardwareNone": "Sem aceleração de hardware", + "hardwareAuto": "Automático (recomendado)", + "hardwareVaapi": "VAAPI", + "hardwareCuda": "CUDA", + "hardwareV4l2m2m": "V4L2 M2M", + "hardwareDxva2": "DXVA2", + "addVideoCodec": "Adicionar codec de vídeo", + "addAudioCodec": "Adicionar codec de áudio", + "hardwareVideotoolbox": "VideoToolbox", + "removeCodec": "Remover codec" + }, + "sourceNumber": "Origem {{index}}" + }, + "onvif": { + "profileAuto": "Automático", + "profileLoading": "Carregando perfis...", + "autotracking": { + "zooming": { + "absolute": "Absoluto", + "relative": "Relativo", + "disabled": "Desabilitado" + } + } + }, + "timestampPosition": { + "tl": "Superior esquerdo", + "bl": "Inferior esquerdo", + "tr": "Superior direito", + "br": "Inferior direito" + }, + "configMessages": { + "review": { + "recordDisabled": "A gravação está desabilitada; itens de revisão não serão gerados.", + "detectDisabled": "A detecção de objetos está desabilitada. Os itens de revisão dependem dos objetos detectados para categorizar alertas e detecções.", + "allNonAlertDetections": "Toda atividade que não seja alerta será incluída como detecção.", + "genaiImageSourceRecordingsRecordDisabled": "A fonte de imagem está definida como 'recordings', mas a gravação está desabilitada. O Frigate usará as imagens de prévia como alternativa.", + "detectRuntimeDisabled": "A detecção de objetos está habilitada na sua configuração, mas está desligada no momento para esta câmera. Os itens de revisão dependem dos objetos detectados para categorizar alertas e detecções. Ligue-a novamente na visualização ao vivo da câmera ou verifique se um perfil ativo a está desabilitando.", + "genaiImageSourceRecordingsRecordRuntimeDisabled": "A fonte de imagem está definida como 'recordings', mas a gravação está desligada no momento para esta câmera, embora a sua configuração a habilite. O Frigate usará as imagens de prévia como alternativa.", + "recordRuntimeDisabled": "A gravação está habilitada na sua configuração, mas está desligada no momento para esta câmera, portanto itens de revisão não serão gerados. Ligue-a novamente na visualização ao vivo da câmera ou verifique se um perfil ativo a está desabilitando." + }, + "audio": { + "noAudioRole": "Nenhum stream tem a função de áudio definida. Você deve habilitar a função de áudio para que a detecção de áudio funcione." + }, + "audioTranscription": { + "audioDetectionDisabled": "A detecção de áudio não está habilitada para esta câmera. A transcrição de áudio exige que a detecção de áudio esteja ativa.", + "genaiProviderSelected": "Um provedor de IA generativa está selecionado, portanto as configurações de dispositivo e de tamanho do modelo são ignoradas.", + "audioDetectionRuntimeDisabled": "A detecção de áudio está habilitada na sua configuração, mas está desligada no momento para esta câmera, portanto a transcrição de áudio não será executada. Ligue-a novamente na visualização ao vivo da câmera ou verifique se um perfil ativo a está desabilitando." + }, + "detect": { + "fpsGreaterThanFive": "Não é recomendado definir o FPS de detecção acima de 5. Valores maiores podem causar problemas de desempenho e não trazem nenhum benefício.", + "disabled": "A detecção de objetos está desabilitada. Snapshots, itens de revisão e enriquecimentos, como reconhecimento facial, reconhecimento de placas de veículos e IA generativa, não funcionarão.", + "aspectRatioMismatch": "A largura e a altura informadas não correspondem à proporção da sua resolução de detecção atual. Isso pode produzir uma imagem esticada ou distorcida.", + "resolutionShouldBeMultipleOfFour": "Para melhores resultados, a largura e a altura de detecção devem ser múltiplos de 4. Outros valores pares podem produzir artefatos visuais ou uma leve distorção no stream de detecção.", + "maxFramesSet": "Definir o máximo de quadros substitui o comportamento padrão e desabilita o rastreamento de objetos estacionários. Há pouquíssimas situações em que isso é necessário; use com cautela.", + "squareResolution": "Uma resolução de detecção quadrada é incomum. A largura e a altura de detecção devem corresponder à proporção da sua câmera (por exemplo, 16:9), e não às dimensões do modelo de detecção de objetos. Uma proporção incompatível pode esticar a imagem e reduzir a precisão da detecção.", + "resolutionHigh": "Esta resolução de detecção é maior que a recomendada e pode aumentar o uso de recursos sem melhorar a precisão da detecção. Para a maioria das câmeras, recomenda-se uma resolução de detecção igual ou inferior a 1080p.", + "globalResolutionMultipleCameras": "Há uma resolução de detecção global definida enquanto várias câmeras estão configuradas. A menos que todas as câmeras tenham a mesma resolução e proporção, a largura e a altura de detecção devem ser definidas por câmera para corresponder à proporção nativa de cada uma.", + "sceneWithoutModel": "Nenhum modelo de detecção está configurado para esta cena, então esta câmera usa como alternativa o modelo com a cena 'Todas as câmeras'. Adicione um modelo para esta cena para dar à câmera o seu próprio.", + "runtimeDisabled": "A detecção de objetos está habilitada na sua configuração, mas está desligada no momento para esta câmera. Snapshots, itens de revisão e enriquecimentos, como reconhecimento facial, reconhecimento de placas de veículos e IA generativa, não funcionarão até que ela seja ligada novamente na visualização ao vivo da câmera ou até que o perfil ativo deixe de desabilitá-la." + }, + "faceRecognition": { + "globalDisabled": "O enriquecimento de reconhecimento facial deve estar habilitado para que os recursos de reconhecimento facial funcionem nesta câmera.", + "personNotTracked": "O reconhecimento facial exige que o objeto 'person' seja rastreado. Habilite 'person' em Objetos para esta câmera.", + "modelSizeLarge": "O modelo 'large' exige uma GPU ou NPU para ter um desempenho razoável. Use 'small' em sistemas somente com CPU." + }, + "lpr": { + "globalDisabled": "O enriquecimento de reconhecimento de placas de veículos deve estar habilitado para que os recursos de LPR funcionem nesta câmera.", + "vehicleNotTracked": "O reconhecimento de placas de veículos exige que um veículo seja rastreado. Habilite 'car' ou outro tipo de veículo em Objetos para esta câmera.", + "modelSizeLarge": "O modelo 'large' é otimizado para placas de várias linhas. O modelo 'small' oferece melhor desempenho que o 'large' e deve ser usado, a menos que a sua região utilize formatos de placa de várias linhas." + }, + "record": { + "noRecordRole": "Nenhum stream tem a função de gravação definida. A gravação não funcionará.", + "noRecordSubRole": "Nenhum stream tem a função record_sub definida. A gravação do substream não funcionará." + }, + "snapshots": { + "detectDisabled": "A detecção de objetos está desabilitada. Os snapshots são gerados a partir de objetos rastreados e não serão criados.", + "detectRuntimeDisabled": "A detecção de objetos está habilitada na sua configuração, mas está desligada no momento para esta câmera, portanto snapshots não serão criados. Ligue-a novamente na visualização ao vivo da câmera ou verifique se um perfil ativo a está desabilitando." + }, + "objects": { + "genaiNoDescriptionsProvider": "Você deve configurar um provedor de IA generativa com a função 'descriptions' para que as descrições sejam geradas." + }, + "semanticSearch": { + "jinav2SmallModelSize": "O tamanho 'small' com o modelo Jina V2 tem alto custo de RAM e de inferência. Recomenda-se o modelo 'large' com uma GPU dedicada." + }, + "onvif": { + "autotrackingNoZones": "O rastreamento automático exige pelo menos uma zona. Defina uma zona para esta câmera em Máscaras / Zonas e, em seguida, defina-a como zona obrigatória abaixo." + }, + "ffmpeg": { + "hwaccelManualNotRecommended": "Argumentos manuais de aceleração de hardware não são recomendados. A menos que haja uma necessidade específica, selecione a predefinição que corresponde ao seu hardware.", + "inputsMissingGo2rtcStream": "Uma das entradas abaixo aponta para um restream do go2rtc que não existe mais. Selecione um restream existente ou insira manualmente a URL da câmera; caso contrário, esta câmera não conseguirá se conectar." + }, + "model": { + "optimizedFor320": "O Frigate é otimizado para um modelo 320x320, que é a melhor escolha para a maioria das configurações. Um modelo 640x640 é mais lento e só ajuda em cenários específicos.", + "inputDimensionsNotDetectResolution": "A largura e a altura de entrada do modelo são as dimensões de entrada do modelo de detecção de objetos, não a resolução de detecção da sua câmera. Elas devem corresponder às dimensões do modelo que você está usando — normalmente um tamanho quadrado, como 320x320 ou 640x640." + }, + "birdseye": { + "objectTrackingDetectDisabled": "O Birdseye inclui objetos rastreados, mas a detecção de objetos está desabilitada para esta câmera. A câmera não aparecerá no Birdseye.", + "objectTrackingDetectRuntimeDisabled": "O Birdseye inclui objetos rastreados, mas a detecção de objetos está desligada no momento para esta câmera, embora a sua configuração a habilite. A câmera não aparecerá no Birdseye até que ela seja ligada novamente na visualização ao vivo da câmera ou até que o perfil ativo deixe de desabilitá-la." + } + }, + "ui": { + "timeFormat": { + "browser": "Navegador", + "12hour": "12 horas", + "24hour": "24 horas" + }, + "unitSystem": { + "metric": "Métrico", + "imperial": "Imperial" + } + }, + "review": { + "imageSource": { + "recordings": "Gravações", + "previews": "Prévias" + }, + "frameMode": { + "annotated_frames": "Quadros anotados", + "frames": "Quadros" + } + }, + "logger": { + "logLevel": { + "debug": "Depuração", + "info": "Informação", + "warning": "Aviso", + "error": "Erro", + "critical": "Crítico" + } + }, + "modelSize": { + "large": "Grande", + "small": "Pequeno" + }, + "retainMode": { + "all": "Todos", + "motion": "Movimento", + "active_objects": "Objetos ativos" + }, + "previewQuality": { + "very_high": "Muito alta", + "high": "Alta", + "medium": "Média", + "low": "Baixa", + "very_low": "Muito baixa" + }, + "birdseye": { + "cameraOrder": { + "label": "Ordem das câmeras", + "description": "Arraste as câmeras para definir a ordem delas no layout do Birdseye.", + "reorderHandle": "Arraste para reordenar", + "saving": "Salvando…", + "saved": "Salvo" + } + }, + "detectionModels": { + "title": "Modelos de detecção", + "description": "Configure os modelos de detecção de objetos e o hardware em que cada um é executado. As câmeras escolhem um modelo pela cena definida nas configurações de detecção da câmera.", + "addModel": "Adicionar modelo", + "cameras_one": "{{count}} câmera", + "cameras_many": "{{count}} câmeras", + "cameras_other": "{{count}} câmeras", + "scene": { + "label": "Cena", + "description": "O ambiente para o qual este modelo se destina. As câmeras escolhem um modelo definindo a mesma cena nas suas configurações de detecção, e o modelo com a cena all é usado por qualquer câmera que não defina uma." + }, + "scenes": { + "all": "Todas as câmeras", + "indoor": "Interno", + "outdoor": "Externo", + "indoor_thermal": "Térmica interna", + "outdoor_thermal": "Térmica externa" + }, + "hardware": { + "label": "Hardware", + "placeholder": "Selecionar hardware", + "loading": "Procurando hardware de detecção...", + "none": "Nenhum hardware selecionado", + "claimedBy": "usado por {{scene}}", + "detectorCount": "Detectores", + "countRecommended_one": "Recomendado para {{count}} câmera", + "countRecommended_many": "Recomendado para {{count}} câmeras", + "countRecommended_other": "Recomendado para {{count}} câmeras", + "description": "O hardware no qual este modelo executa a detecção.", + "unrecognized": "Este modelo está configurado para um hardware que não foi encontrado neste sistema: {{devices}}", + "unitsDescription": "Cada unidade executa o seu próprio processo de detecção. Uma unidade já usada por outro modelo não pode ser selecionada.", + "detectorCountDescription": "Quantos processos de detecção executar neste hardware. Mais detectores acompanham mais câmeras, ao custo de memória adicional do dispositivo." + }, + "tabs": { + "plus": "Frigate+", + "custom": "Modelo personalizado" + }, + "plusModel": { + "noModelSelected": "Selecione um modelo do Frigate+" + } } } diff --git a/web/public/locales/pt-BR/views/system.json b/web/public/locales/pt-BR/views/system.json index eca725ba5b..1eeebf4847 100644 --- a/web/public/locales/pt-BR/views/system.json +++ b/web/public/locales/pt-BR/views/system.json @@ -9,7 +9,8 @@ "go2rtc": "Registros GoRTC - Frigate", "nginx": "Registros Nginx - Frigate", "websocket": "Registros de Mensagem - Frigate" - } + }, + "health": "Saúde - Frigate" }, "title": "Sistema", "metrics": "Métricas do sistema", @@ -51,9 +52,16 @@ "camera_activity": "Atividade da câmera", "system": "Sistema", "camera": "Câmera", - "all_cameras": "Todas as cameras" + "all_cameras": "Todas as cameras", + "cameras_count_one": "{{count}} câmera", + "cameras_count_other": "{{count}} câmeras" }, - "empty": "Nenhuma mensagem capturada ainda" + "empty": "Nenhuma mensagem capturada ainda", + "expanded": { + "payload": "Payload" + }, + "count_one": "{{count}} mensagem", + "count_other": "{{count}} mensagens" } }, "general": { @@ -97,12 +105,22 @@ } }, "npuUsage": "Uso da NPU", - "npuMemory": "Memória da NPU" + "npuMemory": "Memória da NPU", + "gpuTemperature": "Temperatura da GPU", + "npuTemperature": "Temperatura da NPU", + "gpuCompute": "Computação / codificação da GPU" }, "otherProcesses": { "title": "Outros processos", "processCpuUsage": "Uso de Processamento da CPU", - "processMemoryUsage": "Uso de Memória de Processos" + "processMemoryUsage": "Uso de Memória de Processos", + "series": { + "go2rtc": "go2rtc", + "review_segment": "segmento de revisão", + "embeddings": "embeddings", + "recording": "gravação", + "audio_detector": "detector de áudio" + } } }, "storage": { @@ -123,11 +141,19 @@ "unused": { "title": "Não Utilizado", "tips": "Esse valor por não representar com precisão o espaço livre disponí®el para o Frigate se você possui outros arquivos armazenados no seu drive além das gravações do Frigate. O Frigate não rastreia a utilização do armazenamento além de suas próprias gravações." + }, + "subStream": { + "information": "Informações de armazenamento do substream", + "tips": "As câmeras que gravam um substream mostram o uso de Original e de Baixa qualidade separadamente, usando os mesmos nomes das opções de qualidade na reprodução de gravações. As gravações de baixa qualidade permanecem no disco até o fim do período de retenção, portanto esse detalhamento ainda pode aparecer para uma câmera depois que a gravação do substream for desativada." } }, "shm": { "title": "Alocação de memória compartilhada (SHM)", - "warning": "O tamanho de {{total}}MB de memória compartilhada (SHM) é insuficiente. Aumente para ao menos {{min_shm}}MB." + "warning": "O tamanho de {{total}}MB de memória compartilhada (SHM) é insuficiente. Aumente para ao menos {{min_shm}}MB.", + "frameLifetime": { + "title": "Vida útil do quadro", + "description": "Cada câmera tem {{frames}} slots de quadros na memória compartilhada. Na taxa de quadros da câmera mais rápida, cada quadro fica disponível por aproximadamente {{lifetime}}s antes de ser sobrescrito." + } } }, "cameras": { @@ -148,6 +174,23 @@ "error": "Erro: {{error}}", "tips": { "title": "Informação de Probe de Câmera" + }, + "keyframes": { + "title": "Análise de keyframes", + "stillAnalyzing": "Ainda analisando keyframes...", + "analyzing": "Analisando keyframes... {{seconds}} segundos restantes", + "recordStream": "Stream de gravação:", + "keyframeCount": "Keyframes observados:", + "observedDuration": "Duração observada:", + "segmentLength": "Duração do segmento de gravação:", + "ok": "Keyframes a cada ~{{seconds}}s, bom para gravação e reprodução.", + "unknown": "Não foi possível determinar o espaçamento dos keyframes.", + "recordDisabled": "A gravação está desabilitada para esta câmera.", + "gap": "Intervalo entre keyframes (mín. / méd. / máx.):", + "warningFixed": "Os keyframes estão espaçados de forma regular, mas esparsa (a cada ~{{seconds}}s). A gravação ainda funciona, mas a reprodução ao vivo e a busca começam mais lentamente. Defina o intervalo de quadros I (keyframe) da câmera para corresponder à sua taxa de quadros.", + "errorFixed": "Keyframes a cada ~{{seconds}}s é mais longo que a duração do segmento de gravação ({{segmentTime}}s), então alguns segmentos não têm keyframe e não serão reproduzidos. Reduza o intervalo de quadros I (keyframe) da câmera para corresponder à sua taxa de quadros.", + "errorVariable": "Os intervalos entre keyframes chegam a ~{{seconds}}s, mais longos que a duração do segmento de gravação ({{segmentTime}}s). Alguns segmentos não terão keyframe, o que interrompe a reprodução. Desative o codec inteligente/+ da câmera ou reduza o intervalo de keyframes dela.", + "warningVariable": "O espaçamento dos keyframes é inconsistente ({{minSeconds}}s a {{maxSeconds}}s), o que geralmente significa que um codec inteligente (H.264+/H.265+) está habilitado. Isso não é recomendado." } }, "framesAndDetections": "Quadros / Detecções", @@ -165,7 +208,8 @@ "cameraDetect": "{{camName}} detectar", "cameraFramesPerSecond": "{{camName}} quadros por segundo", "cameraDetectionsPerSecond": "{{camName}} detecções por segundo", - "cameraSkippedDetectionsPerSecond": "{{camName}} detecções puladas por segundo" + "cameraSkippedDetectionsPerSecond": "{{camName}} detecções puladas por segundo", + "cameraGpu": "GPU de {{camName}}" }, "toast": { "success": { @@ -174,17 +218,36 @@ "error": { "unableToProbeCamera": "Não foi possível fazer o probe da câmera: {{errorMessage}}" } + }, + "connectionQuality": { + "title": "Qualidade da conexão", + "excellent": "Excelente", + "fair": "Razoável", + "poor": "Ruim", + "unusable": "Inutilizável", + "expectedFps": "FPS esperado", + "fps": "FPS", + "stallsLastHour": "Travamentos (última hora)", + "reconnectsLastHour": "Reconexões (última hora)" + }, + "noCameras": { + "title": "Nenhuma câmera encontrada" } }, "lastRefreshed": "Atualizado pela última vez: ", "stats": { "detectIsVerySlow": "{{detect}} está muito lento ({{speed}} ms)", - "ffmpegHighCpuUsage": "{{camera}} possui alta utilização de CPU para FFmpeg ({{ffmpegAvg}}%)", - "detectHighCpuUsage": "{{camera}} possui alta utilização de CPU para detecção ({{detectAvg}}%)", "healthy": "O sistema está saudável", "cameraIsOffline": "{{camera}} está offline", "reindexingEmbeddings": "Reindexando os embeddings ({{processed}}% completado)", - "detectIsSlow": "{{detect}} está lento ({{speed}} ms)" + "detectIsSlow": "{{detect}} está lento ({{speed}} ms)", + "debugReplayActive": "A sessão de replay de depuração está ativa", + "cameraSkippedDetections": "{{camera}} está ignorando a detecção em {{pct}}% dos quadros", + "systemNotices_one": "{{count}} aviso do sistema", + "systemNotices_other": "{{count}} avisos do sistema", + "retentionUnmet": "As gravações estão sendo excluídas antes do fim do período de retenção para liberar espaço", + "moreMessages_one": "+{{count}}", + "moreMessages_other": "+{{count}}" }, "enrichments": { "title": "Enriquecimentos", @@ -200,7 +263,113 @@ "text_embedding": "Embeddings de Texto", "image_embedding_speed": "Velocidade de Embeddings de Imagens", "face_embedding_speed": "Velocidade de Embedding de Rostos", - "face_recognition_speed": "Velocidade de Reconhecimento de Rostos" + "face_recognition_speed": "Velocidade de Reconhecimento de Rostos", + "object_description_events_per_second": "Descrição de objeto", + "classification_speed": "Velocidade de classificação de {{name}}", + "classification": "Classificação de {{name}}", + "review_description_speed": "Velocidade da descrição de revisão", + "review_description": "Descrição de revisão", + "review_description_events_per_second": "Descrição de revisão", + "object_description": "Descrição de objeto", + "object_description_speed": "Velocidade da descrição de objeto", + "classification_events_per_second": "Eventos por segundo de classificação de {{name}}" + }, + "averageInf": "Tempo médio de inferência" + }, + "health": { + "title": "Saúde", + "notices": { + "empty": "Sua instalação do Frigate está saudável", + "openSettings": "Abrir configurações", + "openLink": "Abrir link", + "noMatches": "Nenhum aviso corresponde ao filtro", + "firstSeen_one": "Visto pela primeira vez {{time}}", + "title": "Avisos", + "filter": { + "severity": "Gravidade", + "error": "Erro", + "info": "Informação", + "warning": "Aviso", + "showHidden": "Mostrar ocultos" + }, + "firstSeen_other": "Visto pela primeira vez {{time}} · {{count}} vezes", + "kinds": { + "detector_stuck": "O detector {{detector}} foi reiniciado depois de parar de responder", + "model_download_failed": "Falha ao baixar {{file}} para {{model}}: {{error}}", + "skipped_detections": "A detecção não conseguiu acompanhar e ignorou {{pct}}% dos quadros por mais de um minuto", + "shm_too_low": "A alocação de /dev/shm ({{total}} MB) deve ser aumentada para pelo menos {{min}} MB", + "failed_login_other": "Tentativas de login malsucedidas para {{user}}", + "failed_login_one": "Tentativa de login malsucedida para {{user}}", + "update_available": "O Frigate {{version}} está disponível", + "ffmpeg_high_cpu": "O uso de CPU do FFmpeg está alto ({{cpu}}% em média)", + "detect_high_cpu": "O uso de CPU da detecção está alto ({{cpu}}% em média)" + }, + "streamPrefix": "Stream {{index}}: {{message}}", + "streamPrefixRestream": "Stream {{index}} (via go2rtc): {{message}}", + "streamProbeFailed": "Não foi possível sondar o stream {{index}}: {{error}}", + "cameraProbeFailed": "Não foi possível sondar os streams: {{error}}", + "acknowledge": "Confirmar leitura", + "mute": "Silenciar", + "acknowledgeHint": "Ocultar até que isso aconteça novamente", + "muteHint": "Nunca mostrar isto novamente", + "showAgain": "Mostrar novamente", + "unmute": "Reativar som", + "hiddenTitle": "Oculto", + "noneHidden": "Nenhum aviso oculto", + "showAll": "Mostrar todos novamente", + "showAllTitle": "Mostrar todos os avisos ocultos?", + "acknowledgedAt": "Confirmado {{time}}", + "showAllDesc": "Todos os avisos confirmados e silenciados voltam para a lista de Avisos, incluindo as verificações de configuração e de streams.", + "mutedAt": "Silenciado {{time}}" + }, + "hardware": { + "title": "Hardware", + "objectDetection": "Detecção de objetos", + "hardwareAcceleration": "Aceleração de hardware", + "enrichments": { + "title": "Enriquecimentos", + "face_recognition": "Reconhecimento facial", + "lpr": "Reconhecimento de placas de veículos", + "audio_transcription": "Transcrição de áudio", + "semantic_search": "Busca semântica" + }, + "cameraConnections": "Conexões das câmeras", + "allCamerasExcellent": "Todas as câmeras têm uma conexão excelente.", + "fps": "{{camera}} / {{expected}} fps", + "allCameras": "Todas as câmeras", + "probeUnavailable": "A detecção de hardware não está disponível", + "justStarted": "O Frigate acabou de iniciar", + "deviceNotFound": "{{devices}} não foi encontrado neste sistema", + "detectorNotRunning": "O processo do detector não está em execução", + "inferenceVerySlow": "A inferência está muito lenta ({{speed}} ms)", + "nothingConfigured": "Nada configurado", + "inferenceMs": "{{speed}} ms", + "customArgs": "Argumentos personalizados do ffmpeg", + "customArgsNotVerified": "Argumentos personalizados do ffmpeg, não verificados", + "inferenceSlow": "A inferência está lenta ({{speed}} ms)", + "hwaccelHardwareMissing": "{{family}} está configurado, mas a sondagem de hardware não o reportou", + "unrecognizedDevice": "Substituição de dispositivo não reconhecida, não verificada", + "decoderUsage": "decodificador {{usage}}", + "remoteProvider": "Provedor remoto", + "hwaccelNotConfigured": "Nenhuma decodificação por hardware está em uso, mas {{family}} está disponível. Selecione-o nas configurações do ffmpeg", + "acceleratorMissing": "Configurado para {{device}}, mas nenhum acelerador compatível foi encontrado", + "fellBackToCpu": "Configurado para {{device}}, mas executando na CPU", + "modelNotRunYet": "O modelo ainda não foi executado; o dispositivo é verificado após o primeiro uso", + "probed": "Sondado", + "probing": "Sondando...", + "cpuDespiteAccelerator": "Executando na CPU, embora haja um acelerador disponível", + "recheck": "Verificar hardware novamente", + "cameraStreams": "Streams das câmeras", + "streamsNotChecked": "Ainda não verificado", + "streamsChecking": "Verificando {{done}} de {{total}}", + "streamsClean": "Nenhum problema nos streams", + "runAgain": "Executar novamente", + "checked": "Verificado", + "runStreamChecks": "Executar verificações dos streams", + "streamsChecked_other": "{{count}} câmeras verificadas", + "streamsFlagged_one": "{{count}} com problemas, listado(s) em Avisos", + "streamsFlagged_other": "{{count}} com problemas, listado(s) em Avisos", + "streamsChecked_one": "{{count}} câmera verificada" } } }