Files
larablog/lang/en/admin.php
T
gouki 3cec4c5e18
CI / PHPUnit (PHP 8.3) (push) Failing after 4s
CI / PHPUnit (PHP 8.2) (push) Failing after 1m9s
CI / Deploy (manual gate) (push) Skipped
wip: article AI polish, category SEO fields, cover generator, membership plan seeder
2026-09-07 18:48:37 +00:00

420 lines
17 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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 ![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 </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, ~60120px 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 (~640760px)',
],
'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 × ~90250px',
],
'article_bottom' => [
'label' => 'Article bottom',
'place' => 'After body, before comments',
'size' => 'Main width × ~90250px',
],
'sidebar_before' => [
'label' => 'Sidebar before',
'place' => 'Before first sidebar panel',
'size' => 'Sidebar ~280320px',
],
'sidebar' => [
'label' => 'Sidebar',
'place' => 'Ad panel after categories/stylevars',
'size' => 'Sidebar ~280320px; 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.',
],
],
];