This is an automated email from the ASF dual-hosted git repository.

bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git


The following commit(s) were added to refs/heads/main by this push:
     new c2ff56eff6b UI: Complete the Portuguese translation (#76412)
c2ff56eff6b is described below

commit c2ff56eff6b1b6c0733170c35ea65f131e8ce59c
Author: Aldo <[email protected]>
AuthorDate: Fri Nov 6 15:50:07 2026 +0100

    UI: Complete the Portuguese translation (#76412)
    
    * UI: Complete the Portuguese translation
    
    Portuguese coverage had fallen to about 58%, so screens that landed after 
the
    last translation pass showed English to Portuguese users.
    
    Exact multiples of a million select the _many plural, and that form needs
    "de" before the noun. The locale guide records the rule so a later
    translation pass does not copy _other back over it.
    
    Co-authored-by: Cursor <[email protected]>
    
    * UI(i18n/pt): use agendador in assetInactive.tooltip
    
    Co-authored-by: Aldo <[email protected]>
    
    * UI(i18n/pt): use disparador in degradedHint.triggerer
    
    Co-authored-by: Aldo <[email protected]>
    
    * UI(i18n/pt): standardize graph UI term as gráfico
    
    Co-authored-by: Aldo <[email protected]>
    
    * UI(i18n/pt): translate triggerer.job as Tarefa do Disparador
    
    Co-authored-by: Aldo <[email protected]>
    
    * UI(i18n/pt): unify alertName to Nome do alerta
    
    Co-authored-by: Aldo <[email protected]>
    
    * UI(i18n/pt): standardize graph UI term as grafo
    
    Co-authored-by: Aldo <[email protected]>
    
    ---------
    
    Co-authored-by: Cursor <[email protected]>
---
 .agents/skills/airflow-translations/locales/pt.md  |  26 ++
 .../airflow/ui/public/i18n/locales/pt/admin.json   |  33 ++-
 .../airflow/ui/public/i18n/locales/pt/assets.json  |  39 ++-
 .../airflow/ui/public/i18n/locales/pt/browse.json  |  60 ++++
 .../airflow/ui/public/i18n/locales/pt/common.json  | 314 ++++++++++++++++++++-
 .../ui/public/i18n/locales/pt/components.json      |  92 +++++-
 .../src/airflow/ui/public/i18n/locales/pt/dag.json | 236 ++++++++++++++--
 .../airflow/ui/public/i18n/locales/pt/dags.json    |  65 ++++-
 .../ui/public/i18n/locales/pt/dashboard.json       |  44 ++-
 .../airflow/ui/public/i18n/locales/pt/hitl.json    |  15 +
 10 files changed, 868 insertions(+), 56 deletions(-)

diff --git a/.agents/skills/airflow-translations/locales/pt.md 
b/.agents/skills/airflow-translations/locales/pt.md
index bc2089a1bca..2351f485ac3 100644
--- a/.agents/skills/airflow-translations/locales/pt.md
+++ b/.agents/skills/airflow-translations/locales/pt.md
@@ -27,6 +27,32 @@ This file contains locale-specific guidelines so AI 
translation agents produce n
 - Respect gender and number agreement (feminine/masculine, singular/plural).
 - Follow existing i18next plural keys: `_one`, `_many`, `_other`, `_zero`
 - Capitalization: Sentence case for descriptions, title-like for 
headers/buttons (match existing files).
+
+### Plurals and "de"
+
+Portuguese needs `_zero`, `_one`, `_many` and `_other`. A key that omits 
`_many` falls through to the English `fallbackLng` rather than to the 
Portuguese `_other`.
+
+`_many` resolves only at exact multiples of a million (1.000.000, 2.000.000, 
…). 1.500.000 and 1.000.001 resolve to `_other`. `_zero` is the explicit 
zero-count message (`Nenhum` / `Nenhuma`).
+
+At those million counts a numeral takes **de** before the noun it quantifies 
("um milhão **de** tarefas"), so a `_many` form that merely repeats `_other` 
reads ungrammatically when the string interpolates a count directly in front of 
a noun:
+
+```json
+"change_one": "{{count, number}} alteração",
+"change_many": "{{count, number}} de alterações",
+"change_other": "{{count, number}} alterações",
+"change_zero": "Nenhuma alteração"
+```
+
+When the count stands in brackets and does not quantify the following noun, 
**de** does not apply and `_many` matches `_other`:
+
+```json
+"requiredActionCount_many": "Ações Necessárias ({{count, number}})"
+```
+
+`outros` is still a quantified word, so `teams.more_many` is `e {{count, 
number}} de outros`. A bare noun with no numeral in the string is unaffected 
(`task_many` stays `Tarefas`). The UI prints the count as digits (`1.000.000`), 
not as the words "um milhão". Keep `{{count, number}}` anyway: that is the form 
i18next selects `_many` for.
+
+A saved filter is `filtro salvo`. `padrão` is only the default (`Definir como 
padrão`). A deadline is `Prazo`. A loop is `Ciclo`; one pass of it is 
`Iteração`. A Dag bundle is `Pacote do Dag`, matching the existing "versão mais 
recente do pacote".
+
 - Spelling/vocab: Follow patterns in current JSON (e.g. "Excluir", 
"Adicionar", "Executando", "Enfileirado", "Secção", "detetadas", 
"Sobreescreve").
 
 ## 3. Examples from Existing Translations
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/admin.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/admin.json
index c3043b31ae8..735ad0ca2c1 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/admin.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/admin.json
@@ -9,7 +9,11 @@
   "config": {
     "columns": {
       "section": "Secção"
-    }
+    },
+    "config_many": "Configurações",
+    "config_one": "Configuração",
+    "config_other": "Configurações",
+    "config_zero": "Nenhuma configuração"
   },
   "connections": {
     "add": "Adicionar Conexão",
@@ -24,7 +28,7 @@
     "connection_other": "Conexões",
     "connection_zero": "Nenhuma conexão",
     "delete": {
-      "deleteConnection_many": "Excluir {{count, number}} conexões",
+      "deleteConnection_many": "Excluir {{count, number}} de conexões",
       "deleteConnection_one": "Excluir 1 conexão",
       "deleteConnection_other": "Excluir {{count, number}} conexões",
       "deleteConnection_zero": "Nenhuma conexão para excluir",
@@ -34,13 +38,16 @@
       "firstConfirmMessage_zero": "Nenhuma conexão para excluir",
       "title": "Excluir Conexão"
     },
+    "duplicate": "Duplicar $t(connections.connection_one)",
     "edit": "Editar Conexão",
     "form": {
       "connectionIdRequired": "ID da Conexão é obrigatório",
       "connectionIdRequirement": "ID da Conexão não pode conter somente 
espaços",
+      "connectionTypeFields": "Campos de {{connectionType}}",
       "connectionTypeRequired": "Tipo de Conexão é obrigatório",
       "extraFieldsJson": "Campos Extra JSON",
       "helperText": "Tipo de conexão faltando? Certifique-se de ter instalado 
o pacote do provider correspondente ao Airflow.",
+      "helperTextForDuplicatedRedactedFields": "Campos ocultos ('***') não são 
copiados. Preencha-os para a nova conexão.",
       "helperTextForRedactedFields": "Os campos redigidos ('***') permanecerão 
inalterados se não forem modificados.",
       "selectConnectionType": "Selecionar Tipo de Conexão",
       "standardFields": "Campos Padrão"
@@ -100,7 +107,11 @@
       "dagProcessorJob": "DagProcessorJob",
       "schedulerJob": "SchedulerJob",
       "triggererJob": "TriggererJob"
-    }
+    },
+    "job_many": "Jobs",
+    "job_one": "Job",
+    "job_other": "Jobs",
+    "job_zero": "Nenhum Job"
   },
   "plugins": {
     "columns": {
@@ -110,6 +121,10 @@
     "importError_one": "Erro de Importação de Plugin",
     "importError_other": "Erros de Importação de Plugins",
     "importError_zero": "Nenhum erro de importação de plugin",
+    "plugin_many": "Plugins",
+    "plugin_one": "Plugin",
+    "plugin_other": "Plugins",
+    "plugin_zero": "Nenhum Plugin",
     "searchPlaceholder": "Pesquisar por arquivo"
   },
   "pools": {
@@ -126,7 +141,8 @@
       "includeDeferred": "Incluir Deferidos",
       "nameMaxLength": "Nome pode conter um máximo de 256 caracteres",
       "nameRequired": "Nome é obrigatório",
-      "slots": "Slots"
+      "slots": "Slots",
+      "slotsHelperText": "Use -1 para slots ilimitados."
     },
     "noPoolsFound": "Nenhum pool encontrado",
     "pool_many": "Pools",
@@ -144,7 +160,11 @@
     "columns": {
       "packageName": "Nome do Pacote",
       "version": "Versão"
-    }
+    },
+    "provider_many": "Providers",
+    "provider_one": "Provider",
+    "provider_other": "Providers",
+    "provider_zero": "Nenhum Provider"
   },
   "variables": {
     "add": "Adicionar Variável",
@@ -152,7 +172,7 @@
       "isEncrypted": "Está Encriptado"
     },
     "delete": {
-      "deleteVariable_many": "Excluir {{count, number}} Variáveis",
+      "deleteVariable_many": "Excluir {{count, number}} de Variáveis",
       "deleteVariable_one": "Excluir 1 Variável",
       "deleteVariable_other": "Excluir {{count, number}} Variáveis",
       "deleteVariable_zero": "Nenhuma variável para excluir",
@@ -188,6 +208,7 @@
           "title": "Ignorar"
         }
       },
