diff --git a/web/public/locales/pt/audio.json b/web/public/locales/pt/audio.json
new file mode 100644
index 000000000..350dc155b
--- /dev/null
+++ b/web/public/locales/pt/audio.json
@@ -0,0 +1,150 @@
+{
+ "babbling": "Balbuciando",
+ "speech": "Discurso",
+ "whoop": "Gritar",
+ "bellow": "Abaixo",
+ "yell": "Gritar",
+ "whispering": "Sussurando",
+ "child_singing": "Criança Cantando",
+ "crying": "Chorando",
+ "singing": "Cantando",
+ "laughter": "Risada",
+ "breathing": "Respirando",
+ "applause": "Aplausos",
+ "meow": "Miau",
+ "run": "Corrida",
+ "sheep": "Ovelha",
+ "motorcycle": "Motocicleta",
+ "car": "Carro",
+ "cat": "Gato",
+ "horse": "Cavalo",
+ "bus": "Ônibus",
+ "boat": "Barco",
+ "bicycle": "Bicicleta",
+ "skateboard": "Skate",
+ "door": "Porta",
+ "bird": "Pássaro",
+ "train": "Trem",
+ "dog": "Cão",
+ "mantra": "Mantra",
+ "humming": "Cantarolando",
+ "sigh": "Suspiro",
+ "grunt": "Grunhido",
+ "whistling": "Assobio",
+ "wheeze": "Chiado",
+ "gasp": "Suspiro",
+ "cough": "Tosse",
+ "sneeze": "Espirro",
+ "footsteps": "Passos",
+ "chewing": "Mastigação",
+ "biting": "Morder",
+ "gargling": "Gargarejar",
+ "stomach_rumble": "Ronco no estômago",
+ "burping": "Arroto",
+ "hiccup": "Soluço",
+ "fart": "Peido",
+ "hands": "Mãos",
+ "finger_snapping": "Estalo de dedos",
+ "clapping": "Aplausos",
+ "heartbeat": "Batimento cardíaco",
+ "heart_murmur": "Sopro cardíaco",
+ "cheering": "Torcendo",
+ "chatter": "Conversa fiada",
+ "crowd": "Multidão",
+ "snoring": "Ronco",
+ "choir": "Coro",
+ "yodeling": "Yodeling",
+ "chant": "Canto",
+ "synthetic_singing": "Canto sintético",
+ "rapping": "Rapping",
+ "groan": "Gemido",
+ "snicker": "Risada",
+ "animal": "Animal",
+ "pets": "Animais de estimação",
+ "bark": "Latido",
+ "howl": "Uivo",
+ "bow_wow": "Au au",
+ "growling": "Rosnando",
+ "whimper_dog": "Cachorro choramingando",
+ "pig": "Porco",
+ "goat": "Bode",
+ "fowl": "Galinha",
+ "chicken": "Galinha",
+ "turkey": "Peru",
+ "duck": "Pato",
+ "quack": "Quac",
+ "goose": "Ganso",
+ "wild_animals": "Animais selvagens",
+ "pigeon": "Pombo",
+ "dogs": "Cachorros",
+ "insect": "Inseto",
+ "cricket": "Grilo",
+ "mosquito": "Mosquito",
+ "fly": "Mosca",
+ "frog": "Sapo",
+ "snake": "Cobra",
+ "rattle": "Chocalho",
+ "music": "Música",
+ "musical_instrument": "Instrumento musical",
+ "banjo": "Banjo",
+ "keyboard": "Teclado",
+ "piano": "Piano",
+ "organ": "Órgão",
+ "synthesizer": "Sintetizador",
+ "tambourine": "Pandeiro",
+ "clarinet": "Clarinete",
+ "harp": "Harpa",
+ "psychedelic_rock": "Rock psicodélico",
+ "waterfall": "Cachoeira",
+ "ocean": "Oceano",
+ "fire": "Fogo",
+ "ship": "Navio",
+ "car_alarm": "Alarme de carro",
+ "race_car": "Carro de corrida",
+ "truck": "Caminhão",
+ "ice_cream_truck": "Caminhão do sorvete",
+ "emergency_vehicle": "Veículo de emergência",
+ "police_car": "Carro da polícia",
+ "ambulance": "Ambulância",
+ "helicopter": "Helicóptero",
+ "engine": "Motor",
+ "coin": "Moeda",
+ "scissors": "Tesoura",
+ "electric_shaver": "Barbeador elétrico",
+ "computer_keyboard": "Teclado de computador",
+ "alarm": "Alarme",
+ "telephone": "Telefone",
+ "siren": "Sirene",
+ "smoke_detector": "Detector de fumaça",
+ "fire_alarm": "Alarme de incêndio",
+ "whistle": "Assobio",
+ "clock": "Relógio",
+ "tools": "Ferramentas",
+ "camera": "Câmera",
+ "chink": "Fenda",
+ "sound_effect": "Efeito sonoro",
+ "static": "Estático",
+ "pink_noise": "Ruído rosa",
+ "television": "Televisão",
+ "scream": "Grito",
+ "glass": "Vidro",
+ "wood": "Madeira",
+ "crack": "Rachadura",
+ "silence": "Silêncio",
+ "steam": "Vapor",
+ "progressive_rock": "Rock progressivo",
+ "white_noise": "Ruído branco",
+ "maraca": "Maraca",
+ "percussion": "Percussão",
+ "rats": "Ratos",
+ "oink": "Oinc",
+ "waves": "Ondas",
+ "shatter": "Quebrar",
+ "radio": "Rádio",
+ "splinter": "Lasca",
+ "owl": "Coruja",
+ "mouse": "Rato",
+ "vehicle": "Veículo",
+ "hair_dryer": "Secador de cabelo",
+ "toothbrush": "Escova de dentes"
+}
diff --git a/web/public/locales/pt/common.json b/web/public/locales/pt/common.json
new file mode 100644
index 000000000..263b84731
--- /dev/null
+++ b/web/public/locales/pt/common.json
@@ -0,0 +1,175 @@
+{
+ "time": {
+ "last30": "Últimos 30 dias",
+ "12hours": "12 horas",
+ "justNow": "Agora",
+ "yesterday": "Ontem",
+ "today": "Hoje",
+ "last7": "Últimos 7 dias",
+ "last14": "Últimos 14 dias",
+ "thisWeek": "Essa semana",
+ "lastWeek": "Semana passada",
+ "5minutes": "5 minutos",
+ "10minutes": "10 minutos",
+ "30minutes": "30 minutos",
+ "24hours": "24 horas",
+ "pm": "pm",
+ "am": "am",
+ "year": "{{time}} anos",
+ "month": "{{time}} meses",
+ "day": "{{time}} dias",
+ "thisMonth": "Esse mês",
+ "lastMonth": "Mês passado",
+ "1hour": "1 hora",
+ "hour": "{{time}} horas",
+ "minute": "{{time}} minutos",
+ "second": "{{time}} segundos",
+ "untilForTime": "Até {{time}}",
+ "untilForRestart": "Até que o Frigate reinicie.",
+ "untilRestart": "Até reiniciar",
+ "ago": "{{timeAgo}} atrás",
+ "d": "{{time}}d",
+ "h": "{{time}}h",
+ "m": "{{time}}m",
+ "s": "{{time}}s",
+ "yr": "{{time}}ano",
+ "mo": "{{time}}mês"
+ },
+ "unit": {
+ "speed": {
+ "kph": "kph",
+ "mph": "mph"
+ }
+ },
+ "button": {
+ "enabled": "Habilitado",
+ "enable": "Habilitar",
+ "done": "Feito",
+ "reset": "Reiniciar",
+ "disabled": "Desabilitado",
+ "saving": "Salvando...",
+ "apply": "Aplicar",
+ "disable": "Desabilitar",
+ "save": "Salvar",
+ "copy": "Cópia",
+ "cancel": "Cancelar",
+ "close": "Fechar",
+ "history": "Histórico",
+ "back": "Voltar",
+ "fullscreen": "Tela cheia",
+ "exitFullscreen": "Sair da tela cheia",
+ "twoWayTalk": "Conversa bidirecional",
+ "cameraAudio": "Áudio da câmera",
+ "edit": "Editar",
+ "off": "DESLIGADO",
+ "copyCoordinates": "Copiar coordenadas",
+ "on": "LIGADO",
+ "delete": "Excluir",
+ "download": "Download",
+ "info": "Informações",
+ "no": "Não",
+ "suspended": "Suspenso",
+ "yes": "Sim",
+ "unselect": "Desmarcar",
+ "unsuspended": "Dessuspender",
+ "deleteNow": "Excluir agora",
+ "export": "Exportar",
+ "next": "Próximo"
+ },
+ "label": {
+ "back": "Voltar"
+ },
+ "menu": {
+ "user": {
+ "logout": "Sair",
+ "account": "Conta",
+ "current": "Usuário atual: {{user}}",
+ "setPassword": "Definir senha",
+ "title": "Usuário",
+ "anonymous": "anônimo"
+ },
+ "faceLibrary": "Biblioteca de rostos",
+ "withSystem": "Sistema",
+ "theme": {
+ "label": "Tema",
+ "blue": "Azul",
+ "green": "Verde",
+ "red": "Vermelho",
+ "contrast": "Alto contraste",
+ "default": "Padrão"
+ },
+ "system": "Sistema",
+ "systemMetrics": "Métricas do sistema",
+ "configuration": "Configuração",
+ "systemLogs": "Logs do sistema",
+ "settings": "Configurações",
+ "configurationEditor": "Editor de configuração",
+ "languages": "Idiomas",
+ "language": {
+ "en": "Inglês",
+ "zhCN": "Chinês simplificado",
+ "withSystem": {
+ "label": "Use as configurações do sistema para idioma"
+ }
+ },
+ "appearance": "Aparência",
+ "darkMode": {
+ "label": "Modo escuro",
+ "withSystem": {
+ "label": "Use as configurações do sistema para o modo claro ou escuro"
+ },
+ "light": "Claro",
+ "dark": "Escuro"
+ },
+ "help": "Ajuda",
+ "documentation": {
+ "title": "Documentação",
+ "label": "Documentação do Frigate"
+ },
+ "restart": "Reiniciar Frigate",
+ "live": {
+ "title": "Ao vivo",
+ "allCameras": "Todas as câmeras",
+ "cameras": {
+ "title": "Câmeras"
+ }
+ },
+ "export": "Exportar",
+ "explore": "Explorar",
+ "review": "Análise"
+ },
+ "pagination": {
+ "previous": {
+ "label": "Ir para a página anterior",
+ "title": "Anterior"
+ },
+ "label": "paginação",
+ "next": {
+ "title": "Próximo",
+ "label": "Ir para a próxima página"
+ },
+ "more": "Mais páginas"
+ },
+ "role": {
+ "admin": "Administrador",
+ "viewer": "Visualizador",
+ "title": "Regra"
+ },
+ "toast": {
+ "copyUrlToClipboard": "URL copiada para a área de transferência.",
+ "save": {
+ "title": "Salvar"
+ }
+ },
+ "accessDenied": {
+ "documentTitle": "Acesso negado - Frigate",
+ "title": "Acesso negado",
+ "desc": "Você não tem permissão para visualizar esta página."
+ },
+ "notFound": {
+ "documentTitle": "Não encontrado - Frigate",
+ "desc": "Página não encontrada",
+ "title": "404"
+ },
+ "selectItem": "Selecionar {{item}}"
+}
diff --git a/web/public/locales/pt/components/auth.json b/web/public/locales/pt/components/auth.json
new file mode 100644
index 000000000..805775365
--- /dev/null
+++ b/web/public/locales/pt/components/auth.json
@@ -0,0 +1,15 @@
+{
+ "form": {
+ "user": "Nome de usuário",
+ "login": "Login",
+ "errors": {
+ "usernameRequired": "Nome de usuário é obrigatório",
+ "passwordRequired": "Senha é necessária",
+ "rateLimit": "Limite de taxa excedido. Tente novamente mais tarde.",
+ "loginFailed": "Falha no login",
+ "unknownError": "Erro desconhecido. Verifique os logs.",
+ "webUnknownError": "Erro desconhecido. Verifique os logs do console."
+ },
+ "password": "Senha"
+ }
+}
diff --git a/web/public/locales/pt/components/camera.json b/web/public/locales/pt/components/camera.json
new file mode 100644
index 000000000..8e247f602
--- /dev/null
+++ b/web/public/locales/pt/components/camera.json
@@ -0,0 +1,83 @@
+{
+ "group": {
+ "label": "Grupos de câmeras",
+ "add": "Adicionar grupo de câmeras",
+ "edit": "Editar grupo de câmeras",
+ "delete": {
+ "label": "Excluir grupo de câmeras",
+ "confirm": {
+ "title": "Confirmar exclusão",
+ "desc": "Tem certeza de que deseja excluir o grupo de câmeras {{name}}?"
+ }
+ },
+ "name": {
+ "label": "Nome",
+ "placeholder": "Digite um nome...",
+ "errorMessage": {
+ "exists": "O nome do grupo de câmeras já existe.",
+ "nameMustNotPeriod": "O nome do grupo de câmeras não deve conter ponto.",
+ "mustLeastCharacters": "O nome do grupo de câmeras deve ter pelo menos 2 caracteres.",
+ "invalid": "Nome de grupo de câmeras inválido."
+ }
+ },
+ "cameras": {
+ "desc": "Selecione câmeras para este grupo.",
+ "label": "Câmeras"
+ },
+ "icon": "Ícone",
+ "success": "O grupo de câmeras ({{name}}) foi salvo.",
+ "camera": {
+ "setting": {
+ "audioIsAvailable": "O áudio está disponível para esta transmissão",
+ "audioIsUnavailable": "O áudio não está disponível para esta transmissão",
+ "audio": {
+ "tips": {
+ "document": "Leia a documentação ",
+ "title": "O áudio deve ser emitido pela sua câmera e configurado no go2rtc para esta transmissão."
+ }
+ },
+ "streamMethod": {
+ "label": "Método de transmissão",
+ "method": {
+ "smartStreaming": {
+ "label": "Transmissão inteligente (recomendado)",
+ "desc": "A transmissão inteligente atualizará a imagem da sua câmera uma vez por minuto quando nenhuma atividade detectável estiver ocorrendo para conservar largura de banda e recursos. Quando a atividade é detectada, a imagem muda perfeitamente para uma transmissão ao vivo."
+ },
+ "continuousStreaming": {
+ "label": "Transmissão contínua",
+ "desc": {
+ "warning": "A transmissão contínua pode causar alto uso de largura de banda e problemas de desempenho. Use com cautela.",
+ "title": "A imagem da câmera sempre será uma transmissão ao vivo quando visível no painel, mesmo que nenhuma atividade esteja sendo detectada."
+ }
+ },
+ "noStreaming": {
+ "label": "Sem transmissão",
+ "desc": "As imagens da câmera serão atualizadas apenas uma vez por minuto e não haverá transmissão ao vivo."
+ }
+ }
+ },
+ "compatibilityMode": {
+ "label": "Modo de compatibilidade",
+ "desc": "Habilite esta opção somente se a transmissão ao vivo da sua câmera estiver exibindo artefatos de cor e tiver uma linha diagonal no lado direito da imagem."
+ },
+ "label": "Configurações de transmissão da câmera",
+ "desc": "Altere as opções de transmissão ao vivo para o painel deste grupo de câmeras. Essas configurações são específicas do dispositivo/navegador.",
+ "title": "{{cameraName}} configurações de transmissão"
+ }
+ }
+ },
+ "debug": {
+ "options": {
+ "label": "Configurações",
+ "title": "Opções",
+ "hideOptions": "Ocultar opções",
+ "showOptions": "Mostrar opções"
+ },
+ "boundingBox": "Caixa delimitadora",
+ "timestamp": "Carimbo de hora",
+ "zones": "Zonas",
+ "mask": "Máscara",
+ "motion": "Movimento",
+ "regions": "Regiões"
+ }
+}
diff --git a/web/public/locales/pt/components/dialog.json b/web/public/locales/pt/components/dialog.json
new file mode 100644
index 000000000..9eec479a1
--- /dev/null
+++ b/web/public/locales/pt/components/dialog.json
@@ -0,0 +1,116 @@
+{
+ "restart": {
+ "button": "Reiniciar",
+ "restarting": {
+ "title": "Frigate está reiniciando",
+ "content": "Esta página será recarregada em {{countdown}} segundos.",
+ "button": "Forçar atualização agora"
+ },
+ "title": "Tem certeza de que deseja reiniciar o Frigate?"
+ },
+ "explore": {
+ "plus": {
+ "submitToPlus": {
+ "label": "Enviar para Frigate+",
+ "desc": "Objetos em locais que você quer evitar não são falsos positivos. Enviá-los como falsos positivos confundirá o modelo."
+ },
+ "review": {
+ "true": {
+ "label": "Confirme esta etiqueta para Frigate Plus",
+ "true_one": "Este é um {{label}}",
+ "true_many": "Estes são muitos {{label}}",
+ "true_other": "Estão são {{label}}"
+ },
+ "state": {
+ "submitted": "Enviado"
+ },
+ "false": {
+ "label": "Não confirmar esta etiqueta para Frigate Plus",
+ "false_one": "Este não é um {{label}}",
+ "false_many": "Estes não são muitos {{label}}",
+ "false_other": "Estes não são {{label}}"
+ }
+ }
+ },
+ "video": {
+ "viewInHistory": "Ver no histórico"
+ }
+ },
+ "export": {
+ "time": {
+ "fromTimeline": "Selecione na linha do tempo",
+ "start": {
+ "title": "Hora de início",
+ "label": "Selecione a hora de início"
+ },
+ "end": {
+ "title": "Hora de término",
+ "label": "Selecione a hora de término"
+ },
+ "custom": "Personalizado",
+ "lastHour_one": "Última hora",
+ "lastHour_many": "Últimas {{count}} horas",
+ "lastHour_other": "Últimas {{count}} horas"
+ },
+ "export": "Exportar",
+ "toast": {
+ "success": "Exportação iniciada com sucesso. Veja o arquivo na pasta /exports.",
+ "error": {
+ "failed": "Falha ao iniciar a exportação: {{error}}",
+ "endTimeMustAfterStartTime": "O horário de término deve ser posterior ao horário de início",
+ "noVaildTimeSelected": "Nenhum intervalo de tempo válido selecionado"
+ }
+ },
+ "selectOrExport": "Selecionar ou Exportar",
+ "fromTimeline": {
+ "saveExport": "Salvar exportação",
+ "previewExport": "Visualizar exportação"
+ },
+ "select": "Selecione",
+ "name": {
+ "placeholder": "Nomeie a exportação"
+ }
+ },
+ "streaming": {
+ "showStats": {
+ "label": "Mostrar estatísticas de transmissão",
+ "desc": "Habilite esta opção para mostrar estatísticas de transmissão como uma sobreposição no feed da câmera."
+ },
+ "restreaming": {
+ "desc": {
+ "title": "Configure o go2rtc para obter opções adicionais de visualização ao vivo e áudio para esta câmera.",
+ "readTheDocumentation": "Leia a documentação "
+ },
+ "disabled": "A retransmissão não está habilitada para esta câmera."
+ },
+ "label": "Transmissão",
+ "debugView": "Exibição de depuração"
+ },
+ "search": {
+ "saveSearch": {
+ "label": "Salvar pesquisa",
+ "overwrite": "{{searchName}} já existe. Salvar substituirá o valor existente.",
+ "success": "A pesquisa ({{searchName}}) foi salva.",
+ "button": {
+ "save": {
+ "label": "Salvar esta pesquisa"
+ }
+ },
+ "placeholder": "Digite um nome para sua pesquisa",
+ "desc": "Forneça um nome para esta pesquisa salva."
+ }
+ },
+ "recording": {
+ "confirmDelete": {
+ "title": "Confirmar exclusão",
+ "desc": {
+ "selected": "Tem certeza de que deseja excluir todos os vídeos gravados associados a este item de revisão?
Segure a tecla Shift para ignorar esta caixa de diálogo no futuro."
+ }
+ },
+ "button": {
+ "export": "Exportar",
+ "markAsReviewed": "Marcar como revisado",
+ "deleteNow": "Excluir agora"
+ }
+ }
+}
diff --git a/web/public/locales/pt/components/filter.json b/web/public/locales/pt/components/filter.json
new file mode 100644
index 000000000..286653c01
--- /dev/null
+++ b/web/public/locales/pt/components/filter.json
@@ -0,0 +1,102 @@
+{
+ "labels": {
+ "label": "Etiquetas",
+ "all": {
+ "short": "Etiquetas",
+ "title": "Todas as etiquetas"
+ },
+ "count": "{{count}} etiquetas"
+ },
+ "filter": "Filtro",
+ "zones": {
+ "label": "Zonas",
+ "all": {
+ "title": "Todas as zonas",
+ "short": "Zonas"
+ }
+ },
+ "dates": {
+ "all": {
+ "title": "Todas as datas",
+ "short": "Datas"
+ }
+ },
+ "more": "Mais filtros",
+ "reset": {
+ "label": "Redefinir filtros para valores padrão"
+ },
+ "subLabels": {
+ "label": "Sub etiquetas",
+ "all": "Todas sub etiquetas"
+ },
+ "score": "Pontuação",
+ "features": {
+ "label": "Funcionalidades",
+ "hasSnapshot": "Tem um snapshot",
+ "hasVideoClip": "Tem um videoclipe",
+ "submittedToFrigatePlus": {
+ "label": "Enviado para Frigate+",
+ "tips": "Primeiro, você deve filtrar os objetos rastreados que têm um snapshot.
Objetos rastreados sem um snapshot não podem ser enviados ao Frigate+."
+ }
+ },
+ "sort": {
+ "label": "Organizar",
+ "dateAsc": "Data (Ascendente)",
+ "scoreAsc": "Pontuação do objeto (Crescente)",
+ "scoreDesc": "Pontuação do objeto (Decrescente)",
+ "speedDesc": "Velocidade estimada (Decrescente)",
+ "speedAsc": "Velocidade estimada (Crescente)",
+ "dateDesc": "Data (Decrescente)",
+ "relevance": "Relevância"
+ },
+ "cameras": {
+ "label": "Filtro de câmeras",
+ "all": {
+ "short": "Câmeras",
+ "title": "Todas as câmeras"
+ }
+ },
+ "review": {
+ "showReviewed": "Mostrar revisado"
+ },
+ "motion": {
+ "showMotionOnly": "Mostrar apenas movimento"
+ },
+ "explore": {
+ "settings": {
+ "title": "Configurações",
+ "defaultView": {
+ "title": "Exibição padrão",
+ "summary": "Sumário",
+ "unfilteredGrid": "Grade não filtrada",
+ "desc": "Quando nenhum filtro for selecionado, exiba um resumo dos objetos rastreados mais recentemente por etiqueta ou exiba uma grade não filtrada."
+ },
+ "gridColumns": {
+ "title": "Colunas da grade",
+ "desc": "Selecione o número de colunas na visualização em grade."
+ },
+ "searchSource": {
+ "label": "Pesquisar fonte",
+ "desc": "Escolha se deseja pesquisar nas miniaturas ou descrições dos seus objetos rastreados.",
+ "options": {
+ "thumbnailImage": "Imagem em miniatura",
+ "description": "Descrição"
+ }
+ }
+ },
+ "date": {
+ "selectDateBy": {
+ "label": "Selecione uma data para filtrar"
+ }
+ }
+ },
+ "logSettings": {
+ "label": "Nível de log do filtro",
+ "loading": {
+ "title": "Carregando"
+ },
+ "filterBySeverity": "Filtrar logs por gravidade"
+ },
+ "estimatedSpeed": "Velocidade estimada ({{unit}})",
+ "timeRange": "Intervalo de tempo"
+}
diff --git a/web/public/locales/pt/components/icons.json b/web/public/locales/pt/components/icons.json
new file mode 100644
index 000000000..4f4fee510
--- /dev/null
+++ b/web/public/locales/pt/components/icons.json
@@ -0,0 +1,8 @@
+{
+ "iconPicker": {
+ "selectIcon": "Selecione um ícone",
+ "search": {
+ "placeholder": "Pesquisar por um ícone..."
+ }
+ }
+}
diff --git a/web/public/locales/pt/components/input.json b/web/public/locales/pt/components/input.json
new file mode 100644
index 000000000..79a3f7457
--- /dev/null
+++ b/web/public/locales/pt/components/input.json
@@ -0,0 +1,10 @@
+{
+ "button": {
+ "downloadVideo": {
+ "label": "Baixar vídeo",
+ "toast": {
+ "success": "O vídeo do seu item de análise começou a ser baixado."
+ }
+ }
+ }
+}
diff --git a/web/public/locales/pt/components/player.json b/web/public/locales/pt/components/player.json
new file mode 100644
index 000000000..7fc7ede13
--- /dev/null
+++ b/web/public/locales/pt/components/player.json
@@ -0,0 +1,42 @@
+{
+ "noPreviewFound": "Nenhuma visualização encontrada",
+ "noPreviewFoundFor": "Nenhuma visualização encontrada para {{cameraName}}",
+ "submitFrigatePlus": {
+ "title": "Enviar este quadro para o Frigate+?",
+ "submit": "Enviar"
+ },
+ "streamOffline": {
+ "title": "Transmissão offline",
+ "desc": "Nenhum quadro foi recebido na transmissão de detecção
{{cameraName}}, verifique os logs de erro"
+ },
+ "cameraDisabled": "A câmera está desativada",
+ "stats": {
+ "streamType": {
+ "title": "Tipo de transmissão:",
+ "short": "Tipo"
+ },
+ "bandwidth": {
+ "title": "Largura de banda:",
+ "short": "Largura de banda"
+ },
+ "latency": {
+ "value": "{{seconds}} segundos",
+ "short": {
+ "title": "Latência",
+ "value": "{{seconds}} seg"
+ },
+ "title": "Latência:"
+ },
+ "totalFrames": "Total de quadros:",
+ "droppedFrames": {
+ "title": "Quadros perdidos:",
+ "short": {
+ "title": "Perdido",
+ "value": "{{droppedFrames}} quadros"
+ }
+ },
+ "decodedFrames": "Quadros decodificados:"
+ },
+ "noRecordingsFoundForThisTime": "Nenhuma gravação encontrada para este momento",
+ "livePlayerRequiredIOSVersion": "iOS 17.1 ou superior é necessário para este tipo de transmissão ao vivo."
+}
diff --git a/web/public/locales/pt/objects.json b/web/public/locales/pt/objects.json
new file mode 100644
index 000000000..3c51350b6
--- /dev/null
+++ b/web/public/locales/pt/objects.json
@@ -0,0 +1,84 @@
+{
+ "giraffe": "Girafa",
+ "cup": "Xicara",
+ "person": "Pessoa",
+ "stop_sign": "Sinal de Pare",
+ "sheep": "Ovelha",
+ "sandwich": "Lanche",
+ "carrot": "Cenoura",
+ "dining_table": "Mesa de jantar",
+ "motorcycle": "Motocicleta",
+ "bicycle": "Bicicleta",
+ "street_sign": "Sinal de rua",
+ "pizza": "Pizza",
+ "parking_meter": "Medidor de estacionamento",
+ "skateboard": "Skate",
+ "bottle": "Garrafa",
+ "car": "Carro",
+ "airplane": "Avião",
+ "bus": "Ônibus",
+ "train": "Trem",
+ "boat": "Barco",
+ "traffic_light": "Semaforo",
+ "fire_hydrant": "Hidratação de Fogo",
+ "bird": "Pássaro",
+ "cat": "Gato",
+ "bench": "Bench",
+ "elephant": "Elefante",
+ "hat": "Chapéu",
+ "backpack": "Mochila",
+ "shoe": "Sapato",
+ "handbag": "Bolsa de mão",
+ "tie": "Gravata",
+ "suitcase": "Mala de viagem",
+ "frisbee": "Frisbee",
+ "skis": "Esquis",
+ "kite": "Kite",
+ "baseball_bat": "Taco basebol",
+ "tennis_racket": "Raquete de Tenis",
+ "plate": "Placa",
+ "wine_glass": "Taça de vinho",
+ "fork": "Garfo",
+ "spoon": "Colher",
+ "bowl": "Tijela",
+ "banana": "Banana",
+ "apple": "Maça",
+ "hot_dog": "Cão quente",
+ "donut": "Donut",
+ "cake": "Bolo",
+ "chair": "Cadeira",
+ "potted_plant": "Planta em vaso",
+ "mirror": "Espelho",
+ "desk": "Mesa",
+ "toilet": "Banheiro",
+ "door": "Porta",
+ "baseball_glove": "Luva de beisebol",
+ "surfboard": "Prancha",
+ "broccoli": "Brócolis",
+ "snowboard": "Snowboard",
+ "dog": "Cão",
+ "bear": "Urso",
+ "eye_glasses": "Óculos",
+ "umbrella": "guarda-chuva",
+ "horse": "Cavalo",
+ "bed": "Cama",
+ "cow": "Vaca",
+ "zebra": "Zebra",
+ "sports_ball": "Bola",
+ "knife": "Faca",
+ "orange": "Laranja",
+ "window": "Janela",
+ "clock": "Relógio",
+ "keyboard": "Teclado",
+ "animal": "Animal",
+ "bark": "Latido",
+ "goat": "Bode",
+ "vehicle": "Veículo",
+ "scissors": "Tesoura",
+ "mouse": "Rato",
+ "teddy_bear": "Urso de pelúcia",
+ "hair_dryer": "Secador de cabelo",
+ "toothbrush": "Escova de dentes",
+ "hair_brush": "Escova de Cabelo",
+ "squirrel": "Esquilo"
+}
diff --git a/web/public/locales/pt/views/configEditor.json b/web/public/locales/pt/views/configEditor.json
new file mode 100644
index 000000000..2b6a13194
--- /dev/null
+++ b/web/public/locales/pt/views/configEditor.json
@@ -0,0 +1,15 @@
+{
+ "configEditor": "Editor de configuração",
+ "copyConfig": "Copiar configuração",
+ "saveAndRestart": "Salvar e reiniciar",
+ "saveOnly": "Somente salvar",
+ "toast": {
+ "success": {
+ "copyToClipboard": "Configuração copiada para a área de transferência."
+ },
+ "error": {
+ "savingError": "Erro ao salvar configuração"
+ }
+ },
+ "documentTitle": "Editor de configuração - Frigate"
+}
diff --git a/web/public/locales/pt/views/events.json b/web/public/locales/pt/views/events.json
new file mode 100644
index 000000000..ba1468bc3
--- /dev/null
+++ b/web/public/locales/pt/views/events.json
@@ -0,0 +1,35 @@
+{
+ "detections": "Detecções",
+ "motion": {
+ "label": "Movimento",
+ "only": "Somente movimento"
+ },
+ "allCameras": "Todas as câmeras",
+ "empty": {
+ "motion": "Nenhum dado de movimento encontrado",
+ "alert": "Não há alertas para revisar",
+ "detection": "Não há detecções para revisar"
+ },
+ "timeline": "Linha do tempo",
+ "events": {
+ "aria": "Selecionar eventos",
+ "label": "Eventos",
+ "noFoundForTimePeriod": "Nenhum evento encontrado para este período."
+ },
+ "timeline.aria": "Selecione a linha do tempo",
+ "alerts": "Alertas",
+ "documentTitle": "Análise - Frigate",
+ "recordings": {
+ "documentTitle": "Gravações - Frigate"
+ },
+ "calendarFilter": {
+ "last24Hours": "Últimas 24 horas"
+ },
+ "markAsReviewed": "Marcar como revisado",
+ "markTheseItemsAsReviewed": "Marque esses itens como revisados",
+ "newReviewItems": {
+ "label": "Ver novos itens de revisão",
+ "button": "Novos itens para revisar"
+ },
+ "camera": "Câmera"
+}
diff --git a/web/public/locales/pt/views/explore.json b/web/public/locales/pt/views/explore.json
new file mode 100644
index 000000000..9289b243d
--- /dev/null
+++ b/web/public/locales/pt/views/explore.json
@@ -0,0 +1,76 @@
+{
+ "generativeAI": "IA Generativa",
+ "exploreIsUnavailable": {
+ "embeddingsReindexing": {
+ "startingUp": "Iniciando...",
+ "estimatedTime": "Tempo restante estimado:",
+ "finishingShortly": "Terminando em breve",
+ "step": {
+ "thumbnailsEmbedded": "Miniaturas incorporadas: ",
+ "descriptionsEmbedded": "Descrições incorporadas: ",
+ "trackedObjectsProcessed": "Objetos rastreados processados: "
+ },
+ "context": "O explorar pode ser usado depois que as incorporações de objetos rastreados terminarem de ser reindexadas."
+ },
+ "downloadingModels": {
+ "setup": {
+ "visionModel": "Modelo de visão",
+ "textModel": "Modelo de texto",
+ "textTokenizer": "Tokenizador de texto"
+ },
+ "context": "O Frigate está baixando os modelos de incorporação necessários para dar suporte a funcionalidade de pesquisa semântica. Isso pode levar vários minutos, dependendo da velocidade da sua conexão de rede.",
+ "tips": {
+ "context": "Talvez você queira reindexar as incorporações dos seus objetos rastreados depois que os modelos forem baixados.",
+ "documentation": "Leia a documentação"
+ },
+ "error": "Ocorreu um erro. Verifique os logs do Frigate."
+ },
+ "title": "Explorar não está disponível"
+ },
+ "details": {
+ "timestamp": "Carimbo de hora",
+ "item": {
+ "title": "Revisar detalhes do item",
+ "desc": "Revisar detalhes do item"
+ },
+ "zones": "Zonas",
+ "description": {
+ "label": "Descrição"
+ },
+ "camera": "Câmera"
+ },
+ "documentTitle": "Explorar - Frigate",
+ "trackedObjectDetails": "Detalhes do objeto rastreado",
+ "type": {
+ "details": "detalhes",
+ "video": "vídeo",
+ "object_lifecycle": "ciclo de vida do objeto",
+ "snapshot": "snapshot"
+ },
+ "objectLifecycle": {
+ "title": "Ciclo de vida do objeto",
+ "lifecycleItemDesc": {
+ "attribute": {
+ "other": "{{label}} reconhecido como {{attribute}}",
+ "faceOrLicense_plate": "{{attribute}} detectado por {{label}}"
+ },
+ "gone": "{{label}} saiu",
+ "heard": "{{label}} ouvido",
+ "visible": "{{label}} detectado",
+ "external": "{{label}} detectado"
+ },
+ "annotationSettings": {
+ "title": "Configurações de anotação",
+ "offset": {
+ "documentation": "Leia a documentação "
+ },
+ "showAllZones": {
+ "title": "Mostrar todas as zonas"
+ }
+ },
+ "carousel": {
+ "previous": "Slide anterior",
+ "next": "Próximo slide"
+ }
+ }
+}
diff --git a/web/public/locales/pt/views/exports.json b/web/public/locales/pt/views/exports.json
new file mode 100644
index 000000000..f132cc687
--- /dev/null
+++ b/web/public/locales/pt/views/exports.json
@@ -0,0 +1,17 @@
+{
+ "documentTitle": "Exportar - Frigate",
+ "search": "Pesquisar",
+ "noExports": "Nenhuma exportação encontrada",
+ "deleteExport": "Excluir exportação",
+ "editExport": {
+ "title": "Renomear exportação",
+ "desc": "Digite um novo nome para esta exportação.",
+ "saveExport": "Salvar exportação"
+ },
+ "toast": {
+ "error": {
+ "renameExportFailed": "Falha ao renomear exportação: {{errorMessage}}"
+ }
+ },
+ "deleteExport.desc": "Tem certeza de que deseja excluir {{exportName}}?"
+}
diff --git a/web/public/locales/pt/views/faceLibrary.json b/web/public/locales/pt/views/faceLibrary.json
new file mode 100644
index 000000000..d8abdcaf7
--- /dev/null
+++ b/web/public/locales/pt/views/faceLibrary.json
@@ -0,0 +1,59 @@
+{
+ "description": {
+ "placeholder": "Digite um nome para esta coleção",
+ "addFace": "Veja como adicionar uma nova coleção à biblioteca de rostos."
+ },
+ "details": {
+ "person": "Pessoa",
+ "face": "Detalhes do rosto",
+ "faceDesc": "Detalhes do rosto e objeto associado",
+ "timestamp": "Carimbo de hora",
+ "confidence": "Confiança"
+ },
+ "documentTitle": "Biblioteca de rostos - Frigate",
+ "uploadFaceImage": {
+ "title": "Carregar imagem do rosto",
+ "desc": "Carregue uma imagem para escanear rostos e incluir em {{pageToggle}}"
+ },
+ "createFaceLibrary": {
+ "title": "Criar coleção",
+ "desc": "Criar uma nova coleção",
+ "new": "Criar novo rosto",
+ "nextSteps": "Para construir uma base sólida:
modo: {{effectiveRetainMode}}
, portanto, esta gravação sob demanda manterá apenas segmentos com {{effectiveRetainModeName}}."
+ },
+ "editLayout": {
+ "label": "Editar layout",
+ "group": {
+ "label": "Editar grupo de câmeras"
+ },
+ "exitEdit": "Sair da edição"
+ },
+ "audio": "Áudio",
+ "recording": {
+ "enable": "Habilitar gravação",
+ "disable": "Desativar gravação"
+ },
+ "history": {
+ "label": "Mostrar filmagens históricas"
+ }
+}
diff --git a/web/public/locales/pt/views/recording.json b/web/public/locales/pt/views/recording.json
new file mode 100644
index 000000000..7d61d8696
--- /dev/null
+++ b/web/public/locales/pt/views/recording.json
@@ -0,0 +1,12 @@
+{
+ "export": "Exportar",
+ "calendar": "Calendário",
+ "filter": "Filtro",
+ "filters": "Filtros",
+ "toast": {
+ "error": {
+ "endTimeMustAfterStartTime": "O horário de término deve ser posterior ao horário de início",
+ "noValidTimeSelected": "Nenhum intervalo de tempo válido selecionado"
+ }
+ }
+}
diff --git a/web/public/locales/pt/views/search.json b/web/public/locales/pt/views/search.json
new file mode 100644
index 000000000..0de1b1a67
--- /dev/null
+++ b/web/public/locales/pt/views/search.json
@@ -0,0 +1,49 @@
+{
+ "search": "Pesquisar",
+ "savedSearches": "Pesquisas salvas",
+ "searchFor": "Pesquisar por {{inputValue}}",
+ "button": {
+ "save": "Salvar pesquisa",
+ "delete": "Excluir pesquisa salva",
+ "filterInformation": "Informação do filtro",
+ "filterActive": "Filtros ativos",
+ "clear": "Limpar pesquisa"
+ },
+ "trackedObjectId": "ID do objeto rastreado",
+ "filter": {
+ "label": {
+ "sub_labels": "Sub etiquetas",
+ "zones": "Zonas",
+ "cameras": "Câmeras",
+ "labels": "Etiquetas",
+ "search_type": "Tipo de pesquisa",
+ "time_range": "Intervalo de tempo",
+ "before": "Antes",
+ "after": "Depois",
+ "min_score": "Pontuação mínima",
+ "max_score": "Pontuação máxima",
+ "min_speed": "Velocidade mínima",
+ "max_speed": "Velocidade máxima",
+ "recognized_license_plate": "Placa reconhecida"
+ },
+ "searchType": {
+ "thumbnail": "Miniatura",
+ "description": "Descrição"
+ },
+ "header": {
+ "noFilters": "Filtros",
+ "activeFilters": "Filtros ativos"
+ },
+ "tips": {
+ "desc": {
+ "text": "Os filtros ajudam você a restringir os resultados da sua pesquisa. Veja como usá-los no campo de entrada:"
+ }
+ }
+ },
+ "placeholder": {
+ "search": "Pesquisar..."
+ },
+ "similaritySearch": {
+ "title": "Pesquisa de similaridade"
+ }
+}
diff --git a/web/public/locales/pt/views/settings.json b/web/public/locales/pt/views/settings.json
new file mode 100644
index 000000000..6d09af30f
--- /dev/null
+++ b/web/public/locales/pt/views/settings.json
@@ -0,0 +1,123 @@
+{
+ "documentTitle": {
+ "camera": "Configurações da câmera - Frigate",
+ "classification": "Configurações de classificação - Frigate",
+ "masksAndZones": "Editor de máscara e zona - Frigate",
+ "motionTuner": "Ajuste de movimento - Frigate",
+ "object": "Configurações do objeto - Frigate",
+ "authentication": "Configurações de autenticação - Frigate",
+ "general": "Configurações gerais - Frigate",
+ "frigatePlus": "Configurações do Frigate+ - Frigate",
+ "default": "Configurações - Frigate"
+ },
+ "menu": {
+ "ui": "UI",
+ "masksAndZones": "Máscaras / Zonas",
+ "cameras": "Configurações da câmera",
+ "classification": "Classificação",
+ "motionTuner": "Ajuste de movimento",
+ "debug": "Depurar",
+ "users": "Usuários",
+ "notifications": "Notificações",
+ "frigateplus": "Frigate+"
+ },
+ "dialog": {
+ "unsavedChanges": {
+ "title": "Você tem alterações não salvas.",
+ "desc": "Deseja salvar suas alterações antes de continuar?"
+ }
+ },
+ "cameraSetting": {
+ "camera": "Câmera",
+ "noCamera": "Sem câmera"
+ },
+ "general": {
+ "title": "Configurações gerais",
+ "liveDashboard": {
+ "title": "Painel ao vivo",
+ "automaticLiveView": {
+ "label": "Visualização ao vivo automática"
+ }
+ },
+ "calendar": {
+ "title": "Calendário",
+ "firstWeekday": {
+ "label": "Primeiro dia da semana",
+ "sunday": "Domingo",
+ "monday": "Segunda-feira"
+ }
+ },
+ "storedLayouts": {
+ "title": "Layouts armazenados"
+ },
+ "recordingsViewer": {
+ "defaultPlaybackRate": {
+ "label": "Taxa de reprodução padrão"
+ }
+ }
+ },
+ "classification": {
+ "faceRecognition": {
+ "modelSize": {
+ "label": "Tamanho do modelo"
+ },
+ "readTheDocumentation": "Leia a documentação"
+ },
+ "licensePlateRecognition": {
+ "readTheDocumentation": "Leia a documentação"
+ },
+ "semanticSearch": {
+ "readTheDocumentation": "Leia a documentação"
+ },
+ "title": "Configurações de classificação"
+ },
+ "notification": {
+ "globalSettings": {
+ "title": "Configurações globais"
+ },
+ "notificationSettings": {
+ "documentation": "Leia a documentação"
+ },
+ "notificationUnavailable": {
+ "documentation": "Leia a documentação"
+ }
+ },
+ "frigatePlus": {
+ "snapshotConfig": {
+ "documentation": "Leia a documentação",
+ "table": {
+ "snapshots": "Snapshots",
+ "camera": "Câmera"
+ }
+ }
+ },
+ "masksAndZones": {
+ "motionMasks": {
+ "point_one": "{{count}} ponto",
+ "point_many": "{{count}} pontos",
+ "point_other": "{{count}} pontos",
+ "context": {
+ "documentation": "Leia a documentação"
+ },
+ "polygonAreaTooLarge": {
+ "documentation": "Leia a documentação"
+ }
+ },
+ "zones": {
+ "label": "Zonas"
+ }
+ },
+ "debug": {
+ "zones": {
+ "title": "Zonas"
+ },
+ "timestamp": {
+ "title": "Carimbo de hora"
+ }
+ },
+ "camera": {
+ "reviewClassification": {
+ "readTheDocumentation": "Leia a documentação"
+ }
+ }
+}
diff --git a/web/public/locales/pt/views/system.json b/web/public/locales/pt/views/system.json
new file mode 100644
index 000000000..b45f5db24
--- /dev/null
+++ b/web/public/locales/pt/views/system.json
@@ -0,0 +1,120 @@
+{
+ "documentTitle": {
+ "storage": "Estatísticas de armazenamento - Frigate",
+ "general": "Estatísticas gerais - Frigate",
+ "enrichments": "Estatísticas de enriquecimento - Frigate",
+ "logs": {
+ "frigate": "Logs do Frigate - Frigate",
+ "go2rtc": "Logs do Go2RTC - Frigate",
+ "nginx": "Logs do Nginx - Frigate"
+ },
+ "cameras": "Estatísticas das câmeras - Frigate"
+ },
+ "title": "Sistema",
+ "metrics": "Métricas do sistema",
+ "logs": {
+ "type": {
+ "label": "Tipo",
+ "timestamp": "Carimbo de hora",
+ "tag": "Tag",
+ "message": "Mensagem"
+ },
+ "copy": {
+ "success": "Logs copiados para a área de transferência",
+ "label": "Copiar para a área de transferência",
+ "error": "Não foi possível copiar os logs para a área de transferência"
+ },
+ "download": {
+ "label": "Baixar logs"
+ },
+ "tips": "Os logs estão sendo transmitidos do servidor",
+ "toast": {
+ "error": {
+ "fetchingLogsFailed": "Erro ao buscar logs: {{errorMessage}}",
+ "whileStreamingLogs": "Erro ao transmitir logs: {{errorMessage}}"
+ }
+ }
+ },
+ "storage": {
+ "cameraStorage": {
+ "camera": "Câmera",
+ "storageUsed": "Armazenamento",
+ "percentageOfTotalUsed": "Porcentagem do total",
+ "bandwidth": "Largura de banda",
+ "unused": {
+ "tips": "Este valor pode não representar com precisão o espaço livre disponível para o Frigate se você tiver outros arquivos armazenados em sua unidade além das gravações do Frigate. O Frigate não rastreia o uso de armazenamento fora de suas gravações.",
+ "title": "Não utilizado"
+ },
+ "unusedStorageInformation": "Informações de armazenamento não utilizado",
+ "title": "Armazenamento da câmera"
+ },
+ "title": "Armazenamento",
+ "overview": "Visão geral"
+ },
+ "cameras": {
+ "title": "Câmeras",
+ "info": {
+ "video": "Vídeo:",
+ "unknown": "Desconhecido",
+ "error": "Erro: {{error}}",
+ "fetching": "Obtendo dados da câmera",
+ "resolution": "Resolução:",
+ "codec": "Codec:",
+ "fps": "FPS:",
+ "stream": "Transmissão {{idx}}",
+ "audio": "Áudio:"
+ },
+ "framesAndDetections": "Quadros / Detecções",
+ "label": {
+ "camera": "câmera",
+ "detect": "detectar",
+ "capture": "capturar",
+ "skipped": "pulado",
+ "ffmpeg": "ffmpeg"
+ },
+ "overview": "Visão geral"
+ },
+ "lastRefreshed": "Última atualização: ",
+ "stats": {
+ "ffmpegHighCpuUsage": "{{camera}} tem alto uso de CPU FFMPEG ({{ffmpegAvg}}%)",
+ "detectHighCpuUsage": "{{camera}} tem alto uso de CPU de detecção ({{detectAvg}}%)",
+ "healthy": "O sistema está saudável"
+ },
+ "general": {
+ "title": "Geral",
+ "detector": {
+ "title": "Detectores",
+ "cpuUsage": "Uso da CPU do detector",
+ "memoryUsage": "Uso da memória do detector"
+ },
+ "hardwareInfo": {
+ "title": "Informações de hardware",
+ "gpuUsage": "Uso da GPU",
+ "gpuMemory": "Memória da GPU",
+ "gpuInfo": {
+ "nvidiaSMIOutput": {
+ "driver": "Driver: {{driver}}",
+ "vbios": "Informação VBios: {{vbios}}",
+ "name": "Nome: {{name}}",
+ "cudaComputerCapability": "Capacidade de computação CUDA: {{cuda_compute}}"
+ },
+ "copyInfo": {
+ "label": "Copiar informações da GPU"
+ }
+ }
+ },
+ "otherProcesses": {
+ "title": "Outros processos"
+ }
+ },
+ "enrichments": {
+ "title": "Enriquecimentos",
+ "infPerSecond": "Inferências por segundo",
+ "embeddings": {
+ "image_embedding_speed": "Velocidade de incorporação de imagem",
+ "face_embedding_speed": "Velocidade de incorporação facial",
+ "plate_recognition_speed": "Velocidade de reconhecimento de placas",
+ "text_embedding_speed": "Velocidade de incorporação de texto"
+ }
+ }
+}