__('Backfill', 'aipcf-ai-provider-for-cloudflare'), 'embeddings' => __('Embeddings', 'aipcf-ai-provider-for-cloudflare'), 'related' => __('Related posts', 'aipcf-ai-provider-for-cloudflare'), 'insights' => __('Search insights', 'aipcf-ai-provider-for-cloudflare'), 'models' => __('Models', 'aipcf-ai-provider-for-cloudflare'), 'gateway' => __('AI Gateway', 'aipcf-ai-provider-for-cloudflare'), 'prompts' => __('Prompts', 'aipcf-ai-provider-for-cloudflare'), 'settings' => __('Settings', 'aipcf-ai-provider-for-cloudflare'), 'setup' => __('Setup', 'aipcf-ai-provider-for-cloudflare'), 'connection' => __('Connection', 'aipcf-ai-provider-for-cloudflare'), 'budget' => __('Budget', 'aipcf-ai-provider-for-cloudflare'), 'report' => __('Monthly report', 'aipcf-ai-provider-for-cloudflare'), 'activity' => __('Activity', 'aipcf-ai-provider-for-cloudflare'), 'chat' => __('Site assistant', 'aipcf-ai-provider-for-cloudflare'), 'agents' => __('AI agents', 'aipcf-ai-provider-for-cloudflare'), 'plugin' => __('Plugin', 'aipcf-ai-provider-for-cloudflare'), ]; return $map[$tool] ?? $tool; } public static function action(string $action): string { $map = [ 'backfill_run' => __('Run one batch now', 'aipcf-ai-provider-for-cloudflare'), 'backfill_reset' => __('Retry skipped items', 'aipcf-ai-provider-for-cloudflare'), 'backfill_batch' => __('Batch', 'aipcf-ai-provider-for-cloudflare'), 'embed_estimate' => __('Update the estimate', 'aipcf-ai-provider-for-cloudflare'), 'embed_prepare' => __('Create or check index', 'aipcf-ai-provider-for-cloudflare'), 'embed_test' => __('Test connection', 'aipcf-ai-provider-for-cloudflare'), 'embed_run' => __('Run one batch now', 'aipcf-ai-provider-for-cloudflare'), 'embed_reconcile' => __('Re-check selection', 'aipcf-ai-provider-for-cloudflare'), 'embed_retry' => __('Retry failed items', 'aipcf-ai-provider-for-cloudflare'), 'embed_rebuild' => __('Rebuild', 'aipcf-ai-provider-for-cloudflare'), 'embed_purge' => __('Delete vectors', 'aipcf-ai-provider-for-cloudflare'), 'embed_batch' => __('Batch', 'aipcf-ai-provider-for-cloudflare'), 'embed_move_start' => __('Move to another vector store', 'aipcf-ai-provider-for-cloudflare'), 'embed_move_batch' => __('Move: vectors copied', 'aipcf-ai-provider-for-cloudflare'), 'embed_move_done' => __('Move finished', 'aipcf-ai-provider-for-cloudflare'), 'embed_move_cancel' => __('Cancel move', 'aipcf-ai-provider-for-cloudflare'), 'embed_move_back' => __('Back on the previous store', 'aipcf-ai-provider-for-cloudflare'), 'embed_cleanup_old' => __('Delete the old store\'s vectors', 'aipcf-ai-provider-for-cloudflare'), 'embed_cleanup_keep' => __('Keep the old store\'s vectors', 'aipcf-ai-provider-for-cloudflare'), 'embed_new_server' => __('New vector store server', 'aipcf-ai-provider-for-cloudflare'), 'related_build' => __('Build related lists now', 'aipcf-ai-provider-for-cloudflare'), 'insights_score' => __('Compare now', 'aipcf-ai-provider-for-cloudflare'), 'insights_analyse' => __('What to write next', 'aipcf-ai-provider-for-cloudflare'), 'insights_clear' => __('Delete logged searches', 'aipcf-ai-provider-for-cloudflare'), 'licence_accept' => __('Accept the model licence', 'aipcf-ai-provider-for-cloudflare'), 'licence_recheck' => __('Check the licence again', 'aipcf-ai-provider-for-cloudflare'), 'refresh_models' => __('Refresh the model list', 'aipcf-ai-provider-for-cloudflare'), 'gateway_test' => __('Test gateway', 'aipcf-ai-provider-for-cloudflare'), 'gateway_down' => __('Gateway not reachable', 'aipcf-ai-provider-for-cloudflare'), 'prompt_test' => __('Test a prompt', 'aipcf-ai-provider-for-cloudflare'), 'prompt_reset' => __('Reset a prompt to its default', 'aipcf-ai-provider-for-cloudflare'), 'settings_saved' => __('Settings saved', 'aipcf-ai-provider-for-cloudflare'), 'setup_apply' => __('Apply the recommended defaults', 'aipcf-ai-provider-for-cloudflare'), 'setup_skip' => __('Skip setup', 'aipcf-ai-provider-for-cloudflare'), 'test_connection' => __('Test connection', 'aipcf-ai-provider-for-cloudflare'), 'reset' => __('Reset the plugin', 'aipcf-ai-provider-for-cloudflare'), 'budget_reached' => __('Daily budget reached', 'aipcf-ai-provider-for-cloudflare'), 'account_budget_reached' => __('Daily budget reached by the whole account', 'aipcf-ai-provider-for-cloudflare'), 'free_passed' => __('Free daily allowance passed', 'aipcf-ai-provider-for-cloudflare'), 'report_sent' => __('Monthly report emailed', 'aipcf-ai-provider-for-cloudflare'), 'retention' => __('Keep entries for', 'aipcf-ai-provider-for-cloudflare'), 'activity_clear' => __('Clear the log', 'aipcf-ai-provider-for-cloudflare'), 'chat_save' => __('Settings saved', 'aipcf-ai-provider-for-cloudflare'), 'chat_clear' => __('Delete all saved chats', 'aipcf-ai-provider-for-cloudflare'), 'chat_toggle' => __('Switch on or off', 'aipcf-ai-provider-for-cloudflare'), 'agent_search_content' => __('Search the site', 'aipcf-ai-provider-for-cloudflare'), 'agent_answer' => __('Answer from the site', 'aipcf-ai-provider-for-cloudflare'), 'agent_related_posts' => __('Related posts', 'aipcf-ai-provider-for-cloudflare'), 'updated' => __('Plugin updated', 'aipcf-ai-provider-for-cloudflare'), 'activated' => __('Plugin activated', 'aipcf-ai-provider-for-cloudflare'), ]; return $map[$action] ?? $action; } public static function actor(string $actor): string { $map = [ 'user' => __('User', 'aipcf-ai-provider-for-cloudflare'), 'plugin' => __('The plugin', 'aipcf-ai-provider-for-cloudflare'), 'cli' => __('WP-CLI', 'aipcf-ai-provider-for-cloudflare'), ]; return $map[$actor] ?? $actor; } /** * Who did it, as a name: the person's display name, "Deleted user", "The plugin" or "WP-CLI". * * @param array $entry */ public static function who(array $entry): string { $actor = (string) $entry['actor']; $user = (int) $entry['user_id']; if ($actor === 'plugin') { return self::actor('plugin'); } $name = ''; if ($user > 0) { $u = get_userdata($user); $name = $u instanceof \WP_User ? $u->display_name : __('Deleted user', 'aipcf-ai-provider-for-cloudflare'); } elseif ($actor === 'user') { $name = __('Deleted user', 'aipcf-ai-provider-for-cloudflare'); } if ($actor === 'cli') { /* translators: %s: user name */ return $name !== '' ? sprintf(__('WP-CLI (%s)', 'aipcf-ai-provider-for-cloudflare'), $name) : self::actor('cli'); } return $name; } public static function status(string $status): string { $map = [ 'ok' => __('Done', 'aipcf-ai-provider-for-cloudflare'), 'warning' => __('Warning', 'aipcf-ai-provider-for-cloudflare'), 'failed' => __('Failed', 'aipcf-ai-provider-for-cloudflare'), 'info' => __('Note', 'aipcf-ai-provider-for-cloudflare'), ]; return $map[$status] ?? $status; } public static function result(string $result): string { $map = [ 'filled' => __('Filled', 'aipcf-ai-provider-for-cloudflare'), 'decorative' => __('Decorative, left empty', 'aipcf-ai-provider-for-cloudflare'), 'skipped' => __('Skipped', 'aipcf-ai-provider-for-cloudflare'), 'retry' => __('Will retry', 'aipcf-ai-provider-for-cloudflare'), 'changed' => __('Changed', 'aipcf-ai-provider-for-cloudflare'), 'secret' => __('Changed (value hidden)', 'aipcf-ai-provider-for-cloudflare'), ]; return $map[$result] ?? $result; } /** * What a field is called: "Alt text", "Meta description", or a setting or prompt name * made readable ("backfill_batch" reads "Backfill batch"). The stored key stays available * through fieldKey(). */ public static function field(string $field): string { if ($field === '_wp_attachment_image_alt') { return __('Alt text', 'aipcf-ai-provider-for-cloudflare'); } if (in_array($field, ['_yoast_wpseo_metadesc', 'rank_math_description', '_aioseo_description', '_seopress_titles_desc'], true)) { return __('Meta description', 'aipcf-ai-provider-for-cloudflare'); } if ($field === 'activity_retention_days') { return __('Keep entries for (days)', 'aipcf-ai-provider-for-cloudflare'); } $words = array_filter(explode('_', $field), static fn(string $w): bool => $w !== ''); $caps = ['api' => 'API', 'id' => 'ID', 'url' => 'URL', 'ttl' => 'TTL', 'pg' => 'PostgreSQL', 'ssl' => 'SSL', 'sslmode' => 'SSL mode', 'df' => 'DF']; $words = array_map(static fn(string $w): string => $caps[$w] ?? $w, $words); return ucfirst(implode(' ', $words)); } /** * A stored value as a person reads it: a list as "a, b", an empty one as "". */ public static function value(string $value): string { if ($value !== '' && ($value[0] === '[' || $value[0] === '{')) { $data = json_decode($value, true); if (is_array($data) && array_is_list($data) && array_filter($data, 'is_scalar') === $data) { return implode(', ', array_map('strval', $data)); } } return $value; } }