feat: 初始化知识库系统项目

- 实现基于 Laravel 11 和 Filament 3.X 的文档管理系统
- 添加用户认证和分组管理功能
- 实现文档上传、分类和权限控制
- 集成 Word 文档自动转换为 Markdown
- 集成 Meilisearch 全文搜索引擎
- 实现文档在线预览功能
- 添加安全日志和审计功能
- 完整的简体中文界面
- 包含完整的项目文档和部署指南

技术栈:
- Laravel 11.x
- Filament 3.X
- Meilisearch 1.5+
- Pandoc 文档转换
- Redis 队列系统
- Pest PHP 测试框架
This commit is contained in:
Knowledge Base System
2025-12-05 14:44:44 +08:00
commit acf549c43c
165 changed files with 32838 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
<?php
return [
'messages' => [
'uploading_file' => '文件上传中...',
],
];

View File

@@ -0,0 +1,9 @@
<?php
return [
'messages' => [
'copied' => '已复制',
],
];

View File

@@ -0,0 +1,13 @@
<?php
return [
'actions' => [
'close' => [
'label' => '关闭',
],
],
];

View File

@@ -0,0 +1,39 @@
<?php
return [
'label' => '分页',
'overview' => '{1} 只有 1 条记录|[2,*] 当前显示第 :first 条到第 :last 条,共 :total 条',
'fields' => [
'records_per_page' => [
'label' => '每页',
'options' => [
'all' => '所有',
],
],
],
'actions' => [
'go_to_page' => [
'label' => '跳转到 :page',
],
'next' => [
'label' => '下一页',
],
'previous' => [
'label' => '上一页',
],
],
];

228
lang/zh_CN.json Normal file
View File