+      "parsingFile": "Analisando arquivo...",
       "title": "Importar Variáveis",
       "upload": "Upload um Arquivo JSON",
       "uploadPlaceholder": "Upload um arquivo JSON contendo variáveis 
(exemplo: {\"key\": \"value\", ...})"
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/assets.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/assets.json
index fb396f13212..889634b04d4 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/assets.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/assets.json
@@ -1,9 +1,34 @@
 {
   "additional_data": "Dados Adicionais",
+  "alias_many": "Aliases",
+  "alias_one": "Alias",
+  "alias_other": "Aliases",
+  "alias_zero": "Nenhum alias",
+  "aliases": "Aliases",
   "asset_many": "Assets",
   "asset_one": "Asset",
   "asset_other": "Assets",
   "asset_zero": "Nenhum asset",
+  "assetStateStore": {
+    "add": "Adicionar armazenamento de estado do Asset",
+    "clearAll": {
+      "resource": "todo o armazenamento de estado do Asset",
+      "title": "Limpar todo o armazenamento de estado do Asset",
+      "warning": "Todo o armazenamento de estado do Asset será apagado. 
Tarefas que usam este armazenamento para coordenar trabalho perderão a memória 
persistida."
+    },
+    "delete": "Excluir armazenamento de estado do Asset",
+    "deleteWarning": "O Asset perderá esta entrada persistida do armazenamento 
de estado.",
+    "edit": "Editar armazenamento de estado do Asset",
+    "emptyState": "O armazenamento de estado do Asset guarda valores no âmbito 
de uma identidade de Asset, compartilhados entre todas as execuções do Dag. Os 
workers podem escrever no armazenamento de estado do Asset através do Task 
SDK.",
+    "entry_many": "Entradas",
+    "entry_one": "Entrada",
+    "entry_other": "Entradas",
+    "entry_zero": "Nenhuma entrada",
+    "lastUpdatedBy": "Última atualização por",
+    "lastUpdatedByApi": "API",
+    "lastUpdatedByWatcher": "Watcher",
+    "title": "Armazenamento de Estado do Asset"
+  },
   "consumingDags": "Consumindo Dags",
   "consumingTasks": "Tarefas Consumidoras",
   "createEvent": {
@@ -27,7 +52,12 @@
     },
     "title": "Criar Evento de Asset para {{name}}"
   },
-  "extra": "Extra",
+  "events": "Eventos",
+  "filters": {
+    "groupPlaceholder": "Pesquisar grupo",
+    "hasEvents": "Tem eventos",
+    "lastEventDateRange": "Data do último evento"
+  },
   "group": "Grupo",
   "lastAssetEvent": "Último Evento de Asset",
   "name": "Nome",
@@ -35,5 +65,10 @@
   "scheduledDags": "Dags Programados",
   "scheduling": "Agendamento",
   "searchPlaceholder": "Pesquisar Assets",
-  "taskDependencies": "Dependências de Tarefas"
+  "taskDependencies": "Dependências de Tarefas",
+  "watcher_many": "Watchers",
+  "watcher_one": "Watcher",
+  "watcher_other": "Watchers",
+  "watcher_zero": "Nenhum Watcher",
+  "watchers": "Watchers"
 }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/browse.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/browse.json
index bb976259928..63ffd5ec8d8 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/browse.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/browse.json
@@ -10,6 +10,61 @@
       "eventType": "Tipo de Evento"
     }
   },
+  "dagBundles": {
+    "active": "Ativo",
+    "columns": {
+      "active": "Ativo",
+      "importErrors": "Erros de importação",
+      "lastRefreshed": "Última atualização",
+      "name": "Nome",
+      "version": "Versão"
+    },
+    "detail": {
+      "status": "Estado"
+    },
+    "files": {
+      "columns": {
+        "file": "Arquivo",
+        "lastParsed": "Último parse",
+        "parseDuration": "Duração do parse"
+      },
+      "file_many": "Arquivos",
+      "file_one": "Arquivo",
+      "file_other": "Arquivos",
+      "file_zero": "Nenhum arquivo",
+      "importErrorForbidden": "Você não tem permissão para ler este erro de 
importação.",
+      "importErrorGone": "Este erro de importação já não está registrado. 
Provavelmente foi corrigido por um novo parse.",
+      "neverParsed": "Nunca",
+      "showImportError_many": "Ver {{count, number}} de erros",
+      "showImportError_one": "Ver erro",
+      "showImportError_other": "Ver {{count, number}} erros",
+      "showImportError_zero": "Nenhum erro"
+    },
+    "inactive": "Inativo",
+    "neverRefreshed": "Nunca",
+    "notRefreshedYet": "Ainda não atualizado",
+    "notVersioned": "Sem versão"
+  },
+  "deadlines": {
+    "columns": {
+      "alertName": "Nome do alerta",
+      "deadlineTime": "Hora do prazo",
+      "status": "Estado"
+    },
+    "deadline_many": "Prazos",
+    "deadline_one": "Prazo",
+    "deadline_other": "Prazos",
+    "deadline_zero": "Nenhum prazo",
+    "filters": {
+      "status": "Estado",
+      "statusOptions": {
+        "all": "Todos",
+        "missed": "Não cumprido",
+        "pending": "Pendente"
+      }
+    },
+    "title": "Prazos"
+  },
   "xcom": {
     "add": {
       "error": "Falha ao adicionar XCom",
@@ -21,6 +76,7 @@
     "columns": {
       "dag": "Dag",
       "key": "Chave",
+      "timestamp": "Data e hora",
       "value": "Valor"
     },
     "delete": {
@@ -38,6 +94,10 @@
       "successTitle": "XCom Atualizado",
       "title": "Editar XCom"
     },
+    "entry_many": "Entradas de XCom",
+    "entry_one": "Entrada de XCom",
+    "entry_other": "Entradas de XCom",
+    "entry_zero": "Nenhuma entrada de XCom",
     "key": "Chave",
     "title": "XCom",
     "value": "Valor"
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
index 2396620372f..09ace2367ab 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
@@ -8,6 +8,7 @@
     "Variables": "Variáveis"
   },
   "allOperators": "Todos os Operadores",
+  "allTeams": "Todas as equipes",
   "appearance": {
     "appearance": "Aparência",
     "darkMode": "Modo Escuro",
@@ -22,18 +23,25 @@
   "assetEvent_one": "Evento de Asset",
   "assetEvent_other": "Eventos de Asset",
   "assetEvent_zero": "Nenhum evento de asset",
+  "assetInactive": {
+    "tooltip": "O Asset upstream foi desativado; o agendador está retendo a 
avaliação da partição até que ele seja reativado."
+  },
   "backfill_many": "Backfills",
   "backfill_one": "Backfill",
   "backfill_other": "Backfills",
   "backfill_zero": "Nenhum backfill",
+  "breadcrumb": "Trilha",
   "browse": {
     "auditLog": "Log de Auditoria",
+    "dagBundles": "Pacotes do Dag",
+    "deadlines": "Prazos",
     "jobs": "Tarefas",
     "requiredActions": "Ações Necessárias",
     "xcoms": "XComs"
   },
   "collapseAllExtra": "Recolher todos os extra json",
   "collapseDetailsPanel": "Recolher Painel de Detalhes",
+  "consumingAsset": "Asset consumidor",
   "createdAssetEvent_many": "Eventos de Asset Criados",
   "createdAssetEvent_one": "Evento de Asset Criado",
   "createdAssetEvent_other": "Eventos de Asset Criados",
@@ -42,8 +50,13 @@
   "dag_one": "Dag",
   "dag_other": "Dags",
   "dag_zero": "Nenhum Dag",
+  "dagBundle_many": "Pacotes do Dag",
+  "dagBundle_one": "Pacote do Dag",
+  "dagBundle_other": "Pacotes do Dag",
+  "dagBundle_zero": "Nenhum pacote do Dag",
   "dagDetails": {
     "activeRuns": "Execuções Ativas",
+    "bundleVersion": "Versão do pacote",
     "catchup": "Catchup",
     "dagRunTimeout": "Tempo Limite da Execução do Dag",
     "defaultArgs": "Argumentos Padrão",
@@ -63,7 +76,8 @@
     "owner": "Proprietário",
     "params": "Parâmetros",
     "schedule": "Agendamento",
-    "tags": "Etiquetas"
+    "tags": "Etiquetas",
+    "team": "Equipe"
   },
   "dagId": "ID do Dag",
   "dagRun": {
@@ -78,6 +92,7 @@
     "expectedDuration": "Duração Esperada",
     "lastSchedulingDecision": "Última Decisão de Agendamento",
     "mappedPartitionKey": "Chave de partição mapeada",
+    "partitionDate": "Data da partição",
     "partitionKey": "Chave de partição",
     "queuedAt": "Enfileirado Em",
     "runAfter": "Executar Depois",
@@ -91,8 +106,7 @@
   "dagRun_other": "Execuções do Dag",
   "dagRun_zero": "Nenhuma execução do Dag",
   "dagRunId": "ID da Execução do Dag",
-  "defaultToGraphView": "Padrão para visualização gráfica",
-  "defaultToGridView": "Padrão para visualização em grade",
+  "dagRunState": "Estado da execução do Dag",
   "delete": "Excluir",
   "diff": "Diff",
   "diffCompareWith": "Comparar com",
@@ -118,8 +132,19 @@
     "home": "Início",
     "invalidUrl": "Página não encontrada. Verifique o URL e tente novamente.",
     "notFound": "Página Não Encontrada",
+    "reload": "Recarregar página",
     "title": "Erro"
   },
+  "errors": {
+    "forbidden": {
+      "description": "Você não tem permissão para realizar esta ação.",
+      "title": "Acesso negado"
+    }
+  },
+  "event_many": "Eventos",
+  "event_one": "Evento",
+  "event_other": "Eventos",
+  "event_zero": "Nenhum evento",
   "expand": {
     "collapse": "Recolher",
     "expand": "Expandir",
@@ -131,19 +156,48 @@
     "all": "Todos",
     "and": "E",
     "any": "Qualquer",
+    "hiddenAsset": "Asset oculto",
     "or": "OU"
   },
   "filter": "Filtro",
   "filters": {
+    "addFilter": "Adicionar filtro",
+    "allIterations": "Todas",
+    "completedAt": "Concluído em",
+    "date": "Data",
     "durationFrom": "Duração De",
     "durationTo": "Duração Até",
     "endTime": "Hora de Fim",
+    "iteration": "Iteração",
     "logicalDateFrom": "Data Lógica De",
     "logicalDateTo": "Data Lógica Para",
+    "loop": "Ciclo",
+    "loopAllIterations": "{{loop}} todas",
+    "loopIteration": "{{loop}} {{index}}",
+    "loopPlaceholder": "Selecionar um ciclo",
+    "maxActiveRunsFrom": "Máximo de execuções ativas de",
+    "maxActiveRunsTo": "Máximo de execuções ativas até",
+    "removeFilter": "Remover filtro",
     "runAfterFrom": "Executar Depois De",
     "runAfterTo": "Executar Depois Para",
+    "searchAsset": "Pesquisar Asset",
     "selectDateRange": "Selecionar intervalo de datas",
-    "startTime": "Hora de Início"
+    "selectDateTime": "Selecionar data e hora",
+    "startTime": "Hora de Início",
+    "switchIteration": "Trocar iteração",
+    "time": "Hora"
+  },
+  "fullscreen": {
+    "tooltip": "Pressione {{hotkey}} para tela cheia"
+  },
+  "generateToken": "Gerar token",
+  "includedIn": "Incluído em",
+  "key": "Chave",
+  "loading": "Carregando…",
+  "logLevel": {
+    "hide": "Ocultar níveis de log",
+    "hotkey": "l",
+    "show": "Mostrar níveis de log"
   },
   "logicalDate": "Data Lógica",
   "logout": "Sair",
@@ -164,20 +218,34 @@
     "assets": "Assets",
     "browse": "Navegar",
     "dags": "Dags",
+    "dashboard": "Painel",
     "docs": "Documentação",
     "home": "Início",
     "legacyFabViews": "Visualizações Legacy FAB",
     "plugins": "Plugins",
     "security": "Segurança"
   },
+  "no": "Não",
   "noItemsFound": "Nenhum {{modelName}} encontrado",
   "note": {
     "add": "Adicionar uma nota",
     "dagRun": "Nota da Execução do Dag",
+    "edit": "Editar nota",
     "label": "Nota",
     "placeholder": "Adicionar uma nota...",
-    "taskInstance": "Nota da Instância de Tarefa"
+    "preview": "Pré-visualizar",
+    "taskInstance": "Nota da Instância de Tarefa",
+    "write": "Escrever"
+  },
+  "overallStatus": "Estado geral",
+  "pagination": {
+    "nextPage": "Página seguinte",
+    "previousPage": "Página anterior"
   },
+  "partition_many": "Partições",
+  "partition_one": "Partição",
+  "partition_other": "Partições",
+  "partition_zero": "Nenhuma partição",
   "partitionedDagRun_many": "Execuções de Dag Particionadas",
   "partitionedDagRun_one": "Execução de Dag Particionada",
   "partitionedDagRun_other": "Execuções de Dag Particionadas",
@@ -185,13 +253,32 @@
   "partitionedDagRunDetail": {
     "receivedAssetEvents": "Eventos de Asset recebidos"
   },
-  "pendingDagRun_many": "{{count, number}} Execuções de Dag Pendentes",
+  "pause": "Pausar",
+  "pendingDagRun_many": "{{count, number}} de Execuções de Dag Pendentes",
   "pendingDagRun_one": "{{count, number}} Execução de Dag Pendente",
   "pendingDagRun_other": "{{count, number}} Execuções de Dag Pendentes",
   "pendingDagRun_zero": "Nenhuma execução de dag pendente",
+  "presetFilters": {
+    "deleteTitle": "Excluir filtro salvo",
+    "deleteWarning": "Os filtros salvos ficam armazenados apenas neste 
navegador.",
+    "duplicate": "O filtro salvo \"{{name}}\" já guarda exatamente esta 
configuração.",
+    "empty": "Nenhum filtro salvo",
+    "info": {
+      "default": "Fixe um filtro salvo como padrão e ele é aplicado 
automaticamente quando você abre esta página sem filtros.",
+      "save": "Salve os filtros e a ordenação atuais como um filtro salvo 
nomeado e volte a ele quando quiser.",
+      "storage": "Os filtros salvos ficam armazenados neste navegador."
+    },
+    "namePlaceholder": "Nome do filtro salvo",
+    "nothingToSave": "Nada para salvar. Aplique filtros ou ordenação para 
salvar um filtro salvo.",
+    "save": "Salvar",
+    "setDefault": "Definir como padrão",
+    "title": "Filtros salvos",
+    "unsetDefault": "Remover o padrão"
+  },
   "reset": "Resetar",
   "runId": "ID da Execução",
   "runTypes": {
+    "asset_materialization": "Materialização de Asset",
     "asset_triggered": "Asset Acionado",
     "backfill": "Backfill",
     "manual": "Manual",
@@ -204,6 +291,13 @@
     },
     "tooltip": "Pressione {{hotkey}} para rolar para {{direction}}"
   },
