'LaraBlog Admin', 'dashboard' => 'Dashboard', 'groups' => [ 'content' => 'Content', 'system' => 'System', 'plugins' => 'Plugins', ], 'nav' => [ 'articles' => 'Articles', 'categories' => 'Categories', 'comments' => 'Comments', 'tags' => 'Tags', 'links' => 'Links', 'attachments' => 'Attachments', 'stylevars' => 'Stylevars', 'users' => 'Users', 'themes' => 'Themes', 'plugins' => 'Plugins', 'settings' => 'Settings', 'cache' => 'Clear cache', 'payment' => 'Payment', 'orders' => 'Orders', 'payment_settings' => 'Payment settings', 'membership' => 'Membership', 'membership_plans' => 'Membership plans', 'plugin_marketplace' => 'Plugin marketplace', 'theme_marketplace' => 'Theme marketplace', ], 'models' => [ 'article' => 'Article', 'articles' => 'Articles', 'category' => 'Category', 'categories' => 'Categories', 'comment' => 'Comment', 'comments' => 'Comments', 'tag' => 'Tag', 'tags' => 'Tags', 'link' => 'Link', 'links' => 'Links', 'attachment' => 'Attachment', 'attachments' => 'Attachments', 'stylevar' => 'Stylevar', 'stylevars' => 'Stylevars', 'user' => 'User', 'users' => 'Users', 'plugin' => 'Plugin', 'plugins' => 'Plugins', 'order' => 'Order', 'orders' => 'Orders', 'membership_plan' => 'Membership plan', 'membership_plans' => 'Membership plans', ], 'actions' => [ 'save' => 'Save', 'edit' => 'Edit', 'delete' => 'Delete', 'create' => 'Create', 'cancel' => 'Cancel', 'confirm' => 'Confirm', 'mark_paid' => 'Mark as paid', 'close' => 'Close', ], 'fields' => [ 'id' => 'ID', 'title' => 'Title', 'name' => 'Name', 'display_name' => 'Display name', 'username' => 'Username', 'email' => 'Email', 'password' => 'Password', 'url' => 'URL', 'website' => 'Website', 'roles' => 'Roles', 'category' => 'Category', 'author' => 'Author', 'user' => 'User', 'article' => 'Article', 'description' => 'Description', 'keywords' => 'Keywords', 'slug' => 'Slug', 'published_at' => 'Published at', 'created_at' => 'Created at', 'updated_at' => 'Updated at', 'login_at' => 'Last login', 'views' => 'Views', 'comments_count' => 'Comments', 'stick' => 'Sticky', 'visible' => 'Visible', 'close_comment' => 'Comments closed', 'content_format' => 'Content format', 'content' => 'Content', 'content_markdown' => 'Content (Markdown)', 'content_html' => 'Content (HTML)', 'read_password' => 'Read password', 'ai_summary' => 'AI summary', 'ai_polished_content' => 'AI polished draft', 'ai_suggestions' => 'AI writing tips', 'cover_path' => 'Cover path / URL', 'cover_source' => 'Cover source', 'cover_status' => 'Cover status', 'display_order' => 'Order', 'articles_count' => 'Articles', 'intro' => 'Category intro', 'article_excerpt' => 'Article excerpt', 'use_count' => 'Usage count', 'note' => 'Note', 'ip' => 'IP', 'moderation_status' => 'Moderation status', 'disk' => 'Disk', 'path' => 'Path', 'thumb_path' => 'Thumbnail path', 'filename' => 'Filename', 'mime' => 'MIME type', 'size' => 'Size', 'checksum' => 'Checksum', 'visibility' => 'Visibility', 'legacy_filepath' => 'Legacy path', 'synced_at' => 'Synced at', 'downloads' => 'Downloads', 'upload' => 'Upload file', 'version' => 'Version', 'enabled' => 'Enabled', 'config' => 'Config', 'value' => 'Value', 'status' => 'Status', 'amount' => 'Amount', 'currency' => 'Currency', 'gateway' => 'Gateway', 'paid_at' => 'Paid at', 'price' => 'Price', 'paid_enabled' => 'Paid reading', 'membership_enabled' => 'Members only', 'required_plan' => 'Required plan', 'duration_days' => 'Duration (days)', 'trial_value' => 'Teaser characters', ], 'options' => [ 'markdown' => 'Markdown', 'markdown_recommended' => 'Markdown (recommended)', 'html' => 'HTML', 'html_legacy' => 'HTML (legacy posts)', 'comment_order_asc' => 'Oldest first', 'comment_order_desc' => 'Newest first', 'ai_provider_stub' => 'Stub (local acceptance)', 'ai_provider_openai' => 'OpenAI-compatible API', 'lifetime' => 'Lifetime', 'any_membership' => 'Any active membership', 'moderation' => [ 'pending' => 'Pending', 'pending_ai' => 'AI pending', 'approved' => 'Approved', 'rejected' => 'Rejected', 'needs_human' => 'Needs human review', ], ], 'helpers' => [ 'article_content' => 'For Markdown use ![alt](attach:ID) or [name](attach:ID); HTML may keep [attach=ID]. Resolved at render time — do not paste object-storage URLs into the body.', 'attachment_upload' => 'Files go to object storage (or the local attachments disk), not long-term app storage.', 'attachments_prefix' => 'Used for /attachments/{path} resolution; disk is controlled by attachment driver env vars.', 'analytics_extra' => 'Can coexist with plugin scripts.', 'ads_sidebar_extra' => 'Admin snippets and plugins are concatenated in order.', 'ai_polished_content' => 'Draft from “AI polish”; it does not overwrite the body until you click “Apply polished draft”.', 'ai_suggestions' => 'Read-only tips returned with the polish job.', 'cover_path' => 'Attachment-relative path or https image URL; or use “Auto cover” to pick from body/attachments.', 'category_description' => 'Used for the category page meta description, OG/Twitter, and search snippets.', 'category_intro' => 'Shown at the top of the category listing for readers and crawlers.', 'category_cover' => 'Relative path or https image URL for the category header and OG image.', 'duration_days' => 'Leave empty for lifetime; otherwise counted from payment success.', ], 'messages' => [ 'settings_saved' => 'Settings saved', 'ai_optimize' => 'AI polish', 'ai_optimize_queued' => 'Queued for AI polish', 'ai_optimize_queue_hint' => 'Ensure a queue worker (or Workerman) is consuming jobs; refresh this page when done.', 'ai_apply_polish' => 'Apply polished draft', 'ai_apply_polish_confirm' => 'Replace the article body with the AI polished draft. Review the draft field first.', 'ai_apply_polish_done' => 'Polished draft applied to content', 'ai_polish_missing' => 'No polished draft yet — run AI polish first', 'auto_cover' => 'Auto cover', 'auto_cover_queued' => 'Auto-cover job queued', 'generate_cover' => 'Generate cover', 'generate_cover_queued' => 'Cover generation job queued', 'upload_required' => 'Please upload an attachment.', 'mime_not_allowed' => 'MIME type not allowed: :mime', 'theme_slots_warn' => 'Activated, but slot declaration: :label. Declare slots in theme.json.', 'slots_missing_prefix' => 'Missing: ', 'mark_paid_success' => 'Order marked as paid', 'mark_paid_failed' => 'Could not mark order as paid', 'plugin_requires' => 'Cannot enable :plugin; enable dependencies first: :requires', 'plugin_required_by' => 'Cannot disable :plugin; still required by: :dependents', 'plugin_docs_missing' => 'No usage docs found for this plugin', 'paid_password_mutex' => 'Read password and paid reading cannot both be enabled', 'access_restriction_mutex' => 'Read password, paid reading, and members-only cannot be combined', 'membership_plan_in_use_articles' => 'Plan is still referenced by articles; disable it instead of deleting', 'membership_plan_has_entitlements' => 'Plan still has entitlements; disable it instead of deleting', ], 'pages' => [ 'themes_title' => 'Themes', 'plugins_title' => 'Plugins', 'plugin_docs' => 'Docs', 'plugin_requires' => 'Requires', 'settings_title' => 'Site settings', 'cache_title' => 'Clear cache', 'themes_publish' => 'Publish theme assets', 'themes_refresh' => 'Refresh', 'plugins_sync' => 'Sync plugins', 'activate' => 'Activate', 'disable' => 'Disable', 'enable' => 'Enable', 'current' => 'Active', 'enabled' => 'Enabled', 'disabled' => 'Disabled', 'preview' => 'Preview', 'version' => 'Version', 'no_plugins' => 'No plugins found. Check plugins/ then sync.', 'no_themes' => 'No themes found. Check themes/.', 'cache_hint' => 'Clear application, view, route and config caches. Database and attachments are untouched.', 'cache_run' => 'Clear cache', 'cache_confirm' => 'Clear application, view, route and config caches? Database and attachments are untouched.', 'cache_cleared' => 'Cache cleared', 'skeleton_note' => 'Skeleton only in phase 1 — no real payment or remote marketplace.', 'status' => 'Status', 'payment_settings_empty' => 'No README found for larablog/payment.', ], 'settings' => [ 'tabs' => [ 'site' => 'Site', 'reading' => 'Reading & lists', 'comments' => 'Comments', 'seo' => 'SEO / GEO', 'storage' => 'Storage', 'ai' => 'AI', 'snippets' => 'Inject / ads / analytics', ], 'paid_content' => 'Paid reading', 'membership' => 'Members only', 'snippet_groups' => [ 'analytics' => 'Analytics & scripts', 'analytics_help' => 'Scripts for document head / end of body', 'ads' => 'Ad slots', 'ads_help' => 'Header banner, sidebar and article ad HTML', 'misc' => 'Temp links & footer', 'misc_help' => 'Campaign links and footer HTML', ], 'site_name' => 'Site name', 'site_url' => 'Site URL', 'site_description' => 'Site description', 'active_theme' => 'Active theme slug', 'attachments_url_prefix' => 'Attachments URL prefix', 'default_content_format' => 'Default content format', 'import_content_format' => 'Import default format', 'import_convert_html_to_markdown' => 'Convert HTML to Markdown on import', 'posts_per_page' => 'Posts per page', 'date_format' => 'Date format', 'show_views' => 'Show view count', 'show_author' => 'Show author', 'allow_comments' => 'Allow comments site-wide', 'comment_order' => 'Comment order', 'close_comments_on_old_posts' => 'Auto-close comments on old posts', 'close_comments_days' => 'Close after days', 'guest_can_comment' => 'Allow guest comments', 'require_moderation' => 'Require human moderation (non-AI)', 'rate_limit_per_minute' => 'Comments per minute limit', 'enable_website_field' => 'Show website field', 'forbidden_words' => 'Forbidden words (comma-separated)', 'meta_title_suffix' => 'Title suffix', 'default_description' => 'Default description', 'default_keywords' => 'Default keywords', 'json_ld_enabled' => 'Enable JSON-LD', 'robots_index' => 'Allow search engine indexing', 'twitter_site' => 'X (Twitter) @site', 'canonical_force_https' => 'Force HTTPS canonical URLs', 'attachments_legacy_prefix' => 'Attachments legacy prefix', 'ai_provider' => 'AI provider', 'ai_api_base_url' => 'API base URL', 'ai_api_key' => 'API key', 'ai_model' => 'Model', 'comment_moderation_enabled' => 'AI comment moderation', 'content_optimization_enabled' => 'AI content optimization', 'analytics_head' => 'Analytics code (document head)', 'body_end' => 'Footer scripts (before body end)', 'header_banner' => 'Header banner / notice HTML', 'ads_sidebar' => 'Sidebar ad HTML', 'custom_links_html' => 'Temporary links / sidebar HTML', 'ads_article_top' => 'Article top ad', 'ads_article_bottom' => 'Article bottom ad', 'footer_html' => 'Footer HTML', ], 'slots' => [ 'hint' => ':place · :size · slot theme.:slot · multiple allowed', 'custom' => 'theme.:slot (custom; theme must call @themeslot)', 'status_full' => 'Slots complete', 'status_partial' => 'Missing :count standard slots', 'status_mismatch' => 'Declaration mismatches views', 'status_undeclared' => 'slots not declared', 'head' => [ 'label' => 'Document head', 'place' => 'Before ; analytics, extra CSS/JS', 'size' => 'No layout size (scripts/meta)', ], 'body_start' => [ 'label' => 'Body start', 'place' => 'Immediately after ', 'size' => 'No layout size', ], 'body_end' => [ 'label' => 'Body end', 'place' => 'Before ', 'size' => 'No layout size', ], 'header_after' => [ 'label' => 'Header banner', 'place' => 'Below site header/nav, above main', 'size' => 'Full width, ~60–120px tall', ], 'nav_after' => [ 'label' => 'After nav', 'place' => 'After primary nav links', 'size' => 'Text links / small buttons', ], 'content_before' => [ 'label' => 'Before content', 'place' => 'Before main content yield', 'size' => 'Main column width (~640–760px)', ], 'content_after' => [ 'label' => 'After content', 'place' => 'After main content yield', 'size' => 'Same as main column', ], 'article_top' => [ 'label' => 'Article top', 'place' => 'Above title (article page)', 'size' => 'Main width × ~90–250px', ], 'article_bottom' => [ 'label' => 'Article bottom', 'place' => 'After body, before comments', 'size' => 'Main width × ~90–250px', ], 'sidebar_before' => [ 'label' => 'Sidebar before', 'place' => 'Before first sidebar panel', 'size' => 'Sidebar ~280–320px', ], 'sidebar' => [ 'label' => 'Sidebar', 'place' => 'Ad panel after categories/stylevars', 'size' => 'Sidebar ~280–320px; stacks vertically', ], 'sidebar_after' => [ 'label' => 'Sidebar after', 'place' => 'Later sidebar (temp links)', 'size' => 'Sidebar width; text links', ], 'footer_before' => [ 'label' => 'Before footer', 'place' => 'Before , before ', 'size' => 'Full width; scripts OK', ], ], 'plugins' => [ 'larablog/payment' => [ 'title' => 'Payment', 'description' => 'Orders, Stub checkout, entitlements, and admin order management.', ], 'larablog/paid-content' => [ 'title' => 'Paid content', 'description' => 'Article pricing, teasers, and paywall; requires the payment plugin.', ], 'larablog/membership' => [ 'title' => 'Membership', 'description' => 'Plans, stub subscribe, and members-only articles (requires payment).', ], 'larablog/plugin-marketplace' => [ 'title' => 'Plugin marketplace', 'description' => 'Remote plugin catalog skeleton; local plugins/ sync only for now.', ], 'larablog/theme-marketplace' => [ 'title' => 'Theme marketplace', 'description' => 'Remote theme catalog skeleton; local themes/ switch only for now.', ], 'larablog/ai-comment-moderation' => [ 'title' => 'AI comment moderation', 'description' => 'Queues AI moderation after comment create (stub OK).', ], ], 'themes' => [ 'default' => [ 'title' => 'Default (teal)', 'description' => 'Fraunces + teal accent for everyday reading.', ], 'example' => [ 'title' => 'Example (amber)', 'description' => 'Newsreader + amber accent; second theme demo.', ], ], ];