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

kaxilnaik pushed a commit to branch v3-1-test
in repository https://gitbox.apache.org/repos/asf/airflow.git

commit 2644c3baf960a91ffa0322296cf83d334f44bab8
Author: Aldo <[email protected]>
AuthorDate: Thu Sep 11 02:05:24 2025 -0300

    [RFC] Feat(ui): Add portuguese translation + CODEOWNER (#52341)
    
    * add portuguese translation
    
    * add pt lang to dropdown UI
    
    * add latam codeowners
    
    * apply feedback on wordings
    
    * apply feedback
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * change fornecedor (refers to physical things) to Provider (keep it in 
english due to it is a tech term)
    
    * fix linter
    
    * add more lint fixes
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
    
    Co-authored-by: Victor Urquiola <[email protected]>
    
    * reduce gap
    
    * fix lint
    
    * add plurals
    
    * add plurals
    
    * Update airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
    
    Co-authored-by: Ash Berlin-Taylor <[email protected]>
    
    * Update .github/CODEOWNERS
    
    ---------
    
    Co-authored-by: Victor Urquiola <[email protected]>
    Co-authored-by: Ash Berlin-Taylor <[email protected]>
    Co-authored-by: Jarek Potiuk <[email protected]>
    (cherry picked from commit 5251ac24b03da38d40fc941d362db0ce9b797ad8)
---
 .github/CODEOWNERS                                 |   1 +
 .github/boring-cyborg.yml                          |   3 +
 .../airflow/ui/public/i18n/locales/pt/admin.json   | 183 +++++++++++
 .../airflow/ui/public/i18n/locales/pt/assets.json  |  30 ++
 .../airflow/ui/public/i18n/locales/pt/browse.json  |  26 ++
 .../airflow/ui/public/i18n/locales/pt/common.json  | 343 +++++++++++++++++++++
 .../ui/public/i18n/locales/pt/components.json      | 150 +++++++++
 .../src/airflow/ui/public/i18n/locales/pt/dag.json | 162 ++++++++++
 .../airflow/ui/public/i18n/locales/pt/dags.json    |  97 ++++++
 .../ui/public/i18n/locales/pt/dashboard.json       |  49 +++
 .../airflow/ui/public/i18n/locales/pt/hitl.json    |  38 +++
 .../airflow/ui/public/i18n/locales/pt/tasks.json   |  10 +
 airflow-core/src/airflow/ui/src/i18n/config.ts     |   1 +
 dev/i18n/check_translations_completeness.py        |   1 +
 14 files changed, 1094 insertions(+)

diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 6da73091d64..1a7fe898951 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -49,6 +49,7 @@ airflow-core/src/airflow/ui/public/i18n/locales/hu/ @jscheffl 
@potiuk # +@majoro
 airflow-core/src/airflow/ui/public/i18n/locales/ko/ @jscheffl @potiuk # + 
@choo121600 @kgw7401 @0ne-stone
 airflow-core/src/airflow/ui/public/i18n/locales/nl/ @BasPH # + @DjVinnii
 airflow-core/src/airflow/ui/public/i18n/locales/pl/ @potiuk @mobuchowski # + 
@kacpermuda
+airflow-core/src/airflow/ui/public/i18n/locales/pt/ @potiuk  # + @aoelvp94 
@victoru2
 airflow-core/src/airflow/ui/public/i18n/locales/tr/ @bugraoz93 # 
+@hasancatalgol
 airflow-core/src/airflow/ui/public/i18n/locales/zh-CN/ @potiuk # + @Fortytwoo 
@gyli
 airflow-core/src/airflow/ui/public/i18n/locales/zh-TW/ @Lee-W @jason810496 # + 
@RoyLee1224 @guan404ming
diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml
index 60d7e3960d0..b7ea2675340 100644
--- a/.github/boring-cyborg.yml
+++ b/.github/boring-cyborg.yml
@@ -405,6 +405,9 @@ labelPRBasedOnFilePath:
   translation:pl:
     - airflow-core/src/airflow/ui/public/i18n/locales/pl/*
 
+  translation:pt:
+    - airflow-core/src/airflow/ui/public/i18n/locales/pt/*
+
   translation:tr:
     - airflow-core/src/airflow/ui/public/i18n/locales/tr/*
 
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
new file mode 100644
index 00000000000..3b7a07c91e2
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/admin.json
@@ -0,0 +1,183 @@
+{
+  "columns": {
+    "description": "Descrição",
+    "key": "Chave",
+    "name": "Nome",
+    "value": "Valor"
+  },
+  "config": {
+    "columns": {
+      "section": "Secção"
+    },
+    "title": "Configuração do Airflow"
+  },
+  "connections": {
+    "add": "Adicionar Conexão",
+    "columns": {
+      "connectionId": "ID da Conexão",
+      "connectionType": "Tipo de Conexão",
+      "host": "Host",
+      "port": "Porta"
+    },
+    "connection_many": "Conexões",
+    "connection_one": "Conexão",
+    "connection_other": "Conexões",
+    "connection_zero": "Nenhuma conexão",
+    "delete": {
+      "deleteConnection_many": "Excluir {{count}} conexões",
+      "deleteConnection_one": "Excluir 1 conexão",
+      "deleteConnection_other": "Excluir {{count}} conexões",
+      "deleteConnection_zero": "Nenhuma conexão para excluir",
+      "firstConfirmMessage_many": "Você está prestes a excluir as seguintes 
conexões:",
+      "firstConfirmMessage_one": "Você está prestes a excluir a seguinte 
conexão:",
+      "firstConfirmMessage_other": "Você está prestes a excluir as seguintes 
conexões:",
+      "firstConfirmMessage_zero": "Nenhuma conexão para excluir",
+      "title": "Excluir Conexão"
+    },
+    "edit": "Editar Conexão",
+    "form": {
+      "connectionIdRequired": "ID da Conexão é obrigatório",
+      "connectionIdRequirement": "ID da Conexão não pode conter somente 
espaços",
+      "connectionTypeRequired": "Tipo de Conexão é obrigatório",
+      "extraFields": "Campos Extra",
+      "extraFieldsJson": "Campos Extra JSON",
+      "helperText": "Tipo de conexão faltando? Certifique-se de ter instalado 
o pacote do provider correspondente ao Airflow.",
+      "helperTextForRedactedFields": "Os campos redigidos ('***') permanecerão 
inalterados se não forem modificados.",
+      "selectConnectionType": "Selecionar Tipo de Conexão",
+      "standardFields": "Campos Padrão"
+    },
+    "nothingFound": {
+      "description": "Conexões definidas via variáveis de ambiente ou 
gerenciadores de segredos não estão listadas aqui.",
+      "documentationLink": "Saiba mais na documentação do Airflow.",
+      "learnMore": "Estas são resolvidas em tempo de execução e não são 
visíveis na interface do usuário.",
+      "title": "Nenhuma conexão encontrada!"
+    },
+    "searchPlaceholder": "Pesquisar Conexões",
+    "test": "Testar Conexão",
+    "testDisabled": "A funcionalidade de teste de conexão está desativada. Por 
favor, contate um administrador para ativá-la.",
+    "typeMeta": {
+      "error": "Falha ao recuperar Meta do Tipo de Conexão",
+      "standardFields": {
+        "description": "Descrição",
+        "host": "Host",
+        "login": "Login",
+        "password": "Senha",
+        "port": "Porta",
+        "url_schema": "Esquema"
+      }
+    }
+  },
+  "deleteActions": {
+    "button": "Excluir",
+    "modal": {
+      "confirmButton": "Sim, Excluir",
+      "secondConfirmMessage": "Esta ação é permanente e não pode ser 
desfeita.",
+      "thirdConfirmMessage": "Tem certeza que deseja prosseguir?"
+    },
+    "selected": "Selecionado",
+    "tooltip": "Excluir conexões selecionadas"
+  },
+  "formActions": {
+    "reset": "Redefinir",
+    "save": "Salvar"
+  },
+  "plugins": {
+    "columns": {
+      "source": "Origem"
+    },
+    "importError_many": "Erros de Importação de Plugins",
+    "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",
+    "searchPlaceholder": "Pesquisar por arquivo"
+  },
+  "pools": {
+    "add": "Adicionar Pool",
+    "deferredSlotsIncluded": "Slots Deferidos Incluídos",
+    "delete": {
+      "title": "Excluir Pool",
+      "warning": "Isso removerá todas as metadados relacionados ao pool e pode 
afetar as tarefas usando este pool."
+    },
+    "edit": "Editar Pool",
+    "form": {
+      "checkbox": "Marcar para incluir tarefas deferidas ao calcular slots 
abertos do pool",
+      "description": "Descrição",
+      "includeDeferred": "Incluir Deferidos",
+      "nameMaxLength": "Nome pode conter um máximo de 256 caracteres",
+      "nameRequired": "Nome é obrigatório",
+      "slots": "Slots"
+    },
+    "noPoolsFound": "Nenhum pool encontrado",
+    "pool_many": "Pools",
+    "pool_one": "Pool",
+    "pool_other": "Pools",
+    "pool_zero": "Nenhum pool",
+    "searchPlaceholder": "Pesquisar Pools",
+    "sort": {
+      "asc": "Nome (A-Z)",
+      "desc": "Nome (Z-A)",
+      "placeholder": "Ordenar por"
+    }
+  },
+  "providers": {
+    "columns": {
+      "packageName": "Nome do Pacote",
+      "version": "Versão"
+    }
+  },
+  "variables": {
+    "add": "Adicionar Variável",
+    "columns": {
+      "isEncrypted": "Está Encriptado"
+    },
+    "delete": {
+      "deleteVariable_many": "Excluir {{count}} Variáveis",
+      "deleteVariable_one": "Excluir 1 Variável",
+      "deleteVariable_other": "Excluir {{count}} Variáveis",
+      "deleteVariable_zero": "Nenhuma variável para excluir",
+      "firstConfirmMessage_many": "Você está prestes a excluir as seguintes 
variáveis:",
+      "firstConfirmMessage_one": "Você está prestes a excluir a seguinte 
variável:",
+      "firstConfirmMessage_other": "Você está prestes a excluir as seguintes 
variáveis:",
+      "firstConfirmMessage_zero": "Nenhuma variável para excluir",
+      "title": "Excluir Variável",
+      "tooltip": "Excluir variáveis selecionadas"
+    },
+    "edit": "Editar Variável",
+    "export": "Exportar",
+    "exportTooltip": "Exportar variáveis selecionadas",
+    "form": {
+      "invalidJson": "JSON Inválido",
+      "keyMaxLength": "Chave pode conter um máximo de 250 caracteres",
+      "keyRequired": "Chave é obrigatória",
+      "valueRequired": "Valor é obrigatório"
+    },
+    "import": {
+      "button": "Importar",
+      "conflictResolution": "Selecionar Resolução de Conflito de Variável",
+      "errorParsingJsonFile": "Erro ao Analisar Arquivo JSON: Upload um 
arquivo JSON contendo variáveis (exemplo: {\"key\": \"value\", ...}).",
+      "options": {
+        "fail": {
+          "description": "Falha na importação se forem detetadas variáveis que 
já existem.",
+          "title": "Falha"
+        },
+        "overwrite": {
+          "description": "Sobreescreve a variável em caso de conflito.",
+          "title": "Sobreescrever"
+        },
+        "skip": {
+          "description": "Ignora a importação de variáveis que já existem.",
+          "title": "Ignorar"
+        }
+      },
+      "title": "Importar Variáveis",
+      "upload": "Upload um Arquivo JSON",
+      "uploadPlaceholder": "Upload um arquivo JSON contendo variáveis 
(exemplo: {\"key\": \"value\", ...})"
+    },
+    "noRowsMessage": "Nenhuma variável encontrada",
+    "searchPlaceholder": "Pesquisar Chaves",
+    "variable_many": "Variáveis",
+    "variable_one": "Variável",
+    "variable_other": "Variáveis",
+    "variable_zero": "Nenhuma variável"
+  }
+}
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
new file mode 100644
index 00000000000..f40bb8e70c9
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/assets.json
@@ -0,0 +1,30 @@
+{
+  "consumingDags": "Consumindo DAGs",
+  "createEvent": {
+    "button": "Criar Evento",
+    "manual": {
+      "description": "Manualmente criar um Evento de Asset",
+      "extra": "Evento de Asset Extra",
+      "label": "Manual"
+    },
+    "materialize": {
+      "description": "Ativar o DAG acima deste Asset",
+      "descriptionWithDag": "Ativar o DAG acima deste Asset: {{dagName}}",
+      "label": "Materializar",
+      "unpauseDag": "Despausar {{dagName}} ao ativar"
+    },
+    "success": {
+      "manualDescription": "Criação de evento de Asset manual foi 
bem-sucedida.",
+      "manualTitle": "Evento de Asset Criado",
+      "materializeDescription": "DAG acima {{dagId}} foi ativado com sucesso.",
+      "materializeTitle": "Materializando Asset"
+    },
+    "title": "Criar Evento de Asset para {{name}}"
+  },
+  "group": "Grupo",
+  "lastAssetEvent": "Último Evento de Asset",
+  "name": "Nome",
+  "producingTasks": "Produzindo Tarefas",
+  "scheduledDags": "DAGs Programados",
+  "searchPlaceholder": "Pesquisar Assets"
+}
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
new file mode 100644
index 00000000000..d22701bfabc
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/browse.json
@@ -0,0 +1,26 @@
+{
+  "auditLog": {
+    "actions": {
+      "collapseAllExtra": "Recolher todos os extra json",
+      "expandAllExtra": "Expandir todos os extra json"
+    },
+    "columns": {
+      "event": "Evento",
+      "extra": "Extra",
+      "user": "Usuário",
+      "when": "Quando"
+    },
+    "filters": {
+      "eventType": "Tipo de Evento"
+    },
+    "title": "Log de Auditoria"
+  },
+  "xcom": {
+    "columns": {
+      "dag": "DAG",
+      "key": "Chave",
+      "value": "Valor"
+    },
+    "title": "XCom"
+  }
+}
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
new file mode 100644
index 00000000000..80cc94a2dc9
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/common.json
@@ -0,0 +1,343 @@
+{
+  "admin": {
+    "Config": "Configuração",
+    "Connections": "Conexões",
+    "Plugins": "Plugins",
+    "Pools": "Pools",
+    "Providers": "Providers",
+    "Variables": "Variáveis"
+  },
+  "allOperators": "Todos os Operadores",
+  "appearance": {
+    "appearance": "Aparência",
+    "darkMode": "Modo Escuro",
+    "lightMode": "Modo Claro",
+    "systemMode": "Seguir Configuração do Sistema"
+  },
+  "asset_many": "Assets",
+  "asset_one": "Asset",
+  "asset_other": "Assets",
+  "asset_zero": "Nenhum asset",
+  "assetEvent_many": "Eventos de Asset",
+  "assetEvent_one": "Evento de Asset",
+  "assetEvent_other": "Eventos de Asset",
+  "assetEvent_zero": "Nenhum evento de asset",
+  "backfill_many": "Backfills",
+  "backfill_one": "Backfill",
+  "backfill_other": "Backfills",
+  "backfill_zero": "Nenhum backfill",
+  "browse": {
+    "auditLog": "Log de Auditoria",
+    "requiredActions": "Ações Necessárias",
+    "xcoms": "XComs"
+  },
+  "collapseDetailsPanel": "Recolher Painel de Detalhes",
+  "createdAssetEvent_many": "Eventos de Asset Criados",
+  "createdAssetEvent_one": "Evento de Asset Criado",
+  "createdAssetEvent_other": "Eventos de Asset Criados",
+  "createdAssetEvent_zero": "Nenhum evento de asset criado",
+  "dag_many": "DAGs",
+  "dag_one": "DAG",
+  "dag_other": "DAGs",
+  "dag_zero": "Nenhum DAG",
+  "dagDetails": {
+    "catchup": "Catchup",
+    "dagRunTimeout": "Tempo Limite da Execução do DAG",
+    "defaultArgs": "Argumentos Padrão",
+    "description": "Descrição",
+    "documentation": "Documentação do DAG",
+    "fileLocation": "Local do Arquivo",
+    "hasTaskConcurrencyLimits": "Tem Limite de Concorrência de Tarefas",
+    "lastExpired": "Último Expirado",
+    "lastParseDuration": "Duração do Último Parse",
+    "lastParsed": "Último Parseado",
+    "latestDagVersion": "Última Versão do DAG",
+    "latestRun": "Última Execução",
+    "maxActiveRuns": "Máximo de Execuções Ativas",
+    "maxActiveTasks": "Máximo de Tarefas Ativas",
+    "maxConsecutiveFailedDagRuns": "Máximo de Execuções Consecutivas Falhadas",
+    "nextRun": "Próxima Execução",
+    "owner": "Proprietário",
+    "params": "Parâmetros",
+    "schedule": "Agendamento",
+    "tags": "Etiquetas"
+  },
+  "dagId": "ID do DAG",
+  "dagRun": {
+    "conf": "Conf",
+    "dagVersions": "Versão(s) do DAG",
+    "dataIntervalEnd": "Fim do Intervalo de Dados",
+    "dataIntervalStart": "Início do Intervalo de Dados",
+    "lastSchedulingDecision": "Última Decisão de Agendamento",
+    "queuedAt": "Enfileirado Em",
+    "runAfter": "Executar Depois",
+    "runType": "Tipo de Execução",
+    "sourceAssetEvent": "Evento de Asset de Origem",
+    "triggeredBy": "Acionado por",
+    "triggeringUser": "Nome do Usuário que Disparou"
+  },
+  "dagRun_many": "Execuções do DAG",
+  "dagRun_one": "Execução do DAG",
+  "dagRun_other": "Execuções do DAG",
+  "dagRun_zero": "Nenhuma execução do DAG",
+  "dagRunId": "ID da Execução do DAG",
+  "dagWarnings": "Avisos/Erros do DAG",
+  "defaultToGraphView": "Padrão para visualização gráfica",
+  "defaultToGridView": "Padrão para visualização em grade",
+  "direction": "Direção",
+  "docs": {
+    "documentation": "Documentação",
+    "githubRepo": "Repositório GitHub",
+    "restApiReference": "Referência da API REST"
+  },
+  "duration": "Duração",
+  "endDate": "Data Final",
+  "error": {
+    "back": "Voltar",
+    "defaultMessage": "Ocorreu um erro inesperado",
+    "home": "Início",
+    "notFound": "Página Não Encontrada",
+    "title": "Erro"
+  },
+  "expand": {
+    "collapse": "Recolher",
+    "expand": "Expandir",
+    "hotkey": "Pressione {{hotkey}} para expandir ou recolher",
+    "tooltip": "Pressione {{hotkey}} para expandir ou recolher a secção"
+  },
+  "expression": {
+    "all": "Todos",
+    "and": "E",
+    "any": "Qualquer",
+    "or": "OU"
+  },
+  "filters": {
+    "dagDisplayNamePlaceholder": "Filtrar por DAG",
+    "keyPlaceholder": "Filtrar por chave XCom",
+    "logicalDateFromPlaceholder": "Data Lógica De",
+    "logicalDateToPlaceholder": "Data Lógica Para",
+    "mapIndexPlaceholder": "Filtrar por Índice do Mapa",
+    "runAfterFromPlaceholder": "Executar Depois De",
+    "runAfterToPlaceholder": "Executar Depois Para",
+    "runIdPlaceholder": "Filtrar por ID da Execução",
+    "taskIdPlaceholder": "Filtrar por ID da Tarefa",
+    "triggeringUserPlaceholder": "Filtrar por Usuário que Disparou"
+  },
+  "logicalDate": "Data Lógica",
+  "logout": "Sair",
+  "logoutConfirmation": "Você está prestes a sair do aplicativo.",
+  "mapIndex": "Índice do Mapa",
+  "modal": {
+    "cancel": "Cancelar",
+    "confirm": "Confirmar",
+    "delete": {
+      "button": "Excluir",
+      "confirmation": "Tem certeza que deseja excluir {{resourceName}}? Esta 
ação não pode ser desfeita."
+    }
+  },
+  "nav": {
+    "admin": "Administração",
+    "assets": "Assets",
+    "browse": "Navegar",
+    "dags": "DAGs",
+    "docs": "Documentação",
+    "home": "Início",
+    "legacyFabViews": "Visualizações Legacy FAB",
+    "plugins": "Plugins",
+    "security": "Segurança"
+  },
+  "noItemsFound": "Nenhum {{modelName}} encontrado",
+  "note": {
+    "add": "Adicionar uma nota",
+    "dagRun": "Nota da Execução do DAG",
+    "label": "Nota",
+    "placeholder": "Adicionar uma nota...",
+    "taskInstance": "Nota da Instância de Tarefa"
+  },
+  "pools": {
+    "deferred": "Deferido",
+    "open": "Aberto",
+    "pools_many": "pools",
+    "pools_one": "pool",
+    "pools_other": "pools",
+    "pools_zero": "nenhum pool",
+    "queued": "Enfileirado",
+    "running": "Executando",
+    "scheduled": "Agendado"
+  },
+  "runId": "ID da Execução",
+  "runTypes": {
+    "asset_triggered": "Asset Acionado",
+    "backfill": "Backfill",
+    "manual": "Manual",
+    "scheduled": "Agendado"
+  },
+  "scroll": {
+    "direction": {
+      "bottom": "Inferior",
+      "top": "Superior"
+    },
+    "tooltip": "Pressione {{hotkey}} para rolar para {{direction}}"
+  },
+  "seconds": "{{count}}s",
+  "security": {
+    "actions": "Ações",
+    "permissions": "Permissões",
+    "resources": "Recursos",
+    "roles": "Funções",
+    "users": "Usuários"
+  },
+  "selectLanguage": "Selecionar Idioma",
+  "showDetailsPanel": "Mostrar Painel de Detalhes",
+  "source": {
+    "hide": "Ocultar",
+    "hotkey": "Pressione {{hotkey}} para ocultar/mostrar",
+    "show": "Mostrar"
+  },
+  "sourceAssetEvent_many": "Eventos de Asset de Origem",
+  "sourceAssetEvent_one": "Evento de Asset de Origem",
+  "sourceAssetEvent_other": "Eventos de Asset de Origem",
+  "sourceAssetEvent_zero": "Nenhum evento de asset de origem",
+  "startDate": "Data Inicial",
+  "state": "Estado",
+  "states": {
+    "deferred": "Deferido",
+    "failed": "Falha",
+    "no_status": "Sem Status",
+    "none": "Sem Status",
+    "planned": "Planejado",
+    "queued": "Enfileirado",
+    "removed": "Removido",
+    "restarting": "Reiniciando",
+    "running": "Executando",
+    "scheduled": "Agendado",
+    "skipped": "Pulado",
+    "success": "Sucesso",
+    "up_for_reschedule": "Pronto para reagendar",
+    "up_for_retry": "Pronto para tentar novamente",
+    "upstream_failed": "Falha no upstream"
+  },
+  "table": {
+    "completedAt": "Concluído em",
+    "createdAt": "Criado em",
+    "filterByTag": "Filtrar DAGs por tag",
+    "filterColumns": "Filtrar colunas da tabela",
+    "filterReset_many": "Resetar filtros",
+    "filterReset_one": "Resetar filtro",
+    "filterReset_other": "Resetar filtros",
+    "filterReset_zero": "Nenhum filtro para resetar",
+    "from": "De",
+    "maxActiveRuns": "Máximo de Execuções Ativas",
+    "noTagsFound": "Nenhuma tag encontrada",
+    "tagMode": {
+      "all": "Todos",
+      "any": "Qualquer"
+    },
+    "tagPlaceholder": "Filtrar por tag",
+    "to": "Para"
+  },
+  "task": {
+    "documentation": "Documentação da Tarefa",
+    "lastInstance": "Última Instância",
+    "operator": "Operador",
+    "triggerRule": "Regra de Trigger"
+  },
+  "task_many": "Tarefas",
+  "task_one": "Tarefa",
+  "task_other": "Tarefas",
+  "task_zero": "Nenhuma tarefa",
+  "taskGroup": "Grupo de Tarefas",
+  "taskId": "ID da Tarefa",
+  "taskInstance": {
+    "dagVersion": "Versão do DAG",
+    "executor": "Executor",
+    "executorConfig": "Configuração do Executor",
+    "hostname": "Hostname",
+    "maxTries": "Máximo de Tentativas",
+    "pid": "PID",
+    "pool": "Pool",
+    "poolSlots": "Slots do Pool",
+    "priorityWeight": "Prioridade",
+    "queue": "Fila",
+    "queuedWhen": "Enfileirado em",
+    "scheduledWhen": "Agendado em",
+    "triggerer": {
+      "assigned": "Triggerer atribuído",
+      "class": "Classe do Trigger",
+      "createdAt": "Tempo de criação do Trigger",
+      "id": "ID do Trigger",
+      "latestHeartbeat": "Último heartbeat do Trigger",
+      "title": "Informações do Trigger"
+    },
+    "unixname": "Nome do Unix"
+  },
+  "taskInstance_many": "Instâncias de Tarefa",
+  "taskInstance_one": "Instância de Tarefa",
+  "taskInstance_other": "Instâncias de Tarefa",
+  "taskInstance_zero": "Nenhuma instância de tarefa",
+  "timeRange": {
+    "last12Hours": "Últimas 12 Horas",
+    "last24Hours": "Últimas 24 Horas",
+    "lastHour": "Última Hora",
+    "pastWeek": "Semana Passada"
+  },
+  "timestamp": {
+    "hide": "Ocultar",
+    "hotkey": "Pressione {{hotkey}} para ocultar/mostrar",
+    "show": "Mostrar"
+  },
+  "timezone": "Fuso Horário",
+  "timezoneModal": {
+    "current-timezone": "Hora atual em",
+    "placeholder": "Selecionar um fuso horário",
+    "title": "Selecionar Fuso Horário",
+    "utc": "UTC (Tempo Universal Coordenado)"
+  },
+  "toaster": {
+    "bulkDelete": {
+      "error": "Exclusão em Massa de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{count}} {{resourceName}} foram excluídos com 
sucesso. Chaves: {{keys}}",
+        "title": "Exclusão em Massa de {{resourceName}} Submetida"
+      }
+    },
+    "create": {
+      "error": "Criação de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{resourceName}} foi criado com sucesso.",
+        "title": "Criação de {{resourceName}} Submetida"
+      }
+    },
+    "delete": {
+      "error": "Exclusão de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{resourceName}} foi excluído com sucesso.",
+        "title": "Exclusão de {{resourceName}} Submetida"
+      }
+    },
+    "import": {
+      "error": "Importação de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{count}} {{resourceName}} foram importados com 
sucesso.",
+        "title": "Importação de {{resourceName}} Submetida"
+      }
+    },
+    "update": {
+      "error": "Atualização de {{resourceName}} Falhou",
+      "success": {
+        "description": "{{resourceName}} foi atualizado com sucesso.",
+        "title": "Atualização de {{resourceName}} Submetida"
+      }
+    }
+  },
+  "total": "Total {{state}}",
+  "triggered": "Acionado",
+  "tryNumber": "Número de Tentativas",
+  "user": "Usuário",
+  "wrap": {
+    "hotkey": "Pressione {{hotkey}} para expandir ou recolher",
+    "tooltip": "Pressione {{hotkey}} para expandir ou recolher a secção",
+    "unwrap": "Expandir",
+    "wrap": "Recolher"
+  }
+}
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
new file mode 100644
index 00000000000..db982e93384
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/components.json
@@ -0,0 +1,150 @@
+{
+  "backfill": {
+    "affected_many": "{{count}} execuções serão acionadas.",
+    "affected_one": "1 execução será acionada.",
+    "affected_other": "{{count}} 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",
+    "dateRange": "Intervalo de Data",
+    "dateRangeFrom": "De",
+    "dateRangeTo": "Para",
+    "errorStartDateBeforeEndDate": "A Data Inicial deve ser antes da Data 
Final",
+    "maxRuns": "Máximo de Execuções Ativas",
+    "missingAndErroredRuns": "Execuções Faltando e com Erro",
+    "missingRuns": "Execuções Faltando",
+    "reprocessBehavior": "Comportamento de Reprocessamento",
+    "run": "Executar Backfill",
+    "selectDescription": "Executar este DAG para um intervalo de datas",
+    "selectLabel": "Backfill",
+    "title": "Executar Backfill",
+    "toaster": {
+      "success": {
+        "description": "Backfill jobs foram acionados com sucesso.",
+        "title": "Backfill gerado"
+      }
+    },
+    "tooltip": "Backfill requer um agendamento",
+    "unpause": "Despausar {{dag_display_name}} ao acionar",
+    "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."
+    }
+  },
+  "banner": {
+    "backfillInProgress": "Backfill em progresso",
+    "cancel": "Cancelar backfill",
+    "pause": "Pausar backfill",
+    "unpause": "Despausar backfill"
+  },
+  "clipboard": {
+    "copy": "Copiar"
+  },
+  "close": "Fechar",
+  "configForm": {
+    "advancedOptions": "Opções Avançadas",
+    "configJson": "Configuração JSON",
+    "invalidJson": "Formato JSON inválido: {{errorMessage}}"
+  },
+  "dagWarnings": {
+    "error_many": "{{count}} Erros",
+    "error_one": "1 Erro",
+    "error_other": "{{count}} Erros",
+    "error_zero": "Nenhum erro",
+    "errorAndWarning": "1 Erro e {{warningText}}",
+    "warning_many": "{{count}} Avisos",
+    "warning_one": "1 Aviso",
+    "warning_other": "{{count}} Avisos",
+    "warning_zero": "Nenhum aviso"
+  },
+  "durationChart": {
+    "duration": "Duração (segundos)",
+    "lastDagRun_many": "Últimas {{count}} Execuções do DAG",
+    "lastDagRun_one": "Última Execução do DAG",
+    "lastDagRun_other": "Últimas {{count}} Execuções do DAG",
+    "lastDagRun_zero": "Nenhuma execução do DAG",
+    "lastTaskInstance_many": "Últimas {{count}} Instâncias de Tarefa",
+    "lastTaskInstance_one": "Última Instância de Tarefa",
+    "lastTaskInstance_other": "Últimas {{count}} Instâncias de Tarefa",
+    "lastTaskInstance_zero": "Nenhuma instância de tarefa",
+    "queuedDuration": "Duração da Fila",
+    "runAfter": "Executar Depois",
+    "runDuration": "Duração da Execução"
+  },
+  "fileUpload": {
+    "files_many": "{{count}} arquivos",
+    "files_one": "1 arquivo",
+    "files_other": "{{count}} arquivos",
+    "files_zero": "Nenhum arquivo"
+  },
+  "flexibleForm": {
+    "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",
+    "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.",
+    "validationErrorRequired": "Este campo é obrigatório"
+  },
+  "graph": {
+    "directionDown": "Superior para Inferior",
+    "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.",
+    "downloadImageErrorTitle": "Download Falhou",
+    "otherDagRuns": "+Outras Execuções do DAG",
+    "taskCount_many": "{{count}} Tarefas",
+    "taskCount_one": "{{count}} Tarefa",
+    "taskCount_other": "{{count}} Tarefas",
+    "taskCount_zero": "Nenhuma tarefa",
+    "taskGroup": "Grupo de Tarefas"
+  },
+  "limitedList": "+{{count}} mais",
+  "logs": {
+    "file": "Arquivo",
+    "location": "linha {{line}} em {{name}}"
+  },
+  "reparseDag": "Reparse DAG",
+  "sortedAscending": "Ordenado em ordem crescente",
+  "sortedDescending": "Ordenado em ordem decrescente",
+  "sortedUnsorted": "Não ordenado",
+  "taskTries": "Tentativas de Tarefa",
+  "toggleCardView": "Mostrar visualização de cartão",
+  "toggleTableView": "Mostrar visualização de tabela",
+  "triggerDag": {
+    "button": "Acionar",
+    "loading": "Carregando informações do DAG...",
+    "loadingFailed": "Falha ao carregar informações do DAG. Por favor, tente 
novamente.",
+    "runIdHelp": "Opcional - será gerado se não for fornecido",
+    "selectDescription": "Acionar uma única execução deste DAG",
+    "selectLabel": "Execução Única",
+    "title": "Acionar DAG",
+    "toaster": {
+      "success": {
+        "description": "A execução do DAG foi acionada com sucesso.",
+        "title": "Execução do DAG acionada"
+      }
+    },
+    "unpause": "Despausar {{dagDisplayName}} ao acionar"
+  },
+  "trimText": {
+    "details": "Detalhes",
+    "empty": "Vazio",
+    "noContent": "Nenhum conteúdo disponível."
+  },
+  "versionDetails": {
+    "bundleLink": "Link do Bundle",
+    "bundleName": "Nome do Bundle",
+    "bundleVersion": "Versão do Bundle",
+    "createdAt": "Criado em",
+    "versionId": "ID da Versão"
+  },
+  "versionSelect": {
+    "dagVersion": "Versão do DAG",
+    "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
new file mode 100644
index 00000000000..c4a4a58b92a
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dag.json
@@ -0,0 +1,162 @@
+{
+  "allRuns": "Todas as Execuções",
+  "blockingDeps": {
+    "dependency": "Dependência",
+    "reason": "Motivo",
+    "title": "Dependências Bloqueando Tarefa de Ser Agendada"
+  },
+  "calendar": {
+    "daily": "Diário",
+    "hourly": "Por Hora",
+    "legend": {
+      "less": "Menos",
+      "more": "Mais"
+    },
+    "navigation": {
+      "nextMonth": "Próximo mês",
+      "nextYear": "Próximo ano",
+      "previousMonth": "Mês anterior",
+      "previousYear": "Ano anterior"
+    },
+    "noData": "Nenhum dado disponível",
+    "noRuns": "Nenhuma execução",
+    "totalRuns": "Total de Execuções",
+    "week": "Semana {{weekNumber}}",
+    "weekdays": {
+      "friday": "Sex",
+      "monday": "Seg",
+      "saturday": "Sáb",
+      "sunday": "Dom",
+      "thursday": "Qui",
+      "tuesday": "Ter",
+      "wednesday": "Qua"
+    }
+  },
+  "code": {
+    "bundleUrl": "URL do Bundle",
+    "noCode": "Nenhum Código Encontrado",
+    "parseDuration": "Duração do Processamento:",
+    "parsedAt": "Processado em:"
+  },
+  "extraLinks": "Links Extra",
+  "grid": {
+    "buttons": {
+      "resetToLatest": "Redefinir para a Última",
+      "toggleGroup": "Alternar Grupo"
+    }
+  },
+  "header": {
+    "buttons": {
+      "advanced": "Avançado",
+      "dagDocs": "Documentação do DAG"
+    }
+  },
+  "logs": {
+    "allLevels": "Todos os Níveis de Log",
+    "allSources": "Todas as Fontes",
+    "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",
+    "settings": "Configurações",
+    "viewInExternal": "Ver logs em {{name}} (tentativa {{attempt}})",
+    "warning": "AVISO"
+  },
+  "navigation": {
+    "navigation": "Navegação: Shift+{{arrow}}",
+    "toggleGroup": "Alternar grupo: Espaço"
+  },
+  "overview": {
+    "buttons": {
+      "failedRun_many": "Execuções Falhadas",
+      "failedRun_one": "Execução Falhada",
+      "failedRun_other": "Execuções Falhadas",
+      "failedRun_zero": "Nenhuma execução falhada",
+      "failedTask_many": "Tarefas Falhadas",
+      "failedTask_one": "Tarefa Falhada",
+      "failedTask_other": "Tarefas Falhadas",
+      "failedTask_zero": "Nenhuma tarefa falhada",
+      "failedTaskInstance_many": "Instâncias de Tarefa Falhadas",
+      "failedTaskInstance_one": "Instância de Tarefa Falhada",
+      "failedTaskInstance_other": "Instâncias de Tarefa Falhadas",
+      "failedTaskInstance_zero": "Nenhuma instância de tarefa falhada"
+    },
+    "charts": {
+      "assetEvent_many": "Eventos de Asset Criados",
+      "assetEvent_one": "Evento de Asset Criado",
+      "assetEvent_other": "Eventos de Asset Criados",
+      "assetEvent_zero": "Nenhum evento de asset criado"
+    },
+    "failedLogs": {
+      "hideLogs": "Ocultar Logs",
+      "showLogs": "Mostrar Logs",
+      "title": "Logs Recentes de Tarefas Falhadas",
+      "viewFullLogs": "Ver logs completos"
+    }
+  },
+  "panel": {
+    "buttons": {
+      "options": "Opções",
+      "showGantt": "Mostrar Gantt",
+      "showGraphShortcut": "Mostrar Gráfico (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"
+    },
+    "graphDirection": {
+      "label": "Direção do Gráfico"
+    }
+  },
+  "paramsFailed": "Falha ao carregar parâmetros",
+  "parse": {
+    "toaster": {
+      "error": {
+        "description": "Falha ao processar o DAG. Pode haver solicitações de 
processamento pendentes ainda não processadas.",
+        "title": "Falha ao Reprocessar o DAG"
+      },
+      "success": {
+        "description": "O DAG deve ser reprocessado em breve.",
+        "title": "Solicitação de Reprocessamento Enviada com Sucesso"
+      }
+    }
+  },
+  "tabs": {
+    "assetEvents": "Asset Events",
+    "auditLog": "Log de Auditoria",
+    "backfills": "Backfills",
+    "calendar": "Calendário",
+    "code": "Código",
+    "details": "Detalhes",
+    "logs": "Logs",
+    "mappedTaskInstances_many": "Instâncias de Tarefa [{{count}}]",
+    "mappedTaskInstances_one": "Instância de Tarefa [{{count}}]",
+    "mappedTaskInstances_other": "Instâncias de Tarefa [{{count}}]",
+    "mappedTaskInstances_zero": "Nenhuma instância de tarefa mapeada",
+    "overview": "Visão Geral",
+    "renderedTemplates": "Modelos Renderizados",
+    "requiredActions": "Ações Necessárias",
+    "runs": "Execuções",
+    "taskInstances": "Instâncias de Tarefa",
+    "tasks": "Tarefas",
+    "xcom": "XCom"
+  },
+  "taskGroups": {
+    "collapseAll": "Recolher todos os grupos de tarefas",
+    "expandAll": "Expandir todos os grupos de tarefas"
+  }
+}
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
new file mode 100644
index 00000000000..683cf090a8b
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dags.json
@@ -0,0 +1,97 @@
+{
+  "assetSchedule": "{{count}} de {{total}} ativos atualizados",
+  "dagActions": {
+    "delete": {
+      "button": "Excluir DAG",
+      "warning": "Isso removerá todas as metadados relacionados ao DAG, 
incluindo Execuções e Tarefas."
+    }
+  },
+  "favoriteDag": "DAG Favorito",
+  "filters": {
+    "allRunTypes": "Todos os Tipos de Execução",
+    "allStates": "Todos os Estados",
+    "favorite": {
+      "all": "Todos",
+      "favorite": "Favorito",
+      "unfavorite": "Remover dos Favoritos"
+    },
+    "paused": {
+      "active": "Ativo",
+      "all": "Todos",
+      "paused": "Pausado"
+    },
+    "runIdPatternFilter": "Pesquisar Execuções de DAG",
+    "triggeringUserNameFilter": "Pesquisar por Usuário que Disparou"
+  },
+  "ownerLink": "Link do Proprietário para {{owner}}",
+  "runAndTaskActions": {
+    "affectedTasks": {
+      "noItemsFound": "Nenhuma tarefa encontrada.",
+      "title": "Tarefas Afetadas: {{count}}"
+    },
+    "clear": {
+      "button": "Limpar {{type}}",
+      "buttonTooltip": "Pressione shift+c para limpar",
+      "error": "Falha ao limpar {{type}}",
+      "title": "Limpar {{type}}"
+    },
+    "delete": {
+      "button": "Excluir {{type}}",
+      "dialog": {
+        "resourceName": "{{type}} {{id}}",
+        "title": "Excluir {{type}}",
+        "warning": "Isso removerá todas as metadados relacionados ao {{type}}."
+      },
+      "error": "Erro ao excluir {{type}}",
+      "success": {
+        "description": "A solicitação de exclusão do {{type}} foi 
bem-sucedida.",
+        "title": "{{type}} Excluído com Sucesso"
+      }
+    },
+    "markAs": {
+      "button": "Marcar {{type}} como...",
+      "buttonTooltip": {
+        "failed": "Pressione shift+f para marcar como falha",
+        "success": "Pressione shift+s para marcar como sucesso"
+      },
+      "title": "Marcar {{type}} como {{state}}"
+    },
+    "options": {
+      "downstream": "Downstream",
+      "existingTasks": "Limpar tarefas existentes",
+      "future": "Futuro",
+      "onlyFailed": "Limpar somente tarefas falhadas",
+      "past": "Passado",
+      "queueNew": "Enfileirar novas tarefas",
+      "runOnLatestVersion": "Executar com a versão mais recente do pacote",
+      "upstream": "Upstream"
+    }
+  },
+  "search": {
+    "advanced": "Pesquisa Avançada",
+    "clear": "Limpar pesquisa",
+    "dags": "Pesquisar DAGs",
+    "hotkey": "+K",
+    "tasks": "Pesquisar Tarefas"
+  },
+  "sort": {
+    "displayName": {
+      "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)"
+    },
+    "lastRunState": {
+      "asc": "Ordenar por Estado da Última Execução (A-Z)",
+      "desc": "Ordenar por Estado da Última Execução (Z-A)"
+    },
+    "nextDagRun": {
+      "asc": "Ordenar por Próxima Execução do DAG (Mais Antiga-Mais Recente)",
+      "desc": "Ordenar por Próxima Execução do DAG (Mais Recente-Mais Antiga)"
+    },
+    "placeholder": "Ordenar por"
+  },
+  "unfavoriteDag": "Remover DAG dos Favoritos"
+}
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
new file mode 100644
index 00000000000..725875494a1
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/dashboard.json
@@ -0,0 +1,49 @@
+{
+  "favorite": {
+    "favoriteDags_many": "Primeiros {{count}} DAGs favoritos",
+    "favoriteDags_one": "Primeiro {{count}} DAG favorito",
+    "favoriteDags_other": "Primeiros {{count}} DAGs favoritos",
+    "favoriteDags_zero": "Nenhum DAG favorito",
+    "noDagRuns": "Ainda não há DagRun para este dag.",
+    "noFavoriteDags": "Nenhum favorito ainda. Clique no ícone de estrela ao 
lado de um DAG na lista para adicioná-lo aos seus favoritos."
+  },
+  "group": "Grupo",
+  "health": {
+    "dagProcessor": "Processador de DAG",
+    "health": "Saúde",
+    "healthy": "Saúde",
+    "lastHeartbeat": "Último Heartbeat",
+    "metaDatabase": "Base de Dados de Metadados",
+    "scheduler": "Agendador",
+    "status": "Estado",
+    "triggerer": "Disparador",
+    "unhealthy": "Não saudável"
+  },
+  "history": "Histórico",
+  "importErrors": {
+    "dagImportError_many": "Erros de Importação de DAG",
+    "dagImportError_one": "Erro de Importação de DAG",
+    "dagImportError_other": "Erros de Importação de DAG",
+    "dagImportError_zero": "Nenhum erro de importação de DAG",
+    "searchByFile": "Pesquisar por arquivo",
+    "timestamp": "Timestamp"
+  },
+  "managePools": "Gerenciar Pools",
+  "noAssetEvents": "Nenhum Evento de Asset encontrado.",
+  "poolSlots": "Slots de Pool",
+  "sortBy": {
+    "newestFirst": "Mais Recentes Primeiro",
+    "oldestFirst": "Mais Antigos Primeiro"
+  },
+  "source": "Fonte",
+  "stats": {
+    "activeDags": "DAGs Ativos",
+    "failedDags": "DAGs Falhados",
+    "queuedDags": "DAGs em Fila",
+    "requiredActions": "Ações Necessárias",
+    "runningDags": "DAGs em Execução",
+    "stats": "Estatísticas"
+  },
+  "uri": "URI",
+  "welcome": "Bem-vindo"
+}
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
new file mode 100644
index 00000000000..c63027cdea4
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/hitl.json
@@ -0,0 +1,38 @@
+{
+  "filters": {
+    "response": {
+      "all": "Todas",
+      "pending": "Pendente",
+      "received": "Revisadas"
+    }
+  },
+  "requiredAction_many": "Ações Necessárias",
+  "requiredAction_one": "Ação Necessária",
+  "requiredAction_other": "Ações Necessárias",
+  "requiredAction_zero": "Nenhuma ação necessária",
+  "requiredActionCount_many": "Ações Necessárias ({{count}})",
+  "requiredActionCount_one": "Ação Necessária ({{count}})",
+  "requiredActionCount_other": "Ações Necessárias ({{count}})",
+  "requiredActionCount_zero": "Nenhuma ação necessária",
+  "requiredActionState": "Estado da Ação Necessária",
+  "response": {
+    "error": "Falha na resposta",
+    "optionsDescription": "Escolha suas opções para esta instância de tarefa",
+    "optionsLabel": "Opções",
+    "received": "Resposta recebida em ",
+    "respond": "Responder",
+    "success": "Resposta de {{taskId}} bem-sucedida",
+    "title": "Instância de Tarefa Humana - {{taskId}}"
+  },
+  "state": {
+    "approvalReceived": "Aprovação Recebida",
+    "approvalRequired": "Aprovação Necessária",
+    "choiceReceived": "Escolha Recebida",
+    "choiceRequired": "Escolha Necessária",
+    "noResponseReceived": "Nenhuma Resposta Recebida",
+    "rejectionReceived": "Rejeição Recebida",
+    "responseReceived": "Resposta Recebida",
+    "responseRequired": "Resposta Necessária"
+  },
+  "subject": "Assunto"
+}
diff --git a/airflow-core/src/airflow/ui/public/i18n/locales/pt/tasks.json 
b/airflow-core/src/airflow/ui/public/i18n/locales/pt/tasks.json
new file mode 100644
index 00000000000..d15d2dd10ce
--- /dev/null
+++ b/airflow-core/src/airflow/ui/public/i18n/locales/pt/tasks.json
@@ -0,0 +1,10 @@
+{
+  "mapped": "Mapeado",
+  "notMapped": "Não mapeado",
+  "retries": "Tentativas",
+  "searchTasks": "Pesquisar tarefas",
+  "selectMapped": "Selecionar mapeado",
+  "selectOperator": "Selecionar operadores",
+  "selectRetryValues": "Selecionar valores de tentativa",
+  "selectTriggerRules": "Selecionar regras de gatilho"
+}
diff --git a/airflow-core/src/airflow/ui/src/i18n/config.ts 
b/airflow-core/src/airflow/ui/src/i18n/config.ts
index c65790ce4c1..f4d2d07e230 100644
--- a/airflow-core/src/airflow/ui/src/i18n/config.ts
+++ b/airflow-core/src/airflow/ui/src/i18n/config.ts
@@ -34,6 +34,7 @@ export const supportedLanguages = [
   { code: "ko", name: "한국어" },
   { code: "nl", name: "Nederlands" },
   { code: "pl", name: "Polski" },
+  { code: "pt", name: "Português" },
   { code: "tr", name: "Türkçe" },
   { code: "zh-CN", name: "简体中文" },
   { code: "zh-TW", name: "繁體中文" },
diff --git a/dev/i18n/check_translations_completeness.py 
b/dev/i18n/check_translations_completeness.py
index 69b853c1367..f2469a3b425 100755
--- a/dev/i18n/check_translations_completeness.py
+++ b/dev/i18n/check_translations_completeness.py
@@ -62,6 +62,7 @@ PLURAL_SUFFIXES = {
     "ko": ["_other"],
     "nl": MOST_COMMON_PLURAL_SUFFIXES,
     "pl": ["_one", "_few", "_many", "_other"],
+    "pt": ["_zero", "_one", "_many", "_other"],
     "tr": MOST_COMMON_PLURAL_SUFFIXES,
     "zh-CN": ["_other"],
     "zh-TW": ["_other"],


Reply via email to