+  "search": {
+    "advanced": {
+      "description": "Corresponder em qualquer parte do valor (busca por 
substring). Mais lento nas instalações grandes porque não pode usar o índice 
B-tree padrão. Veja a seção da documentação sobre índices de metadados 
personalizados para detalhes.",
+      "title": "Corresponder em qualquer parte",
+      "toggleLabel": "Alternar a busca em qualquer parte"
+    }
+  },
   "security": {
     "actions": "Ações",
     "permissions": "Permissões",
@@ -212,8 +306,131 @@
     "users": "Usuários"
   },
   "selectLanguage": "Selecionar Idioma",
+  "selected": "Selecionado",
+  "settings": {
+    "clearing": {
+      "keepTaskState": {
+        "helper": "Manter por padrão as entradas do armazenamento de estado da 
tarefa ao limpar instâncias de tarefa, em vez de descartá-las.",
+        "label": "Manter o estado da tarefa ao limpar"
+      },
+      "preventRunningTask": {
+        "helper": "Ignorar tarefas que estão em execução ao limpar instâncias 
de tarefa.",
+        "label": "Impedir limpar tarefas em execução"
+      },
+      "runSelection": {
+        "helper": "Opções selecionadas por padrão ao limpar uma execução do 
Dag.",
+        "label": "Seleção padrão ao limpar a execução"
+      },
+      "taskSelection": {
+        "helper": "Opções selecionadas por padrão ao limpar instâncias de 
tarefa.",
+        "label": "Seleção padrão ao limpar a tarefa"
+      },
+      "title": "Limpeza"
+    },
+    "dagsList": {
+      "recentTasks": {
+        "helper": "Mostrar os estados recentes das tarefas de cada Dag na 
lista de Dags. Desligue para não carregá-los, o que pode ajudar nas instalações 
com muitos Dags.",
+        "label": "Mostrar tarefas recentes"
+      },
+      "title": "Lista de Dags"
+    },
+    "description": "Estas preferências ficam salvas apenas neste navegador e 
valem para toda a aplicação.",
+    "general": {
+      "landingPage": {
+        "helper": "Página mostrada quando você abre o Airflow.",
+        "label": "Página inicial",
+        "options": {
+          "dags": "Dags",
+          "dashboard": "Painel"
+        }
+      },
+      "title": "Geral"
+    },
+    "graph": {
+      "defaultDirection": {
+        "helper": "Direção do layout para grafos de Dag e de Asset que você 
ainda não definiu individualmente.",
+        "label": "Direção padrão do grafo"
+      },
+      "taskGroupsExpanded": {
+        "helper": "Expandir grupos de tarefas em Dags nos quais você não 
salvou uma seleção de grupo. As seleções existentes são mantidas.",
+        "label": "Expandir grupos de tarefas por padrão"
+      },
+      "title": "Grafo"
+    },
+    "marking": {
+      "taskSelection": {
+        "helper": "Opções selecionadas por padrão ao marcar o estado de uma 
instância de tarefa.",
+        "label": "Seleção padrão ao marcar"
+      },
+      "title": "Marcação"
+    },
+    "search": {
+      "matchAnywhere": {
+        "helper": "$t(search.advanced.description) As escolhas de cada barra 
de pesquisa e os links compartilhados continuam a ter prioridade.",
+        "label": "Corresponder em qualquer parte por padrão"
+      },
+      "title": "Pesquisa"
+    },
+    "taskInstance": {
+      "defaultTab": {
+        "helper": "Aba mostrada primeiro quando você abre uma instância de 
tarefa. Links para uma aba específica continuam a abrir essa aba.",
+        "label": "Aba padrão da instância de tarefa"
+      },
+      "title": "Instância de tarefa"
+    },
+    "title": "Configurações"
+  },
+  "shortcuts": {
+    "categories": {
+      "code": "Código",
+      "dagView": "Visualização do Dag",
+      "filters": "Filtros",
+      "global": "Global",
+      "logs": "Logs",
+      "navigation": "Navegação",
+      "runActions": "Ações de execução e tarefa",
+      "search": "Pesquisa"
+    },
+    "descriptions": {
+      "clearRun": "Limpar $t(dagRun_one)",
+      "clearTaskInstance": "Limpar $t(taskInstance_one)",
+      "downloadLogs": "Baixar logs",
+      "focusFilterSearch": "Focar a pesquisa de filtros",
+      "focusLogSearch": "Pesquisar logs",
+      "focusSearch": "Focar a pesquisa",
+      "markRunFailed": "Marcar $t(dagRun_one) como falha",
+      "markRunSuccess": "Marcar $t(dagRun_one) como sucesso",
+      "markTaskFailed": "Marcar $t(task_one) como falha",
+      "markTaskGroupFailed": "Marcar $t(taskGroup_one) como falha",
+      "markTaskGroupSuccess": "Marcar $t(taskGroup_one) como sucesso",
+      "markTaskSuccess": "Marcar $t(task_one) como sucesso",
+      "navigateTasks": "Navegar $t(task_other)",
+      "openGraphFilters": "Abrir filtros do grafo",
+      "scrollBottom": "Rolar até o fim",
+      "scrollTop": "Rolar até o topo",
+      "searchDags": "Pesquisar $t(dag_other)",
+      "selectGridCellRange": "Selecionar um intervalo de 
$t(taskInstance_other) ou $t(taskGroup_other)",
+      "showHelp": "Mostrar $t(shortcuts.title)",
+      "toggleExpand": "Expandir ou recolher todos os grupos",
+      "toggleFullscreen": "Alternar tela cheia",
+      "toggleGraphGrid": "Alternar visualização de grafo / grade",
+      "toggleGridCellSelection": "Adicionar ou remover $t(taskInstance_one) ou 
$t(taskGroup_one) da seleção",
+      "toggleLogLevel": "Alternar níveis de log",
+      "toggleSource": "Alternar fonte",
+      "toggleTaskGroup": "Expandir ou recolher $t(taskGroup_one)",
+      "toggleTimestamp": "Alternar datas e horas",
+      "toggleWrap": "Alternar $t(wrap.wrap)"
+    },
+    "empty": "Não há atalhos de teclado disponíveis nesta página.",
+    "title": "Atalhos de teclado"
+  },
   "showDetailsPanel": "Mostrar Painel de Detalhes",
   "signedInAs": "Sessão iniciada como",