@@ -0,0 +1,228 @@
{
"(and :count more error)": "(还有 :count 个错误)",
"(and :count more errors)": "(还有 :count 个错误)",
"A decryption key is required.": "需要解密密钥。",
"A Timeout Occurred": "发生超时",
"Accept": "接受",
"Accepted": "已接受",
"Action": "操作",
"Actions": "操作",
"Add": "添加",
"Add :name": "添加 :name",
"Admin": "管理员",
"Agree": "同意",
"All rights reserved.": "版权所有。",
"Already Reported": "已上报",
"Archive": "档案",
"Assign": "分配",
"Associate": "联系",
"Attach": "附加",
"Bad Gateway": "网关错误",
"Bad Request": "请求错误",
"Bandwidth Limit Exceeded": "超出带宽限制",
"Browse": "浏览",
"Cancel": "取消",
"Choose": "选择",
"Choose :name": "选择:name",
"Choose File": "选择文件",
"Choose Image": "选择图片",
"Click to copy": "点击复制",
"Client Closed Request": "客户端关闭请求",
"Close": "关闭",
"Collapse": "收缩",
"Collapse All": "全部收缩",
"Comment": "评论",
"Confirm": "确认",
"Conflict": "冲突",
"Connect": "连接",
"Connection Closed Without Response": "连接关闭无响应",
"Connection Timed Out": "连接超时",
"Continue": "继续请求",
"Create": "创建",
"Create :name": "创建 :name 个",
"Created": "已创建",
"Delete": "删除",
"Delete :name": "删除 :name 个",
"Detach": "分离",
"Details": "详情",
"Disable": "禁用",
"Discard": "丢弃",
"Done": "完成",
"Down": "向下",
"Duplicate": "复制",
"Duplicate :name": "重复:名称",
"Edit": "编辑",
"Edit :name": "编辑:name",
"Enable": "启用",
"Encrypted environment file already exists.": "加密环境配置文件已存在。",
"Encrypted environment file not found.": "未找到加密环境配置文件。",
"Environment file already exists.": "环境配置文件已存在。",
"Environment file not found.": "未找到环境配置文件。",
"errors": "错误",
"Expand": "展开",
"Expand All": "展开全部",
"Expectation Failed": "期望不满足",
"Explanation": "解释",
"Export": "导出",
"Export :name": "导出 :name",
"Failed Dependency": "失败的依赖",
"File": "文件",
"Files": "文件",
"Forbidden": "访问被拒绝",
"Found": "临时移动",
"Gateway Timeout": "网关超时",
"Go Home": "回首页",
"Go to page :page": "前往第 :page 页",
"Gone": "不可用",
"Hello!": "您好!",
"Hide": "隐藏",
"Hide :name": "隐藏 :name",
"Home": "家",
"HTTP Version Not Supported": "HTTP版本不支持",
"I'm a teapot": "我是一个茶壶",
"If you did not create an account, no further action is required.": "如果您未注册帐号,请忽略此邮件。",
"If you did not request a password reset, no further action is required.": "如果您未申请重设密码,请忽略此邮件。",
"If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "如果您单击「:actionText」按钮时遇到问题请复制下方链接到浏览器中访问",
"IM Used": "IM已使用",
"Image": "图像",
"Impersonate": "模拟登录",
"Impersonation": "冒充",
"Import": "导入",
"Import :name": "导入 :name",
"Insufficient Storage": "存储空间不足",
"Internal Server Error": "内部服务器错误",
"Introduction": "介绍",
"Invalid filename.": "无效的文件名。",
"Invalid JSON was returned from the route.": "从路由返回无效的 JSON。",
"Invalid SSL Certificate": "无效的SSL证书",
"Length Required": "长度要求",
"Like": "喜欢",
"Load": "加载",
"Localize": "本地化",
"Location": "地点",
"Locked": "锁定",
"Log In": "登录",
"Log Out": "登出",
"Login": "登录",
"Logout": "登出",
"Loop Detected": "检测到环路",
"Maintenance Mode": "服务不可用",
"Method Not Allowed": "方法不允许",
"Misdirected Request": "错误的请求",
"Moved Permanently": "已永久移动",
"Multi-Status": "多状态",
"Multiple Choices": "多种选择",
"Network Authentication Required": "需要网络验证",
"Network Connect Timeout Error": "网络连接超时",
"Network Read Timeout Error": "网络读取超时",
"New": "新建",
"New :name": "新 :name",
"No": "不",
"No Content": "无内容",
"Non-Authoritative Information": "非权威信息",
"Not Acceptable": "无法接受",
"Not Extended": "未延期",
"Not Found": "页面不存在",
"Not Implemented": "未实现",
"Not Modified": "未修改",
"of": "于",
"OK": "OK",
"Open": "打开",
"Open in a current window": "在当前窗口中打开",
"Open in a new window": "在新窗口中打开",
"Open in a parent frame": "在父框架中打开",
"Open in the topmost frame": "在最上面的框架中打开",
"Open on the website": "在网站上打开",
"Origin Is Unreachable": "原点无法到达",
"Page Expired": "页面会话已超时",
"Pagination Navigation": "分页导航",
"Partial Content": "部分内容",
"Payload Too Large": "请求实体过大",
"Payment Required": "需要付款",
"Permanent Redirect": "永久重定向",
"Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail",
"Precondition Failed": "前提条件未满足",
"Precondition Required": "前提要求",
"Preview": "预览",
"Price": "价格",
"Processing": "处理中",
"Proxy Authentication Required": "需要代理验证",
"Railgun Error": "轨道炮错误",
"Range Not Satisfiable": "请求范围不符合",
"Record": "记录",
"Regards,": "致敬,",
"Register": "注册",
"Request Header Fields Too Large": "请求标头字段太大",
"Request Timeout": "请求超时",
"Reset Content": "重置内容",
"Reset Password": "重置密码",
"Reset Password Notification": "重置密码通知",
"Restore": "恢复",
"Restore :name": "恢复:name",
"results": "结果",
"Retry With": "重试",
"Save": "保存",
"Save & Close": "保存并关闭",
"Save & Return": "保存并返回",
"Save :name": "保存 :name",
"Search": "搜索",
"Search :name": "搜索 :name",
"See Other": "见其他",
"Select": "选择",
"Select All": "全选",
"Send": "发送",
"Server Error": "服务器错误",
"Service Unavailable": "服务不可用",
"Session Has Expired": "会话已过期",
"Settings": "设置",
"Show": "显示",
"Show :name": "显示 :name",
"Show All": "显示所有",
"Showing": "显示中",
"Sign In": "登入",
"Solve": "解决",
"SSL Handshake Failed": "SSL握手失败",
"Start": "开始",
"Stop": "停止",
"Submit": "提交",
"Subscribe": "订阅",
"Switch": "切换",
"Switch To Role": "切换角色",
"Switching Protocols": "切换协议",
"Tag": "标签",
"Tags": "标签",
"Temporary Redirect": "临时重定向",
"The given data was invalid.": "给定的数据无效。",
"The response is not a streamed response.": "该响应不是流式响应。",
"The response is not a view.": "响应不是视图。",
"This action is unauthorized.": "此操作未经授权。",
"This password reset link will expire in :count minutes.": "这个重设密码链接将会在 :count 分钟后失效。",
"to": "至",
"Toggle navigation": "切换导航",
"Too Early": "太早了",
"Too Many Requests": "请求次数过多。",
"Translate": "翻译",
"Translate It": "翻译它",
"Unauthorized": "未授权",
"Unavailable For Legal Reasons": "法律原因不可用",
"Unknown Error": "未知错误",
"Unpack": "打开",
"Unprocessable Entity": "不可处理的实体",
"Unsubscribe": "退订",
"Unsupported Media Type": "不支持的媒体类型",
"Up": "向上",
"Update": "更新",
"Update :name": "更新:name",
"Upgrade Required": "需要升级",
"URI Too Long": "URI太长了",
"Use Proxy": "使用代理",
"User": "用户",
"Variant Also Negotiates": "变体协商",
"Verify Email Address": "验证 E-mail",
"View": "查看",
"View :name": "查看 :name",
"Web Server is Down": "Web服务器已关闭",
"Whoops!": "哎呀!",
"Yes": "是的",
"You are receiving this email because we received a password reset request for your account.": "您收到此电子邮件是因为我们收到了您帐户的密码重设请求。"
}

