420 lines
17 KiB
PHP
420 lines
17 KiB
PHP
<?php
|
||
|
||
return [
|
||
'brand' => '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  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 </head>; analytics, extra CSS/JS',
|
||
'size' => 'No layout size (scripts/meta)',
|
||
],
|
||
'body_start' => [
|
||
'label' => 'Body start',
|
||
'place' => 'Immediately after <body>',
|
||
'size' => 'No layout size',
|
||
],
|
||
'body_end' => [
|
||
'label' => 'Body end',
|
||
'place' => 'Before </body>',
|
||
'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 <footer>',
|
||
'size' => 'Full or wrap width',
|
||
],
|
||
'footer_after' => [
|
||
'label' => 'After footer',
|
||
'place' => 'After </footer>, before </body>',
|
||
'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.',
|
||
],
|
||
],
|
||
];
|