+  "slot": "Slot",
+  "slot_many": "Slots",
+  "slot_one": "Slot",
+  "slot_other": "Slots",
+  "slot_zero": "Nenhum slot",
   "source": {
     "hide": "Ocultar",
     "hotkey": "s",
@@ -226,11 +443,13 @@
   "startDate": "Data Inicial",
   "state": "Estado",
   "states": {
+    "awaiting_input": "Aguardando entrada",
     "deferred": "Deferido",
     "failed": "Falha",
     "no_status": "Sem Status",
     "none": "Sem Status",
     "open": "Aberto",
+    "pending": "Pendente",
     "planned": "Planejado",
     "queued": "Enfileirado",
     "removed": "Removido",
@@ -243,6 +462,9 @@
     "up_for_retry": "Pronto para tentar novamente",
     "upstream_failed": "Falha no upstream"
   },
+  "switchDag": "Trocar $t(dag_one)",
+  "switchDagRun": "Trocar $t(dagRun_one)",
+  "switchMapIndex": "Trocar $t(mapIndex)",
   "table": {
     "completedAt": "Concluído em",
     "createdAt": "Criado em",
@@ -254,30 +476,49 @@
     "filterReset_zero": "Nenhum filtro para resetar",
     "from": "De",
     "maxActiveRuns": "Máximo de Execuções Ativas",
+    "noResultsFound": "Nenhum resultado encontrado",
     "noTagsFound": "Nenhuma tag encontrada",
+    "noTeamsFound": "Nenhuma equipe encontrada",
+    "ownerPlaceholder": "Filtrar por proprietário",
     "tagMode": {
       "all": "Todos",
       "any": "Qualquer"
     },
     "tagPlaceholder": "Filtrar por tag",
-    "to": "Para"
+    "to": "Para",
+    "updatedAt": "Atualizado em"
   },
   "task": {
+    "dependsOnPast": "Depende do passado",
     "documentation": "Documentação da Tarefa",
     "lastInstance": "Última Instância",
     "operator": "Operador",
-    "triggerRule": "Regra de Trigger"
+    "retries": "Tentativas",
+    "triggerRule": "Regra de Trigger",
+    "waitForDownstream": "Aguardar o downstream"
   },
   "task_many": "Tarefas",
   "task_one": "Tarefa",
   "task_other": "Tarefas",
   "task_zero": "Nenhuma tarefa",
+  "taskGroup": {
+    "documentation": "Documentação do grupo de tarefas"
+  },
+  "taskGroup_many": "Grupos de Tarefas",
+  "taskGroup_one": "Grupo de Tarefas",
+  "taskGroup_other": "Grupos de Tarefas",
+  "taskGroup_zero": "Nenhum grupo de tarefas",
   "taskId": "ID da Tarefa",
   "taskInstance": {
+    "additionalAttributes": "Atributos adicionais da instância de tarefa",
     "dagVersion": "Versão do Dag",
     "executor": "Executor",
     "executorConfig": "Configuração do Executor",
     "hostname": "Hostname",
+    "id": "ID",
+    "iteration": "Iteração",
+    "loopDecision": "Decisão",
+    "loopIterations": "Iterações executadas",
     "maxTries": "Máximo de Tentativas",
     "pid": "PID",
     "pool": "Pool",
@@ -285,12 +526,21 @@
     "priorityWeight": "Prioridade",
     "queue": "Fila",
     "queuedWhen": "Enfileirado em",
+    "renderedMapIndex": "Índice do mapa renderizado",
+    "retryAt": "Tentar novamente em",
     "scheduledWhen": "Agendado em",
+    "stateReason": "Motivo do estado",
+    "stateReasonSummary": {
+      "failed": "Parou na tentativa {{tryNumber}} de {{totalTries}}",
+      "upForRetry": "Tentando novamente após a tentativa {{tryNumber}} de 
{{totalTries}}"
+    },
+    "trigger": "Trigger",
     "triggerer": {
       "assigned": "Triggerer atribuído",
       "class": "Classe do Trigger",
       "createdAt": "Tempo de criação do Trigger",
       "id": "ID do Trigger",
+      "job": "Tarefa do Disparador",
       "latestHeartbeat": "Último heartbeat do Trigger",
       "title": "Informações do Trigger"
     },
@@ -300,10 +550,23 @@
   "taskInstance_one": "Instância de Tarefa",
   "taskInstance_other": "Instâncias de Tarefa",
   "taskInstance_zero": "Nenhuma instância de tarefa",
+  "teams": {
+    "more_many": "e {{count, number}} de outros",
+    "more_one": "e {{count, number}} outro",
+    "more_other": "e {{count, number}} outros",
+    "more_zero": "e nenhum outro",
+    "none": "Nenhuma equipe",
+    "title": "Equipes"
+  },
   "timeRange": {
+    "anyTime": "Qualquer momento",
+    "in": "em",
+    "last7Days": "Últimos 7 dias",
     "last12Hours": "Últimas 12 Horas",
     "last24Hours": "Últimas 24 Horas",
+    "last30Days": "Últimos 30 dias",
     "lastHour": "Última Hora",
+    "latestRun": "Última execução",
     "pastWeek": "Semana Passada"
   },
   "timestamp": {
@@ -319,6 +582,13 @@
     "utc": "UTC (Tempo Universal Coordenado)"
   },
   "toaster": {
+    "bulkClear": {
+      "error": "Limpeza em Massa de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{count, number}} {{resourceName}} foram limpos com 
sucesso. Chaves: {{keys}}",
+        "title": "Limpeza em Massa de {{resourceName}} Submetida"
+      }
+    },
     "bulkDelete": {
       "error": "Exclusão em Massa de {{resourceName}} Falhou",
       "success": {
@@ -326,6 +596,13 @@
         "title": "Exclusão em Massa de {{resourceName}} Submetida"
       }
     },
+    "bulkUpdate": {
+      "error": "Atualização em Massa de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{count, number}} {{resourceName}} foram atualizados 
com sucesso. Chaves: {{keys}}",
+        "title": "Atualização em Massa de {{resourceName}} Submetida"
+      }
+    },
     "create": {
       "error": "Criação de {{resourceName}} Falhou",
       "success": {
@@ -355,14 +632,33 @@
       }
     }
   },
+  "tokenGeneration": {
+    "apiToken": "Token de API",
+    "cliToken": "Token de CLI",
+    "errorDescription": "Ocorreu um erro ao gerar o token. Tente novamente.",
+    "errorTitle": "Falha ao gerar o token",
+    "generate": "Gerar",
+    "selectType": "Selecione o tipo de token a gerar.",
+    "title": "Gerar token",
+    "tokenExpiresIn": "Este token expira em {{duration}}.",
+    "tokenGenerated": "O seu token foi gerado.",
+    "tokenShownOnce": "Este token só será mostrado uma vez. Copie-o agora."
+  },
   "total": "Total {{state}}",
   "triggered": "Acionado",
   "tryNumber": "Número de Tentativas",
