Show the user's timezone inline next to clock-pinned schedules (Runs every day at 09:00 (GMT-3)) instead of on a separate hint line, and only when the schedule pins a time of day — minute/hour intervals omit it.
392 lines
16 KiB
PHP
392 lines
16 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
return [
|
|
'title' => 'Automações',
|
|
'default_name' => 'Nova automação',
|
|
|
|
'actions' => [
|
|
'new' => 'Nova automação',
|
|
'edit' => 'Editar',
|
|
'save' => 'Salvar',
|
|
'activate' => 'Ativar',
|
|
'pause' => 'Pausar',
|
|
'delete' => 'Excluir',
|
|
'retry' => 'Tentar novamente',
|
|
'guide' => 'Aprenda como funciona',
|
|
],
|
|
|
|
'tabs' => [
|
|
'build' => 'Montar',
|
|
'variables' => 'Variáveis',
|
|
'test' => 'Testar',
|
|
],
|
|
|
|
'nav' => [
|
|
'workflow' => 'Workflow',
|
|
'invocations' => 'Invocações',
|
|
'metrics' => 'Métricas',
|
|
'settings' => 'Configurações',
|
|
],
|
|
|
|
'settings' => [
|
|
'general' => 'Geral',
|
|
'general_description' => 'Renomeie esta automação.',
|
|
'name_label' => 'Nome',
|
|
'name_saved' => 'Automação renomeada.',
|
|
'status_title' => 'Status',
|
|
'status_description' => 'Ative para começar a rodar, ou pause para parar.',
|
|
'activated_at' => 'Ativada em :date',
|
|
'paused_at' => 'Pausada em :date',
|
|
'created_at' => 'Criada em :date',
|
|
'danger_title' => 'Zona de perigo',
|
|
'danger_description' => 'Ações irreversíveis.',
|
|
'delete_title' => 'Excluir esta automação',
|
|
'delete_description' => 'Remove permanentemente a automação e o histórico de execuções.',
|
|
],
|
|
|
|
'status_run' => [
|
|
'pending' => 'Pendente',
|
|
'running' => 'Executando',
|
|
'waiting' => 'Aguardando',
|
|
'completed' => 'Concluído',
|
|
'failed' => 'Falhou',
|
|
'cancelled' => 'Cancelado',
|
|
],
|
|
|
|
'node_type' => [
|
|
'trigger' => 'Gatilho',
|
|
'generate' => 'Gerar conteúdo',
|
|
'delay' => 'Espera',
|
|
'condition' => 'Condição',
|
|
'publish' => 'Publicar',
|
|
'webhook' => 'Webhook',
|
|
'end' => 'Fim',
|
|
'fetch_rss' => 'Buscar RSS',
|
|
'http_request' => 'Requisição HTTP',
|
|
],
|
|
|
|
'invocations' => [
|
|
'empty' => 'Nenhuma invocação ainda.',
|
|
'refresh' => 'Atualizar',
|
|
'search_placeholder' => 'Buscar por ID do run…',
|
|
'copied' => 'ID do run copiado.',
|
|
'loading' => 'Carregando passos…',
|
|
'no_steps' => 'Nenhum passo registrado.',
|
|
'load_error' => 'Não foi possível carregar os passos.',
|
|
'steps' => '{0}Nenhum passo|{1}:count passo|[2,*]:count passos',
|
|
'filter' => [
|
|
'all' => 'Todos os status',
|
|
],
|
|
'columns' => [
|
|
'timestamp' => 'Data',
|
|
'run' => 'Run',
|
|
'status' => 'Status',
|
|
'message' => 'Última mensagem',
|
|
'duration' => 'Duração',
|
|
],
|
|
'summary' => [
|
|
'completed' => 'Workflow concluído',
|
|
'failed' => 'Workflow falhou',
|
|
'running' => 'Workflow em execução',
|
|
'cancelled' => 'Workflow cancelado',
|
|
'pending' => 'Workflow pendente',
|
|
],
|
|
],
|
|
|
|
'metrics' => [
|
|
'overview' => 'Visão geral',
|
|
'runs_over_time' => 'Execuções ao longo do tempo',
|
|
'posts_by_platform' => 'Posts por plataforma',
|
|
'no_posts' => 'Nenhum post publicado neste período.',
|
|
'cards' => [
|
|
'runs' => 'Total de execuções',
|
|
'completed' => 'Concluídas',
|
|
'failed' => 'Falhas',
|
|
'in_progress' => 'Em progresso',
|
|
'success_rate' => 'Taxa de sucesso',
|
|
'avg_duration' => 'Duração média',
|
|
'posts_created' => 'Posts criados',
|
|
],
|
|
'legend' => [
|
|
'started' => 'Iniciadas',
|
|
'completed' => 'Concluídas',
|
|
'failed' => 'Falhas',
|
|
],
|
|
],
|
|
|
|
'categories' => [
|
|
'sources' => 'Fontes',
|
|
'content' => 'Conteúdo',
|
|
'flow' => 'Fluxo',
|
|
'output' => 'Saída',
|
|
],
|
|
|
|
'variables' => [
|
|
'title' => 'Variáveis do workflow',
|
|
'hint' => 'Valores reutilizáveis referenciados em qualquer lugar com {{ variables.KEY }}. Armazenados encriptados.',
|
|
'empty' => 'Nenhuma variável ainda.',
|
|
'key' => 'Chave',
|
|
'value' => 'Valor',
|
|
'key_placeholder' => 'API_KEY',
|
|
'value_placeholder' => 'Valor',
|
|
'add' => 'Nova variável',
|
|
],
|
|
|
|
'expr' => [
|
|
'trigger_event' => 'Nome do evento do gatilho',
|
|
'trigger_fired_at' => 'Quando o gatilho disparou',
|
|
'trigger_post_id' => 'ID do post que disparou',
|
|
'trigger_post_content' => 'Conteúdo do post que disparou',
|
|
'trigger_post_status' => 'Status do post que disparou',
|
|
'trigger_post_scheduled_at' => 'Quando o post está agendado',
|
|
'trigger_post_published_at' => 'Quando o post foi publicado',
|
|
'fetched_title' => 'Título do item buscado',
|
|
'fetched_link' => 'Link do item buscado',
|
|
'fetched_description' => 'Descrição do item buscado',
|
|
'fetched_pubdate' => 'Data de publicação do item buscado',
|
|
'fetched_http' => 'Item HTTP buscado (adicione um campo)',
|
|
'generated_content' => 'Conteúdo do post gerado por IA',
|
|
'generated_post_url' => 'URL do post gerado por IA',
|
|
'variable' => 'Variável do fluxo',
|
|
'now' => 'Data e hora atuais',
|
|
],
|
|
|
|
'test' => [
|
|
'description' => 'Executa a automação ponta a ponta usando um payload de gatilho sintético. Útil pra validar cada nó sem esperar o agendamento ou o feed real.',
|
|
'starting' => 'Iniciando execução de teste…',
|
|
'in_progress' => 'Em andamento',
|
|
'completed' => 'Concluído',
|
|
'failed' => 'Falhou',
|
|
'waiting' => 'Aguardando',
|
|
'close' => 'Fechar',
|
|
'no_node_runs' => 'Aguardando o primeiro nó começar…',
|
|
'node_input' => 'Entrada',
|
|
'node_output' => 'Saída',
|
|
'node_error' => 'Erro',
|
|
'no_new_items' => 'Nenhum item novo — nada foi executado adiante.',
|
|
'error_starting' => 'Não foi possível iniciar a execução de teste.',
|
|
'with_real_data' => 'Com dados reais',
|
|
'run' => 'Rodar teste',
|
|
'idle_hint' => 'Clique em Rodar teste para executar a automação de ponta a ponta.',
|
|
'real_data_hint' => 'Este teste vai publicar posts, avançar watermarks e disparar efeitos colaterais externos.',
|
|
'dry_badge' => 'Teste seco',
|
|
],
|
|
|
|
'status' => [
|
|
'draft' => 'Rascunho',
|
|
'active' => 'Ativa',
|
|
'paused' => 'Pausada',
|
|
],
|
|
|
|
'index' => [
|
|
'empty_title' => 'Nenhuma automação ainda',
|
|
'empty_description' => 'Crie sua primeira automação para começar a publicar no piloto automático.',
|
|
'columns' => [
|
|
'name' => 'Nome',
|
|
'status' => 'Status',
|
|
'created' => 'Criada em',
|
|
],
|
|
],
|
|
|
|
'form' => [
|
|
'activate_error_fallback' => 'Não foi possível ativar a automação.',
|
|
'pause_error_fallback' => 'Não foi possível pausar a automação.',
|
|
'save_error_fallback' => 'Não foi possível salvar a automação.',
|
|
'save_success' => 'Automação salva.',
|
|
'empty_canvas_title' => 'Comece a construir sua automação',
|
|
'empty_canvas_description' => 'Arraste um nó do painel esquerdo para começar.',
|
|
'name_placeholder' => 'Automação sem título',
|
|
],
|
|
|
|
'nodes' => [
|
|
'trigger' => 'Trigger',
|
|
'generate' => 'Gerar',
|
|
'delay' => 'Esperar',
|
|
'condition' => 'Condição',
|
|
'publish' => 'Publicar',
|
|
'webhook' => 'Webhook',
|
|
'end' => 'Encerrar',
|
|
'end_summary' => 'Encerra a automação aqui',
|
|
'fetch_rss' => 'Buscar RSS',
|
|
'http_request' => 'Requisição HTTP',
|
|
'handles' => [
|
|
'items' => 'tem itens',
|
|
'no_items' => 'sem itens',
|
|
],
|
|
],
|
|
|
|
'config' => [
|
|
'select_placeholder' => 'Selecione…',
|
|
'invalid_json' => 'Isto ainda não é um JSON válido.',
|
|
'expand_editor' => 'Expandir editor',
|
|
'minimize_editor' => 'Minimizar',
|
|
|
|
'trigger' => [
|
|
'type' => 'Tipo de trigger',
|
|
'types' => [
|
|
'schedule' => 'Agendamento',
|
|
'post_published' => 'Quando um post é publicado',
|
|
'post_scheduled' => 'Quando um post é agendado',
|
|
],
|
|
'post_published_hint' => 'Roda toda vez que algum post nesta workspace é publicado. O post fica disponível em {{ trigger.post }} pros próximos nós.',
|
|
'post_scheduled_hint' => 'Roda toda vez que algum post nesta workspace é agendado. O post fica disponível em {{ trigger.post }}.',
|
|
|
|
'schedule' => [
|
|
'field' => 'Intervalo de disparo',
|
|
'fields' => [
|
|
'minutes' => 'Minutos',
|
|
'hours' => 'Horas',
|
|
'days' => 'Dias',
|
|
'weeks' => 'Semanas',
|
|
'months' => 'Meses',
|
|
],
|
|
'minutes_interval' => 'Minutos entre disparos',
|
|
'hours_interval' => 'Horas entre disparos',
|
|
'days_interval' => 'Dias entre disparos',
|
|
'hour' => 'Disparar na hora',
|
|
'minute' => 'Disparar no minuto',
|
|
'weekdays' => 'Disparar nos dias',
|
|
'day_of_month' => 'Dia do mês',
|
|
'weekday_names' => [
|
|
'sun' => 'Dom',
|
|
'mon' => 'Seg',
|
|
'tue' => 'Ter',
|
|
'wed' => 'Qua',
|
|
'thu' => 'Qui',
|
|
'fri' => 'Sex',
|
|
'sat' => 'Sáb',
|
|
],
|
|
'summary' => [
|
|
'every_n_minutes' => 'Roda a cada minuto|Roda a cada :count minutos',
|
|
'every_n_hours' => 'Roda a cada hora no minuto :minute|Roda a cada :count horas no minuto :minute',
|
|
'every_n_days' => 'Roda todo dia às :time|Roda a cada :count dias às :time',
|
|
'weekly' => 'Roda :days às :time',
|
|
'monthly' => 'Roda no dia :day de cada mês às :time',
|
|
],
|
|
],
|
|
],
|
|
'generate' => [
|
|
'social_accounts' => 'Contas sociais',
|
|
'social_accounts_empty' => 'Nenhuma conta social conectada. Conecte uma primeiro.',
|
|
'target_slide_count' => 'Slides a gerar',
|
|
'prompt_template' => 'Template do prompt',
|
|
'prompt_template_hint' => 'Digite {{ para inserir dados das etapas anteriores.',
|
|
'image_count' => 'Imagens a gerar',
|
|
'image_count_hint' => '0 = post só texto (sem imagem). 1 = imagem única. 2+ = carrossel.',
|
|
'use_brand_voice' => 'Usar voz da marca',
|
|
'use_brand_voice_hint' => 'Aplica a descrição e a voz da sua marca. Desligue para curadoria fiel de fontes de terceiros (notícias, RSS).',
|
|
'use_brand_visuals' => 'Usar visual da marca',
|
|
'use_brand_visuals_hint' => 'Guia as imagens de IA com as cores e identidade da sua marca. Desligue para imagens neutras, guiadas só pelo tema do post.',
|
|
],
|
|
'delay' => [
|
|
'duration' => 'Duração',
|
|
'unit' => 'Unidade',
|
|
'units' => [
|
|
'minutes' => 'Minutos',
|
|
'hours' => 'Horas',
|
|
'days' => 'Dias',
|
|
],
|
|
],
|
|
'condition' => [
|
|
'field' => 'Campo',
|
|
'operator' => 'Operador',
|
|
'operators' => [
|
|
'contains' => 'contém',
|
|
'not_contains' => 'não contém',
|
|
'equals' => 'igual a',
|
|
'not_equals' => 'diferente de',
|
|
'matches' => 'corresponde (regex)',
|
|
'greater_than' => 'maior que',
|
|
'less_than' => 'menor que',
|
|
],
|
|
'value' => 'Valor',
|
|
],
|
|
'publish' => [
|
|
'mode' => 'Modo',
|
|
'modes' => [
|
|
'now' => 'Publicar agora',
|
|
'scheduled' => 'Agendar',
|
|
'draft' => 'Salvar como rascunho',
|
|
],
|
|
'scheduled_offset' => 'Atraso a partir do trigger (minutos)',
|
|
],
|
|
'webhook' => [
|
|
'url' => 'URL',
|
|
'method' => 'Método',
|
|
'payload_template' => 'Template do payload (JSON)',
|
|
],
|
|
'end' => [
|
|
'reason' => 'Motivo (opcional)',
|
|
'reason_placeholder' => 'ex: Filtrado pela condição',
|
|
],
|
|
'fetch_rss' => [
|
|
'feed_url' => 'URL do feed',
|
|
'feed_url_hint' => 'Na primeira execução, o watermark é setado pra "agora" pra não inundar os próximos nós com items históricos. Execuções seguintes só veem items novos.',
|
|
],
|
|
'http_request' => [
|
|
'url' => 'URL',
|
|
'method' => 'Método',
|
|
'auth_type' => 'Autenticação',
|
|
'auth' => [
|
|
'none' => 'Nenhuma (público)',
|
|
'bearer' => 'Bearer token',
|
|
'basic' => 'Basic auth',
|
|
'api_key' => 'Header de API key',
|
|
],
|
|
'bearer_token' => 'Bearer token',
|
|
'basic_username' => 'Usuário',
|
|
'basic_password' => 'Senha',
|
|
'api_key_header' => 'Nome do header',
|
|
'api_key_value' => 'API key',
|
|
'body_template' => 'Template do body (JSON)',
|
|
'headers' => 'Headers',
|
|
'header_name' => 'Nome do header',
|
|
'header_value' => 'Valor',
|
|
'add_header' => 'Adicionar header',
|
|
'polling_section' => 'Lista e deduplicação (opcional)',
|
|
'polling_hint' => 'Quando a resposta é uma lista, cada item roda o fluxo separadamente. Um objeto único roda uma vez.',
|
|
'items_path' => 'Caminho dos itens',
|
|
'items_path_hint' => 'Deixe vazio se a resposta já é um array. Use um caminho com ponto (ex: data.items) para um array aninhado, ou * para um objeto com chaves por id.',
|
|
'item_key_path' => 'Caminho da chave do item',
|
|
'item_key_path_hint' => 'Caminho JSON pra um id único (ex: id). Itens já vistos são ignorados, então um feed sem datas ainda encaminha só os novos.',
|
|
'item_date_path' => 'Caminho da data do item',
|
|
'item_date_path_hint' => 'Caminho JSON pro timestamp do item (ex: published_at). Preferido sobre o caminho da chave quando existe. A primeira busca registra o ponto de partida e não encaminha nada, então um feed existente nunca inunda no primeiro dia.',
|
|
],
|
|
],
|
|
|
|
'delete' => [
|
|
'title' => 'Excluir automação',
|
|
'description' => 'Tem certeza que deseja excluir esta automação? Todas as execuções e itens de gatilho também serão removidos. Esta ação não pode ser desfeita.',
|
|
'confirm' => 'Excluir',
|
|
'cancel' => 'Cancelar',
|
|
],
|
|
|
|
'flash' => [
|
|
'deleted' => 'Automação excluída com sucesso!',
|
|
],
|
|
|
|
'errors' => [
|
|
'no_active_social_accounts' => 'Nenhuma conta social ativa configurada para esta automação.',
|
|
'must_have_one_trigger' => 'A automação precisa ter exatamente um nó de trigger.',
|
|
'trigger_must_be_connected' => 'O nó de trigger precisa estar conectado a pelo menos um nó.',
|
|
'graph_contains_cycle' => 'O grafo da automação contém um ciclo.',
|
|
'only_failed_can_retry' => 'Apenas execuções que falharam podem ser repetidas.',
|
|
'no_generated_post' => 'Nenhum post gerado encontrado para esta execução.',
|
|
'webhook_server_error' => 'Erro no servidor do webhook.',
|
|
'webhook_request_failed' => 'Não foi possível completar a requisição do webhook.',
|
|
'webhook_missing_url' => 'O nó de webhook está sem a URL.',
|
|
'webhook_invalid_payload_json' => 'O template do payload não é um JSON válido.',
|
|
'url_not_allowed' => 'A URL da requisição aponta para um endereço privado ou inacessível e foi bloqueada.',
|
|
'node_no_longer_exists' => 'O nó :node_id não existe mais nesta automação.',
|
|
'no_trigger_connection' => 'Nenhum nó conectado ao nó de trigger.',
|
|
'fetch_rss_missing_url' => 'O nó Buscar RSS está sem a URL do feed.',
|
|
'fetch_rss_request_failed' => 'A requisição do feed RSS falhou.',
|
|
'fetch_rss_malformed' => 'O feed RSS está malformado.',
|
|
'http_missing_url' => 'O nó de requisição HTTP está sem a URL.',
|
|
'http_request_exception' => 'A requisição HTTP lançou uma exceção.',
|
|
'http_request_failed' => 'A requisição HTTP falhou.',
|
|
'http_items_path_not_array' => 'O items path não resultou em uma lista.',
|
|
],
|
|
];
|