119
lang/zh_CN/actions.php Normal file
View File

@@ -0,0 +1,119 @@
<?php
declare(strict_types=1);
return [
'accept' => '接受',
'action' => '行动',
'actions' => '行动',
'add' => '添加',
'admin' => '管理员',
'agree' => '同意',
'archive' => '档案',
'assign' => '分配',
'associate' => '联系',
'attach' => '附',
'browse' => '浏览',
'cancel' => '取消',
'choose' => '选择',
'choose_file' => '选择文件',
'choose_image' => '选择图片',
'click_to_copy' => '点击复制',
'close' => '关闭',
'collapse' => '收缩',
'collapse_all' => '全部收缩',
'comment' => '评论',
'confirm' => '确认',
'connect' => '连接',
'create' => '创建',
'delete' => '删除',
'detach' => '分离',
'details' => '细节',
'disable' => '禁用',
'discard' => '丢弃',
'done' => '完成',
'down' => '向下',
'duplicate' => '复制',
'edit' => '编辑',
'enable' => '启用',
'expand' => '展开',
'expand_all' => '展开全部',
'explanation' => '解释',
'export' => '导出',
'file' => '文件',
'files' => '文件',
'go_home' => '回家',
'hide' => '隐藏',
'home' => '家',
'image' => '图像',
'impersonate' => '模仿',
'impersonation' => '冒充',
'import' => '导入',
'introduction' => '介绍',
'like' => '喜欢',
'load' => '加载',
'localize' => '本地化',
'log_in' => '登录',
'log_out' => '登出',
'named' => [
'add' => '添加 :name',
'choose' => '选择:name',
'create' => '创建 :name 个',
'delete' => '删除 :name 个',
'duplicate' => '重复:名称',
'edit' => '编辑:name',
'export' => '导出 :name',
'hide' => '隐藏 :name',
'import' => '导入 :name',
'new' => '新 :name',
'restore' => '恢复:name',
'save' => '保存 :name',
'search' => '搜索 :name',
'show' => '显示 :name',
'update' => '更新:name',
'view' => '查看 :name',
],
'new' => '新的',
'no' => '不',
'open' => '打开',
'open_website' => '在网站上打开',
'preview' => '预览',
'price' => '价格',
'record' => '记录',
'restore' => '恢复',
'save' => '保存',
'save_and_close' => '保存并关闭',
'save_and_return' => '保存并返回',
'search' => '搜索',
'select' => '选择',
'select_all' => '全选',
'send' => '发送',
'settings' => '设置',
'show' => '显示',
'show_all' => '显示所有',
'sign_in' => '登入',
'solve' => '解决',
'start' => '开始',
'stop' => '停止',
'submit' => '提交',
'subscribe' => '订阅',
'switch' => '切换',
'switch_to_role' => '切换角色',
'tag' => '标签',
'tags' => '标签',
'target_link' => [
'blank' => '在新窗口中打开',
'parent' => '在父框架中打开',
'self' => '在当前窗口中打开',
'top' => '在最上面的框架中打开',
],
'translate' => '翻译',
'translate_it' => '翻译它',
'unpack' => '打开',
'unsubscribe' => '退订',
'up' => '向上',
'update' => '更新',
'user' => '用户',
'view' => '查看',
'yes' => '是的',
];