+  "unpause": "Despausar",
   "user": "Usuário",
+  "validation": {
+    "mustBeAtLeast": "Deve ser pelo menos {{min}}.",
+    "mustBeValidNumber": "Deve ser um número válido."
+  },
+  "value": "Valor",
   "wrap": {
     "hotkey": "w",
     "tooltip": "Pressione {{hotkey}} para expandir ou recolher a secção",
     "unwrap": "Expandir",
     "wrap": "Recolher"
-  }
+  },
+  "yes": "Sim"
 }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json
index 54c7602e657..aed7db5ea95 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json
@@ -1,22 +1,40 @@
 {
   "backfill": {
-    "affected_many": "{{count, number}} execuções serão acionadas.",
+    "affected_many": "{{count, number}} de execuções serão acionadas.",
     "affected_one": "1 execução será acionada.",
     "affected_other": "{{count, number}} execuções serão acionadas.",
     "affected_zero": "Nenhuma execução será acionada.",
     "affectedNone": "Nenhuma execução correspondente aos critérios 
selecionados.",
     "allRuns": "Todas as Execuções",
     "backwards": "Executar para trás",
+    "completed": "Concluído",
     "dateRange": "Intervalo de Data",
     "errorStartDateBeforeEndDate": "A Data Inicial deve ser antes da Data 
Final",
+    "exceptionReason": {
+      "alreadyExists": "Já existe",
+      "inFlight": "Em andamento",
+      "unknown": "Desconhecido"
+    },
     "maxRuns": "Máximo de Execuções Ativas",
     "missingAndErroredRuns": "Execuções Faltando e com Erro",
     "missingRuns": "Execuções Faltando",
+    "notCreatedReason": "Motivo de não criação",
+    "overrideExistingParams": "Sobrescrever parâmetros nas execuções 
existentes",
+    "partitionRange": "Intervalo de partições",
+    "partitionsAffected_many": "{{count, number}} de partições receberão 
backfill:",
+    "partitionsAffected_one": "1 partição receberá backfill:",
+    "partitionsAffected_other": "{{count, number}} partições receberão 
backfill:",
+    "partitionsAffected_zero": "Nenhuma partição receberá backfill.",
+    "partitionsNone": "Nenhuma partição corresponde ao intervalo selecionado.",
     "permissionDenied": "Execução de teste falhou: o utilizador não tem 
permissão para criar backfills.",
     "reprocessBehavior": "Comportamento de Reprocessamento",
     "run": "Executar Backfill",
+    "running": "Executando",
+    "scheduleNotBackfillable": "O agendamento deste Dag não suporta backfills",
+    "schedulerPriorityHint": "As execuções de Dag de backfill são ordenadas 
depois das execuções que não são de backfill em cada ciclo do scheduler. As 
execuções de backfill podem permanecer enfileiradas por mais tempo se houver 
outras execuções que não são de backfill.",
     "selectDescription": "Executar este Dag para um intervalo de datas",
     "selectLabel": "Backfill",
+    "status": "Estado",
     "title": "Executar Backfill",
     "toaster": {
       "success": {
@@ -27,7 +45,8 @@
     "validation": {
       "datesRequired": "Ambas as datas de início e fim do intervalo devem ser 
fornecidas.",
       "startBeforeEnd": "A Data Inicial do Intervalo deve ser menor ou igual à 
Data Final do Intervalo."
-    }
+    },
+    "viewSlots": "Ver slots do Backfill #{{id}}"
   },
   "banner": {
     "backfillInProgress": "Backfill em progresso",
@@ -44,10 +63,7 @@
     "invalidJson": "Formato JSON inválido: {{errorMessage}}"
   },
   "dagWarnings": {
-    "error_many": "{{count, number}} Erros",
     "error_one": "1 Erro",
-    "error_other": "{{count, number}} Erros",
-    "error_zero": "Nenhum erro",
     "errorAndWarning": "1 Erro e {{warningText}}",
     "types": {
       "asset conflict": "Conflito de Asset",
@@ -56,7 +72,7 @@
       "runtime varying value": "Valor variável em tempo de execução",
       "task group cycle": "Ciclo no grupo de tarefas"
     },
-    "warning_many": "{{count, number}} Avisos",
+    "warning_many": "{{count, number}} de Avisos",
     "warning_one": "1 Aviso",
     "warning_other": "{{count, number}} Avisos",
     "warning_zero": "Nenhum aviso"
@@ -70,32 +86,36 @@
   },
   "durationChart": {
     "duration": "Duração (segundos)",
-    "lastDagRun_many": "Últimas {{count, number}} Execuções do Dag",
+    "lastDagRun_many": "Últimas {{count, number}} de Execuções do Dag",
     "lastDagRun_one": "Última Execução do Dag",
     "lastDagRun_other": "Últimas {{count, number}} Execuções do Dag",
     "lastDagRun_zero": "Nenhuma execução do Dag",
-    "lastTaskInstance_many": "Últimas {{count, number}} Instâncias de Tarefa",
+    "lastTaskInstance_many": "Últimas {{count, number}} de Instâncias de 
Tarefa",
     "lastTaskInstance_one": "Última Instância de Tarefa",
     "lastTaskInstance_other": "Últimas {{count, number}} Instâncias de Tarefa",
     "lastTaskInstance_zero": "Nenhuma instância de tarefa",
+    "medianTotalDuration": "Total: {{duration}}",
     "queuedDuration": "Duração da Fila",
     "runAfter": "Executar Depois",
     "runDuration": "Duração da Execução"
   },
   "fileUpload": {
-    "files_many": "{{count, number}} arquivos",
+    "files_many": "{{count, number}} de arquivos",
     "files_one": "1 arquivo",
     "files_other": "{{count, number}} arquivos",
     "files_zero": "Nenhum arquivo"
   },
   "flexibleForm": {
+    "durationPlaceholder": "Informe a duração no formato ISO 8601",
     "placeholder": "Selecionar Valor",
     "placeholderArray": "Digite cada string em uma nova linha",
     "placeholderExamples": "Comece a digitar para ver opções",
     "placeholderMulti": "Selecione um ou vários valores",
+    "validationErrorArrayElement": "Valor(es) de {{type}} inválido(s): 
{{values}}",
     "validationErrorArrayNotArray": "O valor deve ser um array.",
     "validationErrorArrayNotNumbers": "Todos os elementos do array devem ser 
números.",
     "validationErrorArrayNotObject": "Todos os elementos do array devem ser 
objetos.",
+    "validationErrorDuration": "Formato de duração ISO 8601 inválido",
     "validationErrorRequired": "Este campo é obrigatório"
   },
   "graph": {
@@ -103,15 +123,22 @@
     "directionLeft": "Direita para Esquerda",
     "directionRight": "Esquerda para Direita",
     "directionUp": "Inferior para Superior",
-    "downloadImage": "Baixar imagem do gráfico",
-    "downloadImageError": "Falha ao baixar a imagem do gráfico.",
+    "downloadImage": "Baixar imagem do grafo",
+    "downloadImageError": "Falha ao baixar a imagem do grafo.",
     "downloadImageErrorTitle": "Download Falhou",
     "otherDagRuns": "+Outras Execuções do Dag",
-    "taskCount_many": "{{count, number}} Tarefas",
+    "taskCount_many": "{{count, number}} de Tarefas",
     "taskCount_one": "{{count, number}} Tarefa",
     "taskCount_other": "{{count, number}} Tarefas",
     "taskCount_zero": "Nenhuma tarefa",
-    "taskGroup": "Grupo de Tarefas"
+    "taskGroup": "Grupo de Tarefas",
+    "zoomToTask": "Ampliar para a tarefa selecionada"
+  },
+  "jsonPreview": {
+    "items_many": "{{count, number}} de itens",
+    "items_one": "1 item",
+    "items_other": "{{count, number}} itens",
+    "items_zero": "Nenhum item"
   },
   "limitedList": "+{{count, number}} mais",
   "limitedList.allItems": "Todos os {{count, number}} itens:",
@@ -122,7 +149,7 @@
   "limitedList.clickToInteract": "Clique em uma etiqueta para filtrar os Dags",
   "limitedList.clickToOpenFull": "Clique em \"+{{count, number}} mais\" para 
ver a lista completa",
   "limitedList.copyPasteText": "Você pode copiar e colar o texto acima",
-  "limitedList.showingItems_many": "Mostrando {{count, number}} itens",
+  "limitedList.showingItems_many": "Mostrando {{count, number}} de itens",
   "limitedList.showingItems_one": "Mostrando 1 item",
   "limitedList.showingItems_other": "Mostrando {{count, number}} itens",
   "limitedList.showingItems_zero": "Mostrando 0 itens",
@@ -130,7 +157,30 @@
     "file": "Arquivo",
     "location": "linha {{line}} em {{name}}"
   },
+  "passwordToggle": {
+    "hide": "Ocultar valor",
+    "show": "Mostrar valor"
+  },
+  "pausedDag": {
+    "drain": "Drenar",
+    "drainDescription": "As execuções inacabadas continuam, mas nenhuma 
execução agendada é criada. Backfills pausados permanecem pausados. O Dag pausa 
de novo quando todas as execuções inacabadas terminam.",
+    "keepPaused": "Manter pausado",
+    "keepPausedDescription": "Execuções novas e inacabadas esperam até o Dag 
ser despausado.",
+    "title": "O Dag está pausado",
+    "unfinishedRunsWillRun_many": "{{count, number}} de execuções do Dag 
inacabadas serão iniciadas ou retomadas.",
+    "unfinishedRunsWillRun_one": "1 execução do Dag inacabada será iniciada ou 
retomada.",
+    "unfinishedRunsWillRun_other": "{{count, number}} execuções do Dag 
inacabadas serão iniciadas ou retomadas.",
+    "unfinishedRunsWillRun_zero": "Nenhuma execução do Dag inacabada será 
iniciada ou retomada.",
+    "unpause": "Despausar",
+    "unpauseDescription": "O Dag fica ativo: as execuções inacabadas continuam 
e o agendamento é retomado. Backfills pausados permanecem pausados."
+  },
   "reparseDag": "Reparse Dag",
+  "slowestTaskInstances": {
+    "empty": "Nenhuma instância de tarefa concluída neste intervalo",
+    "title": "Instâncias de tarefa mais lentas"
+  },
+  "sort": "ordenar",
+  "sortMultiColumnHint": "Shift-clique para ordenar por várias colunas",
   "sortedAscending": "Ordenado em ordem crescente",
   "sortedDescending": "Ordenado em ordem decrescente",
   "sortedUnsorted": "Não ordenado",
@@ -147,14 +197,24 @@
   "toggleTableView": "Mostrar visualização de tabela",
   "triggerDag": {
     "button": "Acionar",
+    "dagStartEndDate": {
+      "both": "Data inicial do Dag: {{startDate}}, data final: {{endDate}}",
+      "end": "Data final do Dag: {{endDate}}",
+      "noTaskWillRun": "Nenhuma tarefa será executada.",
+      "start": "Data inicial do Dag: {{startDate}}"
+    },
     "dataInterval": "Intervalo de Dados",
     "dataIntervalAuto": "Inferido da Data Lógica e do Timetable",
     "dataIntervalManual": "Especificar Manualmente",
+    "editConfigAndTrigger": "Editar configuração e acionar",
     "intervalEnd": "Fim",
     "intervalStart": "Início",
     "loading": "Carregando informações do Dag...",
     "loadingFailed": "Falha ao carregar informações do Dag. Por favor, tente 
novamente.",
     "manualRunDenied": "Execuções manuais não são permitidas para este Dag",
+    "partitionKeyHelp": "Opcional — aplica-se apenas a Dags particionados",
+    "recentConfig": "Configurações recentes",
+    "recentConfigPlaceholder": "Selecionar uma configuração recente",
     "runIdHelp": "Opcional - será gerado se não for fornecido",
     "selectDescription": "Acionar uma única execução deste Dag",
     "selectLabel": "Execução Única",
@@ -168,7 +228,8 @@
         "title": "Execução do Dag acionada"
       }
     },
