Automatic AI Posts, setup automatizado e seeder de permalinks/avatar

Plugin automatic-ai-posts (v2.0.0)
- Pipeline completo: coleta de feeds RSS/Atom, filtro por IA, reescrita,
  categoria, imagem de capa e agendamento
- Página de configuração com teste real do provedor de IA
- Editor: botão para refazer imagem de capa e metadados, textos em PT-BR
- Ajuda com botão Pix (copia-e-cola + QR) e sem nota de avaliação
- Cache-busting por mtime nos assets do admin

Tema gustavoo-portfolio
- Marca do cabeçalho reduzida a "Gustavo"
- Suporte a título próprio da marca

Setup (docker/wp-init.sh, compose.yaml)
- Plugins de terceiros (Post Views Counter, Rank Math, Site Kit)
  instalados do WordPress.org em vez de versionados
- Falha explícita ao final se algum plugin obrigatório não instalar
- WPCLI_UID/WPCLI_GID configuráveis

Seeder do tema
- Links permanentes "Dia e nome" e avatar "Iniciais" aplicados
  apenas em instalação nova, com regravação do .htaccess
This commit is contained in:
Gustavo committed 2026-11-02 13:33:30 -03:00
1 parent 5891467266
commit 0ea3651fb5
73 files changed
+8858 -39

No files matched your search

