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"],