-    "triggerAgainWithConfig": "Acionar novamente com esta configuração"
+    "triggerAgainWithConfig": "Acionar novamente com esta configuração",
+    "triggerOptions": "Opções de acionamento"
   },
   "trimText": {
     "details": "Detalhes",
@@ -185,6 +246,7 @@
   "versionSelect": {
     "allVersions": "Todas as Versões",
     "dagVersion": "Versão do Dag",
+    "placeholder": "Selecionar versão",
     "versionCode": "v{{versionCode}}"
   }
 }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json
index 8c294d74820..27496fd8a93 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json
@@ -1,4 +1,5 @@
 {
+  "allMapIndexes": "Todos os índices do mapa",
   "allRuns": "Todas as Execuções",
   "blockingDeps": {
     "dependency": "Dependência",
@@ -6,6 +7,7 @@
     "title": "Dependências Bloqueando Tarefa de Ser Agendada"
   },
   "calendar": {
+    "backfill": "Backfill",
     "daily": "Diário",
     "hourly": "Por Hora",
     "legend": {
@@ -34,23 +36,79 @@
       "wednesday": "Qua"
     }
   },
+  "callbacks": {
+    "callback_many": "Callbacks",
+    "callback_one": "Callback",
+    "callback_other": "Callbacks",
+    "callback_zero": "Nenhum Callback",
+    "columns": {
+      "alertName": "Nome do alerta",
+      "callback": "Callback",
+      "deadlineTime": "Hora do prazo",
+      "missedBy": "Atraso",
+      "type": "Tipo"
+    },
+    "types": {
+      "executor": "Síncrono",
+      "triggerer": "Assíncrono"
+    }
+  },
   "code": {
     "bundleUrl": "URL do Bundle",
     "noCode": "Nenhum Código Encontrado",
     "parseDuration": "Duração do Processamento:",
     "parsedAt": "Processado em:"
   },
+  "deadlineAlerts": {
+    "completionRule": "Deve terminar em até {{interval}} a partir de 
{{reference}}",
+    "completionRuleDynamic": "Deve terminar em um intervalo variável medido a 
partir de {{reference}}",
+    "count_many": "{{count, number}} de prazos",
+    "count_one": "{{count, number}} prazo",
+    "count_other": "{{count, number}} prazos",
+    "count_zero": "Nenhum prazo",
+    "referenceType": {
+      "AverageRuntimeDeadline": "tempo médio de execução",
+      "DagRunLogicalDateDeadline": "data lógica",
+      "DagRunQueuedAtDeadline": "tempo de fila"
+    }
+  },
+  "deadlineStatus": {
+    "actual": "Real",
+    "expected": "Esperado",
+    "finishedEarly": "Terminou {{duration}} antes do prazo",
+    "finishedLate": "Terminou {{duration}} depois do prazo",
+    "label": "Prazo",
+    "met": "Cumprido",
+    "missed": "Não cumprido",
+    "missedCount_many": "{{count, number}} de prazos não cumpridos",
+    "missedCount_one": "{{count, number}} prazo não cumprido",
+    "missedCount_other": "{{count, number}} prazos não cumpridos",
+    "missedCount_zero": "Nenhum prazo não cumprido",
+    "mixedCount": "{{missedCount, number}} não cumpridos, {{upcomingCount, 
number}} iminentes",
+    "stillRunning": "Ainda executando",
+    "upcoming": "Iminente",
+    "upcomingCount_many": "{{count, number}} de prazos iminentes",
+    "upcomingCount_one": "{{count, number}} prazo iminente",
+    "upcomingCount_other": "{{count, number}} prazos iminentes",
+    "upcomingCount_zero": "Nenhum prazo iminente"
+  },
   "extraLinks": "Links Extra",
   "grid": {
     "buttons": {
+      "newerRuns": "Execuções mais recentes",
+      "olderRuns": "Execuções mais antigas",
       "resetToLatest": "Redefinir para a Última",
       "toggleGroup": "Alternar Grupo"
-    }
+    },
+    "runTypeLegend": "Legenda do tipo de execução"
   },
   "header": {
     "buttons": {
       "advanced": "Avançado",
       "dagDocs": "Documentação do Dag"
+    },
+    "status": {
+      "deactivated": "Desativado"
     }
   },
   "logs": {
@@ -59,19 +117,53 @@
     "critical": "CRÍTICO",
     "debug": "DEBUG",
     "error": "ERRO",
-    "fullscreen": {
-      "button": "Tela cheia",
-      "tooltip": "Pressione {{hotkey}} para tela cheia"
-    },
     "info": "INFO",
     "noTryNumber": "Nenhum número de tentativa",
+    "search": {
+      "matchCount": "{{current, number}} de {{total, number}}",
+      "nextMatch": "Correspondência seguinte",
+      "noMatches": "Nenhuma correspondência",
+      "placeholder": "Pesquisar logs...",
+      "previousMatch": "Correspondência anterior"
+    },
     "settings": "Configurações",
+    "tryNotStarted": "Esta tentativa ainda não começou.",
+    "viewFailedTry": "Ver logs da tentativa falhada {{tryNumber}}",
     "viewInExternal": "Ver logs em {{name}} (tentativa {{attempt}})",
+    "viewPreviousTry": "Ver logs da tentativa anterior {{tryNumber}}",
+    "waitingToRetry": "A tentativa {{tryNumber}} está aguardando para tentar 
novamente.",
     "warning": "AVISO"
   },
