This is an automated email from the ASF dual-hosted git repository.
potiuk 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 5251ac24b03 [RFC] Feat(ui): Add portuguese translation + CODEOWNER
(#52341)
5251ac24b03 is described below
commit 5251ac24b03da38d40fc941d362db0ce9b797ad8
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]>
---
.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"],