9
lang/zh_CN/auth.php Normal file
View File

@@ -0,0 +1,9 @@
<?php
declare(strict_types=1);
return [
'failed' => '用户名或密码错误。',
'password' => '密码错误',
'throttle' => '您尝试的登录次数过多,请 :seconds 秒后再试。',
];

View File

@@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
return [
'0' => '未知错误',
'100' => '继续请求',
'101' => '切换协议',
'102' => '处理中',
'200' => '请求成功',
'201' => '已创建',
'202' => '已接受',
'203' => '非权威信息',
'204' => '无内容',
'205' => '重置内容',
'206' => '部分内容',
'207' => '多状态',
'208' => '已上报',
'226' => 'IM已使用',
'300' => '多种选择',
'301' => '已永久移动',
'302' => '临时移动',
'303' => '见其他',
'304' => '未修改',
'305' => '使用代理',
'307' => '临时重定向',
'308' => '永久重定向',
'400' => '请求错误',
'401' => '未授权',
'402' => '需要付款',
'403' => '禁止',
'404' => '未找到',
'405' => '方法不允许',
'406' => '无法接受',
'407' => '需要代理验证',
'408' => '请求超时',
'409' => '冲突',
'410' => '不可用',
'411' => '长度要求',
'412' => '前提条件未满足',
'413' => '请求实体过大',
'414' => 'URI太长了',
'415' => '不支持的媒体类型',
'416' => '请求范围不符合',
'417' => '期望不满足',
'418' => '我是一个茶壶',
'419' => '会话已过期',
'421' => '错误的请求',
'422' => '不可处理的实体',
'423' => '锁定',
'424' => '失败的依赖',
'425' => '太早了',
'426' => '需要升级',
'428' => '前提要求',
'429' => '请求太多',
'431' => '请求标头字段太大',
'444' => '连接关闭无响应',
'449' => '重试',
'451' => '法律原因不可用',
'499' => '客户端关闭请求',
'500' => '内部服务器错误',
'501' => '未实现',
'502' => '网关错误',
'503' => '服务不可用',
'504' => '网关超时',
'505' => 'HTTP版本不支持',
'506' => '变体协商',
'507' => '存储空间不足',
'508' => '检测到环路',
'509' => '超出带宽限制',
'510' => '未延期',
'511' => '需要网络验证',
'520' => '未知错误',
'521' => 'Web服务器已关闭',
'522' => '连接超时',
'523' => '原点无法到达',
'524' => '发生超时',
'525' => 'SSL握手失败',
'526' => '无效的SSL证书',
'527' => '轨道炮错误',
'598' => '网络读取超时',
'599' => '网络连接超时',
'unknownError' => '未知错误',
];

View File

@@ -0,0 +1,8 @@
<?php
declare(strict_types=1);
return [
'next' => '下一页 &raquo;',
'previous' => '&laquo; 上一页',
];

11
lang/zh_CN/passwords.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
declare(strict_types=1);
return [
'reset' => '密码重置成功!',
'sent' => '密码重置邮件已发送!',
'throttled' => '请稍候再试。',
'token' => '无效的 token',
'user' => '找不到该邮箱对应的用户。',
];

285
lang/zh_CN/validation.php Normal file
View File