-  "navigation": {
-    "navigation": "Navegação: Shift+{{arrow}}",
-    "toggleGroup": "Alternar grupo: Espaço"
+  "loop": {
+    "history": {
+      "capLabel": "Limite: {{max}}",
+      "iterationsAxis": "Iterações",
+      "stats": {
+        "capHits": "Atingiu o limite",
+        "medianIterations": "Mediana de iterações"
+      },
+      "title": "Iterações por execução"
+    },
+    "iterationLabel": "Iteração {{index}}",
+    "iterations": "Iterações",
+    "outcome": "Resultado",
+    "reason": {
+      "cap_reached": "Atingiu o limite de iterações ({{max}})",
+      "failed": "Falhou na iteração {{index}}",
+      "iteration_failed": "A iteração {{index}} falhou em {{taskId}}",
+      "ran_to_cap": "Executou todas as {{max}} iterações permitidas",
+      "removed": "Removido",
+      "running": "Executando",
+      "skipped": "Pulado",
+      "stopped_early": "Parou antes, na iteração {{index}}"
+    },
+    "rules": {
+      "behaviour": "Comportamento",
+      "boundedFor": "Executa um número fixo de iterações",
+      "exitCriteria": "Critério de saída",
+      "maxIterations": "Máximo de iterações",
+      "whileUntil": "Repete até {{criteria}}"
+    }
   },
   "notFound": {
     "back": "Voltar",
@@ -100,6 +192,10 @@
       "assetEvent_other": "Eventos de Asset Criados",
       "assetEvent_zero": "Nenhum evento de asset criado"
     },
+    "deadlines": {
+      "showAll": "Mostrar tudo",
+      "title": "Prazos"
+    },
     "failedLogs": {
       "hideLogs": "Ocultar Logs",
       "showLogs": "Mostrar Logs",
@@ -111,23 +207,27 @@
     "buttons": {
       "options": "Opções",
       "showGantt": "Mostrar Gantt",
-      "showGraphShortcut": "Mostrar Gráfico (Pressione g)",
+      "showGraphShortcut": "Mostrar Grafo (Pressione g)",
       "showGridShortcut": "Mostrar Grade (Pressione g)"
     },
     "dagRuns": {
       "label": "Número de Execuções do Dag"
     },
     "dependencies": {
-      "label": "Dependências",
-      "options": {
-        "allDagDependencies": "Todas as Dependências do Dag",
-        "externalConditions": "Condições Externas",
-        "onlyTasks": "Somente Tarefas"
-      },
-      "placeholder": "Dependências"
+      "allDagDependencies": "Todas as dependências do Dag"
     },
     "graphDirection": {
-      "label": "Direção do Gráfico"
+      "label": "Direção do Grafo"
+    },
+    "graphFilters": {
+      "clearFilters": "Limpar filtros",
+      "durationGte": "Duração mínima (s)",
+      "durationGteHint": "Para tarefas mapeadas, mede o intervalo total entre 
todas as instâncias",
+      "mapIndex": "Índice do mapa mínimo",
+      "mapIndexHint": "Mostra tarefas mapeadas expandidas pelo menos até este 
índice",
+      "selectStatus": "Selecionar estado",
+      "selectTaskGroup": "Selecionar grupo de tarefas",
+      "title": "Filtros de tarefas"
     },
     "showVersionIndicator": {
       "label": "Mostrar Indicador de Versão",
@@ -177,6 +277,7 @@
     "auditLog": "Log de Auditoria",
     "backfills": "Backfills",
     "calendar": "Calendário",
+    "callbacks": "Callbacks",
     "code": "Código",
     "details": "Detalhes",
     "logs": "Logs",
@@ -189,11 +290,112 @@
     "requiredActions": "Ações Necessárias",
     "runs": "Execuções",
     "taskInstances": "Instâncias de Tarefa",
+    "taskStateStore": "Armazenamento de estado da tarefa",
     "tasks": "Tarefas",
+    "versions": "Versões",
     "xcom": "XCom"
   },
   "taskGroups": {
     "collapseAll": "Recolher todos os grupos de tarefas",
     "expandAll": "Expandir todos os grupos de tarefas"
+  },
+  "taskStateStore": {
+    "add": "Adicionar armazenamento de estado da tarefa",
+    "clearAll": {
+      "resource": "todo o armazenamento de estado da tarefa",
+      "title": "Limpar todo o armazenamento de estado da tarefa",
+      "warning": "Todo o armazenamento de estado da tarefa será apagado. 
Tarefas que usam este armazenamento para acompanhar trabalho externo não 
poderão retomar sem executar de novo desde o início."
+    },
+    "delete": "Excluir armazenamento de estado da tarefa",
+    "deleteWarning": "A tarefa perderá esta memória persistida. Se a tarefa 
usa esta chave para acompanhar trabalho externo (por exemplo, o ID de um job 
externo), não poderá retomá-lo.",
+    "edit": "Editar armazenamento de estado da tarefa",
+    "emptyStore": "O armazenamento de estado da tarefa guarda valores que 
persistem entre tentativas. Os workers podem escrever no armazenamento de 
estado da tarefa através do Task SDK.",
+    "entry_many": "Entradas",
+    "entry_one": "Entrada",
+    "entry_other": "Entradas",
+    "entry_zero": "Nenhuma entrada",
+    "expiresAt": {
+      "column": "Expira em",
+      "custom": "Personalizado",
+      "default": "Padrão ({{interval}})",
+      "label": "Expiração",
+      "never": "Nunca"
+    },
+    "title": "Armazenamento de Estado da Tarefa"
+  },
+  "versions": {
+    "base": "Comparar de",
+    "categories": {
+      "asset": "Asset",
+      "authorization": "Autorização",
+      "callback": "Callback",
+      "deadline": "Prazo",
+      "dependency": "Dependência",
+      "metadata": "Metadados",
+      "param": "Parâmetro",
+      "provenance": "Proveniência",
+      "schedule": "Agendamento",
+      "task": "Tarefa",
+      "unknown": "Desconhecido"
+    },
+    "codeAccess": "Os valores exigem acesso ao código do Dag",
+    "columns": {
+      "after": "Depois",
+      "before": "Antes",
+      "category": "Categoria",
+      "impact": "Impacto",
+      "operation": "Operação",
+      "path": "Caminho"
+    },
+    "heading": "Versão {{base}} → Versão {{target}}",
+    "impacts": {
+      "authorization": "Autorização",
+      "execution": "Execução",
+      "metadata": "Metadados",
+      "provenance": "Proveniência",
+      "unknown": "Desconhecido"
+    },
+    "limitReached": {
+      "description": "Há mais alterações do que o limite de Máximo de 
alterações permite. Aumente o limite para ver o restante.",
+      "descriptionDefault": "Há mais alterações do que o limite padrão 
permite. Defina Máximo de alterações mais alto para ver o restante.",
+      "title": "Mostrando apenas as primeiras {{limit, number}} alterações"
+    },
+    "maxChanges": "Máximo de alterações",
+    "maxChangesDefault": "Padrão",
+    "noChanges": "Estas versões têm o mesmo estado.",
+    "operations": {
+      "added": "Adicionado",
+      "changed": "Alterado",
+      "removed": "Removido"
+    },
+    "pathOccurrences_many": "{{count, number}} de alterações compartilham este 
caminho",
+    "pathOccurrences_one": "{{count, number}} alteração compartilha este 
caminho",
+    "pathOccurrences_other": "{{count, number}} alterações compartilham este 
caminho",
+    "pathOccurrences_zero": "Nenhuma alteração compartilha este caminho",
+    "pathOccurrencesAtLeast_many": "Pelo menos {{count, number}} de alterações 
compartilham este caminho",
+    "pathOccurrencesAtLeast_one": "Pelo menos {{count, number}} alteração 
compartilha este caminho",
+    "pathOccurrencesAtLeast_other": "Pelo menos {{count, number}} alterações 
compartilham este caminho",
+    "pathOccurrencesAtLeast_zero": "Nenhuma alteração compartilha este 
caminho",
+    "record_many": "Registros",
+    "record_one": "Registro",
+    "record_other": "Registros",
+    "record_zero": "Nenhum registro",
+    "schemaChange": "Schema serializado {{baseSchema}} → {{targetSchema}}",
+    "selectPrompt": "Selecione duas versões para ver o que mudou entre elas.",
+    "summary_many": "{{count, number}} de alterações",
+    "summary_one": "{{count, number}} alteração",
+    "summary_other": "{{count, number}} alterações",
+    "summary_zero": "Nenhuma alteração",
+    "summaryAtLeast_many": "Pelo menos {{count, number}} de alterações",
+    "summaryAtLeast_one": "Pelo menos {{count, number}} alteração",
+    "summaryAtLeast_other": "Pelo menos {{count, number}} alterações",
+    "summaryAtLeast_zero": "Nenhuma alteração",
+    "target": "Comparar com",
+    "unavailable": {
+      "description": "Não foi possível comparar estas versões. Motivo:",
+      "title": "Comparação indisponível",
+      "withoutReason": "Não foi possível comparar estas versões."
+    },
+    "valuesHidden": "Valores ocultos"
   }
 }
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dags.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dags.json
index 9e741427c34..c2afad257a3 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dags.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dags.json
@@ -6,6 +6,11 @@
       "warning": "Isso removerá todas as metadados relacionados ao Dag, 
incluindo Execuções e Tarefas."
     }
   },
+  "draining": {
+    "badgeTooltip": "Este Dag pausa quando as execuções em andamento 
terminam.",
+    "label": "Em drenagem",
+    "tooltip": "Drenando {{dagDisplayName}} — pausa quando as execuções em 
andamento terminam. Clique para retomar."
+  },
   "favoriteDag": "Dag Favorito",
   "filters": {
     "allRunTypes": "Todos os Tipos de Execução",
@@ -15,14 +20,37 @@
       "favorite": "Favorito",
       "unfavorite": "Remover dos Favoritos"
     },
+    "favoriteState": "Estado de favorito",
+    "favoriteStatePlaceholder": "Selecionar estado de favorito…",
+    "hasImportErrors": "Tem erros de importação",
+    "noTimetableTypesFound": "Nenhum tipo de timetable encontrado",
     "paused": {
       "active": "Ativo",
       "all": "Todos",
       "paused": "Pausado"
     },
-    "runIdPatternFilter": "Pesquisar Execuções de Dag"
+    "pausedPlaceholder": "Selecionar estado de pausa…",
+    "pausedState": "Estado de pausa",
+    "requiresHitlAction": "Requer ação HITL",
+    "runIdPatternFilter": "Pesquisar Execuções de Dag",
+    "runState": "Estado da execução",
+    "runStatePlaceholder": "Selecionar estado da execução…",
+    "timetableType": "Tipo de timetable"
+  },
+  "folders": {
+    "all": "Todos os Dags",
+    "empty": "Nenhuma pasta",
+    "hide": "Ocultar pastas",
+    "show": "Mostrar pastas",
+    "title": "Pastas"
   },
   "ownerLink": "Link do Proprietário para {{owner}}",
