wip: article AI polish, category SEO fields, cover generator, membership plan seeder
This commit is contained in:
+39
-4
@@ -27,6 +27,7 @@ return [
|
||||
'orders' => 'Orders',
|
||||
'payment_settings' => 'Payment settings',
|
||||
'membership' => 'Membership',
|
||||
'membership_plans' => 'Membership plans',
|
||||
'plugin_marketplace' => 'Plugin marketplace',
|
||||
'theme_marketplace' => 'Theme marketplace',
|
||||
],
|
||||
@@ -52,6 +53,8 @@ return [
|
||||
'plugins' => 'Plugins',
|
||||
'order' => 'Order',
|
||||
'orders' => 'Orders',
|
||||
'membership_plan' => 'Membership plan',
|
||||
'membership_plans' => 'Membership plans',
|
||||
],
|
||||
|
||||
'actions' => [
|
||||
@@ -62,6 +65,7 @@ return [
|
||||
'cancel' => 'Cancel',
|
||||
'confirm' => 'Confirm',
|
||||
'mark_paid' => 'Mark as paid',
|
||||
'close' => 'Close',
|
||||
],
|
||||
|
||||
'fields' => [
|
||||
@@ -97,8 +101,15 @@ return [
|
||||
'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',
|
||||
@@ -126,6 +137,9 @@ return [
|
||||
'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',
|
||||
],
|
||||
|
||||
@@ -138,6 +152,8 @@ return [
|
||||
'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',
|
||||
@@ -153,13 +169,28 @@ return [
|
||||
'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 content optimize',
|
||||
'ai_optimize_queued' => 'Queued for content optimization',
|
||||
'ai_optimize_queue_hint' => 'Ensure a queue worker (or Workerman) is consuming jobs.',
|
||||
'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.',
|
||||
@@ -170,6 +201,9 @@ return [
|
||||
'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' => [
|
||||
@@ -212,6 +246,7 @@ return [
|
||||
'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',
|
||||
@@ -355,7 +390,7 @@ return [
|
||||
],
|
||||
'larablog/membership' => [
|
||||
'title' => 'Membership',
|
||||
'description' => 'Membership tiers and entitlements skeleton.',
|
||||
'description' => 'Plans, stub subscribe, and members-only articles (requires payment).',
|
||||
],
|
||||
'larablog/plugin-marketplace' => [
|
||||
'title' => 'Plugin marketplace',
|
||||
|
||||
@@ -18,12 +18,28 @@ return [
|
||||
'subscribe' => 'Subscribe',
|
||||
'empty_category' => 'No categories',
|
||||
],
|
||||
'category' => [
|
||||
'post_count' => ':count posts',
|
||||
],
|
||||
'article' => [
|
||||
'toc' => 'Contents',
|
||||
'password_error' => 'Incorrect password',
|
||||
'paywall_title' => 'Paid content',
|
||||
'paywall_hint' => 'Purchase to read the full article.',
|
||||
'buy' => 'Buy now',
|
||||
'membership_required' => 'Members only.',
|
||||
],
|
||||
'membership' => [
|
||||
'title' => 'Membership plans',
|
||||
'active' => 'Active plan: :plan',
|
||||
'inactive' => 'You are not a paid member yet.',
|
||||
'expires' => 'Expires: :date',
|
||||
'lifetime' => 'Lifetime',
|
||||
'days' => ':days days',
|
||||
'subscribe' => 'Subscribe',
|
||||
'no_plans' => 'No plans available.',
|
||||
'back_profile' => 'Back to profile',
|
||||
'manage' => 'View / subscribe',
|
||||
],
|
||||
'common' => [
|
||||
'pinned' => 'Pinned',
|
||||
|
||||
+39
-4
@@ -27,6 +27,7 @@ return [
|
||||
'orders' => '订单',
|
||||
'payment_settings' => '支付说明',
|
||||
'membership' => '会员',
|
||||
'membership_plans' => '会员套餐',
|
||||
'plugin_marketplace' => '插件商城',
|
||||
'theme_marketplace' => '皮肤商城',
|
||||
],
|
||||
@@ -52,6 +53,8 @@ return [
|
||||
'plugins' => '插件',
|
||||
'order' => '订单',
|
||||
'orders' => '订单',
|
||||
'membership_plan' => '会员套餐',
|
||||
'membership_plans' => '会员套餐',
|
||||
],
|
||||
|
||||
'actions' => [
|
||||
@@ -62,6 +65,7 @@ return [
|
||||
'cancel' => '取消',
|
||||
'confirm' => '确认',
|
||||
'mark_paid' => '标记已支付',
|
||||
'close' => '关闭',
|
||||
],
|
||||
|
||||
'fields' => [
|
||||
@@ -97,8 +101,15 @@ return [
|
||||
'content_html' => '正文(HTML)',
|
||||
'read_password' => '阅读密码',
|
||||
'ai_summary' => 'AI 摘要',
|
||||
'ai_polished_content' => 'AI 润色稿',
|
||||
'ai_suggestions' => 'AI 写作建议',
|
||||
'cover_path' => '封面路径/URL',
|
||||
'cover_source' => '封面来源',
|
||||
'cover_status' => '封面状态',
|
||||
'display_order' => '排序',
|
||||
'articles_count' => '文章数',
|
||||
'intro' => '分类介绍',
|
||||
'article_excerpt' => '文章摘要',
|
||||
'use_count' => '使用次数',
|
||||
'note' => '备注',
|
||||
'ip' => 'IP',
|
||||
@@ -126,6 +137,9 @@ return [
|
||||
'paid_at' => '支付时间',
|
||||
'price' => '价格',
|
||||
'paid_enabled' => '启用付费阅读',
|
||||
'membership_enabled' => '仅会员可见',
|
||||
'required_plan' => '所需套餐',
|
||||
'duration_days' => '有效天数',
|
||||
'trial_value' => '试读字数',
|
||||
],
|
||||
|
||||
@@ -138,6 +152,8 @@ return [
|
||||
'comment_order_desc' => '新 → 旧',
|
||||
'ai_provider_stub' => 'Stub(本地验收)',
|
||||
'ai_provider_openai' => 'OpenAI 兼容接口',
|
||||
'lifetime' => '终身',
|
||||
'any_membership' => '任意有效会员',
|
||||
'moderation' => [
|
||||
'pending' => '待审核',
|
||||
'pending_ai' => 'AI 审核中',
|
||||
@@ -153,13 +169,28 @@ return [
|
||||
'attachments_prefix' => '对应 /attachments/{path} 解析;磁盘由环境变量中的附件驱动配置控制。',
|
||||
'analytics_extra' => '可与插件脚本并存。',
|
||||
'ads_sidebar_extra' => '后台片段与多个插件会依次拼接。',
|
||||
'ai_polished_content' => '由「AI 润色」生成的草稿,不会自动覆盖正文;确认后点顶部「采用润色稿」。',
|
||||
'ai_suggestions' => '润色任务附带的写作建议,只读展示。',
|
||||
'cover_path' => '可填附件相对路径或 https 图片地址;也可用顶部「自动配图」从正文/附件挑选。',
|
||||
'category_description' => '用于分类页 meta description、OG/Twitter 与搜索摘要。',
|
||||
'category_intro' => '显示在分类列表页顶部,供读者和爬虫了解该分类。',
|
||||
'category_cover' => '可填相对路径或 https 图片地址,用于分类页头图与 OG 图。',
|
||||
'duration_days' => '留空表示终身;填写天数则从支付成功起算。',
|
||||
],
|
||||
|
||||
'messages' => [
|
||||
'settings_saved' => '设置已保存',
|
||||
'ai_optimize' => 'AI 内容优化',
|
||||
'ai_optimize_queued' => '已投递到内容优化队列',
|
||||
'ai_optimize_queue_hint' => '请确保队列 Worker(或 Workerman)正在消费。',
|
||||
'ai_optimize' => 'AI 润色',
|
||||
'ai_optimize_queued' => '已投递到润色队列',
|
||||
'ai_optimize_queue_hint' => '请确保队列 Worker(或 Workerman)正在消费;完成后刷新本页查看润色稿。',
|
||||
'ai_apply_polish' => '采用润色稿',
|
||||
'ai_apply_polish_confirm' => '将用 AI 润色稿覆盖当前正文。可先对照润色稿字段,确认后再采用。',
|
||||
'ai_apply_polish_done' => '已将润色稿写入正文',
|
||||
'ai_polish_missing' => '还没有润色稿,请先执行 AI 润色',
|
||||
'auto_cover' => '自动配图',
|
||||
'auto_cover_queued' => '已投递自动配图任务',
|
||||
'generate_cover' => '生成封面',
|
||||
'generate_cover_queued' => '已投递封面生成任务',
|
||||
'upload_required' => '请上传附件文件。',
|
||||
'mime_not_allowed' => '不允许的 MIME 类型::mime',
|
||||
'theme_slots_warn' => '已启用,但槽位声明::label。请在 theme.json 中声明 slots。',
|
||||
@@ -170,6 +201,9 @@ return [
|
||||
'plugin_required_by' => '无法禁用 :plugin,仍被以下已启用插件依赖::dependents',
|
||||
'plugin_docs_missing' => '未找到该插件的使用说明',
|
||||
'paid_password_mutex' => '阅读密码与付费阅读不能同时启用',
|
||||
'access_restriction_mutex' => '阅读密码、单篇付费、会员可见不能同时启用',
|
||||
'membership_plan_in_use_articles' => '仍有文章引用此套餐,无法删除(可先禁用)',
|
||||
'membership_plan_has_entitlements' => '仍有用户权益绑定此套餐,无法删除(可先禁用)',
|
||||
],
|
||||
|
||||
'pages' => [
|
||||
@@ -212,6 +246,7 @@ return [
|
||||
'snippets' => '注入 / 广告 / 统计',
|
||||
],
|
||||
'paid_content' => '付费阅读',
|
||||
'membership' => '会员可见',
|
||||
'snippet_groups' => [
|
||||
'analytics' => '统计与脚本',
|
||||
'analytics_help' => '写入页面 head / body 末尾的统计与第三方脚本',
|
||||
@@ -355,7 +390,7 @@ return [
|
||||
],
|
||||
'larablog/membership' => [
|
||||
'title' => '会员',
|
||||
'description' => '会员等级、权益与订阅周期占位。',
|
||||
'description' => '会员套餐、Stub 订阅与会员可见文章(依赖 payment)。',
|
||||
],
|
||||
'larablog/plugin-marketplace' => [
|
||||
'title' => '插件商城',
|
||||
|
||||
@@ -18,12 +18,28 @@ return [
|
||||
'subscribe' => '订阅',
|
||||
'empty_category' => '暂无分类',
|
||||
],
|
||||
'category' => [
|
||||
'post_count' => ':count 篇文章',
|
||||
],
|
||||
'article' => [
|
||||
'toc' => '目录',
|
||||
'password_error' => '密码错误',
|
||||
'paywall_title' => '付费内容',
|
||||
'paywall_hint' => '购买后可阅读全文。',
|
||||
'buy' => '立即购买',
|
||||
'membership_required' => '本文仅限会员阅读。',
|
||||
],
|
||||
'membership' => [
|
||||
'title' => '会员套餐',
|
||||
'active' => '当前会员::plan',
|
||||
'inactive' => '你还不是付费会员。',
|
||||
'expires' => '到期::date',
|
||||
'lifetime' => '终身有效',
|
||||
'days' => ':days 天',
|
||||
'subscribe' => '订阅',
|
||||
'no_plans' => '暂无可用套餐。',
|
||||
'back_profile' => '返回资料',
|
||||
'manage' => '查看 / 订阅会员',
|
||||
],
|
||||
'common' => [
|
||||
'pinned' => '置顶',
|
||||
|
||||
Reference in New Issue
Block a user