@@ -0,0 +1,285 @@
<?php
declare(strict_types=1);
return [
'accepted' => '您必须接受 :attribute。',
'accepted_if' => '当 :other 为 :value 时,必须接受 :attribute。',
'active_url' => ':attribute 不是一个有效的网址。',
'after' => ':attribute 必须要晚于 :date。',
'after_or_equal' => ':attribute 必须要等于 :date 或更晚。',
'alpha' => ':attribute 只能由字母组成。',
'alpha_dash' => ':attribute 只能由字母、数字、短划线(-)和下划线(_)组成。',
'alpha_num' => ':attribute 只能由字母和数字组成。',
'any_of' => ':attribute 字段无效。',
'array' => ':attribute 必须是一个数组。',
'ascii' => ':attribute 必须仅包含单字节字母数字字符和符号。',
'before' => ':attribute 必须要早于 :date。',
'before_or_equal' => ':attribute 必须要等于 :date 或更早。',
'between' => [
'array' => ':attribute 必须只有 :min - :max 个单元。',
'file' => ':attribute 必须介于 :min - :max KB 之间。',
'numeric' => ':attribute 必须介于 :min - :max 之间。',
'string' => ':attribute 必须介于 :min - :max 个字符之间。',
],
'boolean' => ':attribute 必须为布尔值。',
'can' => ':attribute 字段包含未经授权的值。',
'confirmed' => ':attribute 两次输入不一致。',
'contains' => ':attribute 字段缺少必填值。',
'current_password' => '密码错误。',
'date' => ':attribute 不是一个有效的日期。',
'date_equals' => ':attribute 必须要等于 :date。',
'date_format' => ':attribute 的格式必须为 :format。',
'decimal' => ':attribute 必须有 :decimal 位小数。',
'declined' => ':attribute 必须是拒绝的。',
'declined_if' => '当 :other 为 :value 时字段 :attribute 必须是拒绝的。',
'different' => ':attribute 和 :other 必须不同。',
'digits' => ':attribute 必须是 :digits 位数字。',
'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。',
'dimensions' => ':attribute 图片尺寸不正确。',
'distinct' => ':attribute 已经存在。',
'doesnt_contain' => ':attribute 不能包含以下任意内容::values。',
'doesnt_end_with' => ':attribute 不能以以下之一结尾: :values。',
'doesnt_start_with' => ':attribute 不能以下列之一开头: :values。',
'email' => ':attribute 不是一个合法的邮箱。',
'ends_with' => ':attribute 必须以 :values 为结尾。',
'enum' => ':attribute 值不正确。',
'exists' => ':attribute 不存在。',
'extensions' => ':attribute 字段必须具有以下扩展名之一::values。',
'file' => ':attribute 必须是文件。',
'filled' => ':attribute 不能为空。',
'gt' => [
'array' => ':attribute 必须多于 :value 个元素。',
'file' => ':attribute 必须大于 :value KB。',
'numeric' => ':attribute 必须大于 :value。',
'string' => ':attribute 必须多于 :value 个字符。',
],
'gte' => [
'array' => ':attribute 必须多于或等于 :value 个元素。',
'file' => ':attribute 必须大于或等于 :value KB。',
'numeric' => ':attribute 必须大于或等于 :value。',
'string' => ':attribute 必须多于或等于 :value 个字符。',
],
'hex_color' => ':attribute 字段必须是有效的十六进制颜色。',
'image' => ':attribute 必须是图片。',
'in' => '已选的属性 :attribute 无效。',
'in_array' => ':attribute 必须在 :other 中。',
'in_array_keys' => ':attribute 必须至少包含以下任意一个键::values。',
'integer' => ':attribute 必须是整数。',
'ip' => ':attribute 必须是有效的 IP 地址。',
'ipv4' => ':attribute 必须是有效的 IPv4 地址。',
'ipv6' => ':attribute 必须是有效的 IPv6 地址。',
'json' => ':attribute 必须是正确的 JSON 格式。',
'list' => ':attribute 字段必须是一个列表。',
'lowercase' => ':attribute 必须小写。',
'lt' => [
'array' => ':attribute 必须少于 :value 个元素。',
'file' => ':attribute 必须小于 :value KB。',
'numeric' => ':attribute 必须小于 :value。',
'string' => ':attribute 必须少于 :value 个字符。',
],
'lte' => [
'array' => ':attribute 必须少于或等于 :value 个元素。',
'file' => ':attribute 必须小于或等于 :value KB。',
'numeric' => ':attribute 必须小于或等于 :value。',
'string' => ':attribute 必须少于或等于 :value 个字符。',
],
'mac_address' => ':attribute 必须是一个有效的 MAC 地址。',
'max' => [
'array' => ':attribute 最多只有 :max 个单元。',
'file' => ':attribute 不能大于 :max KB。',
'numeric' => ':attribute 不能大于 :max。',
'string' => ':attribute 不能大于 :max 个字符。',
],
'max_digits' => ':attribute 不能超过 :max 位数。',
'mimes' => ':attribute 必须是一个 :values 类型的文件。',
'mimetypes' => ':attribute 必须是一个 :values 类型的文件。',
'min' => [
'array' => ':attribute 至少有 :min 个单元。',
'file' => ':attribute 大小不能小于 :min KB。',
'numeric' => ':attribute 必须大于等于 :min。',
'string' => ':attribute 至少为 :min 个字符。',
],
'min_digits' => ':attribute 必须至少有 :min 位数。',
'missing' => '必须缺少 :attribute 字段。',
'missing_if' => '当 :other 为 :value 时,必须缺少 :attribute 字段。',
'missing_unless' => '必须缺少 :attribute 字段,除非 :other 是 :value。',
'missing_with' => '存在 :values 时,必须缺少 :attribute 字段。',
'missing_with_all' => '存在 :values 时,必须缺少 :attribute 字段。',
'multiple_of' => ':attribute 必须是 :value 中的多个值。',
'not_in' => '已选的属性 :attribute 非法。',
'not_regex' => ':attribute 的格式错误。',
'numeric' => ':attribute 必须是一个数字。',
'password' => [
'letters' => ':attribute 必须至少包含一个字母。',
'mixed' => ':attribute 必须至少包含一个大写字母和一个小写字母。',
'numbers' => ':attribute 必须至少包含一个数字。',
'symbols' => ':attribute 必须至少包含一个符号。',
'uncompromised' => '给定的 :attribute 出现在已经泄漏的密码中。请选择不同的 :attribute。',
],
'present' => ':attribute 必须存在。',
'present_if' => '当 :other 等于 :value 时,必须存在 :attribute 字段。',
'present_unless' => '除非 :other 等于 :value否则 :attribute 字段必须存在。',
'present_with' => '当 :values 存在时,:attribute 字段必须存在。',
'present_with_all' => '当存在 :values 时,必须存在 :attribute 字段。',
'prohibited' => ':attribute 字段被禁止。',
'prohibited_if' => '当 :other 为 :value 时,禁止 :attribute 字段。',
'prohibited_if_accepted' => ':attribute 字段在 :other 被接受时禁止。',
'prohibited_if_declined' => ':attribute 字段在 :other 被拒绝时禁止。',
'prohibited_unless' => ':attribute 字段被禁止,除非 :other 位于 :values 中。',
'prohibits' => ':attribute 字段禁止出现 :other。',
'regex' => ':attribute 格式不正确。',
'required' => ':attribute 不能为空。',
'required_array_keys' => ':attribute 至少包含指定的键::values.',
'required_if' => '当 :other 为 :value 时 :attribute 不能为空。',
'required_if_accepted' => '当 :other 存在时,:attribute 不能为空。',
'required_if_declined' => '当 :other 不存在时,:attribute 不能为空。',
'required_unless' => '当 :other 不为 :values 时 :attribute 不能为空。',
'required_with' => '当 :values 存在时 :attribute 不能为空。',
'required_with_all' => '当 :values 存在时 :attribute 不能为空。',
'required_without' => '当 :values 不存在时 :attribute 不能为空。',
'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',
'same' => ':attribute 和 :other 必须相同。',
'size' => [
'array' => ':attribute 必须为 :size 个单元。',
'file' => ':attribute 大小必须为 :size KB。',
'numeric' => ':attribute 大小必须为 :size。',
'string' => ':attribute 必须是 :size 个字符。',
],
'starts_with' => ':attribute 必须以 :values 为开头。',
'string' => ':attribute 必须是一个字符串。',
'timezone' => ':attribute 必须是一个合法的时区值。',
'ulid' => ':attribute 必须是有效的 ULID。',
'unique' => ':attribute 已经存在。',
'uploaded' => ':attribute 上传失败。',
'uppercase' => ':attribute 必须大写',
'url' => ':attribute 格式不正确。',
'uuid' => ':attribute 必须是有效的 UUID。',
'attributes' => [
'address' => '地址',
'affiliate_url' => '附属网址',
'age' => '年龄',
'amount' => '数额',
'announcement' => '公告',
'area' => '区域',
'audience_prize' => '观众奖',
'audience_winner' => 'audience winner',
'available' => '可用的',
'birthday' => '生日',
'body' => '身体',
'city' => '城市',
'company' => 'company',
'compilation' => '汇编',
'concept' => '概念',
'conditions' => '状况',
'content' => '内容',
'contest' => 'contest',
'country' => '国家',
'cover' => '覆盖',
'created_at' => '创建于',
'creator' => '创建者',
'currency' => '货币',
'current_password' => '当前密码',
'customer' => '顾客',
'date' => '日期',
'date_of_birth' => '出生日期',
'dates' => '日期',
'day' => '天',
'deleted_at' => '删除于',
'description' => '描述',
'display_type' => '显示类型',
'district' => '地区',
'duration' => '期间',
'email' => '邮箱',
'excerpt' => '摘要',
'filter' => '过滤',
'finished_at' => '完成于',
'first_name' => '名',
'gender' => '性别',
'grand_prize' => '大奖',
'group' => '组',
'hour' => '时',
'image' => '图像',
'image_desktop' => '桌面图像',
'image_main' => '主图',
'image_mobile' => '移动图像',
'images' => '图片',
'is_audience_winner' => '是观众赢家',
'is_hidden' => '被隐藏',
'is_subscribed' => '已订阅',
'is_visible' => '是可见的',
'is_winner' => '是赢家',
'items' => '项目',
'key' => '钥匙',
'last_name' => '姓',
'lesson' => '课程',
'line_address_1' => '线路地址 1',
'line_address_2' => '线路地址 2',
'login' => '登录',
'message' => '信息',
'middle_name' => '中间名字',
'minute' => '分',
'mobile' => '手机',
'month' => '月',
'name' => '名称',
'national_code' => '国家代码',
'number' => '数字',
'password' => '密码',
'password_confirmation' => '确认密码',
'phone' => '电话',
'photo' => '照片',
'portfolio' => '文件夹',
'postal_code' => '邮政编码',
'preview' => '预览',
'price' => '价格',
'product_id' => '产品编号',
'product_uid' => '产品UID',
'product_uuid' => '产品UUID',
'promo_code' => '促销代码',
'province' => '省',
'quantity' => '数量',
'reason' => '原因',
'recaptcha_response_field' => '重复验证码响应字段',
'referee' => '裁判',
'referees' => '裁判员',
'reject_reason' => '拒绝理由',
'remember' => '记住',
'restored_at' => '恢复于',
'result_text_under_image' => '图像下的结果文本',
'role' => '角色',
'rule' => '规则',
'rules' => '规则',
'second' => '秒',
'sex' => '性别',
'shipment' => '运输',
'short_text' => '短文本',
'size' => '大小',
'skills' => '技能',
'slug' => '蛞蝓',
'specialization' => '专业化',
'started_at' => '开始于',
'state' => '状态',
'status' => '地位',
'street' => '街道',
'student' => '学生',
'subject' => '主题',
'tag' => '标签',
'tags' => '标签',
'teacher' => '教师',
'terms' => '条款',
'test_description' => '测试说明',
'test_locale' => '测试语言环境',
'test_name' => '测试名称',
'text' => '文本',
'time' => '时间',
'title' => '标题',
'type' => '类型',
'updated_at' => '更新于',
'user' => '用户',
'username' => '用户名',
'value' => '价值',
'winner' => 'winner',
'work' => 'work',
'year' => '年',
],
];