+  "recentTaskStateCounts": {
+    "description": "Estado das tarefas de todas as execuções do Dag em 
andamento ou, se nenhuma estiver em andamento, da execução mais recente. Você 
pode desligar isso nas suas configurações.",
+    "label": "Tarefas recentes",
+    "loading": "Carregando contagens de estado das tarefas recentes",
+    "tooltip": "{{state}}: {{formattedCount}} — clique para filtrar tarefas"
+  },
   "runAndTaskActions": {
     "affectedTasks": {
       "noItemsFound": "Nenhuma tarefa encontrada.",
@@ -34,6 +62,11 @@
       "error": "Falha ao limpar {{type}}",
       "title": "Limpar {{type}}"
     },
+    "clearAllMapped": {
+      "button": "Limpar todas as tarefas mapeadas",
+      "buttonTooltip": "Pressione shift+c para limpar todas as instâncias de 
tarefa mapeadas",
+      "title": "Limpar todas as instâncias de tarefa mapeadas"
+    },
     "confirmationDialog": {
       "description": "A tarefa está atualmente em estado {{state}} iniciado 
pelo utilizador {{user}} às {{time}}. O utilizador não pode limpar esta tarefa 
até que termine de executar ou até que um utilizador desmarque a opção 
\"Impedir nova execução se a tarefa estiver em execução\" no diálogo de 
limpeza.",
       "title": "Não é Possível Limpar a Instância de Tarefa"
@@ -57,25 +90,47 @@
         "failed": "Pressione shift+f para marcar como falha",
         "success": "Pressione shift+s para marcar como sucesso"
       },
+      "skippedInfo": "Marcar uma instância de tarefa como pulada registra que 
ela foi intencionalmente não executada. As tarefas Downstream continuam a ser 
avaliadas pelas regras de trigger: com a regra padrão \"all_success\", elas 
também serão puladas. Só é possível pular instâncias de tarefa que ainda não 
começaram a executar, e apenas esta instância de tarefa é afetada.",
       "title": "Marcar {{type}} como {{state}}"
     },
     "options": {
       "downstream": "Downstream",
       "existingTasks": "Limpar tarefas existentes",
       "future": "Futuro",
+      "keepTaskState": "Manter o estado da tarefa e retomar",
+      "laterIterations": "Iterações posteriores",
       "onlyFailed": "Limpar somente tarefas falhadas",
       "past": "Passado",
       "preventRunningTasks": "Impedir nova execução se a tarefa estiver em 
execução",
       "queueNew": "Enfileirar novas tarefas",
       "runOnLatestVersion": "Executar com a versão mais recente do pacote",
-      "upstream": "Upstream"
+      "runOnLatestVersionForced": "Usa sempre a mais recente — não há uma 
versão anterior para a qual voltar",
+      "upstream": "Upstream",
+      "wholeExpansion": "Expansão completa"
     }
   },
+  "runStateCounts": {
+    "label": "Estados da execução",
+    "loading": "Carregando contagens de estado das execuções",
+    "tooltip": "{{state}}: {{formattedCount}} — clique para filtrar execuções"
+  },
+  "schedulingActions": {
+    "cancelDrain": "Cancelar drenagem",
+    "drain": "Drenar e depois pausar",
+    "drainPrompt": "Este Dag tem execuções em andamento. Drenar permite que 
elas terminem antes de o Dag pausar; pausar agora interrompe o agendamento 
imediatamente, sem esperar por elas.",
+    "pauseNow": "Pausar agora",
+    "pauseSelected": "Pausar / Drenar"
+  },
+  "schedulingBanner": {
+    "message": "Este Dag está em drenagem. Ele pausará quando as execuções em 
andamento terminarem."
+  },
   "search": {
     "advanced": "Pesquisa Avançada",
     "clear": "Limpar pesquisa",
+    "dagRuns": "Pesquisar $t(common:dagRun_other)",
     "dags": "Pesquisar Dags",
     "hotkey": "+K",
+    "mapIndexes": "Pesquisar $t(common:mapIndex)",
     "tasks": "Pesquisar Tarefas"
   },
   "sort": {
@@ -83,9 +138,9 @@
       "asc": "Ordenar por Nome (A-Z)",
       "desc": "Ordenar por Nome (Z-A)"
     },
-    "lastRunStartDate": {
-      "asc": "Ordenar por Data de Início da Última Execução (Mais Antiga-Mais 
Recente)",
-      "desc": "Ordenar por Data de Início da Última Execução (Mais 
Recente-Mais Antiga)"
+    "lastRunAfter": {
+      "asc": "Ordenar por última execução depois (mais antiga–mais recente)",
+      "desc": "Ordenar por última execução depois (mais recente–mais antiga)"
     },
     "lastRunState": {
       "asc": "Ordenar por Estado da Última Execução (A-Z)",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dashboard.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dashboard.json
index db3b16db425..02c5ac4ca09 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/dashboard.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dashboard.json
@@ -1,6 +1,28 @@
 {
+  "alerts": {
+    "seeLessContext": "Ver menos",
+    "seeMoreContext": "Ver mais",
+    "showMoreAlerts_many": "+{{count, number}} de alertas",
+    "showMoreAlerts_one": "+{{count, number}} alerta",
+    "showMoreAlerts_other": "+{{count, number}} alertas",
+    "showMoreAlerts_zero": "Nenhum alerta"
+  },
+  "deadlines": {
+    "pending": {
+      "empty": "Nenhum prazo iminente",
+      "title": "Iminentes"
+    },
+    "recentlyMissed": {
+      "empty": "Nenhum prazo não cumprido",
+      "title": "Prazos não cumpridos"
+    },
+    "showMore": "Mostrar mais",
+    "title": "Prazos"
+  },
+  "deferredSlotsNotCounted": "Deferidos não contabilizados nos slots: {{count, 
number}}",
+  "deferredSlotsNotCountedTooltip": "As tarefas deferidas mostradas na barra 
são contabilizadas nos slots do pool. As tarefas deferidas mostradas abaixo da 
barra vêm de pools que não contabilizam tarefas deferidas nos slots.",
   "favorite": {
-    "favoriteDags_many": "Primeiros {{count, number}} Dags favoritos",
+    "favoriteDags_many": "Primeiros {{count, number}} de Dags favoritos",
     "favoriteDags_one": "Primeiro {{count, number}} Dag favorito",
     "favoriteDags_other": "Primeiros {{count, number}} Dags favoritos",
     "favoriteDags_zero": "Nenhum Dag favorito",
@@ -10,17 +32,35 @@
   "group": "Grupo",
   "health": {
     "dagProcessor": "Processador de Dag",
+    "degraded": "Degradado",
+    "degradedHint": {
+      "dagProcessor": "Alguns pacotes de Dag configurados não têm um 
processador de Dag fazendo o parse deles.",
+      "triggerer": "Algumas equipes não têm um disparador executando tarefas 
deferidas para elas."
+    },
+    "down": "Indisponível",
     "health": "Saúde",
     "healthy": "Saúde",
+    "instances": {
+      "bundles": "Pacotes",
+      "hostname": "Host",
+      "team": "Equipe",
+      "title_many": "{{title}} — {{status}} ({{count, number}} instâncias)",
+      "title_one": "{{title}} — {{status}} ({{count, number}} instância)",
+      "title_other": "{{title}} — {{status}} ({{count, number}} instâncias)",
+      "title_zero": "{{title}} — {{status}} (nenhuma instância)",
+      "unknownHostname": "Host desconhecido"
+    },
     "lastHeartbeat": "Último Heartbeat",
     "metaDatabase": "Base de Dados de Metadados",
     "scheduler": "Agendador",
     "status": "Estado",
     "triggerer": "Disparador",
-    "unhealthy": "Não saudável"
+    "unhealthy": "Não saudável",
+    "unknownStatus": "Desconhecido"
   },
   "history": "Histórico",
   "importErrors": {
+    "bundle": "Pacote",
     "dagImportError_many": "Erros de Importação de Dag",
     "dagImportError_one": "Erro de Importação de Dag",
     "dagImportError_other": "Erros de Importação de Dag",
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/hitl.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/hitl.json
index b3a879e50ea..1ef3e05fea6 100644
--- a/airflow-core/src/airflow/ui/public/i18n/locales/pt/hitl.json
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/hitl.json
@@ -25,9 +25,24 @@
     "received": "Resposta recebida em ",
     "respond": "Responder",
     "responded_by_user_name": "Respondido por (Nome de usuário)",
+    "selectAtLeastOne": "Selecione pelo menos uma opção",
     "success": "Resposta de {{taskId}} bem-sucedida",
     "title": "Instância de Tarefa Humana - {{taskId}}"
   },
+  "review": {
+    "detail": {
+      "selectRequiredAction": "Selecione uma ação necessária para ver os 
detalhes"
+    },
+    "list": {
+      "completedRequiredActions": "Ações necessárias concluídas ({{count, 
number}})",
+      "loadError": "Não foi possível carregar as ações necessárias",
+      "loadingActions": "Carregando ações necessárias...",
+      "pendingRequiredActions": "Ações necessárias pendentes ({{count, 
number}})"
+    },
+    "openReviewDrawer": "Abrir painel de revisão",
+    "pageLimitHint": "Apenas as primeiras ações são mostradas aqui. Use 
\"$t(review.viewAll)\" para ver todas.",
+    "viewAll": "Ver todas as ações necessárias"
+  },
   "state": {
     "approvalReceived": "Aprovação Recebida",
     "approvalRequired": "Aprovação Necessária",

Reply via email to