@@ -0,0 +1,103 @@
<?php
defined('ABSPATH') || exit;
/**
* de
*/
return [
'nav_label' => 'Plugin-Navigation',
'tab_execucoes' => 'Ausführungen',
'tab_configuracoes' => 'Einstellungen',
'tab_log' => 'Live-Log',
'tab_ajuda' => 'Hilfe',
'config_subtitle' => 'Alle Plugin-Optionen nach Kategorie konfigurieren.',
'config_categories' => 'Einstellungskategorien',
'section_general' => 'Allgemein',
'section_general_desc' => 'Haupteinstellungen des Plugins.',
'section_prompts' => 'Prompts und Filter',
'section_prompts_desc' => 'Redaktionsprofil, Ausschlüsse und Umschreib-Anweisungen.',
'section_feeds' => 'RSS-Feeds',
'section_feeds_desc' => 'Nachrichtenquellen per RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'API-Schlüssel und Kategorien.',
'section_ai' => 'Künstliche Intelligenz',
'section_ai_desc' => 'Anbieter, Modell und Parameter.',
'section_images' => 'Bilder',
'section_images_desc' => 'Such- und Bildunterschrift-Anweisungen.',
'section_other' => 'Weitere Einstellungen',
'section_other_desc' => 'Version und Support.',
'field_pub_mode' => 'Veröffentlichungsmodus',
'pub_mode_draft_label' => 'Als Entwurf speichern',
'pub_mode_pub_label' => 'Automatisch veröffentlichen',
'field_language' => 'Sprache der Beiträge',
'field_app_language' => 'Sprache der App',
'field_posts_per_run' => 'Beiträge pro Lauf',
'min_posts' => 'Min.:',
'max_posts' => 'Max.:',
'field_editorial' => 'Redaktionsprofil',
'field_negative' => 'Negativprofil',
'rewrite_label' => 'Umschreiben',
'field_rewrite' => 'Umschreib-Anweisungen',
'field_feeds' => 'Feed-URLs',
'field_feed_max' => 'Beiträge pro Feed',
'field_gnews_key' => 'API-Schlüssel',
'field_gnews_cats' => 'Kategorien',
'field_gnews_max' => 'Beiträge pro Kategorie',
'field_provider' => 'KI-Anbieter',
'field_model' => 'Modell',
'field_ai_limits' => 'Timeout und Versuche',
'timeout_label' => 'Timeout',
'retries_label' => 'Versuche',
'field_image_instructions' => 'Bild-Anweisungen',
'field_image_caption' => 'Konfigurierbare Bildunterschrift',
'other_version' => 'Plugin-Version',
'other_support' => 'Support und Credits',
'save_all' => 'Alle Einstellungen speichern',
'discard_changes' => 'Änderungen verwerfen',
'unsaved_changes' => 'Ungespeicherte Änderungen',
'exec_subtitle' => 'Ausführungen verfolgen und Automatik steuern.',
'running_now' => 'Läuft...',
'no_execution' => 'Kein Prozess läuft',
'started_in' => 'Gestartet: %s',
'idle_desc' => 'Kein Lauf aktiv.',
'last_run' => 'Zuletzt:',
'never' => 'nie',
'running_btn' => 'Läuft...',
'abort_btn' => 'Lauf abbrechen',
'status_running' => 'Läuft',
'status_idle' => 'Gestoppt',
'section_run_now' => 'Jetzt ausführen',
'card_auto' => 'Automatische Generierung',
'auto_status_label' => 'Status',
'auto_active' => 'Aktiv',
'auto_inactive' => 'Inaktiv',
'next_run' => 'Nächster:',
'auto_first_run' => 'Erster Lauf',
'start_now' => 'Jetzt starten',
'set_schedule' => 'Zeitplan festlegen',
'field_auto_period' => 'Zeitraum der Automatik',
'stop_auto_btn' => 'Automatik pausieren',
'start_auto_btn' => 'Automatik starten',
'log_title' => 'Live-Log',
'log_panel_subtitle' => 'Ereignisse und Fehler verfolgen.',
'log_live' => 'Automatisch aktualisieren',
'log_level' => 'Stufe',
'log_level_all' => 'Alle Stufen',
'log_loading' => 'Lädt...',
'log_load_more' => 'Mehr laden',
'help_subtitle' => 'Plugin-Credits.',
'created_by' => 'erstellt von',
'licence_label' => 'GPLv2-Lizenz',
'help_website' => 'Website des Autors',
'plugin_active' => 'Plugin aktiv',
'version_label' => 'Version %s',
'js_run_now' => 'Jetzt ausführen',
'js_settings_saved' => 'Einstellungen gespeichert.',
'js_comm_error' => 'Kommunikation fehlgeschlagen.',
'help_page_title' => 'Hilfe, Credits und Spende',
'section_donate' => 'Projekt unterstützen',
'section_credits' => 'Credits',
'section_about' => 'Über das Plugin',
'donate_btn' => 'Mit Pix spenden',
'or_label' => 'oder',
];
@@ -0,0 +1,201 @@
<?php
defined('ABSPATH') || exit;
/**
* English
*/
return [
'nav_label' => 'Plugin navigation',
'tab_execucoes' => 'Runs',
'tab_configuracoes' => 'Settings',
'tab_log' => 'Live log',
'tab_ajuda' => 'Help',
'config_subtitle' => 'Configure every plugin option, organized by category.',
'config_categories' => 'Settings categories',
'section_general' => 'General',
'section_general_desc' => 'Main plugin settings.',
'section_prompts' => 'Prompts and Filter',
'section_prompts_desc' => 'Editorial profile, exclusions and rewrite instructions.',
'section_feeds' => 'RSS Feeds',
'section_feeds_desc' => 'News sources via RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'API key and categories for news search.',
'section_ai' => 'Artificial Intelligence',
'section_ai_desc' => 'AI provider, model and parameters.',
'section_other' => 'Other Settings',
'section_other_desc' => 'Version and support.',
'field_pub_mode' => 'Publish mode',
'pub_mode_draft_label' => 'Save as draft',
'pub_mode_pub_label' => 'Publish automatically',
'pub_mode_desc' => 'Applies to both the manual button and automatic generation.',
'field_language' => 'Post language',
'language_desc' => 'Defines the language the AI writes in.',
'field_app_language' => 'App language',
'app_language_desc' => 'Language of the admin panel.',
'field_posts_per_run' => 'Posts per run',
'min_posts' => 'Min:',
'max_posts' => 'Max:',
'field_editorial' => 'Editorial profile',
'editorial_ph' => 'E.g. Tech, AI and startups blog. Prioritize generative AI news.',
'editorial_desc' => 'The AI uses this profile to pick the most relevant articles.',
'field_negative' => 'Negative profile',
'negative_ph' => 'E.g. Avoid politics, sports and clickbait.',
'negative_desc' => 'Topics the AI must <strong>avoid</strong> when selecting articles.',
'rewrite_label' => 'Rewriting',
'image_label' => 'Cover image',
'field_rewrite' => 'Rewrite instructions',
'rewrite_ph' => 'E.g. Write in a formal tone, use data and avoid clickbait.',
'rewrite_desc' => 'Extra instructions sent to the AI when rewriting.',
'field_feeds' => 'Feed URLs',
'feeds_desc' => 'One feed per line.',
'field_feed_max' => 'Articles per feed',
'feed_max_desc' => 'How many recent articles per feed are evaluated.',
'field_gnews_key' => 'API key',
'key_saved_hint' => 'A key is already saved. Leave the field blank to keep it.',
'gnews_key_desc' => 'Get it at <a href="https://gnews.io" target="_blank" rel="noopener">gnews.io</a>.',
'field_gnews_cats' => 'Categories',
'gnews_cats_desc' => 'A separate request is made for each selected category.',
'field_gnews_max' => 'Articles per category',
'gnews_max_desc' => 'On the GNews free plan the maximum is 10 articles per request.',
'field_provider' => 'AI provider',
'provider_desc' => 'The provider used for every AI call.',
'field_nvidia_key' => 'NVIDIA API key',
'nvidia_key_desc' => 'Get it at <a href="https://build.nvidia.com" target="_blank" rel="noopener">build.nvidia.com</a>.',
'field_openai_key' => 'OpenAI API key',
'openai_key_desc' => 'Get it at <a href="https://platform.openai.com" target="_blank" rel="noopener">platform.openai.com</a>.',
'field_anthropic_key' => 'Anthropic API key',
'anthropic_key_desc' => 'Get it at <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a>.',
'field_openrouter_key' => 'OpenRouter API key',
'openrouter_key_desc' => 'Get it at <a href="https://openrouter.ai" target="_blank" rel="noopener">openrouter.ai</a>.',
'field_custom_url' => 'Base URL',
'custom_url_desc' => 'OpenAI-compatible endpoint, including /v1.',
'field_custom_key' => 'API key',
'custom_key_desc' => 'Key sent as Bearer to the endpoint above.',
'field_vertex_project' => 'Project ID',
'field_vertex_location' => 'Location',
'field_vertex_sa' => 'Service account (JSON)',
'vertex_sa_desc' => 'Full contents of the Google Cloud service account JSON file.',
'field_model' => 'Model',
'model_desc' => 'Leave blank to use the provider default model.',
'field_ai_limits' => 'Timeout and retries',
'timeout_label' => 'Timeout',
'retries_label' => 'Retries',
'ai_limits_desc' => 'Applies to every AI call.',
'ai_test_label' => 'Test connection',
'ai_test_btn' => 'Test now',
'ai_test_desc' => 'Sends a short call to the selected provider and shows the reply or the error.',
'ai_test_testing' => 'Testing…',
'ai_test_ok' => 'Connection works',
'field_image_instructions' => 'Image instructions',
'image_instructions_ph' => 'E.g. Prefer real photos of people working, no text in the image.',
'image_instructions_desc' => 'The AI uses these instructions to build the DuckDuckGo query and write the image texts.',
'field_image_caption' => 'Configurable caption',
'image_caption_ph' => 'E.g. Always mention the company name. Max 120 characters.',
'image_caption_desc' => 'Style or rules the image caption must follow.',
'other_version' => 'Plugin version',
'other_support' => 'Support and credits',
'save_all' => 'Save all settings',
'discard_changes' => 'Discard changes',
'unsaved_changes' => 'Unsaved changes',
'exec_subtitle' => 'Follow plugin runs and control automatic generation.',
'running_now' => 'Running now...',
'no_execution' => 'No process running',
'started_in' => 'Started at: %s',
'idle_desc' => 'No run in progress right now.',
'processing_feeds' => 'Processing feeds...',
'last_run' => 'Last:',
'never' => 'never',
'running_btn' => 'Running...',
'abort_btn' => 'Abort run',
'exec_note' => 'Updated automatically every 3 seconds. Abort ends the process immediately.',
'status_running' => 'Running',
'status_idle' => 'Stopped',
'section_run_now' => 'Run now',
'card_auto' => 'Automatic generation',
'auto_status_label' => 'Status',
'auto_active' => 'Active',
'auto_inactive' => 'Inactive',
'next_run' => 'Next:',
'auto_first_run' => 'First run',
'start_now' => 'Start now',
'set_schedule' => 'Set a schedule',
'schedule_desc' => 'Pick the date and time for the first run.',
'field_auto_period' => 'Automatic generation period',
'auto_period_hint' => 'Interval between automatic runs.',
'stop_auto_btn' => 'Pause automatic',
'start_auto_btn' => 'Start automatic',
'log_title' => 'Live log',
'log_panel_subtitle' => 'Follow plugin events and errors.',
'log_live' => 'Auto refresh',
'log_level' => 'Level',
'log_level_all' => 'All levels',
'log_loading' => 'Loading...',
'log_load_more' => 'Load more',
'help_subtitle' => 'Plugin credits.',
'created_by' => 'created by',
'licence_label' => 'GPLv2 License',
'help_website' => 'Author website',
'plugin_active' => 'Plugin active',
'version_label' => 'Version %s',
'js_no_execution' => 'No process running',
'js_running' => 'Running...',
'js_aborting' => 'Aborting...',
'js_run_now' => 'Run now',
'js_processing' => 'Processing feeds...',
'js_error_prefix' => 'Error:',
'js_aborted' => 'Run aborted.',
'js_wait' => 'Please wait...',
'js_auto_started' => 'Automatic generation enabled.',
'js_auto_paused' => 'Automatic generation paused.',
'js_comm_error' => 'Communication failed.',
'js_error_start' => 'Could not start.',
'js_error_abort' => 'Could not abort.',
'js_start_auto' => 'Start automatic',
'js_stop_auto' => 'Pause automatic',
'js_log_empty' => 'No logs yet.',
'js_log_updated' => 'Updated',
'js_next_run' => 'Next:',
'js_auto_active' => 'Active',
'js_auto_inactive' => 'Inactive',
'js_schedule_required' => 'Pick a date and time.',
'js_schedule_past' => 'The date must be in the future.',
'js_settings_saved' => 'Settings saved.',
'js_preparing' => 'Preparing...',
'js_running_feeds' => 'Processing feeds...',
'js_sleeping' => 'Waiting...',
'gnews_categories' => ['general' => 'General', 'world' => 'World', 'nation' => 'Nation', 'business' => 'Business', 'technology' => 'Technology', 'entertainment' => 'Entertainment', 'sports' => 'Sports', 'science' => 'Science', 'health' => 'Health'],
'auto_period_units' => ['minutes' => 'minutes', 'hours' => 'hours', 'days' => 'days'],
'help_page_title' => 'Help, Credits and Donation',
'help_page_subtitle' => 'Find help, see the plugin credits and support the project.',
'section_donate' => 'Support the Project',
'section_donate_desc' => 'Your support keeps the plugin updated and evolving.',
'donate_title' => 'Make a donation',
'donate_desc' => 'Any amount helps a lot to keep this plugin in development and to bring new features to you.',
'donate_btn' => 'Donate with Pix',
'donate_copied' => 'Copy and paste key copied!',
'donate_qr_hint' => 'Point your camera',
'or_label' => 'or',
'section_credits' => 'Credits',
'section_credits_desc' => 'Thanks to everyone who makes this project possible.',
'credit_developer' => 'Lead Developer',
'section_about' => 'About the Plugin',
'section_about_desc' => 'Important information about Automatic AI Posts.',
'about_desc' => 'WordPress plugin to generate and publish posts automatically with artificial intelligence, simply and efficiently.',
'about_feature_1' => 'Automatic AI posts',
'about_feature_2' => 'Multiple settings',
'about_feature_3' => 'Detailed logs',
'about_feature_4' => 'RSS feed support',
'about_feature_5' => 'Scheduled runs',
'about_feature_6' => 'Multiple AI providers',
'about_github' => 'Project on GitHub',
'donate_key_label' => 'Copy and paste key:',
'donate_no_qr' => 'Save the QR code image at admin/pix-qrcode.png',
'editor_box_title' => 'Automatic AI Posts',
'editor_desc' => 'Searches a new cover image and regenerates the alt, caption and description, exactly like the pipeline.',
'editor_btn_has_image' => 'Search a new image',
'editor_btn_no_image' => 'Search a cover image',
'editor_working' => 'Searching a new image…',
'editor_success' => 'Cover image updated.',
'editor_no_image' => 'No usable image was found. The current cover was kept.',
'editor_error' => 'Could not search the image. Check the plugin logs.',
];
@@ -0,0 +1,103 @@
<?php
defined('ABSPATH') || exit;
/**
* es
*/
return [
'nav_label' => 'Navegación del plugin',
'tab_execucoes' => 'Ejecuciones',
'tab_configuracoes' => 'Ajustes',
'tab_log' => 'Log en vivo',
'tab_ajuda' => 'Ayuda',
'config_subtitle' => 'Configure todas las opciones del plugin por categoría.',
'config_categories' => 'Categorías de ajustes',
'section_general' => 'General',
'section_general_desc' => 'Ajustes principales del plugin.',
'section_prompts' => 'Prompts y Filtro',
'section_prompts_desc' => 'Perfil editorial, exclusiones e instrucciones de reescritura.',
'section_feeds' => 'Feeds RSS',
'section_feeds_desc' => 'Fuentes de noticias por RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'Clave de API y categorías para buscar noticias.',
'section_ai' => 'Inteligencia Artificial',
'section_ai_desc' => 'Proveedor, modelo y parámetros de la IA.',
'section_images' => 'Imágenes',
'section_images_desc' => 'Instrucciones de búsqueda y pie de foto.',
'section_other' => 'Otros ajustes',
'section_other_desc' => 'Versión y soporte.',
'field_pub_mode' => 'Modo de publicación',
'pub_mode_draft_label' => 'Guardar como borrador',
'pub_mode_pub_label' => 'Publicar automáticamente',
'field_language' => 'Idioma de los posts',
'field_app_language' => 'Idioma de la aplicación',
'field_posts_per_run' => 'Posts por ejecución',
'min_posts' => 'Mín:',
'max_posts' => 'Máx:',
'field_editorial' => 'Perfil editorial',
'field_negative' => 'Perfil negativo',
'rewrite_label' => 'Reescritura',
'field_rewrite' => 'Instrucciones de reescritura',
'field_feeds' => 'URLs de los feeds',
'field_feed_max' => 'Artículos por feed',
'field_gnews_key' => 'Clave de API',
'field_gnews_cats' => 'Categorías',
'field_gnews_max' => 'Artículos por categoría',
'field_provider' => 'Proveedor de IA',
'field_model' => 'Modelo',
'field_ai_limits' => 'Timeout e intentos',
'timeout_label' => 'Timeout',
'retries_label' => 'Intentos',
'field_image_instructions' => 'Instrucciones de imagen',
'field_image_caption' => 'Pie de foto configurable',
'other_version' => 'Versión del plugin',
'other_support' => 'Soporte y créditos',
'save_all' => 'Guardar todos los ajustes',
'discard_changes' => 'Descartar cambios',
'unsaved_changes' => 'Cambios sin guardar',
'exec_subtitle' => 'Sigue las ejecuciones y controla la generación automática.',
'running_now' => 'Ejecutando ahora...',
'no_execution' => 'Ningún proceso en ejecución',
'started_in' => 'Iniciado: %s',
'idle_desc' => 'Ninguna ejecución en curso.',
'last_run' => 'Última:',
'never' => 'nunca',
'running_btn' => 'En ejecución...',
'abort_btn' => 'Abortar ejecución',
'status_running' => 'En ejecución',
'status_idle' => 'Detenido',
'section_run_now' => 'Ejecutar ahora',
'card_auto' => 'Generación automática',
'auto_status_label' => 'Estado',
'auto_active' => 'Activa',
'auto_inactive' => 'Inactiva',
'next_run' => 'Próxima:',
'auto_first_run' => 'Primera ejecución',
'start_now' => 'Empezar ahora',
'set_schedule' => 'Definir un horario',
'field_auto_period' => 'Periodo de generación automática',
'stop_auto_btn' => 'Pausar automático',
'start_auto_btn' => 'Iniciar automático',
'log_title' => 'Log en vivo',
'log_panel_subtitle' => 'Sigue los eventos y errores del plugin.',
'log_live' => 'Actualización automática',
'log_level' => 'Nivel',
'log_level_all' => 'Todos los niveles',
'log_loading' => 'Cargando...',
'log_load_more' => 'Cargar más',
'help_subtitle' => 'Créditos del plugin.',
'created_by' => 'creado por',
'licence_label' => 'Licencia GPLv2',
'help_website' => 'Sitio del autor',
'plugin_active' => 'Plugin activo',
'version_label' => 'Versión %s',
'js_run_now' => 'Ejecutar ahora',
'js_settings_saved' => 'Ajustes guardados.',
'js_comm_error' => 'Fallo de comunicación.',
'help_page_title' => 'Ayuda, Créditos y Donación',
'section_donate' => 'Apoya el Proyecto',
'section_credits' => 'Créditos',
'section_about' => 'Sobre el Plugin',
'donate_btn' => 'Donar con Pix',
'or_label' => 'o',
];
@@ -0,0 +1,103 @@
<?php
defined('ABSPATH') || exit;
/**
* fr
*/
return [
'nav_label' => 'Navigation du plugin',
'tab_execucoes' => 'Exécutions',
'tab_configuracoes' => 'Réglages',
'tab_log' => 'Journal en direct',
'tab_ajuda' => 'Aide',
'config_subtitle' => 'Configurez toutes les options du plugin par catégorie.',
'config_categories' => 'Catégories de réglages',
'section_general' => 'Général',
'section_general_desc' => 'Réglages principaux du plugin.',
'section_prompts' => 'Prompts et Filtre',
'section_prompts_desc' => 'Profil éditorial, exclusions et instructions de réécriture.',
'section_feeds' => 'Flux RSS',
'section_feeds_desc' => 'Sources d’actualités via RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'Clé API et catégories de recherche.',
'section_ai' => 'Intelligence Artificielle',
'section_ai_desc' => 'Fournisseur, modèle et paramètres de l’IA.',
'section_images' => 'Images',
'section_images_desc' => 'Instructions de recherche et légende.',
'section_other' => 'Autres réglages',
'section_other_desc' => 'Version et support.',
'field_pub_mode' => 'Mode de publication',
'pub_mode_draft_label' => 'Enregistrer en brouillon',
'pub_mode_pub_label' => 'Publier automatiquement',
'field_language' => 'Langue des articles',
'field_app_language' => 'Langue de l’application',
'field_posts_per_run' => 'Articles par exécution',
'min_posts' => 'Min :',
'max_posts' => 'Max :',
'field_editorial' => 'Profil éditorial',
'field_negative' => 'Profil négatif',
'rewrite_label' => 'Réécriture',
'field_rewrite' => 'Instructions de réécriture',
'field_feeds' => 'URL des flux',
'field_feed_max' => 'Articles par flux',
'field_gnews_key' => 'Clé API',
'field_gnews_cats' => 'Catégories',
'field_gnews_max' => 'Articles par catégorie',
'field_provider' => 'Fournisseur d’IA',
'field_model' => 'Modèle',
'field_ai_limits' => 'Délai et tentatives',
'timeout_label' => 'Délai',
'retries_label' => 'Tentatives',
'field_image_instructions' => 'Instructions d’image',
'field_image_caption' => 'Légende configurable',
'other_version' => 'Version du plugin',
'other_support' => 'Support et crédits',
'save_all' => 'Enregistrer tous les réglages',
'discard_changes' => 'Annuler les modifications',
'unsaved_changes' => 'Modifications non enregistrées',
'exec_subtitle' => 'Suivez les exécutions et contrôlez la génération automatique.',
'running_now' => 'Exécution en cours...',
'no_execution' => 'Aucun processus en cours',
'started_in' => 'Démarré à : %s',
'idle_desc' => 'Aucune exécution en cours.',
'last_run' => 'Dernière :',
'never' => 'jamais',
'running_btn' => 'En cours...',
'abort_btn' => 'Arrêter l’exécution',
'status_running' => 'En cours',
'status_idle' => 'Arrêté',
'section_run_now' => 'Exécuter maintenant',
'card_auto' => 'Génération automatique',
'auto_status_label' => 'Statut',
'auto_active' => 'Active',
'auto_inactive' => 'Inactive',
'next_run' => 'Prochaine :',
'auto_first_run' => 'Première exécution',
'start_now' => 'Démarrer maintenant',
'set_schedule' => 'Définir un horaire',
'field_auto_period' => 'Période de génération automatique',
'stop_auto_btn' => 'Mettre en pause',
'start_auto_btn' => 'Démarrer l’automatique',
'log_title' => 'Journal en direct',
'log_panel_subtitle' => 'Suivez les événements et erreurs du plugin.',
'log_live' => 'Actualisation automatique',
'log_level' => 'Niveau',
'log_level_all' => 'Tous les niveaux',
'log_loading' => 'Chargement...',
'log_load_more' => 'Charger plus',
'help_subtitle' => 'Crédits du plugin.',
'created_by' => 'créé par',
'licence_label' => 'Licence GPLv2',
'help_website' => 'Site de l’auteur',
'plugin_active' => 'Plugin actif',
'version_label' => 'Version %s',
'js_run_now' => 'Exécuter maintenant',
'js_settings_saved' => 'Réglages enregistrés.',
'js_comm_error' => 'Échec de communication.',
'help_page_title' => 'Aide, Crédits et Don',
'section_donate' => 'Soutenez le Projet',
'section_credits' => 'Crédits',
'section_about' => 'À propos du Plugin',
'donate_btn' => 'Faire un don avec Pix',
'or_label' => 'ou',
];
@@ -0,0 +1,103 @@
<?php
defined('ABSPATH') || exit;
/**
* it
*/
return [
'nav_label' => 'Navigazione del plugin',
'tab_execucoes' => 'Esecuzioni',
'tab_configuracoes' => 'Impostazioni',
'tab_log' => 'Log in tempo reale',
'tab_ajuda' => 'Aiuto',
'config_subtitle' => 'Configura tutte le opzioni del plugin per categoria.',
'config_categories' => 'Categorie di impostazioni',
'section_general' => 'Generale',
'section_general_desc' => 'Impostazioni principali del plugin.',
'section_prompts' => 'Prompt e Filtro',
'section_prompts_desc' => 'Profilo editoriale, esclusioni e istruzioni di riscrittura.',
'section_feeds' => 'Feed RSS',
'section_feeds_desc' => 'Fonti di notizie via RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'Chiave API e categorie.',
'section_ai' => 'Intelligenza Artificiale',
'section_ai_desc' => 'Provider, modello e parametri.',
'section_images' => 'Immagini',
'section_images_desc' => 'Istruzioni di ricerca e didascalia.',
'section_other' => 'Altre impostazioni',
'section_other_desc' => 'Versione e supporto.',
'field_pub_mode' => 'Modalità di pubblicazione',
'pub_mode_draft_label' => 'Salva come bozza',
'pub_mode_pub_label' => 'Pubblica automaticamente',
'field_language' => 'Lingua dei post',
'field_app_language' => 'Lingua dell’app',
'field_posts_per_run' => 'Post per esecuzione',
'min_posts' => 'Min:',
'max_posts' => 'Max:',
'field_editorial' => 'Profilo editoriale',
'field_negative' => 'Profilo negativo',
'rewrite_label' => 'Riscrittura',
'field_rewrite' => 'Istruzioni di riscrittura',
'field_feeds' => 'URL dei feed',
'field_feed_max' => 'Articoli per feed',
'field_gnews_key' => 'Chiave API',
'field_gnews_cats' => 'Categorie',
'field_gnews_max' => 'Articoli per categoria',
'field_provider' => 'Provider IA',
'field_model' => 'Modello',
'field_ai_limits' => 'Timeout e tentativi',
'timeout_label' => 'Timeout',
'retries_label' => 'Tentativi',
'field_image_instructions' => 'Istruzioni immagine',
'field_image_caption' => 'Didascalia configurabile',
'other_version' => 'Versione del plugin',
'other_support' => 'Supporto e crediti',
'save_all' => 'Salva tutte le impostazioni',
'discard_changes' => 'Annulla modifiche',
'unsaved_changes' => 'Modifiche non salvate',
'exec_subtitle' => 'Segui le esecuzioni e controlla la generazione automatica.',
'running_now' => 'In esecuzione...',
'no_execution' => 'Nessun processo in esecuzione',
'started_in' => 'Avviato: %s',
'idle_desc' => 'Nessuna esecuzione in corso.',
'last_run' => 'Ultima:',
'never' => 'mai',
'running_btn' => 'In esecuzione...',
'abort_btn' => 'Interrompi esecuzione',
'status_running' => 'In esecuzione',
'status_idle' => 'Fermo',
'section_run_now' => 'Esegui ora',
'card_auto' => 'Generazione automatica',
'auto_status_label' => 'Stato',
'auto_active' => 'Attiva',
'auto_inactive' => 'Inattiva',
'next_run' => 'Prossima:',
'auto_first_run' => 'Prima esecuzione',
'start_now' => 'Avvia ora',
'set_schedule' => 'Imposta un orario',
'field_auto_period' => 'Periodo di generazione automatica',
'stop_auto_btn' => 'Metti in pausa',
'start_auto_btn' => 'Avvia automatico',
'log_title' => 'Log in tempo reale',
'log_panel_subtitle' => 'Segui eventi ed errori del plugin.',
'log_live' => 'Aggiornamento automatico',
'log_level' => 'Livello',
'log_level_all' => 'Tutti i livelli',
'log_loading' => 'Caricamento...',
'log_load_more' => 'Carica altro',
'help_subtitle' => 'Crediti del plugin.',
'created_by' => 'creato da',
'licence_label' => 'Licenza GPLv2',
'help_website' => 'Sito dell’autore',
'plugin_active' => 'Plugin attivo',
'version_label' => 'Versione %s',
'js_run_now' => 'Esegui ora',
'js_settings_saved' => 'Impostazioni salvate.',
'js_comm_error' => 'Comunicazione fallita.',
'help_page_title' => 'Aiuto, Crediti e Donazione',
'section_donate' => 'Sostieni il Progetto',
'section_credits' => 'Crediti',
'section_about' => 'Informazioni sul Plugin',
'donate_btn' => 'Dona con Pix',
'or_label' => 'o',
];
@@ -0,0 +1,201 @@
<?php
defined('ABSPATH') || exit;
/**
* Português (Brasil)
*/
return [
'nav_label' => 'Navegação do plugin',
'tab_execucoes' => 'Execuções',
'tab_configuracoes' => 'Configurações',
'tab_log' => 'Log em tempo real',
'tab_ajuda' => 'Ajuda',
'config_subtitle' => 'Configure todas as opções do plugin organizadas por categoria.',
'config_categories' => 'Categorias de configuração',
'section_general' => 'Geral',
'section_general_desc' => 'Configurações principais do plugin.',
'section_prompts' => 'Prompts e Filtro',
'section_prompts_desc' => 'Perfil editorial, exclusões e instruções de reescrita.',
'section_feeds' => 'Feeds RSS',
'section_feeds_desc' => 'Fontes de notícias por RSS.',
'section_gnews' => 'GNews.io',
'section_gnews_desc' => 'Chave de API e categorias para busca de notícias.',
'section_ai' => 'Inteligência Artificial',
'section_ai_desc' => 'Provedor, modelo e parâmetros da IA.',
'section_other' => 'Outras Configurações',
'section_other_desc' => 'Versão e suporte.',
'field_pub_mode' => 'Modo de publicação',
'pub_mode_draft_label' => 'Salvar como rascunho',
'pub_mode_pub_label' => 'Publicar automaticamente',
'pub_mode_desc' => 'Aplica-se tanto ao botão manual quanto à geração automática.',
'field_language' => 'Idioma dos posts',
'language_desc' => 'Define o idioma em que a IA escreve os textos.',
'field_app_language' => 'Idioma do aplicativo',
'app_language_desc' => 'Idioma do painel de administração.',
'field_posts_per_run' => 'Posts por execução',
'min_posts' => 'Mínimo:',
'max_posts' => 'Máximo:',
'field_editorial' => 'Perfil editorial',
'editorial_ph' => 'Ex: Blog de tecnologia, IA e startups. Priorize notícias sobre IA generativa.',
'editorial_desc' => 'A IA usa este perfil para escolher os artigos mais relevantes.',
'field_negative' => 'Perfil negativo',
'negative_ph' => 'Ex: Evite política, futebol e conteúdo sensacionalista.',
'negative_desc' => 'Temas que a IA deve <strong>evitar</strong> ao selecionar artigos.',
'rewrite_label' => 'Reescrita',
'image_label' => 'Imagem de capa',
'field_rewrite' => 'Instruções de reescrita',
'rewrite_ph' => 'Ex: Escreva em tom formal, use dados e evite clickbait.',
'rewrite_desc' => 'Instruções extras enviadas à IA ao reescrever o artigo.',
'field_feeds' => 'URLs dos feeds',
'feeds_desc' => 'Um feed por linha.',
'field_feed_max' => 'Artigos por feed',
'feed_max_desc' => 'Quantos artigos recentes de cada feed serão avaliados.',
'field_gnews_key' => 'Chave de API',
'key_saved_hint' => 'Uma chave já está salva. Deixe o campo em branco para mantê-la.',
'gnews_key_desc' => 'Obtenha em <a href="https://gnews.io" target="_blank" rel="noopener">gnews.io</a>.',
'field_gnews_cats' => 'Categorias',
'gnews_cats_desc' => 'Uma requisição separada é feita para cada categoria selecionada.',
'field_gnews_max' => 'Artigos por categoria',
'gnews_max_desc' => 'No plano gratuito do GNews o máximo é 10 artigos por requisição.',
'field_provider' => 'Provedor de IA',
'provider_desc' => 'O provedor usado em todas as chamadas de IA.',
'field_nvidia_key' => 'Chave de API NVIDIA',
'nvidia_key_desc' => 'Obtenha em <a href="https://build.nvidia.com" target="_blank" rel="noopener">build.nvidia.com</a>.',
'field_openai_key' => 'Chave de API OpenAI',
'openai_key_desc' => 'Obtenha em <a href="https://platform.openai.com" target="_blank" rel="noopener">platform.openai.com</a>.',
'field_anthropic_key' => 'Chave de API Anthropic',
'anthropic_key_desc' => 'Obtenha em <a href="https://console.anthropic.com" target="_blank" rel="noopener">console.anthropic.com</a>.',
'field_openrouter_key' => 'Chave de API OpenRouter',
'openrouter_key_desc' => 'Obtenha em <a href="https://openrouter.ai" target="_blank" rel="noopener">openrouter.ai</a>.',
'field_custom_url' => 'URL base',
'custom_url_desc' => 'Endpoint compatível com OpenAI, incluindo o /v1.',
'field_custom_key' => 'Chave de API',
'custom_key_desc' => 'Chave enviada como Bearer para o endpoint acima.',
'field_vertex_project' => 'Projeto (Project ID)',
'field_vertex_location' => 'Região',
'field_vertex_sa' => 'Service account (JSON)',
'vertex_sa_desc' => 'Conteúdo completo do arquivo JSON da service account do Google Cloud.',
'field_model' => 'Modelo',
'model_desc' => 'Deixe em branco para usar o modelo padrão do provedor.',
'field_ai_limits' => 'Timeout e tentativas',
'timeout_label' => 'Timeout',
'retries_label' => 'Tentativas',
'ai_limits_desc' => 'Aplica-se a todas as chamadas de IA.',
'ai_test_label' => 'Testar conexão',
'ai_test_btn' => 'Testar agora',
'ai_test_desc' => 'Envia uma chamada curta ao provedor selecionado e mostra a resposta ou o erro.',
'ai_test_testing' => 'Testando…',
'ai_test_ok' => 'Conexão funcionando',
'field_image_instructions' => 'Instruções de imagem',
'image_instructions_ph' => 'Ex: Prefira fotos reais de pessoas trabalhando, sem texto na imagem.',
'image_instructions_desc' => 'A IA usa estas instruções para montar a busca no DuckDuckGo e escrever os textos da imagem.',
'field_image_caption' => 'Legenda configurável',
'image_caption_ph' => 'Ex: Sempre cite o nome da empresa. Máximo 120 caracteres.',
'image_caption_desc' => 'Estilo ou regras que a legenda da imagem deve seguir.',
'other_version' => 'Versão do plugin',
'other_support' => 'Suporte e créditos',
'save_all' => 'Salvar todas as configurações',
'discard_changes' => 'Descartar alterações',
'unsaved_changes' => 'Alterações não salvas',
'exec_subtitle' => 'Acompanhe as execuções do plugin e controle a geração automática.',
'running_now' => 'Executando agora...',
'no_execution' => 'Nenhum processo em execução',
'started_in' => 'Iniciado em: %s',
'idle_desc' => 'Nenhuma execução em andamento no momento.',
'processing_feeds' => 'Processando feeds...',
'last_run' => 'Última:',
'never' => 'nunca',
'running_btn' => 'Em execução...',
'abort_btn' => 'Abortar execução',
'exec_note' => 'Atualizado automaticamente a cada 3 segundos. O abort encerra o processo imediatamente.',
'status_running' => 'Em execução',
'status_idle' => 'Parado',
'section_run_now' => 'Executar agora',
'card_auto' => 'Geração automática',
'auto_status_label' => 'Status',
'auto_active' => 'Ativa',
'auto_inactive' => 'Inativa',
'next_run' => 'Próxima:',
'auto_first_run' => 'Primeira execução',
'start_now' => 'Iniciar agora',
'set_schedule' => 'Definir um horário',
'schedule_desc' => 'Escolha data e hora para a primeira execução.',
'field_auto_period' => 'Período de geração automática',
'auto_period_hint' => 'Intervalo entre execuções automáticas.',
'stop_auto_btn' => 'Pausar automático',
'start_auto_btn' => 'Iniciar automático',
'log_title' => 'Log em tempo real',
'log_panel_subtitle' => 'Acompanhe os eventos e erros do plugin.',
'log_live' => 'Atualização automática',
'log_level' => 'Nível',
'log_level_all' => 'Todos os níveis',
'log_loading' => 'Carregando...',
'log_load_more' => 'Carregar mais',
'help_subtitle' => 'Créditos do plugin.',
'created_by' => 'criado por',
'licence_label' => 'Licença GPLv2',
'help_website' => 'Site do autor',
'plugin_active' => 'Plugin ativo',
'version_label' => 'Versão %s',
'js_no_execution' => 'Nenhum processo em execução',
'js_running' => 'Em execução...',
'js_aborting' => 'Abortando...',
'js_run_now' => 'Executar agora',
'js_processing' => 'Processando feeds...',
'js_error_prefix' => 'Erro:',
'js_aborted' => 'Execução abortada.',
'js_wait' => 'Aguarde...',
'js_auto_started' => 'Geração automática ativada.',
'js_auto_paused' => 'Geração automática pausada.',
'js_comm_error' => 'Falha de comunicação.',
'js_error_start' => 'Não foi possível iniciar.',
'js_error_abort' => 'Não foi possível abortar.',
'js_start_auto' => 'Iniciar automático',
'js_stop_auto' => 'Pausar automático',
'js_log_empty' => 'Nenhum log registrado ainda.',
'js_log_updated' => 'Atualizado',
'js_next_run' => 'Próxima:',
'js_auto_active' => 'Ativa',
'js_auto_inactive' => 'Inativa',
'js_schedule_required' => 'Escolha data e hora.',
'js_schedule_past' => 'A data precisa estar no futuro.',
'js_settings_saved' => 'Configurações salvas.',
'js_preparing' => 'Preparando...',
'js_running_feeds' => 'Processando feeds...',
'js_sleeping' => 'Aguardando...',
'gnews_categories' => ['general' => 'Geral', 'world' => 'Mundo', 'nation' => 'Nacional', 'business' => 'Negócios', 'technology' => 'Tecnologia', 'entertainment' => 'Entretenimento', 'sports' => 'Esportes', 'science' => 'Ciência', 'health' => 'Saúde'],
'auto_period_units' => ['minutes' => 'minutos', 'hours' => 'horas', 'days' => 'dias'],
'help_page_title' => 'Ajuda, Créditos e Doação',
'help_page_subtitle' => 'Encontre ajuda, veja os créditos do plugin e contribua com o projeto.',
'section_donate' => 'Contribua com o Projeto',
'section_donate_desc' => 'Seu apoio nos ajuda a manter o plugin atualizado e continuar evoluindo.',
'donate_title' => 'Faça uma doação',
'donate_desc' => 'Qualquer valor ajuda muito a manter o desenvolvimento deste plugin e trazer novas funcionalidades para você.',
'donate_btn' => 'Doar agora com Pix',
'donate_copied' => 'Chave copia e cola copiada!',
'donate_qr_hint' => 'Aponte sua câmera',
'or_label' => 'ou',
'section_credits' => 'Créditos',
'section_credits_desc' => 'Agradecemos a todos que tornam este projeto possível.',
'credit_developer' => 'Desenvolvedor Principal',
'section_about' => 'Sobre o Plugin',
'section_about_desc' => 'Informações importantes sobre o Automatic AI Posts.',
'about_desc' => 'Plugin WordPress para gerar e publicar posts automaticamente com inteligência artificial, de forma simples e eficiente.',
'about_feature_1' => 'Posts automáticos com IA',
'about_feature_2' => 'Múltiplas configurações',
'about_feature_3' => 'Logs detalhados',
'about_feature_4' => 'Suporte a feeds RSS',
'about_feature_5' => 'Execução agendada',
'about_feature_6' => 'Provedores de IA variados',
'about_github' => 'Projeto no GitHub',
'donate_key_label' => 'Chave copia e cola:',
'donate_no_qr' => 'Salve a imagem do QR code em admin/pix-qrcode.png',
'editor_box_title' => 'Automatic AI Posts',
'editor_desc' => 'Busca uma nova imagem de capa e regenera o alt, a legenda e a descrição, exatamente como o pipeline.',
'editor_btn_has_image' => 'Buscar nova imagem',
'editor_btn_no_image' => 'Buscar imagem de capa',
'editor_working' => 'Buscando uma nova imagem…',
'editor_success' => 'Imagem de capa atualizada.',
'editor_no_image' => 'Nenhuma imagem utilizável foi encontrada. A capa atual foi mantida.',
'editor_error' => 'Não foi possível buscar a imagem. Consulte os logs do plugin.',
];