From d1a63380068e7d82ce14a0063fb8ffd847bc967b Mon Sep 17 00:00:00 2001 From: BrettonYe <867057410@qq.com> Date: Mon, 15 May 2023 00:20:59 +0800 Subject: [PATCH] Clean Code --- app/Channels/DingTalkChannel.php | 20 +- app/Channels/Library/WeChat.php | 4 +- app/Channels/PushDeerChannel.php | 4 +- app/Channels/PushPlusChannel.php | 6 +- app/Channels/WeChatChannel.php | 46 +- app/Components/Client/Clash.php | 56 +- app/Components/Client/URLSchemes.php | 34 +- app/Components/DDNS/Aliyun.php | 1 + app/Components/DDNS/CloudFlare.php | 3 + app/Components/DDNS/DNSPod.php | 1 + app/Components/DDNS/Namesilo.php | 21 +- app/Components/Helpers.php | 33 +- app/Components/IP.php | 36 +- app/Console/Commands/AutoClearLogs.php | 1 + app/Console/Commands/DailyNodeReport.php | 13 +- app/Console/Commands/NodeStatusDetection.php | 1 + app/Console/Commands/PanelInstallation.php | 5 +- app/Console/Commands/ServiceTimer.php | 1 + app/Console/Commands/TaskAuto.php | 1 + app/Console/Commands/TaskDaily.php | 30 +- app/Console/Commands/TaskHourly.php | 16 +- app/Console/Commands/UserExpireWarning.php | 1 + app/Console/Commands/UserTrafficWarning.php | 1 + app/Console/Commands/VNetReload.php | 1 + app/Console/Kernel.php | 5 +- app/Exceptions/Handler.php | 4 +- app/Helpers/ClientApiResponse.php | 1 - app/Helpers/ClientConfig.php | 9 +- app/Helpers/DataChart.php | 6 +- app/Helpers/ResponseEnum.php | 25 + .../Controllers/Admin/AffiliateController.php | 2 +- .../Controllers/Admin/CouponController.php | 20 +- app/Http/Controllers/Admin/LogsController.php | 2 +- .../Controllers/Admin/MarketingController.php | 10 +- app/Http/Controllers/Admin/NodeController.php | 90 +- .../Controllers/Admin/ReportController.php | 8 +- app/Http/Controllers/Admin/RuleController.php | 4 +- app/Http/Controllers/Admin/ShopController.php | 4 +- .../Controllers/Admin/TicketController.php | 4 +- .../Controllers/Admin/ToolsController.php | 25 +- app/Http/Controllers/Admin/UserController.php | 16 +- .../Controllers/Api/Client/AuthController.php | 10 +- .../Api/Client/ClientController.php | 50 +- .../Controllers/Api/WebApi/CoreController.php | 8 +- .../Controllers/Api/WebApi/SSController.php | 14 +- .../Controllers/Api/WebApi/SSRController.php | 16 +- .../Api/WebApi/TrojanController.php | 18 +- .../Api/WebApi/V2RayController.php | 40 +- app/Http/Controllers/AuthController.php | 1 - app/Http/Controllers/MessageController.php | 1 - app/Http/Controllers/OAuthController.php | 2 +- app/Http/Controllers/PaymentController.php | 22 +- app/Http/Controllers/TelegramController.php | 2 +- .../Controllers/User/AffiliateController.php | 17 +- .../Controllers/User/SubscribeController.php | 1 + app/Http/Controllers/UserController.php | 56 +- app/Http/Kernel.php | 32 +- app/Http/Middleware/Affiliate.php | 2 - app/Http/Middleware/ClientAuthenticate.php | 1 - app/Http/Middleware/Permission.php | 1 - .../Middleware/RedirectIfAuthenticated.php | 1 - app/Http/Middleware/SetLocale.php | 2 - app/Http/Middleware/Telegram.php | 2 - app/Http/Middleware/WebApi.php | 5 +- app/Http/Middleware/isForbidden.php | 4 +- app/Http/Middleware/isLogin.php | 2 - app/Http/Middleware/isMaintenance.php | 2 - app/Http/Middleware/isSecurity.php | 2 - app/Http/Requests/Admin/ArticleRequest.php | 10 +- app/Http/Requests/Admin/CertRequest.php | 4 +- app/Http/Requests/Admin/CouponRequest.php | 38 +- app/Http/Requests/Admin/NodeRequest.php | 72 +- app/Http/Requests/Admin/PermissionRequest.php | 2 +- app/Http/Requests/Admin/RbacRequest.php | 2 +- app/Http/Requests/Admin/RoleRequest.php | 2 +- app/Http/Requests/Admin/RuleGroupRequest.php | 4 +- app/Http/Requests/Admin/RuleRequest.php | 2 +- app/Http/Requests/Admin/ShopStoreRequest.php | 36 +- app/Http/Requests/Admin/ShopUpdateRequest.php | 26 +- app/Http/Requests/Admin/SystemRequest.php | 2 +- app/Http/Requests/Admin/TicketRequest.php | 6 +- app/Http/Requests/Admin/UserGroupRequest.php | 2 +- app/Http/Requests/Admin/UserStoreRequest.php | 42 +- app/Http/Requests/Admin/UserUpdateRequest.php | 42 +- app/Http/Requests/Auth/RegisterRequest.php | 2 +- app/Jobs/VNet/addUser.php | 10 +- app/Jobs/VNet/delUser.php | 1 + app/Jobs/VNet/editUser.php | 9 +- app/Models/Article.php | 2 + app/Models/Config.php | 5 + app/Models/Country.php | 5 + app/Models/Coupon.php | 3 + app/Models/CouponLog.php | 1 + app/Models/EmailFilter.php | 2 + app/Models/Goods.php | 2 + app/Models/GoodsCategory.php | 1 + app/Models/Invite.php | 2 + app/Models/Label.php | 2 + app/Models/Level.php | 2 + app/Models/Marketing.php | 5 +- app/Models/Node.php | 26 +- app/Models/NodeAuth.php | 1 + app/Models/NodeCertificate.php | 1 + app/Models/NodeDailyDataFlow.php | 2 + app/Models/NodeHeartbeat.php | 2 + app/Models/NodeHourlyDataFlow.php | 2 + app/Models/NodeOnlineIp.php | 2 + app/Models/NodeOnlineLog.php | 2 + app/Models/NotificationLog.php | 1 + app/Models/Order.php | 3 + app/Models/Payment.php | 1 + app/Models/PaymentCallback.php | 7 +- app/Models/ReferralApply.php | 2 + app/Models/ReferralLog.php | 1 + app/Models/Rule.php | 2 + app/Models/RuleGroup.php | 1 + app/Models/RuleLog.php | 2 + app/Models/SsConfig.php | 2 + app/Models/Ticket.php | 1 + app/Models/TicketReply.php | 1 + app/Models/User.php | 3 + app/Models/UserBanedLog.php | 1 + app/Models/UserCreditLog.php | 2 + app/Models/UserDailyDataFlow.php | 2 + app/Models/UserDataFlowLog.php | 2 + app/Models/UserDataModifyLog.php | 2 + app/Models/UserGroup.php | 2 + app/Models/UserHourlyDataFlow.php | 2 + app/Models/UserLoginLog.php | 2 + app/Models/UserOauth.php | 1 + app/Models/UserSubscribe.php | 2 + app/Models/UserSubscribeLog.php | 3 + app/Models/Verify.php | 1 + app/Models/VerifyCode.php | 1 + app/Notifications/AccountExpire.php | 2 +- app/Notifications/Custom.php | 13 +- app/Notifications/DataAnomaly.php | 5 +- app/Notifications/NodeBlocked.php | 4 +- app/Notifications/NodeDailyReport.php | 2 +- app/Notifications/NodeOffline.php | 8 +- app/Notifications/PaymentConfirm.php | 13 +- app/Notifications/PaymentReceived.php | 3 +- app/Notifications/TicketClosed.php | 14 +- app/Notifications/TicketCreated.php | 12 +- app/Notifications/TicketReplied.php | 12 +- app/Observers/OrderObserver.php | 10 +- app/Payments/CodePay.php | 12 +- app/Payments/EPay.php | 14 +- app/Payments/F2Fpay.php | 8 +- app/Payments/Library/AlipayF2F.php | 24 +- app/Payments/Library/Gateway.php | 1 - app/Payments/Manual.php | 8 +- app/Payments/PayBeaver.php | 10 +- app/Payments/PayJs.php | 8 +- app/Payments/PayPal.php | 34 +- app/Payments/Stripe.php | 32 +- app/Payments/THeadPay.php | 6 +- app/Providers/RouteServiceProvider.php | 1 + app/Providers/SettingServiceProvider.php | 20 +- app/Services/ArticleService.php | 13 +- app/Services/CouponService.php | 1 + app/Services/OrderService.php | 15 +- app/Services/ProxyService.php | 35 +- app/Services/TelegramService.php | 4 +- app/Services/UserService.php | 42 +- app/View/Components/Alert.php | 1 + app/View/Components/ChatUnit.php | 1 + composer.json | 2 - config/app.php | 2 +- config/columnsortable.php | 46 +- config/common.php | 78 +- config/log-viewer.php | 40 +- config/services.php | 40 +- config/tasks.php | 42 +- config/theme.php | 6 +- config/version.php | 2 +- .../2021_01_27_080544_config_clean.php | 1 + .../2022_01_22_231856_improve_node_table.php | 57 +- database/seeds/ArticleSeeder.php | 8 +- resources/lang/en/admin.php | 1262 ++++++++--------- resources/lang/en/auth.php | 116 +- resources/lang/en/common.php | 240 ++-- resources/lang/en/errors.php | 44 +- resources/lang/en/http-statuses.php | 142 +- resources/lang/en/model.php | 334 ++--- resources/lang/en/notification.php | 56 +- resources/lang/en/pagination.php | 2 +- resources/lang/en/user.php | 358 ++--- resources/lang/en/validation.php | 342 ++--- resources/lang/ja/admin.php | 1262 ++++++++--------- resources/lang/ja/auth.php | 116 +- resources/lang/ja/common.php | 240 ++-- resources/lang/ja/errors.php | 44 +- resources/lang/ja/http-statuses.php | 142 +- resources/lang/ja/model.php | 334 ++--- resources/lang/ja/notification.php | 56 +- resources/lang/ja/pagination.php | 2 +- resources/lang/ja/user.php | 358 ++--- resources/lang/ja/validation.php | 342 ++--- resources/lang/ko/admin.php | 1262 ++++++++--------- resources/lang/ko/auth.php | 116 +- resources/lang/ko/common.php | 240 ++-- resources/lang/ko/errors.php | 44 +- resources/lang/ko/http-statuses.php | 142 +- resources/lang/ko/model.php | 334 ++--- resources/lang/ko/notification.php | 56 +- resources/lang/ko/pagination.php | 2 +- resources/lang/ko/user.php | 358 ++--- resources/lang/ko/validation.php | 342 ++--- resources/lang/vi/admin.php | 1262 ++++++++--------- resources/lang/vi/auth.php | 116 +- resources/lang/vi/common.php | 240 ++-- resources/lang/vi/errors.php | 44 +- resources/lang/vi/http-statuses.php | 142 +- resources/lang/vi/model.php | 334 ++--- resources/lang/vi/notification.php | 56 +- resources/lang/vi/pagination.php | 2 +- resources/lang/vi/user.php | 358 ++--- resources/lang/vi/validation.php | 342 ++--- resources/lang/zh_CN/admin.php | 1262 ++++++++--------- resources/lang/zh_CN/auth.php | 116 +- resources/lang/zh_CN/common.php | 240 ++-- resources/lang/zh_CN/errors.php | 44 +- resources/lang/zh_CN/http-statuses.php | 142 +- resources/lang/zh_CN/model.php | 334 ++--- resources/lang/zh_CN/notification.php | 56 +- resources/lang/zh_CN/pagination.php | 2 +- resources/lang/zh_CN/user.php | 358 ++--- resources/lang/zh_CN/validation.php | 342 ++--- server.php | 2 - 230 files changed, 8312 insertions(+), 8201 deletions(-) diff --git a/app/Channels/DingTalkChannel.php b/app/Channels/DingTalkChannel.php index 53603876..60b4286a 100644 --- a/app/Channels/DingTalkChannel.php +++ b/app/Channels/DingTalkChannel.php @@ -42,18 +42,18 @@ class DingTalkChannel if (isset($message['button'])) { // 独立跳转ActionCard类型 $body = [ - 'msgtype' => 'actionCard', + 'msgtype' => 'actionCard', 'actionCard' => [ - 'title' => $message['title'], - 'text' => $message['markdown'], + 'title' => $message['title'], + 'text' => $message['markdown'], 'btnOrientation' => 1, - 'btns' => [ + 'btns' => [ [ - 'title' => trans('common.status.reject'), + 'title' => trans('common.status.reject'), 'actionURL' => $message['button'][0], ], [ - 'title' => trans('common.confirm'), + 'title' => trans('common.confirm'), 'actionURL' => $message['button'][1], ], ], @@ -63,16 +63,16 @@ class DingTalkChannel $msgId = Str::uuid(); // 生成对公消息查询URL $body = [ 'msgtype' => 'link', - 'link' => [ - 'title' => $message['title'], - 'text' => '请点击下方按钮【查看详情】', + 'link' => [ + 'title' => $message['title'], + 'text' => '请点击下方按钮【查看详情】', 'messageUrl' => route('message.show', ['type' => $message['url_type'], $msgId]), ], ]; } else { // 文本消息 $body = [ 'msgtype' => 'text', - 'text' => [ + 'text' => [ 'content' => $message['content'], ], ]; diff --git a/app/Channels/Library/WeChat.php b/app/Channels/Library/WeChat.php index 7fcc6529..a57dcf00 100644 --- a/app/Channels/Library/WeChat.php +++ b/app/Channels/Library/WeChat.php @@ -96,7 +96,7 @@ class WeChat return sprintf($format, $encrypt, $signature, $timestamp, $nonce); } - public function DecryptMsg($sMsgSignature, $sTimeStamp = null, $sNonce, $sPostData, &$sMsg) + public function DecryptMsg($sMsgSignature, $sTimeStamp, $sNonce, $sPostData, &$sMsg) { // 检验消息的真实性,并且获取解密后的明文. //提取密文 $array = $this->extract($sPostData); @@ -195,6 +195,7 @@ class PKCS7Encoder class Prpcrypt { public $key; + public $iv; public function __construct() @@ -206,7 +207,6 @@ class Prpcrypt /** * 加密. * - * @param $text * @return array */ public function encrypt($text) diff --git a/app/Channels/PushDeerChannel.php b/app/Channels/PushDeerChannel.php index f5952ac2..e6a0b5e2 100644 --- a/app/Channels/PushDeerChannel.php +++ b/app/Channels/PushDeerChannel.php @@ -14,8 +14,8 @@ class PushDeerChannel $message = $notification->toCustom($notifiable); $response = Http::timeout(15) - ->post('https://api2.pushdeer.com/message/push?pushkey='.sysConfig('pushDeer_key').'&text='.urlencode($message['title']).'&desp=' - .urlencode($message['content']).'&type=markdown'); + ->post('https://api2.pushdeer.com/message/push?pushkey='.sysConfig('pushDeer_key').'&text='.urlencode($message['title']).'&desp=' + .urlencode($message['content']).'&type=markdown'); // 发送成功 if ($response->ok()) { diff --git a/app/Channels/PushPlusChannel.php b/app/Channels/PushPlusChannel.php index 98fd258e..0c77fa95 100644 --- a/app/Channels/PushPlusChannel.php +++ b/app/Channels/PushPlusChannel.php @@ -15,9 +15,9 @@ class PushPlusChannel $message = $notification->toCustom($notifiable); $response = Http::timeout(15)->post('https://www.pushplus.plus/send', [ - 'token' => sysConfig('pushplus_token'), - 'title' => $message['title'], - 'content' => Markdown::parse($message['content'])->toHtml(), + 'token' => sysConfig('pushplus_token'), + 'title' => $message['title'], + 'content' => Markdown::parse($message['content'])->toHtml(), 'template' => 'html', ]); diff --git a/app/Channels/WeChatChannel.php b/app/Channels/WeChatChannel.php index 717a5d7e..b916f6e2 100644 --- a/app/Channels/WeChatChannel.php +++ b/app/Channels/WeChatChannel.php @@ -22,26 +22,26 @@ class WeChatChannel if (isset($message['button'])) { // 按钮交互型 // https://work.weixin.qq.com/api/doc/90000/90135/90236#%E6%8C%89%E9%92%AE%E4%BA%A4%E4%BA%92%E5%9E%8B $body = [ - 'touser' => '@all', - 'msgtype' => 'template_card', - 'agentid' => sysConfig('wechat_aid'), + 'touser' => '@all', + 'msgtype' => 'template_card', + 'agentid' => sysConfig('wechat_aid'), 'template_card' => [ - 'card_type' => 'button_interaction', - 'main_title' => ['title' => $message['title']], + 'card_type' => 'button_interaction', + 'main_title' => ['title' => $message['title']], 'horizontal_content_list' => $message['body'], - 'task_id' => time().Str::random(), - 'button_list' => [ + 'task_id' => time().Str::random(), + 'button_list' => [ [ - 'type' => 1, - 'text' => trans('common.status.reject'), + 'type' => 1, + 'text' => trans('common.status.reject'), 'style' => 3, - 'url' => $message['button'][0], + 'url' => $message['button'][0], ], [ - 'type' => 1, - 'text' => trans('common.confirm'), + 'type' => 1, + 'text' => trans('common.confirm'), 'style' => 1, - 'url' => $message['button'][1], + 'url' => $message['button'][1], ], ], ], @@ -49,22 +49,22 @@ class WeChatChannel } elseif (isset($message['url_type'])) { // 文本卡片 $msgId = Str::uuid(); // 生成对公消息查询URL $body = [ - 'touser' => '@all', - 'agentid' => sysConfig('wechat_aid'), - 'msgtype' => 'textcard', + 'touser' => '@all', + 'agentid' => sysConfig('wechat_aid'), + 'msgtype' => 'textcard', 'textcard' => [ - 'title' => $message['title'], + 'title' => $message['title'], 'description' => '请点击下方按钮【查看详情】', - 'url' => route('message.show', ['type' => $message['url_type'], $msgId]), - 'btntxt' => '查看详情', + 'url' => route('message.show', ['type' => $message['url_type'], $msgId]), + 'btntxt' => '查看详情', ], ]; } else { // 文本消息 $body = [ - 'touser' => '@all', - 'agentid' => sysConfig('wechat_aid'), - 'msgtype' => 'text', - 'text' => [ + 'touser' => '@all', + 'agentid' => sysConfig('wechat_aid'), + 'msgtype' => 'text', + 'text' => [ 'content' => $message['content'], ], 'duplicate_check_interval' => 600, diff --git a/app/Components/Client/Clash.php b/app/Components/Client/Clash.php index eebd5e25..1dff757e 100644 --- a/app/Components/Client/Clash.php +++ b/app/Components/Client/Clash.php @@ -15,44 +15,44 @@ class Clash public static function buildShadowsocks($server) { return [ - 'name' => $server['name'], - 'type' => 'ss', - 'server' => $server['host'], - 'port' => $server['port'], + 'name' => $server['name'], + 'type' => 'ss', + 'server' => $server['host'], + 'port' => $server['port'], 'password' => $server['passwd'], - 'cipher' => $server['method'], - 'udp' => $server['udp'], + 'cipher' => $server['method'], + 'udp' => $server['udp'], ]; } public static function buildShadowsocksr($server) { return [ - 'name' => $server['name'], - 'type' => 'ssr', - 'server' => $server['host'], - 'port' => $server['port'], - 'password' => $server['passwd'], - 'cipher' => $server['method'], - 'obfs' => $server['obfs'], - 'obfs-param' => $server['obfs_param'], - 'protocol' => $server['protocol'], + 'name' => $server['name'], + 'type' => 'ssr', + 'server' => $server['host'], + 'port' => $server['port'], + 'password' => $server['passwd'], + 'cipher' => $server['method'], + 'obfs' => $server['obfs'], + 'obfs-param' => $server['obfs_param'], + 'protocol' => $server['protocol'], 'protocol-param' => $server['protocol_param'], - 'udp' => $server['udp'], + 'udp' => $server['udp'], ]; } public static function buildVmess($server) { $array = [ - 'name' => $server['name'], - 'type' => 'vmess', - 'server' => $server['host'], - 'port' => $server['port'], - 'uuid' => $server['uuid'], + 'name' => $server['name'], + 'type' => 'vmess', + 'server' => $server['host'], + 'port' => $server['port'], + 'uuid' => $server['uuid'], 'alterId' => $server['v2_alter_id'], - 'cipher' => $server['method'], - 'udp' => $server['udp'], + 'cipher' => $server['method'], + 'udp' => $server['udp'], ]; if ($server['v2_tls']) { @@ -79,12 +79,12 @@ class Clash public static function buildTrojan($server) { $array = [ - 'name' => $server['name'], - 'type' => 'trojan', - 'server' => $server['host'], - 'port' => $server['port'], + 'name' => $server['name'], + 'type' => 'trojan', + 'server' => $server['host'], + 'port' => $server['port'], 'password' => $server['passwd'], - 'udp' => $server['udp'], + 'udp' => $server['udp'], ]; if (! empty($server['sni'])) { diff --git a/app/Components/Client/URLSchemes.php b/app/Components/Client/URLSchemes.php index b1a8e71f..72c99b01 100644 --- a/app/Components/Client/URLSchemes.php +++ b/app/Components/Client/URLSchemes.php @@ -23,30 +23,30 @@ class URLSchemes public static function buildShadowsocksSIP008($server) { return [ - 'id' => $server['id'], - 'remark' => $server['name'], - 'server' => $server['host'], + 'id' => $server['id'], + 'remark' => $server['name'], + 'server' => $server['host'], 'server_port' => $server['port'], - 'password' => $server['passwd'], - 'method' => $server['method'], + 'password' => $server['passwd'], + 'method' => $server['method'], ]; } public static function buildVmess($server) { $config = [ - 'v' => '2', - 'ps' => $server['name'], - 'add' => $server['host'], - 'port' => $server['port'], - 'id' => $server['uuid'], - 'aid' => $server['v2_alter_id'], - 'net' => $server['v2_net'], - 'type' => $server['v2_type'], - 'host' => $server['v2_host'], - 'path' => $server['v2_path'], - 'tls' => $server['v2_tls'], - 'sni' => $server['v2_sni'], + 'v' => '2', + 'ps' => $server['name'], + 'add' => $server['host'], + 'port' => $server['port'], + 'id' => $server['uuid'], + 'aid' => $server['v2_alter_id'], + 'net' => $server['v2_net'], + 'type' => $server['v2_type'], + 'host' => $server['v2_host'], + 'path' => $server['v2_path'], + 'tls' => $server['v2_tls'], + 'sni' => $server['v2_sni'], 'remark' => $server['name'], ]; diff --git a/app/Components/DDNS/Aliyun.php b/app/Components/DDNS/Aliyun.php index 869ca59c..1491ce13 100644 --- a/app/Components/DDNS/Aliyun.php +++ b/app/Components/DDNS/Aliyun.php @@ -9,6 +9,7 @@ use Log; class Aliyun { private static $apiHost = 'https://alidns.aliyuncs.com/'; + private static $subDomain; public function __construct($subDomain) diff --git a/app/Components/DDNS/CloudFlare.php b/app/Components/DDNS/CloudFlare.php index 0418966e..29b73542 100644 --- a/app/Components/DDNS/CloudFlare.php +++ b/app/Components/DDNS/CloudFlare.php @@ -9,8 +9,11 @@ use Log; class CloudFlare { private static $apiHost = 'https://api.cloudflare.com/client/v4/'; + private static $subDomain; + private $zoneIdentifier; + private $client; public function __construct($subDomain) diff --git a/app/Components/DDNS/DNSPod.php b/app/Components/DDNS/DNSPod.php index bb09c3ed..82caeea1 100644 --- a/app/Components/DDNS/DNSPod.php +++ b/app/Components/DDNS/DNSPod.php @@ -9,6 +9,7 @@ use Log; class DNSPod { private static $apiHost = 'https://dnsapi.cn/'; + private static $subDomain; public function __construct($subDomain) diff --git a/app/Components/DDNS/Namesilo.php b/app/Components/DDNS/Namesilo.php index 5985a005..d239d0a7 100644 --- a/app/Components/DDNS/Namesilo.php +++ b/app/Components/DDNS/Namesilo.php @@ -8,6 +8,7 @@ use Log; class Namesilo { private static $apiHost = 'https://www.namesilo.com/api/'; + private static $subDomain; public function __construct($subDomain) @@ -20,11 +21,11 @@ class Namesilo $domainInfo = $this->analysisDomain(); if ($domainInfo) { return $this->send('dnsAddRecord', [ - 'domain' => $domainInfo[0], - 'rrtype' => $type, - 'rrhost' => $domainInfo[1], + 'domain' => $domainInfo[0], + 'rrtype' => $type, + 'rrhost' => $domainInfo[1], 'rrvalue' => $ip, - 'rrttl' => 3600, + 'rrttl' => 3600, ]); } @@ -63,8 +64,8 @@ class Namesilo { $params = [ 'version' => 1, - 'type' => 'xml', - 'key' => sysConfig('ddns_key'), + 'type' => 'xml', + 'key' => sysConfig('ddns_key'), ]; $query = array_merge($params, $data); @@ -86,11 +87,11 @@ class Namesilo if ($domainInfo && $recordId) { return $this->send('dnsUpdateRecord', [ - 'domain' => $domainInfo[0], - 'rrid' => $recordId[0], - 'rrhost' => $domainInfo[1], + 'domain' => $domainInfo[0], + 'rrid' => $recordId[0], + 'rrhost' => $domainInfo[1], 'rrvalue' => $ip, - 'rrttl' => 3600, + 'rrttl' => 3600, ]); } Log::error('[Namesilo API] - [更新] 处理失败:'.var_export($recordId, true).var_export($domainInfo, true)); diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index 0fd1d27a..aa89b137 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -52,25 +52,24 @@ class Helpers * @param int|null $date 可使用天数 * @param int|null $inviter_id 邀请人 * @param string|null $nickname 昵称 - * @return User */ public static function addUser(string $username, string $password, int $transfer_enable, int $date = null, int $inviter_id = null, string $nickname = null): User { return User::create([ - 'nickname' => $nickname ?? $username, - 'username' => $username, - 'password' => $password, - 'port' => self::getPort(), // 生成一个可用端口 - 'passwd' => Str::random(), - 'vmess_id' => Str::uuid(), - 'method' => self::getDefaultMethod(), - 'protocol' => self::getDefaultProtocol(), - 'obfs' => self::getDefaultObfs(), + 'nickname' => $nickname ?? $username, + 'username' => $username, + 'password' => $password, + 'port' => self::getPort(), // 生成一个可用端口 + 'passwd' => Str::random(), + 'vmess_id' => Str::uuid(), + 'method' => self::getDefaultMethod(), + 'protocol' => self::getDefaultProtocol(), + 'obfs' => self::getDefaultObfs(), 'transfer_enable' => $transfer_enable, - 'expired_at' => date('Y-m-d', strtotime($date.' days')), - 'user_group_id' => null, - 'reg_ip' => IP::getClientIp(), - 'inviter_id' => $inviter_id, + 'expired_at' => date('Y-m-d', strtotime($date.' days')), + 'user_group_id' => null, + 'reg_ip' => IP::getClientIp(), + 'inviter_id' => $inviter_id, ]); } @@ -121,7 +120,6 @@ class Helpers * @param string|null $error 投递失败时记录的异常信息 * @param string|null $msgId 对公查询ID * @param string $address 收信方 - * @return int */ public static function addNotificationLog(string $title, string $content, int $type, int $status = 1, string $error = null, string $msgId = null, string $address = 'admin'): int { @@ -145,7 +143,6 @@ class Helpers * @param int $couponId 优惠券ID * @param int|null $goodsId 商品ID * @param int|null $orderId 订单ID - * @return bool */ public static function addCouponLog($description, $couponId, $goodsId = null, $orderId = null): bool { @@ -167,7 +164,6 @@ class Helpers * @param int $after 记录后余额 * @param int $amount 发生金额 * @param string $description 描述 - * @return bool */ public static function addUserCreditLog($userId, $orderId, $before, $after, $amount, $description = ''): bool { @@ -191,7 +187,6 @@ class Helpers * @param int $after 记录后的值 * @param string $description 描述 * @param int|null $orderId 订单ID - * @return bool */ public static function addUserTrafficModifyLog(int $userId, int $before, int $after, string $description = '', $orderId = null): bool { @@ -214,7 +209,6 @@ class Helpers * @param int $status 状态 * @param string $error 报错 * @param string $receiver 收件人 - * @return int */ public static function addMarketing(int $type, string $title, string $content, int $status = 1, string $error = '', string $receiver = ''): int { @@ -261,7 +255,6 @@ class Helpers * Get price with money symbol in the user's preferred currency. * * @param int|float $amount price - * @return string */ public static function getPriceTag($amount): string { diff --git a/app/Components/IP.php b/app/Components/IP.php index 254c1e8c..72ce7294 100644 --- a/app/Components/IP.php +++ b/app/Components/IP.php @@ -63,11 +63,11 @@ class IP $location = explode('|', $ipInfo['region']); if ($location) { return [ - 'country' => $location[0] ?: '', + 'country' => $location[0] ?: '', 'province' => $location[2] ?: '', - 'city' => $location[3] ?: '', - 'isp' => $location[4] ?: '', - 'area' => $location[1] ?: '', + 'city' => $location[3] ?: '', + 'isp' => $location[4] ?: '', + 'area' => $location[1] ?: '', ]; } } @@ -83,9 +83,9 @@ class IP ->lookup($ip, [Database::CITY_NAME, Database::REGION_NAME, Database::COUNTRY_NAME]); return [ - 'country' => $location['countryName'], + 'country' => $location['countryName'], 'province' => $location['regionName'], - 'city' => $location['cityName'], + 'city' => $location['cityName'], ]; } catch (Exception $e) { Log::error('【ip2Location】错误信息:'.$e->getMessage()); @@ -100,9 +100,9 @@ class IP $location = (new City($filePath))->findMap($ip, 'CN'); return [ - 'country' => $location['country_name'], + 'country' => $location['country_name'], 'province' => $location['region_name'], - 'city' => $location['city_name'], + 'city' => $location['city_name'], ]; } @@ -114,9 +114,9 @@ class IP $message = $response->json(); if ($message) { return [ - 'country' => $message[0], + 'country' => $message[0], 'province' => $message[1], - 'city' => $message[2], + 'city' => $message[2], ]; } @@ -137,10 +137,10 @@ class IP $message = $response->json(); if ($message['code'] === 0) { return [ - 'country' => $message['data']['country'] === 'XX' ? '' : $message['data']['country'], + 'country' => $message['data']['country'] === 'XX' ? '' : $message['data']['country'], 'province' => $message['data']['region'] === 'XX' ? '' : $message['data']['region'], - 'city' => $message['data']['city'] === 'XX' ? '' : $message['data']['city'], - 'isp' => $message['data']['isp'] === 'XX' ? '' : $message['data']['isp'], + 'city' => $message['data']['city'] === 'XX' ? '' : $message['data']['city'], + 'isp' => $message['data']['isp'] === 'XX' ? '' : $message['data']['isp'], ]; } @@ -166,10 +166,10 @@ class IP $message = $response->json(); if ($message['status'] === 0) { return [ - 'country' => $message['content']['address_detail']['country'], + 'country' => $message['content']['address_detail']['country'], 'province' => $message['content']['address_detail']['province'], - 'city' => $message['content']['address_detail']['city'], - 'area' => $message['address'], + 'city' => $message['content']['address_detail']['city'], + 'area' => $message['address'], ]; } @@ -188,9 +188,9 @@ class IP $location = (new Reader($filePath))->city($ip); return [ - 'country' => $location->country->name ?? '', + 'country' => $location->country->name ?? '', 'province' => $location->mostSpecificSubdivision->name ?? '', - 'city' => $location->city->name ?? '', + 'city' => $location->city->name ?? '', ]; } catch (AddressNotFoundException $e) { Log::error('【GeoIP2】查询失败:'.$ip); diff --git a/app/Console/Commands/AutoClearLogs.php b/app/Console/Commands/AutoClearLogs.php index 7ca43f20..b9ae69cb 100644 --- a/app/Console/Commands/AutoClearLogs.php +++ b/app/Console/Commands/AutoClearLogs.php @@ -19,6 +19,7 @@ use Log; class AutoClearLogs extends Command { protected $signature = 'autoClearLogs'; + protected $description = '自动清除日志'; public function handle() diff --git a/app/Console/Commands/DailyNodeReport.php b/app/Console/Commands/DailyNodeReport.php index cb464eb4..263df237 100644 --- a/app/Console/Commands/DailyNodeReport.php +++ b/app/Console/Commands/DailyNodeReport.php @@ -13,6 +13,7 @@ use Notification; class DailyNodeReport extends Command { protected $signature = 'dailyNodeReport'; + protected $description = '自动报告节点昨日使用情况'; public function handle() @@ -31,19 +32,19 @@ class DailyNodeReport extends Command foreach ($nodeList as $node) { $log = $node->dailyDataFlows()->whereDate('created_at', $date)->first(); $data[] = [ - 'name' => $node->name, - 'upload' => flowAutoShow($log->u ?? 0), + 'name' => $node->name, + 'upload' => flowAutoShow($log->u ?? 0), 'download' => flowAutoShow($log->d ?? 0), - 'total' => $log->traffic ?? '', + 'total' => $log->traffic ?? '', ]; $upload += $log->u ?? 0; $download += $log->d ?? 0; } if ($data) { $data[] = [ - 'name' => trans('notification.node.total'), - 'total' => flowAutoShow($upload + $download), - 'upload' => flowAutoShow($upload), + 'name' => trans('notification.node.total'), + 'total' => flowAutoShow($upload + $download), + 'upload' => flowAutoShow($upload), 'download' => flowAutoShow($download), ]; diff --git a/app/Console/Commands/NodeStatusDetection.php b/app/Console/Commands/NodeStatusDetection.php index 1aeee1e9..50023dbd 100644 --- a/app/Console/Commands/NodeStatusDetection.php +++ b/app/Console/Commands/NodeStatusDetection.php @@ -16,6 +16,7 @@ use Notification; class NodeStatusDetection extends Command { protected $signature = 'nodeStatusDetection'; + protected $description = '节点状态检测'; public function handle() diff --git a/app/Console/Commands/PanelInstallation.php b/app/Console/Commands/PanelInstallation.php index 5a860d92..7462627e 100644 --- a/app/Console/Commands/PanelInstallation.php +++ b/app/Console/Commands/PanelInstallation.php @@ -12,6 +12,7 @@ use Illuminate\Support\Facades\DB; class PanelInstallation extends Command { protected $signature = 'panel:install'; + protected $description = 'ProxyPanel Installation (面板自主安装)'; public function handle() @@ -40,8 +41,8 @@ class PanelInstallation extends Command // 设置数据库信息 $this->line(' 设置数据库信息'); $this->saveToEnv([ - 'DB_HOST' => $this->ask('请输入数据库地址(默认:localhost)', 'localhost'), - 'DB_PORT' => $this->ask('请输入数据库地址(默认:3306)', 3306), + 'DB_HOST' => $this->ask('请输入数据库地址(默认:localhost)', 'localhost'), + 'DB_PORT' => $this->ask('请输入数据库地址(默认:3306)', 3306), 'DB_DATABASE' => $this->ask('请输入数据库名'), 'DB_USERNAME' => $this->ask('请输入数据库用户名'), 'DB_PASSWORD' => $this->ask('请输入数据库密码'), diff --git a/app/Console/Commands/ServiceTimer.php b/app/Console/Commands/ServiceTimer.php index be0fae45..fb239eb9 100644 --- a/app/Console/Commands/ServiceTimer.php +++ b/app/Console/Commands/ServiceTimer.php @@ -9,6 +9,7 @@ use Log; class ServiceTimer extends Command { protected $signature = 'serviceTimer'; + protected $description = '服务计时器'; public function handle() diff --git a/app/Console/Commands/TaskAuto.php b/app/Console/Commands/TaskAuto.php index fb029f10..52362086 100644 --- a/app/Console/Commands/TaskAuto.php +++ b/app/Console/Commands/TaskAuto.php @@ -16,6 +16,7 @@ use Log; class TaskAuto extends Command { protected $signature = 'task:auto'; + protected $description = '自动任务'; /* diff --git a/app/Console/Commands/TaskDaily.php b/app/Console/Commands/TaskDaily.php index 59df51d9..52f82423 100644 --- a/app/Console/Commands/TaskDaily.php +++ b/app/Console/Commands/TaskDaily.php @@ -15,6 +15,7 @@ use Log; class TaskDaily extends Command { protected $signature = 'task:daily'; + protected $description = '每日任务'; public function handle() @@ -43,13 +44,13 @@ class TaskDaily extends Command ->where('expired_at', '<', date('Y-m-d')) // 过期 ->chunk(config('tasks.chunk'), function ($users) use ($isBanStatus) { $dirtyWorks = [ - 'u' => 0, - 'd' => 0, + 'u' => 0, + 'd' => 0, 'transfer_enable' => 0, - 'enable' => 0, - 'level' => 0, - 'reset_time' => null, - 'ban_time' => null, + 'enable' => 0, + 'level' => 0, + 'reset_time' => null, + 'ban_time' => null, ]; // 停止服务 $banMsg = __('[Daily Task] Account Expiration: Stop Service'); if ($isBanStatus) { @@ -98,6 +99,7 @@ class TaskDaily extends Command if (! $order) {// 无套餐用户跳过 Log::error('用户[ID:'.$user->id.'] 流量重置, 用户订单获取失败'); + continue; } @@ -147,10 +149,10 @@ class TaskDaily extends Command })->flatten()->toArray(); $data[] = [ // 每日节点流量合计 - 'u' => $logs->sum('u'), - 'd' => $logs->sum('d'), - 'total' => $logs->sum('total'), - 'traffic' => flowAutoShow($logs->sum('total')), + 'u' => $logs->sum('u'), + 'd' => $logs->sum('d'), + 'total' => $logs->sum('total'), + 'traffic' => flowAutoShow($logs->sum('total')), 'created_at' => $created_at, ]; @@ -174,10 +176,10 @@ class TaskDaily extends Command ->selectRaw('sum(`u`) as u, sum(`d`) as d')->first(); $total = $traffic->u + $traffic->d; $node->dailyDataFlows()->create([ - 'u' => $traffic->u, - 'd' => $traffic->d, - 'total' => $total, - 'traffic' => flowAutoShow($total), + 'u' => $traffic->u, + 'd' => $traffic->d, + 'total' => $total, + 'traffic' => flowAutoShow($total), 'created_at' => $created_at, ]); } diff --git a/app/Console/Commands/TaskHourly.php b/app/Console/Commands/TaskHourly.php index 11c53352..1d579f08 100644 --- a/app/Console/Commands/TaskHourly.php +++ b/app/Console/Commands/TaskHourly.php @@ -50,10 +50,10 @@ class TaskHourly extends Command $log->created_at = $created_at; })->flatten()->toArray(); $overall = [ // 每小时节点流量合计 - 'u' => $logs->sum('u'), - 'd' => $logs->sum('d'), - 'total' => $logs->sum('total'), - 'traffic' => flowAutoShow($logs->sum('total')), + 'u' => $logs->sum('u'), + 'd' => $logs->sum('d'), + 'total' => $logs->sum('total'), + 'traffic' => flowAutoShow($logs->sum('total')), 'created_at' => $created_at, ]; $data[] = $overall; @@ -82,10 +82,10 @@ class TaskHourly extends Command ->selectRaw('sum(`u`) as u, sum(`d`) as d')->first(); $total = $traffic->u + $traffic->d; $node->hourlyDataFlows()->create([ - 'u' => $traffic->u, - 'd' => $traffic->d, - 'total' => $total, - 'traffic' => flowAutoShow($total), + 'u' => $traffic->u, + 'd' => $traffic->d, + 'total' => $total, + 'traffic' => flowAutoShow($total), 'created_at' => $created_at, ]); } diff --git a/app/Console/Commands/UserExpireWarning.php b/app/Console/Commands/UserExpireWarning.php index 5fd2fb1b..7b820d81 100644 --- a/app/Console/Commands/UserExpireWarning.php +++ b/app/Console/Commands/UserExpireWarning.php @@ -10,6 +10,7 @@ use Log; class UserExpireWarning extends Command { protected $signature = 'userExpireWarning'; + protected $description = '用户临近到期自动提醒'; public function handle() diff --git a/app/Console/Commands/UserTrafficWarning.php b/app/Console/Commands/UserTrafficWarning.php index 906e4c2c..32db39cb 100644 --- a/app/Console/Commands/UserTrafficWarning.php +++ b/app/Console/Commands/UserTrafficWarning.php @@ -10,6 +10,7 @@ use Log; class UserTrafficWarning extends Command { protected $signature = 'userTrafficWarning'; + protected $description = '用户流量超过警告阈值自动发邮件提醒'; public function handle() diff --git a/app/Console/Commands/VNetReload.php b/app/Console/Commands/VNetReload.php index 8618fb87..1015cbef 100644 --- a/app/Console/Commands/VNetReload.php +++ b/app/Console/Commands/VNetReload.php @@ -10,6 +10,7 @@ use Log; class VNetReload extends Command { protected $signature = 'vnet:reload'; + protected $description = 'VNet线路重置'; public function handle() diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 8728f789..13d644c0 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -38,10 +38,9 @@ class Kernel extends ConsoleKernel /** * Define the application's command schedule. * - * @param Schedule $schedule * @return void */ - protected function schedule(Schedule $schedule) + protected function schedule(Schedule $schedule): void { $schedule->command('serviceTimer')->everyFiveMinutes(); $schedule->command('nodeStatusDetection')->everyTenMinutes(); @@ -60,7 +59,7 @@ class Kernel extends ConsoleKernel * * @return void */ - protected function commands() + protected function commands(): void { $this->load(__DIR__.'/Commands'); diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 24a06cdd..c1bdd720 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -43,7 +43,6 @@ class Handler extends ExceptionHandler /** * Report or log an exception. * - * @param Throwable $exception * @return void * * @throws Throwable @@ -63,7 +62,6 @@ class Handler extends ExceptionHandler * Render an exception into an HTTP response. * * @param Request $request - * @param Throwable $exception * @return \Symfony\Component\HttpFoundation\Response * * @throws Throwable @@ -109,7 +107,7 @@ class Handler extends ExceptionHandler case $exception instanceof ErrorException: // 捕获系统错误异常 if ($request->ajax() || $request->wantsJson()) { return Response::json([ - 'status' => 'fail', + 'status' => 'fail', 'message' => trans('http-statuses.500').', '.trans('errors.visit').''.trans('errors.log').'', ], 500); } diff --git a/app/Helpers/ClientApiResponse.php b/app/Helpers/ClientApiResponse.php index 34570e83..65eb030e 100644 --- a/app/Helpers/ClientApiResponse.php +++ b/app/Helpers/ClientApiResponse.php @@ -4,7 +4,6 @@ namespace App\Helpers; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Log; trait ClientApiResponse { diff --git a/app/Helpers/ClientConfig.php b/app/Helpers/ClientConfig.php index f4c48025..7c18ab91 100644 --- a/app/Helpers/ClientConfig.php +++ b/app/Helpers/ClientConfig.php @@ -37,9 +37,9 @@ trait ClientConfig if (str_contains($target, 'v2rayn') || str_contains($target, 'v2rayng') || str_contains($target, 'v2rayu')) { return $this->v2rayN(); } -// if (strpos($target, 'shadowsocks') !== false) { -// exit($this->shaodowsocksSIP008()); -// } + // if (strpos($target, 'shadowsocks') !== false) { + // exit($this->shaodowsocksSIP008()); + // } return $this->origin(); } @@ -218,9 +218,6 @@ trait ClientConfig } /** - * @param string $customConfig - * @param string $defaultConfig - * @param string $target * @return array|false|string|string[] */ private function sugerLike(string $customConfig, string $defaultConfig, string $target = '') diff --git a/app/Helpers/DataChart.php b/app/Helpers/DataChart.php index f2620c76..f885eb61 100644 --- a/app/Helpers/DataChart.php +++ b/app/Helpers/DataChart.php @@ -45,10 +45,10 @@ trait DataChart $dailyData[date('j', strtotime(now())) - 1] = round(array_sum($hourlyData) + $currentFlow / GB, 3); return [ - 'trafficDaily' => $dailyData, + 'trafficDaily' => $dailyData, 'trafficHourly' => $hourlyData, - 'monthDays' => range(1, date('j')), // 本月天数 - 'dayHours' => range(0, date('G') + 1), // 本日小时 + 'monthDays' => range(1, date('j')), // 本月天数 + 'dayHours' => range(0, date('G') + 1), // 本日小时 ]; } } diff --git a/app/Helpers/ResponseEnum.php b/app/Helpers/ResponseEnum.php index e363f586..5d312869 100644 --- a/app/Helpers/ResponseEnum.php +++ b/app/Helpers/ResponseEnum.php @@ -14,14 +14,23 @@ class ResponseEnum /*-------------------------------------------------------------------------------------------*/ // 200表示服务器成功地接受了客户端请求 const HTTP_OK = [200001, '操作成功']; + const HTTP_ERROR = [200002, '操作失败']; + const HTTP_ACTION_COUNT_ERROR = [200302, '操作频繁']; + const USER_SERVICE_LOGIN_SUCCESS = [200200, '登录成功']; + const USER_SERVICE_LOGIN_ERROR = [200201, '登录失败']; + const USER_SERVICE_LOGOUT_SUCCESS = [200202, '退出登录成功']; + const USER_SERVICE_LOGOUT_ERROR = [200203, '退出登录失败']; + const USER_SERVICE_REGISTER_SUCCESS = [200104, '注册成功']; + const USER_SERVICE_REGISTER_ERROR = [200105, '注册失败']; + const USER_ACCOUNT_REGISTERED = [23001, '账号已注册']; /*-------------------------------------------------------------------------------------------*/ @@ -34,17 +43,26 @@ class ResponseEnum // 400开头的表示客户端错误请求错误,请求不到数据,或者找不到等等 // 400 - 错误的请求 const CLIENT_NOT_FOUND_HTTP_ERROR = [400001, '请求失败']; + const CLIENT_PARAMETER_ERROR = [400200, '参数错误']; + const CLIENT_CREATED_ERROR = [400201, '数据已存在']; + const CLIENT_DELETED_ERROR = [400202, '数据不存在']; + // 401 - 访问被拒绝 const CLIENT_HTTP_UNSYNCHRONIZE_TIMER = [401001, '通信双方时钟不同步,或通信超时']; + const CLIENT_HTTP_UNAUTHORIZED = [401200, '授权失败,请先登录']; + const CLIENT_HTTP_UNAUTHORIZED_EXPIRED = [401201, '账号信息已过期,请重新登录']; + const CLIENT_HTTP_UNAUTHORIZED_BLACKLISTED = [401202, '账号已被禁止登录']; + // 403 - 禁止访问 // 404 - 没有找到文件或目录 const CLIENT_NOT_FOUND_ERROR = [404001, '没有找到该页面']; + // 405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许) const CLIENT_METHOD_HTTP_TYPE_ERROR = [405001, 'HTTP请求类型错误']; // 406 - 客户端浏览器不接受所请求页面的 MIME 类型 @@ -62,15 +80,22 @@ class ResponseEnum // 服务端操作错误码:500 ~ 599 开头,后拼接 3 位 // 500 - 内部服务器错误 const SYSTEM_ERROR = [500001, '服务器错误']; + const SYSTEM_UNAVAILABLE = [500002, '服务器正在维护,暂不可用']; + const SYSTEM_CACHE_CONFIG_ERROR = [500003, '缓存配置错误']; + const SYSTEM_CACHE_MISSED_ERROR = [500004, '缓存未命中']; + const SYSTEM_CONFIG_ERROR = [500005, '系统配置错误']; // 业务操作错误码(外部服务或内部服务调用) const SERVICE_REGISTER_ERROR = [500101, '注册失败']; + const SERVICE_LOGIN_ERROR = [500102, '登录失败']; + const SERVICE_LOGIN_ACCOUNT_ERROR = [500103, '账号或密码错误']; + const SERVICE_USER_INTEGRAL_ERROR = [500200, '积分不足']; //501 - 页眉值指定了未实现的配置 diff --git a/app/Http/Controllers/Admin/AffiliateController.php b/app/Http/Controllers/Admin/AffiliateController.php index 0cdda9f3..ec025e09 100644 --- a/app/Http/Controllers/Admin/AffiliateController.php +++ b/app/Http/Controllers/Admin/AffiliateController.php @@ -30,7 +30,7 @@ class AffiliateController extends Controller public function detail(Request $request, ReferralApply $aff) { return view('admin.aff.detail', [ - 'referral' => $aff->load('user:id,username'), + 'referral' => $aff->load('user:id,username'), 'commissions' => $aff->referral_logs()->with(['invitee:id,username', 'order.goods:id,name'])->paginate()->appends($request->except('page')), ]); } diff --git a/app/Http/Controllers/Admin/CouponController.php b/app/Http/Controllers/Admin/CouponController.php index 024401e2..1a7969b1 100644 --- a/app/Http/Controllers/Admin/CouponController.php +++ b/app/Http/Controllers/Admin/CouponController.php @@ -41,9 +41,9 @@ class CouponController extends Controller public function show(Coupon $coupon) { return view('admin.coupon.show', [ - 'coupon' => $coupon, + 'coupon' => $coupon, 'userGroups' => UserGroup::all()->pluck('name', 'id')->toArray(), - 'levels' => Level::all()->pluck('name', 'level')->toArray(), + 'levels' => Level::all()->pluck('name', 'level')->toArray(), ]); } @@ -63,15 +63,15 @@ class CouponController extends Controller $num = (int) $request->input('num'); $data = $request->only(['name', 'type', 'priority', 'usable_times', 'value', 'start_time', 'end_time']); $data['limit'] = [ - 'minimum' => $request->input('minimum'), - 'used' => $request->input('used'), - 'users' => [ - 'white' => $request->has('users_whitelist') ? array_map('intval', explode(', ', $request->input('users_whitelist'))) : null, - 'black' => $request->has('users_blacklist') ? array_map('intval', explode(', ', $request->input('users_blacklist'))) : null, + 'minimum' => $request->input('minimum'), + 'used' => $request->input('used'), + 'users' => [ + 'white' => $request->has('users_whitelist') ? array_map('intval', explode(', ', $request->input('users_whitelist'))) : null, + 'black' => $request->has('users_blacklist') ? array_map('intval', explode(', ', $request->input('users_blacklist'))) : null, 'newbie' => [ 'coupon' => $request->input('coupon'), - 'order' => $request->input('order'), - 'days' => $request->has('days') ? (int) $request->input(['days']) : null, + 'order' => $request->input('order'), + 'days' => $request->has('days') ? (int) $request->input(['days']) : null, ], 'levels' => $request->has('levels') ? array_map('intval', $request->input('levels')) : null, 'groups' => $request->has('groups') ? array_map('intval', $request->input('groups')) : null, @@ -104,7 +104,7 @@ class CouponController extends Controller { return view('admin.coupon.create', [ 'userGroups' => UserGroup::all()->pluck('name', 'id')->toArray(), - 'levels' => Level::all()->pluck('name', 'level')->toArray(), + 'levels' => Level::all()->pluck('name', 'level')->toArray(), ]); } diff --git a/app/Http/Controllers/Admin/LogsController.php b/app/Http/Controllers/Admin/LogsController.php index c1947ef6..aa1c7633 100644 --- a/app/Http/Controllers/Admin/LogsController.php +++ b/app/Http/Controllers/Admin/LogsController.php @@ -186,7 +186,7 @@ class LogsController extends Controller return view('admin.logs.onlineIPMonitor', [ 'onlineIPLogs' => $onlineIPLogs, - 'nodes' => Node::whereStatus(1)->orderByDesc('sort')->latest()->get(), + 'nodes' => Node::whereStatus(1)->orderByDesc('sort')->latest()->get(), ]); } diff --git a/app/Http/Controllers/Admin/MarketingController.php b/app/Http/Controllers/Admin/MarketingController.php index 229964ea..f3ba9ae2 100644 --- a/app/Http/Controllers/Admin/MarketingController.php +++ b/app/Http/Controllers/Admin/MarketingController.php @@ -39,11 +39,11 @@ class MarketingController extends Controller $title = $request->input('title'); $content = $request->input('content'); -// if (! sysConfig('is_push_bear')) { -// return Response::json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']); -// } -// -// Notification::send(PushBearChannel::class, new Custom($title, $content)); + // if (! sysConfig('is_push_bear')) { + // return Response::json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']); + // } + // + // Notification::send(PushBearChannel::class, new Custom($title, $content)); return Response::json(['status' => 'fail', 'message' => '功能待开发']); } diff --git a/app/Http/Controllers/Admin/NodeController.php b/app/Http/Controllers/Admin/NodeController.php index f485d149..12c667f9 100644 --- a/app/Http/Controllers/Admin/NodeController.php +++ b/app/Http/Controllers/Admin/NodeController.php @@ -70,19 +70,19 @@ class NodeController extends Controller public function create() { return view('admin.node.info', [ - 'nodes' => Node::orderBy('id')->pluck('id', 'name'), - 'countries' => Country::orderBy('code')->get(), - 'levels' => Level::orderBy('level')->get(), + 'nodes' => Node::orderBy('id')->pluck('id', 'name'), + 'countries' => Country::orderBy('code')->get(), + 'levels' => Level::orderBy('level')->get(), 'ruleGroups' => RuleGroup::orderBy('id')->get(), - 'labels' => Label::orderByDesc('sort')->orderBy('id')->get(), - 'certs' => NodeCertificate::orderBy('id')->get(), + 'labels' => Label::orderByDesc('sort')->orderBy('id')->get(), + 'certs' => NodeCertificate::orderBy('id')->get(), ]); } public function clone(Node $node) { // 克隆节点 $new = $node->replicate()->fill([ - 'name' => $node->name.'_克隆', + 'name' => $node->name.'_克隆', 'server' => null, ]); $new->save(); @@ -93,13 +93,13 @@ class NodeController extends Controller public function edit(Node $node) { // 编辑节点页面 return view('admin.node.info', [ - 'node' => $node, - 'nodes' => Node::whereNotIn('id', [$node->id])->orderBy('id')->pluck('id', 'name'), - 'countries' => Country::orderBy('code')->get(), - 'levels' => Level::orderBy('level')->get(), + 'node' => $node, + 'nodes' => Node::whereNotIn('id', [$node->id])->orderBy('id')->pluck('id', 'name'), + 'countries' => Country::orderBy('code')->get(), + 'levels' => Level::orderBy('level')->get(), 'ruleGroups' => RuleGroup::orderBy('id')->get(), - 'labels' => Label::orderByDesc('sort')->orderBy('id')->get(), - 'certs' => NodeCertificate::orderBy('id')->get(), + 'labels' => Label::orderByDesc('sort')->orderBy('id')->get(), + 'certs' => NodeCertificate::orderBy('id')->get(), ]); } @@ -225,14 +225,14 @@ class NodeController extends Controller break; case 2: $profile = [ - 'method' => $info['v2_method'], + 'method' => $info['v2_method'], 'v2_alter_id' => $info['v2_alter_id'], - 'v2_net' => $info['v2_net'], - 'v2_type' => $info['v2_type'], - 'v2_host' => $info['v2_host'], - 'v2_path' => $info['v2_path'], - 'v2_tls' => $info['v2_tls'] ? 'tls' : '', - 'v2_sni' => $info['v2_sni'], + 'v2_net' => $info['v2_net'], + 'v2_type' => $info['v2_type'], + 'v2_host' => $info['v2_host'], + 'v2_path' => $info['v2_path'], + 'v2_tls' => $info['v2_tls'] ? 'tls' : '', + 'v2_sni' => $info['v2_sni'], ]; break; case 3: @@ -243,39 +243,39 @@ class NodeController extends Controller case 1: case 4: $profile = [ - 'method' => $info['method'], - 'protocol' => $info['protocol'], - 'obfs' => $info['obfs'], - 'obfs_param' => $info['obfs_param'], + 'method' => $info['method'], + 'protocol' => $info['protocol'], + 'obfs' => $info['obfs'], + 'obfs_param' => $info['obfs_param'], 'protocol_param' => $info['protocol_param'], - 'passwd' => $info['passwd'], + 'passwd' => $info['passwd'], ]; break; } return [ - 'type' => $info['type'], - 'name' => $info['name'], - 'country_code' => $info['country_code'], - 'server' => $info['server'], - 'ip' => $info['ip'], - 'ipv6' => $info['ipv6'], - 'level' => $info['level'], - 'rule_group_id' => $info['rule_group_id'], - 'speed_limit' => $info['speed_limit'], - 'client_limit' => $info['client_limit'], - 'description' => $info['description'], - 'profile' => $profile ?? [], - 'traffic_rate' => $info['traffic_rate'], - 'is_udp' => $info['is_udp'], - 'is_display' => $info['is_display'], - 'is_ddns' => $info['is_ddns'], - 'relay_node_id' => $info['relay_node_id'], - 'port' => $info['port'] ?? 0, - 'push_port' => $info['push_port'], + 'type' => $info['type'], + 'name' => $info['name'], + 'country_code' => $info['country_code'], + 'server' => $info['server'], + 'ip' => $info['ip'], + 'ipv6' => $info['ipv6'], + 'level' => $info['level'], + 'rule_group_id' => $info['rule_group_id'], + 'speed_limit' => $info['speed_limit'], + 'client_limit' => $info['client_limit'], + 'description' => $info['description'], + 'profile' => $profile ?? [], + 'traffic_rate' => $info['traffic_rate'], + 'is_udp' => $info['is_udp'], + 'is_display' => $info['is_display'], + 'is_ddns' => $info['is_ddns'], + 'relay_node_id' => $info['relay_node_id'], + 'port' => $info['port'] ?? 0, + 'push_port' => $info['push_port'], 'detection_type' => $info['detection_type'], - 'sort' => $info['sort'], - 'status' => $info['status'], + 'sort' => $info['sort'], + 'status' => $info['status'], ]; } } diff --git a/app/Http/Controllers/Admin/ReportController.php b/app/Http/Controllers/Admin/ReportController.php index 482f67f2..5b92e331 100644 --- a/app/Http/Controllers/Admin/ReportController.php +++ b/app/Http/Controllers/Admin/ReportController.php @@ -84,8 +84,8 @@ class ReportController extends Controller ->get()->transform(function ($item, $key) { return [ 'node_id' => $item->node_id, - 'date' => (int) $item->date, - 'total' => round($item->total / GB, 2), + 'date' => (int) $item->date, + 'total' => round($item->total / GB, 2), ]; })->toArray(); @@ -98,8 +98,8 @@ class ReportController extends Controller ->get()->transform(function ($item, $key) { return [ 'node_id' => $item->node_id, - 'date' => (int) $item->date, - 'total' => round($item->total / GB, 2), + 'date' => (int) $item->date, + 'total' => round($item->total / GB, 2), ]; })->toArray(); } diff --git a/app/Http/Controllers/Admin/RuleController.php b/app/Http/Controllers/Admin/RuleController.php index 95917061..073b4619 100644 --- a/app/Http/Controllers/Admin/RuleController.php +++ b/app/Http/Controllers/Admin/RuleController.php @@ -76,8 +76,8 @@ class RuleController extends Controller }); return view('admin.rule.log', [ - 'nodes' => Node::all(), - 'rules' => Rule::all(), + 'nodes' => Node::all(), + 'rules' => Rule::all(), 'ruleLogs' => $query->with('node:id,name', 'user:id,username', 'rule:id,name')->latest()->paginate(15)->appends($request->except('page')), ]); } diff --git a/app/Http/Controllers/Admin/ShopController.php b/app/Http/Controllers/Admin/ShopController.php index 4b2d74ef..e50a70d1 100644 --- a/app/Http/Controllers/Admin/ShopController.php +++ b/app/Http/Controllers/Admin/ShopController.php @@ -96,8 +96,8 @@ class ShopController extends Controller public function edit(Goods $good) { return view('admin.shop.info', [ - 'good' => $good, - 'levels' => Level::orderBy('level')->get(), + 'good' => $good, + 'levels' => Level::orderBy('level')->get(), 'categories' => GoodsCategory::all(), ]); } diff --git a/app/Http/Controllers/Admin/TicketController.php b/app/Http/Controllers/Admin/TicketController.php index 74e706ba..92f0c398 100644 --- a/app/Http/Controllers/Admin/TicketController.php +++ b/app/Http/Controllers/Admin/TicketController.php @@ -54,8 +54,8 @@ class TicketController extends Controller public function edit(Ticket $ticket) { return view('admin.ticket.reply', [ - 'ticket' => $ticket, - 'user' => $ticket->user, + 'ticket' => $ticket, + 'user' => $ticket->user, 'replyList' => $ticket->reply()->with('ticket:id,status', 'admin:id,username,qq', 'user:id,username,qq')->oldest()->get(), ]); } diff --git a/app/Http/Controllers/Admin/ToolsController.php b/app/Http/Controllers/Admin/ToolsController.php index 02f07380..52f52da3 100644 --- a/app/Http/Controllers/Admin/ToolsController.php +++ b/app/Http/Controllers/Admin/ToolsController.php @@ -75,18 +75,18 @@ class ToolsController extends Controller $data = []; foreach ($content->port_password as $port => $passwd) { $data[] = [ - 'u' => 0, - 'd' => 0, - 'enable' => 1, - 'method' => $method, - 'obfs' => $obfs, - 'obfs_param' => empty($obfs_param) ? '' : $obfs_param, - 'passwd' => $passwd, - 'port' => $port, - 'protocol' => $protocol, - 'protocol_param' => empty($protocol_param) ? '' : $protocol_param, + 'u' => 0, + 'd' => 0, + 'enable' => 1, + 'method' => $method, + 'obfs' => $obfs, + 'obfs_param' => empty($obfs_param) ? '' : $obfs_param, + 'passwd' => $passwd, + 'port' => $port, + 'protocol' => $protocol, + 'protocol_param' => empty($protocol_param) ? '' : $protocol_param, 'transfer_enable' => $transfer_enable, - 'user' => date('Ymd').'_IMPORT_'.$port, + 'user' => date('Ymd').'_IMPORT_'.$port, ]; } @@ -254,9 +254,6 @@ class ToolsController extends Controller /** * 计算文件行数. - * - * @param $file - * @return int */ private function countLine($file): int { diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 7aaa33cd..e47e52c8 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -77,9 +77,9 @@ class UserController extends Controller }); return view('admin.user.index', [ - 'userList' => $query->sortable(['id' => 'desc'])->paginate(15)->appends($request->except('page')), + 'userList' => $query->sortable(['id' => 'desc'])->paginate(15)->appends($request->except('page')), 'userGroups' => UserGroup::all()->pluck('name', 'id')->toArray(), - 'levels' => Level::all()->pluck('name', 'level')->toArray(), + 'levels' => Level::all()->pluck('name', 'level')->toArray(), ]); } @@ -131,9 +131,9 @@ class UserController extends Controller } return view('admin.user.info', [ - 'levels' => Level::orderBy('level')->get(), + 'levels' => Level::orderBy('level')->get(), 'userGroups' => UserGroup::orderBy('id')->get(), - 'roles' => $roles ?? null, + 'roles' => $roles ?? null, ]); } @@ -146,10 +146,10 @@ class UserController extends Controller } return view('admin.user.info', [ - 'user' => $user->load('inviter:id,username'), - 'levels' => Level::orderBy('level')->get(), + 'user' => $user->load('inviter:id,username'), + 'levels' => Level::orderBy('level')->get(), 'userGroups' => UserGroup::orderBy('id')->get(), - 'roles' => $roles ?? null, + 'roles' => $roles ?? null, ]); } @@ -282,7 +282,7 @@ class UserController extends Controller public function export(User $user) { return view('admin.user.export', [ - 'user' => $user, + 'user' => $user, 'nodeList' => Node::whereStatus(1)->orderByDesc('sort')->orderBy('id')->paginate(15)->appends(\request('page')), ]); } diff --git a/app/Http/Controllers/Api/Client/AuthController.php b/app/Http/Controllers/Api/Client/AuthController.php index 7f6a4317..1db676f0 100644 --- a/app/Http/Controllers/Api/Client/AuthController.php +++ b/app/Http/Controllers/Api/Client/AuthController.php @@ -45,9 +45,9 @@ class AuthController extends Controller auth()->login($user, true); return $this->succeed([ - 'token' => $user->createToken('client')->plainTextToken, + 'token' => $user->createToken('client')->plainTextToken, 'expire_in' => time() + config('session.lifetime') * Minute, - 'user' => $userService->getProfile(), + 'user' => $userService->getProfile(), ], null, ResponseEnum::USER_SERVICE_REGISTER_SUCCESS); } @@ -58,7 +58,7 @@ class AuthController extends Controller { if (self::$client === 'bob') { $rules = [ - 'email' => 'required|'.(sysConfig('username_type') ?? 'email'), + 'email' => 'required|'.(sysConfig('username_type') ?? 'email'), 'passwd' => 'required|string|min:6', ]; } else { @@ -86,9 +86,9 @@ class AuthController extends Controller $userService = UserService::getInstance(); return $this->succeed([ - 'token' => $user->createToken('client')->plainTextToken, + 'token' => $user->createToken('client')->plainTextToken, 'expire_in' => time() + config('session.lifetime') * Minute, - 'user' => $userService->getProfile(), + 'user' => $userService->getProfile(), ], null, ResponseEnum::USER_SERVICE_LOGIN_SUCCESS); } diff --git a/app/Http/Controllers/Api/Client/ClientController.php b/app/Http/Controllers/Api/Client/ClientController.php index 6c7969fb..4c9b81d7 100644 --- a/app/Http/Controllers/Api/Client/ClientController.php +++ b/app/Http/Controllers/Api/Client/ClientController.php @@ -62,17 +62,17 @@ class ClientController extends Controller } $data['info'] = [ - 'user' => $userInfo, - 'ssrSubToken' => $user->subscribe->code, - 'user_expire' => $user_expire, - 'subUrl' => route('sub', $user->subscribe->code), - 'baseUrl' => sysConfig('subscribe_domain') ?? sysConfig('website_url'), - 'ann' => $ann, - 'avatar' => $user->avatar, - 'usedTraffic' => flowAutoShow($total), - 'enableTraffic' => flowAutoShow($transfer_enable), - 'unUsedTraffic' => flowAutoShow($transfer_enable - $total), - 'reset_time' => now()->diffInDays($user->reset_time, false), + 'user' => $userInfo, + 'ssrSubToken' => $user->subscribe->code, + 'user_expire' => $user_expire, + 'subUrl' => route('sub', $user->subscribe->code), + 'baseUrl' => sysConfig('subscribe_domain') ?? sysConfig('website_url'), + 'ann' => $ann, + 'avatar' => $user->avatar, + 'usedTraffic' => flowAutoShow($total), + 'enableTraffic' => flowAutoShow($transfer_enable), + 'unUsedTraffic' => flowAutoShow($transfer_enable - $total), + 'reset_time' => now()->diffInDays($user->reset_time, false), 'android_index_button' => config('client.android_index_button'), ]; @@ -86,11 +86,11 @@ class ClientController extends Controller $data = []; foreach ($orders as $order) { $data[] = [ - 'id' => $order->id, + 'id' => $order->id, 'total_amount' => $order->amount * 100, - 'plan' => ['name' => $order->goods()->value('name') ?? '余额充值'], - 'status' => [-1 => 2, 0 => 0, 1 => 1, 2 => 3, 3 => 4][$order->status], - 'created_at' => strtotime($order->created_at), + 'plan' => ['name' => $order->goods()->value('name') ?? '余额充值'], + 'status' => [-1 => 2, 0 => 0, 1 => 1, 2 => 3, 3 => 4][$order->status], + 'created_at' => strtotime($order->created_at), ]; } @@ -104,8 +104,8 @@ class ClientController extends Controller return $this->succeed(null, [ 'arr' => [ 'todayUsedTraffic' => flowAutoShow($user->d), - 'lastUsedTraffic' => flowAutoShow($user->u), - 'unUsedTraffic' => flowAutoShow($user->transfer_enable - $user->d - $user->u), + 'lastUsedTraffic' => flowAutoShow($user->u), + 'unUsedTraffic' => flowAutoShow($user->transfer_enable - $user->d - $user->u), ], ]); } @@ -134,7 +134,7 @@ class ClientController extends Controller $code = $user->invites()->whereStatus(0)->value('code'); $data['invite_gift'] = trans('user.invite.promotion', [ - 'traffic' => $referral_traffic, + 'traffic' => $referral_traffic, 'referral_percent' => $referral_percent * 100, ]); @@ -266,14 +266,14 @@ class ClientController extends Controller config(['client.notice.title' => $ann->title, 'client.notice.content' => $ann->content]); } config([ - 'client.configured' => true, - 'client.name' => sysConfig('website_name'), + 'client.configured' => true, + 'client.name' => sysConfig('website_name'), 'client.node_class_name' => Level::all()->pluck('name', 'level')->toArray(), - 'client.baseUrl' => sysConfig('website_url'), - 'client.subscribe_url' => sysConfig('subscribe_domain') ?: sysConfig('website_url'), - 'client.checkinMin' => sysConfig('min_rand_traffic'), - 'client.checkinMax' => sysConfig('max_rand_traffic'), - 'client.invite_gift' => sysConfig('default_traffic') / 1024, + 'client.baseUrl' => sysConfig('website_url'), + 'client.subscribe_url' => sysConfig('subscribe_domain') ?: sysConfig('website_url'), + 'client.checkinMin' => sysConfig('min_rand_traffic'), + 'client.checkinMax' => sysConfig('max_rand_traffic'), + 'client.invite_gift' => sysConfig('default_traffic') / 1024, ]); } diff --git a/app/Http/Controllers/Api/WebApi/CoreController.php b/app/Http/Controllers/Api/WebApi/CoreController.php index 6ae0bd6b..e2a4df41 100644 --- a/app/Http/Controllers/Api/WebApi/CoreController.php +++ b/app/Http/Controllers/Api/WebApi/CoreController.php @@ -27,8 +27,8 @@ class CoreController extends Controller $data = array_map('intval', $validator->validated()); if ($node->heartbeats()->create([ - 'uptime' => $data['uptime'], - 'load' => implode(' ', [$data['cpu'] / 100, $data['mem'] / 100, $data['disk'] / 100]), + 'uptime' => $data['uptime'], + 'load' => implode(' ', [$data['cpu'] / 100, $data['mem'] / 100, $data['disk'] / 100]), 'log_time' => time(), ])) { return $this->succeed(); @@ -99,8 +99,8 @@ class CoreController extends Controller if ($ruleGroup = $node->ruleGroup) { foreach ($ruleGroup->rules as $rule) { $data[] = [ - 'id' => $rule->id, - 'type' => $rule->type_api_label, + 'id' => $rule->id, + 'type' => $rule->type_api_label, 'pattern' => $rule->pattern, ]; } diff --git a/app/Http/Controllers/Api/WebApi/SSController.php b/app/Http/Controllers/Api/WebApi/SSController.php index 7935d220..3fb7ba69 100644 --- a/app/Http/Controllers/Api/WebApi/SSController.php +++ b/app/Http/Controllers/Api/WebApi/SSController.php @@ -14,9 +14,9 @@ class SSController extends Controller public function getNodeInfo(Node $node): JsonResponse // 获取节点信息 { $data = [ - 'id' => $node->id, - 'method' => $node->profile['method'] ?? '', - 'speed_limit' => $node->getRawOriginal('speed_limit'), + 'id' => $node->id, + 'method' => $node->profile['method'] ?? '', + 'speed_limit' => $node->getRawOriginal('speed_limit'), 'client_limit' => $node->client_limit, 'redirect_url' => sysConfig('redirect_url'), ]; @@ -32,11 +32,11 @@ class SSController extends Controller { foreach ($node->users() as $user) { $data[] = [ - 'uid' => $user->id, - 'port' => $user->port, - 'passwd' => $user->passwd, + 'uid' => $user->id, + 'port' => $user->port, + 'passwd' => $user->passwd, 'speed_limit' => $user->getRawOriginal('speed_limit'), - 'enable' => $user->enable, + 'enable' => $user->enable, ]; } diff --git a/app/Http/Controllers/Api/WebApi/SSRController.php b/app/Http/Controllers/Api/WebApi/SSRController.php index e597161b..068d3beb 100644 --- a/app/Http/Controllers/Api/WebApi/SSRController.php +++ b/app/Http/Controllers/Api/WebApi/SSRController.php @@ -21,15 +21,15 @@ class SSRController extends Controller { foreach ($node->users() as $user) { $data[] = [ - 'uid' => $user->id, - 'port' => $user->port, - 'passwd' => $user->passwd, - 'method' => $user->method, - 'protocol' => $user->protocol, - 'obfs' => $user->obfs, - 'obfs_param' => $node->profile['obfs_param'] ?? '', + 'uid' => $user->id, + 'port' => $user->port, + 'passwd' => $user->passwd, + 'method' => $user->method, + 'protocol' => $user->protocol, + 'obfs' => $user->obfs, + 'obfs_param' => $node->profile['obfs_param'] ?? '', 'speed_limit' => $user->getRawOriginal('speed_limit'), - 'enable' => $user->enable, + 'enable' => $user->enable, ]; } diff --git a/app/Http/Controllers/Api/WebApi/TrojanController.php b/app/Http/Controllers/Api/WebApi/TrojanController.php index 20b743ef..ce051ba6 100644 --- a/app/Http/Controllers/Api/WebApi/TrojanController.php +++ b/app/Http/Controllers/Api/WebApi/TrojanController.php @@ -14,15 +14,15 @@ class TrojanController extends Controller public function getNodeInfo(Node $node): JsonResponse // 获取节点信息 { return $this->succeed([ - 'id' => $node->id, - 'is_udp' => (bool) $node->is_udp, - 'speed_limit' => $node->getRawOriginal('speed_limit'), + 'id' => $node->id, + 'is_udp' => (bool) $node->is_udp, + 'speed_limit' => $node->getRawOriginal('speed_limit'), 'client_limit' => $node->client_limit, - 'push_port' => $node->push_port, + 'push_port' => $node->push_port, 'redirect_url' => sysConfig('redirect_url'), - 'trojan_port' => $node->port, - 'secret' => $node->auth->secret, - 'license' => sysConfig('trojan_license'), + 'trojan_port' => $node->port, + 'secret' => $node->auth->secret, + 'license' => sysConfig('trojan_license'), ]); } @@ -30,8 +30,8 @@ class TrojanController extends Controller { foreach ($node->users() as $user) { $data[] = [ - 'uid' => $user->id, - 'password' => $user->passwd, + 'uid' => $user->id, + 'password' => $user->passwd, 'speed_limit' => $user->getRawOriginal('speed_limit'), ]; } diff --git a/app/Http/Controllers/Api/WebApi/V2RayController.php b/app/Http/Controllers/Api/WebApi/V2RayController.php index 93c5ca01..5ec1b967 100644 --- a/app/Http/Controllers/Api/WebApi/V2RayController.php +++ b/app/Http/Controllers/Api/WebApi/V2RayController.php @@ -18,24 +18,24 @@ class V2RayController extends Controller $tlsProvider = ! empty($node->profile['tls_provider']) ? $node->profile['tls_provider'] : sysConfig('v2ray_tls_provider'); return $this->succeed([ - 'id' => $node->id, - 'is_udp' => (bool) $node->is_udp, - 'speed_limit' => $node->getRawOriginal('speed_limit'), - 'client_limit' => $node->client_limit, - 'push_port' => $node->push_port, - 'redirect_url' => (string) sysConfig('redirect_url', ''), - 'secret' => $node->auth->secret, - 'key' => $cert ? $cert->key : '', - 'pem' => $cert ? $cert->pem : '', - 'v2_license' => (string) sysConfig('v2ray_license'), - 'v2_alter_id' => (int) $node->profile['v2_alter_id'], - 'v2_port' => $node->port, - 'v2_method' => $node->profile['method'] ?? '', - 'v2_net' => $node->profile['v2_net'] ?? '', - 'v2_type' => $node->profile['v2_type'] ?? '', - 'v2_host' => $node->profile['v2_host'] ?? '', - 'v2_path' => $node->profile['v2_path'] ?? '', - 'v2_tls' => (bool) ($node->profile['v2_tls'] ?? false), + 'id' => $node->id, + 'is_udp' => (bool) $node->is_udp, + 'speed_limit' => $node->getRawOriginal('speed_limit'), + 'client_limit' => $node->client_limit, + 'push_port' => $node->push_port, + 'redirect_url' => (string) sysConfig('redirect_url', ''), + 'secret' => $node->auth->secret, + 'key' => $cert ? $cert->key : '', + 'pem' => $cert ? $cert->pem : '', + 'v2_license' => (string) sysConfig('v2ray_license'), + 'v2_alter_id' => (int) $node->profile['v2_alter_id'], + 'v2_port' => $node->port, + 'v2_method' => $node->profile['method'] ?? '', + 'v2_net' => $node->profile['v2_net'] ?? '', + 'v2_type' => $node->profile['v2_type'] ?? '', + 'v2_host' => $node->profile['v2_host'] ?? '', + 'v2_path' => $node->profile['v2_path'] ?? '', + 'v2_tls' => (bool) ($node->profile['v2_tls'] ?? false), 'v2_tls_provider' => $tlsProvider, ]); } @@ -44,8 +44,8 @@ class V2RayController extends Controller { foreach ($node->users() as $user) { $data[] = [ - 'uid' => $user->id, - 'vmess_uid' => $user->vmess_id, + 'uid' => $user->id, + 'vmess_uid' => $user->vmess_id, 'speed_limit' => $user->getRawOriginal('speed_limit'), ]; } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 347e87df..a88cc19e 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -324,7 +324,6 @@ class AuthController extends Controller * * @param string|null $code 邀请码 * @param int|null $aff URL中的aff参数 - * @return array */ private function getAff($code = null, $aff = null): array { diff --git a/app/Http/Controllers/MessageController.php b/app/Http/Controllers/MessageController.php index 4da9949f..28005921 100644 --- a/app/Http/Controllers/MessageController.php +++ b/app/Http/Controllers/MessageController.php @@ -3,7 +3,6 @@ namespace App\Http\Controllers; use App\Models\NotificationLog; -use Illuminate\Http\Request; use Illuminate\Mail\Markdown; class MessageController extends Controller diff --git a/app/Http/Controllers/OAuthController.php b/app/Http/Controllers/OAuthController.php index 9ca9b3a9..d384a0b3 100644 --- a/app/Http/Controllers/OAuthController.php +++ b/app/Http/Controllers/OAuthController.php @@ -140,7 +140,7 @@ class OAuthController extends Controller if ($user) { $user->userAuths()->create([ - 'type' => $type, + 'type' => $type, 'identifier' => $info->getId(), 'credential' => $info->token, ]); diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 72b83dc5..9f9acff7 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -165,14 +165,14 @@ class PaymentController extends Controller // 生成订单 try { $newOrder = Order::create([ - 'sn' => date('ymdHis').random_int(100000, 999999), - 'user_id' => auth()->id(), - 'goods_id' => $credit ? null : $goods_id, - 'coupon_id' => $coupon->id ?? null, + 'sn' => date('ymdHis').random_int(100000, 999999), + 'user_id' => auth()->id(), + 'goods_id' => $credit ? null : $goods_id, + 'coupon_id' => $coupon->id ?? null, 'origin_amount' => $credit ?: ($goods->price ?? 0), - 'amount' => $amount, - 'pay_type' => $pay_type, - 'pay_way' => self::$method, + 'amount' => $amount, + 'pay_type' => $pay_type, + 'pay_way' => self::$method, ]); // 使用优惠券,减少可使用次数 @@ -210,10 +210,10 @@ class PaymentController extends Controller $goods = $payment->order->goods; return view('user.components.payment.default', [ - 'payment' => $payment, - 'name' => $goods->name ?? trans('user.recharge_credit'), - 'days' => $goods->days ?? 0, - 'pay_type' => $payment->order->pay_type_label ?: 0, + 'payment' => $payment, + 'name' => $goods->name ?? trans('user.recharge_credit'), + 'days' => $goods->days ?? 0, + 'pay_type' => $payment->order->pay_type_label ?: 0, 'pay_type_icon' => $payment->order->pay_type_icon, ]); } diff --git a/app/Http/Controllers/TelegramController.php b/app/Http/Controllers/TelegramController.php index 98649f93..4e83bf11 100644 --- a/app/Http/Controllers/TelegramController.php +++ b/app/Http/Controllers/TelegramController.php @@ -111,7 +111,7 @@ class TelegramController extends Controller } $telegramService = new TelegramService(); if (! $oauth = UserOauth::query()->where([ - 'type' => 'telegram', + 'type' => 'telegram', 'identifier' => $msg->chat_id, ])->first()) { $this->help(); diff --git a/app/Http/Controllers/User/AffiliateController.php b/app/Http/Controllers/User/AffiliateController.php index 0bb7f25d..dd35ba71 100644 --- a/app/Http/Controllers/User/AffiliateController.php +++ b/app/Http/Controllers/User/AffiliateController.php @@ -9,7 +9,6 @@ use App\Models\ReferralApply; use App\Models\ReferralLog; use App\Services\UserService; use Auth; -use Hashids\Hashids; use Illuminate\Http\JsonResponse; use Response; @@ -23,15 +22,15 @@ class AffiliateController extends Controller } return view('user.referral', [ - 'referral_traffic' => flowAutoShow(sysConfig('referral_traffic') * MB), - 'referral_percent' => sysConfig('referral_percent'), - 'referral_money' => Helpers::getPriceTag(sysConfig('referral_money')), - 'totalAmount' => ReferralLog::uid()->sum('commission') / 100, - 'canAmount' => Helpers::getPriceTag(ReferralLog::uid()->whereStatus(0)->sum('commission') / 100), - 'aff_link' => UserService::getInstance()->inviteURI(), - 'referralLogList' => ReferralLog::uid()->with('invitee:id,username')->latest()->paginate(10, ['*'], 'log_page'), + 'referral_traffic' => flowAutoShow(sysConfig('referral_traffic') * MB), + 'referral_percent' => sysConfig('referral_percent'), + 'referral_money' => Helpers::getPriceTag(sysConfig('referral_money')), + 'totalAmount' => ReferralLog::uid()->sum('commission') / 100, + 'canAmount' => Helpers::getPriceTag(ReferralLog::uid()->whereStatus(0)->sum('commission') / 100), + 'aff_link' => UserService::getInstance()->inviteURI(), + 'referralLogList' => ReferralLog::uid()->with('invitee:id,username')->latest()->paginate(10, ['*'], 'log_page'), 'referralApplyList' => ReferralApply::uid()->latest()->paginate(10, ['*'], 'apply_page'), - 'referralUserList' => Auth::getUser()->invitees()->select(['username', 'created_at'])->latest()->paginate(10, ['*'], 'user_page'), + 'referralUserList' => Auth::getUser()->invitees()->select(['username', 'created_at'])->latest()->paginate(10, ['*'], 'user_page'), ]); } diff --git a/app/Http/Controllers/User/SubscribeController.php b/app/Http/Controllers/User/SubscribeController.php index 1ec66ba0..d2c0961a 100644 --- a/app/Http/Controllers/User/SubscribeController.php +++ b/app/Http/Controllers/User/SubscribeController.php @@ -14,6 +14,7 @@ use Response; class SubscribeController extends Controller { private static $subType; + private $proxyServer; // 通过订阅码获取订阅信息 diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 8e4cf879..aaad7904 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -64,20 +64,20 @@ class UserController extends Controller } return view('user.index', array_merge([ - 'remainDays' => now()->diffInDays($user->expired_at, false), - 'resetDays' => $user->reset_time ? now()->diffInDays($user->reset_time, false) : null, - 'unusedTraffic' => flowAutoShow($unusedTraffic), - 'expireTime' => $user->expiration_date, - 'banedTime' => $user->ban_time, - 'unusedPercent' => $totalTransfer > 0 ? round($unusedTraffic / $totalTransfer, 2) * 100 : 0, - 'announcements' => Article::type(2)->lang()->latest()->simplePaginate(1), // 公告 + 'remainDays' => now()->diffInDays($user->expired_at, false), + 'resetDays' => $user->reset_time ? now()->diffInDays($user->reset_time, false) : null, + 'unusedTraffic' => flowAutoShow($unusedTraffic), + 'expireTime' => $user->expiration_date, + 'banedTime' => $user->ban_time, + 'unusedPercent' => $totalTransfer > 0 ? round($unusedTraffic / $totalTransfer, 2) * 100 : 0, + 'announcements' => Article::type(2)->lang()->latest()->simplePaginate(1), // 公告 'isTrafficWarning' => $user->isTrafficWarning(), // 流量异常判断 - 'paying_user' => $userService->isActivePaying(), // 付费用户判断 - 'userLoginLog' => $user->loginLogs()->latest()->first(), // 近期登录日志 + 'paying_user' => $userService->isActivePaying(), // 付费用户判断 + 'userLoginLog' => $user->loginLogs()->latest()->first(), // 近期登录日志 'subscribe_status' => $user->subscribe->status, - 'subMsg' => $user->subscribe->ban_desc, - 'subType' => $subType, - 'subUrl' => route('sub', $user->subscribe->code), + 'subMsg' => $user->subscribe->ban_desc, + 'subType' => $subType, + 'subUrl' => route('sub', $user->subscribe->code), ], $this->dataFlowChart($user->id))); } @@ -223,9 +223,9 @@ class UserController extends Controller return view('user.services', [ 'chargeGoodsList' => Goods::type(3)->orderBy('price')->get(), - 'goodsList' => $goodsList, - 'renewTraffic' => $renewPrice ? Helpers::getPriceTag($renewPrice) : 0, - 'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0, + 'goodsList' => $goodsList, + 'renewTraffic' => $renewPrice ? Helpers::getPriceTag($renewPrice) : 0, + 'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0, ]); } @@ -262,7 +262,7 @@ class UserController extends Controller public function invoices(Request $request) { return view('user.invoices', [ - 'orderList' => auth()->user()->orders()->with(['goods', 'payment'])->orderByDesc('id')->paginate(10)->appends($request->except('page')), + 'orderList' => auth()->user()->orders()->with(['goods', 'payment'])->orderByDesc('id')->paginate(10)->appends($request->except('page')), 'prepaidPlan' => Order::userPrepay()->exists(), ]); } @@ -356,7 +356,7 @@ class UserController extends Controller } return view('user.replyTicket', [ - 'ticket' => $ticket, + 'ticket' => $ticket, 'replyList' => $ticket->reply()->with('ticket:id,status', 'admin:id,username,qq', 'user:id,username,qq')->oldest()->get(), ]); } @@ -381,8 +381,8 @@ class UserController extends Controller } return view('user.invite', [ - 'num' => auth()->user()->invite_num, // 还可以生成的邀请码数量 - 'inviteList' => Invite::uid()->with(['invitee', 'inviter'])->paginate(10), // 邀请码列表 + 'num' => auth()->user()->invite_num, // 还可以生成的邀请码数量 + 'inviteList' => Invite::uid()->with(['invitee', 'inviter'])->paginate(10), // 邀请码列表 'referral_traffic' => flowAutoShow(sysConfig('referral_traffic') * MB), 'referral_percent' => sysConfig('referral_percent'), ]); @@ -396,7 +396,7 @@ class UserController extends Controller return Response::json(['status' => 'fail', 'message' => trans('user.invite.generate_failed')]); } $invite = $user->invites()->create([ - 'code' => strtoupper(mb_substr(md5(microtime().Str::random()), 8, 12)), + 'code' => strtoupper(mb_substr(md5(microtime().Str::random()), 8, 12)), 'dateline' => date('Y-m-d H:i:s', strtotime(sysConfig('user_invite_days').' days')), ]); if ($invite) { @@ -424,8 +424,8 @@ class UserController extends Controller } $data = [ - 'name' => $ret->name, - 'type' => $ret->type, + 'name' => $ret->name, + 'type' => $ret->type, 'value' => $ret->type === 2 ? $ret->value : Helpers::getPriceTag($ret->value), ]; @@ -441,8 +441,8 @@ class UserController extends Controller return view('user.buy', [ 'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0, - 'activePlan' => Order::userActivePlan()->exists(), - 'goods' => $good, + 'activePlan' => Order::userActivePlan()->exists(), + 'goods' => $good, ]); } @@ -466,10 +466,10 @@ class UserController extends Controller $subscribe = auth()->user()->subscribe; return view('user.knowledge', [ - 'subType' => $data, - 'subUrl' => route('sub', $subscribe->code), - 'subStatus' => $subscribe->status, - 'subMsg' => $subscribe->ban_desc, + 'subType' => $data, + 'subUrl' => route('sub', $subscribe->code), + 'subStatus' => $subscribe->status, + 'subMsg' => $subscribe->ban_desc, 'knowledges' => Article::type(1)->lang()->orderByDesc('sort')->latest()->get()->groupBy('category'), ]); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index d7cdc289..7f47002b 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -105,22 +105,22 @@ class Kernel extends HttpKernel * @var array */ protected $routeMiddleware = [ - 'auth' => Authenticate::class, - 'auth.basic' => AuthenticateWithBasicAuth::class, - 'auth.client' => ClientAuthenticate::class, - 'bindings' => SubstituteBindings::class, - 'cache.headers' => SetCacheHeaders::class, - 'can' => Authorize::class, - 'guest' => RedirectIfAuthenticated::class, + 'auth' => Authenticate::class, + 'auth.basic' => AuthenticateWithBasicAuth::class, + 'auth.client' => ClientAuthenticate::class, + 'bindings' => SubstituteBindings::class, + 'cache.headers' => SetCacheHeaders::class, + 'can' => Authorize::class, + 'guest' => RedirectIfAuthenticated::class, 'password.confirm' => RequirePassword::class, - 'signed' => ValidateSignature::class, - 'telegram' => Telegram::class, - 'throttle' => ThrottleRequests::class, - 'verified' => EnsureEmailIsVerified::class, - 'webApi' => WebApi::class, - 'isMaintenance' => isMaintenance::class, - 'isSecurity' => isSecurity::class, - 'isForbidden' => isForbidden::class, - 'affiliate' => Affiliate::class, + 'signed' => ValidateSignature::class, + 'telegram' => Telegram::class, + 'throttle' => ThrottleRequests::class, + 'verified' => EnsureEmailIsVerified::class, + 'webApi' => WebApi::class, + 'isMaintenance' => isMaintenance::class, + 'isSecurity' => isSecurity::class, + 'isForbidden' => isForbidden::class, + 'affiliate' => Affiliate::class, ]; } diff --git a/app/Http/Middleware/Affiliate.php b/app/Http/Middleware/Affiliate.php index ae36ef56..4dbc9f31 100644 --- a/app/Http/Middleware/Affiliate.php +++ b/app/Http/Middleware/Affiliate.php @@ -11,8 +11,6 @@ class Affiliate /** * 返利识别. * - * @param Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) diff --git a/app/Http/Middleware/ClientAuthenticate.php b/app/Http/Middleware/ClientAuthenticate.php index 8b7a610e..c1db444e 100644 --- a/app/Http/Middleware/ClientAuthenticate.php +++ b/app/Http/Middleware/ClientAuthenticate.php @@ -15,7 +15,6 @@ class ClientAuthenticate * Handle an incoming request. * * @param Request $request - * @param Closure $next * @return mixed */ public function handle($request, Closure $next) diff --git a/app/Http/Middleware/Permission.php b/app/Http/Middleware/Permission.php index fcf45a57..b611931b 100644 --- a/app/Http/Middleware/Permission.php +++ b/app/Http/Middleware/Permission.php @@ -12,7 +12,6 @@ class Permission * Handle an incoming request. * * @param Request $request - * @param Closure $next * @param null $guard * @return mixed */ diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index b8a84099..d7ff5e9a 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -13,7 +13,6 @@ class RedirectIfAuthenticated * Handle an incoming request. * * @param Request $request - * @param Closure $next * @param string|null $guard * @return mixed */ diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php index 9f2508f1..f1e0598c 100644 --- a/app/Http/Middleware/SetLocale.php +++ b/app/Http/Middleware/SetLocale.php @@ -13,8 +13,6 @@ class SetLocale /** * 变更语言 * - * @param Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) diff --git a/app/Http/Middleware/Telegram.php b/app/Http/Middleware/Telegram.php index 1d18f992..ecad6fa7 100644 --- a/app/Http/Middleware/Telegram.php +++ b/app/Http/Middleware/Telegram.php @@ -9,8 +9,6 @@ class Telegram /** * Handle an incoming request. * - * @param $request - * @param Closure $next * @return mixed */ public function handle($request, Closure $next) diff --git a/app/Http/Middleware/WebApi.php b/app/Http/Middleware/WebApi.php index c3add2ab..c5176343 100644 --- a/app/Http/Middleware/WebApi.php +++ b/app/Http/Middleware/WebApi.php @@ -5,19 +5,18 @@ namespace App\Http\Middleware; use App\Helpers\ResponseEnum; use App\Helpers\WebApiResponse; use Closure; +use Illuminate\Http\Request; class WebApi { /** * Handle an incoming request. * - * @param $request - * @param Closure $next * @return mixed */ use WebApiResponse; - public function handle($request, Closure $next) + public function handle(Request $request, Closure $next) { $node = $request->node; $key = $request->header('key'); diff --git a/app/Http/Middleware/isForbidden.php b/app/Http/Middleware/isForbidden.php index a81842b9..9ed07a87 100644 --- a/app/Http/Middleware/isForbidden.php +++ b/app/Http/Middleware/isForbidden.php @@ -14,12 +14,10 @@ class isForbidden /** * 限制机器人、指定IP访问. * - * @param Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) - { + { // 限制机器人、指定IP访问. // 拒绝机器人访问 if (sysConfig('is_forbid_robot') && Agent::isRobot()) { Log::warning('识别到机器人('.IP::getClientIp().')访问'); diff --git a/app/Http/Middleware/isLogin.php b/app/Http/Middleware/isLogin.php index 09a13ac8..bafafd4c 100644 --- a/app/Http/Middleware/isLogin.php +++ b/app/Http/Middleware/isLogin.php @@ -11,8 +11,6 @@ class isLogin /** * 校验是否已登录. * - * @param Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) diff --git a/app/Http/Middleware/isMaintenance.php b/app/Http/Middleware/isMaintenance.php index c243e393..a3b1dca6 100644 --- a/app/Http/Middleware/isMaintenance.php +++ b/app/Http/Middleware/isMaintenance.php @@ -10,8 +10,6 @@ class isMaintenance /** * 校验是否开启维护模式. * - * @param Request $request - * @param Closure $next * @return mixed */ public function handle(Request $request, Closure $next) diff --git a/app/Http/Middleware/isSecurity.php b/app/Http/Middleware/isSecurity.php index 3b49bbfd..548232b1 100644 --- a/app/Http/Middleware/isSecurity.php +++ b/app/Http/Middleware/isSecurity.php @@ -13,8 +13,6 @@ class isSecurity /** * 是否需要安全码才访问(仅用于登录页). * - * @param $request - * @param Closure $next * @return mixed */ public function handle($request, Closure $next) diff --git a/app/Http/Requests/Admin/ArticleRequest.php b/app/Http/Requests/Admin/ArticleRequest.php index c656b8d5..5aa7eace 100644 --- a/app/Http/Requests/Admin/ArticleRequest.php +++ b/app/Http/Requests/Admin/ArticleRequest.php @@ -9,13 +9,13 @@ class ArticleRequest extends FormRequest public function rules(): array { return [ - 'type' => 'required|numeric|between:1,4', - 'title' => 'required|string', + 'type' => 'required|numeric|between:1,4', + 'title' => 'required|string', 'language' => 'required|string', 'category' => 'nullable|string', - 'sort' => 'nullable|numeric', - 'logo' => 'nullable|exclude_if:type,4|image', - 'content' => 'required', + 'sort' => 'nullable|numeric', + 'logo' => 'nullable|exclude_if:type,4|image', + 'content' => 'required', ]; } } diff --git a/app/Http/Requests/Admin/CertRequest.php b/app/Http/Requests/Admin/CertRequest.php index 210818d2..74302ebe 100644 --- a/app/Http/Requests/Admin/CertRequest.php +++ b/app/Http/Requests/Admin/CertRequest.php @@ -15,8 +15,8 @@ class CertRequest extends FormRequest return [ 'domain' => 'required|string|unique:node_certificate,domain'.$unq_domain, - 'key' => 'nullable|string', - 'pem' => 'nullable|string', + 'key' => 'nullable|string', + 'pem' => 'nullable|string', ]; } } diff --git a/app/Http/Requests/Admin/CouponRequest.php b/app/Http/Requests/Admin/CouponRequest.php index bd1278fb..175eb7ad 100644 --- a/app/Http/Requests/Admin/CouponRequest.php +++ b/app/Http/Requests/Admin/CouponRequest.php @@ -9,27 +9,27 @@ class CouponRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required|string', - 'sn' => 'exclude_unless:type,3|unique:coupon', - 'logo' => 'nullable|image', - 'type' => 'required|numeric|between:1,3', - 'priority' => 'nullable|numeric|min:0|max:255', - 'usable_times' => 'nullable|numeric|min:1', - 'value' => 'required|numeric|min:0', - 'minimum' => 'nullable|numeric', - 'used' => 'nullable|numeric', - 'levels' => 'nullable|array', - 'groups' => 'nullable|array', - 'users_whitelist' => 'nullable|string', - 'users_blacklist' => 'nullable|string', + 'name' => 'required|string', + 'sn' => 'exclude_unless:type,3|unique:coupon', + 'logo' => 'nullable|image', + 'type' => 'required|numeric|between:1,3', + 'priority' => 'nullable|numeric|min:0|max:255', + 'usable_times' => 'nullable|numeric|min:1', + 'value' => 'required|numeric|min:0', + 'minimum' => 'nullable|numeric', + 'used' => 'nullable|numeric', + 'levels' => 'nullable|array', + 'groups' => 'nullable|array', + 'users_whitelist' => 'nullable|string', + 'users_blacklist' => 'nullable|string', 'services_blacklist' => 'nullable|string', 'services_whitelist' => 'nullable|string', - 'coupon' => 'nullable', - 'order' => 'nullable', - 'days' => 'nullable|numeric', - 'num' => 'required|numeric|min:1', - 'start_time' => 'required|date|before_or_equal:end_time', - 'end_time' => 'required|date|after_or_equal:start_time', + 'coupon' => 'nullable', + 'order' => 'nullable', + 'days' => 'nullable|numeric', + 'num' => 'required|numeric|min:1', + 'start_time' => 'required|date|before_or_equal:end_time', + 'end_time' => 'required|date|after_or_equal:start_time', ]; } } diff --git a/app/Http/Requests/Admin/NodeRequest.php b/app/Http/Requests/Admin/NodeRequest.php index d16f0259..13e1502f 100644 --- a/app/Http/Requests/Admin/NodeRequest.php +++ b/app/Http/Requests/Admin/NodeRequest.php @@ -9,44 +9,44 @@ class NodeRequest extends FormRequest public function rules(): array { return [ - 'is_ddns' => 'required|boolean', - 'name' => 'required|string', - 'server' => 'required_if:is_ddns,1|nullable|ends_with:'.implode(',', config('domains')), - 'ip' => 'required_if:is_ddns,0|nullable', - 'ipv6' => 'nullable', - 'push_port' => 'numeric|between:1,65535|different:port', - 'traffic_rate' => 'required|numeric|min:0', - 'level' => 'required|exists:level,level', - 'rule_group_id' => 'nullable|exists:rule_group,id', - 'speed_limit' => 'required|numeric|min:0', - 'client_limit' => 'required|numeric|min:0', - 'labels' => 'nullable|exists:label,id', - 'country_code' => 'required|exists:country,code', - 'description' => 'nullable|string', - 'sort' => 'required|numeric|between:0,255', - 'is_udp' => 'required|boolean', - 'status' => 'required|boolean', - 'type' => 'required|numeric|between:0,4', - 'method' => 'required|exists:ss_config,name', - 'protocol' => 'required_if:type,1,4|exists:ss_config,name', + 'is_ddns' => 'required|boolean', + 'name' => 'required|string', + 'server' => 'required_if:is_ddns,1|nullable|ends_with:'.implode(',', config('domains')), + 'ip' => 'required_if:is_ddns,0|nullable', + 'ipv6' => 'nullable', + 'push_port' => 'numeric|between:1,65535|different:port', + 'traffic_rate' => 'required|numeric|min:0', + 'level' => 'required|exists:level,level', + 'rule_group_id' => 'nullable|exists:rule_group,id', + 'speed_limit' => 'required|numeric|min:0', + 'client_limit' => 'required|numeric|min:0', + 'labels' => 'nullable|exists:label,id', + 'country_code' => 'required|exists:country,code', + 'description' => 'nullable|string', + 'sort' => 'required|numeric|between:0,255', + 'is_udp' => 'required|boolean', + 'status' => 'required|boolean', + 'type' => 'required|numeric|between:0,4', + 'method' => 'required|exists:ss_config,name', + 'protocol' => 'required_if:type,1,4|exists:ss_config,name', 'protocol_param' => 'nullable|string', - 'obfs' => 'required_if:type,1,4|exists:ss_config,name', - 'obfs_param' => 'nullable|string', - 'is_display' => 'required|numeric|between:0,3', + 'obfs' => 'required_if:type,1,4|exists:ss_config,name', + 'obfs_param' => 'nullable|string', + 'is_display' => 'required|numeric|between:0,3', 'detection_type' => 'required|numeric|between:0,3', - 'single' => 'required|boolean', - 'port' => 'required_unless:single,"0"|numeric|between:1,65535|different:push_port', - 'passwd' => 'exclude_unless:type,1,type,4|required_if:single,1|string|nullable', - 'v2_alter_id' => 'nullable|numeric|between:0,65535', - 'v2_method' => 'required_if:type,2', - 'v2_net' => 'required_if:type,2', - 'v2_type' => 'required_if:type,2', - 'v2_host' => 'nullable|string', - 'v2_path' => 'nullable|string', - 'v2_sni' => 'nullable|string', - 'v2_tls' => 'required_if:type,2|boolean', - 'tls_provider' => 'nullable|json', - 'relay_node_id' => 'nullable|exists:node,id', + 'single' => 'required|boolean', + 'port' => 'required_unless:single,"0"|numeric|between:1,65535|different:push_port', + 'passwd' => 'exclude_unless:type,1,type,4|required_if:single,1|string|nullable', + 'v2_alter_id' => 'nullable|numeric|between:0,65535', + 'v2_method' => 'required_if:type,2', + 'v2_net' => 'required_if:type,2', + 'v2_type' => 'required_if:type,2', + 'v2_host' => 'nullable|string', + 'v2_path' => 'nullable|string', + 'v2_sni' => 'nullable|string', + 'v2_tls' => 'required_if:type,2|boolean', + 'tls_provider' => 'nullable|json', + 'relay_node_id' => 'nullable|exists:node,id', ]; } diff --git a/app/Http/Requests/Admin/PermissionRequest.php b/app/Http/Requests/Admin/PermissionRequest.php index 031baf61..a9bef815 100644 --- a/app/Http/Requests/Admin/PermissionRequest.php +++ b/app/Http/Requests/Admin/PermissionRequest.php @@ -9,7 +9,7 @@ class PermissionRequest extends FormRequest public function rules() { return [ - 'name' => 'required|string', + 'name' => 'required|string', 'description' => 'required|string', ]; } diff --git a/app/Http/Requests/Admin/RbacRequest.php b/app/Http/Requests/Admin/RbacRequest.php index a61fc79c..b10d6d56 100644 --- a/app/Http/Requests/Admin/RbacRequest.php +++ b/app/Http/Requests/Admin/RbacRequest.php @@ -9,7 +9,7 @@ class RbacRequest extends FormRequest public function rules() { return [ - 'name' => 'required|string', + 'name' => 'required|string', 'description' => 'required|string', ]; } diff --git a/app/Http/Requests/Admin/RoleRequest.php b/app/Http/Requests/Admin/RoleRequest.php index e72abecf..f3cbb790 100644 --- a/app/Http/Requests/Admin/RoleRequest.php +++ b/app/Http/Requests/Admin/RoleRequest.php @@ -14,7 +14,7 @@ class RoleRequest extends FormRequest } return [ - 'name' => 'required|string|unique:roles,name'.$unq_name, + 'name' => 'required|string|unique:roles,name'.$unq_name, 'description' => 'required|string', 'permissions' => 'nullable|exists:permissions,name', ]; diff --git a/app/Http/Requests/Admin/RuleGroupRequest.php b/app/Http/Requests/Admin/RuleGroupRequest.php index 57d56857..61fd9e2a 100644 --- a/app/Http/Requests/Admin/RuleGroupRequest.php +++ b/app/Http/Requests/Admin/RuleGroupRequest.php @@ -9,8 +9,8 @@ class RuleGroupRequest extends FormRequest public function rules() { return [ - 'name' => 'required|string', - 'type' => 'required|boolean', + 'name' => 'required|string', + 'type' => 'required|boolean', 'rules' => 'nullable|exists:rule,id', ]; } diff --git a/app/Http/Requests/Admin/RuleRequest.php b/app/Http/Requests/Admin/RuleRequest.php index 940ff54c..8a987b4f 100644 --- a/app/Http/Requests/Admin/RuleRequest.php +++ b/app/Http/Requests/Admin/RuleRequest.php @@ -9,7 +9,7 @@ class RuleRequest extends FormRequest public function rules() { $rules = [ - 'name' => 'required|string', + 'name' => 'required|string', 'pattern' => 'required|string', ]; diff --git a/app/Http/Requests/Admin/ShopStoreRequest.php b/app/Http/Requests/Admin/ShopStoreRequest.php index af162de6..f6e16cbb 100644 --- a/app/Http/Requests/Admin/ShopStoreRequest.php +++ b/app/Http/Requests/Admin/ShopStoreRequest.php @@ -9,25 +9,25 @@ class ShopStoreRequest extends FormRequest public function rules(): array { return [ - 'type' => 'required|numeric|between:1,2', - 'name' => 'required|string', - 'price' => 'required|numeric|min:0', - 'level' => 'required|exists:level,level', - 'renew' => 'required_unless:type,2|numeric|min:0|nullable', - 'period' => 'required_unless:type,2|numeric|min:0|nullable', - 'traffic' => 'required|numeric|min:1|max:10240000', + 'type' => 'required|numeric|between:1,2', + 'name' => 'required|string', + 'price' => 'required|numeric|min:0', + 'level' => 'required|exists:level,level', + 'renew' => 'required_unless:type,2|numeric|min:0|nullable', + 'period' => 'required_unless:type,2|numeric|min:0|nullable', + 'traffic' => 'required|numeric|min:1|max:10240000', 'traffic_unit' => 'nullable|numeric', - 'invite_num' => 'numeric', - 'limit_num' => 'numeric', - 'speed_limit' => 'numeric', - 'days' => 'required|numeric', - 'is_hot' => 'nullable|string', - 'status' => 'nullable|string', - 'sort' => 'numeric', - 'color' => 'nullable|string', - 'logo' => 'nullable|image', - 'description' => 'nullable|string', - 'info' => 'nullable|string', + 'invite_num' => 'numeric', + 'limit_num' => 'numeric', + 'speed_limit' => 'numeric', + 'days' => 'required|numeric', + 'is_hot' => 'nullable|string', + 'status' => 'nullable|string', + 'sort' => 'numeric', + 'color' => 'nullable|string', + 'logo' => 'nullable|image', + 'description' => 'nullable|string', + 'info' => 'nullable|string', ]; } } diff --git a/app/Http/Requests/Admin/ShopUpdateRequest.php b/app/Http/Requests/Admin/ShopUpdateRequest.php index 2b2f2e80..c79cdeaf 100644 --- a/app/Http/Requests/Admin/ShopUpdateRequest.php +++ b/app/Http/Requests/Admin/ShopUpdateRequest.php @@ -9,21 +9,21 @@ class ShopUpdateRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required|string', - 'price' => 'required|numeric|min:0', - 'level' => 'required|exists:level,level', - 'renew' => 'required_unless:type,2|numeric|min:0|nullable', - 'period' => 'required_unless:type,2|numeric|min:0|nullable', - 'invite_num' => 'numeric', - 'limit_num' => 'numeric', - 'is_hot' => 'nullable|string', - 'status' => 'nullable|string', - 'sort' => 'numeric', + 'name' => 'required|string', + 'price' => 'required|numeric|min:0', + 'level' => 'required|exists:level,level', + 'renew' => 'required_unless:type,2|numeric|min:0|nullable', + 'period' => 'required_unless:type,2|numeric|min:0|nullable', + 'invite_num' => 'numeric', + 'limit_num' => 'numeric', + 'is_hot' => 'nullable|string', + 'status' => 'nullable|string', + 'sort' => 'numeric', 'speed_limit' => 'numeric', - 'color' => 'nullable|string', - 'logo' => 'nullable|image', + 'color' => 'nullable|string', + 'logo' => 'nullable|image', 'description' => 'nullable|string', - 'info' => 'nullable|string', + 'info' => 'nullable|string', ]; } } diff --git a/app/Http/Requests/Admin/SystemRequest.php b/app/Http/Requests/Admin/SystemRequest.php index 6c3e68f7..05ff99c1 100644 --- a/app/Http/Requests/Admin/SystemRequest.php +++ b/app/Http/Requests/Admin/SystemRequest.php @@ -9,7 +9,7 @@ class SystemRequest extends FormRequest public function rules() { return [ - 'name' => 'required|exists:config,name', + 'name' => 'required|exists:config,name', 'value' => 'nullable', ]; } diff --git a/app/Http/Requests/Admin/TicketRequest.php b/app/Http/Requests/Admin/TicketRequest.php index a1ea2d24..f0bebb06 100644 --- a/app/Http/Requests/Admin/TicketRequest.php +++ b/app/Http/Requests/Admin/TicketRequest.php @@ -9,10 +9,10 @@ class TicketRequest extends FormRequest public function rules() { return [ - 'uid' => 'required_without:username|exists:user,id|numeric|nullable', + 'uid' => 'required_without:username|exists:user,id|numeric|nullable', 'username' => 'required_without:uid|exists:user,username||nullable', - 'title' => 'required|string', - 'content' => 'required|string', + 'title' => 'required|string', + 'content' => 'required|string', ]; } } diff --git a/app/Http/Requests/Admin/UserGroupRequest.php b/app/Http/Requests/Admin/UserGroupRequest.php index deeeeb1c..92ff09b7 100644 --- a/app/Http/Requests/Admin/UserGroupRequest.php +++ b/app/Http/Requests/Admin/UserGroupRequest.php @@ -9,7 +9,7 @@ class UserGroupRequest extends FormRequest public function rules() { return [ - 'name' => 'required|string', + 'name' => 'required|string', 'nodes' => 'nullable|exists:node,id', ]; } diff --git a/app/Http/Requests/Admin/UserStoreRequest.php b/app/Http/Requests/Admin/UserStoreRequest.php index 38e6209f..88b9a51e 100644 --- a/app/Http/Requests/Admin/UserStoreRequest.php +++ b/app/Http/Requests/Admin/UserStoreRequest.php @@ -9,28 +9,28 @@ class UserStoreRequest extends FormRequest public function rules(): array { return [ - 'nickname' => 'required|string', - 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username,'.$this->user, - 'password' => 'nullable|string', - 'port' => 'nullable|numeric', - 'passwd' => 'nullable|string', - 'uuid' => 'nullable|uuid', + 'nickname' => 'required|string', + 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username,'.$this->user, + 'password' => 'nullable|string', + 'port' => 'nullable|numeric', + 'passwd' => 'nullable|string', + 'uuid' => 'nullable|uuid', 'transfer_enable' => 'required|numeric|min:0', - 'enable' => 'required|boolean', - 'method' => 'required|exists:ss_config,name', - 'protocol' => 'required|exists:ss_config,name', - 'obfs' => 'required|exists:ss_config,name', - 'speed_limit' => 'required|numeric|min:0', - 'wechat' => 'nullable|string', - 'qq' => 'nullable|string', - 'expired_at' => 'nullable|date_format:Y-m-d', - 'remark' => 'nullable|string', - 'level' => 'required|exists:level,level', - 'user_group_id' => 'nullable|exists:user_group,id', - 'roles' => 'nullable|exists:roles,name', - 'reset_time' => 'nullable|date_format:Y-m-d', - 'invite_num' => 'required|numeric|min:0', - 'status' => 'required|numeric|between:-1,1', + 'enable' => 'required|boolean', + 'method' => 'required|exists:ss_config,name', + 'protocol' => 'required|exists:ss_config,name', + 'obfs' => 'required|exists:ss_config,name', + 'speed_limit' => 'required|numeric|min:0', + 'wechat' => 'nullable|string', + 'qq' => 'nullable|string', + 'expired_at' => 'nullable|date_format:Y-m-d', + 'remark' => 'nullable|string', + 'level' => 'required|exists:level,level', + 'user_group_id' => 'nullable|exists:user_group,id', + 'roles' => 'nullable|exists:roles,name', + 'reset_time' => 'nullable|date_format:Y-m-d', + 'invite_num' => 'required|numeric|min:0', + 'status' => 'required|numeric|between:-1,1', ]; } } diff --git a/app/Http/Requests/Admin/UserUpdateRequest.php b/app/Http/Requests/Admin/UserUpdateRequest.php index 9d0e2e9c..e636b5e8 100644 --- a/app/Http/Requests/Admin/UserUpdateRequest.php +++ b/app/Http/Requests/Admin/UserUpdateRequest.php @@ -9,28 +9,28 @@ class UserUpdateRequest extends FormRequest public function rules(): array { return [ - 'nickname' => 'required|string', - 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username,'.$this->user->id, - 'password' => 'nullable|string', - 'port' => 'required|numeric|exclude_if:port,0|gt:0|unique:user,port,'.$this->user->id, - 'passwd' => 'required|string', - 'uuid' => 'required|uuid', + 'nickname' => 'required|string', + 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username,'.$this->user->id, + 'password' => 'nullable|string', + 'port' => 'required|numeric|exclude_if:port,0|gt:0|unique:user,port,'.$this->user->id, + 'passwd' => 'required|string', + 'uuid' => 'required|uuid', 'transfer_enable' => 'required|numeric|min:0', - 'enable' => 'required|boolean', - 'method' => 'required|exists:ss_config,name', - 'protocol' => 'required|exists:ss_config,name', - 'obfs' => 'required|exists:ss_config,name', - 'speed_limit' => 'required|numeric|min:0', - 'wechat' => 'nullable|string', - 'qq' => 'nullable|string', - 'expired_at' => 'required|date_format:Y-m-d', - 'remark' => 'nullable|string', - 'level' => 'required|exists:level,level', - 'user_group_id' => 'nullable|exists:user_group,id', - 'roles' => 'nullable|exists:roles,name', - 'reset_time' => 'nullable|date_format:Y-m-d', - 'invite_num' => 'required|numeric|min:0', - 'status' => 'required|numeric|between:-1,1', + 'enable' => 'required|boolean', + 'method' => 'required|exists:ss_config,name', + 'protocol' => 'required|exists:ss_config,name', + 'obfs' => 'required|exists:ss_config,name', + 'speed_limit' => 'required|numeric|min:0', + 'wechat' => 'nullable|string', + 'qq' => 'nullable|string', + 'expired_at' => 'required|date_format:Y-m-d', + 'remark' => 'nullable|string', + 'level' => 'required|exists:level,level', + 'user_group_id' => 'nullable|exists:user_group,id', + 'roles' => 'nullable|exists:roles,name', + 'reset_time' => 'nullable|date_format:Y-m-d', + 'invite_num' => 'required|numeric|min:0', + 'status' => 'required|numeric|between:-1,1', ]; } } diff --git a/app/Http/Requests/Auth/RegisterRequest.php b/app/Http/Requests/Auth/RegisterRequest.php index e1bef166..cc933d9d 100644 --- a/app/Http/Requests/Auth/RegisterRequest.php +++ b/app/Http/Requests/Auth/RegisterRequest.php @@ -12,7 +12,7 @@ class RegisterRequest extends FormRequest 'nickname' => 'required|string', 'username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username', 'password' => 'required|string|min:6|confirmed', - 'term' => 'accepted', + 'term' => 'accepted', ]; } } diff --git a/app/Jobs/VNet/addUser.php b/app/Jobs/VNet/addUser.php index 836c92f5..6147b0dd 100644 --- a/app/Jobs/VNet/addUser.php +++ b/app/Jobs/VNet/addUser.php @@ -2,7 +2,6 @@ namespace App\Jobs\VNet; -use App\Models\Node; use App\Models\User; use Arr; use Exception; @@ -23,6 +22,7 @@ class addUser implements ShouldQueue use SerializesModels; private $data; + private $nodes; public function __construct($userIds, $nodes) @@ -30,11 +30,11 @@ class addUser implements ShouldQueue $this->nodes = $nodes; foreach (User::findMany($userIds) as $user) { $data[] = [ - 'uid' => $user->id, - 'port' => $user->port, - 'passwd' => $user->passwd, + 'uid' => $user->id, + 'port' => $user->port, + 'passwd' => $user->passwd, 'speed_limit' => $user->speed_limit, - 'enable' => $user->enable, + 'enable' => $user->enable, ]; } diff --git a/app/Jobs/VNet/delUser.php b/app/Jobs/VNet/delUser.php index d5d97b0e..1c0defc2 100644 --- a/app/Jobs/VNet/delUser.php +++ b/app/Jobs/VNet/delUser.php @@ -21,6 +21,7 @@ class delUser implements ShouldQueue use SerializesModels; private $userIds; + private $nodes; public function __construct($userIds, $nodes) diff --git a/app/Jobs/VNet/editUser.php b/app/Jobs/VNet/editUser.php index 5d2e62ba..299c31d4 100644 --- a/app/Jobs/VNet/editUser.php +++ b/app/Jobs/VNet/editUser.php @@ -22,17 +22,18 @@ class editUser implements ShouldQueue use SerializesModels; private $data; + private $nodes; public function __construct(User $user, $nodes) { $this->nodes = $nodes; $this->data = [ - 'uid' => $user->id, - 'port' => (int) $user->port, - 'passwd' => $user->passwd, + 'uid' => $user->id, + 'port' => (int) $user->port, + 'passwd' => $user->passwd, 'speed_limit' => $user->speed_limit, - 'enable' => (int) $user->enable, + 'enable' => (int) $user->enable, ]; } diff --git a/app/Models/Article.php b/app/Models/Article.php index 61f3ea65..920f7c06 100644 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -13,7 +13,9 @@ class Article extends Model use SoftDeletes; protected $table = 'article'; + protected $dates = ['deleted_at']; + protected $guarded = []; // 筛选类型 diff --git a/app/Models/Config.php b/app/Models/Config.php index 6bec9813..640ab848 100644 --- a/app/Models/Config.php +++ b/app/Models/Config.php @@ -10,9 +10,14 @@ use Illuminate\Database\Eloquent\Model; class Config extends Model { public $timestamps = false; + public $incrementing = false; + protected $table = 'config'; + protected $primaryKey = 'name'; + protected $keyType = 'string'; + protected $guarded = []; } diff --git a/app/Models/Country.php b/app/Models/Country.php index 39cca0cd..a4604cdc 100644 --- a/app/Models/Country.php +++ b/app/Models/Country.php @@ -10,10 +10,15 @@ use Illuminate\Database\Eloquent\Model; class Country extends Model { public $timestamps = false; + public $incrementing = false; + protected $table = 'country'; + protected $primaryKey = 'code'; + protected $keyType = 'string'; + protected $guarded = []; public function nodes() diff --git a/app/Models/Coupon.php b/app/Models/Coupon.php index 86d2366e..b0c37863 100644 --- a/app/Models/Coupon.php +++ b/app/Models/Coupon.php @@ -13,8 +13,11 @@ class Coupon extends Model use SoftDeletes; protected $table = 'coupon'; + protected $casts = ['limit' => 'array', 'start_time' => 'date:Y-m-d', 'end_time' => 'date:Y-m-d']; + protected $dates = ['deleted_at']; + protected $guarded = []; // 筛选类型 diff --git a/app/Models/CouponLog.php b/app/Models/CouponLog.php index c5a1e8e2..025ee930 100644 --- a/app/Models/CouponLog.php +++ b/app/Models/CouponLog.php @@ -10,5 +10,6 @@ use Illuminate\Database\Eloquent\Model; class CouponLog extends Model { public const UPDATED_AT = null; + protected $table = 'coupon_log'; } diff --git a/app/Models/EmailFilter.php b/app/Models/EmailFilter.php index 97903427..20374a55 100644 --- a/app/Models/EmailFilter.php +++ b/app/Models/EmailFilter.php @@ -10,6 +10,8 @@ use Illuminate\Database\Eloquent\Model; class EmailFilter extends Model { public $timestamps = false; + protected $table = 'email_filter'; + protected $guarded = []; } diff --git a/app/Models/Goods.php b/app/Models/Goods.php index 6eea2410..b0a08a82 100644 --- a/app/Models/Goods.php +++ b/app/Models/Goods.php @@ -15,7 +15,9 @@ class Goods extends Model use SoftDeletes; protected $table = 'goods'; + protected $dates = ['deleted_at']; + protected $guarded = []; public function orders(): HasMany diff --git a/app/Models/GoodsCategory.php b/app/Models/GoodsCategory.php index 2c49e813..c68d2ef0 100644 --- a/app/Models/GoodsCategory.php +++ b/app/Models/GoodsCategory.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; class GoodsCategory extends Model { protected $table = 'goods_category'; + protected $guarded = []; public function goods(): HasMany diff --git a/app/Models/Invite.php b/app/Models/Invite.php index fe19236d..4c440496 100644 --- a/app/Models/Invite.php +++ b/app/Models/Invite.php @@ -15,7 +15,9 @@ class Invite extends Model use SoftDeletes; protected $table = 'invite'; + protected $dates = ['dateline', 'deleted_at']; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/Label.php b/app/Models/Label.php index db3ea677..cc76e143 100644 --- a/app/Models/Label.php +++ b/app/Models/Label.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class Label extends Model { public $timestamps = false; + protected $table = 'label'; + protected $guarded = []; public function nodes() diff --git a/app/Models/Level.php b/app/Models/Level.php index 21193278..209ebdcb 100644 --- a/app/Models/Level.php +++ b/app/Models/Level.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class Level extends Model { public $timestamps = false; + protected $table = 'level'; + protected $guarded = []; public function users() diff --git a/app/Models/Marketing.php b/app/Models/Marketing.php index c481504c..a72dff96 100644 --- a/app/Models/Marketing.php +++ b/app/Models/Marketing.php @@ -10,14 +10,15 @@ use Illuminate\Database\Eloquent\Model; class Marketing extends Model { protected $table = 'marketing'; + protected $guarded = []; public function getStatusLabelAttribute(): string { return [ -1 => '失败', - 0 => '待推送', - 1 => '成功', + 0 => '待推送', + 1 => '成功', ][$this->attributes['status']] ?? ''; } } diff --git a/app/Models/Node.php b/app/Models/Node.php index f02c14e4..430907ec 100644 --- a/app/Models/Node.php +++ b/app/Models/Node.php @@ -16,7 +16,9 @@ use Log; class Node extends Model { protected $table = 'node'; + protected $guarded = []; + protected $casts = ['profile' => 'array']; public function labels() @@ -167,19 +169,19 @@ class Node extends Model public function getSSRConfig(): array { return [ - 'id' => $this->id, - 'method' => $this->profile['method'] ?? '', - 'protocol' => $this->profile['protocol'] ?? '', - 'obfs' => $this->profile['obfs'] ?? '', - 'obfs_param' => $this->profile['obfs_param'] ?? '', - 'is_udp' => (int) $this->is_udp, - 'speed_limit' => $this->getRawOriginal('speed_limit'), + 'id' => $this->id, + 'method' => $this->profile['method'] ?? '', + 'protocol' => $this->profile['protocol'] ?? '', + 'obfs' => $this->profile['obfs'] ?? '', + 'obfs_param' => $this->profile['obfs_param'] ?? '', + 'is_udp' => (int) $this->is_udp, + 'speed_limit' => $this->getRawOriginal('speed_limit'), 'client_limit' => $this->client_limit, - 'single' => isset($this->profile['passwd']) ? 1 : 0, - 'port' => (string) $this->port, - 'passwd' => $this->profile['passwd'] ?? '', - 'push_port' => $this->push_port, - 'secret' => $this->auth->secret, + 'single' => isset($this->profile['passwd']) ? 1 : 0, + 'port' => (string) $this->port, + 'passwd' => $this->profile['passwd'] ?? '', + 'push_port' => $this->push_port, + 'secret' => $this->auth->secret, 'redirect_url' => sysConfig('redirect_url', ''), ]; } diff --git a/app/Models/NodeAuth.php b/app/Models/NodeAuth.php index 9f5de368..59fb9c78 100644 --- a/app/Models/NodeAuth.php +++ b/app/Models/NodeAuth.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class NodeAuth extends Model { protected $table = 'node_auth'; + protected $guarded = []; public function node(): BelongsTo diff --git a/app/Models/NodeCertificate.php b/app/Models/NodeCertificate.php index 1b79de8f..24c2e9f0 100644 --- a/app/Models/NodeCertificate.php +++ b/app/Models/NodeCertificate.php @@ -10,5 +10,6 @@ use Illuminate\Database\Eloquent\Model; class NodeCertificate extends Model { protected $table = 'node_certificate'; + protected $guarded = []; } diff --git a/app/Models/NodeDailyDataFlow.php b/app/Models/NodeDailyDataFlow.php index 6e9a5c9c..874b39d2 100644 --- a/app/Models/NodeDailyDataFlow.php +++ b/app/Models/NodeDailyDataFlow.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class NodeDailyDataFlow extends Model { public const UPDATED_AT = null; + protected $table = 'node_daily_data_flow'; + protected $guarded = []; public function node(): BelongsTo diff --git a/app/Models/NodeHeartbeat.php b/app/Models/NodeHeartbeat.php index 11f9eb63..7dcee9d3 100644 --- a/app/Models/NodeHeartbeat.php +++ b/app/Models/NodeHeartbeat.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class NodeHeartbeat extends Model { public $timestamps = false; + protected $table = 'node_heartbeat'; + protected $guarded = []; public function scopeRecently($query) diff --git a/app/Models/NodeHourlyDataFlow.php b/app/Models/NodeHourlyDataFlow.php index 523d3354..2d94c9a9 100644 --- a/app/Models/NodeHourlyDataFlow.php +++ b/app/Models/NodeHourlyDataFlow.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class NodeHourlyDataFlow extends Model { public const UPDATED_AT = null; + protected $table = 'node_hourly_data_flow'; + protected $guarded = []; public function node(): BelongsTo diff --git a/app/Models/NodeOnlineIp.php b/app/Models/NodeOnlineIp.php index 89387e39..d5978531 100644 --- a/app/Models/NodeOnlineIp.php +++ b/app/Models/NodeOnlineIp.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class NodeOnlineIp extends Model { public $timestamps = false; + protected $table = 'node_online_ip'; + protected $guarded = []; public function node(): BelongsTo diff --git a/app/Models/NodeOnlineLog.php b/app/Models/NodeOnlineLog.php index 69842fd1..9a1d3dec 100644 --- a/app/Models/NodeOnlineLog.php +++ b/app/Models/NodeOnlineLog.php @@ -10,6 +10,8 @@ use Illuminate\Database\Eloquent\Model; class NodeOnlineLog extends Model { public $timestamps = false; + protected $table = 'node_online_log'; + protected $guarded = []; } diff --git a/app/Models/NotificationLog.php b/app/Models/NotificationLog.php index b131677f..4442f1c4 100644 --- a/app/Models/NotificationLog.php +++ b/app/Models/NotificationLog.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Model; class NotificationLog extends Model { protected $table = 'notification_log'; + protected $guarded = []; // 通知类型 diff --git a/app/Models/Order.php b/app/Models/Order.php index 55745dfd..ccfb0f73 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -17,8 +17,11 @@ class Order extends Model use Sortable; public $sortable = ['id', 'sn', 'expired_at', 'created_at']; + protected $table = 'order'; + protected $dates = ['expired_at']; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/Payment.php b/app/Models/Payment.php index b72d6bb3..c0a47c7d 100644 --- a/app/Models/Payment.php +++ b/app/Models/Payment.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class Payment extends Model { protected $table = 'payment'; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/PaymentCallback.php b/app/Models/PaymentCallback.php index 0b8c5829..dc216550 100644 --- a/app/Models/PaymentCallback.php +++ b/app/Models/PaymentCallback.php @@ -10,15 +10,16 @@ use Illuminate\Database\Eloquent\Model; class PaymentCallback extends Model { protected $table = 'payment_callback'; + protected $guarded = []; public function getStatusLabelAttribute(): string { return [ - 'WAIT_BUYER_PAY' => '等待买家付款', + 'WAIT_BUYER_PAY' => '等待买家付款', 'WAIT_SELLER_SEND_GOODS' => '等待卖家发货', - 'TRADE_SUCCESS' => '交易成功', - 'PAID' => '支付完成', + 'TRADE_SUCCESS' => '交易成功', + 'PAID' => '支付完成', ][$this->attributes['status']] ?? ''; } } diff --git a/app/Models/ReferralApply.php b/app/Models/ReferralApply.php index 9e421cfc..dd6aa441 100644 --- a/app/Models/ReferralApply.php +++ b/app/Models/ReferralApply.php @@ -13,7 +13,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class ReferralApply extends Model { protected $table = 'referral_apply'; + protected $casts = ['link_logs' => 'array']; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/ReferralLog.php b/app/Models/ReferralLog.php index 9a664def..9ededeba 100644 --- a/app/Models/ReferralLog.php +++ b/app/Models/ReferralLog.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class ReferralLog extends Model { protected $table = 'referral_log'; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/Rule.php b/app/Models/Rule.php index 6956ea0e..891d0a6e 100644 --- a/app/Models/Rule.php +++ b/app/Models/Rule.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class Rule extends Model { public $timestamps = false; + protected $table = 'rule'; + protected $guarded = []; public function getTypeLabelAttribute(): string diff --git a/app/Models/RuleGroup.php b/app/Models/RuleGroup.php index 36577be6..4b23e3fa 100644 --- a/app/Models/RuleGroup.php +++ b/app/Models/RuleGroup.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Model; class RuleGroup extends Model { protected $table = 'rule_group'; + protected $guarded = []; public function getTypeLabelAttribute(): string diff --git a/app/Models/RuleLog.php b/app/Models/RuleLog.php index 3ab919a6..8fdd9111 100644 --- a/app/Models/RuleLog.php +++ b/app/Models/RuleLog.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class RuleLog extends Model { public const UPDATED_AT = null; + protected $table = 'rule_log'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/SsConfig.php b/app/Models/SsConfig.php index 834d7d82..7b9a6160 100644 --- a/app/Models/SsConfig.php +++ b/app/Models/SsConfig.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class SsConfig extends Model { public $timestamps = false; + protected $table = 'ss_config'; + protected $guarded = []; // 筛选默认 diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php index 2099eab9..09a292c4 100644 --- a/app/Models/Ticket.php +++ b/app/Models/Ticket.php @@ -13,6 +13,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; class Ticket extends Model { protected $table = 'ticket'; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/TicketReply.php b/app/Models/TicketReply.php index c17e3dd5..7a877d65 100644 --- a/app/Models/TicketReply.php +++ b/app/Models/TicketReply.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class TicketReply extends Model { protected $table = 'ticket_reply'; + protected $guarded = []; public function ticket(): BelongsTo diff --git a/app/Models/User.php b/app/Models/User.php index 88423018..3b3cde2a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -22,8 +22,11 @@ class User extends Authenticatable use HasApiTokens, Notifiable, HasRoles, Sortable; public $sortable = ['id', 'credit', 'port', 't', 'expired_at']; + protected $table = 'user'; + protected $casts = ['expired_at' => 'date:Y-m-d', 'reset_time' => 'date:Y-m-d', 'ban_time' => 'date:Y-m-d']; + protected $guarded = []; public function routeNotificationForMail($notification) diff --git a/app/Models/UserBanedLog.php b/app/Models/UserBanedLog.php index f49ffc67..e74d68f7 100644 --- a/app/Models/UserBanedLog.php +++ b/app/Models/UserBanedLog.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserBanedLog extends Model { protected $table = 'user_baned_log'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserCreditLog.php b/app/Models/UserCreditLog.php index 316d3f7e..e1c41820 100644 --- a/app/Models/UserCreditLog.php +++ b/app/Models/UserCreditLog.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserCreditLog extends Model { public const UPDATED_AT = null; + protected $table = 'user_credit_log'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserDailyDataFlow.php b/app/Models/UserDailyDataFlow.php index 6ade2a79..25bb3149 100644 --- a/app/Models/UserDailyDataFlow.php +++ b/app/Models/UserDailyDataFlow.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserDailyDataFlow extends Model { public const UPDATED_AT = null; + protected $table = 'user_daily_data_flow'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserDataFlowLog.php b/app/Models/UserDataFlowLog.php index 9b8dc2c6..69e1e7d9 100644 --- a/app/Models/UserDataFlowLog.php +++ b/app/Models/UserDataFlowLog.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserDataFlowLog extends Model { public $timestamps = false; + protected $table = 'user_traffic_log'; + protected $guarded = []; // 关联账号 diff --git a/app/Models/UserDataModifyLog.php b/app/Models/UserDataModifyLog.php index 12b156dd..4a7c63a8 100644 --- a/app/Models/UserDataModifyLog.php +++ b/app/Models/UserDataModifyLog.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserDataModifyLog extends Model { public const UPDATED_AT = null; + protected $table = 'user_data_modify_log'; + protected $guarded = []; // 关联账号 diff --git a/app/Models/UserGroup.php b/app/Models/UserGroup.php index 185f66d0..6763b81c 100644 --- a/app/Models/UserGroup.php +++ b/app/Models/UserGroup.php @@ -10,7 +10,9 @@ use Illuminate\Database\Eloquent\Model; class UserGroup extends Model { public $timestamps = false; + protected $table = 'user_group'; + protected $guarded = []; public function users() diff --git a/app/Models/UserHourlyDataFlow.php b/app/Models/UserHourlyDataFlow.php index 0afbefd9..c945151a 100644 --- a/app/Models/UserHourlyDataFlow.php +++ b/app/Models/UserHourlyDataFlow.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserHourlyDataFlow extends Model { public const UPDATED_AT = null; + protected $table = 'user_hourly_data_flow'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserLoginLog.php b/app/Models/UserLoginLog.php index d0eba191..11924ad3 100644 --- a/app/Models/UserLoginLog.php +++ b/app/Models/UserLoginLog.php @@ -11,7 +11,9 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserLoginLog extends Model { public const UPDATED_AT = null; + protected $table = 'user_login_log'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserOauth.php b/app/Models/UserOauth.php index c0c6b357..9961ef17 100644 --- a/app/Models/UserOauth.php +++ b/app/Models/UserOauth.php @@ -8,6 +8,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class UserOauth extends Model { protected $table = 'user_oauth'; + protected $guarded = []; public function user(): BelongsTo diff --git a/app/Models/UserSubscribe.php b/app/Models/UserSubscribe.php index 43a2467e..87c1b8ba 100644 --- a/app/Models/UserSubscribe.php +++ b/app/Models/UserSubscribe.php @@ -16,7 +16,9 @@ class UserSubscribe extends Model use Sortable; public $sortable = ['id', 'times']; + protected $table = 'user_subscribe'; + protected $guarded = []; public function scopeUid($query) diff --git a/app/Models/UserSubscribeLog.php b/app/Models/UserSubscribeLog.php index 7713ea17..c10ca047 100644 --- a/app/Models/UserSubscribeLog.php +++ b/app/Models/UserSubscribeLog.php @@ -12,8 +12,11 @@ use Illuminate\Database\Eloquent\Relations\HasOneThrough; class UserSubscribeLog extends Model { public const CREATED_AT = 'request_time'; + public const UPDATED_AT = null; + protected $table = 'user_subscribe_log'; + protected $guarded = []; public function subscribe(): BelongsTo diff --git a/app/Models/Verify.php b/app/Models/Verify.php index 442ee152..d720c131 100644 --- a/app/Models/Verify.php +++ b/app/Models/Verify.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; class Verify extends Model { protected $table = 'verify'; + protected $guarded = []; // 筛选类型 diff --git a/app/Models/VerifyCode.php b/app/Models/VerifyCode.php index 8951d37e..6b520001 100644 --- a/app/Models/VerifyCode.php +++ b/app/Models/VerifyCode.php @@ -10,6 +10,7 @@ use Illuminate\Database\Eloquent\Model; class VerifyCode extends Model { protected $table = 'verify_code'; + protected $guarded = []; public function scopeRecentUnused($query) diff --git a/app/Notifications/AccountExpire.php b/app/Notifications/AccountExpire.php index 33ee8e8f..6da67882 100644 --- a/app/Notifications/AccountExpire.php +++ b/app/Notifications/AccountExpire.php @@ -41,7 +41,7 @@ class AccountExpire extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.account_expired'), + 'title' => trans('notification.account_expired'), 'content' => trans('notification.account_expired_content', ['days' => $this->days]), ]; } diff --git a/app/Notifications/Custom.php b/app/Notifications/Custom.php index 647d128f..844752cb 100644 --- a/app/Notifications/Custom.php +++ b/app/Notifications/Custom.php @@ -15,6 +15,7 @@ class Custom extends Notification implements ShouldQueue use Queueable; private $title; + private $content; public function __construct($title, $content) @@ -38,7 +39,7 @@ class Custom extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => $this->title, + 'title' => $this->title, 'content' => $this->content, ]; } @@ -53,11 +54,11 @@ class Custom extends Notification implements ShouldQueue public function toBark($notifiable) { return [ - 'title' => $this->title, - 'content' => $this->content, - 'group' => '自定义信息', - 'icon' => asset('assets/images/notification/custom.png'), - 'sound' => 'newmail', + 'title' => $this->title, + 'content' => $this->content, + 'group' => '自定义信息', + 'icon' => asset('assets/images/notification/custom.png'), + 'sound' => 'newmail', 'url_type' => 'markdown', ]; } diff --git a/app/Notifications/DataAnomaly.php b/app/Notifications/DataAnomaly.php index 6d72c0d6..aaaba293 100644 --- a/app/Notifications/DataAnomaly.php +++ b/app/Notifications/DataAnomaly.php @@ -13,8 +13,11 @@ class DataAnomaly extends Notification implements ShouldQueue use Queueable; private $userId; + private $upload; + private $download; + private $total; public function __construct($userId, $upload, $download, $total) @@ -40,7 +43,7 @@ class DataAnomaly extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.data_anomaly'), + 'title' => trans('notification.data_anomaly'), 'content' => trans('notification.data_anomaly_content', ['id' => $this->userId, 'upload' => $this->upload, 'download' => $this->download, 'total' => $this->total]), ]; } diff --git a/app/Notifications/NodeBlocked.php b/app/Notifications/NodeBlocked.php index 95d262d9..f115beca 100644 --- a/app/Notifications/NodeBlocked.php +++ b/app/Notifications/NodeBlocked.php @@ -53,8 +53,8 @@ class NodeBlocked extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.node_block'), - 'content' => $this->markdownMessage(), + 'title' => trans('notification.node_block'), + 'content' => $this->markdownMessage(), 'url_type' => 'markdown', ]; } diff --git a/app/Notifications/NodeDailyReport.php b/app/Notifications/NodeDailyReport.php index 5421e9e3..a3f13451 100644 --- a/app/Notifications/NodeDailyReport.php +++ b/app/Notifications/NodeDailyReport.php @@ -44,7 +44,7 @@ class NodeDailyReport extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => __('Daily Data Usage Report'), + 'title' => __('Daily Data Usage Report'), 'content' => $this->markdownMessage(), 'url_type' => 'markdown', ]; diff --git a/app/Notifications/NodeOffline.php b/app/Notifications/NodeOffline.php index ca39e421..9fa3c627 100644 --- a/app/Notifications/NodeOffline.php +++ b/app/Notifications/NodeOffline.php @@ -44,7 +44,7 @@ class NodeOffline extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.node_offline'), + 'title' => trans('notification.node_offline'), 'content' => $this->markdownMessage(), 'url_type' => 'markdown', ]; @@ -53,10 +53,10 @@ class NodeOffline extends Notification implements ShouldQueue public function toBark($notifiable) { return [ - 'title' => trans('notification.node_offline'), + 'title' => trans('notification.node_offline'), 'content' => $this->stringMessage(), - 'group' => '节点状态', - 'icon' => asset('assets/images/notification/offline.png'), + 'group' => '节点状态', + 'icon' => asset('assets/images/notification/offline.png'), ]; } diff --git a/app/Notifications/PaymentConfirm.php b/app/Notifications/PaymentConfirm.php index 2f030e24..604817b4 100644 --- a/app/Notifications/PaymentConfirm.php +++ b/app/Notifications/PaymentConfirm.php @@ -13,6 +13,7 @@ class PaymentConfirm extends Notification use Queueable; private $order; + private $sign; public function __construct(Order $order) @@ -53,23 +54,23 @@ class PaymentConfirm extends Notification $goods = $this->order->goods; return [ - 'title' => '🛒 人工支付', - 'body' => [ + 'title' => '🛒 人工支付', + 'body' => [ [ 'keyname' => 'ℹ️ 账号', - 'value' => $order->user->username, + 'value' => $order->user->username, ], [ 'keyname' => '💰 金额', - 'value' => sprintf('%1.2f', $order->amount), + 'value' => sprintf('%1.2f', $order->amount), ], [ 'keyname' => '📦 商品', - 'value' => $goods->name ?? '余额充值', + 'value' => $goods->name ?? '余额充值', ], ], 'markdown' => '- ℹ️ 账号: '.$order->user->username.PHP_EOL.'- 💰 金额: '.sprintf('%1.2f', $order->amount).PHP_EOL.'- 📦 商品: '.($goods->name ?? '余额充值'), - 'button' => [ + 'button' => [ route('payment.notify', ['method' => 'manual', 'sign' => $this->sign, 'status' => 0]), route('payment.notify', ['method' => 'manual', 'sign' => $this->sign, 'status' => 1]), ], diff --git a/app/Notifications/PaymentReceived.php b/app/Notifications/PaymentReceived.php index fd0d0e12..b26a5776 100644 --- a/app/Notifications/PaymentReceived.php +++ b/app/Notifications/PaymentReceived.php @@ -13,6 +13,7 @@ class PaymentReceived extends Notification implements ShouldQueue use Queueable; private $amount; + private $sn; public function __construct($sn, $amount) @@ -37,7 +38,7 @@ class PaymentReceived extends Notification implements ShouldQueue public function toDataBase($notifiable) { return [ - 'sn' => $this->sn, + 'sn' => $this->sn, 'amount' => $this->amount, ]; } diff --git a/app/Notifications/TicketClosed.php b/app/Notifications/TicketClosed.php index 5a66898d..bcc8f44d 100644 --- a/app/Notifications/TicketClosed.php +++ b/app/Notifications/TicketClosed.php @@ -13,9 +13,13 @@ class TicketClosed extends Notification implements ShouldQueue use Queueable; private $ticketId; + private $title; + private $url; + private $reason; + private $is_user; public function __construct($ticketId, $title, $url, $reason, $is_user = false) @@ -44,7 +48,7 @@ class TicketClosed extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.close_ticket', ['id' => $this->ticketId, 'title' => $this->title]), + 'title' => trans('notification.close_ticket', ['id' => $this->ticketId, 'title' => $this->title]), 'content' => $this->reason, ]; } @@ -59,11 +63,11 @@ class TicketClosed extends Notification implements ShouldQueue public function toBark($notifiable) { return [ - 'title' => trans('notification.close_ticket', ['id' => $this->ticketId, 'title' => $this->title]), + 'title' => trans('notification.close_ticket', ['id' => $this->ticketId, 'title' => $this->title]), 'content' => $this->reason, - 'group' => '工单', - 'icon' => asset('assets/images/notification/ticket.png'), - 'url' => $this->url, + 'group' => '工单', + 'icon' => asset('assets/images/notification/ticket.png'), + 'url' => $this->url, ]; } } diff --git a/app/Notifications/TicketCreated.php b/app/Notifications/TicketCreated.php index 3bfa39d0..ae789ce0 100644 --- a/app/Notifications/TicketCreated.php +++ b/app/Notifications/TicketCreated.php @@ -14,7 +14,9 @@ class TicketCreated extends Notification implements ShouldQueue use Queueable; private $ticket; + private $url; + private $is_user; public function __construct(Ticket $ticket, $url, $is_user = false) @@ -41,7 +43,7 @@ class TicketCreated extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.new_ticket', ['title' => $this->ticket->title]), + 'title' => trans('notification.new_ticket', ['title' => $this->ticket->title]), 'content' => trans('notification.ticket_content').strip_tags($this->ticket->content), ]; } @@ -62,11 +64,11 @@ class TicketCreated extends Notification implements ShouldQueue public function toBark($notifiable) { return [ - 'title' => trans('notification.new_ticket', ['title' => $this->ticket->title]), + 'title' => trans('notification.new_ticket', ['title' => $this->ticket->title]), 'content' => trans('notification.ticket_content').strip_tags($this->ticket->content), - 'group' => '工单', - 'icon' => asset('assets/images/notification/ticket.png'), - 'url' => $this->url, + 'group' => '工单', + 'icon' => asset('assets/images/notification/ticket.png'), + 'url' => $this->url, ]; } } diff --git a/app/Notifications/TicketReplied.php b/app/Notifications/TicketReplied.php index 1f1bf34b..045003b2 100644 --- a/app/Notifications/TicketReplied.php +++ b/app/Notifications/TicketReplied.php @@ -14,7 +14,9 @@ class TicketReplied extends Notification implements ShouldQueue use Queueable; private $reply; + private $url; + private $is_user; public function __construct($reply, $url, $is_user = false) @@ -41,7 +43,7 @@ class TicketReplied extends Notification implements ShouldQueue public function toCustom($notifiable) { return [ - 'title' => trans('notification.reply_ticket', ['title' => $this->reply->ticket->title]), + 'title' => trans('notification.reply_ticket', ['title' => $this->reply->ticket->title]), 'content' => trans('notification.ticket_content').strip_tags($this->reply->content), ]; } @@ -62,11 +64,11 @@ class TicketReplied extends Notification implements ShouldQueue public function toBark($notifiable) { return [ - 'title' => trans('notification.reply_ticket', ['title' => $this->reply->ticket->title]), + 'title' => trans('notification.reply_ticket', ['title' => $this->reply->ticket->title]), 'content' => trans('notification.ticket_content').strip_tags($this->reply->content), - 'group' => '工单', - 'icon' => asset('assets/images/notification/ticket.png'), - 'url' => $this->url, + 'group' => '工单', + 'icon' => asset('assets/images/notification/ticket.png'), + 'url' => $this->url, ]; } } diff --git a/app/Observers/OrderObserver.php b/app/Observers/OrderObserver.php index ab40aada..dcdc9510 100644 --- a/app/Observers/OrderObserver.php +++ b/app/Observers/OrderObserver.php @@ -20,12 +20,12 @@ class OrderObserver if (Arr::exists($changes, 'is_expire') && $changes['is_expire'] === 1 && $order->goods->type === 2) { $user = $order->user; $user->update([ // 清理全部流量,重置重置日期和等级 - 'u' => 0, - 'd' => 0, + 'u' => 0, + 'd' => 0, 'transfer_enable' => 0, - 'reset_time' => null, - 'level' => 0, - 'enable' => 0, + 'reset_time' => null, + 'level' => 0, + 'enable' => 0, ]); Helpers::addUserTrafficModifyLog($user->id, $user->transfer_enable, 0, __('[Service Timer] Service Expiration'), $order->id); diff --git a/app/Payments/CodePay.php b/app/Payments/CodePay.php index bdfbe3ab..21fe58bd 100644 --- a/app/Payments/CodePay.php +++ b/app/Payments/CodePay.php @@ -15,12 +15,12 @@ class CodePay extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $data = [ - 'id' => sysConfig('codepay_id'), - 'pay_id' => $payment->trade_no, - 'type' => $request->input('type'), //1支付宝支付 2QQ钱包 3微信支付 - 'price' => $payment->amount, - 'page' => 1, - 'outTime' => 900, + 'id' => sysConfig('codepay_id'), + 'pay_id' => $payment->trade_no, + 'type' => $request->input('type'), //1支付宝支付 2QQ钱包 3微信支付 + 'price' => $payment->amount, + 'page' => 1, + 'outTime' => 900, 'notify_url' => route('payment.notify', ['method' => 'codepay']), 'return_url' => route('invoice'), ]; diff --git a/app/Payments/EPay.php b/app/Payments/EPay.php index fea79fb6..19a11c56 100644 --- a/app/Payments/EPay.php +++ b/app/Payments/EPay.php @@ -17,14 +17,14 @@ class EPay extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $data = [ - 'pid' => sysConfig('epay_mch_id'), - 'type' => [1 => 'alipay', 2 => 'qqpay', 3 => 'wxpay'][$request->input('type')] ?? 'alipay', - 'notify_url' => route('payment.notify', ['method' => 'epay']), - 'return_url' => route('invoice'), + 'pid' => sysConfig('epay_mch_id'), + 'type' => [1 => 'alipay', 2 => 'qqpay', 3 => 'wxpay'][$request->input('type')] ?? 'alipay', + 'notify_url' => route('payment.notify', ['method' => 'epay']), + 'return_url' => route('invoice'), 'out_trade_no' => $payment->trade_no, - 'name' => sysConfig('subject_name') ?: sysConfig('website_name'), - 'money' => $payment->amount, - 'sign_type' => 'MD5', + 'name' => sysConfig('subject_name') ?: sysConfig('website_name'), + 'money' => $payment->amount, + 'sign_type' => 'MD5', ]; $data['sign'] = $this->aliStyleSign($data, sysConfig('epay_key')); diff --git a/app/Payments/F2Fpay.php b/app/Payments/F2Fpay.php index faef812d..b4a85f8b 100644 --- a/app/Payments/F2Fpay.php +++ b/app/Payments/F2Fpay.php @@ -17,10 +17,10 @@ class F2Fpay extends Gateway public function __construct() { self::$aliConfig = [ - 'app_id' => sysConfig('f2fpay_app_id'), - 'ali_public_key' => sysConfig('f2fpay_public_key'), + 'app_id' => sysConfig('f2fpay_app_id'), + 'ali_public_key' => sysConfig('f2fpay_public_key'), 'rsa_private_key' => sysConfig('f2fpay_private_key'), - 'notify_url' => route('payment.notify', ['method' => 'f2fpay']), + 'notify_url' => route('payment.notify', ['method' => 'f2fpay']), ]; } @@ -29,7 +29,7 @@ class F2Fpay extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $data = [ - 'subject' => sysConfig('subject_name') ?: sysConfig('website_name'), + 'subject' => sysConfig('subject_name') ?: sysConfig('website_name'), 'out_trade_no' => $payment->trade_no, 'total_amount' => $payment->amount, ]; diff --git a/app/Payments/Library/AlipayF2F.php b/app/Payments/Library/AlipayF2F.php index 9f4fedfc..1166eb14 100644 --- a/app/Payments/Library/AlipayF2F.php +++ b/app/Payments/Library/AlipayF2F.php @@ -14,15 +14,16 @@ use RuntimeException; class AlipayF2F { private static $gatewayUrl = 'https://openapi.alipay.com/gateway.do'; + private $config; public function __construct(array $rawConfig = []) { $config = [ - 'app_id' => $rawConfig['app_id'], - 'public_key' => '', + 'app_id' => $rawConfig['app_id'], + 'public_key' => '', 'private_key' => '', - 'notify_url' => $rawConfig['notify_url'], + 'notify_url' => $rawConfig['notify_url'], ]; if ($rawConfig['ali_public_key']) { @@ -82,8 +83,6 @@ class AlipayF2F * RSA2验签. * * @param array $data 待签名数据 - * @param $sign - * @return bool * * @throws RuntimeException */ @@ -146,14 +145,14 @@ class AlipayF2F private function buildParams(): array { $params = [ - 'app_id' => $this->config['app_id'] ?? '', - 'method' => $this->config['method'] ?? '', - 'charset' => 'utf-8', - 'sign_type' => 'RSA2', - 'timestamp' => date('Y-m-d H:m:s'), + 'app_id' => $this->config['app_id'] ?? '', + 'method' => $this->config['method'] ?? '', + 'charset' => 'utf-8', + 'sign_type' => 'RSA2', + 'timestamp' => date('Y-m-d H:m:s'), 'biz_content' => $this->config['biz_content'] ?? [], - 'version' => '1.0', - 'notify_url' => $this->config['notify_url'] ?? '', + 'version' => '1.0', + 'notify_url' => $this->config['notify_url'] ?? '', ]; $params = array_filter($params); $params['sign'] = $this->encrypt($this->buildQuery($params)); @@ -165,7 +164,6 @@ class AlipayF2F * RSA2签名. * * @param string $data 签名的数组 - * @return string * * @throws RuntimeException */ diff --git a/app/Payments/Library/Gateway.php b/app/Payments/Library/Gateway.php index 810b2cfa..882d4046 100644 --- a/app/Payments/Library/Gateway.php +++ b/app/Payments/Library/Gateway.php @@ -31,7 +31,6 @@ abstract class Gateway * @param string $trade_no 本地订单号 * @param string $out_trade_no 外部订单号 * @param int $amount 交易金额 - * @return int */ protected function addPamentCallback(string $trade_no, string $out_trade_no, int $amount): int { diff --git a/app/Payments/Manual.php b/app/Payments/Manual.php index a2c201da..ee1da95d 100644 --- a/app/Payments/Manual.php +++ b/app/Payments/Manual.php @@ -31,10 +31,10 @@ class Manual extends Gateway $goods = $payment->order->goods; return view('user.components.payment.manual', [ - 'payment' => $payment, - 'name' => $goods->name ?? trans('user.recharge_credit'), - 'days' => $goods->days ?? 0, - 'pay_type' => $payment->order->pay_type_label ?: 0, + 'payment' => $payment, + 'name' => $goods->name ?? trans('user.recharge_credit'), + 'days' => $goods->days ?? 0, + 'pay_type' => $payment->order->pay_type_label ?: 0, 'pay_type_icon' => $payment->order->pay_type_icon, ]); } diff --git a/app/Payments/PayBeaver.php b/app/Payments/PayBeaver.php index aad287fc..ee4871df 100644 --- a/app/Payments/PayBeaver.php +++ b/app/Payments/PayBeaver.php @@ -17,7 +17,9 @@ use Response; class PayBeaver extends Gateway { private $appId; + private $appSecret; + private $url = 'https://api.paybeaver.com/api/v1/developer'; public function __construct() @@ -31,11 +33,11 @@ class PayBeaver extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $result = $this->createOrder([ - 'app_id' => $this->appId, + 'app_id' => $this->appId, 'merchant_order_id' => $payment->trade_no, - 'price_amount' => $payment->amount * 100, - 'notify_url' => route('payment.notify', ['method' => 'paybeaver']), - 'return_url' => route('invoice'), + 'price_amount' => $payment->amount * 110, + 'notify_url' => route('payment.notify', ['method' => 'paybeaver']), + 'return_url' => route('invoice'), ]); if (! isset($result['message']) && isset($result['data']['pay_url'])) { diff --git a/app/Payments/PayJs.php b/app/Payments/PayJs.php index 5240fed4..fedfc9a4 100644 --- a/app/Payments/PayJs.php +++ b/app/Payments/PayJs.php @@ -17,7 +17,7 @@ class PayJs extends Gateway { self::$config = [ 'mchid' => sysConfig('payjs_mch_id'), // 配置商户号 - 'key' => sysConfig('payjs_key'), // 配置通信密钥 + 'key' => sysConfig('payjs_key'), // 配置通信密钥 ]; } @@ -26,10 +26,10 @@ class PayJs extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $result = (new Pay($this::$config))->cashier([ - 'body' => sysConfig('subject_name') ?: sysConfig('website_name'), - 'total_fee' => $payment->amount * 100, + 'body' => sysConfig('subject_name') ?: sysConfig('website_name'), + 'total_fee' => $payment->amount * 100, 'out_trade_no' => $payment->trade_no, - 'notify_url' => route('payment.notify', ['method' => 'payjs']), + 'notify_url' => route('payment.notify', ['method' => 'payjs']), ]); // 获取收款二维码内容 diff --git a/app/Payments/PayPal.php b/app/Payments/PayPal.php index 76bc1d81..0d0dcea1 100644 --- a/app/Payments/PayPal.php +++ b/app/Payments/PayPal.php @@ -23,19 +23,19 @@ class PayPal extends Gateway $config = [ 'mode' => 'live', 'live' => [ - 'username' => sysConfig('paypal_username'), - 'password' => sysConfig('paypal_password'), - 'secret' => sysConfig('paypal_secret'), + 'username' => sysConfig('paypal_username'), + 'password' => sysConfig('paypal_password'), + 'secret' => sysConfig('paypal_secret'), 'certificate' => sysConfig('paypal_certificate'), - 'app_id' => sysConfig('paypal_app_id'), + 'app_id' => sysConfig('paypal_app_id'), ], 'payment_action' => 'Sale', - 'currency' => 'USD', - 'billing_type' => 'MerchantInitiatedBilling', - 'notify_url' => route('payment.notify', ['method' => 'paypal']), - 'locale' => 'zh_CN', - 'validate_ssl' => true, + 'currency' => 'USD', + 'billing_type' => 'MerchantInitiatedBilling', + 'notify_url' => route('payment.notify', ['method' => 'paypal']), + 'locale' => 'zh_CN', + 'validate_ssl' => true, ]; $this->provider->setApiCredentials($config); } @@ -120,19 +120,19 @@ class PayPal extends Gateway $amount = 0.3 + $converted; return [ - 'invoice_id' => $trade_no, - 'items' => [ + 'invoice_id' => $trade_no, + 'items' => [ [ - 'name' => sysConfig('subject_name') ?: sysConfig('website_name'), + 'name' => sysConfig('subject_name') ?: sysConfig('website_name'), 'price' => $amount, - 'desc' => 'Description for'.(sysConfig('subject_name') ?: sysConfig('website_name')), - 'qty' => 1, + 'desc' => 'Description for'.(sysConfig('subject_name') ?: sysConfig('website_name')), + 'qty' => 1, ], ], 'invoice_description' => $trade_no, - 'return_url' => route('paypal.checkout'), - 'cancel_url' => route('invoice'), - 'total' => $amount, + 'return_url' => route('paypal.checkout'), + 'cancel_url' => route('invoice'), + 'total' => $amount, ]; } } diff --git a/app/Payments/Stripe.php b/app/Payments/Stripe.php index 0308cc51..3a26cadc 100644 --- a/app/Payments/Stripe.php +++ b/app/Payments/Stripe.php @@ -29,16 +29,16 @@ class Stripe extends Gateway if ($type == 1 || $type == 3) { $source = Source::create([ - 'amount' => ceil($payment->amount * 100), - 'currency' => strtolower(sysConfig('standard_currency')), - 'type' => $type == 1 ? 'alipay' : 'wechat', + 'amount' => ceil($payment->amount * 100), + 'currency' => strtolower(sysConfig('standard_currency')), + 'type' => $type == 1 ? 'alipay' : 'wechat', 'statement_descriptor' => $payment->trade_no, - 'metadata' => [ - 'user_id' => $payment->user_id, + 'metadata' => [ + 'user_id' => $payment->user_id, 'out_trade_no' => $payment->trade_no, - 'identifier' => '', + 'identifier' => '', ], - 'redirect' => [ + 'redirect' => [ 'return_url' => route('invoice'), ], ]); @@ -150,21 +150,21 @@ class Stripe extends Gateway return [ 'payment_method_types' => ['card'], - 'line_items' => [ + 'line_items' => [ [ 'price_data' => [ - 'currency' => 'usd', + 'currency' => 'usd', 'product_data' => ['name' => sysConfig('subject_name') ?: sysConfig('website_name')], - 'unit_amount' => $unitAmount, + 'unit_amount' => $unitAmount, ], - 'quantity' => 1, + 'quantity' => 1, ], ], - 'mode' => 'payment', - 'success_url' => route('invoice'), - 'cancel_url' => route('invoice'), - 'client_reference_id' => $tradeNo, - 'customer_email' => Auth::getUser()->email, + 'mode' => 'payment', + 'success_url' => route('invoice'), + 'cancel_url' => route('invoice'), + 'client_reference_id' => $tradeNo, + 'customer_email' => Auth::getUser()->email, ]; } } diff --git a/app/Payments/THeadPay.php b/app/Payments/THeadPay.php index ef2716b3..26b357d8 100644 --- a/app/Payments/THeadPay.php +++ b/app/Payments/THeadPay.php @@ -16,10 +16,10 @@ class THeadPay extends Gateway $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount')); $data = [ - 'mchid' => sysConfig('theadpay_mchid'), + 'mchid' => sysConfig('theadpay_mchid'), 'out_trade_no' => $payment->trade_no, - 'total_fee' => (string) ($payment->amount * 100), - 'notify_url' => route('payment.notify', ['method' => 'theadpay']), + 'total_fee' => (string) ($payment->amount * 100), + 'notify_url' => route('payment.notify', ['method' => 'theadpay']), ]; $data['sign'] = $this->sign($data); diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index a83ec15b..f2aaa419 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -13,6 +13,7 @@ class RouteServiceProvider extends ServiceProvider * @var string */ public const HOME = '/'; + /** * This namespace is applied to your controller routes. * diff --git a/app/Providers/SettingServiceProvider.php b/app/Providers/SettingServiceProvider.php index 9de8c8e3..5e681755 100644 --- a/app/Providers/SettingServiceProvider.php +++ b/app/Providers/SettingServiceProvider.php @@ -13,7 +13,6 @@ use App\Channels\WeChatChannel; use App\Models\Config; use Cache; use Illuminate\Support\ServiceProvider; -use NotificationChannels\BearyChat\BearyChatChannel; use NotificationChannels\Telegram\TelegramChannel; class SettingServiceProvider extends ServiceProvider @@ -64,7 +63,7 @@ class SettingServiceProvider extends ServiceProvider collect([ 'website_name' => 'app.name', - 'website_url' => 'app.url', + 'website_url' => 'app.url', ])->each(function ($item, $key) { config([$item => config('settings.'.$key)]); // 设置APP有关的选项 }); @@ -74,16 +73,15 @@ class SettingServiceProvider extends ServiceProvider { foreach ( [ - 'telegram' => TelegramChannel::class, - 'beary' => BearyChatChannel::class, - 'bark' => BarkChannel::class, - 'pushPlus' => PushPlusChannel::class, + 'telegram' => TelegramChannel::class, + 'bark' => BarkChannel::class, + 'pushPlus' => PushPlusChannel::class, 'serverChan' => ServerChanChannel::class, - 'tgChat' => TgChatChannel::class, - 'weChat' => WeChatChannel::class, - 'iYuu' => iYuuChannel::class, - 'pushDear' => PushDeerChannel::class, - 'dingTalk' => DingTalkChannel::class, + 'tgChat' => TgChatChannel::class, + 'weChat' => WeChatChannel::class, + 'iYuu' => iYuuChannel::class, + 'pushDear' => PushDeerChannel::class, + 'dingTalk' => DingTalkChannel::class, ] as $key => $channel ) { $index = array_search($key, $channels, true); diff --git a/app/Services/ArticleService.php b/app/Services/ArticleService.php index 3a3d68f1..29830ccd 100644 --- a/app/Services/ArticleService.php +++ b/app/Services/ArticleService.php @@ -5,6 +5,7 @@ namespace App\Services; class ArticleService extends BaseService { private static $article; + private static $valuables; public function __construct($article) @@ -17,13 +18,13 @@ class ArticleService extends BaseService $subUrl = route('sub', $subscribe->code); self::$valuables = [ - '{{siteName}}' => $siteName, + '{{siteName}}' => $siteName, '{{urlEndcodeSiteName}}' => urlencode($siteName), - '{{urlEndcodeSiteUrl}}' => urlencode($siteUrl), - '{{siteUrl}}' => $siteUrl, - '{{subUrl}}' => $subUrl, - '{{urlEncodeSubUrl}}' => urlencode($subUrl), - '{{base64SubUrl}}' => base64url_encode($subUrl), + '{{urlEndcodeSiteUrl}}' => urlencode($siteUrl), + '{{siteUrl}}' => $siteUrl, + '{{subUrl}}' => $subUrl, + '{{urlEncodeSubUrl}}' => urlencode($subUrl), + '{{base64SubUrl}}' => base64url_encode($subUrl), ]; } diff --git a/app/Services/CouponService.php b/app/Services/CouponService.php index 69e3c3bd..32a74668 100644 --- a/app/Services/CouponService.php +++ b/app/Services/CouponService.php @@ -13,6 +13,7 @@ use Response; class CouponService { public $code; + public $user; public function __construct(string $code) diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index b086dbee..435e2d5b 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -11,8 +11,11 @@ use Log; class OrderService { public static $order; + public static $user; + public static $goods; + public static $payment; public function __construct(Order $order) @@ -87,10 +90,10 @@ class OrderService Order::whereId(self::$order->id)->first()->update(['expired_at' => date('Y-m-d H:i:s', strtotime(self::$goods->days.' days'))]); $oldData = self::$user->transfer_enable; $updateData = [ - 'invite_num' => self::$user->invite_num + (self::$goods->invite_num ?: 0), - 'level' => self::$goods->level, + 'invite_num' => self::$user->invite_num + (self::$goods->invite_num ?: 0), + 'level' => self::$goods->level, 'speed_limit' => self::$goods->speed_limit, - 'enable' => 1, + 'enable' => 1, ]; // 无端口用户 添加端口 @@ -126,7 +129,7 @@ class OrderService return array_merge($data, [ 'transfer_enable' => self::$goods->traffic * MB, - 'reset_time' => $nextResetTime, + 'reset_time' => $nextResetTime, ]); } @@ -148,8 +151,8 @@ class OrderService return $inviter->commissionLogs() ->create([ 'invitee_id' => $user->id, - 'order_id' => self::$order->id, - 'amount' => self::$order->amount, + 'order_id' => self::$order->id, + 'amount' => self::$order->amount, 'commission' => self::$order->amount * sysConfig('referral_percent'), ]); } diff --git a/app/Services/ProxyService.php b/app/Services/ProxyService.php index 87bac4bc..40b9c1c4 100644 --- a/app/Services/ProxyService.php +++ b/app/Services/ProxyService.php @@ -14,6 +14,7 @@ class ProxyService extends BaseService use ClientConfig; private static $user; + private static $servers; public function __construct() @@ -88,12 +89,12 @@ class ProxyService extends BaseService { $user = self::$user; $config = [ - 'id' => $node->id, - 'name' => $node->name, - 'area' => $node->country->name, - 'host' => $node->host, + 'id' => $node->id, + 'name' => $node->name, + 'area' => $node->country->name, + 'host' => $node->host, 'group' => sysConfig('website_name'), - 'udp' => $node->is_udp, + 'udp' => $node->is_udp, ]; if ($node->relay_node_id) { @@ -107,7 +108,7 @@ class ProxyService extends BaseService switch ($node->type) { case 0: $config = array_merge($config, [ - 'type' => 'shadowsocks', + 'type' => 'shadowsocks', 'passwd' => $user->passwd, ], $node->profile); if ($node->port && $node->port !== 0) { @@ -125,10 +126,10 @@ class ProxyService extends BaseService break; case 3: $config = array_merge($config, [ - 'type' => 'trojan', - 'port' => $node->port, + 'type' => 'trojan', + 'port' => $node->port, 'passwd' => $user->passwd, - 'sni' => '', + 'sni' => '', ], $node->profile); break; case 1: @@ -161,17 +162,17 @@ class ProxyService extends BaseService case 2: $url = sysConfig('website_url'); $result = 'vmess://'.base64url_encode(json_encode([ - 'v' => '2', - 'ps' => $text, - 'add' => $url, + 'v' => '2', + 'ps' => $text, + 'add' => $url, 'port' => 0, - 'id' => 0, - 'aid' => 0, - 'net' => 'tcp', + 'id' => 0, + 'aid' => 0, + 'net' => 'tcp', 'type' => 'none', 'host' => $url, 'path' => '/', - 'tls' => 'tls', + 'tls' => 'tls', ], JSON_PRETTY_PRINT)); break; case 3: @@ -203,7 +204,7 @@ class ProxyService extends BaseService { $type = $is_url ? new URLSchemes() : new Text(); switch ($server['type']) { - case'shadowsocks': + case 'shadowsocks': $data = $type->buildShadowsocks($server); break; case 'shadowsocksr': diff --git a/app/Services/TelegramService.php b/app/Services/TelegramService.php index 044a7986..fa683c1b 100644 --- a/app/Services/TelegramService.php +++ b/app/Services/TelegramService.php @@ -16,8 +16,8 @@ class TelegramService public function sendMessage(int $chatId, string $text, string $parseMode = '') { $this->request('sendMessage', [ - 'chat_id' => $chatId, - 'text' => $text, + 'chat_id' => $chatId, + 'text' => $text, 'parse_mode' => $parseMode, ]); } diff --git a/app/Services/UserService.php b/app/Services/UserService.php index 5e39342c..3bfbda4a 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -23,28 +23,28 @@ class UserService extends BaseService $user = self::$user; return [ - 'id' => $user->id, - 'nickname' => $user->nickname, - 'account' => $user->username, - 'port' => $user->port, - 'passwd' => $user->passwd, - 'uuid' => $user->vmess_id, + 'id' => $user->id, + 'nickname' => $user->nickname, + 'account' => $user->username, + 'port' => $user->port, + 'passwd' => $user->passwd, + 'uuid' => $user->vmess_id, 'transfer_enable' => $user->transfer_enable, - 'u' => $user->u, - 'd' => $user->d, - 't' => $user->t, - 'enable' => $user->enable, - 'speed_limit' => $user->speed_limit, - 'credit' => $user->credit, - 'expired_at' => strtotime($user->expired_at), - 'ban_time' => $user->ban_time, - 'level' => $user->level_name, - 'group' => $user->userGroup->name ?? null, - 'last_login' => $user->last_login, - 'reset_time' => $user->reset_date, - 'invite_num' => $user->invite_num, - 'status' => $user->status, - 'invite_url' => $this->inviteURI(), + 'u' => $user->u, + 'd' => $user->d, + 't' => $user->t, + 'enable' => $user->enable, + 'speed_limit' => $user->speed_limit, + 'credit' => $user->credit, + 'expired_at' => strtotime($user->expired_at), + 'ban_time' => $user->ban_time, + 'level' => $user->level_name, + 'group' => $user->userGroup->name ?? null, + 'last_login' => $user->last_login, + 'reset_time' => $user->reset_date, + 'invite_num' => $user->invite_num, + 'status' => $user->status, + 'invite_url' => $this->inviteURI(), ]; } diff --git a/app/View/Components/Alert.php b/app/View/Components/Alert.php index f6b5db53..0a31db38 100644 --- a/app/View/Components/Alert.php +++ b/app/View/Components/Alert.php @@ -7,6 +7,7 @@ use Illuminate\View\Component; class Alert extends Component { public $type; + public $message; public function __construct($type, $message) diff --git a/app/View/Components/ChatUnit.php b/app/View/Components/ChatUnit.php index 131e1033..9bda3e42 100644 --- a/app/View/Components/ChatUnit.php +++ b/app/View/Components/ChatUnit.php @@ -7,6 +7,7 @@ use Illuminate\View\Component; class ChatUnit extends Component { public $user; + public $ticket; public function __construct($user, $ticket) diff --git a/composer.json b/composer.json index 0b269bbf..5dbfa544 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,6 @@ "ipip/db": "^1.0", "jenssegers/agent": "^2.6", "kyslik/column-sortable": "^6.4", - "laravel-notification-channels/bearychat": "^1.4", "laravel-notification-channels/telegram": "^0.5", "laravel/framework": "^7.30", "laravel/sanctum": "^2.15", @@ -33,7 +32,6 @@ "laravel/tinker": "^2.6", "mews/captcha": "^3.2", "mews/purifier": "^3.3", - "overtrue/laravel-lang": "~5.0", "phpoffice/phpspreadsheet": "^1.16", "socialiteproviders/telegram": "^4.1", "spatie/laravel-permission": "^4.0", diff --git a/config/app.php b/config/app.php index e540c83f..c474a061 100644 --- a/config/app.php +++ b/config/app.php @@ -159,7 +159,7 @@ return [ Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, - // Illuminate\Translation\TranslationServiceProvider::class, // 弃用自带多国语言包功能 + Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, diff --git a/config/columnsortable.php b/config/columnsortable.php index a1e8699c..e86f0f2b 100644 --- a/config/columnsortable.php +++ b/config/columnsortable.php @@ -5,17 +5,17 @@ return [ /* spec columns */ - 'columns' => [ - 'alpha' => [ - 'rows' => ['description', 'email', 'name', 'slug'], + 'columns' => [ + 'alpha' => [ + 'rows' => ['description', 'email', 'name', 'slug'], 'class' => 'fas fa-sort-alpha', ], - 'amount' => [ - 'rows' => ['amount', 'price', 'credit'], + 'amount' => [ + 'rows' => ['amount', 'price', 'credit'], 'class' => 'fas fa-sort-amount', ], 'numeric' => [ - 'rows' => ['created_at', 'updated_at', 'expired_at', 't', 'level', 'id', 'phone_number', 'port', 'times'], + 'rows' => ['created_at', 'updated_at', 'expired_at', 't', 'level', 'id', 'phone_number', 'port', 'times'], 'class' => 'fas fa-sort-numeric', ], ], @@ -23,48 +23,48 @@ return [ /* whether icons should be enabled */ - 'enable_icons' => true, + 'enable_icons' => true, /* defines icon set to use when sorted data is none above (alpha nor amount nor numeric) */ - 'default_icon_set' => 'fas fa-sort', + 'default_icon_set' => 'fas fa-sort', /* icon that shows when generating sortable link while column is not sorted */ - 'sortable_icon' => 'fas fa-sort', + 'sortable_icon' => 'fas fa-sort', /* generated icon is clickable non-clickable (default) */ - 'clickable_icon' => true, + 'clickable_icon' => true, /* icon and text separator (any string) in case of 'clickable_icon' => true; separator creates possibility to style icon and anchor-text properly */ - 'icon_text_separator' => ' ', + 'icon_text_separator' => ' ', /* suffix class that is appended when ascending direction is applied */ - 'asc_suffix' => '-up', + 'asc_suffix' => '-up', /* suffix class that is appended when descending direction is applied */ - 'desc_suffix' => '-down', + 'desc_suffix' => '-down', /* default anchor class, if value is null none is added */ - 'anchor_class' => null, + 'anchor_class' => null, /* default active anchor class, if value is null none is added */ - 'active_anchor_class' => null, + 'active_anchor_class' => null, /* default sort direction anchor class, if value is null none is added @@ -79,43 +79,43 @@ return [ /* formatting function applied to name of column, use null to turn formatting off */ - 'formatting_function' => 'ucfirst', + 'formatting_function' => 'ucfirst', /* apply formatting function to custom titles as well as column names */ - 'format_custom_titles' => true, + 'format_custom_titles' => true, /* inject title parameter in query strings, use null to turn injection off example: 'inject_title' => 't' will result in ..user/?t="formatted title of sorted column" */ - 'inject_title_as' => null, + 'inject_title_as' => null, /* allow request modification, when default sorting is set but is not in URI (first load) */ - 'allow_request_modification' => true, + 'allow_request_modification' => true, /* default direction for: $user->sortable('id') usage */ - 'default_direction' => 'asc', + 'default_direction' => 'asc', /* default direction for non-sorted columns */ - 'default_direction_unsorted' => 'asc', + 'default_direction_unsorted' => 'asc', /* use the first defined sortable column (Model::$sortable) as default also applies if sorting parameters are invalid for example: 'sort' => 'name', 'direction' => '' */ - 'default_first_column' => false, + 'default_first_column' => false, /* join type: join vs leftJoin (default leftJoin) for more information see https://github.com/Kyslik/column-sortable/issues/59 */ - 'join_type' => 'leftJoin', + 'join_type' => 'leftJoin', ]; diff --git a/config/common.php b/config/common.php index e65d611b..c888a051 100644 --- a/config/common.php +++ b/config/common.php @@ -3,20 +3,20 @@ return [ 'payment' => [ 'labels' => [ - 'bitpayx' => '麻瓜宝', - 'codepay' => '码支付', - 'credit' => '余额', - 'epay' => '易支付', - 'f2fpay' => '支付宝当面付', - 'manual' => '人工支付', + 'bitpayx' => '麻瓜宝', + 'codepay' => '码支付', + 'credit' => '余额', + 'epay' => '易支付', + 'f2fpay' => '支付宝当面付', + 'manual' => '人工支付', 'paybeaver' => '海狸支付', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal', - 'stripe' => 'Stripe', - 'theadpay' => '平头哥支付', - 'youzan' => '有赞云', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal', + 'stripe' => 'Stripe', + 'theadpay' => '平头哥支付', + 'youzan' => '有赞云', ], - 'icon' => [ + 'icon' => [ 0 => 'creditpay.svg', 1 => 'alipay.png', 2 => 'qq.png', @@ -30,24 +30,24 @@ return [ 'oauth' => [ 'labels' => [ - 'facebook' => 'Facebook', - 'twitter' => 'Twitter', - 'linkedin' => 'LinkedIn', - 'google' => 'Google', - 'github' => 'GitHub', - 'gitlab' => 'GitLab', + 'facebook' => 'Facebook', + 'twitter' => 'Twitter', + 'linkedin' => 'LinkedIn', + 'google' => 'Google', + 'github' => 'GitHub', + 'gitlab' => 'GitLab', 'bitbucket' => 'Bitbucket', - 'telegram' => 'Telegram', + 'telegram' => 'Telegram', ], - 'icon' => [ - 'facebook' => 'fa-facebook', - 'twitter' => 'fa-twitter', - 'linkedin' => 'fa-linkedin', - 'google' => 'fa-google', - 'github' => 'fa-github', - 'gitlab' => 'fa-gitlab', + 'icon' => [ + 'facebook' => 'fa-facebook', + 'twitter' => 'fa-twitter', + 'linkedin' => 'fa-linkedin', + 'google' => 'fa-google', + 'github' => 'fa-github', + 'gitlab' => 'fa-gitlab', 'bitbucket' => 'fa-bitbucket', - 'telegram' => 'fa-telegram', + 'telegram' => 'fa-telegram', ], ], @@ -60,24 +60,24 @@ return [ 'notification' => [ 'labels' => [ - 1 => '邮件', - 2 => 'ServerChan', - 3 => 'Bark', - 4 => 'Telegram', - 5 => '微信企业', - 6 => 'TG酱', - 7 => 'PushPlus', - 8 => '爱语飞飞', - 9 => 'PushDear', + 1 => '邮件', + 2 => 'ServerChan', + 3 => 'Bark', + 4 => 'Telegram', + 5 => '微信企业', + 6 => 'TG酱', + 7 => 'PushPlus', + 8 => '爱语飞飞', + 9 => 'PushDear', 10 => '钉钉', ], ], 'language' => [ 'zh_CN' => ['简体中文', 'cn'], - 'en' => ['English', 'us'], - 'ko' => ['한국어', 'kr'], - 'vi' => ['Tiếng Việt', 'vn'], + 'en' => ['English', 'us'], + 'ko' => ['한국어', 'kr'], + 'vi' => ['Tiếng Việt', 'vn'], ], 'currency' => [ diff --git a/config/log-viewer.php b/config/log-viewer.php index dfd3090e..0714fc0d 100644 --- a/config/log-viewer.php +++ b/config/log-viewer.php @@ -17,8 +17,8 @@ return [ */ 'pattern' => [ - 'prefix' => Filesystem::PATTERN_PREFIX, // 'laravel-' - 'date' => Filesystem::PATTERN_DATE, // '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' + 'prefix' => Filesystem::PATTERN_PREFIX, // 'laravel-' + 'date' => Filesystem::PATTERN_DATE, // '[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]' 'extension' => Filesystem::PATTERN_EXTENSION, // '.log' ], @@ -51,7 +51,7 @@ return [ 'enabled' => true, 'attributes' => [ - 'prefix' => 'admin/log-viewer', + 'prefix' => 'admin/log-viewer', 'middleware' => env('ARCANEDEV_LOGVIEWER_MIDDLEWARE') ? explode(',', env('ARCANEDEV_LOGVIEWER_MIDDLEWARE')) : ['web', 'admin'], ], ], @@ -92,15 +92,15 @@ return [ */ 'icons' => [ - 'all' => 'fa-solid fa-fw fa-list-ul', + 'all' => 'fa-solid fa-fw fa-list-ul', 'emergency' => 'fa-solid fa-fw fa-life-ring', - 'alert' => 'fa-solid fa-fw fa-bullhorn', - 'critical' => 'fa-solid fa-fw fa-heart-pulse', - 'error' => 'fa-solid fa-fw fa-circle-xmark', - 'warning' => 'fa-solid fa-fw fa-triangle-exclamation', - 'notice' => 'fa-solid fa-fw fa-circle-exclamation', - 'info' => 'fa-solid fa-fw fa-circle-info', - 'debug' => 'fa-solid fa-fw fa-bug', + 'alert' => 'fa-solid fa-fw fa-bullhorn', + 'critical' => 'fa-solid fa-fw fa-heart-pulse', + 'error' => 'fa-solid fa-fw fa-circle-xmark', + 'warning' => 'fa-solid fa-fw fa-triangle-exclamation', + 'notice' => 'fa-solid fa-fw fa-circle-exclamation', + 'info' => 'fa-solid fa-fw fa-circle-info', + 'debug' => 'fa-solid fa-fw fa-bug', ], /* ----------------------------------------------------------------- @@ -110,16 +110,16 @@ return [ 'colors' => [ 'levels' => [ - 'empty' => '#D1D1D1', - 'all' => '#8A8A8A', + 'empty' => '#D1D1D1', + 'all' => '#8A8A8A', 'emergency' => '#E62020', - 'alert' => '#FF4C52', - 'critical' => '#FF666B', - 'error' => '#F57D1B', - 'warning' => '#FCB900', - 'notice' => '#589FFC', - 'info' => '#28C0DE', - 'debug' => '#526069', + 'alert' => '#FF4C52', + 'critical' => '#FF666B', + 'error' => '#F57D1B', + 'warning' => '#FCB900', + 'notice' => '#589FFC', + 'info' => '#28C0DE', + 'debug' => '#526069', ], ], diff --git a/config/services.php b/config/services.php index f812ef72..4c367751 100644 --- a/config/services.php +++ b/config/services.php @@ -15,8 +15,8 @@ return [ */ 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], @@ -25,58 +25,58 @@ return [ ], 'ses' => [ - 'key' => env('AWS_ACCESS_KEY_ID'), + 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'facebook' => [ - 'client_id' => env('FACEBOOK_CLIENT_ID'), + 'client_id' => env('FACEBOOK_CLIENT_ID'), 'client_secret' => env('FACEBOOK_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'twitter' => [ - 'client_id' => env('TWITTER_CLIENT_ID'), + 'client_id' => env('TWITTER_CLIENT_ID'), 'client_secret' => env('TWITTER_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'linkedin' => [ - 'client_id' => env('LINKEDIN_CLIENT_ID'), + 'client_id' => env('LINKEDIN_CLIENT_ID'), 'client_secret' => env('LINKEDIN_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'google' => [ - 'client_id' => env('GOOGLE_CLIENT_ID'), + 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'github' => [ - 'client_id' => env('GITHUB_CLIENT_ID'), + 'client_id' => env('GITHUB_CLIENT_ID'), 'client_secret' => env('GITHUB_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'gitlab' => [ - 'client_id' => env('GITLAB_CLIENT_ID'), + 'client_id' => env('GITLAB_CLIENT_ID'), 'client_secret' => env('GITLAB_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'bitbucket' => [ - 'client_id' => env('BITBUCKET_CLIENT_ID'), + 'client_id' => env('BITBUCKET_CLIENT_ID'), 'client_secret' => env('BITBUCKET_CLIENT_SECRET'), - 'redirect' => '', + 'redirect' => '', ], 'telegram' => [ - 'bot' => env('TELEGRAM_BOT_NAME'), // The bot's username - 'client_id' => null, + 'bot' => env('TELEGRAM_BOT_NAME'), // The bot's username + 'client_id' => null, 'client_secret' => env('TELEGRAM_TOKEN'), - 'redirect' => '/oauth/telegram/redirect', + 'redirect' => '/oauth/telegram/redirect', ], 'baidu' => [ diff --git a/config/tasks.php b/config/tasks.php index 71530dec..e54d6597 100644 --- a/config/tasks.php +++ b/config/tasks.php @@ -1,31 +1,31 @@ env('TASKS_CHUNK', 1000), // 大数据量修改,分段处理,减少内存使用 - 'clean' => [ - 'node_daily_logs' => env('TASKS_NODE_DAILY_LOGS', '-2 month'), // 清除节点每天流量数据日志 - 'node_hourly_logs' => env('TASKS_NODE_HOURLY_LOGS', '-3 days'), // 清除节点每小时流量数据日志 - 'notification_logs' => env('TASKS_NOTIFICATION_LOGS', '-1 month'), // 清理通知日志 - 'node_heartbeats' => env('TASKS_NODE_HEARTBEATS', '-30 minutes'), // 清除节点负载信息日志 - 'node_online_logs' => env('TASKS_NODE_ONLINE_LOGS', '-1 hour'), // 清除节点在线用户数日志 - 'payments' => env('TASKS_PAYMENTS', '-1 year'), // 清理在线支付日志 - 'rule_logs' => env('TASKS_RULE_lOGS', '-3 month'), // 清理审计触发日志 - 'node_online_ips' => env('TASKS_NODE_ONLINE_IPS', '-1 week'), // 清除用户连接IP - 'user_baned_logs' => env('TASKS_USER_BANED_LOGS', '-3 month'), // 清除用户封禁日志 + 'chunk' => env('TASKS_CHUNK', 1000), // 大数据量修改,分段处理,减少内存使用 + 'clean' => [ + 'node_daily_logs' => env('TASKS_NODE_DAILY_LOGS', '-2 month'), // 清除节点每天流量数据日志 + 'node_hourly_logs' => env('TASKS_NODE_HOURLY_LOGS', '-3 days'), // 清除节点每小时流量数据日志 + 'notification_logs' => env('TASKS_NOTIFICATION_LOGS', '-1 month'), // 清理通知日志 + 'node_heartbeats' => env('TASKS_NODE_HEARTBEATS', '-30 minutes'), // 清除节点负载信息日志 + 'node_online_logs' => env('TASKS_NODE_ONLINE_LOGS', '-1 hour'), // 清除节点在线用户数日志 + 'payments' => env('TASKS_PAYMENTS', '-1 year'), // 清理在线支付日志 + 'rule_logs' => env('TASKS_RULE_lOGS', '-3 month'), // 清理审计触发日志 + 'node_online_ips' => env('TASKS_NODE_ONLINE_IPS', '-1 week'), // 清除用户连接IP + 'user_baned_logs' => env('TASKS_USER_BANED_LOGS', '-3 month'), // 清除用户封禁日志 'user_daily_logs_nodes' => env('TASKS_USER_DAILY_LOGS_NODES', '-1 month'), // 清除用户各节点的每天流量数据日志 'user_daily_logs_total' => env('TASKS_USER_DAILY_LOGS_TOTAL', '-3 month'), // 清除用户节点总计的每天流量数据日志 - 'user_hourly_logs' => env('TASKS_USER_HOURLY_LOGS', '-3 days'), // 清除用户每时各流量数据日志 最少值为 2 - 'login_logs' => env('TASKS_LOGIN_LOGS', '-3 month'), // 清除用户登陆日志 - 'subscribe_logs' => env('TASKS_SUBSCRIBE_LOGS', '-1 month'), // 清理用户订阅请求日志 - 'traffic_logs' => env('TASKS_TRAFFIC_LOGS', '-3 days'), // 清除用户流量日志 - 'unpaid_orders' => env('UNPAID_ORDERS', '-1 year'), // 清除用户流量日志 + 'user_hourly_logs' => env('TASKS_USER_HOURLY_LOGS', '-3 days'), // 清除用户每时各流量数据日志 最少值为 2 + 'login_logs' => env('TASKS_LOGIN_LOGS', '-3 month'), // 清除用户登陆日志 + 'subscribe_logs' => env('TASKS_SUBSCRIBE_LOGS', '-1 month'), // 清理用户订阅请求日志 + 'traffic_logs' => env('TASKS_TRAFFIC_LOGS', '-3 days'), // 清除用户流量日志 + 'unpaid_orders' => env('UNPAID_ORDERS', '-1 year'), // 清除用户流量日志 ], - 'close' => [ - 'tickets' => env('TASKS_TICKETS', 72), // 自动关闭工单,单位:小时 + 'close' => [ + 'tickets' => env('TASKS_TICKETS', 72), // 自动关闭工单,单位:小时 'confirmation_orders' => env('TASKS_CONFIRMATION_ORDERS', 12), // 自动关闭人工支付订单,单位:小时 - 'orders' => env('TASKS_ORDERS', 15), // 自动关闭订单,单位:分钟 - 'verify' => env('TASKS_VERIFY', 15), // 自动失效验证码,单位:分钟 + 'orders' => env('TASKS_ORDERS', 15), // 自动关闭订单,单位:分钟 + 'verify' => env('TASKS_VERIFY', 15), // 自动失效验证码,单位:分钟 ], - 'release_port' => env('TASKS_RELEASE_PORT', 30), // 端口自动释放,单位:天 + 'release_port' => env('TASKS_RELEASE_PORT', 30), // 端口自动释放,单位:天 'recently_heartbeat' => env('TASKS_RECENTLY_HEARTBEAT', '-10 minutes'), // 节点近期负载 ]; diff --git a/config/theme.php b/config/theme.php index 076230a3..fba19b59 100644 --- a/config/theme.php +++ b/config/theme.php @@ -3,9 +3,9 @@ // 如何使用请参考 https://proxypanel.gitbook.io/wiki/page-modify#theme return [ 'sidebar' => env('THEME_SIDEBAR', 'site-menubar-light'), - 'navbar' => [ + 'navbar' => [ 'inverse' => env('THEME_NAVBAR_INVERSE', 'navbar-inverse'), - 'skin' => env('THEME_NAVBAR_SKIN', 'bg-indigo-600'), + 'skin' => env('THEME_NAVBAR_SKIN', 'bg-indigo-600'), ], - 'skin' => env('THEME_SKIN'), + 'skin' => env('THEME_SKIN'), ]; diff --git a/config/version.php b/config/version.php index 2f007175..75551e98 100644 --- a/config/version.php +++ b/config/version.php @@ -2,5 +2,5 @@ return [ 'name' => 'ProxyPanel', - 'number' => '2.8.0', + 'number' => '2.8.x', ]; diff --git a/database/migrations/2021_01_27_080544_config_clean.php b/database/migrations/2021_01_27_080544_config_clean.php index 6ee703d7..7b7755e2 100644 --- a/database/migrations/2021_01_27_080544_config_clean.php +++ b/database/migrations/2021_01_27_080544_config_clean.php @@ -13,6 +13,7 @@ class ConfigClean extends Migration 'hcaptcha_secret', 'hcaptcha_sitekey', ]; + protected $newConfigs = [ 'captcha_key', 'captcha_secret', diff --git a/database/migrations/2022_01_22_231856_improve_node_table.php b/database/migrations/2022_01_22_231856_improve_node_table.php index 551bbc92..6e4bb5fe 100644 --- a/database/migrations/2022_01_22_231856_improve_node_table.php +++ b/database/migrations/2022_01_22_231856_improve_node_table.php @@ -44,14 +44,14 @@ class ImproveNodeTable extends Migration break; case 2: $profile = [ - 'method' => $node->v2_method, + 'method' => $node->v2_method, 'v2_alter_id' => $node->v2_alter_id, - 'v2_net' => $node->v2_net, - 'v2_type' => $node->v2_type, - 'v2_host' => $node->v2_host, - 'v2_path' => $node->v2_path, - 'v2_tls' => $node->v2_tls ? 'tls' : '', - 'v2_sni' => $node->v2_sni, + 'v2_net' => $node->v2_net, + 'v2_type' => $node->v2_type, + 'v2_host' => $node->v2_host, + 'v2_path' => $node->v2_path, + 'v2_tls' => $node->v2_tls ? 'tls' : '', + 'v2_sni' => $node->v2_sni, ]; break; case 3: @@ -62,12 +62,12 @@ class ImproveNodeTable extends Migration case 1: case 4: $profile = [ - 'method' => $node->method, - 'protocol' => $node->protocol, - 'obfs' => $node->obfs, - 'obfs_param' => $node->obfs_param, + 'method' => $node->method, + 'protocol' => $node->protocol, + 'obfs' => $node->obfs, + 'obfs_param' => $node->obfs_param, 'protocol_param' => $node->protocol_param, - 'passwd' => $node->passwd, + 'passwd' => $node->passwd, ]; break; default: @@ -76,23 +76,23 @@ class ImproveNodeTable extends Migration if ($node->relay_server && $node->relay_port) { // 创建 中转线路 $relayNodeData = [ - 'type' => 0, - 'name' => $node->name.'↔️', - 'country_code' => $node->country_code, - 'port' => $node->relay_port, - 'level' => $node->level, - 'rule_group_id' => $node->rule_group_id, - 'speed_limit' => $node->speed_limit, - 'client_limit' => $node->client_limit, - 'description' => $node->description, - 'geo' => $node->geo, - 'traffic_rate' => $node->traffic_rate, - 'relay_node_id' => $node->id, - 'is_udp' => $node->is_udp, - 'push_port' => $node->push_port, + 'type' => 0, + 'name' => $node->name.'↔️', + 'country_code' => $node->country_code, + 'port' => $node->relay_port, + 'level' => $node->level, + 'rule_group_id' => $node->rule_group_id, + 'speed_limit' => $node->speed_limit, + 'client_limit' => $node->client_limit, + 'description' => $node->description, + 'geo' => $node->geo, + 'traffic_rate' => $node->traffic_rate, + 'relay_node_id' => $node->id, + 'is_udp' => $node->is_udp, + 'push_port' => $node->push_port, 'detection_type' => $node->detection_type, - 'sort' => $node->sort, - 'status' => $node->status, + 'sort' => $node->sort, + 'status' => $node->status, ]; if (filter_var($node->relay_server, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { @@ -161,6 +161,7 @@ class ImproveNodeTable extends Migration } catch (Exception $e) { Log::emergency('中转删除失败,请手动在数据库中删除; '.$e->getMessage()); } + continue; } switch ($node->type) { // 回滚节点配置 diff --git a/database/seeds/ArticleSeeder.php b/database/seeds/ArticleSeeder.php index c82b6f7b..f1251de2 100644 --- a/database/seeds/ArticleSeeder.php +++ b/database/seeds/ArticleSeeder.php @@ -25,7 +25,7 @@ class ArticleSeeder extends Seeder ', ], - 254 => [ + 254 => [ '为什么我的账号状态显示是禁用?', '

账号在2种情况下会显示禁用;

  1. 套餐过期/流量枯竭;此情况您需要重新购买/重置 【服 务】
  2. @@ -33,13 +33,13 @@ class ArticleSeeder extends Seeder

如您对禁用情况有疑问,可以创建【工 单】,联系售后人员。

', ], - 253 => [ + 253 => [ '为什么我的订阅链接被禁用了?', '

订阅地址对于账号来说非常重要。所以本站对此设置了严格的限制措施,以防止用户无意间泄露给他人后,无法挽回。

限制为: 24小时内,订阅地址只允许请求 20次

解封,请在过一段时间并确定无误后,创建【工 单】,联系售后人员

小知识:如果您无意间的截图忘记将订阅地址打码了,您可以 点击上方 更换按钮

', ], - 252 => [ + 252 => [ '我想续费/购买服务,该怎么操作?', '
  1. 在线支付,本支付方式支持支付宝。支付后即开即用。前往 【服 务】 选择想要购买的套餐,在订单界面选择在线支付即可。
  2. 余额支付,本支付方法支持微信,支付宝。支付后需要等待充值到账,再购买服务。 ,充值后等待充值到账,一般会在24小时内到账,到账后可以在 【服 务】页面查看您的账号余额。 在【服 务】 选择想要购买的套餐,在订单界面选择余额支付即可。
  3. @@ -52,7 +52,7 @@ class ArticleSeeder extends Seeder ], ], '下载&教程' => [ - 99 => [ + 99 => [ 'Windows', '
    1. 点击此处下载客户端并启动
    2. 运行 ShadowsocksR 文件夹内的 ShadowsocksR.exe
    3. diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index d520e5ef..1e452e80 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -1,802 +1,802 @@ [ - 'users' => 'All Users', - 'available_users' => 'Active Users', - 'paid_users' => 'Paying Users', - 'active_days_users' => 'Active Users Within :days Days', - 'inactive_days_users' => 'Inactive Users Over :days Days', - 'online_users' => 'Current Online Users', - 'expiring_users' => 'Near Due Date', - 'overuse_users' => 'Overuse (used ≥ 90% traffic)', - 'abnormal_users' => 'Abnormal Traffic (last 1 hour)', - 'nodes' => 'Nodes', - 'maintaining_nodes' => 'Nodes Under Maintenance', - 'traffic_consumed' => 'Total Traffic Consumed', - 'traffic_days_consumed' => 'Traffic Consumed Within :days Days', - 'orders' => 'Orders', - 'online_orders' => 'Online Orders', - 'succeed_orders' => 'Successful Orders', - 'credit' => 'Total Balance', + 'dashboard' => [ + 'users' => 'All Users', + 'available_users' => 'Active Users', + 'paid_users' => 'Paying Users', + 'active_days_users' => 'Active Users Within :days Days', + 'inactive_days_users' => 'Inactive Users Over :days Days', + 'online_users' => 'Current Online Users', + 'expiring_users' => 'Near Due Date', + 'overuse_users' => 'Overuse (used ≥ 90% traffic)', + 'abnormal_users' => 'Abnormal Traffic (last 1 hour)', + 'nodes' => 'Nodes', + 'maintaining_nodes' => 'Nodes Under Maintenance', + 'traffic_consumed' => 'Total Traffic Consumed', + 'traffic_days_consumed' => 'Traffic Consumed Within :days Days', + 'orders' => 'Orders', + 'online_orders' => 'Online Orders', + 'succeed_orders' => 'Successful Orders', + 'credit' => 'Total Balance', 'withdrawing_commissions' => 'Pending Commissions Withdrawal', - 'withdrawn_commissions' => 'Withdrawn Commissions', + 'withdrawn_commissions' => 'Withdrawn Commissions', ], - 'action' => [ + 'action' => [ 'edit_item' => 'Edit :attribute', - 'add_item' => 'Add :attribute', + 'add_item' => 'Add :attribute', ], - 'confirm' => [ - 'delete' => [0 => 'Do you want to delete :attribute [', 1 => '] ?'], + 'confirm' => [ + 'delete' => [0 => 'Do you want to delete :attribute [', 1 => '] ?'], 'continues' => 'Do you want to continue?', - 'export' => 'Do you want to export all?', + 'export' => 'Do you want to export all?', ], - 'user_dashboard' => 'User Dashboard', - 'menu' => [ - 'dashboard' => 'Dashboard', - 'user' => [ - 'attribute' => 'Users', - 'list' => 'User Management', - 'oauth' => 'OAuth', - 'group' => 'User Groups', + 'user_dashboard' => 'User Dashboard', + 'menu' => [ + 'dashboard' => 'Dashboard', + 'user' => [ + 'attribute' => 'Users', + 'list' => 'User Management', + 'oauth' => 'OAuth', + 'group' => 'User Groups', 'credit_log' => 'Balance History', - 'subscribe' => 'Subscription Requests', + 'subscribe' => 'Subscription Requests', ], - 'rbac' => [ - 'attribute' => 'RBAC', + 'rbac' => [ + 'attribute' => 'RBAC', 'permission' => 'Permissions', - 'role' => 'Roles', + 'role' => 'Roles', ], 'customer_service' => [ 'attribute' => 'Helpdesk', - 'ticket' => 'Support Tickets', - 'article' => 'Article Management', - 'push' => 'Push Notifications', - 'mail' => 'Mass Mailing', + 'ticket' => 'Support Tickets', + 'article' => 'Article Management', + 'push' => 'Push Notifications', + 'mail' => 'Mass Mailing', ], - 'node' => [ + 'node' => [ 'attribute' => 'Nodes', - 'list' => 'Node Management', - 'auth' => 'API Authorization', - 'cert' => 'Certificate', + 'list' => 'Node Management', + 'auth' => 'API Authorization', + 'cert' => 'Certificate', ], - 'rule' => [ + 'rule' => [ 'attribute' => 'Audit', - 'list' => 'Rule Management', - 'group' => 'Rule Group', - 'trigger' => 'Trigger Logs', + 'list' => 'Rule Management', + 'group' => 'Rule Group', + 'trigger' => 'Trigger Logs', ], - 'shop' => [ + 'shop' => [ 'attribute' => 'Shop', - 'goods' => 'Product Management', - 'coupon' => 'Coupon Management', - 'order' => 'Orders', + 'goods' => 'Product Management', + 'coupon' => 'Coupon Management', + 'order' => 'Orders', ], - 'promotion' => [ - 'attribute' => 'Promotions', - 'invite' => 'Referral Management', - 'withdraw' => 'Commission Withdrawals', + 'promotion' => [ + 'attribute' => 'Promotions', + 'invite' => 'Referral Management', + 'withdraw' => 'Commission Withdrawals', 'rebate_flow' => 'Rebate History', ], - 'analysis' => [ - 'attribute' => 'Report', + 'analysis' => [ + 'attribute' => 'Report', 'accounting' => 'Accounting', - 'user_flow' => 'User Flow', + 'user_flow' => 'User Flow', ], - 'log' => [ - 'attribute' => 'Logs', - 'traffic' => 'Data Usage', - 'traffic_flow' => 'Data Flow', - 'service_ban' => 'Ban Records', - 'online_logs' => 'Online Logs', - 'online_monitor' => 'Online Monitoring', - 'notify' => 'Notification Logs', + 'log' => [ + 'attribute' => 'Logs', + 'traffic' => 'Data Usage', + 'traffic_flow' => 'Data Flow', + 'service_ban' => 'Ban Records', + 'online_logs' => 'Online Logs', + 'online_monitor' => 'Online Monitoring', + 'notify' => 'Notification Logs', 'payment_callback' => 'Payment Callback', - 'system' => 'System Report', + 'system' => 'System Report', ], - 'tools' => [ + 'tools' => [ 'attribute' => 'Toolbox', 'decompile' => 'Decompile', - 'convert' => 'Convert', - 'import' => 'Import', - 'analysis' => 'Log Analysis', + 'convert' => 'Convert', + 'import' => 'Import', + 'analysis' => 'Log Analysis', ], - 'setting' => [ - 'attribute' => 'Settings', + 'setting' => [ + 'attribute' => 'Settings', 'email_suffix' => 'Email Suffix Management', - 'universal' => 'General Settings', - 'system' => 'System Settings', + 'universal' => 'General Settings', + 'system' => 'System Settings', ], ], - 'user' => [ - 'massive' => [ - 'text' => 'Number of Users to Generate', - 'button' => 'Bulk Generation', - 'failed' => 'Bulk generation failed', + 'user' => [ + 'massive' => [ + 'text' => 'Number of Users to Generate', + 'button' => 'Bulk Generation', + 'failed' => 'Bulk generation failed', 'succeed' => 'Bulk accounts generated successfully', - 'note' => 'Bulk users generated in background', + 'note' => 'Bulk users generated in background', ], - 'proxy_info' => 'Configuration information', + 'proxy_info' => 'Configuration information', 'traffic_monitor' => 'Data Statistics', - 'online_monitor' => 'Online Monitoring', - 'reset_traffic' => 'Reset Data', - 'user_view' => 'Switch to User Profile', + 'online_monitor' => 'Online Monitoring', + 'reset_traffic' => 'Reset Data', + 'user_view' => 'Switch to User Profile', 'connection_test' => 'Network test', - 'counts' => 'Total of :num accounts', - 'reset_confirm' => [0 => 'Do you want to reset [', 1 => ']\'s data?'], - 'info' => [ - 'account' => 'Account Information', - 'proxy' => 'Proxy Information', - 'switch' => 'Switch Identity', - 'reset_date_hint' => 'Next data reset date', - 'expired_date_hint' => 'Leave empty for one year by default', - 'uuid_hint' => 'UUID for V2Ray', + 'counts' => 'Total of :num accounts', + 'reset_confirm' => [0 => 'Do you want to reset [', 1 => ']\'s data?'], + 'info' => [ + 'account' => 'Account Information', + 'proxy' => 'Proxy Information', + 'switch' => 'Switch Identity', + 'reset_date_hint' => 'Next data reset date', + 'expired_date_hint' => 'Leave empty for one year by default', + 'uuid_hint' => 'UUID for V2Ray', 'recharge_placeholder' => 'Filling in a negative value will deduct the balance', ], - 'update_help' => 'Successfully updated, do you want to return?', - 'proxies_config' => ':username connection configuration information', - 'group' => [ - 'title' => 'User Group Control(same node can be assigned to more than one group, One user can only belong to one group; For visible/available nodes: filter by level first, then group)', - 'name' => 'Group Name', + 'update_help' => 'Successfully updated, do you want to return?', + 'proxies_config' => ':username connection configuration information', + 'group' => [ + 'title' => 'User Group Control(same node can be assigned to more than one group, One user can only belong to one group; For visible/available nodes: filter by level first, then group)', + 'name' => 'Group Name', 'counts' => 'Total of :num groups', ], ], 'zero_unlimited_hint' => 'Empty or 0 for unlimited', - 'node' => [ + 'node' => [ 'traffic_monitor' => 'Usage Statistics', - 'refresh_geo' => 'Refresh Geography', - 'ping' => 'Detect Delay', + 'refresh_geo' => 'Refresh Geography', + 'ping' => 'Detect Delay', 'connection_test' => 'Connectivity Test', - 'counts' => 'Total of :num nodes', - 'reload_all' => 'Reload All Backend', + 'counts' => 'Total of :num nodes', + 'reload_all' => 'Reload All Backend', 'refresh_geo_all' => 'Refresh All Nodes\' Geographies', - 'reload_confirm' => 'Do you want to reload the node?', - 'info' => [ - 'hint' => 'Note: Nodes page\'s ID is used in ShadowsocksR Python backend as node_id in usermysql.json, in V2Ray backend as nodeId.', - 'basic' => 'Basic Information', - 'ddns_hint' => 'Dynamic IP nodes need to be configured with DDNS. For this type of node, the node connectivity test will use server domain to test', - 'domain_placeholder' => 'Server domain address', - 'domain_hint' => 'Enable DDNS in System Settings. Domain will be automatically create/bound to IP address! No longer need to go to the DNS registrant page to modify IP information.', - 'extend' => 'Extended Information', - 'display' => [ + 'reload_confirm' => 'Do you want to reload the node?', + 'info' => [ + 'hint' => 'Note: Nodes page\'s ID is used in ShadowsocksR Python backend as node_id in usermysql.json, in V2Ray backend as nodeId.', + 'basic' => 'Basic Information', + 'ddns_hint' => 'Dynamic IP nodes need to be configured with DDNS. For this type of node, the node connectivity test will use server domain to test', + 'domain_placeholder' => 'Server domain address', + 'domain_hint' => 'Enable DDNS in System Settings. Domain will be automatically create/bound to IP address! No longer need to go to the DNS registrant page to modify IP information.', + 'extend' => 'Extended Information', + 'display' => [ 'invisible' => 'Completely invisible', - 'node' => 'Show only on :trans page', - 'sub' => 'Show by Subscription only', - 'all' => 'Visible for all', - 'hint' => 'Whether users can subscribe/see this node', + 'node' => 'Show only on :trans page', + 'sub' => 'Show by Subscription only', + 'all' => 'Visible for all', + 'hint' => 'Whether users can subscribe/see this node', ], - 'ipv4_hint' => 'Multi-IP uses \',\' partition; ex: 1.1.1.1, 8.8.8.8', - 'ipv6_hint' => 'Multi-IP uses \',\' partition; ex: 1.1.1.1, 8.8.8.8', - 'ipv4_placeholder' => 'Server IPv4 Address', - 'ipv6_placeholder' => 'Server IPv6 address', - 'push_port_hint' => 'Required and server firewall needs to be set up correctly, otherwise it will cause an exception', - 'data_rate_hint' => 'Ex: set to 0.1, 10M will be count as 100M and 500M count as 100M', - 'level_hint' => 'Level: 0 = No ratings, all visible', - 'detection' => [ - 'tcp' => 'TCP only', + 'ipv4_hint' => 'Multi-IP uses \',\' partition; ex: 1.1.1.1, 8.8.8.8', + 'ipv6_hint' => 'Multi-IP uses \',\' partition; ex: 1.1.1.1, 8.8.8.8', + 'ipv4_placeholder' => 'Server IPv4 Address', + 'ipv6_placeholder' => 'Server IPv6 address', + 'push_port_hint' => 'Required and server firewall needs to be set up correctly, otherwise it will cause an exception', + 'data_rate_hint' => 'Ex: set to 0.1, 10M will be count as 100M and 500M count as 100M', + 'level_hint' => 'Level: 0 = No ratings, all visible', + 'detection' => [ + 'tcp' => 'TCP only', 'icmp' => 'ICMP only', - 'all' => 'Detect All', + 'all' => 'Detect All', 'hint' => 'Nodes will be tested every 30-60 minutes', ], - 'obfs_param_hint' => 'While obfs is not [plain], fill in parameters to traffic masquerading; While obfs is [http_simple], suggest set port to 80; While obfs is [tls], suggest set port to 443;', + 'obfs_param_hint' => 'While obfs is not [plain], fill in parameters to traffic masquerading; While obfs is [http_simple], suggest set port to 80; While obfs is [tls], suggest set port to 443;', 'additional_ports_hint' => 'If enabled, please configure serveradditional_portsinformation', - 'v2_method_hint' => 'Do not use none when using WebSocket', - 'v2_net_hint' => 'Enable TLS when using WebSocket Transfer Protocol', - 'v2_cover' => [ - 'none' => 'None', - 'http' => 'HTTP Transport', - 'srtp' => 'Video call data (SRTP)', - 'utp' => 'BT download data (uTP)', - 'wechat' => 'WeChat video call', - 'dtls' => 'DTLS1.2 packets', + 'v2_method_hint' => 'Do not use none when using WebSocket', + 'v2_net_hint' => 'Enable TLS when using WebSocket Transfer Protocol', + 'v2_cover' => [ + 'none' => 'None', + 'http' => 'HTTP Transport', + 'srtp' => 'Video call data (SRTP)', + 'utp' => 'BT download data (uTP)', + 'wechat' => 'WeChat video call', + 'dtls' => 'DTLS1.2 packets', 'wireguard' => 'WireGuard packets', ], - 'v2_host_hint' => 'Multiple domains are separated by \',\' when the spoofing type is HTTP transfer protocol, and only one domain is allowed when using the WebSocket transfer protocol.', - 'v2_tls_provider_hint' => 'Different backend configurations are different:', - 'single_hint' => 'Recommended 80 or 443. Backend needs to configure
      strict mode: user\'s port cannot be connected, only via the following specified port. (How to configure?)', + 'v2_host_hint' => 'Multiple domains are separated by \',\' when the spoofing type is HTTP transfer protocol, and only one domain is allowed when using the WebSocket transfer protocol.', + 'v2_tls_provider_hint' => 'Different backend configurations are different:', + 'single_hint' => 'Recommended 80 or 443. Backend needs to configure
      strict mode: user\'s port cannot be connected, only via the following specified port. (How to configure?)', ], - 'proxy_info' => '*Compatibility SS', + 'proxy_info' => '*Compatibility SS', 'proxy_info_hint' => 'If compatible, please add_compatible to server configuration protocol and obfuscation', - 'reload' => 'Reload Backend', - 'auth' => [ - 'title' => 'Node Authorizations WEBAPI', - 'deploy' => [ - 'title' => 'Deploy :type_label backend', - 'attribute' => 'Backend Deployment', - 'command' => 'Operation commands', - 'update' => 'Update: ', - 'uninstall' => 'Uninstall: ', - 'start' => 'Launch: ', - 'stop' => 'Stop: ', - 'status' => 'Status: ', - 'recent_logs' => 'Recent Log: ', + 'reload' => 'Reload Backend', + 'auth' => [ + 'title' => 'Node Authorizations WEBAPI', + 'deploy' => [ + 'title' => 'Deploy :type_label backend', + 'attribute' => 'Backend Deployment', + 'command' => 'Operation commands', + 'update' => 'Update: ', + 'uninstall' => 'Uninstall: ', + 'start' => 'Launch: ', + 'stop' => 'Stop: ', + 'status' => 'Status: ', + 'recent_logs' => 'Recent Log: ', 'real_time_logs' => 'Real-time Log: ', - 'restart' => 'Restart: ', - 'same' => 'Same as above', - 'trojan_hint' => 'Please fill in the node\'sdomain name and resolve IP to this the domain', + 'restart' => 'Restart: ', + 'same' => 'Same as above', + 'trojan_hint' => 'Please fill in the node\'sdomain name and resolve IP to this the domain', ], - 'reset_auth' => 'Reset Key', - 'counts' => 'Total of :num authorizations', + 'reset_auth' => 'Reset Key', + 'counts' => 'Total of :num authorizations', 'generating_all' => 'Do you want to generate authorization for all nodes?', ], - 'cert' => [ - 'title' => 'Domain Certificates Spoofing Domain for V2Ray Nodes', - 'counts' => 'Total of :num domain certificates', + 'cert' => [ + 'title' => 'Domain Certificates Spoofing Domain for V2Ray Nodes', + 'counts' => 'Total of :num domain certificates', 'key_placeholder' => 'The KEY value of the domain certificate. Allowed to be empty, VNET-V2Ray backend support auto-signing certificate', 'pem_placeholder' => 'The PEM value of the domain certificate. Allowed to be empty, VNET-V2Ray backend support auto-signing certificate', ], ], - 'hint' => 'Hint', - 'oauth' => [ - 'title' => 'User OAuth', + 'hint' => 'Hint', + 'oauth' => [ + 'title' => 'User OAuth', 'counts' => 'Total of :num open authorizations', ], - 'select_all' => 'Select All', - 'clear' => 'Clear', - 'unselected_hint' => 'To be assigned, searchable here', - 'selected_hint' => 'Assigned, searchable here', - 'clone' => 'Clone', - 'monitor' => [ - 'daily_chart' => 'Daily traffic chart', + 'select_all' => 'Select All', + 'clear' => 'Clear', + 'unselected_hint' => 'To be assigned, searchable here', + 'selected_hint' => 'Assigned, searchable here', + 'clone' => 'Clone', + 'monitor' => [ + 'daily_chart' => 'Daily traffic chart', 'monthly_chart' => 'Monthly traffic chart', - 'node' => 'Node traffic', - 'user' => 'User traffic', - 'hint' => 'Hint: If no statistics are available, please check is the scheduled task running correctly.', + 'node' => 'Node traffic', + 'user' => 'User traffic', + 'hint' => 'Hint: If no statistics are available, please check is the scheduled task running correctly.', ], - 'tools' => [ - 'analysis' => [ - 'title' => 'SSR Log Analysis For single node only', - 'req_url' => 'Recent Requests Address', + 'tools' => [ + 'analysis' => [ + 'title' => 'SSR Log Analysis For single node only', + 'req_url' => 'Recent Requests Address', 'not_enough' => 'Less than 15,000 records, unable to analyze data', ], - 'convert' => [ - 'title' => 'Format Conversion Shadowsocks to ShadowsocksR', + 'convert' => [ + 'title' => 'Format Conversion Shadowsocks to ShadowsocksR', 'content_placeholder' => 'Please fill in the configuration information to be converted', ], 'decompile' => [ - 'title' => 'Decompile Configuration Information', - 'attribute' => 'Decompile', + 'title' => 'Decompile Configuration Information', + 'attribute' => 'Decompile', 'content_placeholder' => 'Please fill in the ShadowsocksR link that you want to decompile, one link per line', ], ], - 'ticket' => [ - 'title' => 'Tickets', - 'counts' => 'Total of :num tickets', - 'send_to' => 'Please fill in the target user information', - 'user_info' => 'User Information', - 'inviter_info' => 'Inviter Information', + 'ticket' => [ + 'title' => 'Tickets', + 'counts' => 'Total of :num tickets', + 'send_to' => 'Please fill in the target user information', + 'user_info' => 'User Information', + 'inviter_info' => 'Inviter Information', 'close_confirm' => 'Sure to close this ticket?', - 'error' => 'Unknown error! Please check the logs', + 'error' => 'Unknown error! Please check the logs', ], - 'logs' => [ - 'subscribe' => 'Subscriptions', - 'counts' => 'Total of :num records', - 'rule' => [ - 'clear_all' => 'Clear all records', - 'title' => 'Trigger record', - 'name' => 'Trigger Rule', - 'reason' => 'Trigger reason', - 'created_at' => 'Trigger Time', - 'tag' => '✅ Access to non-permitted content', + 'logs' => [ + 'subscribe' => 'Subscriptions', + 'counts' => 'Total of :num records', + 'rule' => [ + 'clear_all' => 'Clear all records', + 'title' => 'Trigger record', + 'name' => 'Trigger Rule', + 'reason' => 'Trigger reason', + 'created_at' => 'Trigger Time', + 'tag' => '✅ Access to non-permitted content', 'clear_confirm' => 'Sure to clear all records?', ], - 'order' => [ - 'title' => 'Orders', + 'order' => [ + 'title' => 'Orders', 'is_expired' => 'Whether expired', - 'is_coupon' => 'Whether a coupon is used', + 'is_coupon' => 'Whether a coupon is used', ], - 'user_traffic' => [ - 'title' => 'Data Usage Records', + 'user_traffic' => [ + 'title' => 'Data Usage Records', 'choose_node' => 'Select Node', ], 'user_data_modify_title' => 'User Data Change Records', - 'callback' => 'Callback Logs For Online Payment', - 'notification' => 'Email Delivery Records', - 'ip_monitor' => 'Online IP monitoring Real-time data within 2 minutes', - 'user_ip' => [ - 'title' => 'User Online IP List Last 10 minutes', + 'callback' => 'Callback Logs For Online Payment', + 'notification' => 'Email Delivery Records', + 'ip_monitor' => 'Online IP monitoring Real-time data within 2 minutes', + 'user_ip' => [ + 'title' => 'User Online IP List Last 10 minutes', 'connect' => 'IP of connection', ], - 'ban' => [ - 'title' => 'Users Ban Records', - 'time' => 'Duration', - 'reason' => 'Reason', - 'ban_time' => 'Banned Time', + 'ban' => [ + 'title' => 'Users Ban Records', + 'time' => 'Duration', + 'reason' => 'Reason', + 'ban_time' => 'Banned Time', 'last_connect_at' => 'Last connection time', ], - 'credit_title' => 'Balance Change Records', + 'credit_title' => 'Balance Change Records', ], - 'start_time' => 'Start', - 'end_time' => 'End', - 'goods' => [ - 'title' => 'Products', - 'type' => [ - 'top_up' => 'Top-Up', + 'start_time' => 'Start', + 'end_time' => 'End', + 'goods' => [ + 'title' => 'Products', + 'type' => [ + 'top_up' => 'Top-Up', 'package' => 'Data Pack', - 'plan' => 'Plan', + 'plan' => 'Plan', ], - 'info' => [ - 'type_hint' => 'Plan is related to the account expiration date, Data Pack only affect the available data that user has, does not affect the expiration date', - 'period_hint' => 'Plan\'s data reset in every N days', - 'limit_num_hint' => 'Number of times each user can purchase this product; 0 means no restriction on purchase', + 'info' => [ + 'type_hint' => 'Plan is related to the account expiration date, Data Pack only affect the available data that user has, does not affect the expiration date', + 'period_hint' => 'Plan\'s data reset in every N days', + 'limit_num_hint' => 'Number of times each user can purchase this product; 0 means no restriction on purchase', 'available_date_hint' => 'Automatically deduct data from total data when due', - 'desc_placeholder' => 'Brief description of the product', - 'list_placeholder' => 'Add custom lists to product', - 'list_hint' => 'Please start each line with A and end with B<li> and end with </li>', + 'desc_placeholder' => 'Brief description of the product', + 'list_placeholder' => 'Add custom lists to product', + 'list_hint' => 'Please start each line with A and end with B<li> and end with </li>', ], - 'status' => [ + 'status' => [ 'yes' => 'Active', - 'no' => 'Inactive', + 'no' => 'Inactive', ], 'sell_and_used' => 'In Use/Sales', - 'counts' => 'Total of :num products', + 'counts' => 'Total of :num products', ], - 'sort_asc' => 'The larger the sort value, the higher the priority', - 'yes' => 'Yes', - 'no' => 'No', - 'rule' => [ - 'type' => [ - 'reg' => 'Regular expression', - 'domain' => 'Domain Name', - 'ip' => 'IP', + 'sort_asc' => 'The larger the sort value, the higher the priority', + 'yes' => 'Yes', + 'no' => 'No', + 'rule' => [ + 'type' => [ + 'reg' => 'Regular expression', + 'domain' => 'Domain Name', + 'ip' => 'IP', 'protocol' => 'Protocol', ], 'counts' => 'Total of :num audit rules', - 'title' => 'Rules', - 'group' => [ - 'type' => [ + 'title' => 'Rules', + 'group' => [ + 'type' => [ 'off' => 'Block', - 'on' => 'Allow', + 'on' => 'Allow', ], - 'title' => 'Audit Group', + 'title' => 'Audit Group', 'counts' => 'Total of :num audit groups', ], ], - 'role' => [ - 'name_hint' => 'Unique identification name, ex: Administrator', + 'role' => [ + 'name_hint' => 'Unique identification name, ex: Administrator', 'description_hint' => 'Displays name, ex: Administrator', - 'title' => 'Permission Roles', - 'permissions_all' => 'All Permissions', - 'counts' => 'Total of :num permission roles', + 'title' => 'Permission Roles', + 'permissions_all' => 'All Permissions', + 'counts' => 'Total of :num permission roles', ], - 'report' => [ - 'monthly_accounting' => 'Monthly Income', + 'report' => [ + 'monthly_accounting' => 'Monthly Income', 'annually_accounting' => 'Annual Income', 'historic_accounting' => 'Historical Income', - 'current_month' => 'Current month', - 'last_month' => 'Last Month', - 'current_year' => 'Current year', - 'last_year' => 'Last year', - 'hourly_traffic' => 'Hourly data traffic', - 'daily_traffic' => 'Daily data traffic', - 'today' => 'Today', + 'current_month' => 'Current month', + 'last_month' => 'Last Month', + 'current_year' => 'Current year', + 'last_year' => 'Last year', + 'hourly_traffic' => 'Hourly data traffic', + 'daily_traffic' => 'Daily data traffic', + 'today' => 'Today', ], - 'permission' => [ - 'title' => 'Permissions', + 'permission' => [ + 'title' => 'Permissions', 'description_hint' => 'Description of permission, ex: [X system] Edit A', - 'name_hint' => 'Fill in the route, ex: admin.permission.create,update', - 'counts' => 'Total of :num permissions', + 'name_hint' => 'Fill in the route, ex: admin.permission.create,update', + 'counts' => 'Total of :num permissions', ], - 'marketing' => [ - 'email' => [ - 'title' => 'Marketing Emails', + 'marketing' => [ + 'email' => [ + 'title' => 'Marketing Emails', 'group_send' => 'Send Group Email', - 'counts' => 'Total of :num emails', + 'counts' => 'Total of :num emails', ], - 'send_status' => 'Delivery Status', - 'send_time' => 'Sending time', + 'send_status' => 'Delivery Status', + 'send_time' => 'Sending time', 'error_message' => 'Error Messages', - 'push' => [ - 'title' => 'Marketing Push Messages', - 'send' => 'Push Marketing Message', + 'push' => [ + 'title' => 'Marketing Push Messages', + 'send' => 'Push Marketing Message', 'counts' => 'Total of :num push messages', ], ], - 'creating' => 'Adding...', - 'article' => [ - 'type' => [ - 'knowledge' => 'Article', + 'creating' => 'Adding...', + 'article' => [ + 'type' => [ + 'knowledge' => 'Article', 'announcement' => 'Announcement', ], 'category_hint' => 'Same category will be grouped under the same folder', - 'logo_hint' => 'Recommended size: 100x75', - 'title' => 'Articles', - 'counts' => 'Total of :num articles', + 'logo_hint' => 'Recommended size: 100x75', + 'title' => 'Articles', + 'counts' => 'Total of :num articles', ], - 'coupon' => [ - 'title' => 'Coupons', - 'name_hint' => 'For user-end display', - 'sn_hint' => 'The code to use the coupon, leave it blank will generate 8-digit random code by default', - 'type' => [ - 'voucher' => 'Voucher', + 'coupon' => [ + 'title' => 'Coupons', + 'name_hint' => 'For user-end display', + 'sn_hint' => 'The code to use the coupon, leave it blank will generate 8-digit random code by default', + 'type' => [ + 'voucher' => 'Voucher', 'discount' => 'Discount Coupon', - 'charge' => 'Recharge Coupon', + 'charge' => 'Recharge Coupon', ], - 'type_hint' => 'Reduction: deduct the amount of the product; Discount: discount the percentage of the product; Recharge: add the amount to the user balance', - 'value' => '{1} ➖ :num|{2} :num% discount |{3} ➕ :num', - 'value_hint' => 'Range 1% ~ 99%', - 'priority_hint' => 'While Coupons have the same [Coupon Code], Eligible and highest priority coupon will be used first. The maximum is 255', - 'minimum_hint' => 'Coupon can only be used when the payment amount exceeds :num', - 'used_hint' => 'Eligible users may use this coupon no more than :num times', - 'levels_hint' => 'Coupon can only be used if the user is within the selected levels', - 'groups_hint' => 'Coupon can only be used by selected user groups', - 'users_placeholder' => 'Enter the user ID, then press enter', - 'user_whitelist_hint' => 'Involved users are allowed to use this coupon, leave blank for not using this condition', - 'users_blacklist_hint' => 'Involved users are not allowed to use this coupon, leave blank for not using this condition', - 'services_placeholder' => 'Enter the product ID, then press enter', + 'type_hint' => 'Reduction: deduct the amount of the product; Discount: discount the percentage of the product; Recharge: add the amount to the user balance', + 'value' => '{1} ➖ :num|{2} :num% discount |{3} ➕ :num', + 'value_hint' => 'Range 1% ~ 99%', + 'priority_hint' => 'While Coupons have the same [Coupon Code], Eligible and highest priority coupon will be used first. The maximum is 255', + 'minimum_hint' => 'Coupon can only be used when the payment amount exceeds :num', + 'used_hint' => 'Eligible users may use this coupon no more than :num times', + 'levels_hint' => 'Coupon can only be used if the user is within the selected levels', + 'groups_hint' => 'Coupon can only be used by selected user groups', + 'users_placeholder' => 'Enter the user ID, then press enter', + 'user_whitelist_hint' => 'Involved users are allowed to use this coupon, leave blank for not using this condition', + 'users_blacklist_hint' => 'Involved users are not allowed to use this coupon, leave blank for not using this condition', + 'services_placeholder' => 'Enter the product ID, then press enter', 'services_whitelist_hint' => 'Coupon can only be used for products in this list, leave blank for not using this condition', 'services_blacklist_hint' => 'Coupon cannot be used for products in this list, leave blank for not using this condition', - 'newbie' => [ + 'newbie' => [ 'first_discount' => 'First time using any coupon', - 'first_order' => 'First Order', - 'created_days' => 'Create Account', + 'first_order' => 'First Order', + 'created_days' => 'Create Account', ], - 'created_days_hint' => ':day days of account creation', - 'limit_hint' => 'The rules of this restriction are and relation, please use them properly', - 'info_title' => 'Coupon Information', - 'counts' => 'Total of :num coupons', - 'discount' => 'Discount', - 'export_title' => 'Coupon Export', - 'single_use' => 'One-time', + 'created_days_hint' => ':day days of account creation', + 'limit_hint' => 'The rules of this restriction are and relation, please use them properly', + 'info_title' => 'Coupon Information', + 'counts' => 'Total of :num coupons', + 'discount' => 'Discount', + 'export_title' => 'Coupon Export', + 'single_use' => 'One-time', ], - 'times' => 'Times', - 'massive_export' => 'Batch Export', - 'system_generate' => 'System Generated', - 'aff' => [ - 'rebate_title' => 'Referral Rebate History', - 'counts' => 'Total of :num applications', - 'title' => 'Withdrawal Requests', - 'apply_counts' => 'Total of :num requests', - 'referral' => 'Promotional Rebates', - 'commission_title' => 'Withdrawal Request Details', + 'times' => 'Times', + 'massive_export' => 'Batch Export', + 'system_generate' => 'System Generated', + 'aff' => [ + 'rebate_title' => 'Referral Rebate History', + 'counts' => 'Total of :num applications', + 'title' => 'Withdrawal Requests', + 'apply_counts' => 'Total of :num requests', + 'referral' => 'Promotional Rebates', + 'commission_title' => 'Withdrawal Request Details', 'commission_counts' => 'This application involves :num orders', ], - 'setting' => [ - 'common' => [ - 'title' => 'General Configuration', - 'set_default' => 'Set as default', + 'setting' => [ + 'common' => [ + 'title' => 'General Configuration', + 'set_default' => 'Set as default', 'connect_nodes' => 'Number of associated nodes', ], - 'email' => [ - 'title' => 'Email Suffix Filters used to limit the emails used for registration', - 'tail' => 'Email Suffix', - 'rule' => 'Restriction Type', - 'black' => 'Blacklist', - 'white' => 'Whitelist', + 'email' => [ + 'title' => 'Email Suffix Filters used to limit the emails used for registration', + 'tail' => 'Email Suffix', + 'rule' => 'Restriction Type', + 'black' => 'Blacklist', + 'white' => 'Whitelist', 'tail_placeholder' => 'Please fill in the email suffix', ], - 'system' => [ - 'title' => 'System Settings', - 'web' => 'Website', - 'account' => 'Account', - 'node' => 'Node', - 'extend' => 'Advanced', - 'check_in' => 'Check-in', + 'system' => [ + 'title' => 'System Settings', + 'web' => 'Website', + 'account' => 'Account', + 'node' => 'Node', + 'extend' => 'Advanced', + 'check_in' => 'Check-in', 'promotion' => 'Promotion', - 'notify' => 'Notification', - 'auto_job' => 'Automation', - 'other' => 'LOGO|Customer Service|Statistics', - 'payment' => 'Payment Gateway', - 'menu' => 'Menu', + 'notify' => 'Notification', + 'auto_job' => 'Automation', + 'other' => 'LOGO|Customer Service|Statistics', + 'payment' => 'Payment Gateway', + 'menu' => 'Menu', ], 'no_permission' => 'You have no permission to change the setting!', ], - 'system' => [ - 'account_expire_notification' => 'Account Expiration Notification', - 'active_times' => 'Number of activation of account', - 'admin_invite_days' => '[Admin] Expiration days of invitation code', - 'aff_salt' => '[Invitation URL] Encrypt User Information', - 'alipay_qrcode' => 'Alipay QrCode', - 'AppStore_id' => '[Apple] Account', - 'AppStore_password' => '[Apple] Password', - 'auto_release_port' => 'Port Recycle', - 'bark_key' => '[Bark] Device Token', - 'captcha_key' => 'Captcha Key', - 'captcha_secret' => 'Captcha Secret/ID', - 'codepay_id' => '[CodePay] ID', - 'codepay_key' => '[CodePay] Key', - 'codepay_url' => '[CodePay] URL', - 'data_anomaly_notification' => 'Data Abnormal Notification', - 'data_exhaust_notification' => 'Data Exhaustion Notification', - 'ddns_key' => '[DNS Provider] Key', - 'ddns_mode' => 'DNS Provider', - 'ddns_secret' => '[DNS Provider] Secret', - 'default_days' => 'Account Initial Time', - 'default_traffic' => 'Initial Data Traffic', - 'detection_check_times' => 'Node Network Detection Alert', - 'dingTalk_access_token' => '[DingTalk Robot] Access Token', - 'dingTalk_secret' => '[DingTalk Robot] Secret', - 'epay_key' => '[ePay] Key', - 'epay_mch_id' => '[ePay] Merchant ID', - 'epay_url' => '[ePay] URL', - 'expire_days' => 'Expiration Warning Threshold', - 'f2fpay_app_id' => '[Alipay] APP ID', - 'f2fpay_private_key' => '[Alipay] Private Key', - 'f2fpay_public_key' => '[Alipay] Public Key', - 'forbid_mode' => 'Access Prohibited', - 'invite_num' => 'Number of invitations can be generated', - 'is_activate_account' => 'Account Activation', - 'is_AliPay' => 'Alipay Gateway', - 'is_ban_status' => 'Expiration Ban', - 'is_captcha' => 'Captcha', - 'is_checkin' => 'Check-in Reward', - 'is_clear_log' => 'Clean Logs', - 'is_custom_subscribe' => 'Advanced Subscription', - 'is_email_filtering' => 'Email Filtering', - 'is_forbid_robot' => 'Forbid Bots Access', - 'is_free_code' => 'Free Invitation Code', - 'is_invite_register' => 'Invitation to Register', - 'is_otherPay' => 'Special Gateway', - 'is_QQPay' => 'QQ Wallet Gateway', - 'is_rand_port' => 'Random Ports', - 'is_register' => 'Registration', - 'is_subscribe_ban' => 'Subscription Abnormal Ban', - 'is_traffic_ban' => 'Abnormal Data Use Ban', - 'is_WeChatPay' => 'WeChat Pay Gateway', - 'iYuu_token' => '[IYUU] Token', - 'maintenance_content' => 'Maintenance Announcement', - 'maintenance_mode' => 'Maintenance Mode', - 'maintenance_time' => 'Maintenance End Time', - 'min_port' => 'Port Range', - 'min_rand_traffic' => 'Data Range', - 'node_blocked_notification' => 'Node Blocked Alert', - 'node_daily_notification' => 'Node Data Usage Daily Report', - 'node_offline_notification' => 'Node Offline Notification', - 'oauth_path' => 'OAuth Platforms', - 'offline_check_times' => 'Number of Offline Notification', - 'password_reset_notification' => 'Reset Password Notification', - 'paybeaver_app_id' => '[PayBeaver] App ID', - 'paybeaver_app_secret' => '[PayBeaver] App Secret', - 'payjs_key' => '[PayJs] Key', - 'payjs_mch_id' => '[PayJs] Merchant ID', - 'payment_confirm_notification' => 'Manual Pay Payment Confirmation', + 'system' => [ + 'account_expire_notification' => 'Account Expiration Notification', + 'active_times' => 'Number of activation of account', + 'admin_invite_days' => '[Admin] Expiration days of invitation code', + 'aff_salt' => '[Invitation URL] Encrypt User Information', + 'alipay_qrcode' => 'Alipay QrCode', + 'AppStore_id' => '[Apple] Account', + 'AppStore_password' => '[Apple] Password', + 'auto_release_port' => 'Port Recycle', + 'bark_key' => '[Bark] Device Token', + 'captcha_key' => 'Captcha Key', + 'captcha_secret' => 'Captcha Secret/ID', + 'codepay_id' => '[CodePay] ID', + 'codepay_key' => '[CodePay] Key', + 'codepay_url' => '[CodePay] URL', + 'data_anomaly_notification' => 'Data Abnormal Notification', + 'data_exhaust_notification' => 'Data Exhaustion Notification', + 'ddns_key' => '[DNS Provider] Key', + 'ddns_mode' => 'DNS Provider', + 'ddns_secret' => '[DNS Provider] Secret', + 'default_days' => 'Account Initial Time', + 'default_traffic' => 'Initial Data Traffic', + 'detection_check_times' => 'Node Network Detection Alert', + 'dingTalk_access_token' => '[DingTalk Robot] Access Token', + 'dingTalk_secret' => '[DingTalk Robot] Secret', + 'epay_key' => '[ePay] Key', + 'epay_mch_id' => '[ePay] Merchant ID', + 'epay_url' => '[ePay] URL', + 'expire_days' => 'Expiration Warning Threshold', + 'f2fpay_app_id' => '[Alipay] APP ID', + 'f2fpay_private_key' => '[Alipay] Private Key', + 'f2fpay_public_key' => '[Alipay] Public Key', + 'forbid_mode' => 'Access Prohibited', + 'invite_num' => 'Number of invitations can be generated', + 'is_activate_account' => 'Account Activation', + 'is_AliPay' => 'Alipay Gateway', + 'is_ban_status' => 'Expiration Ban', + 'is_captcha' => 'Captcha', + 'is_checkin' => 'Check-in Reward', + 'is_clear_log' => 'Clean Logs', + 'is_custom_subscribe' => 'Advanced Subscription', + 'is_email_filtering' => 'Email Filtering', + 'is_forbid_robot' => 'Forbid Bots Access', + 'is_free_code' => 'Free Invitation Code', + 'is_invite_register' => 'Invitation to Register', + 'is_otherPay' => 'Special Gateway', + 'is_QQPay' => 'QQ Wallet Gateway', + 'is_rand_port' => 'Random Ports', + 'is_register' => 'Registration', + 'is_subscribe_ban' => 'Subscription Abnormal Ban', + 'is_traffic_ban' => 'Abnormal Data Use Ban', + 'is_WeChatPay' => 'WeChat Pay Gateway', + 'iYuu_token' => '[IYUU] Token', + 'maintenance_content' => 'Maintenance Announcement', + 'maintenance_mode' => 'Maintenance Mode', + 'maintenance_time' => 'Maintenance End Time', + 'min_port' => 'Port Range', + 'min_rand_traffic' => 'Data Range', + 'node_blocked_notification' => 'Node Blocked Alert', + 'node_daily_notification' => 'Node Data Usage Daily Report', + 'node_offline_notification' => 'Node Offline Notification', + 'oauth_path' => 'OAuth Platforms', + 'offline_check_times' => 'Number of Offline Notification', + 'password_reset_notification' => 'Reset Password Notification', + 'paybeaver_app_id' => '[PayBeaver] App ID', + 'paybeaver_app_secret' => '[PayBeaver] App Secret', + 'payjs_key' => '[PayJs] Key', + 'payjs_mch_id' => '[PayJs] Merchant ID', + 'payment_confirm_notification' => 'Manual Pay Payment Confirmation', 'payment_received_notification' => 'Successful Payment Notification', - 'paypal_app_id' => '[PayPal] App ID', - 'paypal_certificate' => '[PayPal] Certificate', - 'paypal_password' => '[PayPal] Password', - 'paypal_secret' => '[PayPal] Secret', - 'paypal_username' => '[PayPal] Username', - 'pushDeer_key' => '[PushDeer] Key', - 'pushplus_token' => '[PushPlus] Token', - 'rand_subscribe' => 'Random Subscription', - 'redirect_url' => 'Redirect URL', - 'referral_money' => 'Minimum Withdrawal Limit', - 'referral_percent' => 'Rebate Rate', - 'referral_status' => 'Promotion', - 'referral_traffic' => 'Registration Bonus Data Traffic', - 'referral_type' => 'Rebate Mode', - 'register_ip_limit' => 'Same IP Registration Restriction', - 'reset_password_times' => 'Password Reset Limitation', - 'reset_traffic' => 'Data Traffic Reset', - 'server_chan_key' => '[ServerChan] SCKEY', - 'standard_currency' => 'Primary Currency', - 'stripe_public_key' => 'Public Key', - 'stripe_secret_key' => 'Secret Key', - 'stripe_signing_secret' => 'WebHook Signing secret', - 'subject_name' => 'Custom Product Name', - 'subscribe_ban_times' => 'Subscription Request Threshold', - 'subscribe_domain' => 'Service Subscription URL', - 'subscribe_max' => 'Maximum number of subscription nodes', - 'telegram_token' => 'Telegram Token', - 'tg_chat_token' => 'TG Chat Token', - 'theadpay_key' => '[THeadpay] Key', - 'theadpay_mchid' => '[THeadpay] Merchant ID', - 'theadpay_url' => '[THeadpay] URL', - 'ticket_closed_notification' => 'Ticket Closure Notification', - 'ticket_created_notification' => 'Ticket Creation Notification', - 'ticket_replied_notification' => 'Ticket Response Notification', - 'traffic_ban_time' => 'Ban Time', - 'traffic_ban_value' => 'Data Abnormal Threshold', - 'traffic_limit_time' => 'Time Interval', - 'traffic_warning_percent' => 'Low Data Traffic Threshold', - 'trojan_license' => 'Trojan Backend License', - 'username_type' => 'Username Type', - 'user_invite_days' => '[User] Expiration days of invitation code', - 'v2ray_license' => 'V2Ray Backend License', - 'v2ray_tls_provider' => 'V2Ray TLS Configuration', - 'webmaster_email' => 'Administrator Email', - 'website_analytics' => 'Statistics Code', - 'website_callback_url' => 'Payment Callback Domain', - 'website_customer_service' => 'Customer Service Code', - 'website_home_logo' => 'Homepage Logo', - 'website_logo' => 'Site Logo', - 'website_name' => 'Site Name', - 'website_security_code' => 'Site Security Code', - 'website_url' => 'Site Domain Address', - 'web_api_url' => 'Authorization/Backend Access Domain', - 'wechat_aid' => 'Enterprise WeChat AID', - 'wechat_cid' => 'Enterprise WeChat CID', - 'wechat_encodingAESKey' => 'Enterprise WeChat Encoding AESKey', - 'wechat_qrcode' => 'WeChat QrCode', - 'wechat_secret' => 'Enterprise WeChat Secret', - 'wechat_token' => 'Enterprise WeChat Token', - 'hint' => [ - 'account_expire_notification' => 'Notify users that their accounts are about to expire', - 'active_times' => 'The number of times a user can activate an account via email within 1 day', - 'admin_invite_days' => 'Expiration date of the invitation code generated by the administrator', - 'aff_salt' => 'If left blank, the invitation link will use user ID; Filling in any letters/numbers as key to encrypt user ID', - 'AppStore_id' => 'Apple account that can be used in the articles', - 'AppStore_password' => 'Apple password that can be used in the articles', - 'auto_release_port' => 'Ports for accounts that have been banned/expired for '.config('tasks.release_port').' days will be released', - 'bark_key' => 'Push messages to iOS devices. You need to install Bark on your iPhone first, then take the long string after [api.day.app]. Be sure to fill in this value before enable Bark', - 'captcha_key' => 'Browse Setup Guide to set up', - 'data_anomaly_notification' => 'User hourly traffic exceeding data abnormal threshold notifies admin', - 'data_exhaust_notification' => 'Notify users that their data is about to run out', - 'ddns_key' => "Browse Setup Guide to set up", - 'ddns_mode' => 'Sync nodes\' domain and IP setting to DNS Provider', - 'default_days' => 'Default expiration date for new registered accounts. 0 means same day expiration', - 'default_traffic' => 'Default available data traffic for new registered accounts', - 'detection_check_times' => 'Automatically offline node after N reminders. 0/empty mean do not offline node, Max 12', - 'dingTalk_access_token' => 'Browse DingTalk Handbook to see the set-up steps', - 'dingTalk_secret' => 'Optional, unless DingTalk bot\'s [加签] function is selected!', - 'expire_days' => '[Account Expiry Notice] Starting Threshold, notify users daily', - 'f2fpay_app_id' => 'Alipay\'s APPID', - 'f2fpay_private_key' => 'App Private key generated by the official secret key software', - 'f2fpay_public_key' => 'Note that it is not the APP public key!', - 'forbid_mode' => 'Blocking the corresponding area based on IP, non-blocked areas can be accessed normally', - 'invite_num' => 'Number of invitation codes a user can generate by default', - 'is_activate_account' => 'Once enabled, users need to activate their accounts via email', - 'is_ban_status' => '(Caution!) Blocking the entire account will reset all data on the account and prevent users from logging in. Deactivate this to disable the user agent only.', - 'is_captcha' => 'If enabled, Captcha will be required for login/registration action', - 'is_checkin' => 'Random traffic will be awarded according to the traffic range when user check-in', - 'is_clear_log' => '(Recommended) Automatically clean useless/outdated logs when enabled', - 'is_custom_subscribe' => 'When enabled, the top of the subscription list will show the account expiration date, the amount of traffic left (only some clients are supported)', - 'is_email_filtering' => 'Blacklist: users can use any email outside the blacklist to register; Whitelist: users can only use supported email in the white list to register', - 'is_forbid_robot' => 'Bots, Crawlers, or Proxies access, Panel will throw a 404 error', - 'is_free_code' => 'Free invitation code will not be visible if disabled', - 'is_rand_port' => 'Randomly get ports when users register/add users', - 'is_register' => 'Cannot register if disabled', - 'is_subscribe_ban' => 'When enabled, subscription link will be blocked when user requests via subscription link exceed the set threshold', - 'is_traffic_ban' => 'If the user\'s data usage exceeds the data abnormal threshold within 1 hour, Use\'s service will be disabled for fixed amount of time', - 'iYuu_token' => 'Before enabling IYUU, Please make sure to fill in token that (apply from IYUU)', - 'maintenance_content' => 'Customized maintenance announcement content', - 'maintenance_mode' => "When enabled, user access will redirect to maintenance page| For Admin access using :url", - 'maintenance_time' => 'For maintenance interface countdown', - 'min_port' => 'Port range: 1000 ~ 65535', - 'node_blocked_notification' => 'Detects node network connectivity hourly and alerts administrators when there is a situation', - 'node_daily_notification' => 'Report traffic consumption data per node', - 'node_offline_notification' => 'Detects nodes offline every 10 minutes and alerts administrator when any of them is offline', - 'oauth_path' => 'Please add settings in .ENV, before using any of platforms', - 'offline_check_times' => 'Stop alerts after N alerts within 24 hours', - 'password_reset_notification' => 'Users can reset their passwords, if enabled', - 'paybeaver_app_id' => 'Merchant Center -> Developer -> App ID', - 'paybeaver_app_secret' => 'Merchant Center -> Developer -> App Secret', - 'payjs_mch_id' => 'Get configs from Member page', - 'payment_confirm_notification' => 'Users notify administrators to process orders that using Manual Pay', + 'paypal_app_id' => '[PayPal] App ID', + 'paypal_certificate' => '[PayPal] Certificate', + 'paypal_password' => '[PayPal] Password', + 'paypal_secret' => '[PayPal] Secret', + 'paypal_username' => '[PayPal] Username', + 'pushDeer_key' => '[PushDeer] Key', + 'pushplus_token' => '[PushPlus] Token', + 'rand_subscribe' => 'Random Subscription', + 'redirect_url' => 'Redirect URL', + 'referral_money' => 'Minimum Withdrawal Limit', + 'referral_percent' => 'Rebate Rate', + 'referral_status' => 'Promotion', + 'referral_traffic' => 'Registration Bonus Data Traffic', + 'referral_type' => 'Rebate Mode', + 'register_ip_limit' => 'Same IP Registration Restriction', + 'reset_password_times' => 'Password Reset Limitation', + 'reset_traffic' => 'Data Traffic Reset', + 'server_chan_key' => '[ServerChan] SCKEY', + 'standard_currency' => 'Primary Currency', + 'stripe_public_key' => 'Public Key', + 'stripe_secret_key' => 'Secret Key', + 'stripe_signing_secret' => 'WebHook Signing secret', + 'subject_name' => 'Custom Product Name', + 'subscribe_ban_times' => 'Subscription Request Threshold', + 'subscribe_domain' => 'Service Subscription URL', + 'subscribe_max' => 'Maximum number of subscription nodes', + 'telegram_token' => 'Telegram Token', + 'tg_chat_token' => 'TG Chat Token', + 'theadpay_key' => '[THeadpay] Key', + 'theadpay_mchid' => '[THeadpay] Merchant ID', + 'theadpay_url' => '[THeadpay] URL', + 'ticket_closed_notification' => 'Ticket Closure Notification', + 'ticket_created_notification' => 'Ticket Creation Notification', + 'ticket_replied_notification' => 'Ticket Response Notification', + 'traffic_ban_time' => 'Ban Time', + 'traffic_ban_value' => 'Data Abnormal Threshold', + 'traffic_limit_time' => 'Time Interval', + 'traffic_warning_percent' => 'Low Data Traffic Threshold', + 'trojan_license' => 'Trojan Backend License', + 'username_type' => 'Username Type', + 'user_invite_days' => '[User] Expiration days of invitation code', + 'v2ray_license' => 'V2Ray Backend License', + 'v2ray_tls_provider' => 'V2Ray TLS Configuration', + 'webmaster_email' => 'Administrator Email', + 'website_analytics' => 'Statistics Code', + 'website_callback_url' => 'Payment Callback Domain', + 'website_customer_service' => 'Customer Service Code', + 'website_home_logo' => 'Homepage Logo', + 'website_logo' => 'Site Logo', + 'website_name' => 'Site Name', + 'website_security_code' => 'Site Security Code', + 'website_url' => 'Site Domain Address', + 'web_api_url' => 'Authorization/Backend Access Domain', + 'wechat_aid' => 'Enterprise WeChat AID', + 'wechat_cid' => 'Enterprise WeChat CID', + 'wechat_encodingAESKey' => 'Enterprise WeChat Encoding AESKey', + 'wechat_qrcode' => 'WeChat QrCode', + 'wechat_secret' => 'Enterprise WeChat Secret', + 'wechat_token' => 'Enterprise WeChat Token', + 'hint' => [ + 'account_expire_notification' => 'Notify users that their accounts are about to expire', + 'active_times' => 'The number of times a user can activate an account via email within 1 day', + 'admin_invite_days' => 'Expiration date of the invitation code generated by the administrator', + 'aff_salt' => 'If left blank, the invitation link will use user ID; Filling in any letters/numbers as key to encrypt user ID', + 'AppStore_id' => 'Apple account that can be used in the articles', + 'AppStore_password' => 'Apple password that can be used in the articles', + 'auto_release_port' => 'Ports for accounts that have been banned/expired for '.config('tasks.release_port').' days will be released', + 'bark_key' => 'Push messages to iOS devices. You need to install Bark on your iPhone first, then take the long string after [api.day.app]. Be sure to fill in this value before enable Bark', + 'captcha_key' => 'Browse Setup Guide to set up', + 'data_anomaly_notification' => 'User hourly traffic exceeding data abnormal threshold notifies admin', + 'data_exhaust_notification' => 'Notify users that their data is about to run out', + 'ddns_key' => "Browse Setup Guide to set up", + 'ddns_mode' => 'Sync nodes\' domain and IP setting to DNS Provider', + 'default_days' => 'Default expiration date for new registered accounts. 0 means same day expiration', + 'default_traffic' => 'Default available data traffic for new registered accounts', + 'detection_check_times' => 'Automatically offline node after N reminders. 0/empty mean do not offline node, Max 12', + 'dingTalk_access_token' => 'Browse DingTalk Handbook to see the set-up steps', + 'dingTalk_secret' => 'Optional, unless DingTalk bot\'s [加签] function is selected!', + 'expire_days' => '[Account Expiry Notice] Starting Threshold, notify users daily', + 'f2fpay_app_id' => 'Alipay\'s APPID', + 'f2fpay_private_key' => 'App Private key generated by the official secret key software', + 'f2fpay_public_key' => 'Note that it is not the APP public key!', + 'forbid_mode' => 'Blocking the corresponding area based on IP, non-blocked areas can be accessed normally', + 'invite_num' => 'Number of invitation codes a user can generate by default', + 'is_activate_account' => 'Once enabled, users need to activate their accounts via email', + 'is_ban_status' => '(Caution!) Blocking the entire account will reset all data on the account and prevent users from logging in. Deactivate this to disable the user agent only.', + 'is_captcha' => 'If enabled, Captcha will be required for login/registration action', + 'is_checkin' => 'Random traffic will be awarded according to the traffic range when user check-in', + 'is_clear_log' => '(Recommended) Automatically clean useless/outdated logs when enabled', + 'is_custom_subscribe' => 'When enabled, the top of the subscription list will show the account expiration date, the amount of traffic left (only some clients are supported)', + 'is_email_filtering' => 'Blacklist: users can use any email outside the blacklist to register; Whitelist: users can only use supported email in the white list to register', + 'is_forbid_robot' => 'Bots, Crawlers, or Proxies access, Panel will throw a 404 error', + 'is_free_code' => 'Free invitation code will not be visible if disabled', + 'is_rand_port' => 'Randomly get ports when users register/add users', + 'is_register' => 'Cannot register if disabled', + 'is_subscribe_ban' => 'When enabled, subscription link will be blocked when user requests via subscription link exceed the set threshold', + 'is_traffic_ban' => 'If the user\'s data usage exceeds the data abnormal threshold within 1 hour, Use\'s service will be disabled for fixed amount of time', + 'iYuu_token' => 'Before enabling IYUU, Please make sure to fill in token that (apply from IYUU)', + 'maintenance_content' => 'Customized maintenance announcement content', + 'maintenance_mode' => "When enabled, user access will redirect to maintenance page| For Admin access using :url", + 'maintenance_time' => 'For maintenance interface countdown', + 'min_port' => 'Port range: 1000 ~ 65535', + 'node_blocked_notification' => 'Detects node network connectivity hourly and alerts administrators when there is a situation', + 'node_daily_notification' => 'Report traffic consumption data per node', + 'node_offline_notification' => 'Detects nodes offline every 10 minutes and alerts administrator when any of them is offline', + 'oauth_path' => 'Please add settings in .ENV, before using any of platforms', + 'offline_check_times' => 'Stop alerts after N alerts within 24 hours', + 'password_reset_notification' => 'Users can reset their passwords, if enabled', + 'paybeaver_app_id' => 'Merchant Center -> Developer -> App ID', + 'paybeaver_app_secret' => 'Merchant Center -> Developer -> App Secret', + 'payjs_mch_id' => 'Get configs from Member page', + 'payment_confirm_notification' => 'Users notify administrators to process orders that using Manual Pay', 'payment_received_notification' => 'Prompt the user with the latest status of the order', - 'pushDeer_key' => 'Before enabling PushDeer, make sure to fill Push Key', - 'pushplus_token' => 'Before enabling PushPlus, make sure to fill Token', - 'rand_subscribe' => 'When enabled, the system returns the node list randomly, otherwise, it will be available based on Node list order', - 'redirect_url' => 'When an audit rule is triggered, blocked access requests are redirected to this address', - 'referral_money' => 'The minimum amount that can be requested for withdrawal', - 'referral_percent' => 'According to the account registered by the promotion link, the percentage of share that the inviter can get from each order', - 'referral_status' => 'Not visible to users after closing, but does not affect the normal invitation rebate function', - 'referral_traffic' => 'Free data traffic after registration with promotion link/invitation code', - 'referral_type' => 'After switching modes the old data remains unchanged and the new rebate is calculated according to the new mode', - 'register_ip_limit' => 'The number of registration requests allowed to be requested from the same IP within 24 hours. No limit for 0/empty', - 'reset_password_times' => 'The number of times users can reset their passwords via email within 24 hours', - 'reset_traffic' => 'Users reset their available data traffic according to the reset cycle of their purchased plan', - 'server_chan_key' => 'Before enabling ServerChan, please fill in SCKEY', - 'standard_currency' => 'For displaying product title in payment gateways', - 'subject_name' => 'Display product title for payment channel', - 'subscribe_ban_times' => 'Limit of subscription requests a user can send within 24 hours', - 'subscribe_domain' => '(recommended) Prevent Main Domain abnormality, resulting in failure to subscribe properly start with [http:// or https://]', - 'subscribe_max' => 'The number of nodes when the client subscribes, and return all nodes when 0/left blank', - 'telegram_token' => 'Find @BotFather to apply for robot\'s TOKEN', - 'tg_chat_token' => 'Before enabling TG Chat, please fill in applied Token', - 'ticket_closed_notification' => 'Notify user when ticket closed', - 'ticket_created_notification' => 'Notification of newly created ticket to management/user, depending on whom created', - 'ticket_replied_notification' => 'Ticket response notification to the other party', - 'traffic_ban_time' => 'Any user/subscription anomaly blocking time, automatically unblocked upon expiry', - 'traffic_ban_value' => 'If the value is exceeded within 1 hour, the ban will be triggered', - 'traffic_limit_time' => 'Check-in Interval', - 'traffic_warning_percent' => '[Traffic Exhaustion Notification] Start threshold, notify users daily', - 'username_type' => 'Standardize the type of site allowed username type, Default is Email', - 'user_invite_days' => 'Expiration date of user-generated invitations', - 'v2ray_tls_provider' => 'For back-end auto-issue/loading of TLS certificates (Node\'s setting have higher priority than here)', - 'webmaster_email' => 'Some error messages will provide the administrator\'s email as the contact information', - 'website_analytics' => 'Statistics JavaScript', - 'website_callback_url' => 'Prevent payment callback from being backsliding due to a DNS poisoning of main domain, start with http:// or https://', - 'website_customer_service' => 'Customer Service JavaScript', - 'website_name' => 'Show on email and etc.', - 'website_security_code' => 'When not empty, must be accessed via Secure Portal to access the website', - 'website_url' => 'Main domain that this panel will be using for everything links related as default', - 'web_api_url' => 'Example: https://demo.proxypanel.cf', - 'wechat_aid' => 'Create an app in app management page, get AgentId', - 'wechat_cid' => 'Get the CID inMy Enterprise page', - 'wechat_encodingAESKey' => 'App Management ⇒ Application ⇒ Set API ⇒ EncodingAESKey', - 'wechat_secret' => 'App Secret (may need to download enterprise WeChat to be able view it)', - 'wechat_token' => 'App Management -> Application -> Set API -> TOKEN, URL set to :url', + 'pushDeer_key' => 'Before enabling PushDeer, make sure to fill Push Key', + 'pushplus_token' => 'Before enabling PushPlus, make sure to fill Token', + 'rand_subscribe' => 'When enabled, the system returns the node list randomly, otherwise, it will be available based on Node list order', + 'redirect_url' => 'When an audit rule is triggered, blocked access requests are redirected to this address', + 'referral_money' => 'The minimum amount that can be requested for withdrawal', + 'referral_percent' => 'According to the account registered by the promotion link, the percentage of share that the inviter can get from each order', + 'referral_status' => 'Not visible to users after closing, but does not affect the normal invitation rebate function', + 'referral_traffic' => 'Free data traffic after registration with promotion link/invitation code', + 'referral_type' => 'After switching modes the old data remains unchanged and the new rebate is calculated according to the new mode', + 'register_ip_limit' => 'The number of registration requests allowed to be requested from the same IP within 24 hours. No limit for 0/empty', + 'reset_password_times' => 'The number of times users can reset their passwords via email within 24 hours', + 'reset_traffic' => 'Users reset their available data traffic according to the reset cycle of their purchased plan', + 'server_chan_key' => 'Before enabling ServerChan, please fill in SCKEY', + 'standard_currency' => 'For displaying product title in payment gateways', + 'subject_name' => 'Display product title for payment channel', + 'subscribe_ban_times' => 'Limit of subscription requests a user can send within 24 hours', + 'subscribe_domain' => '(recommended) Prevent Main Domain abnormality, resulting in failure to subscribe properly start with [http:// or https://]', + 'subscribe_max' => 'The number of nodes when the client subscribes, and return all nodes when 0/left blank', + 'telegram_token' => 'Find @BotFather to apply for robot\'s TOKEN', + 'tg_chat_token' => 'Before enabling TG Chat, please fill in applied Token', + 'ticket_closed_notification' => 'Notify user when ticket closed', + 'ticket_created_notification' => 'Notification of newly created ticket to management/user, depending on whom created', + 'ticket_replied_notification' => 'Ticket response notification to the other party', + 'traffic_ban_time' => 'Any user/subscription anomaly blocking time, automatically unblocked upon expiry', + 'traffic_ban_value' => 'If the value is exceeded within 1 hour, the ban will be triggered', + 'traffic_limit_time' => 'Check-in Interval', + 'traffic_warning_percent' => '[Traffic Exhaustion Notification] Start threshold, notify users daily', + 'username_type' => 'Standardize the type of site allowed username type, Default is Email', + 'user_invite_days' => 'Expiration date of user-generated invitations', + 'v2ray_tls_provider' => 'For back-end auto-issue/loading of TLS certificates (Node\'s setting have higher priority than here)', + 'webmaster_email' => 'Some error messages will provide the administrator\'s email as the contact information', + 'website_analytics' => 'Statistics JavaScript', + 'website_callback_url' => 'Prevent payment callback from being backsliding due to a DNS poisoning of main domain, start with http:// or https://', + 'website_customer_service' => 'Customer Service JavaScript', + 'website_name' => 'Show on email and etc.', + 'website_security_code' => 'When not empty, must be accessed via Secure Portal to access the website', + 'website_url' => 'Main domain that this panel will be using for everything links related as default', + 'web_api_url' => 'Example: https://demo.proxypanel.cf', + 'wechat_aid' => 'Create an app in app management page, get AgentId', + 'wechat_cid' => 'Get the CID inMy Enterprise page', + 'wechat_encodingAESKey' => 'App Management ⇒ Application ⇒ Set API ⇒ EncodingAESKey', + 'wechat_secret' => 'App Secret (may need to download enterprise WeChat to be able view it)', + 'wechat_token' => 'App Management -> Application -> Set API -> TOKEN, URL set to :url', ], - 'placeholder' => [ - 'default_url' => 'Default as :url', - 'server_chan_key' => 'Fill in ServerChan\'s SCKEY, then press Update', - 'pushDeer_key' => 'Fill in Push Key, then press Update', - 'iYuu_token' => 'Fill in IYUU Token, then press Update', - 'bark_key' => 'Fill in Bark key, then press Update', - 'telegram_token' => 'Fill in Telegram Token, then press Update', - 'pushplus_token' => 'Please apply at ServerChan', + 'placeholder' => [ + 'default_url' => 'Default as :url', + 'server_chan_key' => 'Fill in ServerChan\'s SCKEY, then press Update', + 'pushDeer_key' => 'Fill in Push Key, then press Update', + 'iYuu_token' => 'Fill in IYUU Token, then press Update', + 'bark_key' => 'Fill in Bark key, then press Update', + 'telegram_token' => 'Fill in Telegram Token, then press Update', + 'pushplus_token' => 'Please apply at ServerChan', 'dingTalk_access_token' => 'Customize bot\'s access_token in WebHook', - 'dingTalk_secret' => 'Customize key that will appear after robot is signed', - 'wechat_aid' => 'WeChat AID', - 'wechat_cid' => 'Fill in the WeChat CID, then press Update', - 'wechat_secret' => 'WeChat Secret', - 'tg_chat_token' => 'Please apply at Telegram', - 'codepay_url' => 'https://codepay.fatq.com/create_order/?', + 'dingTalk_secret' => 'Customize key that will appear after robot is signed', + 'wechat_aid' => 'WeChat AID', + 'wechat_cid' => 'Fill in the WeChat CID, then press Update', + 'wechat_secret' => 'WeChat Secret', + 'tg_chat_token' => 'Please apply at Telegram', + 'codepay_url' => 'https://codepay.fatq.com/create_order/?', ], - 'payment' => [ + 'payment' => [ 'attribute' => 'Payment Gateway', - 'channel' => [ - 'alipay' => 'Alipay F2F', - 'codepay' => 'CodePay', - 'epay' => 'ePay', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal', - 'stripe' => 'Stripe', + 'channel' => [ + 'alipay' => 'Alipay F2F', + 'codepay' => 'CodePay', + 'epay' => 'ePay', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal', + 'stripe' => 'Stripe', 'paybeaver' => 'PayBeaver', - 'theadpay' => 'THeadPay', - 'manual' => 'Manual Pay', + 'theadpay' => 'THeadPay', + 'manual' => 'Manual Pay', ], - 'hint' => [ - 'alipay' => 'This feature requires going to Ant Financial Services Open Platform to apply for permission and application', - 'codepay' => 'Please go to CodePay. Apply for an account, download and set up its software', - 'payjs' => 'Please go to PayJs to apply an account', - 'paypal' => 'Login to the API credentials application page with your merchant account, agree and get setup information', + 'hint' => [ + 'alipay' => 'This feature requires going to Ant Financial Services Open Platform to apply for permission and application', + 'codepay' => 'Please go to CodePay. Apply for an account, download and set up its software', + 'payjs' => 'Please go to PayJs to apply an account', + 'paypal' => 'Login to the API credentials application page with your merchant account, agree and get setup information', 'paybeaver' => 'Please go to PayBeaver to apply an account', - 'theadpay' => 'Please go to THeadPay to request an account', - 'manual' => 'After the gateway is set and selected, it will be displayed on the user-end', + 'theadpay' => 'Please go to THeadPay to request an account', + 'manual' => 'After the gateway is set and selected, it will be displayed on the user-end', ], ], - 'notification' => [ - 'channel' => [ - 'telegram' => 'Telegram', - 'wechat' => 'Enterprise WeChat', - 'dingtalk' => 'DingTalk', - 'email' => 'Email', - 'bark' => 'Bark', + 'notification' => [ + 'channel' => [ + 'telegram' => 'Telegram', + 'wechat' => 'Enterprise WeChat', + 'dingtalk' => 'DingTalk', + 'email' => 'Email', + 'bark' => 'Bark', 'serverchan' => 'ServerChan', - 'pushdeer' => 'PushDeer', - 'pushplus' => 'PushPlus', - 'iyuu' => 'IYUU', - 'tg_chat' => 'TG Chat', - 'site' => 'Site Popup', + 'pushdeer' => 'PushDeer', + 'pushplus' => 'PushPlus', + 'iyuu' => 'IYUU', + 'tg_chat' => 'TG Chat', + 'site' => 'Site Popup', ], 'send_test' => 'Send Test Message', ], - 'forbid' => [ + 'forbid' => [ 'mainland' => 'Forbid Chinese Mainland Access', - 'china' => 'Forbid China Access', - 'oversea' => 'Forbid Oversea Access', + 'china' => 'Forbid China Access', + 'oversea' => 'Forbid Oversea Access', ], - 'username' => [ - 'email' => 'Email', + 'username' => [ + 'email' => 'Email', 'mobile' => 'Phone number', - 'any' => 'Any Username', + 'any' => 'Any Username', ], - 'active_account' => [ + 'active_account' => [ 'before' => 'Pre-registration activation', - 'after' => 'Activate after registration', + 'after' => 'Activate after registration', ], - 'ddns' => [ - 'namesilo' => 'Namesilo', - 'aliyun' => 'AliCloud/Aliyun', - 'dnspod' => 'DNSPod', + 'ddns' => [ + 'namesilo' => 'Namesilo', + 'aliyun' => 'AliCloud/Aliyun', + 'dnspod' => 'DNSPod', 'cloudflare' => 'CloudFlare', ], - 'captcha' => [ - 'standard' => 'Standard', - 'geetest' => 'Geetest', + 'captcha' => [ + 'standard' => 'Standard', + 'geetest' => 'Geetest', 'recaptcha' => 'Google ReCaptcha', - 'hcaptcha' => 'hCaptcha', + 'hcaptcha' => 'hCaptcha', ], - 'referral' => [ + 'referral' => [ 'once' => 'First Purchase Rebate', 'loop' => 'Always Rebate', ], ], - 'set_to' => 'Set as :attribute', - 'minute' => ' minutes', - 'query' => 'Query', - 'optional' => 'Optional', - 'require' => 'Required', + 'set_to' => 'Set as :attribute', + 'minute' => ' minutes', + 'query' => 'Query', + 'optional' => 'Optional', + 'require' => 'Required', ]; diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 4e0c45ed..caad6fa9 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -1,99 +1,99 @@ 'I have read and accepted', - 'active' => [ + 'accept_term' => 'I have read and accepted', + 'active' => [ 'attribute' => 'Active', - 'error' => [ + 'error' => [ 'activated' => 'Your account has been activated, no need to re-activate', - 'disable' => 'Account activation has been disabled, you can sign in directly!', - 'throttle' => 'You have triggered the activation request restriction, please do not operate too frequent! If you have any questions, please contact: email', + 'disable' => 'Account activation has been disabled, you can sign in directly!', + 'throttle' => 'You have triggered the activation request restriction, please do not operate too frequent! If you have any questions, please contact: email', ], 'promotion' => 'Account not yet activated, please [:action] first!', - 'sent' => 'Activation Email has sent to your mailbox, please check your mailbox (Email may be in the Trash)', + 'sent' => 'Activation Email has sent to your mailbox, please check your mailbox (Email may be in the Trash)', ], - 'aup' => 'Acceptable Use Policy', - 'captcha' => [ + 'aup' => 'Acceptable Use Policy', + 'captcha' => [ 'attribute' => 'Captcha', - 'error' => [ - 'failed' => 'Captcha verification failed, please try again', + 'error' => [ + 'failed' => 'Captcha verification failed, please try again', 'timeout' => 'Invalid verification code! It maybe expired, please refresh and try again.', ], - 'required' => 'Please complete the Captcha operation!', - 'sent' => 'Email has been sent! Please check your mailbox! (Email may be in the Trash)', + 'required' => 'Please complete the Captcha operation!', + 'sent' => 'Email has been sent! Please check your mailbox! (Email may be in the Trash)', ], - 'email' => [ + 'email' => [ 'error' => [ - 'banned' => 'Your email service provider was banned by our platform. Please use another valid email', + 'banned' => 'Your email service provider was banned by our platform. Please use another valid email', 'invalid' => 'Your email service provider is not in our supported list. Please use another email ', ], ], - 'error' => [ - 'account_baned' => 'Your account has been banned!', - 'login_error' => 'Login error, please try again later!', - 'login_failed' => 'Login failed, please check whether the email or password is entered correctly!', + 'error' => [ + 'account_baned' => 'Your account has been banned!', + 'login_error' => 'Login error, please try again later!', + 'login_failed' => 'Login failed, please check whether the email or password is entered correctly!', 'not_found_user' => 'No associated account found, please use other ways to login', 'repeat_request' => 'Please refresh the page and try again', - 'url_timeout' => 'The link has expired, please try again', + 'url_timeout' => 'The link has expired, please try again', ], - 'failed' => 'These credentials do not match our records.', - 'invite' => [ - 'attribute' => 'Invitation code', - 'error' => [ + 'failed' => 'These credentials do not match our records.', + 'invite' => [ + 'attribute' => 'Invitation code', + 'error' => [ 'unavailable' => 'Invitation code is invalid!', ], - 'get' => 'Click to get the invitation code', + 'get' => 'Click to get the invitation code', 'not_required' => 'No invitation code is required, you can sign up directly!', ], - 'login' => 'Sign in', - 'logout' => 'Logout', - 'maintenance' => 'Maintenance', + 'login' => 'Sign in', + 'logout' => 'Logout', + 'maintenance' => 'Maintenance', 'maintenance_tip' => 'Maintenance in progress', - 'oauth' => [ - 'bind_failed' => 'Binding failed', - 'bind_success' => 'Binding successfully', - 'login_failed' => 'Third-party login failed!', - 'rebind_success' => 'Re-binding successfully', - 'register' => 'Quick Registration', + 'oauth' => [ + 'bind_failed' => 'Binding failed', + 'bind_success' => 'Binding successfully', + 'login_failed' => 'Third-party login failed!', + 'rebind_success' => 'Re-binding successfully', + 'register' => 'Quick Registration', 'register_failed' => 'Registration failed', - 'registered' => 'Already registered, please sign in directly', - 'unbind_failed' => 'Unbinding failed', - 'unbind_success' => 'Unbinding successfully', + 'registered' => 'Already registered, please sign in directly', + 'unbind_failed' => 'Unbinding failed', + 'unbind_success' => 'Unbinding successfully', ], - 'optional' => 'Optional', - 'password' => [ - 'forget' => 'Forgot password?', - 'new' => 'Enter a new password', + 'optional' => 'Optional', + 'password' => [ + 'forget' => 'Forgot password?', + 'new' => 'Enter a new password', 'original' => 'Current Password', - 'reset' => [ + 'reset' => [ 'attribute' => 'Reset Password', - 'error' => [ + 'error' => [ 'disabled' => 'We have disabled the password reset function, please contact :email for help', - 'failed' => 'Password reset failed', + 'failed' => 'Password reset failed', 'throttle' => 'You can only reset your password :time times within 24 hours, please do not operate frequently.', - 'same' => 'New password cannot be the same as old password, please re-enter', - 'wrong' => 'Password incorrect, please try again', - 'demo' => 'You can not change administrator password under Demo environment', + 'same' => 'New password cannot be the same as old password, please re-enter', + 'wrong' => 'Password incorrect, please try again', + 'demo' => 'You can not change administrator password under Demo environment', ], - 'sent' => 'Reset link has sent to your mailbox, please check the email (Email may be in the Trash)', - 'success' => 'New password set successfully, you can sign in now', + 'sent' => 'Reset link has sent to your mailbox, please check the email (Email may be in the Trash)', + 'success' => 'New password set successfully, you can sign in now', ], ], - 'register' => [ + 'register' => [ 'attribute' => 'Sign up', - 'code' => 'Registration Code', - 'error' => [ - 'disable' => 'Sorry, we have temporarily stopped accepting new users', + 'code' => 'Registration Code', + 'error' => [ + 'disable' => 'Sorry, we have temporarily stopped accepting new users', 'throttle' => 'Anti-bots is active! Please do not send register forms too frequently!', ], - 'failed' => 'Registration failed, please try later', + 'failed' => 'Registration failed, please try later', 'promotion' => 'Still no account? Please go to ', - 'success' => 'Registration successfully', + 'success' => 'Registration successfully', ], - 'remember_me' => 'Remember me', - 'request' => 'Request', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - 'tos' => 'Terms of Service', + 'remember_me' => 'Remember me', + 'request' => 'Request', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + 'tos' => 'Terms of Service', 'one-click_login' => 'One-Click Login', ]; diff --git a/resources/lang/en/common.php b/resources/lang/en/common.php index e317d0a3..1ef31824 100644 --- a/resources/lang/en/common.php +++ b/resources/lang/en/common.php @@ -1,87 +1,87 @@ '{1} Hour | {2} O\'clock', - 'account' => 'Account', - 'available_date' => 'Available Until/Period', - 'created_at' => 'Created At', - 'expired_at' => 'Expiration Date', - 'updated_at' => 'Updated At', - 'latest_at' => 'Latest Activity', - 'back' => 'Back', - 'cancel' => 'Cancel', - 'close' => 'Close', - 'close_item' => 'Close :attribute', - 'confirm' => 'Confirm', - 'continues' => 'Continues', - 'open' => 'Open', - 'send' => 'Send', - 'view' => 'View', - 'reset' => 'Reset', - 'copy' => [ + 'hour' => '{1} Hour | {2} O\'clock', + 'account' => 'Account', + 'available_date' => 'Available Until/Period', + 'created_at' => 'Created At', + 'expired_at' => 'Expiration Date', + 'updated_at' => 'Updated At', + 'latest_at' => 'Latest Activity', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'close' => 'Close', + 'close_item' => 'Close :attribute', + 'confirm' => 'Confirm', + 'continues' => 'Continues', + 'open' => 'Open', + 'send' => 'Send', + 'view' => 'View', + 'reset' => 'Reset', + 'copy' => [ 'attribute' => 'Copy', - 'success' => 'Copy successfully', - 'failed' => 'Copy failed, please copy manually', + 'success' => 'Copy successfully', + 'failed' => 'Copy failed, please copy manually', ], - 'add' => 'Add', - 'free' => 'Free', - 'replace' => 'Replace', - 'submit' => 'Submit', - 'submit_item' => 'Submit :attribute', - 'generate' => 'Generate', - 'generate_item' => 'Generate :attribute', - 'to_safari' => [0 => 'Click on the upper right corner', 1 => ', Choose ', 2 => 'Open In Safari', 3 => ' to improve your experience.'], - 'update_browser' => [0 => 'You are using an ', 1 => 'outdated', 2 => ' browser. Please', 3 => 'upgrade your browser', 4 => ' to improve your experience.'], - 'apply' => 'Apply', - 'avatar' => 'Avatar', - 'customize' => 'Custom', - 'all' => 'All', - 'default' => 'Default', - 'download' => 'Download', - 'goto' => 'Goto', - 'warning' => 'Warning', - 'success' => 'Successfully', - 'success_item' => 'Successful :attribute', - 'failed' => 'Failed', - 'failed_item' => ':attribute Failed', - 'update' => 'Update', - 'update_action' => 'Update :action', - 'none' => 'None', - 'new' => 'New', - 'sorry' => 'Sorry', - 'applied' => ':attribute Applied', - 'active_item' => 'Active :attribute', - 'error' => 'Error', - 'toggle' => 'Toggle', - 'toggle_action' => 'Toggle :action', - 'request_url' => 'Request Url', - 'function' => [ + 'add' => 'Add', + 'free' => 'Free', + 'replace' => 'Replace', + 'submit' => 'Submit', + 'submit_item' => 'Submit :attribute', + 'generate' => 'Generate', + 'generate_item' => 'Generate :attribute', + 'to_safari' => [0 => 'Click on the upper right corner', 1 => ', Choose ', 2 => 'Open In Safari', 3 => ' to improve your experience.'], + 'update_browser' => [0 => 'You are using an ', 1 => 'outdated', 2 => ' browser. Please', 3 => 'upgrade your browser', 4 => ' to improve your experience.'], + 'apply' => 'Apply', + 'avatar' => 'Avatar', + 'customize' => 'Custom', + 'all' => 'All', + 'default' => 'Default', + 'download' => 'Download', + 'goto' => 'Goto', + 'warning' => 'Warning', + 'success' => 'Successfully', + 'success_item' => 'Successful :attribute', + 'failed' => 'Failed', + 'failed_item' => ':attribute Failed', + 'update' => 'Update', + 'update_action' => 'Update :action', + 'none' => 'None', + 'new' => 'New', + 'sorry' => 'Sorry', + 'applied' => ':attribute Applied', + 'active_item' => 'Active :attribute', + 'error' => 'Error', + 'toggle' => 'Toggle', + 'toggle_action' => 'Toggle :action', + 'request_url' => 'Request Url', + 'function' => [ 'navigation' => 'Navigation', - 'menubar' => 'Menubar', + 'menubar' => 'Menubar', 'fullscreen' => 'Fullscreen', ], - 'days' => [ + 'days' => [ 'attribute' => '{1} Days | Day {2}', - 'sun' => 'Sunday', - 'mon' => 'Monday', - 'tue' => 'Tuesday', - 'wed' => 'Wednesday', - 'thu' => 'Thursday', - 'fri' => 'Friday', - 'sat' => 'Saturday', - 'weekend' => 'Weekend', - 'work' => 'Work Day', - 'next' => 'Next Day', + 'sun' => 'Sunday', + 'mon' => 'Monday', + 'tue' => 'Tuesday', + 'wed' => 'Wednesday', + 'thu' => 'Thursday', + 'fri' => 'Friday', + 'sat' => 'Saturday', + 'weekend' => 'Weekend', + 'work' => 'Work Day', + 'next' => 'Next Day', ], - 'qrcode' => ':attribute QrCode', - 'deleted' => 'Deleted', - 'deleted_item' => ':attribute Deleted', - 'print' => 'Print', - 'unlimited' => 'Unlimited', - 'payment' => [ + 'qrcode' => ':attribute QrCode', + 'deleted' => 'Deleted', + 'deleted_item' => ':attribute Deleted', + 'print' => 'Print', + 'unlimited' => 'Unlimited', + 'payment' => [ 'credit' => 'Balance', 'alipay' => 'Alipay', - 'qq' => 'QQ Wallet', + 'qq' => 'QQ Wallet', 'wechat' => 'WeChat Pay ', 'crypto' => 'Crypto', 'manual' => 'Manual Payment', @@ -89,59 +89,59 @@ return [ 'wait' => 'Awaiting payment', ], ], - 'order' => [ + 'order' => [ 'status' => [ - 'cancel' => 'Canceled', + 'cancel' => 'Canceled', 'complete' => 'Completed', - 'prepaid' => 'Prepaid', - 'ongoing' => 'Using', - 'review' => 'Pending', + 'prepaid' => 'Prepaid', + 'ongoing' => 'Using', + 'review' => 'Pending', ], ], - 'recommend' => 'Recommend', - 'advance' => 'Advance', - 'action' => 'Action', - 'search' => 'Search', - 'edit' => 'Edit', - 'delete' => 'Delete', - 'status' => [ - 'attribute' => 'Status', - 'inactive' => 'Inactive', - 'disabled' => 'Disable', - 'banned' => 'Banned', - 'normal' => 'Normal', - 'enabled' => 'Active', - 'expire' => 'Expired', - 'limited' => 'Limitations', - 'run_out' => 'Out of traffic', - 'unused' => 'Unused', - 'used' => 'Used', - 'closed' => 'Closed', - 'applying' => 'Applying', - 'withdrawn' => 'Withdrawn', - 'unwithdrawn' => 'Not withdrawn', - 'reply' => 'Replied', - 'pending' => 'Pending', - 'unknown' => 'Unknown', - 'available' => 'Active', - 'reject' => 'Reject', - 'rejected' => 'Rejected', - 'review' => 'Pending approval', - 'reviewed' => 'Approve pending payment', - 'paid' => 'Waited', - 'payment_pending' => 'To be paid', - 'pass' => 'Passed', - 'send_to_credit' => 'Credit to Balance', + 'recommend' => 'Recommend', + 'advance' => 'Advance', + 'action' => 'Action', + 'search' => 'Search', + 'edit' => 'Edit', + 'delete' => 'Delete', + 'status' => [ + 'attribute' => 'Status', + 'inactive' => 'Inactive', + 'disabled' => 'Disable', + 'banned' => 'Banned', + 'normal' => 'Normal', + 'enabled' => 'Active', + 'expire' => 'Expired', + 'limited' => 'Limitations', + 'run_out' => 'Out of traffic', + 'unused' => 'Unused', + 'used' => 'Used', + 'closed' => 'Closed', + 'applying' => 'Applying', + 'withdrawn' => 'Withdrawn', + 'unwithdrawn' => 'Not withdrawn', + 'reply' => 'Replied', + 'pending' => 'Pending', + 'unknown' => 'Unknown', + 'available' => 'Active', + 'reject' => 'Reject', + 'rejected' => 'Rejected', + 'review' => 'Pending approval', + 'reviewed' => 'Approve pending payment', + 'paid' => 'Waited', + 'payment_pending' => 'To be paid', + 'pass' => 'Passed', + 'send_to_credit' => 'Credit to Balance', 'waiting_tobe_send' => 'Waiting for delivery', ], - 'stay_unchanged' => 'Leave blank for no change', + 'stay_unchanged' => 'Leave blank for no change', 'random_generate' => 'Leave blank to randomly generate', - 'request_failed' => 'Request error, please try again', - 'convert' => 'Convert', - 'import' => 'Import', - 'or' => 'or', - 'more' => 'More', - 'to' => 'To', - 'to_be_send' => 'Pending', - 'developing' => 'Developing! Stay tuned', + 'request_failed' => 'Request error, please try again', + 'convert' => 'Convert', + 'import' => 'Import', + 'or' => 'or', + 'more' => 'More', + 'to' => 'To', + 'to_be_send' => 'Pending', + 'developing' => 'Developing! Stay tuned', ]; diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index f63b5a21..f56f60f7 100644 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -1,32 +1,32 @@ [ - 'access' => 'IP or Proxy Access Forbidden', - 'bots' => 'Bots Access Forbidden', - 'china' => 'Chinese IP or Proxy Access Forbidden', + 'forbidden' => [ + 'access' => 'IP or Proxy Access Forbidden', + 'bots' => 'Bots Access Forbidden', + 'china' => 'Chinese IP or Proxy Access Forbidden', 'oversea' => 'Oversea IP or Proxy Access Forbidden', ], - 'log' => 'Logs', - 'refresh' => 'Refresh', + 'log' => 'Logs', + 'refresh' => 'Refresh', 'refresh_page' => 'Please Refresh Page, Then Try Again', - 'report' => 'Error comes back with log:', - 'safe_enter' => 'Secure Entrance', - 'safe_code' => 'Please enter the security code', - 'title' => '⚠️Error Detected', + 'report' => 'Error comes back with log:', + 'safe_enter' => 'Secure Entrance', + 'safe_code' => 'Please enter the security code', + 'title' => '⚠️Error Detected', 'unsafe_enter' => 'Non-Secure Entrance', - 'visit' => 'Please visit', - 'whoops' => 'Whoops!', - 'get_ip' => 'Get IP information exception', - 'subscribe' => [ - 'unknown' => 'Unknown subscribe URL! Please get a new one!', - 'sub_baned' => 'Subscribe banned! Visit the web for detail', - 'user' => 'Wrong URL, Account not exist!', + 'visit' => 'Please visit', + 'whoops' => 'Whoops!', + 'get_ip' => 'Get IP information exception', + 'subscribe' => [ + 'unknown' => 'Unknown subscribe URL! Please get a new one!', + 'sub_baned' => 'Subscribe banned! Visit the web for detail', + 'user' => 'Wrong URL, Account not exist!', 'user_disable' => 'Account Disabled! Contact Support!', - 'baned_until' => 'Account has been banned until :time, Please wait to unlock!', - 'out' => 'OUT OF DATA! Please consider to purchase new data or reset it!', - 'expired' => 'Account Expired! Please renew your purchase!', - 'question' => 'Account Error?! Visit web for detail', - 'none' => 'No nodes Available', + 'baned_until' => 'Account has been banned until :time, Please wait to unlock!', + 'out' => 'OUT OF DATA! Please consider to purchase new data or reset it!', + 'expired' => 'Account Expired! Please renew your purchase!', + 'question' => 'Account Error?! Visit web for detail', + 'none' => 'No nodes Available', ], ]; diff --git a/resources/lang/en/http-statuses.php b/resources/lang/en/http-statuses.php index abb26dc0..7fc19a8a 100644 --- a/resources/lang/en/http-statuses.php +++ b/resources/lang/en/http-statuses.php @@ -1,76 +1,76 @@ 'Unknown Error', - '100' => 'Continue', - '101' => 'Switching Protocols', - '102' => 'Processing', - '200' => 'OK', - '201' => 'Created', - '202' => 'Accepted', - '203' => 'Non-Authoritative Information', - '204' => 'No Content', - '205' => 'Reset Content', - '206' => 'Partial Content', - '207' => 'Multi-Status', - '208' => 'Already Reported', - '226' => 'IM Used', - '300' => 'Multiple Choices', - '301' => 'Moved Permanently', - '302' => 'Found', - '303' => 'See Other', - '304' => 'Not Modified', - '305' => 'Use Proxy', - '307' => 'Temporary Redirect', - '308' => 'Permanent Redirect', - '400' => 'Bad Request', - '401' => 'Unauthorized', - '402' => 'Payment Required', - '403' => 'Forbidden', - '404' => 'Page Not Found', - '405' => 'Method Not Allowed', - '406' => 'Not Acceptable', - '407' => 'Proxy Authentication Required', - '408' => 'Request Timeout', - '409' => 'Conflict', - '410' => 'Gone', - '411' => 'Length Required', - '412' => 'Precondition Failed', - '413' => 'Payload Too Large', - '414' => 'URI Too Long', - '415' => 'Unsupported Media Type', - '416' => 'Range Not Satisfiable', - '417' => 'Expectation Failed', - '418' => 'I\'m a teapot', - '419' => 'Session Has Expired', - '421' => 'Misdirected Request', - '422' => 'Unprocessable Entity', - '423' => 'Locked', - '424' => 'Failed Dependency', - '426' => 'Upgrade Required', - '428' => 'Precondition Required', - '429' => 'Too Many Requests', - '431' => 'Request Header Fields Too Large', - '449' => 'Retry With', - '451' => 'Unavailable For Legal Reasons', - '500' => 'Internal Server Error', - '501' => 'Not Implemented', - '502' => 'Bad Gateway', - '503' => 'Maintenance Mode', - '504' => 'Gateway Timeout', - '505' => 'HTTP Version Not Supported', - '506' => 'Variant Also Negotiates', - '507' => 'Insufficient Storage', - '508' => 'Loop Detected', - '509' => 'Bandwidth Limit Exceeded', - '510' => 'Not Extended', - '511' => 'Network Authentication Required', - '520' => 'Unknown Error', - '521' => 'Web Server is Down', - '522' => 'Connection Timed Out', - '523' => 'Origin Is Unreachable', - '524' => 'A Timeout Occurred', - '525' => 'SSL Handshake Failed', - '526' => 'Invalid SSL Certificate', + '0' => 'Unknown Error', + '100' => 'Continue', + '101' => 'Switching Protocols', + '102' => 'Processing', + '200' => 'OK', + '201' => 'Created', + '202' => 'Accepted', + '203' => 'Non-Authoritative Information', + '204' => 'No Content', + '205' => 'Reset Content', + '206' => 'Partial Content', + '207' => 'Multi-Status', + '208' => 'Already Reported', + '226' => 'IM Used', + '300' => 'Multiple Choices', + '301' => 'Moved Permanently', + '302' => 'Found', + '303' => 'See Other', + '304' => 'Not Modified', + '305' => 'Use Proxy', + '307' => 'Temporary Redirect', + '308' => 'Permanent Redirect', + '400' => 'Bad Request', + '401' => 'Unauthorized', + '402' => 'Payment Required', + '403' => 'Forbidden', + '404' => 'Page Not Found', + '405' => 'Method Not Allowed', + '406' => 'Not Acceptable', + '407' => 'Proxy Authentication Required', + '408' => 'Request Timeout', + '409' => 'Conflict', + '410' => 'Gone', + '411' => 'Length Required', + '412' => 'Precondition Failed', + '413' => 'Payload Too Large', + '414' => 'URI Too Long', + '415' => 'Unsupported Media Type', + '416' => 'Range Not Satisfiable', + '417' => 'Expectation Failed', + '418' => 'I\'m a teapot', + '419' => 'Session Has Expired', + '421' => 'Misdirected Request', + '422' => 'Unprocessable Entity', + '423' => 'Locked', + '424' => 'Failed Dependency', + '426' => 'Upgrade Required', + '428' => 'Precondition Required', + '429' => 'Too Many Requests', + '431' => 'Request Header Fields Too Large', + '449' => 'Retry With', + '451' => 'Unavailable For Legal Reasons', + '500' => 'Internal Server Error', + '501' => 'Not Implemented', + '502' => 'Bad Gateway', + '503' => 'Maintenance Mode', + '504' => 'Gateway Timeout', + '505' => 'HTTP Version Not Supported', + '506' => 'Variant Also Negotiates', + '507' => 'Insufficient Storage', + '508' => 'Loop Detected', + '509' => 'Bandwidth Limit Exceeded', + '510' => 'Not Extended', + '511' => 'Network Authentication Required', + '520' => 'Unknown Error', + '521' => 'Web Server is Down', + '522' => 'Connection Timed Out', + '523' => 'Origin Is Unreachable', + '524' => 'A Timeout Occurred', + '525' => 'SSL Handshake Failed', + '526' => 'Invalid SSL Certificate', 'unknownError' => 'Unknown Error', ]; diff --git a/resources/lang/en/model.php b/resources/lang/en/model.php index 037216ee..e72321ea 100644 --- a/resources/lang/en/model.php +++ b/resources/lang/en/model.php @@ -1,230 +1,230 @@ [ - 'id' => 'User ID', - 'attribute' => 'User', - 'nickname' => 'Nickname', - 'username' => 'Username', - 'password' => 'Password', - 'credit' => 'Balance', - 'invite_num' => 'Available Invitation Code', - 'reset_date' => 'Reset date', - 'port' => 'Port', - 'traffic_used' => 'Data Usage', - 'service' => 'Proxy', - 'group' => 'Group', + 'user' => [ + 'id' => 'User ID', + 'attribute' => 'User', + 'nickname' => 'Nickname', + 'username' => 'Username', + 'password' => 'Password', + 'credit' => 'Balance', + 'invite_num' => 'Available Invitation Code', + 'reset_date' => 'Reset date', + 'port' => 'Port', + 'traffic_used' => 'Data Usage', + 'service' => 'Proxy', + 'group' => 'Group', 'account_status' => 'Account Status', - 'proxy_status' => 'Proxy Status', - 'expired_date' => 'Expiration Date', - 'role' => 'Role Permissions', - 'wechat' => 'WeChat', - 'qq' => 'QQ', - 'remark' => 'Note', - 'uuid' => 'VMess UUID', - 'proxy_passwd' => 'Proxy Password', - 'proxy_method' => 'Encryption Method', + 'proxy_status' => 'Proxy Status', + 'expired_date' => 'Expiration Date', + 'role' => 'Role Permissions', + 'wechat' => 'WeChat', + 'qq' => 'QQ', + 'remark' => 'Note', + 'uuid' => 'VMess UUID', + 'proxy_passwd' => 'Proxy Password', + 'proxy_method' => 'Encryption Method', 'usable_traffic' => 'Available Data', 'proxy_protocol' => 'Protocol', - 'proxy_obfs' => 'Obfuscation', - 'speed_limit' => 'Speed limit', - 'inviter' => 'Inviter', - 'created_date' => 'Registered at', + 'proxy_obfs' => 'Obfuscation', + 'speed_limit' => 'Speed limit', + 'inviter' => 'Inviter', + 'created_date' => 'Registered at', ], - 'common' => [ - 'extend' => 'Extension', - 'sort' => 'Priority', + 'common' => [ + 'extend' => 'Extension', + 'sort' => 'Priority', 'description' => 'Description', - 'type' => 'Type', - 'level' => 'Level', + 'type' => 'Type', + 'level' => 'Level', ], - 'country' => [ + 'country' => [ 'code' => 'ISO Territory Code', 'icon' => 'ICON', 'name' => 'Territory name', ], - 'subscribe' => [ - 'code' => 'Subscription Code', - 'req_times' => 'Number of requests', + 'subscribe' => [ + 'code' => 'Subscription Code', + 'req_times' => 'Number of requests', 'updated_at' => 'Last Request Time', - 'ban_time' => 'Banned Time', - 'ban_desc' => 'Banned reason', - 'req_ip' => 'Request IP', + 'ban_time' => 'Banned Time', + 'ban_desc' => 'Banned reason', + 'req_ip' => 'Request IP', 'req_header' => 'Access Header', ], - 'oauth' => [ - 'type' => 'Channels', + 'oauth' => [ + 'type' => 'Channels', 'identifier' => 'Unique identifier', ], - 'user_group' => [ + 'user_group' => [ 'attribute' => 'User Group', - 'name' => 'Group Name', - 'nodes' => 'Select Nodes', + 'name' => 'Group Name', + 'nodes' => 'Select Nodes', ], - 'node' => [ - 'attribute' => 'Node', - 'id' => 'Node ID', - 'name' => 'Name', - 'domain' => 'Domain Name', - 'static' => 'Alive', - 'online_user' => 'Online', - 'data_consume' => 'Consumption Data', - 'data_rate' => 'Data Consumption Ratio', - 'ddns' => 'DDNS', - 'ipv4' => 'IPv4 Address', - 'ipv6' => 'IPv6 Address', - 'push_port' => 'Message Push Port', - 'rule_group' => 'Audit Group', - 'traffic_limit' => 'Speed Limit', - 'client_limit' => 'Devices Limit', - 'label' => 'Tags', - 'country' => 'Territory', - 'udp' => 'UDP', - 'display' => 'Display & Subscription', - 'detection' => 'Node Network Detection', - 'method' => 'Encryption Method', - 'protocol' => 'Protocol', - 'protocol_param' => 'Protocol parameters', - 'obfs' => 'Obfuscation', - 'obfs_param' => 'Obfuscation parameters', - 'single' => 'Only Port', - 'transfer' => 'Transit', - 'service_port' => 'Service Port', - 'single_passwd' => '[Only] Password', - 'v2_alter_id' => 'Alter ID', - 'v2_net' => 'Transport', - 'v2_cover' => 'Spoofing type', - 'v2_host' => 'Spoofing domain', - 'v2_path' => 'Path | Key', - 'v2_sni' => 'SNI', - 'v2_tls' => 'TLS', + 'node' => [ + 'attribute' => 'Node', + 'id' => 'Node ID', + 'name' => 'Name', + 'domain' => 'Domain Name', + 'static' => 'Alive', + 'online_user' => 'Online', + 'data_consume' => 'Consumption Data', + 'data_rate' => 'Data Consumption Ratio', + 'ddns' => 'DDNS', + 'ipv4' => 'IPv4 Address', + 'ipv6' => 'IPv6 Address', + 'push_port' => 'Message Push Port', + 'rule_group' => 'Audit Group', + 'traffic_limit' => 'Speed Limit', + 'client_limit' => 'Devices Limit', + 'label' => 'Tags', + 'country' => 'Territory', + 'udp' => 'UDP', + 'display' => 'Display & Subscription', + 'detection' => 'Node Network Detection', + 'method' => 'Encryption Method', + 'protocol' => 'Protocol', + 'protocol_param' => 'Protocol parameters', + 'obfs' => 'Obfuscation', + 'obfs_param' => 'Obfuscation parameters', + 'single' => 'Only Port', + 'transfer' => 'Transit', + 'service_port' => 'Service Port', + 'single_passwd' => '[Only] Password', + 'v2_alter_id' => 'Alter ID', + 'v2_net' => 'Transport', + 'v2_cover' => 'Spoofing type', + 'v2_host' => 'Spoofing domain', + 'v2_path' => 'Path | Key', + 'v2_sni' => 'SNI', + 'v2_tls' => 'TLS', 'v2_tls_provider' => 'TLS Configuration', - 'relay_port' => 'Transit Port', + 'relay_port' => 'Transit Port', ], - 'node_auth' => [ + 'node_auth' => [ 'attribute' => 'Node Authorization', - 'key' => 'Communication key For nodes', - 'secret' => 'Reverse Communication Key', + 'key' => 'Communication key For nodes', + 'secret' => 'Reverse Communication Key', ], - 'node_cert' => [ - 'attribute' => 'Domain Certificate', - 'domain' => 'Domain Name', - 'key' => 'KEY', - 'pem' => 'PEM', - 'issuer' => 'Issuing agency', - 'signed_date' => 'Issue Date', + 'node_cert' => [ + 'attribute' => 'Domain Certificate', + 'domain' => 'Domain Name', + 'key' => 'KEY', + 'pem' => 'PEM', + 'issuer' => 'Issuing agency', + 'signed_date' => 'Issue Date', 'expired_date' => 'Expiration Date', ], - 'order' => [ - 'attribute' => 'Order', - 'id' => 'Order ID', + 'order' => [ + 'attribute' => 'Order', + 'id' => 'Order ID', 'original_price' => 'Original price', - 'price' => 'Actual Price', - 'pay_way' => 'Payment method', - 'status' => 'Order Status', + 'price' => 'Actual Price', + 'pay_way' => 'Payment method', + 'status' => 'Order Status', ], - 'goods' => [ - 'attribute' => 'Product', - 'name' => 'Name', - 'price' => 'Price', - 'category' => 'Category', - 'renew' => 'Data Reset Price', - 'user_limit' => 'Speed limit', - 'period' => 'Reset period', - 'traffic' => 'Data limit', - 'invite_num' => 'Gift Invitation Number', - 'limit_num' => 'Limit purchase quantity', + 'goods' => [ + 'attribute' => 'Product', + 'name' => 'Name', + 'price' => 'Price', + 'category' => 'Category', + 'renew' => 'Data Reset Price', + 'user_limit' => 'Speed limit', + 'period' => 'Reset period', + 'traffic' => 'Data limit', + 'invite_num' => 'Gift Invitation Number', + 'limit_num' => 'Limit purchase quantity', 'available_date' => 'Available Period', - 'hot' => 'Best-selling', - 'color' => 'Colors', - 'logo' => 'Product Image', - 'info' => 'Custom Info List', + 'hot' => 'Best-selling', + 'color' => 'Colors', + 'logo' => 'Product Image', + 'info' => 'Custom Info List', ], - 'rule' => [ + 'rule' => [ 'attribute' => 'Audit Rule', - 'name' => 'Description', - 'pattern' => 'Value', + 'name' => 'Description', + 'pattern' => 'Value', ], - 'rule_group' => [ + 'rule_group' => [ 'attribute' => 'Audit Group', - 'name' => 'Group Name', - 'type' => 'Audit mode', - 'rules' => 'Select Audit Rule', + 'name' => 'Group Name', + 'type' => 'Audit mode', + 'rules' => 'Select Audit Rule', ], - 'role' => [ - 'attribute' => 'Role', - 'name' => 'Name', + 'role' => [ + 'attribute' => 'Role', + 'name' => 'Name', 'permissions' => 'Permissions', ], - 'permission' => [ - 'attribute' => 'Permission Behavior', + 'permission' => [ + 'attribute' => 'Permission Behavior', 'description' => 'Description', - 'name' => 'Route Name', + 'name' => 'Route Name', ], - 'article' => [ - 'attribute' => 'Article', - 'category' => 'Category', - 'language' => 'Language', - 'logo' => 'Image', + 'article' => [ + 'attribute' => 'Article', + 'category' => 'Category', + 'language' => 'Language', + 'logo' => 'Image', 'created_at' => 'Published Date', 'updated_at' => 'Last Update', ], - 'coupon' => [ - 'attribute' => 'Coupon', - 'name' => 'Coupon Name', - 'sn' => 'Coupon Code', - 'logo' => 'Coupon Image', - 'value' => 'Amount of preference', - 'priority' => 'Priority', - 'usable_times' => 'Useable times', - 'minimum' => 'Discount condition', - 'used' => 'Number of individual useable times', - 'levels' => 'Ranking limit', - 'groups' => 'Group Limit', - 'users_whitelist' => 'Licensed User', - 'users_blacklist' => 'Forbid User', + 'coupon' => [ + 'attribute' => 'Coupon', + 'name' => 'Coupon Name', + 'sn' => 'Coupon Code', + 'logo' => 'Coupon Image', + 'value' => 'Amount of preference', + 'priority' => 'Priority', + 'usable_times' => 'Useable times', + 'minimum' => 'Discount condition', + 'used' => 'Number of individual useable times', + 'levels' => 'Ranking limit', + 'groups' => 'Group Limit', + 'users_whitelist' => 'Licensed User', + 'users_blacklist' => 'Forbid User', 'services_whitelist' => 'Licensed Product', 'services_blacklist' => 'Forbid product', - 'newbie' => 'Newcomer Exclusive', - 'num' => 'Quantity', + 'newbie' => 'Newcomer Exclusive', + 'num' => 'Quantity', ], - 'aff' => [ - 'invitee' => 'Consumer', - 'amount' => 'Consumption Amount', + 'aff' => [ + 'invitee' => 'Consumer', + 'amount' => 'Consumption Amount', 'commission' => 'Rebate amount', 'updated_at' => 'Processed at', 'created_at' => 'Order Time', ], - 'referral' => [ + 'referral' => [ 'created_at' => 'Application Time', - 'user' => 'Request Account', - 'amount' => 'Amount to cash-out', - 'id' => 'Referral ID', + 'user' => 'Request Account', + 'amount' => 'Amount to cash-out', + 'id' => 'Referral ID', ], - 'notification' => [ - 'address' => 'Receive Address', + 'notification' => [ + 'address' => 'Receive Address', 'created_at' => 'Delivery Time', - 'status' => 'Delivery Status', + 'status' => 'Delivery Status', ], - 'ip' => [ + 'ip' => [ 'network_type' => 'Protocol Type', - 'info' => 'Location Info', + 'info' => 'Location Info', ], - 'user_traffic' => [ - 'upload' => 'Upload', + 'user_traffic' => [ + 'upload' => 'Upload', 'download' => 'Download', - 'total' => 'Total', + 'total' => 'Total', 'log_time' => 'Record Time', ], 'user_data_modify' => [ - 'before' => 'Pre-change Data', - 'after' => 'Data after change', + 'before' => 'Pre-change Data', + 'after' => 'Data after change', 'created_at' => 'Operation Date/Time', ], - 'user_credit' => [ - 'before' => 'Balance before operation', - 'after' => 'Balance after operation', - 'amount' => 'Amount of change', + 'user_credit' => [ + 'before' => 'Balance before operation', + 'after' => 'Balance after operation', + 'amount' => 'Amount of change', 'created_at' => 'Operation Date/Time', ], ]; diff --git a/resources/lang/en/notification.php b/resources/lang/en/notification.php index 814cd850..4a94c3c1 100644 --- a/resources/lang/en/notification.php +++ b/resources/lang/en/notification.php @@ -1,35 +1,35 @@ 'NOTIFICATIONS', - 'new' => ':num new message|:num new messages', - 'empty' => 'No new message', - 'payment_received' => 'Your order (Amount: :amount) is successfully paid. Click to view details', - 'account_expired' => 'Account Going to Expire', + 'attribute' => 'NOTIFICATIONS', + 'new' => ':num new message|:num new messages', + 'empty' => 'No new message', + 'payment_received' => 'Your order (Amount: :amount) is successfully paid. Click to view details', + 'account_expired' => 'Account Going to Expire', 'account_expired_content' => 'Your account will be expired after [:days] days. For your server experience, please renew your account ahead of time.', - 'account_expired_blade' => 'Account will be expired in [:day] days, Please renew it in time', - 'active_email' => 'Please complete the operation within 30 minutes', - 'close_ticket' => 'Ticket #:id - :title Closed', - 'view_web' => 'View Our Website', - 'view_ticket' => 'View The Ticket', - 'new_ticket' => 'New Ticket Opened: :title', - 'reply_ticket' => 'New Ticket Replied: :title', - 'ticket_content' => 'Ticket Content:', - 'node_block' => 'Node Blocked Warning', - 'node_offline' => 'Node maybe offline!', - 'node_offline_content' => 'Following Nodes abnormal: return heartbeats\' information are abnormal, Please pay attention.', - 'block_report' => 'Blocked Report: ', - 'traffic_warning' => 'Data Traffic Waring: ', - 'traffic_remain' => 'Data used: :percent%, please stay tuned!', - 'traffic_tips' => 'Please pay attention on the service reset day. You may also consider reset your data before the reset day.', - 'verification_account' => 'Account Verification', - 'verification' => 'Your verification code: ', - 'verification_limit' => 'Please complete the operation within :minutes minutes', - 'data_anomaly' => 'User Data Traffic Abnormal Warning', - 'data_anomaly_content' => 'User :id: Recent Hourly Data Usage [Upload: :upload | Download: :download | Total: :total]', - 'node' => [ - 'upload' => 'Upload', + 'account_expired_blade' => 'Account will be expired in [:day] days, Please renew it in time', + 'active_email' => 'Please complete the operation within 30 minutes', + 'close_ticket' => 'Ticket #:id - :title Closed', + 'view_web' => 'View Our Website', + 'view_ticket' => 'View The Ticket', + 'new_ticket' => 'New Ticket Opened: :title', + 'reply_ticket' => 'New Ticket Replied: :title', + 'ticket_content' => 'Ticket Content:', + 'node_block' => 'Node Blocked Warning', + 'node_offline' => 'Node maybe offline!', + 'node_offline_content' => 'Following Nodes abnormal: return heartbeats\' information are abnormal, Please pay attention.', + 'block_report' => 'Blocked Report: ', + 'traffic_warning' => 'Data Traffic Waring: ', + 'traffic_remain' => 'Data used: :percent%, please stay tuned!', + 'traffic_tips' => 'Please pay attention on the service reset day. You may also consider reset your data before the reset day.', + 'verification_account' => 'Account Verification', + 'verification' => 'Your verification code: ', + 'verification_limit' => 'Please complete the operation within :minutes minutes', + 'data_anomaly' => 'User Data Traffic Abnormal Warning', + 'data_anomaly_content' => 'User :id: Recent Hourly Data Usage [Upload: :upload | Download: :download | Total: :total]', + 'node' => [ + 'upload' => 'Upload', 'download' => 'download', - 'total' => 'Total', + 'total' => 'Total', ], ]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php index a4c4df70..8e20419e 100644 --- a/resources/lang/en/pagination.php +++ b/resources/lang/en/pagination.php @@ -1,6 +1,6 @@ 'Next »', + 'next' => 'Next »', 'previous' => '« Previous', ]; diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index e5c2f1fb..8124a437 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -1,235 +1,235 @@ [ - 'credit' => 'Balance', - 'status' => 'Status', - 'level' => 'Level', - 'group' => 'Group', - 'speed_limit' => 'Speed Limit', - 'remain' => 'Remaining Data', - 'time' => 'Package Validity', - 'last_login' => 'Last Login', - 'reset' => '{0}Data will be reset in :days|{1} Data will be reset in :days day|restTime|[2,*] Data will be reset in :days days', + 'account' => [ + 'credit' => 'Balance', + 'status' => 'Status', + 'level' => 'Level', + 'group' => 'Group', + 'speed_limit' => 'Speed Limit', + 'remain' => 'Remaining Data', + 'time' => 'Package Validity', + 'last_login' => 'Last Login', + 'reset' => '{0}Data will be reset in :days|{1} Data will be reset in :days day|restTime|[2,*] Data will be reset in :days days', 'connect_password' => 'Proxy Connect Password', - 'reason' => [ - 'normal' => 'Normal', - 'expired' => 'Expired', - 'overused' => 'You have reach the :data GB hourly data spend limit
      Wait :min to cool down', + 'reason' => [ + 'normal' => 'Normal', + 'expired' => 'Expired', + 'overused' => 'You have reach the :data GB hourly data spend limit
      Wait :min to cool down', 'traffic_exhausted' => 'OUT OF DATA', - 'unknown' => 'UNKNOWN ERROR, Please try to refresh your browser first before contact admin for help', + 'unknown' => 'UNKNOWN ERROR, Please try to refresh your browser first before contact admin for help', ], ], - 'home' => [ - 'attendance' => [ + 'home' => [ + 'attendance' => [ 'attribute' => 'Attendance', - 'disable' => 'Attendance System is disabled', - 'done' => 'Already checked in, come back tomorrow!', - 'success' => 'You got :data data', - 'failed' => 'System ❌ Error', + 'disable' => 'Attendance System is disabled', + 'done' => 'Already checked in, come back tomorrow!', + 'success' => 'You got :data data', + 'failed' => 'System ❌ Error', ], - 'traffic_logs' => 'Data Records', - 'announcement' => 'Announcements', - 'wechat_push' => 'WeChat Notification Service', - 'chat_group' => 'Chat Group', + 'traffic_logs' => 'Data Records', + 'announcement' => 'Announcements', + 'wechat_push' => 'WeChat Notification Service', + 'chat_group' => 'Chat Group', 'empty_announcement' => 'No Announcements', ], - 'purchase_to_unlock' => 'Unlock after purchasing service', - 'purchase_required' => 'This feature is disabled for non-paying users! Please', - 'attribute' => [ - 'node' => 'Node', - 'data' => 'Data', - 'ip' => 'IP Address', - 'isp' => 'ISP', + 'purchase_to_unlock' => 'Unlock after purchasing service', + 'purchase_required' => 'This feature is disabled for non-paying users! Please', + 'attribute' => [ + 'node' => 'Node', + 'data' => 'Data', + 'ip' => 'IP Address', + 'isp' => 'ISP', 'address' => 'Address', ], - 'purchase_promotion' => 'Purchase Now!', - 'menu' => [ - 'helps' => 'Help', - 'home' => 'Home', - 'invites' => 'Invite', - 'invoices' => 'Invoice', - 'nodes' => 'Node', - 'referrals' => 'Promotion', - 'shop' => 'Shop', - 'profile' => 'Settings', - 'tickets' => 'Ticket', + 'purchase_promotion' => 'Purchase Now!', + 'menu' => [ + 'helps' => 'Help', + 'home' => 'Home', + 'invites' => 'Invite', + 'invoices' => 'Invoice', + 'nodes' => 'Node', + 'referrals' => 'Promotion', + 'shop' => 'Shop', + 'profile' => 'Settings', + 'tickets' => 'Ticket', 'admin_dashboard' => 'Dashboard', ], - 'contact' => 'Contact Info', - 'oauth' => [ + 'contact' => 'Contact Info', + 'oauth' => [ 'bind_title' => 'Binding Your Social Accounts', - 'not_bind' => 'Not Yet Bound', - 'bind' => 'Bind', - 'rebind' => 'Rebind', - 'unbind' => 'Unbind', + 'not_bind' => 'Not Yet Bound', + 'bind' => 'Bind', + 'rebind' => 'Rebind', + 'unbind' => 'Unbind', ], - 'coupon' => [ + 'coupon' => [ 'discount' => 'Discount', - 'error' => [ - 'unknown' => 'Unknown Coupon', - 'used' => 'Coupon has been used', - 'expired' => 'Expired', - 'run_out' => 'Run Out of Usage', + 'error' => [ + 'unknown' => 'Unknown Coupon', + 'used' => 'Coupon has been used', + 'expired' => 'Expired', + 'run_out' => 'Run Out of Usage', 'inactive' => 'Coupon Inactive yet', - 'wait' => 'The Event will begin until :time, Please wait', - 'unmet' => 'Conditions of use are not met', - 'minimum' => 'The minimum requirement of this coupon is :amount', + 'wait' => 'The Event will begin until :time, Please wait', + 'unmet' => 'Conditions of use are not met', + 'minimum' => 'The minimum requirement of this coupon is :amount', 'overused' => 'You can only use this coupon once|You can only use this coupon :times times', - 'users' => 'This account is not eligible for promotions', + 'users' => 'This account is not eligible for promotions', 'services' => 'This item is not qualify for this discount, please check the promotion terms', ], ], - 'error_response' => 'Something went wrong, please try again later.', - 'invite' => [ - 'attribute' => 'Invitation code', - 'counts' => 'Total :num invitation codes', - 'tips' => 'Can generate :num invitation codes, valid within :days', - 'logs' => 'Invitation Record', - 'promotion' => 'Register and activate with your invitation code, Both sides will get :traffic traffic as rewards; when invitees purchase services, you will get :referral_percent% of their spend amount as commission.', + 'error_response' => 'Something went wrong, please try again later.', + 'invite' => [ + 'attribute' => 'Invitation code', + 'counts' => 'Total :num invitation codes', + 'tips' => 'Can generate :num invitation codes, valid within :days', + 'logs' => 'Invitation Record', + 'promotion' => 'Register and activate with your invitation code, Both sides will get :traffic traffic as rewards; when invitees purchase services, you will get :referral_percent% of their spend amount as commission.', 'generate_failed' => 'Failed to generate', ], - 'reset_data' => [ - 'action' => 'Reset Data', - 'cost' => 'Need :amount', + 'reset_data' => [ + 'action' => 'Reset Data', + 'cost' => 'Need :amount', 'cost_tips' => 'This following action will cost :amount!', - 'lack' => 'Insufficient balance. Please recharge!', - 'logs' => 'User purchase reset data', - 'success' => 'Reset Successfully', + 'lack' => 'Insufficient balance. Please recharge!', + 'logs' => 'User purchase reset data', + 'success' => 'Reset Successfully', ], - 'referral' => [ - 'link' => 'Referral link', - 'total' => 'Total rebate :amount (:total times), you can apply for cash withdrawal when it reaches :money.', - 'logs' => 'Commission records', - 'failed' => 'Application failed', + 'referral' => [ + 'link' => 'Referral link', + 'total' => 'Total rebate :amount (:total times), you can apply for cash withdrawal when it reaches :money.', + 'logs' => 'Commission records', + 'failed' => 'Application failed', 'success' => 'Application success', - 'msg' => [ - 'account' => 'Account has expired, please purchase to active service first', - 'applied' => 'Application already exists, please wait for the previous application to be processed', + 'msg' => [ + 'account' => 'Account has expired, please purchase to active service first', + 'applied' => 'Application already exists, please wait for the previous application to be processed', 'unfulfilled' => 'A minimal amount to created application is :amount', - 'wait' => 'Please wait for the administrator to review', - 'error' => 'Rebate order creation failed, please try later or notify the administrator', + 'wait' => 'Please wait for the administrator to review', + 'error' => 'Rebate order creation failed, please try later or notify the administrator', ], ], - 'inviter' => 'Inviter', - 'invitee' => 'Invitee', - 'registered_at' => 'Registration at', - 'bought_at' => 'Purchased at', - 'payment_method' => 'Payment method', - 'pay' => 'Pay', - 'input_coupon' => 'Please enter the gift code', - 'recharge' => 'Pay', - 'recharge_credit' => 'Add Funds', - 'recharging' => 'Paying...', + 'inviter' => 'Inviter', + 'invitee' => 'Invitee', + 'registered_at' => 'Registration at', + 'bought_at' => 'Purchased at', + 'payment_method' => 'Payment method', + 'pay' => 'Pay', + 'input_coupon' => 'Please enter the gift code', + 'recharge' => 'Pay', + 'recharge_credit' => 'Add Funds', + 'recharging' => 'Paying...', 'withdraw_commission' => 'Withdraw Commission', - 'withdraw_at' => 'Withdraw Date', - 'withdraw_logs' => 'Withdrawal records', - 'withdraw' => 'Withdraw', - 'scan_qrcode' => 'Please scan the QR code', - 'shop' => [ - 'hot' => 'HOT', - 'limited' => 'LIMIT', - 'change_amount' => 'Amount', + 'withdraw_at' => 'Withdraw Date', + 'withdraw_logs' => 'Withdrawal records', + 'withdraw' => 'Withdraw', + 'scan_qrcode' => 'Please scan the QR code', + 'shop' => [ + 'hot' => 'HOT', + 'limited' => 'LIMIT', + 'change_amount' => 'Amount', 'change_amount_help' => 'Please enter a recharge amount', - 'buy' => 'Purchase', - 'description' => 'Description', - 'service' => 'Service', - 'pay_credit' => 'Pay By Credit', - 'pay_online' => 'Pay By Online payment', - 'price' => 'Price', - 'quantity' => 'Quantity', - 'subtotal' => 'Subtotal', - 'total' => 'Total', - 'conflict' => 'Service Conflict', - 'conflict_tips' => '

      Current order will be set as Prepaid order.

      1. Prepaid order will be activated after current service expired!
      2. Your also can activate the order manually
      ', - 'call4help' => 'Please create a ticket to ask customer service', + 'buy' => 'Purchase', + 'description' => 'Description', + 'service' => 'Service', + 'pay_credit' => 'Pay By Credit', + 'pay_online' => 'Pay By Online payment', + 'price' => 'Price', + 'quantity' => 'Quantity', + 'subtotal' => 'Subtotal', + 'total' => 'Total', + 'conflict' => 'Service Conflict', + 'conflict_tips' => '

      Current order will be set as Prepaid order.

      1. Prepaid order will be activated after current service expired!
      2. Your also can activate the order manually
      ', + 'call4help' => 'Please create a ticket to ask customer service', ], - 'service' => [ - 'node_count' => 'Include :num Nodes', + 'service' => [ + 'node_count' => 'Include :num Nodes', 'country_count' => 'Covered :num Countries or Areas', - 'unlimited' => 'Unlimited Speed', + 'unlimited' => 'Unlimited Speed', ], - 'payment' => [ - 'error' => 'The recharge balance is not compliant', - 'creating' => 'Creating payment order...', + 'payment' => [ + 'error' => 'The recharge balance is not compliant', + 'creating' => 'Creating payment order...', 'redirect_stripe' => 'Redirect to Stripe', - 'qrcode_tips' => 'Please using :software to scan QrCode', - 'close_tips' => 'Please complete payment in :minutes minutes, otherwise it will be auto-closed by system', - 'mobile_tips' => 'Mobile User: Press QrCode image for a short amount of time -> Save Images -> Open payment software -> Scan it', + 'qrcode_tips' => 'Please using :software to scan QrCode', + 'close_tips' => 'Please complete payment in :minutes minutes, otherwise it will be auto-closed by system', + 'mobile_tips' => 'Mobile User: Press QrCode image for a short amount of time -> Save Images -> Open payment software -> Scan it', ], - 'invoice' => [ - 'attribute' => 'Order', - 'detail' => 'Order Detail', - 'amount' => 'Amount', + 'invoice' => [ + 'attribute' => 'Order', + 'detail' => 'Order Detail', + 'amount' => 'Amount', 'active_prepaid_question' => 'Are you sure to active prepaid order?', - 'active_prepaid_tips' => 'After active:
      Current order will be set to Expired!
      Expired dates will be recalculated!', + 'active_prepaid_tips' => 'After active:
      Current order will be set to Expired!
      Expired dates will be recalculated!', ], - 'node' => [ - 'info' => 'Configuration information', - 'setting' => 'Proxy settings', + 'node' => [ + 'info' => 'Configuration information', + 'setting' => 'Proxy settings', 'unstable' => 'Node fluctuation/under maintenance', - 'rate' => ':ratio time data consumption', + 'rate' => ':ratio time data consumption', ], - 'subscribe' => [ - 'link' => 'Subscription Link', - 'tips' => 'Warning: Subscribe Link is for personal used only, Please do not show to anyone else. Otherwise, they may use your service without your permission', + 'subscribe' => [ + 'link' => 'Subscription Link', + 'tips' => 'Warning: Subscribe Link is for personal used only, Please do not show to anyone else. Otherwise, they may use your service without your permission', 'exchange_warning' => 'Exchange Link:\n1. Old Link will be disabled\n2. Proxy connection password will be reset', - 'custom' => 'Custom Subscribe', - 'ss_only' => 'Subscribe SS Only', - 'ssr_only' => 'Subscribe SS/SSR Only', - 'v2ray_only' => 'Subscribe V2Ray Only', - 'trojan_only' => 'Subscribe Trojan Only', - 'error' => 'Exchange Link Error', - 'info' => [ - 'title' => 'Account Summary [Not Live]', - 'upload' => 'Upload', + 'custom' => 'Custom Subscribe', + 'ss_only' => 'Subscribe SS Only', + 'ssr_only' => 'Subscribe SS/SSR Only', + 'v2ray_only' => 'Subscribe V2Ray Only', + 'trojan_only' => 'Subscribe Trojan Only', + 'error' => 'Exchange Link Error', + 'info' => [ + 'title' => 'Account Summary [Not Live]', + 'upload' => 'Upload', 'download' => 'Download', - 'total' => 'Plan Traffic', + 'total' => 'Plan Traffic', ], ], - 'ticket' => [ - 'attribute' => 'Ticket', - 'submit_tips' => 'Submit Ticket?', - 'reply_confirm' => 'Reply Ticket?', - 'close_tips' => 'Are you sure to close this ticket?', - 'close' => 'Close Ticket', - 'failed_closed' => 'Error: Ticket has been closed', - 'reply_placeholder' => 'Say something', - 'reply' => 'Reply', - 'close_msg' => 'Ticket #:id has been closed by user', - 'title_placeholder' => 'Please describe your questions in short term', + 'ticket' => [ + 'attribute' => 'Ticket', + 'submit_tips' => 'Submit Ticket?', + 'reply_confirm' => 'Reply Ticket?', + 'close_tips' => 'Are you sure to close this ticket?', + 'close' => 'Close Ticket', + 'failed_closed' => 'Error: Ticket has been closed', + 'reply_placeholder' => 'Say something', + 'reply' => 'Reply', + 'close_msg' => 'Ticket #:id has been closed by user', + 'title_placeholder' => 'Please describe your questions in short term', 'content_placeholder' => 'Please describe in detail the problems you have encountered or where we need our help so that we can help you quickly', - 'new' => 'Create Ticket', - 'working_hour' => 'Customer Service', - 'online_hour' => 'Working Hours', - 'service_tips' => 'We have different channels to contact, please choose ONE of them!
      Duplicate requests cause further service delays', - 'error' => 'Error! Please contact Customer Service', + 'new' => 'Create Ticket', + 'working_hour' => 'Customer Service', + 'online_hour' => 'Working Hours', + 'service_tips' => 'We have different channels to contact, please choose ONE of them!
      Duplicate requests cause further service delays', + 'error' => 'Error! Please contact Customer Service', ], - 'traffic_logs' => [ + 'traffic_logs' => [ '24hours' => 'Today\'s usage', - '30days' => 'Daily Traffic Usage', - 'tips' => 'Tip: Traffic logs are updated with delays!', + '30days' => 'Daily Traffic Usage', + 'tips' => 'Tip: Traffic logs are updated with delays!', ], - 'client' => 'Client ', - 'tutorials' => 'Tutorials', - 'current_role' => 'Current Role as', - 'knowledge' => [ + 'client' => 'Client ', + 'tutorials' => 'Tutorials', + 'current_role' => 'Current Role as', + 'knowledge' => [ 'title' => 'Knowledge Base', 'basic' => 'Basic', ], - 'manual' => [ - 'red_packet' => 'Alipay red packet', - 'hint' => 'After scanning the code to pay, please continue to press 👇[Next]. After pressing 👇[Submit], the manual payment will be reviewed by the administrator!', - 'step_1' => 'Information', - 'step_1_title' => 'How to use manual payment correctly', - 'step_2' => 'Pay', - 'step_2_title' => 'Get the payment QR code and make payment', - 'step_3' => 'Complete', - 'step_3_title' => 'Waiting for payment to be manually confirmed', - 'remark' => 'Remark Username', + 'manual' => [ + 'red_packet' => 'Alipay red packet', + 'hint' => 'After scanning the code to pay, please continue to press 👇[Next]. After pressing 👇[Submit], the manual payment will be reviewed by the administrator!', + 'step_1' => 'Information', + 'step_1_title' => 'How to use manual payment correctly', + 'step_2' => 'Pay', + 'step_2_title' => 'Get the payment QR code and make payment', + 'step_3' => 'Complete', + 'step_3_title' => 'Waiting for payment to be manually confirmed', + 'remark' => 'Remark Username', 'remark_content' => 'Fill in the account used for login to speed up the review of the payment!', - 'payment_hint' => 'When you pay, please pay the corresponding amount', - 'pre' => 'Previous', - 'next' => 'Next', + 'payment_hint' => 'When you pay, please pay the corresponding amount', + 'pre' => 'Previous', + 'next' => 'Next', ], ]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php index 342c5e2e..442dd5f3 100644 --- a/resources/lang/en/validation.php +++ b/resources/lang/en/validation.php @@ -1,196 +1,196 @@ 'The :attribute field must be accepted.', - 'accepted_if' => 'The :attribute must be accepted when :other is :value.', - 'active_url' => 'The :attribute field must be a valid URL.', - 'after' => 'The :attribute field must be a date after :date.', - 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', - 'alpha' => 'The :attribute field must only contain letters.', - 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', - 'alpha_num' => 'The :attribute field must only contain letters and numbers.', - 'array' => 'The :attribute field must be an array.', - 'before' => 'The :attribute field must be a date before :date.', - 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', - 'between' => [ - 'array' => 'The :attribute field must have between :min and :max items.', - 'file' => 'The :attribute field must be between :min and :max kilobytes.', + 'accepted' => 'The :attribute field must be accepted.', + 'accepted_if' => 'The :attribute must be accepted when :other is :value.', + 'active_url' => 'The :attribute field must be a valid URL.', + 'after' => 'The :attribute field must be a date after :date.', + 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', + 'alpha' => 'The :attribute field must only contain letters.', + 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', + 'alpha_num' => 'The :attribute field must only contain letters and numbers.', + 'array' => 'The :attribute field must be an array.', + 'before' => 'The :attribute field must be a date before :date.', + 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', + 'between' => [ + 'array' => 'The :attribute field must have between :min and :max items.', + 'file' => 'The :attribute field must be between :min and :max kilobytes.', 'numeric' => 'The :attribute field must be between :min and :max.', - 'string' => 'The :attribute field must be between :min and :max characters.', + 'string' => 'The :attribute field must be between :min and :max characters.', ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute field confirmation does not match.', - 'current_password' => 'The password is incorrect.', - 'date' => 'The :attribute field must be a valid date.', - 'date_equals' => 'The :attribute field must be a date equal to :date.', - 'date_format' => 'The :attribute field must match the format :format.', - 'declined' => 'The :attribute must be declined.', - 'declined_if' => 'The :attribute must be declined when :other is :value.', - 'different' => 'The :attribute field and :other must be different.', - 'digits' => 'The :attribute field must be :digits digits.', - 'digits_between' => 'The :attribute field must be between :min and :max digits.', - 'dimensions' => 'The :attribute field has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute field must be a valid email address.', - 'ends_with' => 'The :attribute field must end with one of the following: :values.', - 'enum' => 'The selected :attribute is invalid.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute field must be a file.', - 'filled' => 'The :attribute field must have a value.', - 'gt' => [ - 'array' => 'The :attribute field must have more than :value items.', - 'file' => 'The :attribute field must be greater than :value kilobytes.', + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute field confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute field must be a valid date.', + 'date_equals' => 'The :attribute field must be a date equal to :date.', + 'date_format' => 'The :attribute field must match the format :format.', + 'declined' => 'The :attribute must be declined.', + 'declined_if' => 'The :attribute must be declined when :other is :value.', + 'different' => 'The :attribute field and :other must be different.', + 'digits' => 'The :attribute field must be :digits digits.', + 'digits_between' => 'The :attribute field must be between :min and :max digits.', + 'dimensions' => 'The :attribute field has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute field must be a valid email address.', + 'ends_with' => 'The :attribute field must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute field must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'array' => 'The :attribute field must have more than :value items.', + 'file' => 'The :attribute field must be greater than :value kilobytes.', 'numeric' => 'The :attribute field must be greater than :value.', - 'string' => 'The :attribute field must be greater than :value characters.', + 'string' => 'The :attribute field must be greater than :value characters.', ], - 'gte' => [ - 'array' => 'The :attribute field must have :value items or more.', - 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', + 'gte' => [ + 'array' => 'The :attribute field must have :value items or more.', + 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', 'numeric' => 'The :attribute field must be greater than or equal to :value.', - 'string' => 'The :attribute field must be greater than or equal to :value characters.', + 'string' => 'The :attribute field must be greater than or equal to :value characters.', ], - 'image' => 'The :attribute field must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field must exist in :other.', - 'integer' => 'The :attribute field must be an integer.', - 'ip' => 'The :attribute field must be a valid IP address.', - 'ipv4' => 'The :attribute field must be a valid IPv4 address.', - 'ipv6' => 'The :attribute field must be a valid IPv6 address.', - 'json' => 'The :attribute field must be a valid JSON string.', - 'lt' => [ - 'array' => 'The :attribute field must have less than :value items.', - 'file' => 'The :attribute field must be less than :value kilobytes.', + 'image' => 'The :attribute field must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field must exist in :other.', + 'integer' => 'The :attribute field must be an integer.', + 'ip' => 'The :attribute field must be a valid IP address.', + 'ipv4' => 'The :attribute field must be a valid IPv4 address.', + 'ipv6' => 'The :attribute field must be a valid IPv6 address.', + 'json' => 'The :attribute field must be a valid JSON string.', + 'lt' => [ + 'array' => 'The :attribute field must have less than :value items.', + 'file' => 'The :attribute field must be less than :value kilobytes.', 'numeric' => 'The :attribute field must be less than :value.', - 'string' => 'The :attribute field must be less than :value characters.', + 'string' => 'The :attribute field must be less than :value characters.', ], - 'lte' => [ - 'array' => 'The :attribute field must not have more than :value items.', - 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', + 'lte' => [ + 'array' => 'The :attribute field must not have more than :value items.', + 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', 'numeric' => 'The :attribute field must be less than or equal to :value.', - 'string' => 'The :attribute field must be less than or equal to :value characters.', + 'string' => 'The :attribute field must be less than or equal to :value characters.', ], - 'mac_address' => 'The :attribute must be a valid MAC address.', - 'max' => [ - 'array' => 'The :attribute field must not have more than :max items.', - 'file' => 'The :attribute field must not be greater than :max kilobytes.', + 'mac_address' => 'The :attribute must be a valid MAC address.', + 'max' => [ + 'array' => 'The :attribute field must not have more than :max items.', + 'file' => 'The :attribute field must not be greater than :max kilobytes.', 'numeric' => 'The :attribute field must not be greater than :max.', - 'string' => 'The :attribute field must not be greater than :max characters.', + 'string' => 'The :attribute field must not be greater than :max characters.', ], - 'mimes' => 'The :attribute field must be a file of type: :values.', - 'mimetypes' => 'The :attribute field must be a file of type: :values.', - 'min' => [ - 'array' => 'The :attribute field must have at least :min items.', - 'file' => 'The :attribute field must be at least :min kilobytes.', + 'mimes' => 'The :attribute field must be a file of type: :values.', + 'mimetypes' => 'The :attribute field must be a file of type: :values.', + 'min' => [ + 'array' => 'The :attribute field must have at least :min items.', + 'file' => 'The :attribute field must be at least :min kilobytes.', 'numeric' => 'The :attribute field must be at least :min.', - 'string' => 'The :attribute field must be at least :min characters.', + 'string' => 'The :attribute field must be at least :min characters.', ], - 'multiple_of' => 'The :attribute field must be a multiple of :value.', - 'not_in' => 'The selected :attribute is invalid.', - 'not_regex' => 'The :attribute field format is invalid.', - 'numeric' => 'The :attribute field must be a number.', - 'password' => 'The password is incorrect.', - 'present' => 'The :attribute field must be present.', - 'prohibited' => 'The :attribute field is prohibited.', - 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', - 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', - 'prohibits' => 'The :attribute field prohibits :other from being present.', - 'regex' => 'The :attribute field format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values are present.', - 'required_without' => 'The :attribute field is required when :values is not present.', + 'multiple_of' => 'The :attribute field must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute field format is invalid.', + 'numeric' => 'The :attribute field must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute field format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute field must match :other.', - 'size' => [ - 'array' => 'The :attribute field must contain :size items.', - 'file' => 'The :attribute field must be :size kilobytes.', + 'same' => 'The :attribute field must match :other.', + 'size' => [ + 'array' => 'The :attribute field must contain :size items.', + 'file' => 'The :attribute field must be :size kilobytes.', 'numeric' => 'The :attribute field must be :size.', - 'string' => 'The :attribute field must be :size characters.', + 'string' => 'The :attribute field must be :size characters.', ], - 'starts_with' => 'The :attribute field must start with one of the following: :values.', - 'string' => 'The :attribute field must be a string.', - 'timezone' => 'The :attribute field must be a valid timezone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute field must be a valid URL.', - 'uuid' => 'The :attribute field must be a valid UUID.', - 'attributes' => [ - 'address' => 'Address', - 'age' => 'Age', - 'amount' => 'Amount', - 'area' => 'Area', - 'available' => 'Available', - 'birthday' => 'Birthday', - 'body' => 'Body', - 'city' => 'City', - 'content' => 'Content', - 'country' => 'Country', - 'created_at' => 'Created At', - 'creator' => 'Creator', - 'current_password' => 'Current Password', - 'date' => 'Date', - 'date_of_birth' => 'Date Of Birth', - 'day' => 'Day', - 'deleted_at' => 'Deleted At', - 'description' => 'Description', - 'district' => 'District', - 'duration' => 'Duration', - 'email' => 'Email', - 'excerpt' => 'Excerpt', - 'filter' => 'Filter', - 'first_name' => 'First Name', - 'gender' => 'Gender', - 'group' => 'Group', - 'hour' => 'Hour', - 'image' => 'Image', - 'last_name' => 'Last Name', - 'lesson' => 'Lesson', - 'line_address_1' => 'Line Address 1', - 'line_address_2' => 'Line Address 2', - 'message' => 'Message', - 'middle_name' => 'Middle Name', - 'minute' => 'Minute', - 'mobile' => 'Mobile', - 'month' => 'Month', - 'name' => 'Name', - 'national_code' => 'National Code', - 'number' => 'Number', - 'password' => 'Password', - 'password_confirmation' => 'Password Confirmation', - 'phone' => 'Phone', - 'photo' => 'Photo', - 'postal_code' => 'Postal Code', - 'price' => 'Price', - 'province' => 'Province', + 'starts_with' => 'The :attribute field must start with one of the following: :values.', + 'string' => 'The :attribute field must be a string.', + 'timezone' => 'The :attribute field must be a valid timezone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute field must be a valid URL.', + 'uuid' => 'The :attribute field must be a valid UUID.', + 'attributes' => [ + 'address' => 'Address', + 'age' => 'Age', + 'amount' => 'Amount', + 'area' => 'Area', + 'available' => 'Available', + 'birthday' => 'Birthday', + 'body' => 'Body', + 'city' => 'City', + 'content' => 'Content', + 'country' => 'Country', + 'created_at' => 'Created At', + 'creator' => 'Creator', + 'current_password' => 'Current Password', + 'date' => 'Date', + 'date_of_birth' => 'Date Of Birth', + 'day' => 'Day', + 'deleted_at' => 'Deleted At', + 'description' => 'Description', + 'district' => 'District', + 'duration' => 'Duration', + 'email' => 'Email', + 'excerpt' => 'Excerpt', + 'filter' => 'Filter', + 'first_name' => 'First Name', + 'gender' => 'Gender', + 'group' => 'Group', + 'hour' => 'Hour', + 'image' => 'Image', + 'last_name' => 'Last Name', + 'lesson' => 'Lesson', + 'line_address_1' => 'Line Address 1', + 'line_address_2' => 'Line Address 2', + 'message' => 'Message', + 'middle_name' => 'Middle Name', + 'minute' => 'Minute', + 'mobile' => 'Mobile', + 'month' => 'Month', + 'name' => 'Name', + 'national_code' => 'National Code', + 'number' => 'Number', + 'password' => 'Password', + 'password_confirmation' => 'Password Confirmation', + 'phone' => 'Phone', + 'photo' => 'Photo', + 'postal_code' => 'Postal Code', + 'price' => 'Price', + 'province' => 'Province', 'recaptcha_response_field' => 'Recaptcha Response Field', - 'remember' => 'Remember', - 'restored_at' => 'Restored At', - 'result_text_under_image' => 'Result Text Under Image', - 'role' => 'Role', - 'second' => 'Second', - 'sex' => 'Sex', - 'short_text' => 'Short Text', - 'size' => 'Size', - 'state' => 'State', - 'street' => 'Street', - 'student' => 'Student', - 'subject' => 'Subject', - 'teacher' => 'Teacher', - 'terms' => 'Terms', - 'test_description' => 'Test Description', - 'test_locale' => 'Test Locale', - 'test_name' => 'Test Name', - 'text' => 'Text', - 'time' => 'Date/Time', - 'title' => 'Title', - 'updated_at' => 'Updated At', - 'username' => 'Username', - 'year' => 'Year', + 'remember' => 'Remember', + 'restored_at' => 'Restored At', + 'result_text_under_image' => 'Result Text Under Image', + 'role' => 'Role', + 'second' => 'Second', + 'sex' => 'Sex', + 'short_text' => 'Short Text', + 'size' => 'Size', + 'state' => 'State', + 'street' => 'Street', + 'student' => 'Student', + 'subject' => 'Subject', + 'teacher' => 'Teacher', + 'terms' => 'Terms', + 'test_description' => 'Test Description', + 'test_locale' => 'Test Locale', + 'test_name' => 'Test Name', + 'text' => 'Text', + 'time' => 'Date/Time', + 'title' => 'Title', + 'updated_at' => 'Updated At', + 'username' => 'Username', + 'year' => 'Year', ], - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], diff --git a/resources/lang/ja/admin.php b/resources/lang/ja/admin.php index f315118f..c3e5ef11 100644 --- a/resources/lang/ja/admin.php +++ b/resources/lang/ja/admin.php @@ -1,804 +1,804 @@ [ - 'users' => '合計ユーザー', - 'available_users' => '正規ユーザー', - 'paid_users' => 'プレミアム', - 'active_days_users' => ':days ゲーマー', - 'inactive_days_users' => ':days 日以上の不在ユーザー', - 'online_users' => '現在オンライン', - 'expiring_users' => '有効期限が近づいています', - 'overuse_users' => '最も高いユーザー(90%以上)', - 'abnormal_users' => '1時間利用例外', - 'nodes' => 'ノード', - 'maintaining_nodes' => 'メンテナンス中のノード', - 'traffic_consumed' => 'レコードの消費量', - 'traffic_days_consumed' => ':days の使用状況', - 'orders' => '合計注文数', - 'online_orders' => 'オンライン決済注文数', - 'succeed_orders' => '成功注文数', - 'credit' => '合計残高', + 'dashboard' => [ + 'users' => '合計ユーザー', + 'available_users' => '正規ユーザー', + 'paid_users' => 'プレミアム', + 'active_days_users' => ':days ゲーマー', + 'inactive_days_users' => ':days 日以上の不在ユーザー', + 'online_users' => '現在オンライン', + 'expiring_users' => '有効期限が近づいています', + 'overuse_users' => '最も高いユーザー(90%以上)', + 'abnormal_users' => '1時間利用例外', + 'nodes' => 'ノード', + 'maintaining_nodes' => 'メンテナンス中のノード', + 'traffic_consumed' => 'レコードの消費量', + 'traffic_days_consumed' => ':days の使用状況', + 'orders' => '合計注文数', + 'online_orders' => 'オンライン決済注文数', + 'succeed_orders' => '成功注文数', + 'credit' => '合計残高', 'withdrawing_commissions' => '手数料を出るための手数料', - 'withdrawn_commissions' => '手数料のご案内', + 'withdrawn_commissions' => '手数料のご案内', ], - 'action' => [ + 'action' => [ 'edit_item' => ':attribute を編集', - 'add_item' => ':attribute を追加します。', + 'add_item' => ':attribute を追加します。', ], - 'confirm' => [ - 'delete' => [0 => ':attribute が削除しました', 1 => '】? '], + 'confirm' => [ + 'delete' => [0 => ':attribute が削除しました', 1 => '】? '], 'continues' => '本当に実行しますか? ', - 'export' => 'すべてのデータをエクスポートしますか? ', + 'export' => 'すべてのデータをエクスポートしますか? ', ], - 'user_dashboard' => 'ユーザーセンター', - 'menu' => [ - 'dashboard' => '管理者エリア', - 'user' => [ - 'attribute' => 'ユーザーシステム', - 'list' => 'ユーザー管理', - 'oauth' => 'ユーザー権限', - 'group' => 'ユーザーグループ', + 'user_dashboard' => 'ユーザーセンター', + 'menu' => [ + 'dashboard' => '管理者エリア', + 'user' => [ + 'attribute' => 'ユーザーシステム', + 'list' => 'ユーザー管理', + 'oauth' => 'ユーザー権限', + 'group' => 'ユーザーグループ', 'credit_log' => '残高移動', - 'subscribe' => 'サブスクリプションの管理', + 'subscribe' => 'サブスクリプションの管理', ], - 'rbac' => [ - 'attribute' => 'パーミッションシステム', + 'rbac' => [ + 'attribute' => 'パーミッションシステム', 'permission' => '権限のリスト', - 'role' => '役割一覧', + 'role' => '役割一覧', ], 'customer_service' => [ 'attribute' => 'サポート システム', - 'ticket' => 'チケット', - 'article' => 'すべての記事', - 'push' => 'プッシュ通知', - 'mail' => 'メールグループ', + 'ticket' => 'チケット', + 'article' => 'すべての記事', + 'push' => 'プッシュ通知', + 'mail' => 'メールグループ', ], - 'node' => [ + 'node' => [ 'attribute' => 'ネットワークシステム', - 'list' => 'ライン管理', - 'auth' => '回線による承認', - 'cert' => '証明書一覧', + 'list' => 'ライン管理', + 'auth' => '回線による承認', + 'cert' => '証明書一覧', ], - 'rule' => [ + 'rule' => [ 'attribute' => '監査ルール', - 'list' => 'フィルターリスト', - 'group' => 'ルールグループ', - 'trigger' => 'トリガーのレコード', + 'list' => 'フィルターリスト', + 'group' => 'ルールグループ', + 'trigger' => 'トリガーのレコード', ], - 'shop' => [ + 'shop' => [ 'attribute' => '商品システム', - 'goods' => '次の商品を注文した顧客へ送信', - 'coupon' => 'カード券管理', - 'order' => '注文商品', + 'goods' => '次の商品を注文した顧客へ送信', + 'coupon' => 'カード券管理', + 'order' => '注文商品', ], - 'promotion' => [ - 'attribute' => 'プロモーションシステム', - 'invite' => '招待の管理', - 'withdraw' => 'キャッシュアウト管理', + 'promotion' => [ + 'attribute' => 'プロモーションシステム', + 'invite' => '招待の管理', + 'withdraw' => 'キャッシュアウト管理', 'rebate_flow' => '還元流水', ], - 'analysis' => [ - 'attribute' => '分析レポート', + 'analysis' => [ + 'attribute' => '分析レポート', 'accounting' => '帳簿', - 'user_flow' => 'ユーザー分析', + 'user_flow' => 'ユーザー分析', ], - 'log' => [ - 'attribute' => 'ログ システム', - 'traffic' => 'データ使用量', - 'traffic_flow' => 'トラフィックの変化', - 'service_ban' => 'BAN 履歴', - 'online_logs' => 'オンライン記録', - 'online_monitor' => 'オンラインモニター', - 'notify' => '通知の履歴', + 'log' => [ + 'attribute' => 'ログ システム', + 'traffic' => 'データ使用量', + 'traffic_flow' => 'トラフィックの変化', + 'service_ban' => 'BAN 履歴', + 'online_logs' => 'オンライン記録', + 'online_monitor' => 'オンラインモニター', + 'notify' => '通知の履歴', 'payment_callback' => '決済コールバックの処理中', - 'system' => '登録が無効となりました', + 'system' => '登録が無効となりました', ], - 'tools' => [ + 'tools' => [ 'attribute' => 'ツールボックス', 'decompile' => 'パース', - 'convert' => 'フォーマット変換', - 'import' => 'データのインポート', - 'analysis' => 'ログ分析', + 'convert' => 'フォーマット変換', + 'import' => 'データのインポート', + 'analysis' => 'ログ分析', ], - 'setting' => [ - 'attribute' => '設定', + 'setting' => [ + 'attribute' => '設定', 'email_suffix' => 'メールボックスサフィックス管理', - 'universal' => '一般的な設定', - 'system' => 'システム設定', + 'universal' => '一般的な設定', + 'system' => 'システム設定', ], ], - 'user' => [ - 'massive' => [ - 'text' => 'ユーザー生成数', - 'button' => '一括作成', - 'failed' => 'アカウントの一括作成に失敗しました', + 'user' => [ + 'massive' => [ + 'text' => 'ユーザー生成数', + 'button' => '一括作成', + 'failed' => 'アカウントの一括作成に失敗しました', 'succeed' => 'アカウントの一括作成に成功', - 'note' => 'バックグラウンドユーザを生成する', + 'note' => 'バックグラウンドユーザを生成する', ], - 'proxy_info' => '設定情報', + 'proxy_info' => '設定情報', 'traffic_monitor' => 'トラフィックの統計情報', - 'online_monitor' => 'オンラインツアー', - 'reset_traffic' => 'トラフィックのリセット', - 'user_view' => 'ユーザーカム', + 'online_monitor' => 'オンラインツアー', + 'reset_traffic' => 'トラフィックのリセット', + 'user_view' => 'ユーザーカム', 'connection_test' => 'ネットテスト', - 'counts' => '合計 :num アカウント数', - 'reset_confirm' => [0 => 'リセットハッシュ', 1 => '」 データ?'], - 'info' => [ - 'account' => 'アカウント情報', - 'proxy' => 'プロキシ情報', - 'switch' => 'IDを切り替え', - 'reset_date_hint' => 'アカウントの次回のリセット日', - 'expired_date_hint' => '既定の設定に進んでください', - 'uuid_hint' => 'V2 RayアカウントID', + 'counts' => '合計 :num アカウント数', + 'reset_confirm' => [0 => 'リセットハッシュ', 1 => '」 データ?'], + 'info' => [ + 'account' => 'アカウント情報', + 'proxy' => 'プロキシ情報', + 'switch' => 'IDを切り替え', + 'reset_date_hint' => 'アカウントの次回のリセット日', + 'expired_date_hint' => '既定の設定に進んでください', + 'uuid_hint' => 'V2 RayアカウントID', 'recharge_placeholder' => '負の値を埋めるが首残高になります', ], - 'update_help' => '成功の更新は完了しましたか?', - 'proxies_config' => '【:username】接続設定', - 'group' => [ - 'title' => 'ユーザグループ制御(1 つのノードで複数のグループに割り当てることができます).またユーザに表示可能なノード:はグループ毎にグループ化されたランクでグループ化できます', - 'name' => 'グループ名', + 'update_help' => '成功の更新は完了しましたか?', + 'proxies_config' => '【:username】接続設定', + 'group' => [ + 'title' => 'ユーザグループ制御(1 つのノードで複数のグループに割り当てることができます).またユーザに表示可能なノード:はグループ毎にグループ化されたランクでグループ化できます', + 'name' => 'グループ名', 'counts' => ' 合計 :num のグループ', ], ], 'zero_unlimited_hint' => '無限に /0 の制限なし', - 'node' => [ + 'node' => [ 'traffic_monitor' => 'トラフィックの統計情報', - 'refresh_geo' => '更新', - 'ping' => 'Pingの遅延', + 'refresh_geo' => '更新', + 'ping' => 'Pingの遅延', 'connection_test' => '連結性を検出', - 'counts' => '総 :num 回線数', - 'reload_all' => '全ての者をリロードします', + 'counts' => '総 :num 回線数', + 'reload_all' => '全ての者をリロードします', 'refresh_geo_all' => '全てのノードの情報を再読込', - 'reload_confirm' => 'ノードを再読込しますか?', - 'info' => [ - 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', - 'basic' => '一般的な情報', - 'ddns_hint' => '動的IPノードはDDNSを設定する必要があります。この型のノードがブロックされ、ドメインによる検出機能はドメインで行います。', - 'domain_placeholder' => 'ドメインのネームスペースです。ドメインの優先を優先', - 'domain_hint' => 'ドメイン名「DNS」モードをオンにすると、自動的に次のIPコンテンツをリンクさせます! また、ドメインを登録している時にIPを変更する必要はありません。またドメイン名登録のビジネスページに進みます。', - 'extend' => 'その他の情報', - 'display' => [ + 'reload_confirm' => 'ノードを再読込しますか?', + 'info' => [ + 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', + 'basic' => '一般的な情報', + 'ddns_hint' => '動的IPノードはDDNSを設定する必要があります。この型のノードがブロックされ、ドメインによる検出機能はドメインで行います。', + 'domain_placeholder' => 'ドメインのネームスペースです。ドメインの優先を優先', + 'domain_hint' => 'ドメイン名「DNS」モードをオンにすると、自動的に次のIPコンテンツをリンクさせます! また、ドメインを登録している時にIPを変更する必要はありません。またドメイン名登録のビジネスページに進みます。', + 'extend' => 'その他の情報', + 'display' => [ 'invisible' => '非表示', - 'node' => '【trans】のページのみ', - 'sub' => '受刑者のみを表示', - 'all' => 'グローバル表示', - 'hint' => 'ユーザーはフィードの所有者/表示できるかどうか', + 'node' => '【trans】のページのみ', + 'sub' => '受刑者のみを表示', + 'all' => 'グローバル表示', + 'hint' => 'ユーザーはフィードの所有者/表示できるかどうか', ], - 'ipv4_hint' => 'マルチIPは、分割、例:1.1.1、8.8.8.8.8', - 'ipv6_hint' => 'マルチIPは、分割、例:1.1.1、8.8.8.8.8', - 'ipv4_placeholder' => 'サーバーIPv4アドレス', - 'ipv6_placeholder' => 'サーバのIPv6アドレス、これは使用者が見える、無効なドメイン名です', - 'push_port_hint' => '必要で Firewall がボードに接続されていない場合メッセージング例.', - 'data_rate_hint' => '例:0.1Mを100Mで決算10M,5用100Mで500Mを決済します', - 'level_hint' => 'レベル:0 - ランクなし, すべて見ることができる', - 'detection' => [ - 'tcp' => 'TCP のみ', + 'ipv4_hint' => 'マルチIPは、分割、例:1.1.1、8.8.8.8.8', + 'ipv6_hint' => 'マルチIPは、分割、例:1.1.1、8.8.8.8.8', + 'ipv4_placeholder' => 'サーバーIPv4アドレス', + 'ipv6_placeholder' => 'サーバのIPv6アドレス、これは使用者が見える、無効なドメイン名です', + 'push_port_hint' => '必要で Firewall がボードに接続されていない場合メッセージング例.', + 'data_rate_hint' => '例:0.1Mを100Mで決算10M,5用100Mで500Mを決済します', + 'level_hint' => 'レベル:0 - ランクなし, すべて見ることができる', + 'detection' => [ + 'tcp' => 'TCP のみ', 'icmp' => 'ICMP のみ', - 'all' => 'すべてを検知', + 'all' => 'すべてを検知', 'hint' => '30 - 60 分ごとにランダムなノードがブロックされるのを防ぐ', ], - 'obfs_param_hint' => '不変量は、 [plain] のパラメータを期待している、 で混み合わない [http_simple] 時、ポートを80; 混ざり合いましょう。 [tls] と推奨ポートが推奨されます。', + 'obfs_param_hint' => '不変量は、 [plain] のパラメータを期待している、 で混み合わない [http_simple] 時、ポートを80; 混ざり合いましょう。 [tls] と推奨ポートが推奨されます。', 'additional_ports_hint' => '有効な場合、サーバ構成のadditional_portsを設定してください', - 'v2_method_hint' => 'WebSocket転送プロトコルを使用中に none は使えません', - 'v2_net_hint' => 'WebSocket転送プロトコルを使用するときに TLS を有効にしてください', - 'v2_cover' => [ - 'none' => '偽装していない', - 'http' => 'HTTP データストリーム', - 'srtp' => 'ビデオハングアウトデータ (SRTP)', - 'utp' => 'BT ダウンロードデータ (uTP)', - 'wechat' => 'WeChatとビデオ通話', - 'dtls' => 'DTLS1.2データパッケージ', + 'v2_method_hint' => 'WebSocket転送プロトコルを使用中に none は使えません', + 'v2_net_hint' => 'WebSocket転送プロトコルを使用するときに TLS を有効にしてください', + 'v2_cover' => [ + 'none' => '偽装していない', + 'http' => 'HTTP データストリーム', + 'srtp' => 'ビデオハングアウトデータ (SRTP)', + 'utp' => 'BT ダウンロードデータ (uTP)', + 'wechat' => 'WeChatとビデオ通話', + 'dtls' => 'DTLS1.2データパッケージ', 'wireguard' => 'Wire Guardのデータパック', ], - 'v2_host_hint' => '偽装型は、http中に存在する複数のドメインのカンマで区切り、WebSocketを使用した際に通信プロトコルを使用する場合にのみ適用されます。', - 'v2_tls_provider_hint' => '異なるバックエンドが構成され:', - 'single_hint' => '推荐80或443,服务端需要配置
      严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', + 'v2_host_hint' => '偽装型は、http中に存在する複数のドメインのカンマで区切り、WebSocketを使用した際に通信プロトコルを使用する場合にのみ適用されます。', + 'v2_tls_provider_hint' => '異なるバックエンドが構成され:', + 'single_hint' => '推荐80或443,服务端需要配置
      严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', ], - 'proxy_info' => '*SSドット', + 'proxy_info' => '*SSドット', 'proxy_info_hint' => 'サーバー構成プロトコルを使用するときは、_compatible を混乱させていることを確認してください.', - 'reload' => 'オーバーロード', - 'auth' => [ - 'title' => 'ノード承認リストWEBAPI', - 'deploy' => [ - 'title' => '配備:type_label待ち:', - 'attribute' => 'デプロイ', - 'command' => 'コマンドを操作します', - 'update' => ': を更新', - 'uninstall' => 'アンインストール:', - 'start' => '起動中:', - 'stop' => '停止:', - 'status' => 'ステータス:', - 'recent_logs' => '最近のログ:', + 'reload' => 'オーバーロード', + 'auth' => [ + 'title' => 'ノード承認リストWEBAPI', + 'deploy' => [ + 'title' => '配備:type_label待ち:', + 'attribute' => 'デプロイ', + 'command' => 'コマンドを操作します', + 'update' => ': を更新', + 'uninstall' => 'アンインストール:', + 'start' => '起動中:', + 'stop' => '停止:', + 'status' => 'ステータス:', + 'recent_logs' => '最近のログ:', 'real_time_logs' => 'ライブログ:', - 'restart' => '再起動:', - 'same' => '新機能', - 'trojan_hint' => 'まず、ドメイン \'\' にドメインを対応するIPを解析するノードに記入してください。', + 'restart' => '再起動:', + 'same' => '新機能', + 'trojan_hint' => 'まず、ドメイン \'\' にドメインを対応するIPを解析するノードに記入してください。', ], - 'reset_auth' => '鍵をリセット', - 'counts' => '合計 :num 件のライセンス', + 'reset_auth' => '鍵をリセット', + 'counts' => '合計 :num 件のライセンス', 'generating_all' => '全てのノードの承認プロセスを実行しますか?', ], - 'cert' => [ - 'title' => 'ドメイン証明書一覧(V2Rayのための偽装ドメイン)', - 'counts' => '合計 :num のドメイン証明書', + 'cert' => [ + 'title' => 'ドメイン証明書一覧(V2Rayのための偽装ドメイン)', + 'counts' => '合計 :num のドメイン証明書', 'key_placeholder' => 'KEY値はnull 、VNET-V2 Rayバックエンドをサポートした自動署名証明書です', 'pem_placeholder' => 'VNET-V2 Rayバックエンドをサポートするための自動署名証明書は、ドメイン証明書を推奨する PEM値です。', ], ], - 'hint' => 'ヒント', - 'oauth' => [ - 'title' => 'ユーザー OAuth認証', + 'hint' => 'ヒント', + 'oauth' => [ + 'title' => 'ユーザー OAuth認証', 'counts' => '合計 :num 件の権限', ], - 'select_all' => 'すべて', - 'clear' => '清掃', - 'unselected_hint' => '事前割り当てルールがありました。検索で出来ます', - 'selected_hint' => '割り当てルールは、検索で利用可能です', - 'clone' => 'クローン', - 'monitor' => [ - 'daily_chart' => '毎日のトラフィックグラフ', + 'select_all' => 'すべて', + 'clear' => '清掃', + 'unselected_hint' => '事前割り当てルールがありました。検索で出来ます', + 'selected_hint' => '割り当てルールは、検索で利用可能です', + 'clone' => 'クローン', + 'monitor' => [ + 'daily_chart' => '毎日のトラフィックグラフ', 'monthly_chart' => '月間マップ', - 'node' => 'ノードトラフィック', - 'user' => 'ユーザートラフィック', - 'hint' => 'ヒント: 人間が統計値がない場合は、タイマー設定が正しいかどうかを確認してください。', + 'node' => 'ノードトラフィック', + 'user' => 'ユーザートラフィック', + 'hint' => 'ヒント: 人間が統計値がない場合は、タイマー設定が正しいかどうかを確認してください。', ], - 'tools' => [ - 'analysis' => [ - 'title' => 'SSR ログ解析単一ノードにのみ適します', - 'req_url' => '最近要求したアドレス', + 'tools' => [ + 'analysis' => [ + 'title' => 'SSR ログ解析単一ノードにのみ適します', + 'req_url' => '最近要求したアドレス', 'not_enough' => 'アクセス数が15000件以下で、データ分析に失敗しました', ], - 'convert' => [ - 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', + 'convert' => [ + 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', 'content_placeholder' => '設定値を入力してください!', ], 'decompile' => [ - 'title' => '設定変換を解決します。', - 'attribute' => 'パース', + 'title' => '設定変換を解決します。', + 'attribute' => 'パース', 'content_placeholder' => 'ShadowsocksRリンクを埋めるように指定してください。', ], ], - 'ticket' => [ - 'title' => 'チケット一覧', - 'counts' => '合計 :num 個の問題', - 'send_to' => 'ユーザー情報を入力してください。', - 'user_info' => 'ユーザー情報', - 'inviter_info' => '招待者情報', + 'ticket' => [ + 'title' => 'チケット一覧', + 'counts' => '合計 :num 個の問題', + 'send_to' => 'ユーザー情報を入力してください。', + 'user_info' => 'ユーザー情報', + 'inviter_info' => '招待者情報', 'close_confirm' => '課題をクローズしますか?', - 'error' => '予期しないエラーです!実行ログを確認してください。', + 'error' => '予期しないエラーです!実行ログを確認してください。', ], - 'logs' => [ - 'subscribe' => '購読リスト', - 'counts' => '合計 :num レコード', - 'rule' => [ - 'clear_all' => 'ログを消去する', - 'title' => 'トリガーのレコード', - 'name' => 'トリガールール', - 'reason' => 'トリガー理由', - 'created_at' => '動作開始時間', - 'tag' => '✅ コンテンツへのアクセスが拒否されました', + 'logs' => [ + 'subscribe' => '購読リスト', + 'counts' => '合計 :num レコード', + 'rule' => [ + 'clear_all' => 'ログを消去する', + 'title' => 'トリガーのレコード', + 'name' => 'トリガールール', + 'reason' => 'トリガー理由', + 'created_at' => '動作開始時間', + 'tag' => '✅ コンテンツへのアクセスが拒否されました', 'clear_confirm' => 'すべての記録をクリアしてもよろしいですか?', ], - 'order' => [ - 'title' => '注文一覧', + 'order' => [ + 'title' => '注文一覧', 'is_expired' => '有効期限切れ', - 'is_coupon' => 'クーポンを利用する', + 'is_coupon' => 'クーポンを利用する', ], - 'user_traffic' => [ - 'title' => 'トラフィックのログ', + 'user_traffic' => [ + 'title' => 'トラフィックのログ', 'choose_node' => 'ノードの選択', ], 'user_data_modify_title' => '変更された流行', - 'callback' => 'コールログ (オンライン決済)', - 'notification' => '配送日', - 'ip_monitor' => 'オンラインIPモニタリング 2分間のライブデータ', - 'user_ip' => [ - 'title' => 'ユーザーのオンラインIPの一覧 最新10分', + 'callback' => 'コールログ (オンライン決済)', + 'notification' => '配送日', + 'ip_monitor' => 'オンラインIPモニタリング 2分間のライブデータ', + 'user_ip' => [ + 'title' => 'ユーザーのオンラインIPの一覧 最新10分', 'connect' => '接続IP', ], - 'ban' => [ - 'title' => 'ユーザーの禁止履歴', - 'time' => '期間', - 'reason' => '理由', - 'ban_time' => 'アクセス禁止時間', + 'ban' => [ + 'title' => 'ユーザーの禁止履歴', + 'time' => '期間', + 'reason' => '理由', + 'ban_time' => 'アクセス禁止時間', 'last_connect_at' => '最終接続日時', ], - 'credit_title' => '残高変更記録', + 'credit_title' => '残高変更記録', ], - 'start_time' => '開始期間', - 'end_time' => '終了範囲', - 'goods' => [ - 'title' => '商品リスト', - 'type' => [ - 'top_up' => 'クレジットの追加', + 'start_time' => '開始期間', + 'end_time' => '終了範囲', + 'goods' => [ + 'title' => '商品リスト', + 'type' => [ + 'top_up' => 'クレジットの追加', 'package' => 'パケット数', - 'plan' => 'パッケージ', + 'plan' => 'パッケージ', ], - 'info' => [ - 'type_hint' => 'プランはアカウントの有効期間、パケットのチャージ可能、有効期限がありません', - 'period_hint' => 'セット内のデータはN日によってリセットされます', - 'limit_num_hint' => '1ユーザーが購入可能商品の購入回数、0を指定すると、無制限です', + 'info' => [ + 'type_hint' => 'プランはアカウントの有効期間、パケットのチャージ可能、有効期限がありません', + 'period_hint' => 'セット内のデータはN日によってリセットされます', + 'limit_num_hint' => '1ユーザーが購入可能商品の購入回数、0を指定すると、無制限です', 'available_date_hint' => '期限が来ると、自動的に合計トラフィックを減らせます。', - 'desc_placeholder' => '商品の簡単な説明', - 'list_placeholder' => '関連商品には属性がありますが、顧客は商品詳細ページで商品を選択できないことに注意してください。', - 'list_hint' => '行一行は<li> の開始端</li> で終わります。', + 'desc_placeholder' => '商品の簡単な説明', + 'list_placeholder' => '関連商品には属性がありますが、顧客は商品詳細ページで商品を選択できないことに注意してください。', + 'list_hint' => '行一行は<li> の開始端</li> で終わります。', ], - 'status' => [ + 'status' => [ 'yes' => 'リスト表示', - 'no' => 'オフライン', + 'no' => 'オフライン', ], 'sell_and_used' => '使い方/販売', - 'counts' => '合計 :num 個のアイテム', + 'counts' => '合計 :num 個のアイテム', ], - 'sort_asc' => 'ソートする値が大きいほど高くなります。', - 'yes' => 'はい', - 'no' => 'いいえ', - 'rule' => [ - 'type' => [ - 'reg' => '正規表現', - 'domain' => 'ドメイン', - 'ip' => 'IP', + 'sort_asc' => 'ソートする値が大きいほど高くなります。', + 'yes' => 'はい', + 'no' => 'いいえ', + 'rule' => [ + 'type' => [ + 'reg' => '正規表現', + 'domain' => 'ドメイン', + 'ip' => 'IP', 'protocol' => 'プロトコル', ], 'counts' => '合計 :num の監査規則', - 'title' => 'フィルターリスト', - 'group' => [ - 'type' => [ + 'title' => 'フィルターリスト', + 'group' => [ + 'type' => [ 'off' => '混乱させてください', - 'on' => '水平方向', + 'on' => '水平方向', ], - 'title' => 'ルールグループ', + 'title' => 'ルールグループ', 'counts' => '合計 :num のグループ', ], ], - 'role' => [ - 'name_hint' => 'ユニークな識別名(例::Administrator)', + 'role' => [ + 'name_hint' => 'ユニークな識別名(例::Administrator)', 'description_hint' => 'パネルの表示名(例::管理者)', - 'title' => '権限一覧', - 'permissions_all' => 'すべての権限', - 'counts' => '全 :num 権限', + 'title' => '権限一覧', + 'permissions_all' => 'すべての権限', + 'counts' => '全 :num 権限', ], - 'report' => [ - 'monthly_accounting' => 'Modding帳簿', + 'report' => [ + 'monthly_accounting' => 'Modding帳簿', 'annually_accounting' => '年造帳簿', 'historic_accounting' => '取引の帳簿', - 'current_month' => ' 今月 ', - 'last_month' => ' 先月', - 'current_year' => ' 累積 ', - 'last_year' => ' 過去 年 ', - 'hourly_traffic' => '通信量', - 'daily_traffic' => '1日あたりのトラフィック', - 'today' => ' ベン ', + 'current_month' => ' 今月 ', + 'last_month' => ' 先月', + 'current_year' => ' 累積 ', + 'last_year' => ' 過去 年 ', + 'hourly_traffic' => '通信量', + 'daily_traffic' => '1日あたりのトラフィック', + 'today' => ' ベン ', ], - 'permission' => [ - 'title' => '権限アクション一覧', + 'permission' => [ + 'title' => '権限アクション一覧', 'description_hint' => '説明にテキストを書いてください:【Aシステム】を編集します', - 'name_hint' => 'ルタート:admin.permission.create,update', - 'counts' => ':num 権限合計', + 'name_hint' => 'ルタート:admin.permission.create,update', + 'counts' => ':num 権限合計', ], - 'marketing' => [ - 'email' => [ - 'title' => '一括メール送信', + 'marketing' => [ + 'email' => [ + 'title' => '一括メール送信', 'group_send' => '一斉送信メール', - 'counts' => ':num 件のメッセージ', + 'counts' => ':num 件のメッセージ', ], - 'send_status' => '送信状態', - 'send_time' => '送信時間', + 'send_status' => '送信状態', + 'send_time' => '送信時間', 'error_message' => 'エラーメッセージ', - 'push' => [ - 'title' => 'プッシュメッセージ一覧', - 'send' => 'メールマガジン', + 'push' => [ + 'title' => 'プッシュメッセージ一覧', + 'send' => 'メールマガジン', 'counts' => ':num 件のプッシュメッセージ', ], ], - 'creating' => '追加しています...', - 'article' => [ - 'type' => [ - 'knowledge' => '記事', + 'creating' => '追加しています...', + 'article' => [ + 'type' => [ + 'knowledge' => '記事', 'announcement' => 'お知らせ', ], 'category_hint' => '同じフォルダーのカテゴリが同じカテゴリ内に分類されます。', - 'logo_hint' => '推奨サイズ:100x75', - 'title' => '記事一覧', - 'counts' => '総 :num', + 'logo_hint' => '推奨サイズ:100x75', + 'title' => '記事一覧', + 'counts' => '総 :num', ], - 'coupon' => [ - 'title' => 'カードチケット一覧', - 'name_hint' => '上部に描画', - 'sn_hint' => 'ユーザーがカード券を使用して発行されている券。空欄の場合、8桁のパスコードを使用します。', - 'type' => [ - 'voucher' => 'クーポン', + 'coupon' => [ + 'title' => 'カードチケット一覧', + 'name_hint' => '上部に描画', + 'sn_hint' => 'ユーザーがカード券を使用して発行されている券。空欄の場合、8桁のパスコードを使用します。', + 'type' => [ + 'voucher' => 'クーポン', 'discount' => 'クーポン', - 'charge' => 'クレジット伝票', + 'charge' => 'クレジット伝票', ], - 'type_hint' => 'クレジット:商品の入射額、割引:商品割引を意味し、:クレジットをチャージしています :', - 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ ::::num', - 'value_hint' => '分野が 1% - 99% ', - 'priority_hint' => 'このコードと同じ「クーポンコード」を使用している場合、条件を超えるハイウェイが優先されます。最高の長さは255です。', - 'minimum_hint' => '金額が :num 値を超えていれば、このクーポンを使用します;', - 'used_hint' => 'リクエストされた方はこのクーポンを使用して :num 回使用できます;', - 'levels_hint' => '使用者ランクは選択されたランクに該当します', - 'groups_hint' => '選択したユーザーグループを選択して、このクーポンを利用できます', - 'users_placeholder' => 'ユーザー ID を入力し、再びカートに戻る', - 'user_whitelist_hint' => 'このクーポンを利用する場合は、空欄のままにしてください。', - 'users_blacklist_hint' => 'このクーポンは使用することができません', - 'services_placeholder' => '商品IDを入力し、再び車に戻ってください。', + 'type_hint' => 'クレジット:商品の入射額、割引:商品割引を意味し、:クレジットをチャージしています :', + 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ ::::num', + 'value_hint' => '分野が 1% - 99% ', + 'priority_hint' => 'このコードと同じ「クーポンコード」を使用している場合、条件を超えるハイウェイが優先されます。最高の長さは255です。', + 'minimum_hint' => '金額が :num 値を超えていれば、このクーポンを使用します;', + 'used_hint' => 'リクエストされた方はこのクーポンを使用して :num 回使用できます;', + 'levels_hint' => '使用者ランクは選択されたランクに該当します', + 'groups_hint' => '選択したユーザーグループを選択して、このクーポンを利用できます', + 'users_placeholder' => 'ユーザー ID を入力し、再びカートに戻る', + 'user_whitelist_hint' => 'このクーポンを利用する場合は、空欄のままにしてください。', + 'users_blacklist_hint' => 'このクーポンは使用することができません', + 'services_placeholder' => '商品IDを入力し、再び車に戻ってください。', 'services_whitelist_hint' => '該当する顧客がこのクーポンを利用する場合は、空のままにします。', 'services_blacklist_hint' => '関連商品は使用不可。 空の場合は、この条件で使用しないでください。', - 'newbie' => [ + 'newbie' => [ 'first_discount' => '初めて任意の券', - 'first_order' => 'プライマリ', - 'created_days' => 'ビルダー', + 'first_order' => 'プライマリ', + 'created_days' => 'ビルダー', ], - 'created_days_hint' => '視覚障がい者 :days 日', - 'limit_hint' => '本項のサブグループは と、 関係を結びます。独自のものを使ってみてください。', - 'info_title' => 'カードチケット情報', - 'counts' => '合計 :num のクーポン', - 'discount' => 'オフ', - 'export_title' => 'カード券のエクスポート', - 'single_use' => '一回', + 'created_days_hint' => '視覚障がい者 :days 日', + 'limit_hint' => '本項のサブグループは と、 関係を結びます。独自のものを使ってみてください。', + 'info_title' => 'カードチケット情報', + 'counts' => '合計 :num のクーポン', + 'discount' => 'オフ', + 'export_title' => 'カード券のエクスポート', + 'single_use' => '一回', ], - 'times' => 'ワンオフ', - 'massive_export' => '一括エクスポート', - 'system_generate' => 'システム生成', - 'aff' => [ - 'rebate_title' => '商談の回復', - 'counts' => '合計で :num', - 'title' => '出金額一覧', - 'apply_counts' => '合計で :num', - 'referral' => 'ボーナス実績', - 'commission_title' => '出金申請の詳細', + 'times' => 'ワンオフ', + 'massive_export' => '一括エクスポート', + 'system_generate' => 'システム生成', + 'aff' => [ + 'rebate_title' => '商談の回復', + 'counts' => '合計で :num', + 'title' => '出金額一覧', + 'apply_counts' => '合計で :num', + 'referral' => 'ボーナス実績', + 'commission_title' => '出金申請の詳細', 'commission_counts' => 'この申込で :num 関与', ], - 'setting' => [ - 'common' => [ - 'title' => '一般的な設定', - 'set_default' => 'デフォルトに設定', + 'setting' => [ + 'common' => [ + 'title' => '一般的な設定', + 'set_default' => 'デフォルトに設定', 'connect_nodes' => '関連ノード数', ], - 'email' => [ - 'title' => '電子メールフィルターリスト (メルマガ購読用のサフィックスをブロックします', - 'tail' => 'Eメールサフィックス', - 'rule' => 'ルール', - 'black' => 'ブラックリスト', - 'white' => 'ホワイトリスト', + 'email' => [ + 'title' => '電子メールフィルターリスト (メルマガ購読用のサフィックスをブロックします', + 'tail' => 'Eメールサフィックス', + 'rule' => 'ルール', + 'black' => 'ブラックリスト', + 'white' => 'ホワイトリスト', 'tail_placeholder' => 'メールアドレスを記入してください。', ], - 'system' => [ - 'title' => 'システム設定', - 'web' => 'サイト全体', - 'account' => 'アカウント設定', - 'node' => 'ノード設定', - 'extend' => '拡張機能機能', - 'check_in' => 'サインインシステム', + 'system' => [ + 'title' => 'システム設定', + 'web' => 'サイト全体', + 'account' => 'アカウント設定', + 'node' => 'ノード設定', + 'extend' => '拡張機能機能', + 'check_in' => 'サインインシステム', 'promotion' => 'プロモーションシステム', - 'notify' => 'システム通知', - 'auto_job' => 'Autoタスク', - 'other' => 'LOGO|サポート|統計情報', - 'payment' => '決済システム', - 'menu' => 'メニュー', + 'notify' => 'システム通知', + 'auto_job' => 'Autoタスク', + 'other' => 'LOGO|サポート|統計情報', + 'payment' => '決済システム', + 'menu' => 'メニュー', ], 'no_permission' => 'パラメーターを変更する権限がありません。', ], - 'system' => [ - 'account_expire_notification' => 'アカウントの期限が過ぎているお知らせ', - 'active_times' => '発動したアカウント回数', - 'admin_invite_days' => '管理者-招待コード有効期限', - 'aff_salt' => 'ユーザ情報のテキスト化への招待', - 'alipay_qrcode' => 'PayPalQRコードを支払い', - 'AppStore_id' => 'Apple アカウント', - 'AppStore_password' => 'Appleのパスワード', - 'auto_release_port' => 'ポートリメカニクス', - 'bark_key' => 'Bark のデバイス番号', - 'captcha_key' => '認証キー', - 'captcha_secret' => 'シークレットキーID', - 'codepay_id' => '決済ID', - 'codepay_key' => '通信キー', - 'codepay_url' => 'URLをリクエスト', - 'data_anomaly_notification' => 'トラフィックの異常な通知', - 'data_exhaust_notification' => 'トラフィック使用時の通知', - 'ddns_key' => 'DNSサービス商Key', - 'ddns_mode' => 'DNSモード', - 'ddns_secret' => 'DNSサービスSecret', - 'default_days' => '初期有効期間', - 'default_traffic' => '初期データ', - 'detection_check_times' => '停止通知をブロックする', - 'dingTalk_access_token' => 'Token をピン留めしてカスタムアクセストークン', - 'dingTalk_secret' => 'カスタムロボットを釘付けにする', - 'epay_key' => 'マーチャントキー', - 'epay_mch_id' => 'マーチャント ID', - 'epay_url' => 'インターフェースの対アドレス', - 'expire_days' => '有効期限警告のしきい値', - 'f2fpay_app_id' => 'アプリID', - 'f2fpay_private_key' => 'アプリの秘密鍵', - 'f2fpay_public_key' => 'PayPal公開鍵', - 'forbid_mode' => 'アクセス禁止モード', - 'invite_num' => '招待状コードを生成する', - 'is_activate_account' => 'アカウントを認証', - 'is_AliPay' => 'PayPal決済', - 'is_ban_status' => '有効期限付きオーバー', - 'is_captcha' => 'Captcha モード', - 'is_checkin' => 'ログインして、データを追加します', - 'is_clear_log' => 'ログの自動消去', - 'is_custom_subscribe' => 'プレミアムサブスクリプション', - 'is_email_filtering' => 'Eメールフィルター メカニクス', - 'is_forbid_robot' => 'Botをブロック', - 'is_free_code' => '無料招待コード', - 'is_invite_register' => 'サインアップを招待', - 'is_otherPay' => 'スペシャル支払い', - 'is_QQPay' => 'QQウォレット', - 'is_rand_port' => 'ランダムポート', - 'is_register' => 'ユーザー登録', - 'is_subscribe_ban' => '例外自動BAN', - 'is_traffic_ban' => '例外自動トークン', - 'is_WeChatPay' => 'WeChat 支払う', - 'iYuu_token' => 'IYUU トークン', - 'maintenance_content' => '紹介内容を保持', - 'maintenance_mode' => 'メンテナンスモード', - 'maintenance_time' => 'メンテナンス終了時間', - 'min_port' => 'ポート範囲', - 'min_rand_traffic' => 'トラフィックの範囲', - 'node_blocked_notification' => 'ノードのブロック通知', - 'node_daily_notification' => 'ノード使用レポート', - 'node_offline_notification' => 'ノードオフラインの通知', - 'oauth_path' => 'サードパーティーログインプラットフォーム', - 'offline_check_times' => 'オフライン通知回数', - 'password_reset_notification' => 'パスワードをリセット', - 'paybeaver_app_id' => 'アプリID', - 'paybeaver_app_secret' => 'App Secret', - 'payjs_key' => '通信キー', - 'payjs_mch_id' => 'コメントの入力', - 'payment_confirm_notification' => '手動で支払いの確認通知', + 'system' => [ + 'account_expire_notification' => 'アカウントの期限が過ぎているお知らせ', + 'active_times' => '発動したアカウント回数', + 'admin_invite_days' => '管理者-招待コード有効期限', + 'aff_salt' => 'ユーザ情報のテキスト化への招待', + 'alipay_qrcode' => 'PayPalQRコードを支払い', + 'AppStore_id' => 'Apple アカウント', + 'AppStore_password' => 'Appleのパスワード', + 'auto_release_port' => 'ポートリメカニクス', + 'bark_key' => 'Bark のデバイス番号', + 'captcha_key' => '認証キー', + 'captcha_secret' => 'シークレットキーID', + 'codepay_id' => '決済ID', + 'codepay_key' => '通信キー', + 'codepay_url' => 'URLをリクエスト', + 'data_anomaly_notification' => 'トラフィックの異常な通知', + 'data_exhaust_notification' => 'トラフィック使用時の通知', + 'ddns_key' => 'DNSサービス商Key', + 'ddns_mode' => 'DNSモード', + 'ddns_secret' => 'DNSサービスSecret', + 'default_days' => '初期有効期間', + 'default_traffic' => '初期データ', + 'detection_check_times' => '停止通知をブロックする', + 'dingTalk_access_token' => 'Token をピン留めしてカスタムアクセストークン', + 'dingTalk_secret' => 'カスタムロボットを釘付けにする', + 'epay_key' => 'マーチャントキー', + 'epay_mch_id' => 'マーチャント ID', + 'epay_url' => 'インターフェースの対アドレス', + 'expire_days' => '有効期限警告のしきい値', + 'f2fpay_app_id' => 'アプリID', + 'f2fpay_private_key' => 'アプリの秘密鍵', + 'f2fpay_public_key' => 'PayPal公開鍵', + 'forbid_mode' => 'アクセス禁止モード', + 'invite_num' => '招待状コードを生成する', + 'is_activate_account' => 'アカウントを認証', + 'is_AliPay' => 'PayPal決済', + 'is_ban_status' => '有効期限付きオーバー', + 'is_captcha' => 'Captcha モード', + 'is_checkin' => 'ログインして、データを追加します', + 'is_clear_log' => 'ログの自動消去', + 'is_custom_subscribe' => 'プレミアムサブスクリプション', + 'is_email_filtering' => 'Eメールフィルター メカニクス', + 'is_forbid_robot' => 'Botをブロック', + 'is_free_code' => '無料招待コード', + 'is_invite_register' => 'サインアップを招待', + 'is_otherPay' => 'スペシャル支払い', + 'is_QQPay' => 'QQウォレット', + 'is_rand_port' => 'ランダムポート', + 'is_register' => 'ユーザー登録', + 'is_subscribe_ban' => '例外自動BAN', + 'is_traffic_ban' => '例外自動トークン', + 'is_WeChatPay' => 'WeChat 支払う', + 'iYuu_token' => 'IYUU トークン', + 'maintenance_content' => '紹介内容を保持', + 'maintenance_mode' => 'メンテナンスモード', + 'maintenance_time' => 'メンテナンス終了時間', + 'min_port' => 'ポート範囲', + 'min_rand_traffic' => 'トラフィックの範囲', + 'node_blocked_notification' => 'ノードのブロック通知', + 'node_daily_notification' => 'ノード使用レポート', + 'node_offline_notification' => 'ノードオフラインの通知', + 'oauth_path' => 'サードパーティーログインプラットフォーム', + 'offline_check_times' => 'オフライン通知回数', + 'password_reset_notification' => 'パスワードをリセット', + 'paybeaver_app_id' => 'アプリID', + 'paybeaver_app_secret' => 'App Secret', + 'payjs_key' => '通信キー', + 'payjs_mch_id' => 'コメントの入力', + 'payment_confirm_notification' => '手動で支払いの確認通知', 'payment_received_notification' => '支払が正常に通知します', - 'paypal_app_id' => 'アプリID', - 'paypal_certificate' => '証明書', - 'paypal_password' => 'API パスワード', - 'paypal_secret' => '署名', - 'paypal_username' => 'API ユーザー名', - 'pushDeer_key' => 'PushDeer キー', - 'pushplus_token' => 'PushPlus Toトークン', - 'rand_subscribe' => 'ランダムサブスクリプション', - 'redirect_url' => 'リダイレクト先アドレス', - 'referral_money' => 'キャッシュアウトの制限', - 'referral_percent' => 'リパルサー比率', - 'referral_status' => 'プロモーション機能', - 'referral_traffic' => '登録通信速度', - 'referral_type' => '還元モード', - 'register_ip_limit' => '同IPでの登録制限', - 'reset_password_times' => 'パスワードリセット回数', - 'reset_traffic' => 'データの自動リセット', - 'server_chan_key' => 'ServerChan SKEY', - 'standard_currency' => '現在の通貨', - 'stripe_public_key' => 'Public キー', - 'stripe_secret_key' => '秘密キー', - 'stripe_signing_secret' => 'WebHook Signing secret', - 'subject_name' => '商品コード名', - 'subscribe_ban_times' => 'フィード閾値 + 'paypal_app_id' => 'アプリID', + 'paypal_certificate' => '証明書', + 'paypal_password' => 'API パスワード', + 'paypal_secret' => '署名', + 'paypal_username' => 'API ユーザー名', + 'pushDeer_key' => 'PushDeer キー', + 'pushplus_token' => 'PushPlus Toトークン', + 'rand_subscribe' => 'ランダムサブスクリプション', + 'redirect_url' => 'リダイレクト先アドレス', + 'referral_money' => 'キャッシュアウトの制限', + 'referral_percent' => 'リパルサー比率', + 'referral_status' => 'プロモーション機能', + 'referral_traffic' => '登録通信速度', + 'referral_type' => '還元モード', + 'register_ip_limit' => '同IPでの登録制限', + 'reset_password_times' => 'パスワードリセット回数', + 'reset_traffic' => 'データの自動リセット', + 'server_chan_key' => 'ServerChan SKEY', + 'standard_currency' => '現在の通貨', + 'stripe_public_key' => 'Public キー', + 'stripe_secret_key' => '秘密キー', + 'stripe_signing_secret' => 'WebHook Signing secret', + 'subject_name' => '商品コード名', + 'subscribe_ban_times' => 'フィード閾値 ', - 'subscribe_domain' => 'ノード購読アドレス', - 'subscribe_max' => '購読しているノード数', - 'telegram_token' => 'Telegram トークン', - 'tg_chat_token' => 'TGソースをトークン', - 'theadpay_key' => '業者のキー', - 'theadpay_mchid' => 'マーチャント ID', - 'theadpay_url' => 'インターフェースアドレス', - 'ticket_closed_notification' => 'クローズした課題', - 'ticket_created_notification' => '新しいチケット通知', - 'ticket_replied_notification' => 'チケット返信のお知らせ', - 'traffic_ban_time' => 'スヌーズの長さ', - 'traffic_ban_value' => 'データ異常のしきい値', - 'traffic_limit_time' => 'インターバル', - 'traffic_warning_percent' => 'トラフィック警告閾値', - 'trojan_license' => 'Trojanライセンス', - 'username_type' => 'アカウントの種類', - 'user_invite_days' => 'ユーザー招待コード有効期限', - 'v2ray_license' => 'V2 Ray認証', - 'v2ray_tls_provider' => 'V2Ray TLSの設定', - 'webmaster_email' => '管理者の電子メール', - 'website_analytics' => '統計コード', - 'website_callback_url' => '一般的な支払いコールバックアドレス', - 'website_customer_service' => 'サポート コード', - 'website_home_logo' => 'ホームページのロゴ', - 'website_logo' => '拠点情報', - 'website_name' => 'サイト名', - 'website_security_code' => 'サイトのセキュリティコード', - 'website_url' => 'Webサイトアドレス', - 'web_api_url' => '認証/バックエンドへのアクセスドメイン', - 'wechat_aid' => 'WeChat企業アプリID', - 'wechat_cid' => 'WeChat企業ID', - 'wechat_encodingAESKey' => 'WeekoldはEncodingAESKey', - 'wechat_qrcode' => 'やみのQRコード', - 'wechat_secret' => 'WeChat アプリキー', - 'wechat_token' => 'WeChat AppEN', - 'hint' => [ - 'account_expire_notification' => 'ユーザーに通知して締め切られます', - 'active_times' => '24時間、メールからアカウントを使用した回数', - 'admin_invite_days' => '管理者により招待コードを生成する有効期間', - 'aff_salt' => '空のときは招待リンクでユーザーIDが表示される。英語の/番号の入力欄を入力すると、ユーザーのリンクIDを暗号化できます', - 'AppStore_id' => 'iOSソフトウェアセットアップ用の Apple アカウント', - 'AppStore_password' => 'iOSソフトウェア設定チュートリアルでAppleのパスワード', - 'auto_release_port' => '禁止/期限 '.config('tasks.release_port').' とのアカウントポートで自動解放', - 'bark_key' => 'iOSデバイスへのプッシュメッセージは、iOSデバイス用のBarkアプリのURLを用意する必要があります。頼後の長い文字列は、返事が必要です。', - 'captcha_key' => '設定ガイドを見る。', - 'data_anomaly_notification' => '1時間以内にトラフィックが異常閾値を超えたことを通知します', - 'data_exhaust_notification' => 'ユーザのトラフィックがまもなく切れます', - 'ddns_key' => "設定ガイドを見る。", - 'ddns_mode' => 'ドメイン名、「ドメイン、ipv4、ipv6」を追加・削除した場合、適切なDNSサービスに自動アップデートする', - 'default_days' => 'ユーザーの登録有効期限は、当日の期限までに有効です。', - 'default_traffic' => '登録時にデフォルトで有効になるデータ', - 'detection_check_times' => 'N回の自動下線通知プラグイン。0/空白の場合は制限なし。12以下であれば無視。', - 'dingTalk_access_token' => 'ピンチマニュアルを読んでステップを確認できます。', - 'dingTalk_secret' => '押すとロボットが起動します![加签]それは必須アイテムです!', - 'expire_days' => '【アカウントの期限切れ通知】のしきい値を設定して、毎日ユーザーに通知します', - 'f2fpay_app_id' => 'パイ:APPID', - 'f2fpay_private_key' => 'キー生成時のコンフィグキーを生成、コンフィグキーを生成する', - 'f2fpay_public_key' => '公開鍵はアプリではありません!', - 'forbid_mode' => 'IPペア設定された地域では、遮断されることがある国によって通常のアクセスを防ぎます。', - 'invite_num' => 'ユーザーが生成された招待コードです。', - 'is_activate_account' => 'ユーザアカウントを有効にするにはメールによる認証が必要です。', - 'is_ban_status' => '(注意) アカウントのすべてのデータをブロックすると、アカウントのすべてのアカウントをブロックし、ユーザーが 既定のユーザーをBANすることになります。', - 'is_captcha' => '有効にすると、ログイン/新規に検証コードの提示が必要になります。', - 'is_checkin' => 'ログイン時にトラフィックをランダムに表示', - 'is_clear_log' => '(推奨) 有効な場合、必要のないログを消去する', - 'is_custom_subscribe' => '有効にすると、サブスクリプション情報は、上部に期限切れの時間、および(個々のクライアントのみ対応)', - 'is_email_filtering' => 'ブラックリスト: ホワイトリスト:ユーザーはホワイトリストに登録できる個別のブラックリストに登録できます。ホワイトリスト:ユーザーはホワイトリストに登録された拡張子のみを使用します', - 'is_forbid_robot' => 'ロボット、爬虫類、エージェントによるサイトでは、404エラーをスローします', - 'is_free_code' => 'キャンセル後の無料招待コードを表示できません', - 'is_rand_port' => '登録・ユーザー追加でランダムなポートの生成', - 'is_register' => '閉じると登録できません', - 'is_subscribe_ban' => 'ユーザ購読者登録ページが、しきい値を超えた場合、自動的にブロックされます', - 'is_traffic_ban' => '1時間に予期しないしきい値を超えると、プロキシを無効にするのみになりました', - 'iYuu_token' => 'エセックスによる飛行を有効にするには, アカウントへの必須入力が必要です (IYUUトークンをリクエストしてください', - 'maintenance_content' => 'カスタムメッセージ', - 'maintenance_mode' => "ユーザーがメンテナンスUIに移動する|マネージャーでサインインする :url", - 'maintenance_time' => 'メンテナンス表示カウントダウン', - 'min_port' => 'ポートの範囲は:1000 - 65535', - 'node_blocked_notification' => '1時間後にノードをブロックしたり、管理者に警告する', - 'node_daily_notification' => 'ノードの砂漠利用開始日', - 'node_offline_notification' => '10分ごとにオフラインノードを検出し、管理者に通知する', - 'oauth_path' => '.ENVでセットアップを編集してください。ここでマーケットプレイスをオンにします', - 'offline_check_times' => '24時間以内に通知しない', - 'password_reset_notification' => 'ユーザーがパスワードをリセットするのを有効にする', - 'paybeaver_app_id' => 'マーキュン ・ センター -> デベロッパー ID', - 'paybeaver_app_secret' => 'マーキュレーター -> 開発者の App Secret', - 'payjs_mch_id' => 'ここに情報の取得', - 'payment_confirm_notification' => 'ユーザーが支払いをまとめて処理する場合、管理者がユーザーに通知します', + 'subscribe_domain' => 'ノード購読アドレス', + 'subscribe_max' => '購読しているノード数', + 'telegram_token' => 'Telegram トークン', + 'tg_chat_token' => 'TGソースをトークン', + 'theadpay_key' => '業者のキー', + 'theadpay_mchid' => 'マーチャント ID', + 'theadpay_url' => 'インターフェースアドレス', + 'ticket_closed_notification' => 'クローズした課題', + 'ticket_created_notification' => '新しいチケット通知', + 'ticket_replied_notification' => 'チケット返信のお知らせ', + 'traffic_ban_time' => 'スヌーズの長さ', + 'traffic_ban_value' => 'データ異常のしきい値', + 'traffic_limit_time' => 'インターバル', + 'traffic_warning_percent' => 'トラフィック警告閾値', + 'trojan_license' => 'Trojanライセンス', + 'username_type' => 'アカウントの種類', + 'user_invite_days' => 'ユーザー招待コード有効期限', + 'v2ray_license' => 'V2 Ray認証', + 'v2ray_tls_provider' => 'V2Ray TLSの設定', + 'webmaster_email' => '管理者の電子メール', + 'website_analytics' => '統計コード', + 'website_callback_url' => '一般的な支払いコールバックアドレス', + 'website_customer_service' => 'サポート コード', + 'website_home_logo' => 'ホームページのロゴ', + 'website_logo' => '拠点情報', + 'website_name' => 'サイト名', + 'website_security_code' => 'サイトのセキュリティコード', + 'website_url' => 'Webサイトアドレス', + 'web_api_url' => '認証/バックエンドへのアクセスドメイン', + 'wechat_aid' => 'WeChat企業アプリID', + 'wechat_cid' => 'WeChat企業ID', + 'wechat_encodingAESKey' => 'WeekoldはEncodingAESKey', + 'wechat_qrcode' => 'やみのQRコード', + 'wechat_secret' => 'WeChat アプリキー', + 'wechat_token' => 'WeChat AppEN', + 'hint' => [ + 'account_expire_notification' => 'ユーザーに通知して締め切られます', + 'active_times' => '24時間、メールからアカウントを使用した回数', + 'admin_invite_days' => '管理者により招待コードを生成する有効期間', + 'aff_salt' => '空のときは招待リンクでユーザーIDが表示される。英語の/番号の入力欄を入力すると、ユーザーのリンクIDを暗号化できます', + 'AppStore_id' => 'iOSソフトウェアセットアップ用の Apple アカウント', + 'AppStore_password' => 'iOSソフトウェア設定チュートリアルでAppleのパスワード', + 'auto_release_port' => '禁止/期限 '.config('tasks.release_port').' とのアカウントポートで自動解放', + 'bark_key' => 'iOSデバイスへのプッシュメッセージは、iOSデバイス用のBarkアプリのURLを用意する必要があります。頼後の長い文字列は、返事が必要です。', + 'captcha_key' => '設定ガイドを見る。', + 'data_anomaly_notification' => '1時間以内にトラフィックが異常閾値を超えたことを通知します', + 'data_exhaust_notification' => 'ユーザのトラフィックがまもなく切れます', + 'ddns_key' => "設定ガイドを見る。", + 'ddns_mode' => 'ドメイン名、「ドメイン、ipv4、ipv6」を追加・削除した場合、適切なDNSサービスに自動アップデートする', + 'default_days' => 'ユーザーの登録有効期限は、当日の期限までに有効です。', + 'default_traffic' => '登録時にデフォルトで有効になるデータ', + 'detection_check_times' => 'N回の自動下線通知プラグイン。0/空白の場合は制限なし。12以下であれば無視。', + 'dingTalk_access_token' => 'ピンチマニュアルを読んでステップを確認できます。', + 'dingTalk_secret' => '押すとロボットが起動します![加签]それは必須アイテムです!', + 'expire_days' => '【アカウントの期限切れ通知】のしきい値を設定して、毎日ユーザーに通知します', + 'f2fpay_app_id' => 'パイ:APPID', + 'f2fpay_private_key' => 'キー生成時のコンフィグキーを生成、コンフィグキーを生成する', + 'f2fpay_public_key' => '公開鍵はアプリではありません!', + 'forbid_mode' => 'IPペア設定された地域では、遮断されることがある国によって通常のアクセスを防ぎます。', + 'invite_num' => 'ユーザーが生成された招待コードです。', + 'is_activate_account' => 'ユーザアカウントを有効にするにはメールによる認証が必要です。', + 'is_ban_status' => '(注意) アカウントのすべてのデータをブロックすると、アカウントのすべてのアカウントをブロックし、ユーザーが 既定のユーザーをBANすることになります。', + 'is_captcha' => '有効にすると、ログイン/新規に検証コードの提示が必要になります。', + 'is_checkin' => 'ログイン時にトラフィックをランダムに表示', + 'is_clear_log' => '(推奨) 有効な場合、必要のないログを消去する', + 'is_custom_subscribe' => '有効にすると、サブスクリプション情報は、上部に期限切れの時間、および(個々のクライアントのみ対応)', + 'is_email_filtering' => 'ブラックリスト: ホワイトリスト:ユーザーはホワイトリストに登録できる個別のブラックリストに登録できます。ホワイトリスト:ユーザーはホワイトリストに登録された拡張子のみを使用します', + 'is_forbid_robot' => 'ロボット、爬虫類、エージェントによるサイトでは、404エラーをスローします', + 'is_free_code' => 'キャンセル後の無料招待コードを表示できません', + 'is_rand_port' => '登録・ユーザー追加でランダムなポートの生成', + 'is_register' => '閉じると登録できません', + 'is_subscribe_ban' => 'ユーザ購読者登録ページが、しきい値を超えた場合、自動的にブロックされます', + 'is_traffic_ban' => '1時間に予期しないしきい値を超えると、プロキシを無効にするのみになりました', + 'iYuu_token' => 'エセックスによる飛行を有効にするには, アカウントへの必須入力が必要です (IYUUトークンをリクエストしてください', + 'maintenance_content' => 'カスタムメッセージ', + 'maintenance_mode' => "ユーザーがメンテナンスUIに移動する|マネージャーでサインインする :url", + 'maintenance_time' => 'メンテナンス表示カウントダウン', + 'min_port' => 'ポートの範囲は:1000 - 65535', + 'node_blocked_notification' => '1時間後にノードをブロックしたり、管理者に警告する', + 'node_daily_notification' => 'ノードの砂漠利用開始日', + 'node_offline_notification' => '10分ごとにオフラインノードを検出し、管理者に通知する', + 'oauth_path' => '.ENVでセットアップを編集してください。ここでマーケットプレイスをオンにします', + 'offline_check_times' => '24時間以内に通知しない', + 'password_reset_notification' => 'ユーザーがパスワードをリセットするのを有効にする', + 'paybeaver_app_id' => 'マーキュン ・ センター -> デベロッパー ID', + 'paybeaver_app_secret' => 'マーキュレーター -> 開発者の App Secret', + 'payjs_mch_id' => 'ここに情報の取得', + 'payment_confirm_notification' => 'ユーザーが支払いをまとめて処理する場合、管理者がユーザーに通知します', 'payment_received_notification' => '注文を確実に行なう場合、注文を通知します', - 'pushDeer_key' => 'PushDeerを有効にするにはここで必要な値が必要です ( 'PushDeerを有効にするにはここで必要な値が必要です (Push Key)', - 'pushplus_token' => 'PushPlusを有効にしてください。有効にするにはアカウントのToken)', - 'rand_subscribe' => '有効にすると、と、サブスクリプション時にランダムなノードの情報を返します。そうでなければノードによってソートされます。', - 'redirect_url' => '監査ルールがトリガーされた際にリクエストをブロックし、アドレスへリダイレクトします', - 'referral_money' => '応募するには上限額', - 'referral_percent' => 'これはプロモーションリンクに登録されているアカウントのすべての消費者に比例して満足することができます。', - 'referral_status' => 'ユーザーの招待は閉じられませんが、これが通常の招待への報酬には影響しません', - 'referral_traffic' => '登録された方向けプロモーションリンクや招待状への登録には対応する量が表示されます。', - 'referral_type' => '新しいスキーマ計算の切り替え時に旧データは変更されません。', - 'register_ip_limit' => 'このIPは、24時間、登録の許容数です。0か空のままにします。', - 'reset_password_times' => '24時間以内にパスワードリセットが行われます', - 'reset_traffic' => 'ユーザーは購入予定日に利用可能なデータを自動的にリセットします', - 'server_chan_key' => 'サーバーChanonを有効にする必要があります(SKEYに変更してください)', - 'standard_currency' => 'ウェブサイトに基本通貨を含むデフォルト通貨', - 'subject_name' => 'チャンネル登録されている商品タイトルを表示する', - 'subscribe_ban_times' => '24時間以内にサブスクリプション法が要求できる回数制限', - 'subscribe_domain' => '(優先)パネルドメインがDNSに投毒された後にサブスクリプションが無効になります。http://またはhttps://を使用する必要があります', - 'subscribe_max' => 'クライアントサブスクリプションを取得中にノードを 0/空白にしたときにすべてのノードを返します。', - 'telegram_token' => 'ボットがTOKEN を得る @BotFather 候補者を探します', - 'tg_chat_token' => 'TGソースを有効にするには英数字(トークン入力してください)', - 'ticket_closed_notification' => 'チケットクローズしたユーザ通知', - 'ticket_created_notification' => '新しいチケット通知管理/ユーザーにより作成された新しいチケット', - 'ticket_replied_notification' => 'チケット返信に関する通知', - 'traffic_ban_time' => 'トラフィックの増加によりユーザーの禁止期間がブロックされるまでの時間。期限が終了すると自動的にBANされます。', - 'traffic_ban_value' => '1時間を押すと自動で発行されます。', - 'traffic_limit_time' => '再び署名できるまでの時間', - 'traffic_warning_percent' => '【トラフィック不足通知】のしきい値を設定して、毎日ユーザーに通知します', - 'username_type' => 'ユーザアカウントのタイプを標準設定します。既定でメールアドレスが設定されます。', - 'user_invite_days' => 'ユーザー自身が招待状を生成するための有効期間', - 'v2ray_tls_provider' => 'バックエンドの自動署名/読み込んだTLS証明書の有効性は、(ノードの設定優先度は、この場所より優先されている)', - 'webmaster_email' => 'エラーの場合は、管理者のメールアドレスを入力します。', - 'website_analytics' => 'JS の統計情報', - 'website_callback_url' => 'サイトドメインがDNSに投毒された際に支払われたコールバックをブロックしないため、http://またはhttps:// が必要になります。', - 'website_customer_service' => 'JSを支援する', - 'website_name' => 'メール作成時に通知', - 'website_security_code' => '空でない場合はアクセスするにはセキュリティコードを入力する必要があります', - 'website_url' => 'パスワードのリセット、オンライン決済を行うには', - 'web_api_url' => '例:https://demo.proxypanel.cf', - 'wechat_aid' => 'アプリ管理からアプリケーションを - AgentId で作成してください', - 'wechat_cid' => '私の企業から企業IDを入手', - 'wechat_encodingAESKey' => 'アプリマネージャー - アプリ->API受信->EncodingAESKey', - 'wechat_secret' => 'アプリによるSecret(閲覧するにはエンタープライズ版をダウンロードする必要あり)あります', - 'wechat_token' => 'アプリマネージャー - アプリ->APIの受信->TOKEN、URLを設定::url', + 'pushplus_token' => 'PushPlusを有効にしてください。有効にするにはアカウントのToken)', + 'rand_subscribe' => '有効にすると、と、サブスクリプション時にランダムなノードの情報を返します。そうでなければノードによってソートされます。', + 'redirect_url' => '監査ルールがトリガーされた際にリクエストをブロックし、アドレスへリダイレクトします', + 'referral_money' => '応募するには上限額', + 'referral_percent' => 'これはプロモーションリンクに登録されているアカウントのすべての消費者に比例して満足することができます。', + 'referral_status' => 'ユーザーの招待は閉じられませんが、これが通常の招待への報酬には影響しません', + 'referral_traffic' => '登録された方向けプロモーションリンクや招待状への登録には対応する量が表示されます。', + 'referral_type' => '新しいスキーマ計算の切り替え時に旧データは変更されません。', + 'register_ip_limit' => 'このIPは、24時間、登録の許容数です。0か空のままにします。', + 'reset_password_times' => '24時間以内にパスワードリセットが行われます', + 'reset_traffic' => 'ユーザーは購入予定日に利用可能なデータを自動的にリセットします', + 'server_chan_key' => 'サーバーChanonを有効にする必要があります(SKEYに変更してください)', + 'standard_currency' => 'ウェブサイトに基本通貨を含むデフォルト通貨', + 'subject_name' => 'チャンネル登録されている商品タイトルを表示する', + 'subscribe_ban_times' => '24時間以内にサブスクリプション法が要求できる回数制限', + 'subscribe_domain' => '(優先)パネルドメインがDNSに投毒された後にサブスクリプションが無効になります。http://またはhttps://を使用する必要があります', + 'subscribe_max' => 'クライアントサブスクリプションを取得中にノードを 0/空白にしたときにすべてのノードを返します。', + 'telegram_token' => 'ボットがTOKEN を得る @BotFather 候補者を探します', + 'tg_chat_token' => 'TGソースを有効にするには英数字(トークン入力してください)', + 'ticket_closed_notification' => 'チケットクローズしたユーザ通知', + 'ticket_created_notification' => '新しいチケット通知管理/ユーザーにより作成された新しいチケット', + 'ticket_replied_notification' => 'チケット返信に関する通知', + 'traffic_ban_time' => 'トラフィックの増加によりユーザーの禁止期間がブロックされるまでの時間。期限が終了すると自動的にBANされます。', + 'traffic_ban_value' => '1時間を押すと自動で発行されます。', + 'traffic_limit_time' => '再び署名できるまでの時間', + 'traffic_warning_percent' => '【トラフィック不足通知】のしきい値を設定して、毎日ユーザーに通知します', + 'username_type' => 'ユーザアカウントのタイプを標準設定します。既定でメールアドレスが設定されます。', + 'user_invite_days' => 'ユーザー自身が招待状を生成するための有効期間', + 'v2ray_tls_provider' => 'バックエンドの自動署名/読み込んだTLS証明書の有効性は、(ノードの設定優先度は、この場所より優先されている)', + 'webmaster_email' => 'エラーの場合は、管理者のメールアドレスを入力します。', + 'website_analytics' => 'JS の統計情報', + 'website_callback_url' => 'サイトドメインがDNSに投毒された際に支払われたコールバックをブロックしないため、http://またはhttps:// が必要になります。', + 'website_customer_service' => 'JSを支援する', + 'website_name' => 'メール作成時に通知', + 'website_security_code' => '空でない場合はアクセスするにはセキュリティコードを入力する必要があります', + 'website_url' => 'パスワードのリセット、オンライン決済を行うには', + 'web_api_url' => '例:https://demo.proxypanel.cf', + 'wechat_aid' => 'アプリ管理からアプリケーションを - AgentId で作成してください', + 'wechat_cid' => '私の企業から企業IDを入手', + 'wechat_encodingAESKey' => 'アプリマネージャー - アプリ->API受信->EncodingAESKey', + 'wechat_secret' => 'アプリによるSecret(閲覧するにはエンタープライズ版をダウンロードする必要あり)あります', + 'wechat_token' => 'アプリマネージャー - アプリ->APIの受信->TOKEN、URLを設定::url', ], - 'placeholder' => [ - 'default_url' => 'デフォルトは :url', - 'server_chan_key' => 'サーバーChant の「SCKEY-」ボタンを押す', - 'pushDeer_key' => 'プッシュ型付きのPush Key ->更新をタップ', - 'iYuu_token' => 'エリオットを飛ばす IYUU のトークン->更新をタップ', - 'bark_key' => 'あなたのデバイスを Bark でどうぞ > 更新してください', - 'telegram_token' => 'Telegramの Token を押してください-> 更新します。', - 'pushplus_token' => 'ServerChanをリクエスト', + 'placeholder' => [ + 'default_url' => 'デフォルトは :url', + 'server_chan_key' => 'サーバーChant の「SCKEY-」ボタンを押す', + 'pushDeer_key' => 'プッシュ型付きのPush Key ->更新をタップ', + 'iYuu_token' => 'エリオットを飛ばす IYUU のトークン->更新をタップ', + 'bark_key' => 'あなたのデバイスを Bark でどうぞ > 更新してください', + 'telegram_token' => 'Telegramの Token を押してください-> 更新します。', + 'pushplus_token' => 'ServerChanをリクエスト', 'dingTalk_access_token' => 'BotのWebHooks の access_tol をカスタマイズする', - 'dingTalk_secret' => 'Botをブロックしたあとに出した鍵をカスタマイズする', - 'wechat_aid' => 'アプリケーションのAgentId', - 'wechat_cid' => 'WeChatコート ID をタップ - 更新してください', - 'wechat_secret' => 'アプリの秘密鍵', - 'tg_chat_token' => 'Telegram にアクセスする', - 'codepay_url' => 'https://codepay.fateq.com/creat_order/?', + 'dingTalk_secret' => 'Botをブロックしたあとに出した鍵をカスタマイズする', + 'wechat_aid' => 'アプリケーションのAgentId', + 'wechat_cid' => 'WeChatコート ID をタップ - 更新してください', + 'wechat_secret' => 'アプリの秘密鍵', + 'tg_chat_token' => 'Telegram にアクセスする', + 'codepay_url' => 'https://codepay.fateq.com/creat_order/?', ], - 'payment' => [ + 'payment' => [ 'attribute' => '支払い設定', - 'channel' => [ - 'alipay' => 'PayPalF2F', - 'codepay' => 'コードを支払う', - 'epay' => '易しい支払い', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal語', - 'stripe' => 'ストライプ', + 'channel' => [ + 'alipay' => 'PayPalF2F', + 'codepay' => 'コードを支払う', + 'epay' => '易しい支払い', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal語', + 'stripe' => 'ストライプ', 'paybeaver' => 'ビーバーからの支払', - 'theadpay' => 'フラット化された支払', - 'manual' => '自動決済', + 'theadpay' => 'フラット化された支払', + 'manual' => '自動決済', ], - 'hint' => [ - 'alipay' => 'この機能には蟻の解放プラットフォームへの応募とアプリケーションが必要です。', - 'codepay' => 'アカウント登録をしたら、 こちらのメールアドレスからログイン及びアプリケーションをダウンロードしてください。', - 'payjs' => 'PayJs のアカウントにリクエストしてください', - 'paypal' => '業者のアカウントでのAPIアクセス申請機能を使用し、設定を承認してください。', + 'hint' => [ + 'alipay' => 'この機能には蟻の解放プラットフォームへの応募とアプリケーションが必要です。', + 'codepay' => 'アカウント登録をしたら、 こちらのメールアドレスからログイン及びアプリケーションをダウンロードしてください。', + 'payjs' => 'PayJs のアカウントにリクエストしてください', + 'paypal' => '業者のアカウントでのAPIアクセス申請機能を使用し、設定を承認してください。', 'paybeaver' => 'ビーバーに応募してくださいよ Paybaver', - 'theadpay' => 'フラットヘッドルームでアカウント登録リクエストしてください', - 'manual' => '対応する画面を表示するように変更する', + 'theadpay' => 'フラットヘッドルームでアカウント登録リクエストしてください', + 'manual' => '対応する画面を表示するように変更する', ], ], - 'notification' => [ - 'channel' => [ - 'telegram' => 'TGテレックス', - 'wechat' => 'マイクロ信企業', - 'dingtalk' => 'ピン留め', - 'email' => 'メール', - 'bark' => 'Bark', + 'notification' => [ + 'channel' => [ + 'telegram' => 'TGテレックス', + 'wechat' => 'マイクロ信企業', + 'dingtalk' => 'ピン留め', + 'email' => 'メール', + 'bark' => 'Bark', 'serverchan' => 'ServerChan', - 'pushdeer' => 'PushDeer', - 'pushplus' => 'PushPlus', - 'iyuu' => '愛語飛行', - 'tg_chat' => 'TGジャム', - 'site' => '通知', + 'pushdeer' => 'PushDeer', + 'pushplus' => 'PushPlus', + 'iyuu' => '愛語飛行', + 'tg_chat' => 'TGジャム', + 'site' => '通知', ], 'send_test' => 'テストメールの送信', ], - 'forbid' => [ + 'forbid' => [ 'mainland' => '連合の排除', - 'china' => '中国をブロックする', - 'oversea' => 'ブロックを消す', + 'china' => '中国をブロックする', + 'oversea' => 'ブロックを消す', ], - 'username' => [ - 'email' => 'メールアドレス', + 'username' => [ + 'email' => 'メールアドレス', 'mobile' => '携帯電話番号', - 'any' => 'ユーザー名', + 'any' => 'ユーザー名', ], - 'active_account' => [ + 'active_account' => [ 'before' => '登録する前にアクティブにする', - 'after' => '登録後にアクティブにする', + 'after' => '登録後にアクティブにする', ], - 'ddns' => [ - 'namesilo' => 'Namesiilo', - 'aliyun' => 'Aliyun (国際&国内)', - 'dnspod' => 'DNS Pod', + 'ddns' => [ + 'namesilo' => 'Namesiilo', + 'aliyun' => 'Aliyun (国際&国内)', + 'dnspod' => 'DNS Pod', 'cloudflare' => 'CloudFlarare', ], - 'captcha' => [ - 'standard' => '平均サイズ', - 'geetest' => 'ベストプラス', + 'captcha' => [ + 'standard' => '平均サイズ', + 'geetest' => 'ベストプラス', 'recaptcha' => 'Google reCaptcha', - 'hcaptcha' => 'hCaptcha', + 'hcaptcha' => 'hCaptcha', ], - 'referral' => [ + 'referral' => [ 'once' => '初回購入', 'loop' => 'ループ還元', ], ], - 'set_to' => ':attribute は :attribute です。', - 'minute' => '分間', - 'query' => 'アンケート名', - 'optional' => 'オプション', - 'require' => '必須', + 'set_to' => ':attribute は :attribute です。', + 'minute' => '分間', + 'query' => 'アンケート名', + 'optional' => 'オプション', + 'require' => '必須', ]; diff --git a/resources/lang/ja/auth.php b/resources/lang/ja/auth.php index 4ed11daa..e7449891 100644 --- a/resources/lang/ja/auth.php +++ b/resources/lang/ja/auth.php @@ -1,98 +1,98 @@ 'ルールを読んで同意します', - 'active' => [ + 'accept_term' => 'ルールを読んで同意します', + 'active' => [ 'attribute' => '有効', - 'error' => [ + 'error' => [ 'activated' => 'アカウントのアクティブです。もうアカウントは行われていません。', - 'disable' => 'アカウントのサブシステムを無効化しました。すぐにログインできます!', - 'throttle' => '本サイトのアクティベーションにより、頻繁なアクセスを行います。問題がある場合は: Email にご連絡ください。', + 'disable' => 'アカウントのサブシステムを無効化しました。すぐにログインできます!', + 'throttle' => '本サイトのアクティベーションにより、頻繁なアクセスを行います。問題がある場合は: Email にご連絡ください。', ], 'promotion' => 'アカウントがまだ有効化されていません。前に「:action」をメールしてください!', - 'sent' => 'アクティベーションリンクがあなたのメール アドレスに送信されました。少々お待ち下さい。', + 'sent' => 'アクティベーションリンクがあなたのメール アドレスに送信されました。少々お待ち下さい。', ], - 'aup' => '許容される条件', - 'captcha' => [ + 'aup' => '許容される条件', + 'captcha' => [ 'attribute' => '認証コード', - 'error' => [ - 'failed' => 'キャプチャ認証に失敗しました。もう一度入力してください。', + 'error' => [ + 'failed' => 'キャプチャ認証に失敗しました。もう一度入力してください。', 'timeout' => '認証コードが合っていない!期限切れではないようです。再読み込みしてからやり直してください。', ], - 'required' => '正しい認証コードが必要です', - 'sent' => '確認コードをメールに送信しました。少々お待ち下さい。', + 'required' => '正しい認証コードが必要です', + 'sent' => '確認コードをメールに送信しました。少々お待ち下さい。', ], - 'email' => [ + 'email' => [ 'error' => [ - 'banned' => 'メールサービスの利用者をブロックしています。別のメールアドレスを使用してください。', + 'banned' => 'メールサービスの利用者をブロックしています。別のメールアドレスを使用してください。', 'invalid' => '当駅でサポートされるメールボックスのリスト内で使用する', ], ], - 'error' => [ - 'account_baned' => 'あなたのアカウントはすでに禁止されています。', - 'login_error' => 'ログインエラー、しばらくしてからもう一度お試しください!', - 'login_failed' => 'ログインに失敗しました。メールアドレスまたはパスワードが正しく入力されているか確認してください。', + 'error' => [ + 'account_baned' => 'あなたのアカウントはすでに禁止されています。', + 'login_error' => 'ログインエラー、しばらくしてからもう一度お試しください!', + 'login_failed' => 'ログインに失敗しました。メールアドレスまたはパスワードが正しく入力されているか確認してください。', 'not_found_user' => 'メールアカウントがありません。他の方法でサインインしてください。', 'repeat_request' => '何度もリクエストを繰り返さないでください。後で再試行してください。', - 'url_timeout' => 'リンクは無効になっています。再度実行してください', + 'url_timeout' => 'リンクは無効になっています。再度実行してください', ], - 'failed' => '認証に失敗しました。', - 'invite' => [ - 'attribute' => '招待コード', - 'error' => [ + 'failed' => '認証に失敗しました。', + 'invite' => [ + 'attribute' => '招待コード', + 'error' => [ 'unavailable' => '招待コードは利用できません。再試行してください', ], - 'get' => 'クリックして招待コードを獲得', + 'get' => 'クリックして招待コードを獲得', 'not_required' => '招待コードは必要ありません。直接サインアップ!', ], - 'login' => 'ログイン', - 'logout' => 'ログイン', - 'maintenance' => 'メンテナンス', + 'login' => 'ログイン', + 'logout' => 'ログイン', + 'maintenance' => 'メンテナンス', 'maintenance_tip' => 'サイトのメンテナンス中です', - 'oauth' => [ - 'bind_failed' => 'リンク失敗', - 'bind_success' => '正常にバインドされました。', - 'login_failed' => 'サードパーティ のサインインに失敗しました!', - 'rebind_success' => '正常にバインドされました。', - 'register' => 'クイック登録', + 'oauth' => [ + 'bind_failed' => 'リンク失敗', + 'bind_success' => '正常にバインドされました。', + 'login_failed' => 'サードパーティ のサインインに失敗しました!', + 'rebind_success' => '正常にバインドされました。', + 'register' => 'クイック登録', 'register_failed' => '登録できませんでした', - 'registered' => 'すでにご登録いただいていますので、すぐにログインしてください。', - 'unbind_failed' => '失敗', - 'unbind_success' => '解除成功', + 'registered' => 'すでにご登録いただいていますので、すぐにログインしてください。', + 'unbind_failed' => '失敗', + 'unbind_success' => '解除成功', ], - 'optional' => 'オプション', - 'password' => [ - 'forget' => 'パスワードをお忘れですか?', - 'new' => '新しいパスワードを入力してください', + 'optional' => 'オプション', + 'password' => [ + 'forget' => 'パスワードをお忘れですか?', + 'new' => '新しいパスワードを入力してください', 'original' => '古いパスワード', - 'reset' => [ + 'reset' => [ 'attribute' => 'パスワードをリセット', - 'error' => [ + 'error' => [ 'disabled' => 'パスワードリセットのシステムを無効にしました:メール) ', - 'failed' => 'パスワードのリセットに失敗しました', + 'failed' => 'パスワードのリセットに失敗しました', 'throttle' => '24時間以内にパスワードを変更できます :time 回数, 頻繁で行わないでください', - 'same' => '新しいパスワードを古いパスワードと同じにできません。もう一度入力してください', - 'wrong' => '古いパスワードが正しくありません。再度入力してください', - 'demo' => 'デモ版では管理者パスワードの変更はできません。', + 'same' => '新しいパスワードを古いパスワードと同じにできません。もう一度入力してください', + 'wrong' => '古いパスワードが正しくありません。再度入力してください', + 'demo' => 'デモ版では管理者パスワードの変更はできません。', ], - 'sent' => 'リセットに成功しました。メールメールをゴミ箱に確認する可能性があります)', - 'success' => '新しいパスワードは設定されました。ログインページに移動してください。', + 'sent' => 'リセットに成功しました。メールメールをゴミ箱に確認する可能性があります)', + 'success' => '新しいパスワードは設定されました。ログインページに移動してください。', ], ], - 'register' => [ + 'register' => [ 'attribute' => '収納', - 'code' => '登録コード', - 'error' => [ - 'disable' => '申し訳ありませんが、当駅があなたを閉鎖しています。', + 'code' => '登録コード', + 'error' => [ + 'disable' => '申し訳ありませんが、当駅があなたを閉鎖しています。', 'throttle' => 'フラッシュ設定機能が有効になっています。頻繁に更新さないでください', ], - 'failed' => '登録に失敗しました。後でもう一度試してください。', + 'failed' => '登録に失敗しました。後でもう一度試してください。', 'promotion' => 'まだアカウントを持っていませんか?', - 'success' => '登録が完了しました', + 'success' => '登録が完了しました', ], - 'remember_me' => 'ログイン状態を保持する', - 'request' => '取込', - 'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。', - 'tos' => '使用条件', + 'remember_me' => 'ログイン状態を保持する', + 'request' => '取込', + 'throttle' => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。', + 'tos' => '使用条件', 'one-click_login' => 'ワンタッチログイン', ]; diff --git a/resources/lang/ja/common.php b/resources/lang/ja/common.php index d2649411..09d00c8a 100644 --- a/resources/lang/ja/common.php +++ b/resources/lang/ja/common.php @@ -1,87 +1,87 @@ '{1} タイム|{2} ポイント', - 'account' => 'アカウント', - 'available_date' => '有効期限', - 'created_at' => '作成日時', - 'expired_at' => '有効期限', - 'updated_at' => '更新日時', - 'latest_at' => '最近の回', - 'back' => '帰還', - 'cancel' => '中止', - 'close' => '閉鎖', - 'close_item' => ':attribute は無効なものです。', - 'confirm' => 'ああ', - 'continues' => '作業を実行', - 'open' => '撃て', - 'send' => '送信', - 'view' => '確認', - 'reset' => '設定', - 'copy' => [ + 'hour' => '{1} タイム|{2} ポイント', + 'account' => 'アカウント', + 'available_date' => '有効期限', + 'created_at' => '作成日時', + 'expired_at' => '有効期限', + 'updated_at' => '更新日時', + 'latest_at' => '最近の回', + 'back' => '帰還', + 'cancel' => '中止', + 'close' => '閉鎖', + 'close_item' => ':attribute は無効なものです。', + 'confirm' => 'ああ', + 'continues' => '作業を実行', + 'open' => '撃て', + 'send' => '送信', + 'view' => '確認', + 'reset' => '設定', + 'copy' => [ 'attribute' => '回復時間', - 'success' => 'コピー成功', - 'failed' => 'コピーに失敗しました。手動でコピーしてください。', + 'success' => 'コピー成功', + 'failed' => 'コピーに失敗しました。手動でコピーしてください。', ], - 'add' => '新規追加', - 'free' => '無料', - 'replace' => '変更', - 'submit' => 'セクション', - 'submit_item' => ':attribute がして下さい。', - 'generate' => '作る', - 'generate_item' => ':attribute が生成されます。', - 'to_safari' => [0 => 'タップして右上', 1 => ',選択は', 2 => 'Safariで開く', 3 => 'では、訪問して大丈夫!'], - 'update_browser' => [0 => '次を使用:', 1 => '旧式', 2 => ' のブラウザーは', 3 => 'ブラウザをアップグレード', 4 => '最高の閲覧を実現するためにね'], - 'apply' => '適用する', - 'avatar' => 'アバター', - 'customize' => 'カスタム', - 'all' => 'すべて', - 'default' => 'デフォルト', - 'download' => 'アップロード', - 'goto' => 'ホット', - 'warning' => 'アラート', - 'success' => '成功しました。', - 'success_item' => ':attribute にして下さい。', - 'failed' => '失敗', - 'failed_item' => ':attribute は不正です。', - 'update' => 'より新しい', - 'update_action' => '更新:action', - 'none' => 'いいえ', - 'new' => '新着', - 'sorry' => '失礼', - 'applied' => ':attribute にして下さい。', - 'active_item' => ':attribute の確認が一致しました', - 'error' => 'エラー', - 'toggle' => 'タンク', - 'toggle_action' => '切り替え:action', - 'request_url' => 'アドレスリクエスト', - 'function' => [ + 'add' => '新規追加', + 'free' => '無料', + 'replace' => '変更', + 'submit' => 'セクション', + 'submit_item' => ':attribute がして下さい。', + 'generate' => '作る', + 'generate_item' => ':attribute が生成されます。', + 'to_safari' => [0 => 'タップして右上', 1 => ',選択は', 2 => 'Safariで開く', 3 => 'では、訪問して大丈夫!'], + 'update_browser' => [0 => '次を使用:', 1 => '旧式', 2 => ' のブラウザーは', 3 => 'ブラウザをアップグレード', 4 => '最高の閲覧を実現するためにね'], + 'apply' => '適用する', + 'avatar' => 'アバター', + 'customize' => 'カスタム', + 'all' => 'すべて', + 'default' => 'デフォルト', + 'download' => 'アップロード', + 'goto' => 'ホット', + 'warning' => 'アラート', + 'success' => '成功しました。', + 'success_item' => ':attribute にして下さい。', + 'failed' => '失敗', + 'failed_item' => ':attribute は不正です。', + 'update' => 'より新しい', + 'update_action' => '更新:action', + 'none' => 'いいえ', + 'new' => '新着', + 'sorry' => '失礼', + 'applied' => ':attribute にして下さい。', + 'active_item' => ':attribute の確認が一致しました', + 'error' => 'エラー', + 'toggle' => 'タンク', + 'toggle_action' => '切り替え:action', + 'request_url' => 'アドレスリクエスト', + 'function' => [ 'navigation' => 'ナビゲーション', - 'menubar' => 'メニューバー', + 'menubar' => 'メニューバー', 'fullscreen' => 'フルスクリーン', ], - 'days' => [ + 'days' => [ 'attribute' => '{1} 日|{2}', - 'sun' => '日曜日', - 'mon' => '月曜日', - 'tue' => '火曜日', - 'wed' => '水曜日', - 'thu' => '木曜日', - 'fri' => '金曜日', - 'sat' => '土曜日', - 'weekend' => '週末', - 'work' => '平日', - 'next' => '翌日配達', + 'sun' => '日曜日', + 'mon' => '月曜日', + 'tue' => '火曜日', + 'wed' => '水曜日', + 'thu' => '木曜日', + 'fri' => '金曜日', + 'sat' => '土曜日', + 'weekend' => '週末', + 'work' => '平日', + 'next' => '翌日配達', ], - 'qrcode' => ':attribute は eQRにして下さい。', - 'deleted' => '削除済み', - 'deleted_item' => ':attribute が取り消されました', - 'print' => '印刷', - 'unlimited' => '無制限', - 'payment' => [ + 'qrcode' => ':attribute は eQRにして下さい。', + 'deleted' => '削除済み', + 'deleted_item' => ':attribute が取り消されました', + 'print' => '印刷', + 'unlimited' => '無制限', + 'payment' => [ 'credit' => '残高', 'alipay' => 'アリペイ', - 'qq' => 'QQウォレット', + 'qq' => 'QQウォレット', 'wechat' => 'WeChat 支払う', 'crypto' => 'バーチャル通貨', 'manual' => '自動決済', @@ -89,59 +89,59 @@ return [ 'wait' => '未支払', ], ], - 'order' => [ + 'order' => [ 'status' => [ - 'cancel' => '中止', + 'cancel' => '中止', 'complete' => '完了', - 'prepaid' => '事前決済', - 'ongoing' => '有効', - 'review' => '保留中', + 'prepaid' => '事前決済', + 'ongoing' => '有効', + 'review' => '保留中', ], ], - 'recommend' => '推奨', - 'advance' => '上級者向け', - 'action' => 'アクション', - 'search' => '360', - 'edit' => '編集者', - 'delete' => '削除しました。', - 'status' => [ - 'attribute' => '状態', - 'inactive' => '非アクティブ', - 'disabled' => 'カットオフ', - 'banned' => '禁止', - 'normal' => '通常の', - 'enabled' => '起動', - 'expire' => 'もうすぐ', - 'limited' => '制限:', - 'run_out' => '流出', - 'unused' => '使用されていません', - 'used' => '使用中', - 'closed' => '閉鎖', - 'applying' => '申請中', - 'withdrawn' => '出金', - 'unwithdrawn' => '出金', - 'reply' => '返信済み', - 'pending' => 'ペンディング', - 'unknown' => '通知なし', - 'available' => '発効中', - 'reject' => '生活有り', - 'rejected' => '却下された', - 'review' => '承認待ち', - 'reviewed' => '保留中の承認', - 'paid' => 'お出金', - 'payment_pending' => '保留中の打出', - 'pass' => 'はい', - 'send_to_credit' => '送金先残高', + 'recommend' => '推奨', + 'advance' => '上級者向け', + 'action' => 'アクション', + 'search' => '360', + 'edit' => '編集者', + 'delete' => '削除しました。', + 'status' => [ + 'attribute' => '状態', + 'inactive' => '非アクティブ', + 'disabled' => 'カットオフ', + 'banned' => '禁止', + 'normal' => '通常の', + 'enabled' => '起動', + 'expire' => 'もうすぐ', + 'limited' => '制限:', + 'run_out' => '流出', + 'unused' => '使用されていません', + 'used' => '使用中', + 'closed' => '閉鎖', + 'applying' => '申請中', + 'withdrawn' => '出金', + 'unwithdrawn' => '出金', + 'reply' => '返信済み', + 'pending' => 'ペンディング', + 'unknown' => '通知なし', + 'available' => '発効中', + 'reject' => '生活有り', + 'rejected' => '却下された', + 'review' => '承認待ち', + 'reviewed' => '保留中の承認', + 'paid' => 'お出金', + 'payment_pending' => '保留中の打出', + 'pass' => 'はい', + 'send_to_credit' => '送金先残高', 'waiting_tobe_send' => '配信待ち', ], - 'stay_unchanged' => '変更しない場合は空白のままにしてください。', + 'stay_unchanged' => '変更しない場合は空白のままにしてください。', 'random_generate' => '空欄でランダムに生成する', - 'request_failed' => '要求エラー 再試行してください', - 'convert' => '何もしない', - 'import' => '起動', - 'or' => 'または', - 'more' => 'さらに表示', - 'to' => 'まで', - 'to_be_send' => '保留中', - 'developing' => '開発中です!お楽しみに', + 'request_failed' => '要求エラー 再試行してください', + 'convert' => '何もしない', + 'import' => '起動', + 'or' => 'または', + 'more' => 'さらに表示', + 'to' => 'まで', + 'to_be_send' => '保留中', + 'developing' => '開発中です!お楽しみに', ]; diff --git a/resources/lang/ja/errors.php b/resources/lang/ja/errors.php index 692f2412..2b71c183 100644 --- a/resources/lang/ja/errors.php +++ b/resources/lang/ja/errors.php @@ -1,32 +1,32 @@ [ - 'access' => '不明なIPを検出する、またはプロキシアクセスでアクセスを禁止します', - 'bots' => 'ロボットがアクセスすることを検出し、アクセス禁止', - 'china' => '中国IPを検出するか、プロキシを使用してアクセスを禁止します。', + 'forbidden' => [ + 'access' => '不明なIPを検出する、またはプロキシアクセスでアクセスを禁止します', + 'bots' => 'ロボットがアクセスすることを検出し、アクセス禁止', + 'china' => '中国IPを検出するか、プロキシを使用してアクセスを禁止します。', 'oversea' => '海外IPまたはプロキシアクセスが検出されましたアクセス禁止', ], - 'log' => 'ログ', - 'refresh' => '新しいブラシ', + 'log' => 'ログ', + 'refresh' => '新しいブラシ', 'refresh_page' => 'ページを更新してから次にアクセスしてください', - 'report' => 'エラー❌誤報告がある:', - 'safe_enter' => '安全なポータルへのアクセス', - 'safe_code' => '在庫探索をしない', - 'title' => '⚠️エラートリガー', + 'report' => 'エラー❌誤報告がある:', + 'safe_enter' => '安全なポータルへのアクセス', + 'safe_code' => '在庫探索をしない', + 'title' => '⚠️エラートリガー', 'unsafe_enter' => '非安全なポータルへのアクセス', - 'visit' => 'サポートはこちら:', - 'whoops' => '痛い!', - 'get_ip' => 'IPメッセージの例外を取得する', - 'subscribe' => [ - 'unknown' => 'リンクエラー! 取得を再試行してください!', - 'sub_baned' => 'このリンクは無効化されました。クエリ理由を参照してください', - 'user' => 'エラーリンク,アカウントが存在しません! 取得し直してください.', + 'visit' => 'サポートはこちら:', + 'whoops' => '痛い!', + 'get_ip' => 'IPメッセージの例外を取得する', + 'subscribe' => [ + 'unknown' => 'リンクエラー! 取得を再試行してください!', + 'sub_baned' => 'このリンクは無効化されました。クエリ理由を参照してください', + 'user' => 'エラーリンク,アカウントが存在しません! 取得し直してください.', 'user_disable' => '無効なアカウントです!', - 'baned_until' => 'アカウントの制限が緩和した時間をおいてから再度解除してください!', - 'out' => 'トラフィックが使い切れました。購入するか、データのリセットを再試行しましょう!', - 'expired' => 'アカウントの有効期限が切れています。お手数ですが、購読してみてください。', - 'question' => 'アカウントに問題があります。連絡先検索にアクセスしてください!', - 'none' => '利用できるノードがありません', + 'baned_until' => 'アカウントの制限が緩和した時間をおいてから再度解除してください!', + 'out' => 'トラフィックが使い切れました。購入するか、データのリセットを再試行しましょう!', + 'expired' => 'アカウントの有効期限が切れています。お手数ですが、購読してみてください。', + 'question' => 'アカウントに問題があります。連絡先検索にアクセスしてください!', + 'none' => '利用できるノードがありません', ], ]; diff --git a/resources/lang/ja/http-statuses.php b/resources/lang/ja/http-statuses.php index abb26dc0..7fc19a8a 100644 --- a/resources/lang/ja/http-statuses.php +++ b/resources/lang/ja/http-statuses.php @@ -1,76 +1,76 @@ 'Unknown Error', - '100' => 'Continue', - '101' => 'Switching Protocols', - '102' => 'Processing', - '200' => 'OK', - '201' => 'Created', - '202' => 'Accepted', - '203' => 'Non-Authoritative Information', - '204' => 'No Content', - '205' => 'Reset Content', - '206' => 'Partial Content', - '207' => 'Multi-Status', - '208' => 'Already Reported', - '226' => 'IM Used', - '300' => 'Multiple Choices', - '301' => 'Moved Permanently', - '302' => 'Found', - '303' => 'See Other', - '304' => 'Not Modified', - '305' => 'Use Proxy', - '307' => 'Temporary Redirect', - '308' => 'Permanent Redirect', - '400' => 'Bad Request', - '401' => 'Unauthorized', - '402' => 'Payment Required', - '403' => 'Forbidden', - '404' => 'Page Not Found', - '405' => 'Method Not Allowed', - '406' => 'Not Acceptable', - '407' => 'Proxy Authentication Required', - '408' => 'Request Timeout', - '409' => 'Conflict', - '410' => 'Gone', - '411' => 'Length Required', - '412' => 'Precondition Failed', - '413' => 'Payload Too Large', - '414' => 'URI Too Long', - '415' => 'Unsupported Media Type', - '416' => 'Range Not Satisfiable', - '417' => 'Expectation Failed', - '418' => 'I\'m a teapot', - '419' => 'Session Has Expired', - '421' => 'Misdirected Request', - '422' => 'Unprocessable Entity', - '423' => 'Locked', - '424' => 'Failed Dependency', - '426' => 'Upgrade Required', - '428' => 'Precondition Required', - '429' => 'Too Many Requests', - '431' => 'Request Header Fields Too Large', - '449' => 'Retry With', - '451' => 'Unavailable For Legal Reasons', - '500' => 'Internal Server Error', - '501' => 'Not Implemented', - '502' => 'Bad Gateway', - '503' => 'Maintenance Mode', - '504' => 'Gateway Timeout', - '505' => 'HTTP Version Not Supported', - '506' => 'Variant Also Negotiates', - '507' => 'Insufficient Storage', - '508' => 'Loop Detected', - '509' => 'Bandwidth Limit Exceeded', - '510' => 'Not Extended', - '511' => 'Network Authentication Required', - '520' => 'Unknown Error', - '521' => 'Web Server is Down', - '522' => 'Connection Timed Out', - '523' => 'Origin Is Unreachable', - '524' => 'A Timeout Occurred', - '525' => 'SSL Handshake Failed', - '526' => 'Invalid SSL Certificate', + '0' => 'Unknown Error', + '100' => 'Continue', + '101' => 'Switching Protocols', + '102' => 'Processing', + '200' => 'OK', + '201' => 'Created', + '202' => 'Accepted', + '203' => 'Non-Authoritative Information', + '204' => 'No Content', + '205' => 'Reset Content', + '206' => 'Partial Content', + '207' => 'Multi-Status', + '208' => 'Already Reported', + '226' => 'IM Used', + '300' => 'Multiple Choices', + '301' => 'Moved Permanently', + '302' => 'Found', + '303' => 'See Other', + '304' => 'Not Modified', + '305' => 'Use Proxy', + '307' => 'Temporary Redirect', + '308' => 'Permanent Redirect', + '400' => 'Bad Request', + '401' => 'Unauthorized', + '402' => 'Payment Required', + '403' => 'Forbidden', + '404' => 'Page Not Found', + '405' => 'Method Not Allowed', + '406' => 'Not Acceptable', + '407' => 'Proxy Authentication Required', + '408' => 'Request Timeout', + '409' => 'Conflict', + '410' => 'Gone', + '411' => 'Length Required', + '412' => 'Precondition Failed', + '413' => 'Payload Too Large', + '414' => 'URI Too Long', + '415' => 'Unsupported Media Type', + '416' => 'Range Not Satisfiable', + '417' => 'Expectation Failed', + '418' => 'I\'m a teapot', + '419' => 'Session Has Expired', + '421' => 'Misdirected Request', + '422' => 'Unprocessable Entity', + '423' => 'Locked', + '424' => 'Failed Dependency', + '426' => 'Upgrade Required', + '428' => 'Precondition Required', + '429' => 'Too Many Requests', + '431' => 'Request Header Fields Too Large', + '449' => 'Retry With', + '451' => 'Unavailable For Legal Reasons', + '500' => 'Internal Server Error', + '501' => 'Not Implemented', + '502' => 'Bad Gateway', + '503' => 'Maintenance Mode', + '504' => 'Gateway Timeout', + '505' => 'HTTP Version Not Supported', + '506' => 'Variant Also Negotiates', + '507' => 'Insufficient Storage', + '508' => 'Loop Detected', + '509' => 'Bandwidth Limit Exceeded', + '510' => 'Not Extended', + '511' => 'Network Authentication Required', + '520' => 'Unknown Error', + '521' => 'Web Server is Down', + '522' => 'Connection Timed Out', + '523' => 'Origin Is Unreachable', + '524' => 'A Timeout Occurred', + '525' => 'SSL Handshake Failed', + '526' => 'Invalid SSL Certificate', 'unknownError' => 'Unknown Error', ]; diff --git a/resources/lang/ja/model.php b/resources/lang/ja/model.php index 5e6ff199..b7b10914 100644 --- a/resources/lang/ja/model.php +++ b/resources/lang/ja/model.php @@ -1,230 +1,230 @@ [ - 'id' => 'ユーザ ID', - 'attribute' => 'ユーザー', - 'nickname' => 'ニックネーム', - 'username' => 'アカウント', - 'password' => 'パスワード', - 'credit' => '残高', - 'invite_num' => '利用可能な招待コード', - 'reset_date' => 'リセット日', - 'port' => 'ポート', - 'traffic_used' => 'データ使用量', - 'service' => 'プロキシ', - 'group' => 'グループ', + 'user' => [ + 'id' => 'ユーザ ID', + 'attribute' => 'ユーザー', + 'nickname' => 'ニックネーム', + 'username' => 'アカウント', + 'password' => 'パスワード', + 'credit' => '残高', + 'invite_num' => '利用可能な招待コード', + 'reset_date' => 'リセット日', + 'port' => 'ポート', + 'traffic_used' => 'データ使用量', + 'service' => 'プロキシ', + 'group' => 'グループ', 'account_status' => 'アカウント状態', - 'proxy_status' => 'プロキシ状態', - 'expired_date' => '終了日', - 'role' => 'ロール権限', - 'wechat' => 'マイクロレター', - 'qq' => 'QQ', - 'remark' => 'メモ', - 'uuid' => 'VMess UUUID', - 'proxy_passwd' => 'パスワード', - 'proxy_method' => '暗号化方式', + 'proxy_status' => 'プロキシ状態', + 'expired_date' => '終了日', + 'role' => 'ロール権限', + 'wechat' => 'マイクロレター', + 'qq' => 'QQ', + 'remark' => 'メモ', + 'uuid' => 'VMess UUUID', + 'proxy_passwd' => 'パスワード', + 'proxy_method' => '暗号化方式', 'usable_traffic' => '利用可能なデータ', 'proxy_protocol' => 'プロトコル', - 'proxy_obfs' => '難読化', - 'speed_limit' => 'ユーザー制限速度', - 'inviter' => '招待人:', - 'created_date' => '登録日', + 'proxy_obfs' => '難読化', + 'speed_limit' => 'ユーザー制限速度', + 'inviter' => '招待人:', + 'created_date' => '登録日', ], - 'common' => [ - 'extend' => '拡張', - 'sort' => '並べ替え', + 'common' => [ + 'extend' => '拡張', + 'sort' => '並べ替え', 'description' => '説明', - 'type' => 'タイプ', - 'level' => 'レベル', + 'type' => 'タイプ', + 'level' => 'レベル', ], - 'country' => [ + 'country' => [ 'code' => 'ISO国コード', 'icon' => 'ビーコン', 'name' => '国名', ], - 'subscribe' => [ - 'code' => 'サブスクリプションコード', - 'req_times' => '要求回数', + 'subscribe' => [ + 'code' => 'サブスクリプションコード', + 'req_times' => '要求回数', 'updated_at' => '前回の要求時間', - 'ban_time' => 'アクセス禁止時間', - 'ban_desc' => 'BANされた理由', - 'req_ip' => 'リクエスト IP', + 'ban_time' => 'アクセス禁止時間', + 'ban_desc' => 'BANされた理由', + 'req_ip' => 'リクエスト IP', 'req_header' => '訪問', ], - 'oauth' => [ - 'type' => 'チャネル', + 'oauth' => [ + 'type' => 'チャネル', 'identifier' => ' 識別のみ', ], - 'user_group' => [ + 'user_group' => [ 'attribute' => 'ユーザーグループ', - 'name' => 'グループ名', - 'nodes' => 'ノードの選択', + 'name' => 'グループ名', + 'nodes' => 'ノードの選択', ], - 'node' => [ - 'attribute' => 'ノード', - 'id' => 'ノードID', - 'name' => '注文番号による検索', - 'domain' => 'ドメイン', - 'static' => '生存', - 'online_user' => '開くべきクリック ギルドVault 4', - 'data_consume' => 'トラフィックの生成', - 'data_rate' => 'トラフィックの割合', - 'ddns' => 'DDNS', - 'ipv4' => 'IPv4アドレス', - 'ipv6' => 'IPv6アドレス', - 'push_port' => 'メッセージポート:', - 'rule_group' => '監査グループ', - 'traffic_limit' => 'ノード制限速度', - 'client_limit' => 'デバイスの制限', - 'label' => 'タグ', - 'country' => '都道府県', - 'udp' => 'UDP', - 'display' => '購読と表示', - 'detection' => 'ノードのブロック認識', - 'method' => '暗号化方式', - 'protocol' => 'プロトコル', - 'protocol_param' => 'プロトコルのパラメータ', - 'obfs' => '難読化', - 'obfs_param' => '混乱した引数', - 'single' => '単一ポート', - 'transfer' => '転送', - 'service_port' => 'サービスポート', - 'single_passwd' => '[单] パスワード', - 'v2_alter_id' => '追加ID', - 'v2_net' => '転送方法', - 'v2_cover' => '偽装タイプ', - 'v2_host' => '偽装ドメイン', - 'v2_path' => 'パス | キー', - 'v2_sni' => 'SNI', - 'v2_tls' => '接続TLS', + 'node' => [ + 'attribute' => 'ノード', + 'id' => 'ノードID', + 'name' => '注文番号による検索', + 'domain' => 'ドメイン', + 'static' => '生存', + 'online_user' => '開くべきクリック ギルドVault 4', + 'data_consume' => 'トラフィックの生成', + 'data_rate' => 'トラフィックの割合', + 'ddns' => 'DDNS', + 'ipv4' => 'IPv4アドレス', + 'ipv6' => 'IPv6アドレス', + 'push_port' => 'メッセージポート:', + 'rule_group' => '監査グループ', + 'traffic_limit' => 'ノード制限速度', + 'client_limit' => 'デバイスの制限', + 'label' => 'タグ', + 'country' => '都道府県', + 'udp' => 'UDP', + 'display' => '購読と表示', + 'detection' => 'ノードのブロック認識', + 'method' => '暗号化方式', + 'protocol' => 'プロトコル', + 'protocol_param' => 'プロトコルのパラメータ', + 'obfs' => '難読化', + 'obfs_param' => '混乱した引数', + 'single' => '単一ポート', + 'transfer' => '転送', + 'service_port' => 'サービスポート', + 'single_passwd' => '[单] パスワード', + 'v2_alter_id' => '追加ID', + 'v2_net' => '転送方法', + 'v2_cover' => '偽装タイプ', + 'v2_host' => '偽装ドメイン', + 'v2_path' => 'パス | キー', + 'v2_sni' => 'SNI', + 'v2_tls' => '接続TLS', 'v2_tls_provider' => 'TLS の構成設定', - 'relay_port' => '出力ポート', + 'relay_port' => '出力ポート', ], - 'node_auth' => [ + 'node_auth' => [ 'attribute' => 'ノードライセンス', - 'key' => '通信キーノード', - 'secret' => 'リバース通信キー', + 'key' => '通信キーノード', + 'secret' => 'リバース通信キー', ], - 'node_cert' => [ - 'attribute' => 'ドメイン証明書', - 'domain' => 'ドメイン', - 'key' => 'KEY', - 'pem' => 'PEM', - 'issuer' => '発行者', - 'signed_date' => '発行日', + 'node_cert' => [ + 'attribute' => 'ドメイン証明書', + 'domain' => 'ドメイン', + 'key' => 'KEY', + 'pem' => 'PEM', + 'issuer' => '発行者', + 'signed_date' => '発行日', 'expired_date' => '有効期限', ], - 'order' => [ - 'attribute' => '注文', - 'id' => '名前で検索します。', + 'order' => [ + 'attribute' => '注文', + 'id' => '名前で検索します。', 'original_price' => '旧価格', - 'price' => '価格', - 'pay_way' => '支払い方法', - 'status' => 'ご注文状況:', + 'price' => '価格', + 'pay_way' => '支払い方法', + 'status' => 'ご注文状況:', ], - 'goods' => [ - 'attribute' => '配送番号の設定', - 'name' => '注文番号による検索', - 'price' => '販売価格', - 'category' => 'カテゴリ', - 'renew' => '使用量のリセット', - 'user_limit' => 'ユーザー制限速度', - 'period' => '期間をリセット', - 'traffic' => 'トラフィックの経度', - 'invite_num' => '招待コードを贈る', - 'limit_num' => '最大購入数', + 'goods' => [ + 'attribute' => '配送番号の設定', + 'name' => '注文番号による検索', + 'price' => '販売価格', + 'category' => 'カテゴリ', + 'renew' => '使用量のリセット', + 'user_limit' => 'ユーザー制限速度', + 'period' => '期間をリセット', + 'traffic' => 'トラフィックの経度', + 'invite_num' => '招待コードを贈る', + 'limit_num' => '最大購入数', 'available_date' => '有効期限', - 'hot' => '人気', - 'color' => 'カラー', - 'logo' => 'ベンダサムネイル画像サイズ', - 'info' => 'カスタムリスト', + 'hot' => '人気', + 'color' => 'カラー', + 'logo' => 'ベンダサムネイル画像サイズ', + 'info' => 'カスタムリスト', ], - 'rule' => [ + 'rule' => [ 'attribute' => 'ルール', - 'name' => '説明', - 'pattern' => '値', + 'name' => '説明', + 'pattern' => '値', ], - 'rule_group' => [ + 'rule_group' => [ 'attribute' => 'ルールグループ', - 'name' => 'グループ名', - 'type' => '監査モード', - 'rules' => '規則選択', + 'name' => 'グループ名', + 'type' => '監査モード', + 'rules' => '規則選択', ], - 'role' => [ - 'attribute' => 'ロール', - 'name' => '注文番号による検索', + 'role' => [ + 'attribute' => 'ロール', + 'name' => '注文番号による検索', 'permissions' => '権限', ], - 'permission' => [ - 'attribute' => 'アクセス許可の動作', + 'permission' => [ + 'attribute' => 'アクセス許可の動作', 'description' => 'ビヘイビアの説明', - 'name' => 'ルート名', + 'name' => 'ルート名', ], - 'article' => [ - 'attribute' => '記事', - 'category' => 'クラス', - 'language' => '話す', - 'logo' => 'ヘッダ', + 'article' => [ + 'attribute' => '記事', + 'category' => 'クラス', + 'language' => '話す', + 'logo' => 'ヘッダ', 'created_at' => '公開日', 'updated_at' => '最終更新日', ], - 'coupon' => [ - 'attribute' => 'カード券', - 'name' => 'カード券名', - 'sn' => 'クーポンコードを使用', - 'logo' => 'カード券画像', - 'value' => '割引率', - 'priority' => '重さ', - 'usable_times' => '使用数', - 'minimum' => 'MAX減条件', - 'used' => '個人制限', - 'levels' => 'ランク制限', - 'groups' => 'グループの制限', - 'users_whitelist' => '限定ユーザー', - 'users_blacklist' => 'ユーザーを無効にする', + 'coupon' => [ + 'attribute' => 'カード券', + 'name' => 'カード券名', + 'sn' => 'クーポンコードを使用', + 'logo' => 'カード券画像', + 'value' => '割引率', + 'priority' => '重さ', + 'usable_times' => '使用数', + 'minimum' => 'MAX減条件', + 'used' => '個人制限', + 'levels' => 'ランク制限', + 'groups' => 'グループの制限', + 'users_whitelist' => '限定ユーザー', + 'users_blacklist' => 'ユーザーを無効にする', 'services_whitelist' => 'Emailアドレスを入力してください', 'services_blacklist' => '製品を無効にする。', - 'newbie' => '新人専属', - 'num' => '個数', + 'newbie' => '新人専属', + 'num' => '個数', ], - 'aff' => [ - 'invitee' => '消費者', - 'amount' => '金銭的額', + 'aff' => [ + 'invitee' => '消費者', + 'amount' => '金銭的額', 'commission' => '払戻額', 'updated_at' => '処理時間', 'created_at' => '注文なし', ], - 'referral' => [ + 'referral' => [ 'created_at' => '要求時間', - 'user' => 'アカウントのリクエスト', - 'amount' => '引き出し額申請', - 'id' => '単品ID', + 'user' => 'アカウントのリクエスト', + 'amount' => '引き出し額申請', + 'id' => '単品ID', ], - 'notification' => [ - 'address' => '送信先アドレス', + 'notification' => [ + 'address' => '送信先アドレス', 'created_at' => '配達日数', - 'status' => '納品検収状態', + 'status' => '納品検収状態', ], - 'ip' => [ + 'ip' => [ 'network_type' => '通信タイプ', - 'info' => '関する地域', + 'info' => '関する地域', ], - 'user_traffic' => [ - 'upload' => 'トラフィックのアップロード', + 'user_traffic' => [ + 'upload' => 'トラフィックのアップロード', 'download' => '通信量のダウンロード', - 'total' => '合計トラフィック', + 'total' => '合計トラフィック', 'log_time' => '記録時間', ], 'user_data_modify' => [ - 'before' => '変更前のトラフィック', - 'after' => '運用の後退率', + 'before' => '変更前のトラフィック', + 'after' => '運用の後退率', 'created_at' => 'タイムスタンプ', ], - 'user_credit' => [ - 'before' => '操作前残高', - 'after' => '操作後の金額', - 'amount' => '発生金額', + 'user_credit' => [ + 'before' => '操作前残高', + 'after' => '操作後の金額', + 'amount' => '発生金額', 'created_at' => 'タイムスタンプ', ], ]; diff --git a/resources/lang/ja/notification.php b/resources/lang/ja/notification.php index bd340af5..49fe06c5 100644 --- a/resources/lang/ja/notification.php +++ b/resources/lang/ja/notification.php @@ -1,35 +1,35 @@ 'お知らせ', - 'new' => ':numの新しいメッセージ', - 'empty' => '現在新しいメッセージが届いています', - 'payment_received' => '注文支払成功、量::amount,詳細を参照', - 'account_expired' => 'アカウントの期限切れアラーム', + 'attribute' => 'お知らせ', + 'new' => ':numの新しいメッセージ', + 'empty' => '現在新しいメッセージが届いています', + 'payment_received' => '注文支払成功、量::amount,詳細を参照', + 'account_expired' => 'アカウントの期限切れアラーム', 'account_expired_content' => 'アカウントは :days\' 日後に期限切れになります。あなたのサービスの利用を継続するには、お預かりにお支払いください。', - 'account_expired_blade' => 'アカウントは :days日" に期限切れになります。次回ご利用ください', - 'active_email' => 'この操作を 30 分以内にしてください。', - 'close_ticket' => 'チケット: titleがクローズされました', - 'view_web' => 'アクセスウェブサイト', - 'view_ticket' => 'チケットにアクセス', - 'new_ticket' => '新しいチケットを受け取りました::title', - 'reply_ticket' => 'チケット返信::titles', - 'ticket_content' => 'チケットの内容:', - 'node_block' => 'ノードがブロックされるときの警告', - 'node_offline' => 'オフラインノード警告', - 'node_offline_content' => '次のノードには、例外:心臓血管異常があります。おそらくオフライン:', - 'block_report' => 'ログを無効化:', - 'traffic_warning' => 'トラフィックのリマインダー', - 'traffic_remain' => 'データ使用:: percent%を使用しています、集中させてください', - 'traffic_tips' => 'あなたのサブスクリプションデータに日数をリセットします。トラフィック使用または使用し、その後数量を0にすればプランをリセットできます。', - 'verification_account' => 'アカウントの認証', - 'verification' => '認証コード:', - 'verification_limit' => '有効な:minutes分で認証を完了してください。', - 'data_anomaly' => 'データ例外ユーザーアラート', - 'data_anomaly_content' => 'ユーザーの場合、ID:最近の1時間 [上り従量::upload| 下り速度::download | と共計::total]', - 'node' => [ - 'upload' => 'アップロード', + 'account_expired_blade' => 'アカウントは :days日" に期限切れになります。次回ご利用ください', + 'active_email' => 'この操作を 30 分以内にしてください。', + 'close_ticket' => 'チケット: titleがクローズされました', + 'view_web' => 'アクセスウェブサイト', + 'view_ticket' => 'チケットにアクセス', + 'new_ticket' => '新しいチケットを受け取りました::title', + 'reply_ticket' => 'チケット返信::titles', + 'ticket_content' => 'チケットの内容:', + 'node_block' => 'ノードがブロックされるときの警告', + 'node_offline' => 'オフラインノード警告', + 'node_offline_content' => '次のノードには、例外:心臓血管異常があります。おそらくオフライン:', + 'block_report' => 'ログを無効化:', + 'traffic_warning' => 'トラフィックのリマインダー', + 'traffic_remain' => 'データ使用:: percent%を使用しています、集中させてください', + 'traffic_tips' => 'あなたのサブスクリプションデータに日数をリセットします。トラフィック使用または使用し、その後数量を0にすればプランをリセットできます。', + 'verification_account' => 'アカウントの認証', + 'verification' => '認証コード:', + 'verification_limit' => '有効な:minutes分で認証を完了してください。', + 'data_anomaly' => 'データ例外ユーザーアラート', + 'data_anomaly_content' => 'ユーザーの場合、ID:最近の1時間 [上り従量::upload| 下り速度::download | と共計::total]', + 'node' => [ + 'upload' => 'アップロード', 'download' => 'ダウンロード', - 'total' => '合計', + 'total' => '合計', ], ]; diff --git a/resources/lang/ja/pagination.php b/resources/lang/ja/pagination.php index 0cc478cf..b8137953 100644 --- a/resources/lang/ja/pagination.php +++ b/resources/lang/ja/pagination.php @@ -1,6 +1,6 @@ '次へ »', + 'next' => '次へ »', 'previous' => '« 前へ', ]; diff --git a/resources/lang/ja/user.php b/resources/lang/ja/user.php index 6d571e97..d18030fb 100644 --- a/resources/lang/ja/user.php +++ b/resources/lang/ja/user.php @@ -1,235 +1,235 @@ [ - 'credit' => 'アカウント残高', - 'status' => 'アカウント状態', - 'level' => 'アカウントレベル', - 'group' => '下限額', - 'speed_limit' => 'スピード', - 'remain' => '残りのデータ', - 'time' => 'サブスクリプション期間', - 'last_login' => '最近のサインイン順', - 'reset' => '{0} が残っています :days のトラフィックのリセット|[1,*] と :days 日のデータをリセットしました', + 'account' => [ + 'credit' => 'アカウント残高', + 'status' => 'アカウント状態', + 'level' => 'アカウントレベル', + 'group' => '下限額', + 'speed_limit' => 'スピード', + 'remain' => '残りのデータ', + 'time' => 'サブスクリプション期間', + 'last_login' => '最近のサインイン順', + 'reset' => '{0} が残っています :days のトラフィックのリセット|[1,*] と :days 日のデータをリセットしました', 'connect_password' => '接続パスワード', - 'reason' => [ - 'normal' => 'いつも大丈夫よ', - 'expired' => 'サブスクリプションの有効期限が切れました', - 'overused' => 'この期間でのデータ通信量が :data GB
      を超えてシステムの制限をトリガー % から切断される', + 'reason' => [ + 'normal' => 'いつも大丈夫よ', + 'expired' => 'サブスクリプションの有効期限が切れました', + 'overused' => 'この期間でのデータ通信量が :data GB
      を超えてシステムの制限をトリガー % から切断される', 'traffic_exhausted' => 'アカウント[流量]は壊れているため', - 'unknown' => '原因は不明です。[刷新]あなたのブラウザをお試しください。何度も問題が続くようであれば,管理者に連絡を取ってください.', + 'unknown' => '原因は不明です。[刷新]あなたのブラウザをお試しください。何度も問題が続くようであれば,管理者に連絡を取ってください.', ], ], - 'home' => [ - 'attendance' => [ + 'home' => [ + 'attendance' => [ 'attribute' => 'セプト', - 'disable' => 'システムにはログイン機能が開放されていません', - 'done' => '簽到已經簽到了,明天再來!', - 'success' => 'データ取得した :data', - 'failed' => 'システム❌例外', + 'disable' => 'システムにはログイン機能が開放されていません', + 'done' => '簽到已經簽到了,明天再來!', + 'success' => 'データ取得した :data', + 'failed' => 'システム❌例外', ], - 'traffic_logs' => 'トラフィックのログ', - 'announcement' => 'お知らせ', - 'wechat_push' => 'WeChat 通知', - 'chat_group' => 'チャットグループ', + 'traffic_logs' => 'トラフィックのログ', + 'announcement' => 'お知らせ', + 'wechat_push' => 'WeChat 通知', + 'chat_group' => 'チャットグループ', 'empty_announcement' => 'お知らせはありません', ], - 'purchase_to_unlock' => '購入後にアンロックする', - 'purchase_required' => 'この機能は非課金ユーザーに代わって有効です!', - 'attribute' => [ - 'node' => 'ネットワーク', - 'data' => 'トラフィック', - 'ip' => 'IPアドレス', - 'isp' => 'キャリア', + 'purchase_to_unlock' => '購入後にアンロックする', + 'purchase_required' => 'この機能は非課金ユーザーに代わって有効です!', + 'attribute' => [ + 'node' => 'ネットワーク', + 'data' => 'トラフィック', + 'ip' => 'IPアドレス', + 'isp' => 'キャリア', 'address' => '地域', ], - 'purchase_promotion' => 'さあ買って買ってわかったかい?', - 'menu' => [ - 'helps' => '組織援助', - 'home' => 'メインページ', - 'invites' => '招待者', - 'invoices' => '元帳', - 'nodes' => 'ルーティング', - 'referrals' => 'あなたの宣伝フィールド', - 'shop' => 'ビジネス', - 'profile' => '設置', - 'tickets' => '仕事オーダー', + 'purchase_promotion' => 'さあ買って買ってわかったかい?', + 'menu' => [ + 'helps' => '組織援助', + 'home' => 'メインページ', + 'invites' => '招待者', + 'invoices' => '元帳', + 'nodes' => 'ルーティング', + 'referrals' => 'あなたの宣伝フィールド', + 'shop' => 'ビジネス', + 'profile' => '設置', + 'tickets' => '仕事オーダー', 'admin_dashboard' => '関係ある?', ], - 'contact' => '連絡先情報', - 'oauth' => [ + 'contact' => '連絡先情報', + 'oauth' => [ 'bind_title' => 'ソーシャル連携アカウント', - 'not_bind' => '未リンク', - 'bind' => 'ほどく', - 'rebind' => '再リンクする', - 'unbind' => '別荘を分解', + 'not_bind' => '未リンク', + 'bind' => 'ほどく', + 'rebind' => '再リンクする', + 'unbind' => '別荘を分解', ], - 'coupon' => [ + 'coupon' => [ 'discount' => 'オフ', - 'error' => [ - 'unknown' => '無効なクーポン', - 'used' => 'このクーポンは既に使用されています', - 'expired' => 'クーポンの有効期限が切れています', - 'run_out' => 'クーポン切れ', + 'error' => [ + 'unknown' => '無効なクーポン', + 'used' => 'このクーポンは既に使用されています', + 'expired' => 'クーポンの有効期限が切れています', + 'run_out' => 'クーポン切れ', 'inactive' => 'このクーポンはまだ有効ではありません', - 'wait' => 'イベントまで :timeは実行されますが、少々お待ちください。', - 'unmet' => '使用条件が足りません', - 'minimum' => 'このクーポンを利用できるのは :amount です', + 'wait' => 'イベントまで :timeは実行されますが、少々お待ちください。', + 'unmet' => '使用条件が足りません', + 'minimum' => 'このクーポンを利用できるのは :amount です', 'overused' => 'この券は:times 回のみ使用できます', - 'users' => 'アカウントはセール条件を満たしていません。', + 'users' => 'アカウントはセール条件を満たしていません。', 'services' => '品が割引基準を満たしていません。プロモーション条件をチェックしてください', ], ], - 'error_response' => 'エラーが発生しました。後でもう一度お試し下さい。', - 'invite' => [ - 'attribute' => '招待コード', - 'counts' => '合計 :num 招待コード', - 'tips' => 'の生成 :num の招待コード、:days の', - 'logs' => '招待履歴', - 'promotion' => '招待コードに登録し、有効にすると購読者間のクフーントラフィックが贈られます。消費時、消費される消費額の獲得金額が:referral_percentとなります。', + 'error_response' => 'エラーが発生しました。後でもう一度お試し下さい。', + 'invite' => [ + 'attribute' => '招待コード', + 'counts' => '合計 :num 招待コード', + 'tips' => 'の生成 :num の招待コード、:days の', + 'logs' => '招待履歴', + 'promotion' => '招待コードに登録し、有効にすると購読者間のクフーントラフィックが贈られます。消費時、消費される消費額の獲得金額が:referral_percentとなります。', 'generate_failed' => '生成に失敗しました:出席者が指定した回数だけ増やせません', ], - 'reset_data' => [ - 'action' => 'トラフィックのリセット', - 'cost' => ':amount が必要です', + 'reset_data' => [ + 'action' => 'トラフィックのリセット', + 'cost' => ':amount が必要です', 'cost_tips' => '今回のリセットトラフィックは残高:amountが差し引かれます!', - 'lack' => '残高不足です。請求してください', - 'logs' => 'ユーザー操作に必要な量をリセット', - 'success' => 'リセットしました', + 'lack' => '残高不足です。請求してください', + 'logs' => 'ユーザー操作に必要な量をリセット', + 'success' => 'リセットしました', ], - 'referral' => [ - 'link' => '住所1', - 'total' => '戻額合計額:amount(:total 回)、amoneyが追加された場合、出金を申請してください。', - 'logs' => 'コミッション履歴', - 'failed' => '申請できませんでした', + 'referral' => [ + 'link' => '住所1', + 'total' => '戻額合計額:amount(:total 回)、amoneyが追加された場合、出金を申請してください。', + 'logs' => 'コミッション履歴', + 'failed' => '申請できませんでした', 'success' => '申請に成功しました。', - 'msg' => [ - 'account' => 'アカウントが期限切れです。購入してください。', - 'applied' => '申請中です。前回の応募が終わるまでお待ちください。', + 'msg' => [ + 'account' => 'アカウントが期限切れです。購入してください。', + 'applied' => '申請中です。前回の応募が終わるまでお待ちください。', 'unfulfilled' => '出金することができ、:amountのご利用をお待ちください', - 'wait' => '販売中', - 'error' => '還元フォームの作成に失敗しました。後ほどお試しください', + 'wait' => '販売中', + 'error' => '還元フォームの作成に失敗しました。後ほどお試しください', ], ], - 'inviter' => '招待者', - 'invitee' => '招待者', - 'registered_at' => '登録日', - 'bought_at' => '購入日', - 'payment_method' => '支払い方法', - 'pay' => 'お支払い', - 'input_coupon' => 'チャージ券コードを入力してください', - 'recharge' => 'クレジットの追加', - 'recharge_credit' => '資金を追加', - 'recharging' => 'クレジットを追加中...', + 'inviter' => '招待者', + 'invitee' => '招待者', + 'registered_at' => '登録日', + 'bought_at' => '購入日', + 'payment_method' => '支払い方法', + 'pay' => 'お支払い', + 'input_coupon' => 'チャージ券コードを入力してください', + 'recharge' => 'クレジットの追加', + 'recharge_credit' => '資金を追加', + 'recharging' => 'クレジットを追加中...', 'withdraw_commission' => 'チェックアウト手数料', - 'withdraw_at' => '決済日', - 'withdraw_logs' => 'キャッシュアウトの記録', - 'withdraw' => '条件', - 'scan_qrcode' => '代わりにクライアントを使用してQRコードをスキャン', - 'shop' => [ - 'hot' => 'ヒート', - 'limited' => '公式', - 'change_amount' => '追加入金', + 'withdraw_at' => '決済日', + 'withdraw_logs' => 'キャッシュアウトの記録', + 'withdraw' => '条件', + 'scan_qrcode' => '代わりにクライアントを使用してQRコードをスキャン', + 'shop' => [ + 'hot' => 'ヒート', + 'limited' => '公式', + 'change_amount' => '追加入金', 'change_amount_help' => '追加入荷額を入力してください', - 'buy' => '購入', - 'description' => '説明', - 'service' => 'サービス', - 'pay_credit' => '残高の支払い', - 'pay_online' => 'オンライン決済', - 'price' => '価格', - 'quantity' => '個数', - 'subtotal' => '小計', - 'total' => '合計', - 'conflict' => 'パッケージの不一致', - 'conflict_tips' => '

      当前购买套餐将自动设置为 预支付套餐

      1. 预支付套餐会在生效中的套餐失效后自动开通!
      2. 您可以在支付后手动激活套餐!
      ', - 'call4help' => 'チケット・サポートチケットを開いてください。', + 'buy' => '購入', + 'description' => '説明', + 'service' => 'サービス', + 'pay_credit' => '残高の支払い', + 'pay_online' => 'オンライン決済', + 'price' => '価格', + 'quantity' => '個数', + 'subtotal' => '小計', + 'total' => '合計', + 'conflict' => 'パッケージの不一致', + 'conflict_tips' => '

      当前购买套餐将自动设置为 预支付套餐

      1. 预支付套餐会在生效中的套餐失效后自动开通!
      2. 您可以在支付后手动激活套餐!
      ', + 'call4help' => 'チケット・サポートチケットを開いてください。', ], - 'service' => [ - 'node_count' => ':num 高品質なワイヤー', + 'service' => [ + 'node_count' => ':num 高品質なワイヤー', 'country_count' => ':num か国を上書きします。', - 'unlimited' => 'スピード制限', + 'unlimited' => 'スピード制限', ], - 'payment' => [ - 'error' => 'チャージ残高が正しくありません', - 'creating' => '支払いフォームを作成しています...', + 'payment' => [ + 'error' => 'チャージ残高が正しくありません', + 'creating' => '支払いフォームを作成しています...', 'redirect_stripe' => 'Stripeの支払い画面に移動', - 'qrcode_tips' => 'QRコードをスキャンするには:softwareを使用してください', - 'close_tips' => ':minutes内の支払い手続きを完了してください。さもなければ注文は自動的にオフになります。', - 'mobile_tips' => 'モバイルユーザー:長押しの QR コード → 支払いを保存します -> スイート -> スイート -> スイートの選択で 支払いの選択', + 'qrcode_tips' => 'QRコードをスキャンするには:softwareを使用してください', + 'close_tips' => ':minutes内の支払い手続きを完了してください。さもなければ注文は自動的にオフになります。', + 'mobile_tips' => 'モバイルユーザー:長押しの QR コード → 支払いを保存します -> スイート -> スイート -> スイートの選択で 支払いの選択', ], - 'invoice' => [ - 'attribute' => '注文', - 'detail' => '支払い履歴', - 'amount' => '金額', + 'invoice' => [ + 'attribute' => '注文', + 'detail' => '支払い履歴', + 'amount' => '金額', 'active_prepaid_question' => '事前決済サービスを有効化しますか?', - 'active_prepaid_tips' => '現在のパッケージはパック内から有効になりました:
      以前のパッケージは直すことができます!
      この日最初からやり直しです!', + 'active_prepaid_tips' => '現在のパッケージはパック内から有効になりました:
      以前のパッケージは直すことができます!
      この日最初からやり直しです!', ], - 'node' => [ - 'info' => '設定情報', - 'setting' => 'プロキシ設定', + 'node' => [ + 'info' => '設定情報', + 'setting' => 'プロキシ設定', 'unstable' => '車両の変動/メンテナンスで', - 'rate' => ':ratio倍トラフィック消費', + 'rate' => ':ratio倍トラフィック消費', ], - 'subscribe' => [ - 'link' => 'サブスクリプションリンク', - 'tips' => 'アラート:このサブスクリプションリンクは個人にのみ利用され、このリンクを伝染しない限り、そのリンクはアカウントの利用量の異常なパケットを発信します。', + 'subscribe' => [ + 'link' => 'サブスクリプションリンク', + 'tips' => 'アラート:このサブスクリプションリンクは個人にのみ利用され、このリンクを伝染しない限り、そのリンクはアカウントの利用量の異常なパケットを発信します。', 'exchange_warning' => 'サブスクリプションアドレスを変更すると、\n1.古いアドレスがすぐ無効\n2.接続パスワードの変更が発生します。', - 'custom' => 'カスタムフィード', - 'ss_only' => 'SSのみ購読する', - 'ssr_only' => 'SSR(SSを含む)', - 'v2ray_only' => 'V2Ray のみ購読する', - 'trojan_only' => 'Trojan のみ登録', - 'error' => '例外', - 'info' => [ - 'title' => 'アカウント概要 [非实时]', - 'upload' => 'アップロードデータ', + 'custom' => 'カスタムフィード', + 'ss_only' => 'SSのみ購読する', + 'ssr_only' => 'SSR(SSを含む)', + 'v2ray_only' => 'V2Ray のみ購読する', + 'trojan_only' => 'Trojan のみ登録', + 'error' => '例外', + 'info' => [ + 'title' => 'アカウント概要 [非实时]', + 'upload' => 'アップロードデータ', 'download' => '通信量のダウンロード', - 'total' => 'パックトラフィック', + 'total' => 'パックトラフィック', ], ], - 'ticket' => [ - 'attribute' => 'チケット', - 'submit_tips' => '課題を確認しますか?', - 'reply_confirm' => '課題に返信してよろしいですか。', - 'close_tips' => 'この課題をクローズしますか?', - 'close' => 'チケットを閉じる', - 'failed_closed' => 'エラー:このチケットを閉じました', - 'reply_placeholder' => '何か言えますか?', - 'reply' => '返信', - 'close_msg' => 'チケット:ID :id人が手動でクローズしました', - 'title_placeholder' => 'イシューや問題の内容は簡単に表現できます。', + 'ticket' => [ + 'attribute' => 'チケット', + 'submit_tips' => '課題を確認しますか?', + 'reply_confirm' => '課題に返信してよろしいですか。', + 'close_tips' => 'この課題をクローズしますか?', + 'close' => 'チケットを閉じる', + 'failed_closed' => 'エラー:このチケットを閉じました', + 'reply_placeholder' => '何か言えますか?', + 'reply' => '返信', + 'close_msg' => 'チケット:ID :id人が手動でクローズしました', + 'title_placeholder' => 'イシューや問題の内容は簡単に表現できます。', 'content_placeholder' => 'どのような状況で問題が起こるか、あなたが助けを必要とする場所かあなたの手助けをしてください', - 'new' => '新しいチケットを作成する', - 'working_hour' => '営業時間', - 'online_hour' => '現在時刻', - 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
      重复请求,将会自动延迟处理时间', - 'error' => '不明なエラーです!サポートに連絡してください', + 'new' => '新しいチケットを作成する', + 'working_hour' => '営業時間', + 'online_hour' => '現在時刻', + 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
      重复请求,将会自动延迟处理时间', + 'error' => '不明なエラーです!サポートに連絡してください', ], - 'traffic_logs' => [ + 'traffic_logs' => [ '24hours' => '本日のデータ使用', - '30days' => '今月のデータ使用', - 'tips' => 'ヒント:トラフィックの統計更新は遅延があります。統計は、翌日更新され、更新、1時間ごとに更新されます。', + '30days' => '今月のデータ使用', + 'tips' => 'ヒント:トラフィックの統計更新は遅延があります。統計は、翌日更新され、更新、1時間ごとに更新されます。', ], - 'client' => 'クライアント', - 'tutorials' => '程度', - 'current_role' => '現在のロール:', - 'knowledge' => [ + 'client' => 'クライアント', + 'tutorials' => '程度', + 'current_role' => '現在のロール:', + 'knowledge' => [ 'title' => 'コンセンサス', 'basic' => '親しくさ', ], - 'manual' => [ - 'red_packet' => 'PayPalギフト', - 'hint' => 'コードを評価した後、👇(次へ)をクリックして「:backhand_index_hinting_down:」までお支払いを完了してください。', - 'step_1' => '判断', - 'step_1_title' => '適切に人工的な決済方法', - 'step_2' => 'お支払い', - 'step_2_title' => 'お支払いに QR コードを取得してください。', - 'step_3' => '完了', - 'step_3_title' => '保留中の支払いが承認されるまでお待ちください', - 'remark' => '口座番号', + 'manual' => [ + 'red_packet' => 'PayPalギフト', + 'hint' => 'コードを評価した後、👇(次へ)をクリックして「:backhand_index_hinting_down:」までお支払いを完了してください。', + 'step_1' => '判断', + 'step_1_title' => '適切に人工的な決済方法', + 'step_2' => 'お支払い', + 'step_2_title' => 'お支払いに QR コードを取得してください。', + 'step_3' => '完了', + 'step_3_title' => '保留中の支払いが承認されるまでお待ちください', + 'remark' => '口座番号', 'remark_content' => 'ログインフォームに残っているアカウント。これは手動で確認することができます。', - 'payment_hint' => 'お支払いで、金額に対応します(ほとんど払えない場合)', - 'pre' => '戻る', - 'next' => '次へ', + 'payment_hint' => 'お支払いで、金額に対応します(ほとんど払えない場合)', + 'pre' => '戻る', + 'next' => '次へ', ], ]; diff --git a/resources/lang/ja/validation.php b/resources/lang/ja/validation.php index fc4a6cff..4a7f79be 100644 --- a/resources/lang/ja/validation.php +++ b/resources/lang/ja/validation.php @@ -1,196 +1,196 @@ ':attributeを承認してください。', - 'accepted_if' => ':otherが:valueの場合、:attributeを受け入れる必要があります。', - 'active_url' => ':attributeは、有効なURLではありません。', - 'after' => ':attributeには、:dateより後の日付を指定してください。', - 'after_or_equal' => ':attributeには、:date以降の日付を指定してください。', - 'alpha' => ':attributeには、アルファベッドのみ使用できます。', - 'alpha_dash' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')とハイフンと下線(\'-\',\'_\')が使用できます。', - 'alpha_num' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')が使用できます。', - 'array' => ':attributeには、配列を指定してください。', - 'before' => ':attributeには、:dateより前の日付を指定してください。', - 'before_or_equal' => ':attributeには、:date以前の日付を指定してください。', - 'between' => [ - 'array' => ':attributeの項目は、:min個から:max個にしてください。', - 'file' => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。', + 'accepted' => ':attributeを承認してください。', + 'accepted_if' => ':otherが:valueの場合、:attributeを受け入れる必要があります。', + 'active_url' => ':attributeは、有効なURLではありません。', + 'after' => ':attributeには、:dateより後の日付を指定してください。', + 'after_or_equal' => ':attributeには、:date以降の日付を指定してください。', + 'alpha' => ':attributeには、アルファベッドのみ使用できます。', + 'alpha_dash' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')とハイフンと下線(\'-\',\'_\')が使用できます。', + 'alpha_num' => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')が使用できます。', + 'array' => ':attributeには、配列を指定してください。', + 'before' => ':attributeには、:dateより前の日付を指定してください。', + 'before_or_equal' => ':attributeには、:date以前の日付を指定してください。', + 'between' => [ + 'array' => ':attributeの項目は、:min個から:max個にしてください。', + 'file' => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。', 'numeric' => ':attributeには、:minから、:maxまでの数字を指定してください。', - 'string' => ':attributeは、:min文字から:max文字にしてください。', + 'string' => ':attributeは、:min文字から:max文字にしてください。', ], - 'boolean' => ':attributeには、\'true\'か\'false\'を指定してください。', - 'confirmed' => ':attributeと:attribute確認が一致しません。', - 'current_password' => 'パスワードが正しくありません。', - 'date' => ':attributeは、正しい日付ではありません。', - 'date_equals' => ':attributeは:dateに等しい日付でなければなりません。', - 'date_format' => ':attributeの形式は、\':format\'と合いません。', - 'declined' => ':attributeは 辞退する必要があります。', - 'declined_if' => ':otherが:valueの場合、:attributeは拒否されなければならない。', - 'different' => ':attributeと:otherには、異なるものを指定してください。', - 'digits' => ':attributeは、:digits桁にしてください。', - 'digits_between' => ':attributeは、:min桁から:max桁にしてください。', - 'dimensions' => ':attributeの画像サイズが無効です', - 'distinct' => ':attributeの値が重複しています。', - 'email' => ':attributeは、有効なメールアドレス形式で指定してください。', - 'ends_with' => ':attributeは、次のうちのいずれかで終わらなければなりません。: :values', - 'enum' => '選択した :attributeは 無効です。', - 'exists' => '選択された:attributeは、有効ではありません。', - 'file' => ':attributeはファイルでなければいけません。', - 'filled' => ':attributeは必須です。', - 'gt' => [ - 'array' => ':attributeの項目数は、:value個より大きくなければなりません。', - 'file' => ':attributeは、:value KBより大きくなければなりません。', + 'boolean' => ':attributeには、\'true\'か\'false\'を指定してください。', + 'confirmed' => ':attributeと:attribute確認が一致しません。', + 'current_password' => 'パスワードが正しくありません。', + 'date' => ':attributeは、正しい日付ではありません。', + 'date_equals' => ':attributeは:dateに等しい日付でなければなりません。', + 'date_format' => ':attributeの形式は、\':format\'と合いません。', + 'declined' => ':attributeは 辞退する必要があります。', + 'declined_if' => ':otherが:valueの場合、:attributeは拒否されなければならない。', + 'different' => ':attributeと:otherには、異なるものを指定してください。', + 'digits' => ':attributeは、:digits桁にしてください。', + 'digits_between' => ':attributeは、:min桁から:max桁にしてください。', + 'dimensions' => ':attributeの画像サイズが無効です', + 'distinct' => ':attributeの値が重複しています。', + 'email' => ':attributeは、有効なメールアドレス形式で指定してください。', + 'ends_with' => ':attributeは、次のうちのいずれかで終わらなければなりません。: :values', + 'enum' => '選択した :attributeは 無効です。', + 'exists' => '選択された:attributeは、有効ではありません。', + 'file' => ':attributeはファイルでなければいけません。', + 'filled' => ':attributeは必須です。', + 'gt' => [ + 'array' => ':attributeの項目数は、:value個より大きくなければなりません。', + 'file' => ':attributeは、:value KBより大きくなければなりません。', 'numeric' => ':attributeは、:valueより大きくなければなりません。', - 'string' => ':attributeは、:value文字より大きくなければなりません。', + 'string' => ':attributeは、:value文字より大きくなければなりません。', ], - 'gte' => [ - 'array' => ':attributeの項目数は、:value個以上でなければなりません。', - 'file' => ':attributeは、:value KB以上でなければなりません。', + 'gte' => [ + 'array' => ':attributeの項目数は、:value個以上でなければなりません。', + 'file' => ':attributeは、:value KB以上でなければなりません。', 'numeric' => ':attributeは、:value以上でなければなりません。', - 'string' => ':attributeは、:value文字以上でなければなりません。', + 'string' => ':attributeは、:value文字以上でなければなりません。', ], - 'image' => ':attributeには、画像を指定してください。', - 'in' => '選択された:attributeは、有効ではありません。', - 'in_array' => ':attributeが:otherに存在しません。', - 'integer' => ':attributeには、整数を指定してください。', - 'ip' => ':attributeには、有効なIPアドレスを指定してください。', - 'ipv4' => ':attributeはIPv4アドレスを指定してください。', - 'ipv6' => ':attributeはIPv6アドレスを指定してください。', - 'json' => ':attributeには、有効なJSON文字列を指定してください。', - 'lt' => [ - 'array' => ':attributeの項目数は、:value個より小さくなければなりません。', - 'file' => ':attributeは、:value KBより小さくなければなりません。', + 'image' => ':attributeには、画像を指定してください。', + 'in' => '選択された:attributeは、有効ではありません。', + 'in_array' => ':attributeが:otherに存在しません。', + 'integer' => ':attributeには、整数を指定してください。', + 'ip' => ':attributeには、有効なIPアドレスを指定してください。', + 'ipv4' => ':attributeはIPv4アドレスを指定してください。', + 'ipv6' => ':attributeはIPv6アドレスを指定してください。', + 'json' => ':attributeには、有効なJSON文字列を指定してください。', + 'lt' => [ + 'array' => ':attributeの項目数は、:value個より小さくなければなりません。', + 'file' => ':attributeは、:value KBより小さくなければなりません。', 'numeric' => ':attributeは、:valueより小さくなければなりません。', - 'string' => ':attributeは、:value文字より小さくなければなりません。', + 'string' => ':attributeは、:value文字より小さくなければなりません。', ], - 'lte' => [ - 'array' => ':attributeの項目数は、:value個以下でなければなりません。', - 'file' => ':attributeは、:value KB以下でなければなりません。', + 'lte' => [ + 'array' => ':attributeの項目数は、:value個以下でなければなりません。', + 'file' => ':attributeは、:value KB以下でなければなりません。', 'numeric' => ':attributeは、:value以下でなければなりません。', - 'string' => ':attributeは、:value文字以下でなければなりません。', + 'string' => ':attributeは、:value文字以下でなければなりません。', ], - 'mac_address' => ':attributeは有効なMACアドレスである必要があります。', - 'max' => [ - 'array' => ':attributeの項目は、:max個以下にしてください。', - 'file' => ':attributeには、:max KB以下のファイルを指定してください。', + 'mac_address' => ':attributeは有効なMACアドレスである必要があります。', + 'max' => [ + 'array' => ':attributeの項目は、:max個以下にしてください。', + 'file' => ':attributeには、:max KB以下のファイルを指定してください。', 'numeric' => ':attributeには、:max以下の数字を指定してください。', - 'string' => ':attributeは、:max文字以下にしてください。', + 'string' => ':attributeは、:max文字以下にしてください。', ], - 'mimes' => ':attributeには、:valuesタイプのファイルを指定してください。', - 'mimetypes' => ':attributeには、:valuesタイプのファイルを指定してください。', - 'min' => [ - 'array' => ':attributeの項目は、:min個以上にしてください。', - 'file' => ':attributeには、:min KB以上のファイルを指定してください。', + 'mimes' => ':attributeには、:valuesタイプのファイルを指定してください。', + 'mimetypes' => ':attributeには、:valuesタイプのファイルを指定してください。', + 'min' => [ + 'array' => ':attributeの項目は、:min個以上にしてください。', + 'file' => ':attributeには、:min KB以上のファイルを指定してください。', 'numeric' => ':attributeには、:min以上の数字を指定してください。', - 'string' => ':attributeは、:min文字以上にしてください。', + 'string' => ':attributeは、:min文字以上にしてください。', ], - 'multiple_of' => ':attributeは:valueの倍数でなければなりません', - 'not_in' => '選択された:attributeは、有効ではありません。', - 'not_regex' => ':attributeの形式が無効です。', - 'numeric' => ':attributeには、数字を指定してください。', - 'password' => 'パスワードが正しくありません。', - 'present' => ':attributeが存在している必要があります。', - 'prohibited' => ':attributeフィールドは禁止されています。', - 'prohibited_if' => ':attributeフィールドは、:otherが:valueの場合は禁止されています。', - 'prohibited_unless' => ':attributeフィールドは、:otherが:valuesでない限り禁止されています。', - 'prohibits' => ':attribute フィールドは、:other が存在することを禁止します。', - 'regex' => ':attributeには、有効な正規表現を指定してください。', - 'required' => ':attributeは、必ず指定してください。', - 'required_array_keys' => ':attributeフィールドには、:valuesのエントリを含める必要があります。', - 'required_if' => ':otherが:valueの場合、:attributeを指定してください。', - 'required_unless' => ':otherが:values以外の場合、:attributeを指定してください。', - 'required_with' => ':valuesが指定されている場合、:attributeも指定してください。', - 'required_with_all' => ':valuesが全て指定されている場合、:attributeも指定してください。', - 'required_without' => ':valuesが指定されていない場合、:attributeを指定してください。', + 'multiple_of' => ':attributeは:valueの倍数でなければなりません', + 'not_in' => '選択された:attributeは、有効ではありません。', + 'not_regex' => ':attributeの形式が無効です。', + 'numeric' => ':attributeには、数字を指定してください。', + 'password' => 'パスワードが正しくありません。', + 'present' => ':attributeが存在している必要があります。', + 'prohibited' => ':attributeフィールドは禁止されています。', + 'prohibited_if' => ':attributeフィールドは、:otherが:valueの場合は禁止されています。', + 'prohibited_unless' => ':attributeフィールドは、:otherが:valuesでない限り禁止されています。', + 'prohibits' => ':attribute フィールドは、:other が存在することを禁止します。', + 'regex' => ':attributeには、有効な正規表現を指定してください。', + 'required' => ':attributeは、必ず指定してください。', + 'required_array_keys' => ':attributeフィールドには、:valuesのエントリを含める必要があります。', + 'required_if' => ':otherが:valueの場合、: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のファイルを指定してください。', + 'same' => ':attributeと:otherが一致しません。', + 'size' => [ + 'array' => ':attributeの項目は、:size個にしてください。', + 'file' => ':attributeには、:size KBのファイルを指定してください。', 'numeric' => ':attributeには、:sizeを指定してください。', - 'string' => ':attributeは、:size文字にしてください。', + 'string' => ':attributeは、:size文字にしてください。', ], - 'starts_with' => ':attributeは、次のいずれかで始まる必要があります。:values', - 'string' => ':attributeには、文字を指定してください。', - 'timezone' => ':attributeには、有効なタイムゾーンを指定してください。', - 'unique' => '指定の:attributeは既に使用されています。', - 'uploaded' => ':attributeのアップロードに失敗しました。', - 'url' => ':attributeは、有効なURL形式で指定してください。', - 'uuid' => ':attributeは、有効なUUIDでなければなりません。', - 'attributes' => [ - 'address' => '住所', - 'age' => '年', - 'amount' => '額', - 'area' => 'エリア', - 'available' => '利用可能', - 'birthday' => '誕生日', - 'body' => 'ボディ', - 'city' => '市', - 'content' => 'コンテンツ', - 'country' => '国', - 'created_at' => '作成日', - 'creator' => 'クリエーター', - 'current_password' => '現在のパスワード', - 'date' => '日付', - 'date_of_birth' => '生年月日', - 'day' => '日', - 'deleted_at' => 'で削除', - 'description' => '説明', - 'district' => '地区', - 'duration' => '期間', - 'email' => 'Eメール', - 'excerpt' => '抜粋', - 'filter' => 'フィルタ', - 'first_name' => '名前', - 'gender' => '性別', - 'group' => 'グループ', - 'hour' => '時間', - 'image' => '画像', - 'last_name' => '名字', - 'lesson' => 'レッスン', - 'line_address_1' => '回線アドレス1', - 'line_address_2' => '回線アドレス2', - 'message' => 'メッセージ', - 'middle_name' => 'ミドルネーム', - 'minute' => 'ポイント', - 'mobile' => 'モバイル', - 'month' => 'ヶ月', - 'name' => '名前', - 'national_code' => '国コード', - 'number' => '番号', - 'password' => 'パスワード', - 'password_confirmation' => 'パスワードの確認', - 'phone' => '電話番号', - 'photo' => '写真', - 'postal_code' => '郵便番号', - 'price' => '価格', - 'province' => '都道府県', + 'starts_with' => ':attributeは、次のいずれかで始まる必要があります。:values', + 'string' => ':attributeには、文字を指定してください。', + 'timezone' => ':attributeには、有効なタイムゾーンを指定してください。', + 'unique' => '指定の:attributeは既に使用されています。', + 'uploaded' => ':attributeのアップロードに失敗しました。', + 'url' => ':attributeは、有効なURL形式で指定してください。', + 'uuid' => ':attributeは、有効なUUIDでなければなりません。', + 'attributes' => [ + 'address' => '住所', + 'age' => '年', + 'amount' => '額', + 'area' => 'エリア', + 'available' => '利用可能', + 'birthday' => '誕生日', + 'body' => 'ボディ', + 'city' => '市', + 'content' => 'コンテンツ', + 'country' => '国', + 'created_at' => '作成日', + 'creator' => 'クリエーター', + 'current_password' => '現在のパスワード', + 'date' => '日付', + 'date_of_birth' => '生年月日', + 'day' => '日', + 'deleted_at' => 'で削除', + 'description' => '説明', + 'district' => '地区', + 'duration' => '期間', + 'email' => 'Eメール', + 'excerpt' => '抜粋', + 'filter' => 'フィルタ', + 'first_name' => '名前', + 'gender' => '性別', + 'group' => 'グループ', + 'hour' => '時間', + 'image' => '画像', + 'last_name' => '名字', + 'lesson' => 'レッスン', + 'line_address_1' => '回線アドレス1', + 'line_address_2' => '回線アドレス2', + 'message' => 'メッセージ', + 'middle_name' => 'ミドルネーム', + 'minute' => 'ポイント', + 'mobile' => 'モバイル', + 'month' => 'ヶ月', + 'name' => '名前', + 'national_code' => '国コード', + 'number' => '番号', + 'password' => 'パスワード', + 'password_confirmation' => 'パスワードの確認', + 'phone' => '電話番号', + 'photo' => '写真', + 'postal_code' => '郵便番号', + 'price' => '価格', + 'province' => '都道府県', 'recaptcha_response_field' => 'Recaptcha応答フィールド', - 'remember' => '覚えて', - 'restored_at' => 'で復元', - 'result_text_under_image' => '画像の下の結果テキスト', - 'role' => 'ロール', - 'second' => 'セカンド', - 'sex' => 'ジェンダー', - 'short_text' => '短いテキスト', - 'size' => 'サイズ', - 'state' => '状態', - 'street' => 'ストリート', - 'student' => 'スチューデント', - 'subject' => '課題', - 'teacher' => '先生', - 'terms' => '利用規約', - 'test_description' => 'テスト内容', - 'test_locale' => 'テストロケール', - 'test_name' => 'テスト名', - 'text' => 'テキスト', - 'time' => 'てま', - 'title' => 'タイトル', - 'updated_at' => '更新日', - 'username' => 'ユーザー名', - 'year' => '年', + 'remember' => '覚えて', + 'restored_at' => 'で復元', + 'result_text_under_image' => '画像の下の結果テキスト', + 'role' => 'ロール', + 'second' => 'セカンド', + 'sex' => 'ジェンダー', + 'short_text' => '短いテキスト', + 'size' => 'サイズ', + 'state' => '状態', + 'street' => 'ストリート', + 'student' => 'スチューデント', + 'subject' => '課題', + 'teacher' => '先生', + 'terms' => '利用規約', + 'test_description' => 'テスト内容', + 'test_locale' => 'テストロケール', + 'test_name' => 'テスト名', + 'text' => 'テキスト', + 'time' => 'てま', + 'title' => 'タイトル', + 'updated_at' => '更新日', + 'username' => 'ユーザー名', + 'year' => '年', ], - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], diff --git a/resources/lang/ko/admin.php b/resources/lang/ko/admin.php index f309df60..526e2ac7 100644 --- a/resources/lang/ko/admin.php +++ b/resources/lang/ko/admin.php @@ -1,802 +1,802 @@ [ - 'users' => '总用户', - 'available_users' => '有效用户', - 'paid_users' => '付费用户', - 'active_days_users' => ':days 日内活跃用户', - 'inactive_days_users' => ':days 日以上不活跃用户', - 'online_users' => '当前在线', - 'expiring_users' => '临近到期', - 'overuse_users' => '流量大户(超过90%的用户)', - 'abnormal_users' => '1小时内流量异常', - 'nodes' => '节点', - 'maintaining_nodes' => '维护中的节点', - 'traffic_consumed' => '记录的消耗流量', - 'traffic_days_consumed' => ':days 日内消耗流量', - 'orders' => '总订单数', - 'online_orders' => '在线支付订单数', - 'succeed_orders' => '支付成功订单数', - 'credit' => '总余额', + 'dashboard' => [ + 'users' => '总用户', + 'available_users' => '有效用户', + 'paid_users' => '付费用户', + 'active_days_users' => ':days 日内活跃用户', + 'inactive_days_users' => ':days 日以上不活跃用户', + 'online_users' => '当前在线', + 'expiring_users' => '临近到期', + 'overuse_users' => '流量大户(超过90%的用户)', + 'abnormal_users' => '1小时内流量异常', + 'nodes' => '节点', + 'maintaining_nodes' => '维护中的节点', + 'traffic_consumed' => '记录的消耗流量', + 'traffic_days_consumed' => ':days 日内消耗流量', + 'orders' => '总订单数', + 'online_orders' => '在线支付订单数', + 'succeed_orders' => '支付成功订单数', + 'credit' => '总余额', 'withdrawing_commissions' => '待提现佣金', - 'withdrawn_commissions' => '已支出佣金', + 'withdrawn_commissions' => '已支出佣金', ], - 'action' => [ + 'action' => [ 'edit_item' => '编辑:attribute', - 'add_item' => '添加:attribute', + 'add_item' => '添加:attribute', ], - 'confirm' => [ - 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], + 'confirm' => [ + 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], 'continues' => '确定继续操作吗? ', - 'export' => '确定全部导出? ', + 'export' => '确定全部导出? ', ], - 'user_dashboard' => '个人中心', - 'menu' => [ - 'dashboard' => '管理中心', - 'user' => [ - 'attribute' => '用户系统', - 'list' => '用户管理', - 'oauth' => '用户授权', - 'group' => '用戶分组', + 'user_dashboard' => '个人中心', + 'menu' => [ + 'dashboard' => '管理中心', + 'user' => [ + 'attribute' => '用户系统', + 'list' => '用户管理', + 'oauth' => '用户授权', + 'group' => '用戶分组', 'credit_log' => '余额变动', - 'subscribe' => '订阅管理', + 'subscribe' => '订阅管理', ], - 'rbac' => [ - 'attribute' => '权限系统', + 'rbac' => [ + 'attribute' => '权限系统', 'permission' => '权限列表', - 'role' => '角色列表', + 'role' => '角色列表', ], 'customer_service' => [ 'attribute' => '客服系统', - 'ticket' => '服务工单', - 'article' => '文章管理', - 'push' => '消息推送', - 'mail' => '邮件群发', + 'ticket' => '服务工单', + 'article' => '文章管理', + 'push' => '消息推送', + 'mail' => '邮件群发', ], - 'node' => [ + 'node' => [ 'attribute' => '线路系统', - 'list' => '线路管理', - 'auth' => '线路授权', - 'cert' => '证书列表', + 'list' => '线路管理', + 'auth' => '线路授权', + 'cert' => '证书列表', ], - 'rule' => [ + 'rule' => [ 'attribute' => '审计规则', - 'list' => '规则列表', - 'group' => '规则分组', - 'trigger' => '触发记录', + 'list' => '规则列表', + 'group' => '规则分组', + 'trigger' => '触发记录', ], - 'shop' => [ + 'shop' => [ 'attribute' => '商品系统', - 'goods' => '商品管理', - 'coupon' => '卡券管理', - 'order' => '商品订单', + 'goods' => '商品管理', + 'coupon' => '卡券管理', + 'order' => '商品订单', ], - 'promotion' => [ - 'attribute' => '推广系统', - 'invite' => '邀请管理', - 'withdraw' => '提现管理', + 'promotion' => [ + 'attribute' => '推广系统', + 'invite' => '邀请管理', + 'withdraw' => '提现管理', 'rebate_flow' => '返利流水', ], - 'analysis' => [ - 'attribute' => '分析报告', + 'analysis' => [ + 'attribute' => '分析报告', 'accounting' => '流水账簿', - 'user_flow' => '用户分析', + 'user_flow' => '用户分析', ], - 'log' => [ - 'attribute' => '日志系统', - 'traffic' => '流量使用', - 'traffic_flow' => '流量变动', - 'service_ban' => '封禁记录', - 'online_logs' => '在线记录', - 'online_monitor' => '在线监控', - 'notify' => '通知记录', + 'log' => [ + 'attribute' => '日志系统', + 'traffic' => '流量使用', + 'traffic_flow' => '流量变动', + 'service_ban' => '封禁记录', + 'online_logs' => '在线记录', + 'online_monitor' => '在线监控', + 'notify' => '通知记录', 'payment_callback' => '支付回调', - 'system' => '系统日志', + 'system' => '系统日志', ], - 'tools' => [ + 'tools' => [ 'attribute' => '工具箱', 'decompile' => '反解析', - 'convert' => '格式转换', - 'import' => '数据导入', - 'analysis' => '日志分析', + 'convert' => '格式转换', + 'import' => '数据导入', + 'analysis' => '日志分析', ], - 'setting' => [ - 'attribute' => '设置', + 'setting' => [ + 'attribute' => '设置', 'email_suffix' => '邮箱后缀管理', - 'universal' => '通用配置', - 'system' => '系统设置', + 'universal' => '通用配置', + 'system' => '系统设置', ], ], - 'user' => [ - 'massive' => [ - 'text' => '用户生成数量', - 'button' => '批量生成', - 'failed' => '批量生成账号失败', + 'user' => [ + 'massive' => [ + 'text' => '用户生成数量', + 'button' => '批量生成', + 'failed' => '批量生成账号失败', 'succeed' => '批量生成账号成功', - 'note' => '后台批量生成用户', + 'note' => '后台批量生成用户', ], - 'proxy_info' => '설정 정보', + 'proxy_info' => '설정 정보', 'traffic_monitor' => '流量统计', - 'online_monitor' => '在线巡查', - 'reset_traffic' => '데이터 재설정', - 'user_view' => '用户视角', + 'online_monitor' => '在线巡查', + 'reset_traffic' => '데이터 재설정', + 'user_view' => '用户视角', 'connection_test' => '联网测试', - 'counts' => '共 :num 个账号', - 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], - 'info' => [ - 'account' => '账号信息', - 'proxy' => '代理信息', - 'switch' => '切换身份', - 'reset_date_hint' => '账号流量下一个重置日期', - 'expired_date_hint' => '留空默认为一年', - 'uuid_hint' => 'V2Ray的账户ID', + 'counts' => '共 :num 个账号', + 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], + 'info' => [ + 'account' => '账号信息', + 'proxy' => '代理信息', + 'switch' => '切换身份', + 'reset_date_hint' => '账号流量下一个重置日期', + 'expired_date_hint' => '留空默认为一年', + 'uuid_hint' => 'V2Ray的账户ID', 'recharge_placeholder' => '填入负值则会扣余额', ], - 'update_help' => '更新成功,是否返回?', - 'proxies_config' => '【:username】连接配置信息', - 'group' => [ - 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', - 'name' => '分组名称', + 'update_help' => '更新成功,是否返回?', + 'proxies_config' => '【:username】连接配置信息', + 'group' => [ + 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', + 'name' => '分组名称', 'counts' => '共 :num 个分组', ], ], 'zero_unlimited_hint' => '不设置/0,即为无限制', - 'node' => [ + 'node' => [ 'traffic_monitor' => '流量统计', - 'refresh_geo' => '刷新地理', - 'ping' => '检测延迟', + 'refresh_geo' => '刷新地理', + 'ping' => '检测延迟', 'connection_test' => '连通性检测', - 'counts' => '共 :num 条线路', - 'reload_all' => '重载【全部】后端', + 'counts' => '共 :num 条线路', + 'reload_all' => '重载【全部】后端', 'refresh_geo_all' => '刷新【全部】节点地理信息', - 'reload_confirm' => '确定重载节点?', - 'info' => [ - 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', - 'basic' => '基础信息', - 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', - 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', - 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', - 'extend' => '扩展信息', - 'display' => [ + 'reload_confirm' => '确定重载节点?', + 'info' => [ + 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', + 'basic' => '基础信息', + 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', + 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', + 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', + 'extend' => '扩展信息', + 'display' => [ 'invisible' => '完全不可见', - 'node' => '只显示于【:trans】页面', - 'sub' => '只显示于【订 阅】', - 'all' => '完全可见', - 'hint' => '用户是否可以订阅/看到本节点', + 'node' => '只显示于【:trans】页面', + 'sub' => '只显示于【订 阅】', + 'all' => '完全可见', + 'hint' => '用户是否可以订阅/看到本节点', ], - 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv4_placeholder' => '服务器IPv4地址', - 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', - 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', - 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', - 'level_hint' => '等级:0-无等级,全部可见', - 'detection' => [ - 'tcp' => '只检测TCP', + 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv4_placeholder' => '服务器IPv4地址', + 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', + 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', + 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', + 'level_hint' => '等级:0-无等级,全部可见', + 'detection' => [ + 'tcp' => '只检测TCP', 'icmp' => '只检测ICMP', - 'all' => '检测全部', + 'all' => '检测全部', 'hint' => '每30~60分钟随机进行节点阻断检测', ], - 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', + 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', 'additional_ports_hint' => '如果启用请配置服务端的additional_ports信息', - 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', - 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', - 'v2_cover' => [ - 'none' => '无伪装', - 'http' => 'HTTP数据流', - 'srtp' => '视频通话数据 (SRTP)', - 'utp' => 'BT下载数据 (uTP)', - 'wechat' => '微信视频通话', - 'dtls' => 'DTLS1.2数据包', + 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', + 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', + 'v2_cover' => [ + 'none' => '无伪装', + 'http' => 'HTTP数据流', + 'srtp' => '视频通话数据 (SRTP)', + 'utp' => 'BT下载数据 (uTP)', + 'wechat' => '微信视频通话', + 'dtls' => 'DTLS1.2数据包', 'wireguard' => 'WireGuard数据包', ], - 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', - 'v2_tls_provider_hint' => '不同后端配置不同:', - 'single_hint' => '推荐80或443,服务端需要配置
      严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', + 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', + 'v2_tls_provider_hint' => '不同后端配置不同:', + 'single_hint' => '推荐80或443,服务端需要配置
      严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', ], - 'proxy_info' => '*兼容 SS', + 'proxy_info' => '*兼容 SS', 'proxy_info_hint' => '如果兼容请在服务端配置协议和混淆时加上_compatible', - 'reload' => '重载后端', - 'auth' => [ - 'title' => '节点授权列表WEBAPI', - 'deploy' => [ - 'title' => '部署 :type_label 后端', - 'attribute' => '部署后端', - 'command' => '操作命令', - 'update' => '更新:', - 'uninstall' => '卸载:', - 'start' => '启动:', - 'stop' => '停止:', - 'status' => '状态:', - 'recent_logs' => '近期日志:', + 'reload' => '重载后端', + 'auth' => [ + 'title' => '节点授权列表WEBAPI', + 'deploy' => [ + 'title' => '部署 :type_label 后端', + 'attribute' => '部署后端', + 'command' => '操作命令', + 'update' => '更新:', + 'uninstall' => '卸载:', + 'start' => '启动:', + 'stop' => '停止:', + 'status' => '状态:', + 'recent_logs' => '近期日志:', 'real_time_logs' => '实时日志:', - 'restart' => '重启:', - 'same' => '同上', - 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', + 'restart' => '重启:', + 'same' => '同上', + 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', ], - 'reset_auth' => '重置密钥', - 'counts' => '共 :num 条授权', + 'reset_auth' => '重置密钥', + 'counts' => '共 :num 条授权', 'generating_all' => '确定生成所有节点的授权吗?', ], - 'cert' => [ - 'title' => '域名证书列表(V2Ray节点的伪装域名)', - 'counts' => '共 :num 个域名证书', + 'cert' => [ + 'title' => '域名证书列表(V2Ray节点的伪装域名)', + 'counts' => '共 :num 个域名证书', 'key_placeholder' => '域名证书的KEY值,允许为空,VNET-V2Ray后端支持自动签证书', 'pem_placeholder' => '域名证书的PEM值,允许为空,VNET-V2Ray后端支持自动签证书', ], ], - 'hint' => '提示', - 'oauth' => [ - 'title' => '用户OAuth授权', + 'hint' => '提示', + 'oauth' => [ + 'title' => '用户OAuth授权', 'counts' => '共 :num 个授权', ], - 'select_all' => '全 选', - 'clear' => '清 空', - 'unselected_hint' => '待分配规则,此处可搜索', - 'selected_hint' => '已分配规则,此处可搜索', - 'clone' => '克隆', - 'monitor' => [ - 'daily_chart' => '每日流量图', + 'select_all' => '全 选', + 'clear' => '清 空', + 'unselected_hint' => '待分配规则,此处可搜索', + 'selected_hint' => '已分配规则,此处可搜索', + 'clone' => '克隆', + 'monitor' => [ + 'daily_chart' => '每日流量图', 'monthly_chart' => '月流量图', - 'node' => '节点流量', - 'user' => '用户流量', - 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', + 'node' => '节点流量', + 'user' => '用户流量', + 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', ], - 'tools' => [ - 'analysis' => [ - 'title' => 'SSR日志分析仅适用于单机单节点', - 'req_url' => '近期请求地址', + 'tools' => [ + 'analysis' => [ + 'title' => 'SSR日志分析仅适用于单机单节点', + 'req_url' => '近期请求地址', 'not_enough' => '访问记录不足15000条,无法分析数据', ], - 'convert' => [ - 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', + 'convert' => [ + 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', 'content_placeholder' => '请填入要转换的配置信息', ], 'decompile' => [ - 'title' => '反解析配置转换', - 'attribute' => '反解析', + 'title' => '反解析配置转换', + 'attribute' => '反解析', 'content_placeholder' => '请填入要反解析的ShadowsocksR链接,一行一条', ], ], - 'ticket' => [ - 'title' => '工单列表', - 'counts' => '共 :num 个工单', - 'send_to' => '请填入目标用户信息!', - 'user_info' => '用户信息', - 'inviter_info' => '邀请人信息', + 'ticket' => [ + 'title' => '工单列表', + 'counts' => '共 :num 个工单', + 'send_to' => '请填入目标用户信息!', + 'user_info' => '用户信息', + 'inviter_info' => '邀请人信息', 'close_confirm' => '确定关闭工单?', - 'error' => '未知错误!请查看运行日志', + 'error' => '未知错误!请查看运行日志', ], - 'logs' => [ - 'subscribe' => '订阅列表', - 'counts' => '共 :num 条记录', - 'rule' => [ - 'clear_all' => '清空记录', - 'title' => '触发记录', - 'name' => '触发规则', - 'reason' => '触发原因', - 'created_at' => '触发时间', - 'tag' => '✅ 访问非规则允许内容', + 'logs' => [ + 'subscribe' => '订阅列表', + 'counts' => '共 :num 条记录', + 'rule' => [ + 'clear_all' => '清空记录', + 'title' => '触发记录', + 'name' => '触发规则', + 'reason' => '触发原因', + 'created_at' => '触发时间', + 'tag' => '✅ 访问非规则允许内容', 'clear_confirm' => '确定清空所有记录吗?', ], - 'order' => [ - 'title' => '订单列表', + 'order' => [ + 'title' => '订单列表', 'is_expired' => '是否过期', - 'is_coupon' => '是否使用优惠券', + 'is_coupon' => '是否使用优惠券', ], - 'user_traffic' => [ - 'title' => '流量使用记录', + 'user_traffic' => [ + 'title' => '流量使用记录', 'choose_node' => '选择节点', ], 'user_data_modify_title' => '流量变动记录', - 'callback' => '回调日志 (在线支付)', - 'notification' => '邮件投递记录', - 'ip_monitor' => '在线IP监控 2分钟内的实时数据', - 'user_ip' => [ - 'title' => '用户在线IP列表 最近10分钟', + 'callback' => '回调日志 (在线支付)', + 'notification' => '邮件投递记录', + 'ip_monitor' => '在线IP监控 2分钟内的实时数据', + 'user_ip' => [ + 'title' => '用户在线IP列表 最近10分钟', 'connect' => '连接IP', ], - 'ban' => [ - 'title' => '用户封禁记录', - 'time' => '时长', - 'reason' => '理由', - 'ban_time' => '封禁时间', + 'ban' => [ + 'title' => '用户封禁记录', + 'time' => '时长', + 'reason' => '理由', + 'ban_time' => '封禁时间', 'last_connect_at' => '最后连接时间', ], - 'credit_title' => '余额变动记录', + 'credit_title' => '余额变动记录', ], - 'start_time' => '开始区间', - 'end_time' => '结束区间', - 'goods' => [ - 'title' => '商品列表', - 'type' => [ - 'top_up' => '충전', + 'start_time' => '开始区间', + 'end_time' => '结束区间', + 'goods' => [ + 'title' => '商品列表', + 'type' => [ + 'top_up' => '충전', 'package' => '流量包', - 'plan' => '套餐', + 'plan' => '套餐', ], - 'info' => [ - 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', - 'period_hint' => '套餐流量会每N天重置', - 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', + 'info' => [ + 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', + 'period_hint' => '套餐流量会每N天重置', + 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', 'available_date_hint' => '到期后会自动从总流量扣减对应的流量', - 'desc_placeholder' => '商品的简单描述', - 'list_placeholder' => '商品的自定义列表添加', - 'list_hint' => '每行内容请以<li> 开头</li> 结尾', + 'desc_placeholder' => '商品的简单描述', + 'list_placeholder' => '商品的自定义列表添加', + 'list_hint' => '每行内容请以<li> 开头</li> 结尾', ], - 'status' => [ + 'status' => [ 'yes' => '上架', - 'no' => '下架', + 'no' => '下架', ], 'sell_and_used' => '使用 / 销售', - 'counts' => '共 :num 个商品', + 'counts' => '共 :num 个商品', ], - 'sort_asc' => '排序值越大排越前', - 'yes' => '是', - 'no' => '否', - 'rule' => [ - 'type' => [ - 'reg' => '正则表达式', - 'domain' => '域名', - 'ip' => 'IP', + 'sort_asc' => '排序值越大排越前', + 'yes' => '是', + 'no' => '否', + 'rule' => [ + 'type' => [ + 'reg' => '正则表达式', + 'domain' => '域名', + 'ip' => 'IP', 'protocol' => '协议', ], 'counts' => '共 :num 条审计规则', - 'title' => '规则列表', - 'group' => [ - 'type' => [ + 'title' => '规则列表', + 'group' => [ + 'type' => [ 'off' => '阻断', - 'on' => '放行', + 'on' => '放行', ], - 'title' => '规则分组', + 'title' => '规则分组', 'counts' => '共 :num 个分组', ], ], - 'role' => [ - 'name_hint' => '唯一标识名称,例如:Administrator', + 'role' => [ + 'name_hint' => '唯一标识名称,例如:Administrator', 'description_hint' => '面板显示名称,例如:管理员', - 'title' => '权限角色列表', - 'permissions_all' => '全部权限', - 'counts' => '共 :num 个权限角色', + 'title' => '权限角色列表', + 'permissions_all' => '全部权限', + 'counts' => '共 :num 个权限角色', ], - 'report' => [ - 'monthly_accounting' => '月流水账簿', + 'report' => [ + 'monthly_accounting' => '月流水账簿', 'annually_accounting' => '年流水账簿', 'historic_accounting' => '历史流水账簿', - 'current_month' => '本 月', - 'last_month' => '上 月', - 'current_year' => '今 年', - 'last_year' => '去 年', - 'hourly_traffic' => '每时流量', - 'daily_traffic' => '每天流量', - 'today' => '本 日', + 'current_month' => '本 月', + 'last_month' => '上 月', + 'current_year' => '今 年', + 'last_year' => '去 年', + 'hourly_traffic' => '每时流量', + 'daily_traffic' => '每天流量', + 'today' => '本 日', ], - 'permission' => [ - 'title' => '权限行为列表', + 'permission' => [ + 'title' => '权限行为列表', 'description_hint' => '填写描述,例:【A系统】编辑A', - 'name_hint' => '填写路由名称,例:admin.permission.create,update', - 'counts' => '共 :num 条权限行为', + 'name_hint' => '填写路由名称,例:admin.permission.create,update', + 'counts' => '共 :num 条权限行为', ], - 'marketing' => [ - 'email' => [ - 'title' => '邮件群发列表', + 'marketing' => [ + 'email' => [ + 'title' => '邮件群发列表', 'group_send' => '群发邮件', - 'counts' => '共 :num 条消息', + 'counts' => '共 :num 条消息', ], - 'send_status' => '发送状态', - 'send_time' => '发送时间', + 'send_status' => '发送状态', + 'send_time' => '发送时间', 'error_message' => '错误信息', - 'push' => [ - 'title' => '推送消息列表', - 'send' => '推送消息', + 'push' => [ + 'title' => '推送消息列表', + 'send' => '推送消息', 'counts' => '共 :num 条推送消息', ], ], - 'creating' => '正在添加...', - 'article' => [ - 'type' => [ - 'knowledge' => '文章', + 'creating' => '正在添加...', + 'article' => [ + 'type' => [ + 'knowledge' => '文章', 'announcement' => '공지', ], 'category_hint' => '同一类别将归类与同一文件夹下', - 'logo_hint' => '推荐尺寸:100x75', - 'title' => '文章列表', - 'counts' => '共 :num 篇文章', + 'logo_hint' => '推荐尺寸:100x75', + 'title' => '文章列表', + 'counts' => '共 :num 篇文章', ], - 'coupon' => [ - 'title' => '卡券列表', - 'name_hint' => '会用于前端显示', - 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', - 'type' => [ - 'voucher' => '抵用券', + 'coupon' => [ + 'title' => '卡券列表', + 'name_hint' => '会用于前端显示', + 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', + 'type' => [ + 'voucher' => '抵用券', 'discount' => '折扣券', - 'charge' => '充值券', + 'charge' => '充值券', ], - 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', - 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', - 'value_hint' => '范围为 1% ~ 99% ', - 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', - 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', - 'used_hint' => '符合条件的用户可以使用本券 :num 次;', - 'levels_hint' => '用户等级在选定等级内,方可使用本券', - 'groups_hint' => '选定的用户分组,方可使用本券', - 'users_placeholder' => '输入用户ID, 再回车', - 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', - 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', - 'services_placeholder' => '输入商品ID, 再回车', + 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', + 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', + 'value_hint' => '范围为 1% ~ 99% ', + 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', + 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', + 'used_hint' => '符合条件的用户可以使用本券 :num 次;', + 'levels_hint' => '用户等级在选定等级内,方可使用本券', + 'groups_hint' => '选定的用户分组,方可使用本券', + 'users_placeholder' => '输入用户ID, 再回车', + 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', + 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', + 'services_placeholder' => '输入商品ID, 再回车', 'services_whitelist_hint' => '涉及商品方可使用本券,留空为不使用此条件', 'services_blacklist_hint' => '涉及商品不可使用本券,留空为不使用此条件', - 'newbie' => [ + 'newbie' => [ 'first_discount' => '首次用任意券', - 'first_order' => '首单', - 'created_days' => '创号', + 'first_order' => '首单', + 'created_days' => '创号', ], - 'created_days_hint' => '且 创号 :days 天', - 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', - 'info_title' => '卡券信息', - 'counts' => '共 :num 张优惠券', - 'discount' => '할인', - 'export_title' => '卡券导出', - 'single_use' => '一次性', + 'created_days_hint' => '且 创号 :days 天', + 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', + 'info_title' => '卡券信息', + 'counts' => '共 :num 张优惠券', + 'discount' => '할인', + 'export_title' => '卡券导出', + 'single_use' => '一次性', ], - 'times' => '次', - 'massive_export' => '批量导出', - 'system_generate' => '系统生成', - 'aff' => [ - 'rebate_title' => '返利流水记录', - 'counts' => '共 :num 个申请', - 'title' => '提现申请列表', - 'apply_counts' => '共 :num 个申请', - 'referral' => '推广返利', - 'commission_title' => '提现申请详情', + 'times' => '次', + 'massive_export' => '批量导出', + 'system_generate' => '系统生成', + 'aff' => [ + 'rebate_title' => '返利流水记录', + 'counts' => '共 :num 个申请', + 'title' => '提现申请列表', + 'apply_counts' => '共 :num 个申请', + 'referral' => '推广返利', + 'commission_title' => '提现申请详情', 'commission_counts' => '本申请共涉及 :num 单', ], - 'setting' => [ - 'common' => [ - 'title' => '通用配置', - 'set_default' => '设为默认', + 'setting' => [ + 'common' => [ + 'title' => '通用配置', + 'set_default' => '设为默认', 'connect_nodes' => '关联节点数', ], - 'email' => [ - 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', - 'tail' => '邮箱后缀', - 'rule' => '规则', - 'black' => '黑名单', - 'white' => '白名单', + 'email' => [ + 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', + 'tail' => '邮箱后缀', + 'rule' => '规则', + 'black' => '黑名单', + 'white' => '白名单', 'tail_placeholder' => '请填入邮箱后缀', ], - 'system' => [ - 'title' => '系统配置', - 'web' => '网站常规', - 'account' => '账号设置', - 'node' => '节点设置', - 'extend' => '拓展功能', - 'check_in' => '签到系统', + 'system' => [ + 'title' => '系统配置', + 'web' => '网站常规', + 'account' => '账号设置', + 'node' => '节点设置', + 'extend' => '拓展功能', + 'check_in' => '签到系统', 'promotion' => '推广系统', - 'notify' => '通知系统', - 'auto_job' => '自动任务', - 'other' => 'LOGO|客服|统计', - 'payment' => '支付系统', - 'menu' => '菜单', + 'notify' => '通知系统', + 'auto_job' => '自动任务', + 'other' => 'LOGO|客服|统计', + 'payment' => '支付系统', + 'menu' => '菜单', ], 'no_permission' => '您没有权限修改参数!', ], - 'system' => [ - 'account_expire_notification' => '账号过期通知', - 'active_times' => '激活账号次数', - 'admin_invite_days' => '管理员-邀请码有效期', - 'aff_salt' => '邀请链接 用户信息字符化', - 'alipay_qrcode' => '支付宝二维码', - 'AppStore_id' => '苹果账号', - 'AppStore_password' => '苹果密码', - 'auto_release_port' => '端口回收机制', - 'bark_key' => 'Bark设备号', - 'captcha_key' => '验证码 Key', - 'captcha_secret' => '验证码 Secret/ID', - 'codepay_id' => '码支付ID', - 'codepay_key' => '通信密钥', - 'codepay_url' => '请求URL', - 'data_anomaly_notification' => '流量异常通知', - 'data_exhaust_notification' => '流量耗尽通知', - 'ddns_key' => 'DNS服务商Key', - 'ddns_mode' => 'DDNS模式', - 'ddns_secret' => 'DNS服务商Secret', - 'default_days' => '初始有效期', - 'default_traffic' => '初始流量', - 'detection_check_times' => '阻断检测提醒', - 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', - 'dingTalk_secret' => '钉钉自定义机器人 密钥', - 'epay_key' => '商户密钥', - 'epay_mch_id' => '商户ID', - 'epay_url' => '接口对接地址', - 'expire_days' => '过期警告阈值', - 'f2fpay_app_id' => '应用ID', - 'f2fpay_private_key' => '应用私钥', - 'f2fpay_public_key' => '支付宝公钥', - 'forbid_mode' => '禁止访问模式', - 'invite_num' => '可生成邀请码数', - 'is_activate_account' => '激活账号', - 'is_AliPay' => '支付宝支付', - 'is_ban_status' => '过期自动封禁', - 'is_captcha' => '验证码模式', - 'is_checkin' => '签到加流量', - 'is_clear_log' => '自动清除日志', - 'is_custom_subscribe' => '高级订阅', - 'is_email_filtering' => '邮箱过滤机制', - 'is_forbid_robot' => '阻止机器人访问', - 'is_free_code' => '免费邀请码', - 'is_invite_register' => '邀请注册', - 'is_otherPay' => '特殊支付', - 'is_QQPay' => 'QQ钱包', - 'is_rand_port' => '随机端口', - 'is_register' => '用户注册', - 'is_subscribe_ban' => '订阅异常自动封禁', - 'is_traffic_ban' => '异常自动封号', - 'is_WeChatPay' => '微信支付', - 'iYuu_token' => 'IYUU令牌', - 'maintenance_content' => '维护介绍内容', - 'maintenance_mode' => 'Maintenance Mode', - 'maintenance_time' => '维护结束时间', - 'min_port' => '端口范围', - 'min_rand_traffic' => '流量范围', - 'node_blocked_notification' => '节点阻断提醒', - 'node_daily_notification' => '节点使用报告', - 'node_offline_notification' => '节点离线提醒', - 'oauth_path' => '第三方登录平台', - 'offline_check_times' => '离线提醒次数', - 'password_reset_notification' => '비밀번호 재설정', - 'paybeaver_app_id' => 'App ID', - 'paybeaver_app_secret' => 'App Secret', - 'payjs_key' => '通信密钥', - 'payjs_mch_id' => '商户号', - 'payment_confirm_notification' => '人工支付确认通知', + 'system' => [ + 'account_expire_notification' => '账号过期通知', + 'active_times' => '激活账号次数', + 'admin_invite_days' => '管理员-邀请码有效期', + 'aff_salt' => '邀请链接 用户信息字符化', + 'alipay_qrcode' => '支付宝二维码', + 'AppStore_id' => '苹果账号', + 'AppStore_password' => '苹果密码', + 'auto_release_port' => '端口回收机制', + 'bark_key' => 'Bark设备号', + 'captcha_key' => '验证码 Key', + 'captcha_secret' => '验证码 Secret/ID', + 'codepay_id' => '码支付ID', + 'codepay_key' => '通信密钥', + 'codepay_url' => '请求URL', + 'data_anomaly_notification' => '流量异常通知', + 'data_exhaust_notification' => '流量耗尽通知', + 'ddns_key' => 'DNS服务商Key', + 'ddns_mode' => 'DDNS模式', + 'ddns_secret' => 'DNS服务商Secret', + 'default_days' => '初始有效期', + 'default_traffic' => '初始流量', + 'detection_check_times' => '阻断检测提醒', + 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', + 'dingTalk_secret' => '钉钉自定义机器人 密钥', + 'epay_key' => '商户密钥', + 'epay_mch_id' => '商户ID', + 'epay_url' => '接口对接地址', + 'expire_days' => '过期警告阈值', + 'f2fpay_app_id' => '应用ID', + 'f2fpay_private_key' => '应用私钥', + 'f2fpay_public_key' => '支付宝公钥', + 'forbid_mode' => '禁止访问模式', + 'invite_num' => '可生成邀请码数', + 'is_activate_account' => '激活账号', + 'is_AliPay' => '支付宝支付', + 'is_ban_status' => '过期自动封禁', + 'is_captcha' => '验证码模式', + 'is_checkin' => '签到加流量', + 'is_clear_log' => '自动清除日志', + 'is_custom_subscribe' => '高级订阅', + 'is_email_filtering' => '邮箱过滤机制', + 'is_forbid_robot' => '阻止机器人访问', + 'is_free_code' => '免费邀请码', + 'is_invite_register' => '邀请注册', + 'is_otherPay' => '特殊支付', + 'is_QQPay' => 'QQ钱包', + 'is_rand_port' => '随机端口', + 'is_register' => '用户注册', + 'is_subscribe_ban' => '订阅异常自动封禁', + 'is_traffic_ban' => '异常自动封号', + 'is_WeChatPay' => '微信支付', + 'iYuu_token' => 'IYUU令牌', + 'maintenance_content' => '维护介绍内容', + 'maintenance_mode' => 'Maintenance Mode', + 'maintenance_time' => '维护结束时间', + 'min_port' => '端口范围', + 'min_rand_traffic' => '流量范围', + 'node_blocked_notification' => '节点阻断提醒', + 'node_daily_notification' => '节点使用报告', + 'node_offline_notification' => '节点离线提醒', + 'oauth_path' => '第三方登录平台', + 'offline_check_times' => '离线提醒次数', + 'password_reset_notification' => '비밀번호 재설정', + 'paybeaver_app_id' => 'App ID', + 'paybeaver_app_secret' => 'App Secret', + 'payjs_key' => '通信密钥', + 'payjs_mch_id' => '商户号', + 'payment_confirm_notification' => '人工支付确认通知', 'payment_received_notification' => '支付成功通知', - 'paypal_app_id' => '应用ID', - 'paypal_certificate' => '证书', - 'paypal_password' => 'API密码', - 'paypal_secret' => '签名', - 'paypal_username' => 'API用户名', - 'pushDeer_key' => 'PushDeer Key', - 'pushplus_token' => 'PushPlus Token', - 'rand_subscribe' => '随机订阅', - 'redirect_url' => '重定向地址', - 'referral_money' => '提现限制', - 'referral_percent' => '返利比例', - 'referral_status' => '推广功能', - 'referral_traffic' => '注册送流量', - 'referral_type' => '返利模式', - 'register_ip_limit' => '同IP注册限制', - 'reset_password_times' => '重置密码次数', - 'reset_traffic' => '流量自动重置', - 'server_chan_key' => 'ServerChan SCKEY', - 'standard_currency' => '本位货币', - 'stripe_public_key' => 'Public Key', - 'stripe_secret_key' => 'Secret Key', - 'stripe_signing_secret' => 'WebHook Signing secret', - 'subject_name' => '自定义商品名称', - 'subscribe_ban_times' => '订阅请求阈值', - 'subscribe_domain' => '节点订阅地址', - 'subscribe_max' => '订阅节点数', - 'telegram_token' => 'Telegram Token', - 'tg_chat_token' => 'TG酱Token', - 'theadpay_key' => '商家密钥', - 'theadpay_mchid' => '商家ID', - 'theadpay_url' => '接口地址', - 'ticket_closed_notification' => '工单关闭通知', - 'ticket_created_notification' => '新工单通知', - 'ticket_replied_notification' => '工单回复通知', - 'traffic_ban_time' => '封号时长', - 'traffic_ban_value' => '流量异常阈值', - 'traffic_limit_time' => '时间间隔', - 'traffic_warning_percent' => '流量警告阈值', - 'trojan_license' => 'Trojan授权', - 'username_type' => '账号类型', - 'user_invite_days' => '用户-邀请码有效期', - 'v2ray_license' => 'V2Ray授权', - 'v2ray_tls_provider' => 'V2Ray TLS配置', - 'webmaster_email' => '管理员邮箱', - 'website_analytics' => '统计代码', - 'website_callback_url' => '通用支付回调地址', - 'website_customer_service' => '客服代码', - 'website_home_logo' => '首页LOGO', - 'website_logo' => '站内LOGO', - 'website_name' => '网站名称', - 'website_security_code' => '网站安全码', - 'website_url' => '网站地址', - 'web_api_url' => '授权/后端访问域名', - 'wechat_aid' => '微信企业应用ID', - 'wechat_cid' => '微信企业ID', - 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', - 'wechat_qrcode' => '微 信二维码', - 'wechat_secret' => '微信企业应用密钥', - 'wechat_token' => '微信企业应用TOKEN', - 'hint' => [ - 'account_expire_notification' => '通知用户账号即将到期', - 'active_times' => '24小时内可以通过邮件激活账号次数', - 'admin_invite_days' => '管理员生成邀请码的有效期', - 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', - 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', - 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', - 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', - 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', - 'captcha_key' => '浏览设置指南来设置', - 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', - 'data_exhaust_notification' => '通知用户流量即将耗尽', - 'ddns_key' => "浏览设置指南来设置", - 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', - 'default_days' => '用户注册时默认账户有效期,为0即当天到期', - 'default_traffic' => '用户注册时默认可用流量', - 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', - 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', - 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', - 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', - 'f2fpay_app_id' => '即:APPID', - 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', - 'f2fpay_public_key' => '注意不是应用公钥!', - 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', - 'invite_num' => '用户可以生成的邀请码数', - 'is_activate_account' => '启用后用户需要通过邮件来激活账号', - 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', - 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', - 'is_checkin' => '登录时将根据流量范围随机得到流量', - 'is_clear_log' => '(推荐)启用后自动清除无用日志', - 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', - 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', - 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', - 'is_free_code' => '关闭后免费邀请码不可见', - 'is_rand_port' => '注册、添加用户时随机生成端口', - 'is_register' => '关闭后无法注册', - 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', - 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', - 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', - 'maintenance_content' => '自定义维护内容信息', - 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", - 'maintenance_time' => '用于维护界面倒计时', - 'min_port' => '端口范围:1000 - 65535', - 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', - 'node_daily_notification' => '报告各节点流量昨日消耗情况', - 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', - 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', - 'offline_check_times' => '24小时内提醒n次后不再提醒', - 'password_reset_notification' => '启用后用户可以重置密码', - 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', - 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', - 'payjs_mch_id' => '在本界面获取信息', - 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', + 'paypal_app_id' => '应用ID', + 'paypal_certificate' => '证书', + 'paypal_password' => 'API密码', + 'paypal_secret' => '签名', + 'paypal_username' => 'API用户名', + 'pushDeer_key' => 'PushDeer Key', + 'pushplus_token' => 'PushPlus Token', + 'rand_subscribe' => '随机订阅', + 'redirect_url' => '重定向地址', + 'referral_money' => '提现限制', + 'referral_percent' => '返利比例', + 'referral_status' => '推广功能', + 'referral_traffic' => '注册送流量', + 'referral_type' => '返利模式', + 'register_ip_limit' => '同IP注册限制', + 'reset_password_times' => '重置密码次数', + 'reset_traffic' => '流量自动重置', + 'server_chan_key' => 'ServerChan SCKEY', + 'standard_currency' => '本位货币', + 'stripe_public_key' => 'Public Key', + 'stripe_secret_key' => 'Secret Key', + 'stripe_signing_secret' => 'WebHook Signing secret', + 'subject_name' => '自定义商品名称', + 'subscribe_ban_times' => '订阅请求阈值', + 'subscribe_domain' => '节点订阅地址', + 'subscribe_max' => '订阅节点数', + 'telegram_token' => 'Telegram Token', + 'tg_chat_token' => 'TG酱Token', + 'theadpay_key' => '商家密钥', + 'theadpay_mchid' => '商家ID', + 'theadpay_url' => '接口地址', + 'ticket_closed_notification' => '工单关闭通知', + 'ticket_created_notification' => '新工单通知', + 'ticket_replied_notification' => '工单回复通知', + 'traffic_ban_time' => '封号时长', + 'traffic_ban_value' => '流量异常阈值', + 'traffic_limit_time' => '时间间隔', + 'traffic_warning_percent' => '流量警告阈值', + 'trojan_license' => 'Trojan授权', + 'username_type' => '账号类型', + 'user_invite_days' => '用户-邀请码有效期', + 'v2ray_license' => 'V2Ray授权', + 'v2ray_tls_provider' => 'V2Ray TLS配置', + 'webmaster_email' => '管理员邮箱', + 'website_analytics' => '统计代码', + 'website_callback_url' => '通用支付回调地址', + 'website_customer_service' => '客服代码', + 'website_home_logo' => '首页LOGO', + 'website_logo' => '站内LOGO', + 'website_name' => '网站名称', + 'website_security_code' => '网站安全码', + 'website_url' => '网站地址', + 'web_api_url' => '授权/后端访问域名', + 'wechat_aid' => '微信企业应用ID', + 'wechat_cid' => '微信企业ID', + 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', + 'wechat_qrcode' => '微 信二维码', + 'wechat_secret' => '微信企业应用密钥', + 'wechat_token' => '微信企业应用TOKEN', + 'hint' => [ + 'account_expire_notification' => '通知用户账号即将到期', + 'active_times' => '24小时内可以通过邮件激活账号次数', + 'admin_invite_days' => '管理员生成邀请码的有效期', + 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', + 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', + 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', + 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', + 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', + 'captcha_key' => '浏览设置指南来设置', + 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', + 'data_exhaust_notification' => '通知用户流量即将耗尽', + 'ddns_key' => "浏览设置指南来设置", + 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', + 'default_days' => '用户注册时默认账户有效期,为0即当天到期', + 'default_traffic' => '用户注册时默认可用流量', + 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', + 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', + 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', + 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', + 'f2fpay_app_id' => '即:APPID', + 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', + 'f2fpay_public_key' => '注意不是应用公钥!', + 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', + 'invite_num' => '用户可以生成的邀请码数', + 'is_activate_account' => '启用后用户需要通过邮件来激活账号', + 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', + 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', + 'is_checkin' => '登录时将根据流量范围随机得到流量', + 'is_clear_log' => '(推荐)启用后自动清除无用日志', + 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', + 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', + 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', + 'is_free_code' => '关闭后免费邀请码不可见', + 'is_rand_port' => '注册、添加用户时随机生成端口', + 'is_register' => '关闭后无法注册', + 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', + 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', + 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', + 'maintenance_content' => '自定义维护内容信息', + 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", + 'maintenance_time' => '用于维护界面倒计时', + 'min_port' => '端口范围:1000 - 65535', + 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', + 'node_daily_notification' => '报告各节点流量昨日消耗情况', + 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', + 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', + 'offline_check_times' => '24小时内提醒n次后不再提醒', + 'password_reset_notification' => '启用后用户可以重置密码', + 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', + 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', + 'payjs_mch_id' => '在本界面获取信息', + 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', 'payment_received_notification' => '用户支付订单后通知用户订单状态', - 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', - 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', - 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', - 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', - 'referral_money' => '满多少元才可以申请提现', - 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', - 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', - 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', - 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', - 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', - 'reset_password_times' => '24小时内可以通过邮件重置密码次数', - 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', - 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', - 'standard_currency' => '网站中涉及金钱部分的默认货币', - 'subject_name' => '用于在支付渠道的商品标题显示', - 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', - 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', - 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', - 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', - 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', - 'ticket_closed_notification' => '工单关闭通知用户', - 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', - 'ticket_replied_notification' => '工单回复通知对方', - 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', - 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', - 'traffic_limit_time' => '间隔多久才可以再次签到', - 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', - 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', - 'user_invite_days' => '用户自行生成邀请的有效期', - 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', - 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', - 'website_analytics' => '统计JS', - 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', - 'website_customer_service' => '客服JS', - 'website_name' => '发邮件时展示', - 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', - 'website_url' => '生成重置密码、在线支付必备', - 'web_api_url' => '例:https://demo.proxypanel.cf', - 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', - 'wechat_cid' => '获取我的企业中的企业ID', - 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', - 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', - 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', + 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', + 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', + 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', + 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', + 'referral_money' => '满多少元才可以申请提现', + 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', + 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', + 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', + 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', + 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', + 'reset_password_times' => '24小时内可以通过邮件重置密码次数', + 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', + 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', + 'standard_currency' => '网站中涉及金钱部分的默认货币', + 'subject_name' => '用于在支付渠道的商品标题显示', + 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', + 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', + 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', + 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', + 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', + 'ticket_closed_notification' => '工单关闭通知用户', + 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', + 'ticket_replied_notification' => '工单回复通知对方', + 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', + 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', + 'traffic_limit_time' => '间隔多久才可以再次签到', + 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', + 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', + 'user_invite_days' => '用户自行生成邀请的有效期', + 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', + 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', + 'website_analytics' => '统计JS', + 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', + 'website_customer_service' => '客服JS', + 'website_name' => '发邮件时展示', + 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', + 'website_url' => '生成重置密码、在线支付必备', + 'web_api_url' => '例:https://demo.proxypanel.cf', + 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', + 'wechat_cid' => '获取我的企业中的企业ID', + 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', + 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', + 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', ], - 'placeholder' => [ - 'default_url' => '默认为 :url', - 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', - 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', - 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', - 'bark_key' => '填入Bark的设备号 -> 再点击更新', - 'telegram_token' => '填入Telegram的 Token -> 再点击更新', - 'pushplus_token' => '请到ServerChan申请', + 'placeholder' => [ + 'default_url' => '默认为 :url', + 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', + 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', + 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', + 'bark_key' => '填入Bark的设备号 -> 再点击更新', + 'telegram_token' => '填入Telegram的 Token -> 再点击更新', + 'pushplus_token' => '请到ServerChan申请', 'dingTalk_access_token' => '自定义机器人的WebHook中的access_token', - 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', - 'wechat_aid' => '应用的AgentId', - 'wechat_cid' => '填入微信企业ID -> 再点击更新', - 'wechat_secret' => '应用的Secret', - 'tg_chat_token' => '请到Telegram申请', - 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', + 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', + 'wechat_aid' => '应用的AgentId', + 'wechat_cid' => '填入微信企业ID -> 再点击更新', + 'wechat_secret' => '应用的Secret', + 'tg_chat_token' => '请到Telegram申请', + 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', ], - 'payment' => [ + 'payment' => [ 'attribute' => '支付设置', - 'channel' => [ - 'alipay' => '支付宝F2F', - 'codepay' => '码支付', - 'epay' => '易支付', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal', - 'stripe' => 'Stripe', + 'channel' => [ + 'alipay' => '支付宝F2F', + 'codepay' => '码支付', + 'epay' => '易支付', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal', + 'stripe' => 'Stripe', 'paybeaver' => '海狸支付', - 'theadpay' => '平头哥支付', - 'manual' => '人工支付', + 'theadpay' => '平头哥支付', + 'manual' => '人工支付', ], - 'hint' => [ - 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', - 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', - 'payjs' => '请到PayJs 申请账号', - 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', + 'hint' => [ + 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', + 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', + 'payjs' => '请到PayJs 申请账号', + 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', 'paybeaver' => '请到海狸支付 PayBeaver申请账号', - 'theadpay' => '请到平头哥支付 THeadPay申请账号', - 'manual' => '设置后会自动开启对应显示', + 'theadpay' => '请到平头哥支付 THeadPay申请账号', + 'manual' => '设置后会自动开启对应显示', ], ], - 'notification' => [ - 'channel' => [ - 'telegram' => 'TG电报', - 'wechat' => '微信企业', - 'dingtalk' => '钉钉', - 'email' => '이메일', - 'bark' => 'Bark', + 'notification' => [ + 'channel' => [ + 'telegram' => 'TG电报', + 'wechat' => '微信企业', + 'dingtalk' => '钉钉', + 'email' => '이메일', + 'bark' => 'Bark', 'serverchan' => 'ServerChan', - 'pushdeer' => 'PushDeer', - 'pushplus' => 'PushPlus', - 'iyuu' => '爱语飞飞', - 'tg_chat' => 'TG酱', - 'site' => '站内通知', + 'pushdeer' => 'PushDeer', + 'pushplus' => 'PushPlus', + 'iyuu' => '爱语飞飞', + 'tg_chat' => 'TG酱', + 'site' => '站内通知', ], 'send_test' => '发送测试消息', ], - 'forbid' => [ + 'forbid' => [ 'mainland' => '阻拦大陆', - 'china' => '阻拦中国', - 'oversea' => '阻拦海外', + 'china' => '阻拦中国', + 'oversea' => '阻拦海外', ], - 'username' => [ - 'email' => '电子邮箱', + 'username' => [ + 'email' => '电子邮箱', 'mobile' => '手机号码', - 'any' => '任意用户名', + 'any' => '任意用户名', ], - 'active_account' => [ + 'active_account' => [ 'before' => '注册前激活', - 'after' => '注册后激活', + 'after' => '注册后激活', ], - 'ddns' => [ - 'namesilo' => 'Namesilo', - 'aliyun' => '阿里云(国际&国内)', - 'dnspod' => 'DNSPod', + 'ddns' => [ + 'namesilo' => 'Namesilo', + 'aliyun' => '阿里云(国际&国内)', + 'dnspod' => 'DNSPod', 'cloudflare' => 'CloudFlare', ], - 'captcha' => [ - 'standard' => '普通验证码', - 'geetest' => '极 验', + 'captcha' => [ + 'standard' => '普通验证码', + 'geetest' => '极 验', 'recaptcha' => 'Google reCaptcha', - 'hcaptcha' => 'hCaptcha', + 'hcaptcha' => 'hCaptcha', ], - 'referral' => [ + 'referral' => [ 'once' => '首购返利', 'loop' => '循环返利', ], ], - 'set_to' => '置 :attribute', - 'minute' => '分钟', - 'query' => '查 询', - 'optional' => '옵션', - 'require' => '必须', + 'set_to' => '置 :attribute', + 'minute' => '分钟', + 'query' => '查 询', + 'optional' => '옵션', + 'require' => '必须', ]; diff --git a/resources/lang/ko/auth.php b/resources/lang/ko/auth.php index 2088f8b8..c5525f44 100644 --- a/resources/lang/ko/auth.php +++ b/resources/lang/ko/auth.php @@ -1,98 +1,98 @@ '약관을 확인하였으며, 이에 동의합니다.', - 'active' => [ + 'accept_term' => '약관을 확인하였으며, 이에 동의합니다.', + 'active' => [ 'attribute' => '활성화', - 'error' => [ + 'error' => [ 'activated' => '계정이 이미 활성화 되어있습니다. 다시 활성화할 필요가 없습니다.', - 'disable' => '이 사이트는 계정 활성화 시스템을 사용하지 않습니다. 사이트로 가서 로그인 해주세요!', - 'throttle' => '회원님의 비정상적인 행동이 감지되었습니다. 조작에 주의부탁드립니다! 문제가 있을 경우 이메일로 연락주세요.', + 'disable' => '이 사이트는 계정 활성화 시스템을 사용하지 않습니다. 사이트로 가서 로그인 해주세요!', + 'throttle' => '회원님의 비정상적인 행동이 감지되었습니다. 조작에 주의부탁드립니다! 문제가 있을 경우 이메일로 연락주세요.', ], 'promotion' => '계정이 아직 활성화되지 않은 경우 먼저 [:action]하세요!', - 'sent' => '활성화코드가 이미 회원님의 이메일로 전송되었습니다. 잠시 후에 메일 확인이 안 될 경우, 휴지통이나 스팸차단을 확인해주세요.', + 'sent' => '활성화코드가 이미 회원님의 이메일로 전송되었습니다. 잠시 후에 메일 확인이 안 될 경우, 휴지통이나 스팸차단을 확인해주세요.', ], - 'aup' => '수용가능한 이용약관', - 'captcha' => [ + 'aup' => '수용가능한 이용약관', + 'captcha' => [ 'attribute' => '인증번호', - 'error' => [ - 'failed' => '인증번호 확인 실패, 다시 입력해주세요.', + 'error' => [ + 'failed' => '인증번호 확인 실패, 다시 입력해주세요.', 'timeout' => '인증번호가 올바르지 않습니다! 제한시간이 지났거나 새로고침하여 다시 시도해주세요.', ], - 'required' => '인증번호를 정확하게 입력해주세요.', - 'sent' => '인증번호가 메일로 전송되었습니다. 잠시 후에 도착하지 않을 경우 휴지통이나 스팸차단을 확인해주세요', + 'required' => '인증번호를 정확하게 입력해주세요.', + 'sent' => '인증번호가 메일로 전송되었습니다. 잠시 후에 도착하지 않을 경우 휴지통이나 스팸차단을 확인해주세요', ], - 'email' => [ + 'email' => [ 'error' => [ - 'banned' => '사이트에서 고객님이 사용하시는 이메일을 차단하였습니다. 다른 유효한 이메일을 사용해주세요.', + 'banned' => '사이트에서 고객님이 사용하시는 이메일을 차단하였습니다. 다른 유효한 이메일을 사용해주세요.', 'invalid' => '지원하지 않는 이메일 형식입니다.', ], ], - 'error' => [ - 'account_baned' => '회원님의 계정은 차단되었습니다!', - 'login_error' => '로그인 오류, 잠시 후 다시 시도해주세요!', - 'login_failed' => '로그인 실패, 이메일계정과 비밀번호를 정확하게 입력해주세요!', + 'error' => [ + 'account_baned' => '회원님의 계정은 차단되었습니다!', + 'login_error' => '로그인 오류, 잠시 후 다시 시도해주세요!', + 'login_failed' => '로그인 실패, 이메일계정과 비밀번호를 정확하게 입력해주세요!', 'not_found_user' => '해당 계정을 찾을 수 없습니다. 다른 방식으로 로그인해주세요.', 'repeat_request' => '새로 고침 후 다시 시도해 주시기 바랍니다.', - 'url_timeout' => '연결 실패, 다시 시도해주세요.', + 'url_timeout' => '연결 실패, 다시 시도해주세요.', ], - 'failed' => '제출된 인증 정보가 레코드와 일치하지 않습니다.', - 'invite' => [ - 'attribute' => '초대 코드', - 'error' => [ + 'failed' => '제출된 인증 정보가 레코드와 일치하지 않습니다.', + 'invite' => [ + 'attribute' => '초대 코드', + 'error' => [ 'unavailable' => '초대코드 사용불가. 다시 시도해주세요.', ], - 'get' => '초대 코드를 받기', + 'get' => '초대 코드를 받기', 'not_required' => '초대 코드없이 회원가입을 진행해주세요!', ], - 'login' => '로그인', - 'logout' => '로그아웃', - 'maintenance' => '보호', + 'login' => '로그인', + 'logout' => '로그아웃', + 'maintenance' => '보호', 'maintenance_tip' => '사이트 점검 중', - 'oauth' => [ - 'bind_failed' => '연동 실패', - 'bind_success' => '연동 성공', - 'login_failed' => '중복 접속 실패!', - 'rebind_success' => '재연동 성공', - 'register' => '회원가입 바로가기', + 'oauth' => [ + 'bind_failed' => '연동 실패', + 'bind_success' => '연동 성공', + 'login_failed' => '중복 접속 실패!', + 'rebind_success' => '재연동 성공', + 'register' => '회원가입 바로가기', 'register_failed' => '회원가입 실패', - 'registered' => '이미 가입되셨습니다, 로그인 해주세요.', - 'unbind_failed' => '연동 해제 실패', - 'unbind_success' => '연동 해제 성공', + 'registered' => '이미 가입되셨습니다, 로그인 해주세요.', + 'unbind_failed' => '연동 해제 실패', + 'unbind_success' => '연동 해제 성공', ], - 'optional' => '옵션', - 'password' => [ - 'forget' => '비밀번호를 잊으셨나요?', - 'new' => '새로운 비밀번호를 입력하세요', + 'optional' => '옵션', + 'password' => [ + 'forget' => '비밀번호를 잊으셨나요?', + 'new' => '새로운 비밀번호를 입력하세요', 'original' => '이전 비밀번호', - 'reset' => [ + 'reset' => [ 'attribute' => '비밀번호 재설정', - 'error' => [ + 'error' => [ 'disabled' => '현재 비밀번호 재설정이 불가합니다. 다음 이메일로 연락 주세요: email', - 'failed' => '비밀번호 재설정 실패', + 'failed' => '비밀번호 재설정 실패', 'throttle' => '24시간 이내 비밀번호 재설정 : time 회만 가능, 잦은 시도를 하지 마십시오.', - 'same' => '새 비밀번호는 기존 비밀번호와 같을 수 없습니다, 다시 입력해주세요.', - 'wrong' => '이진 비밀번호 오류, 다시 입력해주세요.', - 'demo' => '관리자 페이지 비밀번호 변경 금지', + 'same' => '새 비밀번호는 기존 비밀번호와 같을 수 없습니다, 다시 입력해주세요.', + 'wrong' => '이진 비밀번호 오류, 다시 입력해주세요.', + 'demo' => '관리자 페이지 비밀번호 변경 금지', ], - 'sent' => '재설정 성공, 모든 이메일을 확인해주세요. (없을 경우 스팸메일 확인)', - 'success' => '새 비밀번호 설정 성공, 로그인 페이지로 가십시오.', + 'sent' => '재설정 성공, 모든 이메일을 확인해주세요. (없을 경우 스팸메일 확인)', + 'success' => '새 비밀번호 설정 성공, 로그인 페이지로 가십시오.', ], ], - 'register' => [ + 'register' => [ 'attribute' => '회원가입', - 'code' => '회원가입 인증번호', - 'error' => [ - 'disable' => '죄송합니다. 현재 회원가입이 불가합니다.', + 'code' => '회원가입 인증번호', + 'error' => [ + 'disable' => '죄송합니다. 현재 회원가입이 불가합니다.', 'throttle' => '防刷机制已激活,请勿频繁注册', ], - 'failed' => '회원가입 실패, 잠시 후 다시 시도해주세요.', + 'failed' => '회원가입 실패, 잠시 후 다시 시도해주세요.', 'promotion' => '아직 계정이 없으신가요?', - 'success' => '회원가입 성공', + 'success' => '회원가입 성공', ], - 'remember_me' => '로그인 상태 유지', - 'request' => '획득', - 'throttle' => '너무 많은 로그인을 시도하였습니다. :seconds 초 후에 다시 시도하십시오.', - 'tos' => '이용 약관', + 'remember_me' => '로그인 상태 유지', + 'request' => '획득', + 'throttle' => '너무 많은 로그인을 시도하였습니다. :seconds 초 후에 다시 시도하십시오.', + 'tos' => '이용 약관', 'one-click_login' => '一键登录', ]; diff --git a/resources/lang/ko/common.php b/resources/lang/ko/common.php index b6480158..542c053c 100644 --- a/resources/lang/ko/common.php +++ b/resources/lang/ko/common.php @@ -1,87 +1,87 @@ '시', - 'account' => '아이디', - 'available_date' => '유효기간', - 'created_at' => '创建时间', - 'expired_at' => '만료시간', - 'updated_at' => '갱신시간', - 'latest_at' => '最近时间', - 'back' => '뒤로가기', - 'cancel' => '취소', - 'close' => '닫기', - 'close_item' => '닫기:attribute', - 'confirm' => '확인', - 'continues' => '계속', - 'open' => '열기', - 'send' => '전송', - 'view' => '보기', - 'reset' => '재설정', - 'copy' => [ + 'hour' => '시', + 'account' => '아이디', + 'available_date' => '유효기간', + 'created_at' => '创建时间', + 'expired_at' => '만료시간', + 'updated_at' => '갱신시간', + 'latest_at' => '最近时间', + 'back' => '뒤로가기', + 'cancel' => '취소', + 'close' => '닫기', + 'close_item' => '닫기:attribute', + 'confirm' => '확인', + 'continues' => '계속', + 'open' => '열기', + 'send' => '전송', + 'view' => '보기', + 'reset' => '재설정', + 'copy' => [ 'attribute' => '복사', - 'success' => '복사 성공', - 'failed' => '복사 실패, 수동으로 복사해주세요.', + 'success' => '복사 성공', + 'failed' => '복사 실패, 수동으로 복사해주세요.', ], - 'add' => '添 加', - 'free' => '무료', - 'replace' => '변경', - 'submit' => '제출', - 'submit_item' => '제출:attribute', - 'generate' => '생성', - 'generate_item' => '생성:attribute', - 'to_safari' => [0 => '이용자약관', 1 => ', 여기서 선택해주세요.', 2 => 'Safari 로 열어주세요.', 3 => '정상적으로 본 사이트에 접속이 가능합니다.'], - 'update_browser' => [0 => '고객님은 현재 사용 중', 1 => '만료', 2 => '의 부라우저.', 3 => '브라우저를 업데이트 해주세요.', 4 => '최고 환경에서의 웹서핑을 느끼기 위해'], - 'apply' => '응용', - 'avatar' => '프로필', - 'customize' => '사용자 정의', - 'all' => '전체', - 'default' => '기본값', - 'download' => '下 载', - 'goto' => '이전', - 'warning' => '경고', - 'success' => '성공', - 'success_item' => ':attribute成功', - 'failed' => '실패', - 'failed_item' => ':attribute失败', - 'update' => '갱신', - 'update_action' => '갱신:action', - 'none' => '없음', - 'new' => '신규', - 'sorry' => '죄송합니다', - 'applied' => ':attribute 발생', - 'active_item' => ':attribute 활성화', - 'error' => '错误', - 'toggle' => '切 换', - 'toggle_action' => '切换:action', - 'request_url' => '请求地址', - 'function' => [ + 'add' => '添 加', + 'free' => '무료', + 'replace' => '변경', + 'submit' => '제출', + 'submit_item' => '제출:attribute', + 'generate' => '생성', + 'generate_item' => '생성:attribute', + 'to_safari' => [0 => '이용자약관', 1 => ', 여기서 선택해주세요.', 2 => 'Safari 로 열어주세요.', 3 => '정상적으로 본 사이트에 접속이 가능합니다.'], + 'update_browser' => [0 => '고객님은 현재 사용 중', 1 => '만료', 2 => '의 부라우저.', 3 => '브라우저를 업데이트 해주세요.', 4 => '최고 환경에서의 웹서핑을 느끼기 위해'], + 'apply' => '응용', + 'avatar' => '프로필', + 'customize' => '사용자 정의', + 'all' => '전체', + 'default' => '기본값', + 'download' => '下 载', + 'goto' => '이전', + 'warning' => '경고', + 'success' => '성공', + 'success_item' => ':attribute成功', + 'failed' => '실패', + 'failed_item' => ':attribute失败', + 'update' => '갱신', + 'update_action' => '갱신:action', + 'none' => '없음', + 'new' => '신규', + 'sorry' => '죄송합니다', + 'applied' => ':attribute 발생', + 'active_item' => ':attribute 활성화', + 'error' => '错误', + 'toggle' => '切 换', + 'toggle_action' => '切换:action', + 'request_url' => '请求地址', + 'function' => [ 'navigation' => '导航', - 'menubar' => '菜单栏', + 'menubar' => '菜单栏', 'fullscreen' => '全屏', ], - 'days' => [ + 'days' => [ 'attribute' => '일 | 일', - 'sun' => '周日', - 'mon' => '周一', - 'tue' => '周二', - 'wed' => '周三', - 'thu' => '周四', - 'fri' => '周五', - 'sat' => '周六', - 'weekend' => '周末', - 'work' => '工作日', - 'next' => '次日', + 'sun' => '周日', + 'mon' => '周一', + 'tue' => '周二', + 'wed' => '周三', + 'thu' => '周四', + 'fri' => '周五', + 'sat' => '周六', + 'weekend' => '周末', + 'work' => '工作日', + 'next' => '次日', ], - 'qrcode' => ':attribute二维码', - 'deleted' => '已删除', - 'deleted_item' => ':attribute已删除', - 'print' => '打印', - 'unlimited' => '无限制', - 'payment' => [ + 'qrcode' => ':attribute二维码', + 'deleted' => '已删除', + 'deleted_item' => ':attribute已删除', + 'print' => '打印', + 'unlimited' => '无限制', + 'payment' => [ 'credit' => '余额', 'alipay' => '支付宝', - 'qq' => 'QQ钱包', + 'qq' => 'QQ钱包', 'wechat' => '微信支付', 'crypto' => '虚拟货币', 'manual' => '人工支付', @@ -89,59 +89,59 @@ return [ 'wait' => '待支付', ], ], - 'order' => [ + 'order' => [ 'status' => [ - 'cancel' => '취소', + 'cancel' => '취소', 'complete' => '완성', - 'prepaid' => '선불 결제', - 'ongoing' => '사용 중', - 'review' => '확인 대기 중', + 'prepaid' => '선불 결제', + 'ongoing' => '사용 중', + 'review' => '확인 대기 중', ], ], - 'recommend' => '推荐', - 'advance' => '进阶', - 'action' => '操作', - 'search' => '搜 索', - 'edit' => '编 辑', - 'delete' => '删 除', - 'status' => [ - 'attribute' => '状态', - 'inactive' => '未激活', - 'disabled' => '停 用', - 'banned' => '禁 用', - 'normal' => '正 常', - 'enabled' => '启 用', - 'expire' => '过 期', - 'limited' => '限 制', - 'run_out' => '流量耗尽', - 'unused' => '사용하지 않음', - 'used' => '이미 사용중', - 'closed' => '닫기', - 'applying' => '신청 중', - 'withdrawn' => '인출함', - 'unwithdrawn' => '인출 하지 않음', - 'reply' => '답변됨', - 'pending' => '대기 중', - 'unknown' => '未 知', - 'available' => '生效中', - 'reject' => '否 決', - 'rejected' => '已驳回', - 'review' => '待审核', - 'reviewed' => '审核通过待打款', - 'paid' => '已打款', - 'payment_pending' => '待打款', - 'pass' => '通 过', - 'send_to_credit' => '打款至余额', + 'recommend' => '推荐', + 'advance' => '进阶', + 'action' => '操作', + 'search' => '搜 索', + 'edit' => '编 辑', + 'delete' => '删 除', + 'status' => [ + 'attribute' => '状态', + 'inactive' => '未激活', + 'disabled' => '停 用', + 'banned' => '禁 用', + 'normal' => '正 常', + 'enabled' => '启 用', + 'expire' => '过 期', + 'limited' => '限 制', + 'run_out' => '流量耗尽', + 'unused' => '사용하지 않음', + 'used' => '이미 사용중', + 'closed' => '닫기', + 'applying' => '신청 중', + 'withdrawn' => '인출함', + 'unwithdrawn' => '인출 하지 않음', + 'reply' => '답변됨', + 'pending' => '대기 중', + 'unknown' => '未 知', + 'available' => '生效中', + 'reject' => '否 決', + 'rejected' => '已驳回', + 'review' => '待审核', + 'reviewed' => '审核通过待打款', + 'paid' => '已打款', + 'payment_pending' => '待打款', + 'pass' => '通 过', + 'send_to_credit' => '打款至余额', 'waiting_tobe_send' => '等待投递', ], - 'stay_unchanged' => '留空为不变', + 'stay_unchanged' => '留空为不变', 'random_generate' => '留空则随机生成', - 'request_failed' => '请求错误,请重试', - 'convert' => '转 换', - 'import' => '导 入', - 'or' => '或', - 'more' => '더 보기', - 'to' => '에', - 'to_be_send' => '待发送', - 'developing' => '开发中!敬请期待', + 'request_failed' => '请求错误,请重试', + 'convert' => '转 换', + 'import' => '导 入', + 'or' => '或', + 'more' => '더 보기', + 'to' => '에', + 'to_be_send' => '待发送', + 'developing' => '开发中!敬请期待', ]; diff --git a/resources/lang/ko/errors.php b/resources/lang/ko/errors.php index 2977e63a..ebad15fe 100644 --- a/resources/lang/ko/errors.php +++ b/resources/lang/ko/errors.php @@ -1,32 +1,32 @@ [ - 'access' => '알 수 없는 IP 혹은 프록시를 통해 방문하여 접근을 금지합니다.', - 'bots' => '비정상적인 로봇 접근 감지, 접근을 금지합니다.', - 'china' => '중국IP 혹은 프록시 접근 감지, 접근을 금지합니다.', + 'forbidden' => [ + 'access' => '알 수 없는 IP 혹은 프록시를 통해 방문하여 접근을 금지합니다.', + 'bots' => '비정상적인 로봇 접근 감지, 접근을 금지합니다.', + 'china' => '중국IP 혹은 프록시 접근 감지, 접근을 금지합니다.', 'oversea' => '해외 IP 감지, 접근을 금지합니다.', ], - 'log' => '로그', - 'refresh' => '새로고침', + 'log' => '로그', + 'refresh' => '새로고침', 'refresh_page' => '페이즈를 새로고침 후, 다시 방문해주세요.', - 'report' => '错❌误携带了报告:', - 'safe_enter' => '정상적인 접근', - 'safe_code' => '보안코드를 입력해주세요.', - 'title' => '⚠️오류발생', + 'report' => '错❌误携带了报告:', + 'safe_enter' => '정상적인 접근', + 'safe_code' => '보안코드를 입력해주세요.', + 'title' => '⚠️오류발생', 'unsafe_enter' => '비정상적인 접근', - 'visit' => '방문해주세요.', - 'whoops' => '!!!', - 'get_ip' => 'IP 오류정보 불러오기', - 'subscribe' => [ - 'unknown' => '링크 사용 오류! 다시 불러오세요!', - 'sub_baned' => '링크 사용 불가능, 홈페이지를 방문하여 원인을 확인하세요.', - 'user' => '잘못된 링크, 계정이 존재하지 않습니다! 링크를 다시 불러오세요.', + 'visit' => '방문해주세요.', + 'whoops' => '!!!', + 'get_ip' => 'IP 오류정보 불러오기', + 'subscribe' => [ + 'unknown' => '링크 사용 오류! 다시 불러오세요!', + 'sub_baned' => '링크 사용 불가능, 홈페이지를 방문하여 원인을 확인하세요.', + 'user' => '잘못된 링크, 계정이 존재하지 않습니다! 링크를 다시 불러오세요.', 'user_disable' => '계정이 차단되었습니다!', - 'baned_until' => '계정 차단 시간 :time, 차단 해지 후 다시 갱신하세요!', - 'out' => '데이터 소진! 데이터를 다시 구매 하시거나 초기화 해주세요!', - 'expired' => '계정 만료! 기간을 연장해주세요!', - 'question' => '계정에 문제가 있습니다. 문의 바랍니다.', - 'none' => '사용 가능한 서버가 없습니다.', + 'baned_until' => '계정 차단 시간 :time, 차단 해지 후 다시 갱신하세요!', + 'out' => '데이터 소진! 데이터를 다시 구매 하시거나 초기화 해주세요!', + 'expired' => '계정 만료! 기간을 연장해주세요!', + 'question' => '계정에 문제가 있습니다. 문의 바랍니다.', + 'none' => '사용 가능한 서버가 없습니다.', ], ]; diff --git a/resources/lang/ko/http-statuses.php b/resources/lang/ko/http-statuses.php index abb26dc0..7fc19a8a 100644 --- a/resources/lang/ko/http-statuses.php +++ b/resources/lang/ko/http-statuses.php @@ -1,76 +1,76 @@ 'Unknown Error', - '100' => 'Continue', - '101' => 'Switching Protocols', - '102' => 'Processing', - '200' => 'OK', - '201' => 'Created', - '202' => 'Accepted', - '203' => 'Non-Authoritative Information', - '204' => 'No Content', - '205' => 'Reset Content', - '206' => 'Partial Content', - '207' => 'Multi-Status', - '208' => 'Already Reported', - '226' => 'IM Used', - '300' => 'Multiple Choices', - '301' => 'Moved Permanently', - '302' => 'Found', - '303' => 'See Other', - '304' => 'Not Modified', - '305' => 'Use Proxy', - '307' => 'Temporary Redirect', - '308' => 'Permanent Redirect', - '400' => 'Bad Request', - '401' => 'Unauthorized', - '402' => 'Payment Required', - '403' => 'Forbidden', - '404' => 'Page Not Found', - '405' => 'Method Not Allowed', - '406' => 'Not Acceptable', - '407' => 'Proxy Authentication Required', - '408' => 'Request Timeout', - '409' => 'Conflict', - '410' => 'Gone', - '411' => 'Length Required', - '412' => 'Precondition Failed', - '413' => 'Payload Too Large', - '414' => 'URI Too Long', - '415' => 'Unsupported Media Type', - '416' => 'Range Not Satisfiable', - '417' => 'Expectation Failed', - '418' => 'I\'m a teapot', - '419' => 'Session Has Expired', - '421' => 'Misdirected Request', - '422' => 'Unprocessable Entity', - '423' => 'Locked', - '424' => 'Failed Dependency', - '426' => 'Upgrade Required', - '428' => 'Precondition Required', - '429' => 'Too Many Requests', - '431' => 'Request Header Fields Too Large', - '449' => 'Retry With', - '451' => 'Unavailable For Legal Reasons', - '500' => 'Internal Server Error', - '501' => 'Not Implemented', - '502' => 'Bad Gateway', - '503' => 'Maintenance Mode', - '504' => 'Gateway Timeout', - '505' => 'HTTP Version Not Supported', - '506' => 'Variant Also Negotiates', - '507' => 'Insufficient Storage', - '508' => 'Loop Detected', - '509' => 'Bandwidth Limit Exceeded', - '510' => 'Not Extended', - '511' => 'Network Authentication Required', - '520' => 'Unknown Error', - '521' => 'Web Server is Down', - '522' => 'Connection Timed Out', - '523' => 'Origin Is Unreachable', - '524' => 'A Timeout Occurred', - '525' => 'SSL Handshake Failed', - '526' => 'Invalid SSL Certificate', + '0' => 'Unknown Error', + '100' => 'Continue', + '101' => 'Switching Protocols', + '102' => 'Processing', + '200' => 'OK', + '201' => 'Created', + '202' => 'Accepted', + '203' => 'Non-Authoritative Information', + '204' => 'No Content', + '205' => 'Reset Content', + '206' => 'Partial Content', + '207' => 'Multi-Status', + '208' => 'Already Reported', + '226' => 'IM Used', + '300' => 'Multiple Choices', + '301' => 'Moved Permanently', + '302' => 'Found', + '303' => 'See Other', + '304' => 'Not Modified', + '305' => 'Use Proxy', + '307' => 'Temporary Redirect', + '308' => 'Permanent Redirect', + '400' => 'Bad Request', + '401' => 'Unauthorized', + '402' => 'Payment Required', + '403' => 'Forbidden', + '404' => 'Page Not Found', + '405' => 'Method Not Allowed', + '406' => 'Not Acceptable', + '407' => 'Proxy Authentication Required', + '408' => 'Request Timeout', + '409' => 'Conflict', + '410' => 'Gone', + '411' => 'Length Required', + '412' => 'Precondition Failed', + '413' => 'Payload Too Large', + '414' => 'URI Too Long', + '415' => 'Unsupported Media Type', + '416' => 'Range Not Satisfiable', + '417' => 'Expectation Failed', + '418' => 'I\'m a teapot', + '419' => 'Session Has Expired', + '421' => 'Misdirected Request', + '422' => 'Unprocessable Entity', + '423' => 'Locked', + '424' => 'Failed Dependency', + '426' => 'Upgrade Required', + '428' => 'Precondition Required', + '429' => 'Too Many Requests', + '431' => 'Request Header Fields Too Large', + '449' => 'Retry With', + '451' => 'Unavailable For Legal Reasons', + '500' => 'Internal Server Error', + '501' => 'Not Implemented', + '502' => 'Bad Gateway', + '503' => 'Maintenance Mode', + '504' => 'Gateway Timeout', + '505' => 'HTTP Version Not Supported', + '506' => 'Variant Also Negotiates', + '507' => 'Insufficient Storage', + '508' => 'Loop Detected', + '509' => 'Bandwidth Limit Exceeded', + '510' => 'Not Extended', + '511' => 'Network Authentication Required', + '520' => 'Unknown Error', + '521' => 'Web Server is Down', + '522' => 'Connection Timed Out', + '523' => 'Origin Is Unreachable', + '524' => 'A Timeout Occurred', + '525' => 'SSL Handshake Failed', + '526' => 'Invalid SSL Certificate', 'unknownError' => 'Unknown Error', ]; diff --git a/resources/lang/ko/model.php b/resources/lang/ko/model.php index 49cdccaf..c07ff176 100644 --- a/resources/lang/ko/model.php +++ b/resources/lang/ko/model.php @@ -1,230 +1,230 @@ [ - 'id' => '用户ID', - 'attribute' => '用户', - 'nickname' => '닉네임', - 'username' => '아이디', - 'password' => '비밀번호', - 'credit' => '余额', - 'invite_num' => '可用邀请码', - 'reset_date' => '重置日', - 'port' => '端口', - 'traffic_used' => '流量使用', - 'service' => '代理', - 'group' => '分组', + 'user' => [ + 'id' => '用户ID', + 'attribute' => '用户', + 'nickname' => '닉네임', + 'username' => '아이디', + 'password' => '비밀번호', + 'credit' => '余额', + 'invite_num' => '可用邀请码', + 'reset_date' => '重置日', + 'port' => '端口', + 'traffic_used' => '流量使用', + 'service' => '代理', + 'group' => '分组', 'account_status' => '계정 상태', - 'proxy_status' => '代理状态', - 'expired_date' => '过期日', - 'role' => '角色权限', - 'wechat' => '微信', - 'qq' => 'QQ', - 'remark' => '备注', - 'uuid' => 'VMess UUID', - 'proxy_passwd' => '비밀번호', - 'proxy_method' => '加密方式', + 'proxy_status' => '代理状态', + 'expired_date' => '过期日', + 'role' => '角色权限', + 'wechat' => '微信', + 'qq' => 'QQ', + 'remark' => '备注', + 'uuid' => 'VMess UUID', + 'proxy_passwd' => '비밀번호', + 'proxy_method' => '加密方式', 'usable_traffic' => '可用流量', 'proxy_protocol' => '协议', - 'proxy_obfs' => '混淆', - 'speed_limit' => '用户限速', - 'inviter' => '邀请人', - 'created_date' => '회원가입 시간', + 'proxy_obfs' => '混淆', + 'speed_limit' => '用户限速', + 'inviter' => '邀请人', + 'created_date' => '회원가입 시간', ], - 'common' => [ - 'extend' => '扩展', - 'sort' => '排序', + 'common' => [ + 'extend' => '扩展', + 'sort' => '排序', 'description' => '표시', - 'type' => '类型', - 'level' => '等级', + 'type' => '类型', + 'level' => '等级', ], - 'country' => [ + 'country' => [ 'code' => 'ISO国家代码', 'icon' => '图 标', 'name' => '国家/地区名称', ], - 'subscribe' => [ - 'code' => '订阅码', - 'req_times' => '请求次数', + 'subscribe' => [ + 'code' => '订阅码', + 'req_times' => '请求次数', 'updated_at' => '最后请求时间', - 'ban_time' => '封禁时间', - 'ban_desc' => '封禁理由', - 'req_ip' => '请求IP', + 'ban_time' => '封禁时间', + 'ban_desc' => '封禁理由', + 'req_ip' => '请求IP', 'req_header' => '访问', ], - 'oauth' => [ - 'type' => '渠道', + 'oauth' => [ + 'type' => '渠道', 'identifier' => '唯一标识', ], - 'user_group' => [ + 'user_group' => [ 'attribute' => '用戶分组', - 'name' => '分组名称', - 'nodes' => '选择节点', + 'name' => '分组名称', + 'nodes' => '选择节点', ], - 'node' => [ - 'attribute' => '节点', - 'id' => '节点ID', - 'name' => '이름', - 'domain' => '域名', - 'static' => '存活', - 'online_user' => '在线', - 'data_consume' => '产生流量', - 'data_rate' => '流量比例', - 'ddns' => 'DDNS', - 'ipv4' => 'IPv4地址', - 'ipv6' => 'IPv6地址', - 'push_port' => '消息推送端口', - 'rule_group' => '审计分组', - 'traffic_limit' => '节点限速', - 'client_limit' => '设备数限制', - 'label' => '标签', - 'country' => '国家/地区', - 'udp' => 'UDP', - 'display' => '显示 与 订阅', - 'detection' => '节点阻断检测', - 'method' => '加密方式', - 'protocol' => '协议', - 'protocol_param' => '协议参数', - 'obfs' => '混淆', - 'obfs_param' => '混淆参数', - 'single' => '单端口', - 'transfer' => '中 转', - 'service_port' => '服务端口', - 'single_passwd' => '[单] 密码', - 'v2_alter_id' => '额外ID', - 'v2_net' => '传输方式', - 'v2_cover' => '伪装类型', - 'v2_host' => '伪装域名', - 'v2_path' => '路径 | 密钥', - 'v2_sni' => 'SNI', - 'v2_tls' => '连接TLS', + 'node' => [ + 'attribute' => '节点', + 'id' => '节点ID', + 'name' => '이름', + 'domain' => '域名', + 'static' => '存活', + 'online_user' => '在线', + 'data_consume' => '产生流量', + 'data_rate' => '流量比例', + 'ddns' => 'DDNS', + 'ipv4' => 'IPv4地址', + 'ipv6' => 'IPv6地址', + 'push_port' => '消息推送端口', + 'rule_group' => '审计分组', + 'traffic_limit' => '节点限速', + 'client_limit' => '设备数限制', + 'label' => '标签', + 'country' => '国家/地区', + 'udp' => 'UDP', + 'display' => '显示 与 订阅', + 'detection' => '节点阻断检测', + 'method' => '加密方式', + 'protocol' => '协议', + 'protocol_param' => '协议参数', + 'obfs' => '混淆', + 'obfs_param' => '混淆参数', + 'single' => '单端口', + 'transfer' => '中 转', + 'service_port' => '服务端口', + 'single_passwd' => '[单] 密码', + 'v2_alter_id' => '额外ID', + 'v2_net' => '传输方式', + 'v2_cover' => '伪装类型', + 'v2_host' => '伪装域名', + 'v2_path' => '路径 | 密钥', + 'v2_sni' => 'SNI', + 'v2_tls' => '连接TLS', 'v2_tls_provider' => 'TLS配置', - 'relay_port' => '中转端口', + 'relay_port' => '中转端口', ], - 'node_auth' => [ + 'node_auth' => [ 'attribute' => '节点授权', - 'key' => '通信密钥节点用', - 'secret' => '反向通信密钥', + 'key' => '通信密钥节点用', + 'secret' => '反向通信密钥', ], - 'node_cert' => [ - 'attribute' => '域名证书', - 'domain' => '域名', - 'key' => 'KEY', - 'pem' => 'PEM', - 'issuer' => '签发机构', - 'signed_date' => '签发日期', + 'node_cert' => [ + 'attribute' => '域名证书', + 'domain' => '域名', + 'key' => 'KEY', + 'pem' => 'PEM', + 'issuer' => '签发机构', + 'signed_date' => '签发日期', 'expired_date' => '만료시간', ], - 'order' => [ - 'attribute' => '주문서', - 'id' => '주문 번호', + 'order' => [ + 'attribute' => '주문서', + 'id' => '주문 번호', 'original_price' => '原价', - 'price' => '实价', - 'pay_way' => '결제 방식', - 'status' => '订单状态', + 'price' => '实价', + 'pay_way' => '결제 방식', + 'status' => '订单状态', ], - 'goods' => [ - 'attribute' => '商品', - 'name' => '이름', - 'price' => '售价', - 'category' => '分类', - 'renew' => '流量重置价格', - 'user_limit' => '用户限速', - 'period' => '重置周期', - 'traffic' => '流量额度', - 'invite_num' => '赠送邀请码数量', - 'limit_num' => '限购数量', + 'goods' => [ + 'attribute' => '商品', + 'name' => '이름', + 'price' => '售价', + 'category' => '分类', + 'renew' => '流量重置价格', + 'user_limit' => '用户限速', + 'period' => '重置周期', + 'traffic' => '流量额度', + 'invite_num' => '赠送邀请码数量', + 'limit_num' => '限购数量', 'available_date' => '유효기간', - 'hot' => '热销', - 'color' => '颜色', - 'logo' => '商品图片', - 'info' => '自定义列表', + 'hot' => '热销', + 'color' => '颜色', + 'logo' => '商品图片', + 'info' => '自定义列表', ], - 'rule' => [ + 'rule' => [ 'attribute' => '规则', - 'name' => '표시', - 'pattern' => '值', + 'name' => '표시', + 'pattern' => '值', ], - 'rule_group' => [ + 'rule_group' => [ 'attribute' => '规则分组', - 'name' => '分组名称', - 'type' => '审计模式', - 'rules' => '选择规则', + 'name' => '分组名称', + 'type' => '审计模式', + 'rules' => '选择规则', ], - 'role' => [ - 'attribute' => '角色', - 'name' => '이름', + 'role' => [ + 'attribute' => '角色', + 'name' => '이름', 'permissions' => '权限', ], - 'permission' => [ - 'attribute' => '权限行为', + 'permission' => [ + 'attribute' => '权限行为', 'description' => '行为描述', - 'name' => '路由名称', + 'name' => '路由名称', ], - 'article' => [ - 'attribute' => '文章', - 'category' => '类别', - 'language' => '语言', - 'logo' => '头图', + 'article' => [ + 'attribute' => '文章', + 'category' => '类别', + 'language' => '语言', + 'logo' => '头图', 'created_at' => '发布日期', 'updated_at' => '最后更新', ], - 'coupon' => [ - 'attribute' => '卡券', - 'name' => '卡券名称', - 'sn' => '使用券码', - 'logo' => '卡券图片', - 'value' => '优惠额度', - 'priority' => '权重', - 'usable_times' => '使用次数', - 'minimum' => '满减条件', - 'used' => '个人限用', - 'levels' => '等级限定', - 'groups' => '分组限定', - 'users_whitelist' => '专属用户', - 'users_blacklist' => '禁用用户', + 'coupon' => [ + 'attribute' => '卡券', + 'name' => '卡券名称', + 'sn' => '使用券码', + 'logo' => '卡券图片', + 'value' => '优惠额度', + 'priority' => '权重', + 'usable_times' => '使用次数', + 'minimum' => '满减条件', + 'used' => '个人限用', + 'levels' => '等级限定', + 'groups' => '分组限定', + 'users_whitelist' => '专属用户', + 'users_blacklist' => '禁用用户', 'services_whitelist' => '许可商品', 'services_blacklist' => '禁用商品', - 'newbie' => '新人专属', - 'num' => '수량', + 'newbie' => '新人专属', + 'num' => '수량', ], - 'aff' => [ - 'invitee' => '소비자', - 'amount' => '소비금액', + 'aff' => [ + 'invitee' => '소비자', + 'amount' => '소비금액', 'commission' => '반려금액', 'updated_at' => '处理时间', 'created_at' => '下单时间', ], - 'referral' => [ + 'referral' => [ 'created_at' => '申请时间', - 'user' => '申请账号', - 'amount' => '申请提现金额', - 'id' => '申请单ID', + 'user' => '申请账号', + 'amount' => '申请提现金额', + 'id' => '申请单ID', ], - 'notification' => [ - 'address' => '收信地址', + 'notification' => [ + 'address' => '收信地址', 'created_at' => '投递时间', - 'status' => '投递状态', + 'status' => '投递状态', ], - 'ip' => [ + 'ip' => [ 'network_type' => '通讯类型', - 'info' => '归属地', + 'info' => '归属地', ], - 'user_traffic' => [ - 'upload' => '上传流量', + 'user_traffic' => [ + 'upload' => '上传流量', 'download' => '下载流量', - 'total' => '总流量', + 'total' => '总流量', 'log_time' => '记录时间', ], 'user_data_modify' => [ - 'before' => '变动前流量', - 'after' => '变动后流量', + 'before' => '变动前流量', + 'after' => '变动后流量', 'created_at' => '发生时间', ], - 'user_credit' => [ - 'before' => '操作前余额', - 'after' => '操作后金额', - 'amount' => '发生金额', + 'user_credit' => [ + 'before' => '操作前余额', + 'after' => '操作后金额', + 'amount' => '发生金额', 'created_at' => '发生时间', ], ]; diff --git a/resources/lang/ko/notification.php b/resources/lang/ko/notification.php index 25768f24..90b17119 100644 --- a/resources/lang/ko/notification.php +++ b/resources/lang/ko/notification.php @@ -1,35 +1,35 @@ '공지', - 'new' => ':num 새로운 소식', - 'empty' => '새 소식을 받지 못하였습니다.', - 'payment_received' => '订单支付成功,金额::amount,查看详情', - 'account_expired' => '계정 만료 알림', + 'attribute' => '공지', + 'new' => ':num 새로운 소식', + 'empty' => '새 소식을 받지 못하였습니다.', + 'payment_received' => '订单支付成功,金额::amount,查看详情', + 'account_expired' => '계정 만료 알림', 'account_expired_content' => '고객님의 계정은 【:days】 일 후 만료됩니다, 서비스를 계속 정상적으로 이용하시려면, 기간을 연장해주세요.', - 'account_expired_blade' => '계정이 【:days天】 후 만료될 예정이오니, 기간을 연장해주세요.', - 'active_email' => '30분 이내에 설정을 완료해주세요.', - 'close_ticket' => '문의 【:id】:title 닫기', - 'view_web' => '홈페이지 접속', - 'view_ticket' => '문의 보기', - 'new_ticket' => '새 문의 수령 :title', - 'reply_ticket' => '문의 답변 :title', - 'ticket_content' => '문의내용', - 'node_block' => '서버 차단 경고', - 'node_offline' => '서버 오프라인 경고', - 'node_offline_content' => '다음 서버에 문제가 있습니다: 신호 없음, 서버 오프라인 확인:', - 'block_report' => '차단 로그', - 'traffic_warning' => '데이터 알림', - 'traffic_remain' => '데이터 percent% 사용함, 주의하세요.', - 'traffic_tips' => '요금제의 데이터 초기화 날짜에 주의하여 데이터를 적절하게 할당하여 사용하거나, 데이터 소진 후 요금제를 유료로 초기화하여 사용하세요.', - 'verification_account' => '계정 인증', - 'verification' => '인증번호:', - 'verification_limit' => ':minutes 분 안에 인증을 완료해주세요.', - 'data_anomaly' => '데이터 용량 이상! 사용자 알림!', - 'data_anomaly_content' => '사용자:id:최근 1시간 [업로드::upload | 다운로드::download | 합계::total]', - 'node' => [ - 'upload' => '업로드', + 'account_expired_blade' => '계정이 【:days天】 후 만료될 예정이오니, 기간을 연장해주세요.', + 'active_email' => '30분 이내에 설정을 완료해주세요.', + 'close_ticket' => '문의 【:id】:title 닫기', + 'view_web' => '홈페이지 접속', + 'view_ticket' => '문의 보기', + 'new_ticket' => '새 문의 수령 :title', + 'reply_ticket' => '문의 답변 :title', + 'ticket_content' => '문의내용', + 'node_block' => '서버 차단 경고', + 'node_offline' => '서버 오프라인 경고', + 'node_offline_content' => '다음 서버에 문제가 있습니다: 신호 없음, 서버 오프라인 확인:', + 'block_report' => '차단 로그', + 'traffic_warning' => '데이터 알림', + 'traffic_remain' => '데이터 percent% 사용함, 주의하세요.', + 'traffic_tips' => '요금제의 데이터 초기화 날짜에 주의하여 데이터를 적절하게 할당하여 사용하거나, 데이터 소진 후 요금제를 유료로 초기화하여 사용하세요.', + 'verification_account' => '계정 인증', + 'verification' => '인증번호:', + 'verification_limit' => ':minutes 분 안에 인증을 완료해주세요.', + 'data_anomaly' => '데이터 용량 이상! 사용자 알림!', + 'data_anomaly_content' => '사용자:id:최근 1시간 [업로드::upload | 다운로드::download | 합계::total]', + 'node' => [ + 'upload' => '업로드', 'download' => '다운로드', - 'total' => '종합', + 'total' => '종합', ], ]; diff --git a/resources/lang/ko/pagination.php b/resources/lang/ko/pagination.php index 164a7bc0..d39223b0 100644 --- a/resources/lang/ko/pagination.php +++ b/resources/lang/ko/pagination.php @@ -1,6 +1,6 @@ '다음 »', + 'next' => '다음 »', 'previous' => '« 이전', ]; diff --git a/resources/lang/ko/user.php b/resources/lang/ko/user.php index 585fd7c2..913eccd5 100644 --- a/resources/lang/ko/user.php +++ b/resources/lang/ko/user.php @@ -1,235 +1,235 @@ [ - 'credit' => '계정 잔고', - 'status' => '계정 상태', - 'level' => '계정 등급', - 'group' => '소속 그룹', - 'speed_limit' => '속도 제한', - 'remain' => '잔여 데이터', - 'time' => '요금제 기간', - 'last_login' => '최근 접속', - 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', + 'account' => [ + 'credit' => '계정 잔고', + 'status' => '계정 상태', + 'level' => '계정 등급', + 'group' => '소속 그룹', + 'speed_limit' => '속도 제한', + 'remain' => '잔여 데이터', + 'time' => '요금제 기간', + 'last_login' => '최근 접속', + 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', 'connect_password' => '비밀번호 연결', - 'reason' => [ - 'normal' => '계정이 정상입니다.', - 'expired' => '고객님 요금제 상품이 만료되었습니다.', - 'overused' => '本时段使用流量超过 :data GB触发系统限制
      :min 后解除限制', + 'reason' => [ + 'normal' => '계정이 정상입니다.', + 'expired' => '고객님 요금제 상품이 만료되었습니다.', + 'overused' => '本时段使用流量超过 :data GB触发系统限制
      :min 后解除限制', 'traffic_exhausted' => '고객님의 [데이터] 가 소진되었습니다.', - 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', + 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', ], ], - 'home' => [ - 'attendance' => [ + 'home' => [ + 'attendance' => [ 'attribute' => '출첵', - 'disable' => '출첵 기능이 활성화되지 않았습니다.', - 'done' => '출첵완료, 내일도 방문해주세요!', - 'success' => '고객님은 :data 용량을 받았습니다.', - 'failed' => '시스템 이상', + 'disable' => '출첵 기능이 활성화되지 않았습니다.', + 'done' => '출첵완료, 내일도 방문해주세요!', + 'success' => '고객님은 :data 용량을 받았습니다.', + 'failed' => '시스템 이상', ], - 'traffic_logs' => '용량 기록', - 'announcement' => '공지', - 'wechat_push' => '위챗 공지 발송', - 'chat_group' => '단톡방', + 'traffic_logs' => '용량 기록', + 'announcement' => '공지', + 'wechat_push' => '위챗 공지 발송', + 'chat_group' => '단톡방', 'empty_announcement' => '공지 없음', ], - 'purchase_to_unlock' => '서비스 구매 후 잠금 해제', - 'purchase_required' => '해당 기능은 유료 구매자에게만 제공됩니다!', - 'attribute' => [ - 'node' => '회선', - 'data' => '용량', - 'ip' => 'IP 주소', - 'isp' => '사업자', + 'purchase_to_unlock' => '서비스 구매 후 잠금 해제', + 'purchase_required' => '해당 기능은 유료 구매자에게만 제공됩니다!', + 'attribute' => [ + 'node' => '회선', + 'data' => '용량', + 'ip' => 'IP 주소', + 'isp' => '사업자', 'address' => '지역', ], - 'purchase_promotion' => '서둘러 서비스를 구매하세요!', - 'menu' => [ - 'helps' => '도움', - 'home' => '메인페이지', - 'invites' => '초대', - 'invoices' => '주문', - 'nodes' => '회선', - 'referrals' => '홍보', - 'shop' => '서비스', - 'profile' => '설정', - 'tickets' => '문의', + 'purchase_promotion' => '서둘러 서비스를 구매하세요!', + 'menu' => [ + 'helps' => '도움', + 'home' => '메인페이지', + 'invites' => '초대', + 'invoices' => '주문', + 'nodes' => '회선', + 'referrals' => '홍보', + 'shop' => '서비스', + 'profile' => '설정', + 'tickets' => '문의', 'admin_dashboard' => '관리', ], - 'contact' => '연락처 정보', - 'oauth' => [ + 'contact' => '연락처 정보', + 'oauth' => [ 'bind_title' => '소셜 계정 연동', - 'not_bind' => '연동되지않음', - 'bind' => '연동', - 'rebind' => '재연동', - 'unbind' => '연동 해제', + 'not_bind' => '연동되지않음', + 'bind' => '연동', + 'rebind' => '재연동', + 'unbind' => '연동 해제', ], - 'coupon' => [ + 'coupon' => [ 'discount' => '할인', - 'error' => [ - 'unknown' => '유효하지 않은 쿠폰', - 'used' => '이미 사용된 쿠폰', - 'expired' => '쿠폰이 만료됨', - 'run_out' => '쿠폰 소진', + 'error' => [ + 'unknown' => '유효하지 않은 쿠폰', + 'used' => '이미 사용된 쿠폰', + 'expired' => '쿠폰이 만료됨', + 'run_out' => '쿠폰 소진', 'inactive' => '쿠폰이 적용되지 않음', - 'wait' => ':time 에 활성화 됩니다. 기다려주세요!', - 'unmet' => '사용 조건 불충족', - 'minimum' => '本券最低使用金额为 :amount', + 'wait' => ':time 에 활성화 됩니다. 기다려주세요!', + 'unmet' => '사용 조건 불충족', + 'minimum' => '本券最低使用金额为 :amount', 'overused' => '本券只能使用 :times 次', - 'users' => '账户不符合促销条件', + 'users' => '账户不符合促销条件', 'services' => '商品不符合折扣条件,请查看促销条款', ], ], - 'error_response' => '오류가 발생했습니다. 나중에 시도하십시오.', - 'invite' => [ - 'attribute' => '초대 코드', - 'counts' => '共 :num 个邀请码', - 'tips' => ': num 초대장 코드를 생성할 수 있습니다.: days일 동안 유효합니다.', - 'logs' => '초대 기록', - 'promotion' => '당신의 초대 코드를 통해 등록하고 활성화하면, 양쪽 모두 :traffic 데이터 사용 인센티브를 받게 됩니다. 그들이 소비할 때, 당신은 그들의 소비 금액 :referral_percent%을 보상으로 받습니다.', + 'error_response' => '오류가 발생했습니다. 나중에 시도하십시오.', + 'invite' => [ + 'attribute' => '초대 코드', + 'counts' => '共 :num 个邀请码', + 'tips' => ': num 초대장 코드를 생성할 수 있습니다.: days일 동안 유효합니다.', + 'logs' => '초대 기록', + 'promotion' => '당신의 초대 코드를 통해 등록하고 활성화하면, 양쪽 모두 :traffic 데이터 사용 인센티브를 받게 됩니다. 그들이 소비할 때, 당신은 그들의 소비 금액 :referral_percent%을 보상으로 받습니다.', 'generate_failed' => '생성 실패: 초대코드 생성 불가', ], - 'reset_data' => [ - 'action' => '데이터 재설정', - 'cost' => '需要:amount', + 'reset_data' => [ + 'action' => '데이터 재설정', + 'cost' => '需要:amount', 'cost_tips' => '本次重置流量将扣除余额 :amount!', - 'lack' => '잔액 부족, 잔액을 충전해주세요', - 'logs' => '사용자 직접 용량을 초기화', - 'success' => '초기화 성공', + 'lack' => '잔액 부족, 잔액을 충전해주세요', + 'logs' => '사용자 직접 용량을 초기화', + 'success' => '초기화 성공', ], - 'referral' => [ - 'link' => '홍보 링크', - 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', - 'logs' => '수수료 기록', - 'failed' => '신청 실패', + 'referral' => [ + 'link' => '홍보 링크', + 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', + 'logs' => '수수료 기록', + 'failed' => '신청 실패', 'success' => '신청 성공', - 'msg' => [ - 'account' => '계정이 만료됨, 다시 서비스를 구매해주세요.', - 'applied' => '이미 신청이 존재하므로 이전 신청이 완료될 때까지 기다려주세요.', + 'msg' => [ + 'account' => '계정이 만료됨, 다시 서비스를 구매해주세요.', + 'applied' => '이미 신청이 존재하므로 이전 신청이 완료될 때까지 기다려주세요.', 'unfulfilled' => '满 :amount 才可以提现,继续努力吧', - 'wait' => '관리자의 승인을 기다려주세요', - 'error' => '반환 실패, 나중에 다시 시도하거나 관리자에게 문의해주세요', + 'wait' => '관리자의 승인을 기다려주세요', + 'error' => '반환 실패, 나중에 다시 시도하거나 관리자에게 문의해주세요', ], ], - 'inviter' => '초대자', - 'invitee' => '초대 받은 사람', - 'registered_at' => '회원가입 시간', - 'bought_at' => '구매 날짜', - 'payment_method' => '결제 방식', - 'pay' => '결제', - 'input_coupon' => '쿠폰 번호를 입력해주세요', - 'recharge' => '충전', - 'recharge_credit' => '잔액 충전', - 'recharging' => '충전중...', + 'inviter' => '초대자', + 'invitee' => '초대 받은 사람', + 'registered_at' => '회원가입 시간', + 'bought_at' => '구매 날짜', + 'payment_method' => '결제 방식', + 'pay' => '결제', + 'input_coupon' => '쿠폰 번호를 입력해주세요', + 'recharge' => '충전', + 'recharge_credit' => '잔액 충전', + 'recharging' => '충전중...', 'withdraw_commission' => '결산 수수료', - 'withdraw_at' => '결산 날짜', - 'withdraw_logs' => '출금 기록', - 'withdraw' => '출금', - 'scan_qrcode' => '프로그램으로 QR코드를 스캔하세요', - 'shop' => [ - 'hot' => '인기', - 'limited' => '한정판', - 'change_amount' => '금액 충전', + 'withdraw_at' => '결산 날짜', + 'withdraw_logs' => '출금 기록', + 'withdraw' => '출금', + 'scan_qrcode' => '프로그램으로 QR코드를 스캔하세요', + 'shop' => [ + 'hot' => '인기', + 'limited' => '한정판', + 'change_amount' => '금액 충전', 'change_amount_help' => '请输入充值金额', - 'buy' => '구매', - 'description' => '표시', - 'service' => '서비스', - 'pay_credit' => '잔액 결제', - 'pay_online' => '온라인 결제', - 'price' => '가격', - 'quantity' => '수량', - 'subtotal' => '소계', - 'total' => '합계', - 'conflict' => '패키지 중복 존재', - 'conflict_tips' => '< p> 현재 구매 패키지는 < code> 예약 패키지로 자동 설정됩니다. < p>
        < li> 예약 패키지는 발효 중인 패키지가 종료되면 자동으로 실행됩니다! < li> < li> > 결제 후 패키지를 수동으로 활성화할 수 있습니다! ', - 'call4help' => '관리자에게 문의하세요', + 'buy' => '구매', + 'description' => '표시', + 'service' => '서비스', + 'pay_credit' => '잔액 결제', + 'pay_online' => '온라인 결제', + 'price' => '가격', + 'quantity' => '수량', + 'subtotal' => '소계', + 'total' => '합계', + 'conflict' => '패키지 중복 존재', + 'conflict_tips' => '< p> 현재 구매 패키지는 < code> 예약 패키지로 자동 설정됩니다. < p>
          < li> 예약 패키지는 발효 중인 패키지가 종료되면 자동으로 실행됩니다! < li> < li> > 결제 후 패키지를 수동으로 활성화할 수 있습니다! ', + 'call4help' => '관리자에게 문의하세요', ], - 'service' => [ - 'node_count' => ':num 条优质线路', + 'service' => [ + 'node_count' => ':num 条优质线路', 'country_count' => '覆盖 :num 个国家或地区', - 'unlimited' => '속도 제한 없음', + 'unlimited' => '속도 제한 없음', ], - 'payment' => [ - 'error' => '충전 잔액이 올바르지 않습니다', - 'creating' => '주문서 생성 중...', + 'payment' => [ + 'error' => '충전 잔액이 올바르지 않습니다', + 'creating' => '주문서 생성 중...', 'redirect_stripe' => 'Stripe 결제 페이지로 이동', - 'qrcode_tips' => '< strong class="red-600" >: software< > 을 사용하여 QR코드를 스캔하십시오.', - 'close_tips' => '< code>: minutes분 안에 결제를 완료해 주십시오, 그렇지 않으면 주문이 자동으로 취소됩니다.', - 'mobile_tips' => ' 모바일 사용자 : QR코드를 길게 누름 - > 이미지 저장 - > 결제 프로그램 열기 - > 청소 - > 앨범 선택 그리고 결제하기', + 'qrcode_tips' => '< strong class="red-600" >: software< > 을 사용하여 QR코드를 스캔하십시오.', + 'close_tips' => '< code>: minutes분 안에 결제를 완료해 주십시오, 그렇지 않으면 주문이 자동으로 취소됩니다.', + 'mobile_tips' => ' 모바일 사용자 : QR코드를 길게 누름 - > 이미지 저장 - > 결제 프로그램 열기 - > 청소 - > 앨범 선택 그리고 결제하기', ], - 'invoice' => [ - 'attribute' => '주문서', - 'detail' => '소비 기록', - 'amount' => '금액', + 'invoice' => [ + 'attribute' => '주문서', + 'detail' => '소비 기록', + 'amount' => '금액', 'active_prepaid_question' => '미리 예비 결제를 신청하시겠습니까?', - 'active_prepaid_tips' => '상품이 활성화되면:
          이전 상품은 바로 효력을 잃습니다!
          만료일은 오늘 다시 시작됩니다!', + 'active_prepaid_tips' => '상품이 활성화되면:
          이전 상품은 바로 효력을 잃습니다!
          만료일은 오늘 다시 시작됩니다!', ], - 'node' => [ - 'info' => '설정 정보', - 'setting' => '프록시 설정', + 'node' => [ + 'info' => '설정 정보', + 'setting' => '프록시 설정', 'unstable' => '회선 점검중', - 'rate' => ':ratio배 데이터 소비', + 'rate' => ':ratio배 데이터 소비', ], - 'subscribe' => [ - 'link' => '구독 주소', - 'tips' => '경고: 이 구독 링크는 개인에 한해서만 사용할 수 있습니다. 이 링크를 공유하지 마십시오. 그렇지 않으면 계정에 문제가 생길 수 있습니다.', + 'subscribe' => [ + 'link' => '구독 주소', + 'tips' => '경고: 이 구독 링크는 개인에 한해서만 사용할 수 있습니다. 이 링크를 공유하지 마십시오. 그렇지 않으면 계정에 문제가 생길 수 있습니다.', 'exchange_warning' => '구독 주소를 변경 시 다음과 같습니다. \n1. 이전 주소는 즉시 비활성화됩니다 \n2. 연결 비밀번호가 변경됩니다.', - 'custom' => '自定义订阅', - 'ss_only' => '只订阅SS', - 'ssr_only' => '只订阅SSR (包含SS)', - 'v2ray_only' => 'V2Ray 만 구독', - 'trojan_only' => 'Trojan 만 구독', - 'error' => '구독 주소 변경 오류', - 'info' => [ - 'title' => '账号摘要 [非实时]', - 'upload' => '上载流量', + 'custom' => '自定义订阅', + 'ss_only' => '只订阅SS', + 'ssr_only' => '只订阅SSR (包含SS)', + 'v2ray_only' => 'V2Ray 만 구독', + 'trojan_only' => 'Trojan 만 구독', + 'error' => '구독 주소 변경 오류', + 'info' => [ + 'title' => '账号摘要 [非实时]', + 'upload' => '上载流量', 'download' => '下载流量', - 'total' => '套餐流量', + 'total' => '套餐流量', ], ], - 'ticket' => [ - 'attribute' => '문의', - 'submit_tips' => '문의를 하시겠습니까?', - 'reply_confirm' => '문의 답변을 하시겠습니까?', - 'close_tips' => '문의를 종료하시겠습니까?', - 'close' => '문의 닫기', - 'failed_closed' => '오류: 문의가 이미 종료되었습니다.', - 'reply_placeholder' => '어떤 도움이 필요한가요?', - 'reply' => '답장', - 'close_msg' => '문의: 사용자 ID:id 가 수동으로 닫음', - 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', + 'ticket' => [ + 'attribute' => '문의', + 'submit_tips' => '문의를 하시겠습니까?', + 'reply_confirm' => '문의 답변을 하시겠습니까?', + 'close_tips' => '문의를 종료하시겠습니까?', + 'close' => '문의 닫기', + 'failed_closed' => '오류: 문의가 이미 종료되었습니다.', + 'reply_placeholder' => '어떤 도움이 필요한가요?', + 'reply' => '답장', + 'close_msg' => '문의: 사용자 ID:id 가 수동으로 닫음', + 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', 'content_placeholder' => '请详细的描述您遇到的问题,或者需要我们帮助的地方,以便我们快速帮助到您', - 'new' => '새로 문의하기', - 'working_hour' => '영업시간', - 'online_hour' => '접속 시간', - 'service_tips' => '다양한 연락처가 있습니다. 이 중 < code > 의 로 연락하십시오! 잦은 요청 시, 처리 시간이 자동으로 지연됩니다.', - 'error' => '알 수 없는 오류! 관리자에게 문의하세요', + 'new' => '새로 문의하기', + 'working_hour' => '영업시간', + 'online_hour' => '접속 시간', + 'service_tips' => '다양한 연락처가 있습니다. 이 중 < code > 의 로 연락하십시오! 잦은 요청 시, 처리 시간이 자동으로 지연됩니다.', + 'error' => '알 수 없는 오류! 관리자에게 문의하세요', ], - 'traffic_logs' => [ + 'traffic_logs' => [ '24hours' => '오늘 데이터 사용 상황', - '30days' => '이달 데이터 사용 상황', - 'tips' => '알림: 데이터 통계 업데이트가 지연될 수 있습니다. 일별 통계는 다음날 갱신, 시간별 갱신은 몇 시간 뒤 적용됩니다.', + '30days' => '이달 데이터 사용 상황', + 'tips' => '알림: 데이터 통계 업데이트가 지연될 수 있습니다. 일별 통계는 다음날 갱신, 시간별 갱신은 몇 시간 뒤 적용됩니다.', ], - 'client' => '프로그램', - 'tutorials' => '教 程', - 'current_role' => '현재 정보', - 'knowledge' => [ + 'client' => '프로그램', + 'tutorials' => '教 程', + 'current_role' => '현재 정보', + 'knowledge' => [ 'title' => '知 识 库', 'basic' => '基 础', ], - 'manual' => [ - 'red_packet' => '支付宝领红包', - 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', - 'step_1' => '须知', - 'step_1_title' => '如何正确人工支付', - 'step_2' => '결제', - 'step_2_title' => '获取支付二维码,进行支付', - 'step_3' => '完成', - 'step_3_title' => '等待支付被人工核对', - 'remark' => '备注账号', + 'manual' => [ + 'red_packet' => '支付宝领红包', + 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', + 'step_1' => '须知', + 'step_1_title' => '如何正确人工支付', + 'step_2' => '결제', + 'step_2_title' => '获取支付二维码,进行支付', + 'step_3' => '完成', + 'step_3_title' => '等待支付被人工核对', + 'remark' => '备注账号', 'remark_content' => '填入登录使用的账号,在人工核对中可以对号审核!', - 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', - 'pre' => '上一步', - 'next' => '下一步', + 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', + 'pre' => '上一步', + 'next' => '下一步', ], ]; diff --git a/resources/lang/ko/validation.php b/resources/lang/ko/validation.php index 4b215a6b..d3ac919e 100644 --- a/resources/lang/ko/validation.php +++ b/resources/lang/ko/validation.php @@ -1,196 +1,196 @@ ':attribute을(를) 동의해야 합니다.', - 'accepted_if' => ':attribute을(를) :other이(가) :value이면 동의해야 합니다.', - 'active_url' => ':attribute은(는) 유효한 URL이 아닙니다.', - 'after' => ':attribute은(는) :date 이후 날짜여야 합니다.', - 'after_or_equal' => ':attribute은(는) :date 이후 날짜이거나 같은 날짜여야 합니다.', - 'alpha' => ':attribute은(는) 문자만 포함할 수 있습니다.', - 'alpha_dash' => ':attribute은(는) 문자, 숫자, 대쉬(-), 밑줄(_)만 포함할 수 있습니다.', - 'alpha_num' => ':attribute은(는) 문자와 숫자만 포함할 수 있습니다.', - 'array' => ':attribute은(는) 배열이어야 합니다.', - 'before' => ':attribute은(는) :date 이전 날짜여야 합니다.', - 'before_or_equal' => ':attribute은(는) :date 이전 날짜이거나 같은 날짜여야 합니다.', - 'between' => [ - 'array' => ':attribute의 항목 수는 :min에서 :max 개의 항목이 있어야 합니다.', - 'file' => ':attribute의 용량은 :min에서 :max 킬로바이트 사이여야 합니다.', + 'accepted' => ':attribute을(를) 동의해야 합니다.', + 'accepted_if' => ':attribute을(를) :other이(가) :value이면 동의해야 합니다.', + 'active_url' => ':attribute은(는) 유효한 URL이 아닙니다.', + 'after' => ':attribute은(는) :date 이후 날짜여야 합니다.', + 'after_or_equal' => ':attribute은(는) :date 이후 날짜이거나 같은 날짜여야 합니다.', + 'alpha' => ':attribute은(는) 문자만 포함할 수 있습니다.', + 'alpha_dash' => ':attribute은(는) 문자, 숫자, 대쉬(-), 밑줄(_)만 포함할 수 있습니다.', + 'alpha_num' => ':attribute은(는) 문자와 숫자만 포함할 수 있습니다.', + 'array' => ':attribute은(는) 배열이어야 합니다.', + 'before' => ':attribute은(는) :date 이전 날짜여야 합니다.', + 'before_or_equal' => ':attribute은(는) :date 이전 날짜이거나 같은 날짜여야 합니다.', + 'between' => [ + 'array' => ':attribute의 항목 수는 :min에서 :max 개의 항목이 있어야 합니다.', + 'file' => ':attribute의 용량은 :min에서 :max 킬로바이트 사이여야 합니다.', 'numeric' => ':attribute의 값은 :min에서 :max 사이여야 합니다.', - 'string' => ':attribute의 길이는 :min에서 :max 문자 사이여야 합니다.', + 'string' => ':attribute의 길이는 :min에서 :max 문자 사이여야 합니다.', ], - 'boolean' => ':attribute은(는) true 또는 false 이어야 합니다.', - 'confirmed' => ':attribute 확인 항목이 일치하지 않습니다.', - 'current_password' => '패스워드가 일치하지 않습니다.', - 'date' => ':attribute은(는) 유효한 날짜가 아닙니다.', - 'date_equals' => ':attribute은(는) :date과(와) 같은날짜여야합니다.', - 'date_format' => ':attribute이(가) :format 형식과 일치하지 않습니다.', - 'declined' => ':attribute은(는) 거부되어야 합니다.', - 'declined_if' => ':other이(가) :value일때 :attribute은(는) 거부되어야 합니다.', - 'different' => ':attribute와(과) :other은(는) 서로 달라야 합니다.', - 'digits' => ':attribute은(는) :digits 자리 숫자여야 합니다.', - 'digits_between' => ':attribute은(는) :min에서 :max 자리 사이여야 합니다.', - 'dimensions' => ':attribute은(는) 올바르지 않는 이미지 크기입니다.', - 'distinct' => ':attribute 필드에 중복된 값이 있습니다.', - 'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.', - 'ends_with' => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.', - 'enum' => ':attribute의 값이 잘못되었습니다.', - 'exists' => ':attribute이(가) 존재하지 않습니다.', - 'file' => ':attribute은(는) 파일이어야 합니다.', - 'filled' => ':attribute 필드는 값이 있어야 합니다.', - 'gt' => [ - 'array' => ':attribute의 항목 수는 :value개 보다 많아야 합니다.', - 'file' => ':attribute의 용량은 :value킬로바이트보다 커야 합니다.', + 'boolean' => ':attribute은(는) true 또는 false 이어야 합니다.', + 'confirmed' => ':attribute 확인 항목이 일치하지 않습니다.', + 'current_password' => '패스워드가 일치하지 않습니다.', + 'date' => ':attribute은(는) 유효한 날짜가 아닙니다.', + 'date_equals' => ':attribute은(는) :date과(와) 같은날짜여야합니다.', + 'date_format' => ':attribute이(가) :format 형식과 일치하지 않습니다.', + 'declined' => ':attribute은(는) 거부되어야 합니다.', + 'declined_if' => ':other이(가) :value일때 :attribute은(는) 거부되어야 합니다.', + 'different' => ':attribute와(과) :other은(는) 서로 달라야 합니다.', + 'digits' => ':attribute은(는) :digits 자리 숫자여야 합니다.', + 'digits_between' => ':attribute은(는) :min에서 :max 자리 사이여야 합니다.', + 'dimensions' => ':attribute은(는) 올바르지 않는 이미지 크기입니다.', + 'distinct' => ':attribute 필드에 중복된 값이 있습니다.', + 'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.', + 'ends_with' => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.', + 'enum' => ':attribute의 값이 잘못되었습니다.', + 'exists' => ':attribute이(가) 존재하지 않습니다.', + 'file' => ':attribute은(는) 파일이어야 합니다.', + 'filled' => ':attribute 필드는 값이 있어야 합니다.', + 'gt' => [ + 'array' => ':attribute의 항목 수는 :value개 보다 많아야 합니다.', + 'file' => ':attribute의 용량은 :value킬로바이트보다 커야 합니다.', 'numeric' => ':attribute의 값은 :value보다 커야 합니다.', - 'string' => ':attribute의 길이는 :value보다 길어야 합니다.', + 'string' => ':attribute의 길이는 :value보다 길어야 합니다.', ], - 'gte' => [ - 'array' => ':attribute의 항목 수는 :value개 보다 같거나 많아야 합니다.', - 'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 커야 합니다.', + 'gte' => [ + 'array' => ':attribute의 항목 수는 :value개 보다 같거나 많아야 합니다.', + 'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 커야 합니다.', 'numeric' => ':attribute의 값은 :value보다 같거나 커야 합니다.', - 'string' => ':attribute의 길이는 :value보다 같거나 길어야 합니다.', + 'string' => ':attribute의 길이는 :value보다 같거나 길어야 합니다.', ], - 'image' => ':attribute은(는) 이미지여야 합니다.', - 'in' => '선택된 :attribute은(는) 올바르지 않습니다.', - 'in_array' => ':attribute 필드는 :other에 존재하지 않습니다.', - 'integer' => ':attribute은(는) 정수여야 합니다.', - 'ip' => ':attribute은(는) 유효한 IP 주소여야 합니다.', - 'ipv4' => ':attribute은(는) 유효한 IPv4 주소여야 합니다.', - 'ipv6' => ':attribute은(는) 유효한 IPv6 주소여야 합니다.', - 'json' => ':attribute은(는) JSON 문자열이어야 합니다.', - 'lt' => [ - 'array' => ':attribute의 항목 수는 :value개 보다 작아야 합니다.', - 'file' => ':attribute의 용량은 :value킬로바이트보다 작아야 합니다.', + 'image' => ':attribute은(는) 이미지여야 합니다.', + 'in' => '선택된 :attribute은(는) 올바르지 않습니다.', + 'in_array' => ':attribute 필드는 :other에 존재하지 않습니다.', + 'integer' => ':attribute은(는) 정수여야 합니다.', + 'ip' => ':attribute은(는) 유효한 IP 주소여야 합니다.', + 'ipv4' => ':attribute은(는) 유효한 IPv4 주소여야 합니다.', + 'ipv6' => ':attribute은(는) 유효한 IPv6 주소여야 합니다.', + 'json' => ':attribute은(는) JSON 문자열이어야 합니다.', + 'lt' => [ + 'array' => ':attribute의 항목 수는 :value개 보다 작아야 합니다.', + 'file' => ':attribute의 용량은 :value킬로바이트보다 작아야 합니다.', 'numeric' => ':attribute의 값은 :value보다 작아야 합니다.', - 'string' => ':attribute의 길이는 :value보다 짧아야 합니다.', + 'string' => ':attribute의 길이는 :value보다 짧아야 합니다.', ], - 'lte' => [ - 'array' => ':attribute의 항목 수는 :value개 보다 같거나 작아야 합니다.', - 'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 작아야 합니다.', + 'lte' => [ + 'array' => ':attribute의 항목 수는 :value개 보다 같거나 작아야 합니다.', + 'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 작아야 합니다.', 'numeric' => ':attribute의 값은 :value보다 같거나 작아야 합니다.', - 'string' => ':attribute의 길이는 :value보다 같거나 짧아야 합니다.', + 'string' => ':attribute의 길이는 :value보다 같거나 짧아야 합니다.', ], - 'mac_address' => ':attribute은(는) 올바른 MAC 주소가 아닙니다.', - 'max' => [ - 'array' => ':attribute은(는) :max개보다 많을 수 없습니다.', - 'file' => ':attribute은(는) :max킬로바이트보다 클 수 없습니다.', + 'mac_address' => ':attribute은(는) 올바른 MAC 주소가 아닙니다.', + 'max' => [ + 'array' => ':attribute은(는) :max개보다 많을 수 없습니다.', + 'file' => ':attribute은(는) :max킬로바이트보다 클 수 없습니다.', 'numeric' => ':attribute은(는) :max보다 클 수 없습니다.', - 'string' => ':attribute은(는) :max자보다 클 수 없습니다.', + 'string' => ':attribute은(는) :max자보다 클 수 없습니다.', ], - 'mimes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.', - 'mimetypes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.', - 'min' => [ - 'array' => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.', - 'file' => ':attribute은(는) 최소한 :min킬로바이트이어야 합니다.', + 'mimes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.', + 'mimetypes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.', + 'min' => [ + 'array' => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.', + 'file' => ':attribute은(는) 최소한 :min킬로바이트이어야 합니다.', 'numeric' => ':attribute은(는) 최소한 :min이어야 합니다.', - 'string' => ':attribute은(는) 최소한 :min자이어야 합니다.', + 'string' => ':attribute은(는) 최소한 :min자이어야 합니다.', ], - 'multiple_of' => ':attribute 는 :value 의 배수여야 합니다.', - 'not_in' => '선택된 :attribute이(가) 올바르지 않습니다.', - 'not_regex' => ':attribute의 형식이 올바르지 않습니다.', - 'numeric' => ':attribute은(는) 숫자여야 합니다.', - 'password' => '비밀번호가 잘못되었습니다.', - 'present' => ':attribute 필드가 있어야 합니다.', - 'prohibited' => ':attribute (은)는 금지되어 있습니다.', - 'prohibited_if' => ':attribute (은)는 :other 이(가) :value 인 경우 금지되어 있습니다.', - 'prohibited_unless' => ':attribute (은)는 :other 이(가) :value 이(가) 아닌 경우 금지되어 있습니다.', - 'prohibits' => ':attribute (은)는 :other 을(를) 금지합니다.', - 'regex' => ':attribute 형식이 올바르지 않습니다.', - 'required' => ':attribute 필드는 필수입니다.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => ':other이(가) :value 일 때 :attribute 필드는 필수입니다.', - 'required_unless' => ':other이(가) :values에 없다면 :attribute 필드는 필수입니다.', - 'required_with' => ':values이(가) 있는 경우 :attribute 필드는 필수입니다.', - 'required_with_all' => ':values이(가) 모두 있는 경우 :attribute 필드는 필수입니다.', - 'required_without' => ':values이(가) 없는 경우 :attribute 필드는 필수입니다.', + 'multiple_of' => ':attribute 는 :value 의 배수여야 합니다.', + 'not_in' => '선택된 :attribute이(가) 올바르지 않습니다.', + 'not_regex' => ':attribute의 형식이 올바르지 않습니다.', + 'numeric' => ':attribute은(는) 숫자여야 합니다.', + 'password' => '비밀번호가 잘못되었습니다.', + 'present' => ':attribute 필드가 있어야 합니다.', + 'prohibited' => ':attribute (은)는 금지되어 있습니다.', + 'prohibited_if' => ':attribute (은)는 :other 이(가) :value 인 경우 금지되어 있습니다.', + 'prohibited_unless' => ':attribute (은)는 :other 이(가) :value 이(가) 아닌 경우 금지되어 있습니다.', + 'prohibits' => ':attribute (은)는 :other 을(를) 금지합니다.', + 'regex' => ':attribute 형식이 올바르지 않습니다.', + 'required' => ':attribute 필드는 필수입니다.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', + 'required_if' => ':other이(가) :value 일 때 :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킬로바이트여야 합니다.', + 'same' => ':attribute와(과) :other은(는) 일치해야 합니다.', + 'size' => [ + 'array' => ':attribute은(는) :size개의 항목을 포함해야 합니다.', + 'file' => ':attribute은(는) :size킬로바이트여야 합니다.', 'numeric' => ':attribute은(는) :size (이)여야 합니다.', - 'string' => ':attribute은(는) :size자여야 합니다.', + 'string' => ':attribute은(는) :size자여야 합니다.', ], - 'starts_with' => ':attribute은(는) :values 중 하나로 시작해야 합니다.', - 'string' => ':attribute은(는) 문자열이어야 합니다.', - 'timezone' => ':attribute은(는) 올바른 시간대 이어야 합니다.', - 'unique' => ':attribute은(는) 이미 사용 중입니다.', - 'uploaded' => ':attribute을(를) 업로드하지 못했습니다.', - 'url' => ':attribute은(는) 형식은 올바르지 않습니다.', - 'uuid' => ':attribute은(는) 유효한UUID여야합니다.', - 'attributes' => [ - 'address' => '주소', - 'age' => '나이', - 'amount' => 'Amount', - 'area' => 'Area', - 'available' => 'Available', - 'birthday' => 'Birthday', - 'body' => '몸', - 'city' => '도시', - 'content' => '내용', - 'country' => '나라', - 'created_at' => 'Created At', - 'creator' => 'Creator', - 'current_password' => 'Current Password', - 'date' => '날짜', - 'date_of_birth' => 'Date Of Birth', - 'day' => '일', - 'deleted_at' => 'Deleted At', - 'description' => '상세설명', - 'district' => 'District', - 'duration' => 'Duration', - 'email' => '이메일', - 'excerpt' => '발췌', - 'filter' => 'Filter', - 'first_name' => '이름', - 'gender' => '성별', - 'group' => 'Group', - 'hour' => '시', - 'image' => 'Image', - 'last_name' => '성', - 'lesson' => 'Lesson', - 'line_address_1' => 'Line Address 1', - 'line_address_2' => 'Line Address 2', - 'message' => '메시지', - 'middle_name' => 'Middle Name', - 'minute' => '분', - 'mobile' => '모바일', - 'month' => '월', - 'name' => '이름', - 'national_code' => 'National Code', - 'number' => 'Number', - 'password' => '비밀번호', - 'password_confirmation' => '비밀번호 확인', - 'phone' => '전화번호', - 'photo' => '사진', - 'postal_code' => 'Postal Code', - 'price' => '가격', - 'province' => 'Province', + 'starts_with' => ':attribute은(는) :values 중 하나로 시작해야 합니다.', + 'string' => ':attribute은(는) 문자열이어야 합니다.', + 'timezone' => ':attribute은(는) 올바른 시간대 이어야 합니다.', + 'unique' => ':attribute은(는) 이미 사용 중입니다.', + 'uploaded' => ':attribute을(를) 업로드하지 못했습니다.', + 'url' => ':attribute은(는) 형식은 올바르지 않습니다.', + 'uuid' => ':attribute은(는) 유효한UUID여야합니다.', + 'attributes' => [ + 'address' => '주소', + 'age' => '나이', + 'amount' => 'Amount', + 'area' => 'Area', + 'available' => 'Available', + 'birthday' => 'Birthday', + 'body' => '몸', + 'city' => '도시', + 'content' => '내용', + 'country' => '나라', + 'created_at' => 'Created At', + 'creator' => 'Creator', + 'current_password' => 'Current Password', + 'date' => '날짜', + 'date_of_birth' => 'Date Of Birth', + 'day' => '일', + 'deleted_at' => 'Deleted At', + 'description' => '상세설명', + 'district' => 'District', + 'duration' => 'Duration', + 'email' => '이메일', + 'excerpt' => '발췌', + 'filter' => 'Filter', + 'first_name' => '이름', + 'gender' => '성별', + 'group' => 'Group', + 'hour' => '시', + 'image' => 'Image', + 'last_name' => '성', + 'lesson' => 'Lesson', + 'line_address_1' => 'Line Address 1', + 'line_address_2' => 'Line Address 2', + 'message' => '메시지', + 'middle_name' => 'Middle Name', + 'minute' => '분', + 'mobile' => '모바일', + 'month' => '월', + 'name' => '이름', + 'national_code' => 'National Code', + 'number' => 'Number', + 'password' => '비밀번호', + 'password_confirmation' => '비밀번호 확인', + 'phone' => '전화번호', + 'photo' => '사진', + 'postal_code' => 'Postal Code', + 'price' => '가격', + 'province' => 'Province', 'recaptcha_response_field' => 'Recaptcha Response Field', - 'remember' => 'Remember', - 'restored_at' => 'Restored At', - 'result_text_under_image' => 'Result Text Under Image', - 'role' => '규칙', - 'second' => '초', - 'sex' => '성별', - 'short_text' => 'Short Text', - 'size' => 'Size', - 'state' => 'State', - 'street' => 'Street', - 'student' => 'Student', - 'subject' => '주제', - 'teacher' => 'Teacher', - 'terms' => '약관', - 'test_description' => 'Test Description', - 'test_locale' => 'Test Locale', - 'test_name' => 'Test Name', - 'text' => 'Text', - 'time' => '시간', - 'title' => '제목', - 'updated_at' => 'Updated At', - 'username' => '유저네임', - 'year' => '년', + 'remember' => 'Remember', + 'restored_at' => 'Restored At', + 'result_text_under_image' => 'Result Text Under Image', + 'role' => '규칙', + 'second' => '초', + 'sex' => '성별', + 'short_text' => 'Short Text', + 'size' => 'Size', + 'state' => 'State', + 'street' => 'Street', + 'student' => 'Student', + 'subject' => '주제', + 'teacher' => 'Teacher', + 'terms' => '약관', + 'test_description' => 'Test Description', + 'test_locale' => 'Test Locale', + 'test_name' => 'Test Name', + 'text' => 'Text', + 'time' => '시간', + 'title' => '제목', + 'updated_at' => 'Updated At', + 'username' => '유저네임', + 'year' => '년', ], - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => '사용자 지정 메세지', ], diff --git a/resources/lang/vi/admin.php b/resources/lang/vi/admin.php index ee56d1c6..e1d80fa5 100644 --- a/resources/lang/vi/admin.php +++ b/resources/lang/vi/admin.php @@ -1,802 +1,802 @@ [ - 'users' => '总用户', - 'available_users' => '有效用户', - 'paid_users' => '付费用户', - 'active_days_users' => ':days 日内活跃用户', - 'inactive_days_users' => ':days 日以上不活跃用户', - 'online_users' => '当前在线', - 'expiring_users' => '临近到期', - 'overuse_users' => '流量大户(超过90%的用户)', - 'abnormal_users' => '1小时内流量异常', - 'nodes' => 'Node', - 'maintaining_nodes' => '维护中的节点', - 'traffic_consumed' => '记录的消耗流量', - 'traffic_days_consumed' => ':days 日内消耗流量', - 'orders' => '总订单数', - 'online_orders' => '在线支付订单数', - 'succeed_orders' => '支付成功订单数', - 'credit' => '总余额', + 'dashboard' => [ + 'users' => '总用户', + 'available_users' => '有效用户', + 'paid_users' => '付费用户', + 'active_days_users' => ':days 日内活跃用户', + 'inactive_days_users' => ':days 日以上不活跃用户', + 'online_users' => '当前在线', + 'expiring_users' => '临近到期', + 'overuse_users' => '流量大户(超过90%的用户)', + 'abnormal_users' => '1小时内流量异常', + 'nodes' => 'Node', + 'maintaining_nodes' => '维护中的节点', + 'traffic_consumed' => '记录的消耗流量', + 'traffic_days_consumed' => ':days 日内消耗流量', + 'orders' => '总订单数', + 'online_orders' => '在线支付订单数', + 'succeed_orders' => '支付成功订单数', + 'credit' => '总余额', 'withdrawing_commissions' => '待提现佣金', - 'withdrawn_commissions' => '已支出佣金', + 'withdrawn_commissions' => '已支出佣金', ], - 'action' => [ + 'action' => [ 'edit_item' => '编辑:attribute', - 'add_item' => '添加:attribute', + 'add_item' => '添加:attribute', ], - 'confirm' => [ - 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], + 'confirm' => [ + 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], 'continues' => '确定继续操作吗? ', - 'export' => '确定全部导出? ', + 'export' => '确定全部导出? ', ], - 'user_dashboard' => '个人中心', - 'menu' => [ - 'dashboard' => '管理中心', - 'user' => [ - 'attribute' => '用户系统', - 'list' => '用户管理', - 'oauth' => '用户授权', - 'group' => 'Nhóm người dùng', + 'user_dashboard' => '个人中心', + 'menu' => [ + 'dashboard' => '管理中心', + 'user' => [ + 'attribute' => '用户系统', + 'list' => '用户管理', + 'oauth' => '用户授权', + 'group' => 'Nhóm người dùng', 'credit_log' => '余额变动', - 'subscribe' => '订阅管理', + 'subscribe' => '订阅管理', ], - 'rbac' => [ - 'attribute' => '权限系统', + 'rbac' => [ + 'attribute' => '权限系统', 'permission' => '权限列表', - 'role' => '角色列表', + 'role' => '角色列表', ], 'customer_service' => [ 'attribute' => '客服系统', - 'ticket' => '服务工单', - 'article' => '文章管理', - 'push' => '消息推送', - 'mail' => '邮件群发', + 'ticket' => '服务工单', + 'article' => '文章管理', + 'push' => '消息推送', + 'mail' => '邮件群发', ], - 'node' => [ + 'node' => [ 'attribute' => '线路系统', - 'list' => '线路管理', - 'auth' => '线路授权', - 'cert' => '证书列表', + 'list' => '线路管理', + 'auth' => '线路授权', + 'cert' => '证书列表', ], - 'rule' => [ + 'rule' => [ 'attribute' => '审计规则', - 'list' => '规则列表', - 'group' => 'Nhóm quy tắc', - 'trigger' => '触发记录', + 'list' => '规则列表', + 'group' => 'Nhóm quy tắc', + 'trigger' => '触发记录', ], - 'shop' => [ + 'shop' => [ 'attribute' => '商品系统', - 'goods' => '商品管理', - 'coupon' => '卡券管理', - 'order' => '商品订单', + 'goods' => '商品管理', + 'coupon' => '卡券管理', + 'order' => '商品订单', ], - 'promotion' => [ - 'attribute' => '推广系统', - 'invite' => '邀请管理', - 'withdraw' => '提现管理', + 'promotion' => [ + 'attribute' => '推广系统', + 'invite' => '邀请管理', + 'withdraw' => '提现管理', 'rebate_flow' => '返利流水', ], - 'analysis' => [ - 'attribute' => '分析报告', + 'analysis' => [ + 'attribute' => '分析报告', 'accounting' => '流水账簿', - 'user_flow' => '用户分析', + 'user_flow' => '用户分析', ], - 'log' => [ - 'attribute' => '日志系统', - 'traffic' => 'Đã sử dụng', - 'traffic_flow' => '流量变动', - 'service_ban' => '封禁记录', - 'online_logs' => '在线记录', - 'online_monitor' => '在线监控', - 'notify' => '通知记录', + 'log' => [ + 'attribute' => '日志系统', + 'traffic' => 'Đã sử dụng', + 'traffic_flow' => '流量变动', + 'service_ban' => '封禁记录', + 'online_logs' => '在线记录', + 'online_monitor' => '在线监控', + 'notify' => '通知记录', 'payment_callback' => '支付回调', - 'system' => '系统日志', + 'system' => '系统日志', ], - 'tools' => [ + 'tools' => [ 'attribute' => '工具箱', 'decompile' => '反解析', - 'convert' => '格式转换', - 'import' => '数据导入', - 'analysis' => '日志分析', + 'convert' => '格式转换', + 'import' => '数据导入', + 'analysis' => '日志分析', ], - 'setting' => [ - 'attribute' => '设置', + 'setting' => [ + 'attribute' => '设置', 'email_suffix' => '邮箱后缀管理', - 'universal' => '通用配置', - 'system' => '系统设置', + 'universal' => '通用配置', + 'system' => '系统设置', ], ], - 'user' => [ - 'massive' => [ - 'text' => '用户生成数量', - 'button' => '批量生成', - 'failed' => '批量生成账号失败', + 'user' => [ + 'massive' => [ + 'text' => '用户生成数量', + 'button' => '批量生成', + 'failed' => '批量生成账号失败', 'succeed' => '批量生成账号成功', - 'note' => '后台批量生成用户', + 'note' => '后台批量生成用户', ], - 'proxy_info' => '配置信息', + 'proxy_info' => '配置信息', 'traffic_monitor' => '流量统计', - 'online_monitor' => '在线巡查', - 'reset_traffic' => '重置流量', - 'user_view' => '用户视角', + 'online_monitor' => '在线巡查', + 'reset_traffic' => '重置流量', + 'user_view' => '用户视角', 'connection_test' => '联网测试', - 'counts' => '共 :num 个账号', - 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], - 'info' => [ - 'account' => '账号信息', - 'proxy' => '代理信息', - 'switch' => '切换身份', - 'reset_date_hint' => '账号流量下一个重置日期', - 'expired_date_hint' => '留空默认为一年', - 'uuid_hint' => 'V2Ray的账户ID', + 'counts' => '共 :num 个账号', + 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], + 'info' => [ + 'account' => '账号信息', + 'proxy' => '代理信息', + 'switch' => '切换身份', + 'reset_date_hint' => '账号流量下一个重置日期', + 'expired_date_hint' => '留空默认为一年', + 'uuid_hint' => 'V2Ray的账户ID', 'recharge_placeholder' => '填入负值则会扣余额', ], - 'update_help' => '更新成功,是否返回?', - 'proxies_config' => '【:username】连接配置信息', - 'group' => [ - 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', - 'name' => 'Tên nhóm', + 'update_help' => '更新成功,是否返回?', + 'proxies_config' => '【:username】连接配置信息', + 'group' => [ + 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', + 'name' => 'Tên nhóm', 'counts' => '共 :num 个分组', ], ], 'zero_unlimited_hint' => '不设置/0,即为无限制', - 'node' => [ + 'node' => [ 'traffic_monitor' => '流量统计', - 'refresh_geo' => '刷新地理', - 'ping' => '检测延迟', + 'refresh_geo' => '刷新地理', + 'ping' => '检测延迟', 'connection_test' => '连通性检测', - 'counts' => '共 :num 条线路', - 'reload_all' => '重载【全部】后端', + 'counts' => '共 :num 条线路', + 'reload_all' => '重载【全部】后端', 'refresh_geo_all' => '刷新【全部】节点地理信息', - 'reload_confirm' => '确定重载节点?', - 'info' => [ - 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', - 'basic' => '基础信息', - 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', - 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', - 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', - 'extend' => '扩展信息', - 'display' => [ + 'reload_confirm' => '确定重载节点?', + 'info' => [ + 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', + 'basic' => '基础信息', + 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', + 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', + 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', + 'extend' => '扩展信息', + 'display' => [ 'invisible' => '完全不可见', - 'node' => '只显示于【:trans】页面', - 'sub' => '只显示于【订 阅】', - 'all' => '完全可见', - 'hint' => '用户是否可以订阅/看到本节点', + 'node' => '只显示于【:trans】页面', + 'sub' => '只显示于【订 阅】', + 'all' => '完全可见', + 'hint' => '用户是否可以订阅/看到本节点', ], - 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv4_placeholder' => '服务器IPv4地址', - 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', - 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', - 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', - 'level_hint' => '等级:0-无等级,全部可见', - 'detection' => [ - 'tcp' => '只检测TCP', + 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv4_placeholder' => '服务器IPv4地址', + 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', + 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', + 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', + 'level_hint' => '等级:0-无等级,全部可见', + 'detection' => [ + 'tcp' => '只检测TCP', 'icmp' => '只检测ICMP', - 'all' => '检测全部', + 'all' => '检测全部', 'hint' => '每30~60分钟随机进行节点阻断检测', ], - 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', + 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', 'additional_ports_hint' => '如果启用请配置服务端的additional_ports信息', - 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', - 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', - 'v2_cover' => [ - 'none' => '无伪装', - 'http' => 'HTTP数据流', - 'srtp' => '视频通话数据 (SRTP)', - 'utp' => 'BT下载数据 (uTP)', - 'wechat' => '微信视频通话', - 'dtls' => 'DTLS1.2数据包', + 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', + 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', + 'v2_cover' => [ + 'none' => '无伪装', + 'http' => 'HTTP数据流', + 'srtp' => '视频通话数据 (SRTP)', + 'utp' => 'BT下载数据 (uTP)', + 'wechat' => '微信视频通话', + 'dtls' => 'DTLS1.2数据包', 'wireguard' => 'WireGuard数据包', ], - 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', - 'v2_tls_provider_hint' => '不同后端配置不同:', - 'single_hint' => '推荐80或443,服务端需要配置
          严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', + 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', + 'v2_tls_provider_hint' => '不同后端配置不同:', + 'single_hint' => '推荐80或443,服务端需要配置
          严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', ], - 'proxy_info' => '*兼容 SS', + 'proxy_info' => '*兼容 SS', 'proxy_info_hint' => '如果兼容请在服务端配置协议和混淆时加上_compatible', - 'reload' => '重载后端', - 'auth' => [ - 'title' => '节点授权列表WEBAPI', - 'deploy' => [ - 'title' => '部署 :type_label 后端', - 'attribute' => '部署后端', - 'command' => '操作命令', - 'update' => '更新:', - 'uninstall' => '卸载:', - 'start' => '启动:', - 'stop' => '停止:', - 'status' => '状态:', - 'recent_logs' => '近期日志:', + 'reload' => '重载后端', + 'auth' => [ + 'title' => '节点授权列表WEBAPI', + 'deploy' => [ + 'title' => '部署 :type_label 后端', + 'attribute' => '部署后端', + 'command' => '操作命令', + 'update' => '更新:', + 'uninstall' => '卸载:', + 'start' => '启动:', + 'stop' => '停止:', + 'status' => '状态:', + 'recent_logs' => '近期日志:', 'real_time_logs' => '实时日志:', - 'restart' => '重启:', - 'same' => '同上', - 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', + 'restart' => '重启:', + 'same' => '同上', + 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', ], - 'reset_auth' => '重置密钥', - 'counts' => '共 :num 条授权', + 'reset_auth' => '重置密钥', + 'counts' => '共 :num 条授权', 'generating_all' => '确定生成所有节点的授权吗?', ], - 'cert' => [ - 'title' => '域名证书列表(V2Ray节点的伪装域名)', - 'counts' => '共 :num 个域名证书', + 'cert' => [ + 'title' => '域名证书列表(V2Ray节点的伪装域名)', + 'counts' => '共 :num 个域名证书', 'key_placeholder' => '域名证书的KEY值,允许为空,VNET-V2Ray后端支持自动签证书', 'pem_placeholder' => '域名证书的PEM值,允许为空,VNET-V2Ray后端支持自动签证书', ], ], - 'hint' => '提示', - 'oauth' => [ - 'title' => '用户OAuth授权', + 'hint' => '提示', + 'oauth' => [ + 'title' => '用户OAuth授权', 'counts' => '共 :num 个授权', ], - 'select_all' => '全 选', - 'clear' => '清 空', - 'unselected_hint' => '待分配规则,此处可搜索', - 'selected_hint' => '已分配规则,此处可搜索', - 'clone' => '克隆', - 'monitor' => [ - 'daily_chart' => '每日流量图', + 'select_all' => '全 选', + 'clear' => '清 空', + 'unselected_hint' => '待分配规则,此处可搜索', + 'selected_hint' => '已分配规则,此处可搜索', + 'clone' => '克隆', + 'monitor' => [ + 'daily_chart' => '每日流量图', 'monthly_chart' => '月流量图', - 'node' => '节点流量', - 'user' => '用户流量', - 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', + 'node' => '节点流量', + 'user' => '用户流量', + 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', ], - 'tools' => [ - 'analysis' => [ - 'title' => 'SSR日志分析仅适用于单机单节点', - 'req_url' => '近期请求地址', + 'tools' => [ + 'analysis' => [ + 'title' => 'SSR日志分析仅适用于单机单节点', + 'req_url' => '近期请求地址', 'not_enough' => '访问记录不足15000条,无法分析数据', ], - 'convert' => [ - 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', + 'convert' => [ + 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', 'content_placeholder' => '请填入要转换的配置信息', ], 'decompile' => [ - 'title' => '反解析配置转换', - 'attribute' => '反解析', + 'title' => '反解析配置转换', + 'attribute' => '反解析', 'content_placeholder' => '请填入要反解析的ShadowsocksR链接,一行一条', ], ], - 'ticket' => [ - 'title' => '工单列表', - 'counts' => '共 :num 个工单', - 'send_to' => '请填入目标用户信息!', - 'user_info' => '用户信息', - 'inviter_info' => '邀请人信息', + 'ticket' => [ + 'title' => '工单列表', + 'counts' => '共 :num 个工单', + 'send_to' => '请填入目标用户信息!', + 'user_info' => '用户信息', + 'inviter_info' => '邀请人信息', 'close_confirm' => '确定关闭工单?', - 'error' => '未知错误!请查看运行日志', + 'error' => '未知错误!请查看运行日志', ], - 'logs' => [ - 'subscribe' => '订阅列表', - 'counts' => '共 :num 条记录', - 'rule' => [ - 'clear_all' => '清空记录', - 'title' => '触发记录', - 'name' => '触发规则', - 'reason' => '触发原因', - 'created_at' => '触发时间', - 'tag' => '✅ 访问非规则允许内容', + 'logs' => [ + 'subscribe' => '订阅列表', + 'counts' => '共 :num 条记录', + 'rule' => [ + 'clear_all' => '清空记录', + 'title' => '触发记录', + 'name' => '触发规则', + 'reason' => '触发原因', + 'created_at' => '触发时间', + 'tag' => '✅ 访问非规则允许内容', 'clear_confirm' => '确定清空所有记录吗?', ], - 'order' => [ - 'title' => '订单列表', + 'order' => [ + 'title' => '订单列表', 'is_expired' => '是否过期', - 'is_coupon' => '是否使用优惠券', + 'is_coupon' => '是否使用优惠券', ], - 'user_traffic' => [ - 'title' => '流量使用记录', + 'user_traffic' => [ + 'title' => '流量使用记录', 'choose_node' => 'Chọn Node', ], 'user_data_modify_title' => '流量变动记录', - 'callback' => '回调日志 (在线支付)', - 'notification' => '邮件投递记录', - 'ip_monitor' => '在线IP监控 2分钟内的实时数据', - 'user_ip' => [ - 'title' => '用户在线IP列表 最近10分钟', + 'callback' => '回调日志 (在线支付)', + 'notification' => '邮件投递记录', + 'ip_monitor' => '在线IP监控 2分钟内的实时数据', + 'user_ip' => [ + 'title' => '用户在线IP列表 最近10分钟', 'connect' => '连接IP', ], - 'ban' => [ - 'title' => '用户封禁记录', - 'time' => '时长', - 'reason' => '理由', - 'ban_time' => 'Thời gian chặn', + 'ban' => [ + 'title' => '用户封禁记录', + 'time' => '时长', + 'reason' => '理由', + 'ban_time' => 'Thời gian chặn', 'last_connect_at' => '最后连接时间', ], - 'credit_title' => '余额变动记录', + 'credit_title' => '余额变动记录', ], - 'start_time' => '开始区间', - 'end_time' => '结束区间', - 'goods' => [ - 'title' => '商品列表', - 'type' => [ - 'top_up' => '充值', + 'start_time' => '开始区间', + 'end_time' => '结束区间', + 'goods' => [ + 'title' => '商品列表', + 'type' => [ + 'top_up' => '充值', 'package' => '流量包', - 'plan' => '套餐', + 'plan' => '套餐', ], - 'info' => [ - 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', - 'period_hint' => '套餐流量会每N天重置', - 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', + 'info' => [ + 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', + 'period_hint' => '套餐流量会每N天重置', + 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', 'available_date_hint' => '到期后会自动从总流量扣减对应的流量', - 'desc_placeholder' => '商品的简单描述', - 'list_placeholder' => '商品的自定义列表添加', - 'list_hint' => '每行内容请以<li> 开头</li> 结尾', + 'desc_placeholder' => '商品的简单描述', + 'list_placeholder' => '商品的自定义列表添加', + 'list_hint' => '每行内容请以<li> 开头</li> 结尾', ], - 'status' => [ + 'status' => [ 'yes' => '上架', - 'no' => '下架', + 'no' => '下架', ], 'sell_and_used' => '使用 / 销售', - 'counts' => '共 :num 个商品', + 'counts' => '共 :num 个商品', ], - 'sort_asc' => '排序值越大排越前', - 'yes' => '是', - 'no' => '否', - 'rule' => [ - 'type' => [ - 'reg' => '正则表达式', - 'domain' => '域名', - 'ip' => 'IP', + 'sort_asc' => '排序值越大排越前', + 'yes' => '是', + 'no' => '否', + 'rule' => [ + 'type' => [ + 'reg' => '正则表达式', + 'domain' => '域名', + 'ip' => 'IP', 'protocol' => 'Giao thức', ], 'counts' => '共 :num 条审计规则', - 'title' => '规则列表', - 'group' => [ - 'type' => [ + 'title' => '规则列表', + 'group' => [ + 'type' => [ 'off' => '阻断', - 'on' => '放行', + 'on' => '放行', ], - 'title' => 'Nhóm quy tắc', + 'title' => 'Nhóm quy tắc', 'counts' => '共 :num 个分组', ], ], - 'role' => [ - 'name_hint' => '唯一标识名称,例如:Administrator', + 'role' => [ + 'name_hint' => '唯一标识名称,例如:Administrator', 'description_hint' => '面板显示名称,例如:管理员', - 'title' => '权限角色列表', - 'permissions_all' => '全部权限', - 'counts' => '共 :num 个权限角色', + 'title' => '权限角色列表', + 'permissions_all' => '全部权限', + 'counts' => '共 :num 个权限角色', ], - 'report' => [ - 'monthly_accounting' => '月流水账簿', + 'report' => [ + 'monthly_accounting' => '月流水账簿', 'annually_accounting' => '年流水账簿', 'historic_accounting' => '历史流水账簿', - 'current_month' => '本 月', - 'last_month' => '上 月', - 'current_year' => '今 年', - 'last_year' => '去 年', - 'hourly_traffic' => '每时流量', - 'daily_traffic' => '每天流量', - 'today' => '本 日', + 'current_month' => '本 月', + 'last_month' => '上 月', + 'current_year' => '今 年', + 'last_year' => '去 年', + 'hourly_traffic' => '每时流量', + 'daily_traffic' => '每天流量', + 'today' => '本 日', ], - 'permission' => [ - 'title' => '权限行为列表', + 'permission' => [ + 'title' => '权限行为列表', 'description_hint' => '填写描述,例:【A系统】编辑A', - 'name_hint' => '填写路由名称,例:admin.permission.create,update', - 'counts' => '共 :num 条权限行为', + 'name_hint' => '填写路由名称,例:admin.permission.create,update', + 'counts' => '共 :num 条权限行为', ], - 'marketing' => [ - 'email' => [ - 'title' => '邮件群发列表', + 'marketing' => [ + 'email' => [ + 'title' => '邮件群发列表', 'group_send' => '群发邮件', - 'counts' => '共 :num 条消息', + 'counts' => '共 :num 条消息', ], - 'send_status' => '发送状态', - 'send_time' => '发送时间', + 'send_status' => '发送状态', + 'send_time' => '发送时间', 'error_message' => '错误信息', - 'push' => [ - 'title' => '推送消息列表', - 'send' => '推送消息', + 'push' => [ + 'title' => '推送消息列表', + 'send' => '推送消息', 'counts' => '共 :num 条推送消息', ], ], - 'creating' => '正在添加...', - 'article' => [ - 'type' => [ - 'knowledge' => '文章', + 'creating' => '正在添加...', + 'article' => [ + 'type' => [ + 'knowledge' => '文章', 'announcement' => '公告', ], 'category_hint' => '同一类别将归类与同一文件夹下', - 'logo_hint' => '推荐尺寸:100x75', - 'title' => '文章列表', - 'counts' => '共 :num 篇文章', + 'logo_hint' => '推荐尺寸:100x75', + 'title' => '文章列表', + 'counts' => '共 :num 篇文章', ], - 'coupon' => [ - 'title' => '卡券列表', - 'name_hint' => '会用于前端显示', - 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', - 'type' => [ - 'voucher' => '抵用券', + 'coupon' => [ + 'title' => '卡券列表', + 'name_hint' => '会用于前端显示', + 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', + 'type' => [ + 'voucher' => '抵用券', 'discount' => '折扣券', - 'charge' => '充值券', + 'charge' => '充值券', ], - 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', - 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', - 'value_hint' => '范围为 1% ~ 99% ', - 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', - 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', - 'used_hint' => '符合条件的用户可以使用本券 :num 次;', - 'levels_hint' => '用户等级在选定等级内,方可使用本券', - 'groups_hint' => '选定的用户分组,方可使用本券', - 'users_placeholder' => '输入用户ID, 再回车', - 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', - 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', - 'services_placeholder' => '输入商品ID, 再回车', + 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', + 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', + 'value_hint' => '范围为 1% ~ 99% ', + 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', + 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', + 'used_hint' => '符合条件的用户可以使用本券 :num 次;', + 'levels_hint' => '用户等级在选定等级内,方可使用本券', + 'groups_hint' => '选定的用户分组,方可使用本券', + 'users_placeholder' => '输入用户ID, 再回车', + 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', + 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', + 'services_placeholder' => '输入商品ID, 再回车', 'services_whitelist_hint' => '涉及商品方可使用本券,留空为不使用此条件', 'services_blacklist_hint' => '涉及商品不可使用本券,留空为不使用此条件', - 'newbie' => [ + 'newbie' => [ 'first_discount' => '首次用任意券', - 'first_order' => '首单', - 'created_days' => '创号', + 'first_order' => '首单', + 'created_days' => '创号', ], - 'created_days_hint' => '且 创号 :days 天', - 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', - 'info_title' => '卡券信息', - 'counts' => '共 :num 张优惠券', - 'discount' => '优惠', - 'export_title' => '卡券导出', - 'single_use' => '一次性', + 'created_days_hint' => '且 创号 :days 天', + 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', + 'info_title' => '卡券信息', + 'counts' => '共 :num 张优惠券', + 'discount' => '优惠', + 'export_title' => '卡券导出', + 'single_use' => '一次性', ], - 'times' => '次', - 'massive_export' => '批量导出', - 'system_generate' => '系统生成', - 'aff' => [ - 'rebate_title' => '返利流水记录', - 'counts' => '共 :num 个申请', - 'title' => '提现申请列表', - 'apply_counts' => '共 :num 个申请', - 'referral' => '推广返利', - 'commission_title' => '提现申请详情', + 'times' => '次', + 'massive_export' => '批量导出', + 'system_generate' => '系统生成', + 'aff' => [ + 'rebate_title' => '返利流水记录', + 'counts' => '共 :num 个申请', + 'title' => '提现申请列表', + 'apply_counts' => '共 :num 个申请', + 'referral' => '推广返利', + 'commission_title' => '提现申请详情', 'commission_counts' => '本申请共涉及 :num 单', ], - 'setting' => [ - 'common' => [ - 'title' => '通用配置', - 'set_default' => '设为默认', + 'setting' => [ + 'common' => [ + 'title' => '通用配置', + 'set_default' => '设为默认', 'connect_nodes' => '关联节点数', ], - 'email' => [ - 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', - 'tail' => '邮箱后缀', - 'rule' => 'Quy tắc', - 'black' => '黑名单', - 'white' => '白名单', + 'email' => [ + 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', + 'tail' => '邮箱后缀', + 'rule' => 'Quy tắc', + 'black' => '黑名单', + 'white' => '白名单', 'tail_placeholder' => '请填入邮箱后缀', ], - 'system' => [ - 'title' => '系统配置', - 'web' => '网站常规', - 'account' => '账号设置', - 'node' => '节点设置', - 'extend' => '拓展功能', - 'check_in' => '签到系统', + 'system' => [ + 'title' => '系统配置', + 'web' => '网站常规', + 'account' => '账号设置', + 'node' => '节点设置', + 'extend' => '拓展功能', + 'check_in' => '签到系统', 'promotion' => '推广系统', - 'notify' => '通知系统', - 'auto_job' => '自动任务', - 'other' => 'LOGO|客服|统计', - 'payment' => '支付系统', - 'menu' => '菜单', + 'notify' => '通知系统', + 'auto_job' => '自动任务', + 'other' => 'LOGO|客服|统计', + 'payment' => '支付系统', + 'menu' => '菜单', ], 'no_permission' => '您没有权限修改参数!', ], - 'system' => [ - 'account_expire_notification' => '账号过期通知', - 'active_times' => '激活账号次数', - 'admin_invite_days' => '管理员-邀请码有效期', - 'aff_salt' => '邀请链接 用户信息字符化', - 'alipay_qrcode' => '支付宝二维码', - 'AppStore_id' => '苹果账号', - 'AppStore_password' => '苹果密码', - 'auto_release_port' => '端口回收机制', - 'bark_key' => 'Bark设备号', - 'captcha_key' => '验证码 Key', - 'captcha_secret' => '验证码 Secret/ID', - 'codepay_id' => '码支付ID', - 'codepay_key' => '通信密钥', - 'codepay_url' => '请求URL', - 'data_anomaly_notification' => '流量异常通知', - 'data_exhaust_notification' => '流量耗尽通知', - 'ddns_key' => 'DNS服务商Key', - 'ddns_mode' => 'DDNS模式', - 'ddns_secret' => 'DNS服务商Secret', - 'default_days' => '初始有效期', - 'default_traffic' => '初始流量', - 'detection_check_times' => '阻断检测提醒', - 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', - 'dingTalk_secret' => '钉钉自定义机器人 密钥', - 'epay_key' => '商户密钥', - 'epay_mch_id' => '商户ID', - 'epay_url' => '接口对接地址', - 'expire_days' => '过期警告阈值', - 'f2fpay_app_id' => '应用ID', - 'f2fpay_private_key' => '应用私钥', - 'f2fpay_public_key' => '支付宝公钥', - 'forbid_mode' => '禁止访问模式', - 'invite_num' => '可生成邀请码数', - 'is_activate_account' => '激活账号', - 'is_AliPay' => '支付宝支付', - 'is_ban_status' => '过期自动封禁', - 'is_captcha' => '验证码模式', - 'is_checkin' => '签到加流量', - 'is_clear_log' => '自动清除日志', - 'is_custom_subscribe' => '高级订阅', - 'is_email_filtering' => '邮箱过滤机制', - 'is_forbid_robot' => '阻止机器人访问', - 'is_free_code' => '免费邀请码', - 'is_invite_register' => '邀请注册', - 'is_otherPay' => '特殊支付', - 'is_QQPay' => 'QQ钱包', - 'is_rand_port' => '随机端口', - 'is_register' => '用户注册', - 'is_subscribe_ban' => '订阅异常自动封禁', - 'is_traffic_ban' => '异常自动封号', - 'is_WeChatPay' => '微信支付', - 'iYuu_token' => 'IYUU令牌', - 'maintenance_content' => '维护介绍内容', - 'maintenance_mode' => 'Trạng Thái Bảo Trì', - 'maintenance_time' => '维护结束时间', - 'min_port' => '端口范围', - 'min_rand_traffic' => '流量范围', - 'node_blocked_notification' => '节点阻断提醒', - 'node_daily_notification' => '节点使用报告', - 'node_offline_notification' => '节点离线提醒', - 'oauth_path' => '第三方登录平台', - 'offline_check_times' => '离线提醒次数', - 'password_reset_notification' => 'Đặt Lại Mật Khẩu', - 'paybeaver_app_id' => 'App ID', - 'paybeaver_app_secret' => 'App Secret', - 'payjs_key' => '通信密钥', - 'payjs_mch_id' => '商户号', - 'payment_confirm_notification' => '人工支付确认通知', + 'system' => [ + 'account_expire_notification' => '账号过期通知', + 'active_times' => '激活账号次数', + 'admin_invite_days' => '管理员-邀请码有效期', + 'aff_salt' => '邀请链接 用户信息字符化', + 'alipay_qrcode' => '支付宝二维码', + 'AppStore_id' => '苹果账号', + 'AppStore_password' => '苹果密码', + 'auto_release_port' => '端口回收机制', + 'bark_key' => 'Bark设备号', + 'captcha_key' => '验证码 Key', + 'captcha_secret' => '验证码 Secret/ID', + 'codepay_id' => '码支付ID', + 'codepay_key' => '通信密钥', + 'codepay_url' => '请求URL', + 'data_anomaly_notification' => '流量异常通知', + 'data_exhaust_notification' => '流量耗尽通知', + 'ddns_key' => 'DNS服务商Key', + 'ddns_mode' => 'DDNS模式', + 'ddns_secret' => 'DNS服务商Secret', + 'default_days' => '初始有效期', + 'default_traffic' => '初始流量', + 'detection_check_times' => '阻断检测提醒', + 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', + 'dingTalk_secret' => '钉钉自定义机器人 密钥', + 'epay_key' => '商户密钥', + 'epay_mch_id' => '商户ID', + 'epay_url' => '接口对接地址', + 'expire_days' => '过期警告阈值', + 'f2fpay_app_id' => '应用ID', + 'f2fpay_private_key' => '应用私钥', + 'f2fpay_public_key' => '支付宝公钥', + 'forbid_mode' => '禁止访问模式', + 'invite_num' => '可生成邀请码数', + 'is_activate_account' => '激活账号', + 'is_AliPay' => '支付宝支付', + 'is_ban_status' => '过期自动封禁', + 'is_captcha' => '验证码模式', + 'is_checkin' => '签到加流量', + 'is_clear_log' => '自动清除日志', + 'is_custom_subscribe' => '高级订阅', + 'is_email_filtering' => '邮箱过滤机制', + 'is_forbid_robot' => '阻止机器人访问', + 'is_free_code' => '免费邀请码', + 'is_invite_register' => '邀请注册', + 'is_otherPay' => '特殊支付', + 'is_QQPay' => 'QQ钱包', + 'is_rand_port' => '随机端口', + 'is_register' => '用户注册', + 'is_subscribe_ban' => '订阅异常自动封禁', + 'is_traffic_ban' => '异常自动封号', + 'is_WeChatPay' => '微信支付', + 'iYuu_token' => 'IYUU令牌', + 'maintenance_content' => '维护介绍内容', + 'maintenance_mode' => 'Trạng Thái Bảo Trì', + 'maintenance_time' => '维护结束时间', + 'min_port' => '端口范围', + 'min_rand_traffic' => '流量范围', + 'node_blocked_notification' => '节点阻断提醒', + 'node_daily_notification' => '节点使用报告', + 'node_offline_notification' => '节点离线提醒', + 'oauth_path' => '第三方登录平台', + 'offline_check_times' => '离线提醒次数', + 'password_reset_notification' => 'Đặt Lại Mật Khẩu', + 'paybeaver_app_id' => 'App ID', + 'paybeaver_app_secret' => 'App Secret', + 'payjs_key' => '通信密钥', + 'payjs_mch_id' => '商户号', + 'payment_confirm_notification' => '人工支付确认通知', 'payment_received_notification' => '支付成功通知', - 'paypal_app_id' => '应用ID', - 'paypal_certificate' => '证书', - 'paypal_password' => 'API密码', - 'paypal_secret' => '签名', - 'paypal_username' => 'API用户名', - 'pushDeer_key' => 'PushDeer Key', - 'pushplus_token' => 'PushPlus Token', - 'rand_subscribe' => '随机订阅', - 'redirect_url' => '重定向地址', - 'referral_money' => '提现限制', - 'referral_percent' => '返利比例', - 'referral_status' => '推广功能', - 'referral_traffic' => '注册送流量', - 'referral_type' => '返利模式', - 'register_ip_limit' => '同IP注册限制', - 'reset_password_times' => '重置密码次数', - 'reset_traffic' => '流量自动重置', - 'server_chan_key' => 'ServerChan SCKEY', - 'standard_currency' => '本位货币', - 'stripe_public_key' => 'Public Key', - 'stripe_secret_key' => 'Secret Key', - 'stripe_signing_secret' => 'WebHook Signing secret', - 'subject_name' => '自定义商品名称', - 'subscribe_ban_times' => '订阅请求阈值', - 'subscribe_domain' => '节点订阅地址', - 'subscribe_max' => '订阅节点数', - 'telegram_token' => 'Telegram Token', - 'tg_chat_token' => 'TG酱Token', - 'theadpay_key' => '商家密钥', - 'theadpay_mchid' => '商家ID', - 'theadpay_url' => '接口地址', - 'ticket_closed_notification' => '工单关闭通知', - 'ticket_created_notification' => '新工单通知', - 'ticket_replied_notification' => '工单回复通知', - 'traffic_ban_time' => '封号时长', - 'traffic_ban_value' => '流量异常阈值', - 'traffic_limit_time' => '时间间隔', - 'traffic_warning_percent' => '流量警告阈值', - 'trojan_license' => 'Trojan授权', - 'username_type' => '账号类型', - 'user_invite_days' => '用户-邀请码有效期', - 'v2ray_license' => 'V2Ray授权', - 'v2ray_tls_provider' => 'V2Ray TLS配置', - 'webmaster_email' => '管理员邮箱', - 'website_analytics' => '统计代码', - 'website_callback_url' => '通用支付回调地址', - 'website_customer_service' => '客服代码', - 'website_home_logo' => '首页LOGO', - 'website_logo' => '站内LOGO', - 'website_name' => '网站名称', - 'website_security_code' => '网站安全码', - 'website_url' => '网站地址', - 'web_api_url' => '授权/后端访问域名', - 'wechat_aid' => '微信企业应用ID', - 'wechat_cid' => '微信企业ID', - 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', - 'wechat_qrcode' => '微 信二维码', - 'wechat_secret' => '微信企业应用密钥', - 'wechat_token' => '微信企业应用TOKEN', - 'hint' => [ - 'account_expire_notification' => '通知用户账号即将到期', - 'active_times' => '24小时内可以通过邮件激活账号次数', - 'admin_invite_days' => '管理员生成邀请码的有效期', - 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', - 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', - 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', - 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', - 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', - 'captcha_key' => '浏览设置指南来设置', - 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', - 'data_exhaust_notification' => '通知用户流量即将耗尽', - 'ddns_key' => "浏览设置指南来设置", - 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', - 'default_days' => '用户注册时默认账户有效期,为0即当天到期', - 'default_traffic' => '用户注册时默认可用流量', - 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', - 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', - 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', - 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', - 'f2fpay_app_id' => '即:APPID', - 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', - 'f2fpay_public_key' => '注意不是应用公钥!', - 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', - 'invite_num' => '用户可以生成的邀请码数', - 'is_activate_account' => '启用后用户需要通过邮件来激活账号', - 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', - 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', - 'is_checkin' => '登录时将根据流量范围随机得到流量', - 'is_clear_log' => '(推荐)启用后自动清除无用日志', - 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', - 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', - 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', - 'is_free_code' => '关闭后免费邀请码不可见', - 'is_rand_port' => '注册、添加用户时随机生成端口', - 'is_register' => '关闭后无法注册', - 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', - 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', - 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', - 'maintenance_content' => '自定义维护内容信息', - 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", - 'maintenance_time' => '用于维护界面倒计时', - 'min_port' => '端口范围:1000 - 65535', - 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', - 'node_daily_notification' => '报告各节点流量昨日消耗情况', - 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', - 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', - 'offline_check_times' => '24小时内提醒n次后不再提醒', - 'password_reset_notification' => '启用后用户可以重置密码', - 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', - 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', - 'payjs_mch_id' => '在本界面获取信息', - 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', + 'paypal_app_id' => '应用ID', + 'paypal_certificate' => '证书', + 'paypal_password' => 'API密码', + 'paypal_secret' => '签名', + 'paypal_username' => 'API用户名', + 'pushDeer_key' => 'PushDeer Key', + 'pushplus_token' => 'PushPlus Token', + 'rand_subscribe' => '随机订阅', + 'redirect_url' => '重定向地址', + 'referral_money' => '提现限制', + 'referral_percent' => '返利比例', + 'referral_status' => '推广功能', + 'referral_traffic' => '注册送流量', + 'referral_type' => '返利模式', + 'register_ip_limit' => '同IP注册限制', + 'reset_password_times' => '重置密码次数', + 'reset_traffic' => '流量自动重置', + 'server_chan_key' => 'ServerChan SCKEY', + 'standard_currency' => '本位货币', + 'stripe_public_key' => 'Public Key', + 'stripe_secret_key' => 'Secret Key', + 'stripe_signing_secret' => 'WebHook Signing secret', + 'subject_name' => '自定义商品名称', + 'subscribe_ban_times' => '订阅请求阈值', + 'subscribe_domain' => '节点订阅地址', + 'subscribe_max' => '订阅节点数', + 'telegram_token' => 'Telegram Token', + 'tg_chat_token' => 'TG酱Token', + 'theadpay_key' => '商家密钥', + 'theadpay_mchid' => '商家ID', + 'theadpay_url' => '接口地址', + 'ticket_closed_notification' => '工单关闭通知', + 'ticket_created_notification' => '新工单通知', + 'ticket_replied_notification' => '工单回复通知', + 'traffic_ban_time' => '封号时长', + 'traffic_ban_value' => '流量异常阈值', + 'traffic_limit_time' => '时间间隔', + 'traffic_warning_percent' => '流量警告阈值', + 'trojan_license' => 'Trojan授权', + 'username_type' => '账号类型', + 'user_invite_days' => '用户-邀请码有效期', + 'v2ray_license' => 'V2Ray授权', + 'v2ray_tls_provider' => 'V2Ray TLS配置', + 'webmaster_email' => '管理员邮箱', + 'website_analytics' => '统计代码', + 'website_callback_url' => '通用支付回调地址', + 'website_customer_service' => '客服代码', + 'website_home_logo' => '首页LOGO', + 'website_logo' => '站内LOGO', + 'website_name' => '网站名称', + 'website_security_code' => '网站安全码', + 'website_url' => '网站地址', + 'web_api_url' => '授权/后端访问域名', + 'wechat_aid' => '微信企业应用ID', + 'wechat_cid' => '微信企业ID', + 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', + 'wechat_qrcode' => '微 信二维码', + 'wechat_secret' => '微信企业应用密钥', + 'wechat_token' => '微信企业应用TOKEN', + 'hint' => [ + 'account_expire_notification' => '通知用户账号即将到期', + 'active_times' => '24小时内可以通过邮件激活账号次数', + 'admin_invite_days' => '管理员生成邀请码的有效期', + 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', + 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', + 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', + 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', + 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', + 'captcha_key' => '浏览设置指南来设置', + 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', + 'data_exhaust_notification' => '通知用户流量即将耗尽', + 'ddns_key' => "浏览设置指南来设置", + 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', + 'default_days' => '用户注册时默认账户有效期,为0即当天到期', + 'default_traffic' => '用户注册时默认可用流量', + 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', + 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', + 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', + 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', + 'f2fpay_app_id' => '即:APPID', + 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', + 'f2fpay_public_key' => '注意不是应用公钥!', + 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', + 'invite_num' => '用户可以生成的邀请码数', + 'is_activate_account' => '启用后用户需要通过邮件来激活账号', + 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', + 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', + 'is_checkin' => '登录时将根据流量范围随机得到流量', + 'is_clear_log' => '(推荐)启用后自动清除无用日志', + 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', + 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', + 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', + 'is_free_code' => '关闭后免费邀请码不可见', + 'is_rand_port' => '注册、添加用户时随机生成端口', + 'is_register' => '关闭后无法注册', + 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', + 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', + 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', + 'maintenance_content' => '自定义维护内容信息', + 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", + 'maintenance_time' => '用于维护界面倒计时', + 'min_port' => '端口范围:1000 - 65535', + 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', + 'node_daily_notification' => '报告各节点流量昨日消耗情况', + 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', + 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', + 'offline_check_times' => '24小时内提醒n次后不再提醒', + 'password_reset_notification' => '启用后用户可以重置密码', + 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', + 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', + 'payjs_mch_id' => '在本界面获取信息', + 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', 'payment_received_notification' => '用户支付订单后通知用户订单状态', - 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', - 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', - 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', - 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', - 'referral_money' => '满多少元才可以申请提现', - 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', - 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', - 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', - 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', - 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', - 'reset_password_times' => '24小时内可以通过邮件重置密码次数', - 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', - 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', - 'standard_currency' => '网站中涉及金钱部分的默认货币', - 'subject_name' => '用于在支付渠道的商品标题显示', - 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', - 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', - 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', - 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', - 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', - 'ticket_closed_notification' => '工单关闭通知用户', - 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', - 'ticket_replied_notification' => '工单回复通知对方', - 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', - 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', - 'traffic_limit_time' => '间隔多久才可以再次签到', - 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', - 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', - 'user_invite_days' => '用户自行生成邀请的有效期', - 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', - 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', - 'website_analytics' => '统计JS', - 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', - 'website_customer_service' => '客服JS', - 'website_name' => '发邮件时展示', - 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', - 'website_url' => '生成重置密码、在线支付必备', - 'web_api_url' => '例:https://demo.proxypanel.cf', - 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', - 'wechat_cid' => '获取我的企业中的企业ID', - 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', - 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', - 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', + 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', + 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', + 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', + 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', + 'referral_money' => '满多少元才可以申请提现', + 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', + 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', + 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', + 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', + 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', + 'reset_password_times' => '24小时内可以通过邮件重置密码次数', + 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', + 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', + 'standard_currency' => '网站中涉及金钱部分的默认货币', + 'subject_name' => '用于在支付渠道的商品标题显示', + 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', + 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', + 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', + 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', + 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', + 'ticket_closed_notification' => '工单关闭通知用户', + 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', + 'ticket_replied_notification' => '工单回复通知对方', + 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', + 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', + 'traffic_limit_time' => '间隔多久才可以再次签到', + 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', + 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', + 'user_invite_days' => '用户自行生成邀请的有效期', + 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', + 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', + 'website_analytics' => '统计JS', + 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', + 'website_customer_service' => '客服JS', + 'website_name' => '发邮件时展示', + 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', + 'website_url' => '生成重置密码、在线支付必备', + 'web_api_url' => '例:https://demo.proxypanel.cf', + 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', + 'wechat_cid' => '获取我的企业中的企业ID', + 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', + 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', + 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', ], - 'placeholder' => [ - 'default_url' => '默认为 :url', - 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', - 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', - 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', - 'bark_key' => '填入Bark的设备号 -> 再点击更新', - 'telegram_token' => '填入Telegram的 Token -> 再点击更新', - 'pushplus_token' => '请到ServerChan申请', + 'placeholder' => [ + 'default_url' => '默认为 :url', + 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', + 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', + 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', + 'bark_key' => '填入Bark的设备号 -> 再点击更新', + 'telegram_token' => '填入Telegram的 Token -> 再点击更新', + 'pushplus_token' => '请到ServerChan申请', 'dingTalk_access_token' => '自定义机器人的WebHook中的access_token', - 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', - 'wechat_aid' => '应用的AgentId', - 'wechat_cid' => '填入微信企业ID -> 再点击更新', - 'wechat_secret' => '应用的Secret', - 'tg_chat_token' => '请到Telegram申请', - 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', + 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', + 'wechat_aid' => '应用的AgentId', + 'wechat_cid' => '填入微信企业ID -> 再点击更新', + 'wechat_secret' => '应用的Secret', + 'tg_chat_token' => '请到Telegram申请', + 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', ], - 'payment' => [ + 'payment' => [ 'attribute' => '支付设置', - 'channel' => [ - 'alipay' => '支付宝F2F', - 'codepay' => '码支付', - 'epay' => '易支付', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal', - 'stripe' => 'Stripe', + 'channel' => [ + 'alipay' => '支付宝F2F', + 'codepay' => '码支付', + 'epay' => '易支付', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal', + 'stripe' => 'Stripe', 'paybeaver' => '海狸支付', - 'theadpay' => '平头哥支付', - 'manual' => '人工支付', + 'theadpay' => '平头哥支付', + 'manual' => '人工支付', ], - 'hint' => [ - 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', - 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', - 'payjs' => '请到PayJs 申请账号', - 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', + 'hint' => [ + 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', + 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', + 'payjs' => '请到PayJs 申请账号', + 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', 'paybeaver' => '请到海狸支付 PayBeaver申请账号', - 'theadpay' => '请到平头哥支付 THeadPay申请账号', - 'manual' => '设置后会自动开启对应显示', + 'theadpay' => '请到平头哥支付 THeadPay申请账号', + 'manual' => '设置后会自动开启对应显示', ], ], - 'notification' => [ - 'channel' => [ - 'telegram' => 'TG电报', - 'wechat' => '微信企业', - 'dingtalk' => '钉钉', - 'email' => 'email', - 'bark' => 'Bark', + 'notification' => [ + 'channel' => [ + 'telegram' => 'TG电报', + 'wechat' => '微信企业', + 'dingtalk' => '钉钉', + 'email' => 'email', + 'bark' => 'Bark', 'serverchan' => 'ServerChan', - 'pushdeer' => 'PushDeer', - 'pushplus' => 'PushPlus', - 'iyuu' => '爱语飞飞', - 'tg_chat' => 'TG酱', - 'site' => '站内通知', + 'pushdeer' => 'PushDeer', + 'pushplus' => 'PushPlus', + 'iyuu' => '爱语飞飞', + 'tg_chat' => 'TG酱', + 'site' => '站内通知', ], 'send_test' => '发送测试消息', ], - 'forbid' => [ + 'forbid' => [ 'mainland' => '阻拦大陆', - 'china' => '阻拦中国', - 'oversea' => '阻拦海外', + 'china' => '阻拦中国', + 'oversea' => '阻拦海外', ], - 'username' => [ - 'email' => '电子邮箱', + 'username' => [ + 'email' => '电子邮箱', 'mobile' => '手机号码', - 'any' => '任意用户名', + 'any' => '任意用户名', ], - 'active_account' => [ + 'active_account' => [ 'before' => '注册前激活', - 'after' => '注册后激活', + 'after' => '注册后激活', ], - 'ddns' => [ - 'namesilo' => 'Namesilo', - 'aliyun' => '阿里云(国际&国内)', - 'dnspod' => 'DNSPod', + 'ddns' => [ + 'namesilo' => 'Namesilo', + 'aliyun' => '阿里云(国际&国内)', + 'dnspod' => 'DNSPod', 'cloudflare' => 'CloudFlare', ], - 'captcha' => [ - 'standard' => '普通验证码', - 'geetest' => '极 验', + 'captcha' => [ + 'standard' => '普通验证码', + 'geetest' => '极 验', 'recaptcha' => 'Google reCaptcha', - 'hcaptcha' => 'hCaptcha', + 'hcaptcha' => 'hCaptcha', ], - 'referral' => [ + 'referral' => [ 'once' => '首购返利', 'loop' => '循环返利', ], ], - 'set_to' => '置 :attribute', - 'minute' => '分钟', - 'query' => '查 询', - 'optional' => '可选', - 'require' => '必须', + 'set_to' => '置 :attribute', + 'minute' => '分钟', + 'query' => '查 询', + 'optional' => '可选', + 'require' => '必须', ]; diff --git a/resources/lang/vi/auth.php b/resources/lang/vi/auth.php index a0150199..9492a93b 100644 --- a/resources/lang/vi/auth.php +++ b/resources/lang/vi/auth.php @@ -1,98 +1,98 @@ '我已阅读并同意遵守', - 'active' => [ + 'accept_term' => '我已阅读并同意遵守', + 'active' => [ 'attribute' => '激活', - 'error' => [ + 'error' => [ 'activated' => '账号已激活,无需再次激活', - 'disable' => '本站关闭了账号激活子系统,您可以直接去登录!', - 'throttle' => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email', + 'disable' => '本站关闭了账号激活子系统,您可以直接去登录!', + 'throttle' => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email', ], 'promotion' => '账号尚未激活,请先「:action」!', - 'sent' => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱', + 'sent' => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱', ], - 'aup' => '可接受使用条款', - 'captcha' => [ + 'aup' => '可接受使用条款', + 'captcha' => [ 'attribute' => '验证码', - 'error' => [ - 'failed' => '验证码验证失败,请重新输入', + 'error' => [ + 'failed' => '验证码验证失败,请重新输入', 'timeout' => '验证码不合法!可能已过期,请刷新后重试', ], - 'required' => '请正确完成验证码操作', - 'sent' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱', + 'required' => '请正确完成验证码操作', + 'sent' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱', ], - 'email' => [ + 'email' => [ 'error' => [ - 'banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', + 'banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', 'invalid' => '使用邮箱不在本站支持邮箱列表内', ], ], - 'error' => [ - 'account_baned' => '您的账号已被禁止登录!', - 'login_error' => '登录错误,请稍后重试!', - 'login_failed' => '登录失败,请检查邮箱或密码是否输入正确!', + 'error' => [ + 'account_baned' => '您的账号已被禁止登录!', + 'login_error' => '登录错误,请稍后重试!', + 'login_failed' => '登录失败,请检查邮箱或密码是否输入正确!', 'not_found_user' => '未找到关联账号,请使用其他方式登录', 'repeat_request' => '请勿重复请求,请刷新后重试', - 'url_timeout' => '链接已失效, 请重新操作', + 'url_timeout' => '链接已失效, 请重新操作', ], - 'failed' => 'Thông tin tài khoản không tìm thấy trong hệ thống.', - 'invite' => [ - 'attribute' => '邀请码', - 'error' => [ + 'failed' => 'Thông tin tài khoản không tìm thấy trong hệ thống.', + 'invite' => [ + 'attribute' => '邀请码', + 'error' => [ 'unavailable' => '邀请码不可用,请重试', ], - 'get' => '点击获取邀请码', + 'get' => '点击获取邀请码', 'not_required' => '无需邀请码,可直接注册!', ], - 'login' => '登 录', - 'logout' => '登 出', - 'maintenance' => '维护', + 'login' => '登 录', + 'logout' => '登 出', + 'maintenance' => '维护', 'maintenance_tip' => '网站维护中', - 'oauth' => [ - 'bind_failed' => '绑定失败', - 'bind_success' => '绑定成功', - 'login_failed' => '第三方登录失败!', - 'rebind_success' => '重新绑定成功', - 'register' => '快速注册', + 'oauth' => [ + 'bind_failed' => '绑定失败', + 'bind_success' => '绑定成功', + 'login_failed' => '第三方登录失败!', + 'rebind_success' => '重新绑定成功', + 'register' => '快速注册', 'register_failed' => '注册失败', - 'registered' => '已注册,请直接登录', - 'unbind_failed' => '解绑失败', - 'unbind_success' => '解绑成功', + 'registered' => '已注册,请直接登录', + 'unbind_failed' => '解绑失败', + 'unbind_success' => '解绑成功', ], - 'optional' => '可选', - 'password' => [ - 'forget' => 'Quên Mật Khẩu?', - 'new' => '输入新密码', + 'optional' => '可选', + 'password' => [ + 'forget' => 'Quên Mật Khẩu?', + 'new' => '输入新密码', 'original' => '原密码', - 'reset' => [ + 'reset' => [ 'attribute' => 'Đặt Lại Mật Khẩu', - 'error' => [ + 'error' => [ 'disabled' => '本站关闭了密码重置子系统,有事请联系 :email ', - 'failed' => '重设密码失败', + 'failed' => '重设密码失败', 'throttle' => '24小时内只能重设密码 :time 次,请勿频繁操作', - 'same' => '新密码不可与旧密码一样,请重新输入', - 'wrong' => '旧密码错误,请重新输入', - 'demo' => '演示环境禁止修改管理员密码', + 'same' => '新密码不可与旧密码一样,请重新输入', + 'wrong' => '旧密码错误,请重新输入', + 'demo' => '演示环境禁止修改管理员密码', ], - 'sent' => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)', - 'success' => '新密码设置成功,请前往登录页面', + 'sent' => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)', + 'success' => '新密码设置成功,请前往登录页面', ], ], - 'register' => [ + 'register' => [ 'attribute' => '注 册', - 'code' => '注册验证码', - 'error' => [ - 'disable' => '抱歉,本站关闭了注册通道', + 'code' => '注册验证码', + 'error' => [ + 'disable' => '抱歉,本站关闭了注册通道', 'throttle' => '防刷机制已激活,请勿频繁注册', ], - 'failed' => '注册失败,请稍后尝试', + 'failed' => '注册失败,请稍后尝试', 'promotion' => '还没有账号?请去', - 'success' => '注册成功', + 'success' => '注册成功', ], - 'remember_me' => 'Ghi Nhớ', - 'request' => '获 取', - 'throttle' => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.', - 'tos' => '用户条款', + 'remember_me' => 'Ghi Nhớ', + 'request' => '获 取', + 'throttle' => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.', + 'tos' => '用户条款', 'one-click_login' => '一键登录', ]; diff --git a/resources/lang/vi/common.php b/resources/lang/vi/common.php index fd0af68c..94ba8737 100644 --- a/resources/lang/vi/common.php +++ b/resources/lang/vi/common.php @@ -1,87 +1,87 @@ '{1} 时|{2} 点', - 'account' => 'Tài khoản', - 'available_date' => 'Thời gian hiệu lực', - 'created_at' => '创建时间', - 'expired_at' => '到期时间', - 'updated_at' => '更新时间', - 'latest_at' => '最近时间', - 'back' => '返 回', - 'cancel' => '取 消', - 'close' => '关 闭', - 'close_item' => '关闭:attribute', - 'confirm' => '确 认', - 'continues' => '继 续', - 'open' => '打 开', - 'send' => '发 送', - 'view' => '查 看', - 'reset' => '重 置', - 'copy' => [ + 'hour' => '{1} 时|{2} 点', + 'account' => 'Tài khoản', + 'available_date' => 'Thời gian hiệu lực', + 'created_at' => '创建时间', + 'expired_at' => '到期时间', + 'updated_at' => '更新时间', + 'latest_at' => '最近时间', + 'back' => '返 回', + 'cancel' => '取 消', + 'close' => '关 闭', + 'close_item' => '关闭:attribute', + 'confirm' => '确 认', + 'continues' => '继 续', + 'open' => '打 开', + 'send' => '发 送', + 'view' => '查 看', + 'reset' => '重 置', + 'copy' => [ 'attribute' => '复 制', - 'success' => '复制成功', - 'failed' => '复制失败,请手动复制', + 'success' => '复制成功', + 'failed' => '复制失败,请手动复制', ], - 'add' => '添 加', - 'free' => '免费', - 'replace' => '更换', - 'submit' => '提 交', - 'submit_item' => '提交:attribute', - 'generate' => '生 成', - 'generate_item' => '生成:attribute', - 'to_safari' => [0 => '点击右上角', 1 => ',选择在', 2 => 'Safari 中打开', 3 => '就可以正常访问本站了哟!'], - 'update_browser' => [0 => '您正在使用', 1 => '过时', 2 => '的浏览器。 请', 3 => '升级您的浏览器', 4 => '来获得最佳的浏览体验'], - 'apply' => '应 用', - 'avatar' => '头像', - 'customize' => '自定义', - 'all' => '全部', - 'default' => '默认', - 'download' => '下 载', - 'goto' => '前 往', - 'warning' => '警 告', - 'success' => '成功', - 'success_item' => ':attribute成功', - 'failed' => '失败', - 'failed_item' => ':attribute失败', - 'update' => '更 新', - 'update_action' => '更新:action', - 'none' => '无', - 'new' => '新', - 'sorry' => '抱歉', - 'applied' => ':attribute生效', - 'active_item' => '激活:attribute', - 'error' => '错误', - 'toggle' => '切 换', - 'toggle_action' => '切换:action', - 'request_url' => '请求地址', - 'function' => [ + 'add' => '添 加', + 'free' => '免费', + 'replace' => '更换', + 'submit' => '提 交', + 'submit_item' => '提交:attribute', + 'generate' => '生 成', + 'generate_item' => '生成:attribute', + 'to_safari' => [0 => '点击右上角', 1 => ',选择在', 2 => 'Safari 中打开', 3 => '就可以正常访问本站了哟!'], + 'update_browser' => [0 => '您正在使用', 1 => '过时', 2 => '的浏览器。 请', 3 => '升级您的浏览器', 4 => '来获得最佳的浏览体验'], + 'apply' => '应 用', + 'avatar' => '头像', + 'customize' => '自定义', + 'all' => '全部', + 'default' => '默认', + 'download' => '下 载', + 'goto' => '前 往', + 'warning' => '警 告', + 'success' => '成功', + 'success_item' => ':attribute成功', + 'failed' => '失败', + 'failed_item' => ':attribute失败', + 'update' => '更 新', + 'update_action' => '更新:action', + 'none' => '无', + 'new' => '新', + 'sorry' => '抱歉', + 'applied' => ':attribute生效', + 'active_item' => '激活:attribute', + 'error' => '错误', + 'toggle' => '切 换', + 'toggle_action' => '切换:action', + 'request_url' => '请求地址', + 'function' => [ 'navigation' => '导航', - 'menubar' => '菜单栏', + 'menubar' => '菜单栏', 'fullscreen' => '全屏', ], - 'days' => [ + 'days' => [ 'attribute' => '{1} 天|{2} 日', - 'sun' => '周日', - 'mon' => '周一', - 'tue' => '周二', - 'wed' => '周三', - 'thu' => '周四', - 'fri' => '周五', - 'sat' => '周六', - 'weekend' => '周末', - 'work' => '工作日', - 'next' => '次日', + 'sun' => '周日', + 'mon' => '周一', + 'tue' => '周二', + 'wed' => '周三', + 'thu' => '周四', + 'fri' => '周五', + 'sat' => '周六', + 'weekend' => '周末', + 'work' => '工作日', + 'next' => '次日', ], - 'qrcode' => ':attribute二维码', - 'deleted' => '已删除', - 'deleted_item' => ':attribute已删除', - 'print' => '打印', - 'unlimited' => '无限制', - 'payment' => [ + 'qrcode' => ':attribute二维码', + 'deleted' => '已删除', + 'deleted_item' => ':attribute已删除', + 'print' => '打印', + 'unlimited' => '无限制', + 'payment' => [ 'credit' => 'Số dư', 'alipay' => '支付宝', - 'qq' => 'QQ钱包', + 'qq' => 'QQ钱包', 'wechat' => '微信支付', 'crypto' => '虚拟货币', 'manual' => '人工支付', @@ -89,59 +89,59 @@ return [ 'wait' => '待支付', ], ], - 'order' => [ + 'order' => [ 'status' => [ - 'cancel' => '取 消', + 'cancel' => '取 消', 'complete' => '完 成', - 'prepaid' => '预支付', - 'ongoing' => '使用中', - 'review' => '待确认', + 'prepaid' => '预支付', + 'ongoing' => '使用中', + 'review' => '待确认', ], ], - 'recommend' => '推荐', - 'advance' => '进阶', - 'action' => '操作', - 'search' => '搜 索', - 'edit' => '编 辑', - 'delete' => '删 除', - 'status' => [ - 'attribute' => '状态', - 'inactive' => '未激活', - 'disabled' => '停 用', - 'banned' => '禁 用', - 'normal' => '正 常', - 'enabled' => '启 用', - 'expire' => '过 期', - 'limited' => '限 制', - 'run_out' => '流量耗尽', - 'unused' => '未使用', - 'used' => '已使用', - 'closed' => '关 闭', - 'applying' => '申请中', - 'withdrawn' => '已提现', - 'unwithdrawn' => '未提现', - 'reply' => '已回复', - 'pending' => '待处理', - 'unknown' => '未 知', - 'available' => '生效中', - 'reject' => '否 決', - 'rejected' => '已驳回', - 'review' => '待审核', - 'reviewed' => '审核通过待打款', - 'paid' => '已打款', - 'payment_pending' => '待打款', - 'pass' => '通 过', - 'send_to_credit' => '打款至余额', + 'recommend' => '推荐', + 'advance' => '进阶', + 'action' => '操作', + 'search' => '搜 索', + 'edit' => '编 辑', + 'delete' => '删 除', + 'status' => [ + 'attribute' => '状态', + 'inactive' => '未激活', + 'disabled' => '停 用', + 'banned' => '禁 用', + 'normal' => '正 常', + 'enabled' => '启 用', + 'expire' => '过 期', + 'limited' => '限 制', + 'run_out' => '流量耗尽', + 'unused' => '未使用', + 'used' => '已使用', + 'closed' => '关 闭', + 'applying' => '申请中', + 'withdrawn' => '已提现', + 'unwithdrawn' => '未提现', + 'reply' => '已回复', + 'pending' => '待处理', + 'unknown' => '未 知', + 'available' => '生效中', + 'reject' => '否 決', + 'rejected' => '已驳回', + 'review' => '待审核', + 'reviewed' => '审核通过待打款', + 'paid' => '已打款', + 'payment_pending' => '待打款', + 'pass' => '通 过', + 'send_to_credit' => '打款至余额', 'waiting_tobe_send' => '等待投递', ], - 'stay_unchanged' => '留空为不变', + 'stay_unchanged' => '留空为不变', 'random_generate' => '留空则随机生成', - 'request_failed' => '请求错误,请重试', - 'convert' => '转 换', - 'import' => '导 入', - 'or' => '或', - 'more' => '更多', - 'to' => 'tới', - 'to_be_send' => '待发送', - 'developing' => '开发中!敬请期待', + 'request_failed' => '请求错误,请重试', + 'convert' => '转 换', + 'import' => '导 入', + 'or' => '或', + 'more' => '更多', + 'to' => 'tới', + 'to_be_send' => '待发送', + 'developing' => '开发中!敬请期待', ]; diff --git a/resources/lang/vi/errors.php b/resources/lang/vi/errors.php index 88b354d0..8d656754 100644 --- a/resources/lang/vi/errors.php +++ b/resources/lang/vi/errors.php @@ -1,32 +1,32 @@ [ - 'access' => '检测到未知IP或使用代理访问,禁止访问', - 'bots' => '检测到机器人访问,禁止访问', - 'china' => '检测到中国IP或使用代理访问,禁止访问', + 'forbidden' => [ + 'access' => '检测到未知IP或使用代理访问,禁止访问', + 'bots' => '检测到机器人访问,禁止访问', + 'china' => '检测到中国IP或使用代理访问,禁止访问', 'oversea' => '检测到海外IP或代理访问,禁止访问', ], - 'log' => '日志', - 'refresh' => '刷 新', + 'log' => '日志', + 'refresh' => '刷 新', 'refresh_page' => '请刷新页面后,再访问', - 'report' => '错❌误携带了报告:', - 'safe_enter' => '安全入口访问', - 'safe_code' => '请输入安全码', - 'title' => '⚠️错误触发', + 'report' => '错❌误携带了报告:', + 'safe_enter' => '安全入口访问', + 'safe_code' => '请输入安全码', + 'title' => '⚠️错误触发', 'unsafe_enter' => '非安全入口访问', - 'visit' => '请访问', - 'whoops' => '哎呦!', - 'get_ip' => '获取IP信息异常', - 'subscribe' => [ - 'unknown' => '使用链接错误!请重新获取!', - 'sub_baned' => '链接已被封禁,请前往官网查询原因', - 'user' => '错误链接,账号不存在!请重新获取链接', + 'visit' => '请访问', + 'whoops' => '哎呦!', + 'get_ip' => '获取IP信息异常', + 'subscribe' => [ + 'unknown' => '使用链接错误!请重新获取!', + 'sub_baned' => '链接已被封禁,请前往官网查询原因', + 'user' => '错误链接,账号不存在!请重新获取链接', 'user_disable' => '账号被禁用!', - 'baned_until' => '账号封禁至:time,请解封后再更新!', - 'out' => '流量耗尽!请重新购买或重置流量!', - 'expired' => '账号过期!请续费!', - 'question' => '账号存在问题,请前往官网查询!', - 'none' => '无可用节点', + 'baned_until' => '账号封禁至:time,请解封后再更新!', + 'out' => '流量耗尽!请重新购买或重置流量!', + 'expired' => '账号过期!请续费!', + 'question' => '账号存在问题,请前往官网查询!', + 'none' => '无可用节点', ], ]; diff --git a/resources/lang/vi/http-statuses.php b/resources/lang/vi/http-statuses.php index 0bc6a625..22968303 100644 --- a/resources/lang/vi/http-statuses.php +++ b/resources/lang/vi/http-statuses.php @@ -1,76 +1,76 @@ 'Lỗi Không Xác Định', - '100' => 'Tiếp Tục', - '101' => 'Chuyển Đổi Giao Thức', - '102' => 'Đang Xử Lí', - '200' => 'OK', - '201' => 'Đã Tạo', - '202' => 'Đã Chấp Nhận', - '203' => 'Thông Tin Không Có Thẩm Quyền', - '204' => 'Không Có Nội Dung', - '205' => 'Đặt Lại Nội Dung', - '206' => 'Nội Dung Một Phần', - '207' => 'Đa Trạng Thái', - '208' => 'Đã Được Báo Cáo', - '226' => 'Tôi Đã Sử Dụng', - '300' => 'Nhiều Sự Lựa Chọn', - '301' => 'Chuyển Hướng Vĩnh Viễn', - '302' => 'Tìm Thấy', - '303' => 'Xem Cái Khác', - '304' => 'Không Có Thay Đổi', - '305' => 'Dùng Proxy', - '307' => 'Chuyển Hướng Tạm Thời', - '308' => 'Chuyển Hướng Vĩnh Viễn', - '400' => 'Yêu Cầu Không Hợp Lệ', - '401' => 'Không Được Phép', - '402' => 'Yêu Cầu Thanh Toán', - '403' => 'Cấm Truy Cập', - '404' => 'Không Tìm Thấy', - '405' => 'Phương Thức Không Được Phép', - '406' => 'Không Thể Chấp Nhận', - '407' => 'Yêu Càu Xác Thực Proxy', - '408' => 'Quá Thời Gian Yêu Cầu', - '409' => 'Xung Đột', - '410' => 'Không Còn', - '411' => 'Yêu Cầu Chiều Dài', - '412' => 'Điều Kiện Tiên Quyết Không Thành Công', - '413' => 'Tải Trọng Quá Lớn', - '414' => 'URI Quá Dài', - '415' => 'Loại Phương Tiện Không Được Hỗ Trợ', - '416' => 'Phạm Vi Không Đạt Yêu Cầu', - '417' => 'Kỳ Vọng Không Thành Công', - '418' => 'Tôi là teapot', - '419' => 'Phiên Đã Hết Hạn', - '421' => 'Yêu Cầu Sai Hướng', - '422' => 'Không Thể Xử Lí yêu Cầu', - '423' => 'Đã Khóa', - '424' => 'Không Phụ Thuộc', - '426' => 'Yêu Cầu Nâng Cấp', - '428' => 'Yêu Cầu Điều Kiện Tiên Quyết', - '429' => 'Quá Nhiều Yêu Cầu', - '431' => 'Header Của Yêu Cầu Quá Lớn', - '449' => 'Thử Lại Với', - '451' => 'Không Có Sẵn Vì Lí Do Pháp Lí', - '500' => 'Lỗi Từ Máy Chủ Nội Bộ', - '501' => 'Không Được Thực Hiện', - '502' => 'Cổng Không Hợp Lệ', - '503' => 'Trạng Thái Bảo Trì', - '504' => 'Quá Thời Gian Phản Hồi Của Cổng', - '505' => 'Phiên Bản HTTP Không Được Hỗ Trợ', - '506' => 'Biến Thể Cũng Đàm Phán', - '507' => 'Không Đủ Bộ Nhớ', - '508' => 'Phát Hiện Lặp', - '509' => 'Giới Hạn Băng Thông', - '510' => 'Không Mở Rộng', - '511' => 'Yêu Cầu Xác Thực Mạng', - '520' => 'Không Xác Địng', - '521' => 'Máy Chủ Web Đã Tắt', - '522' => 'Quá Thời Gian Kết Nối', - '523' => 'Nguồn Gốc Không Chấp Nhận', - '524' => 'Xảy Ra Thời Gian Chờ', - '525' => 'Kết Nối SSL Không Thành Công', - '526' => 'Chứng Chỉ SSL Không Hợp Lệ', + '0' => 'Lỗi Không Xác Định', + '100' => 'Tiếp Tục', + '101' => 'Chuyển Đổi Giao Thức', + '102' => 'Đang Xử Lí', + '200' => 'OK', + '201' => 'Đã Tạo', + '202' => 'Đã Chấp Nhận', + '203' => 'Thông Tin Không Có Thẩm Quyền', + '204' => 'Không Có Nội Dung', + '205' => 'Đặt Lại Nội Dung', + '206' => 'Nội Dung Một Phần', + '207' => 'Đa Trạng Thái', + '208' => 'Đã Được Báo Cáo', + '226' => 'Tôi Đã Sử Dụng', + '300' => 'Nhiều Sự Lựa Chọn', + '301' => 'Chuyển Hướng Vĩnh Viễn', + '302' => 'Tìm Thấy', + '303' => 'Xem Cái Khác', + '304' => 'Không Có Thay Đổi', + '305' => 'Dùng Proxy', + '307' => 'Chuyển Hướng Tạm Thời', + '308' => 'Chuyển Hướng Vĩnh Viễn', + '400' => 'Yêu Cầu Không Hợp Lệ', + '401' => 'Không Được Phép', + '402' => 'Yêu Cầu Thanh Toán', + '403' => 'Cấm Truy Cập', + '404' => 'Không Tìm Thấy', + '405' => 'Phương Thức Không Được Phép', + '406' => 'Không Thể Chấp Nhận', + '407' => 'Yêu Càu Xác Thực Proxy', + '408' => 'Quá Thời Gian Yêu Cầu', + '409' => 'Xung Đột', + '410' => 'Không Còn', + '411' => 'Yêu Cầu Chiều Dài', + '412' => 'Điều Kiện Tiên Quyết Không Thành Công', + '413' => 'Tải Trọng Quá Lớn', + '414' => 'URI Quá Dài', + '415' => 'Loại Phương Tiện Không Được Hỗ Trợ', + '416' => 'Phạm Vi Không Đạt Yêu Cầu', + '417' => 'Kỳ Vọng Không Thành Công', + '418' => 'Tôi là teapot', + '419' => 'Phiên Đã Hết Hạn', + '421' => 'Yêu Cầu Sai Hướng', + '422' => 'Không Thể Xử Lí yêu Cầu', + '423' => 'Đã Khóa', + '424' => 'Không Phụ Thuộc', + '426' => 'Yêu Cầu Nâng Cấp', + '428' => 'Yêu Cầu Điều Kiện Tiên Quyết', + '429' => 'Quá Nhiều Yêu Cầu', + '431' => 'Header Của Yêu Cầu Quá Lớn', + '449' => 'Thử Lại Với', + '451' => 'Không Có Sẵn Vì Lí Do Pháp Lí', + '500' => 'Lỗi Từ Máy Chủ Nội Bộ', + '501' => 'Không Được Thực Hiện', + '502' => 'Cổng Không Hợp Lệ', + '503' => 'Trạng Thái Bảo Trì', + '504' => 'Quá Thời Gian Phản Hồi Của Cổng', + '505' => 'Phiên Bản HTTP Không Được Hỗ Trợ', + '506' => 'Biến Thể Cũng Đàm Phán', + '507' => 'Không Đủ Bộ Nhớ', + '508' => 'Phát Hiện Lặp', + '509' => 'Giới Hạn Băng Thông', + '510' => 'Không Mở Rộng', + '511' => 'Yêu Cầu Xác Thực Mạng', + '520' => 'Không Xác Địng', + '521' => 'Máy Chủ Web Đã Tắt', + '522' => 'Quá Thời Gian Kết Nối', + '523' => 'Nguồn Gốc Không Chấp Nhận', + '524' => 'Xảy Ra Thời Gian Chờ', + '525' => 'Kết Nối SSL Không Thành Công', + '526' => 'Chứng Chỉ SSL Không Hợp Lệ', 'unknownError' => 'Lỗi Không Xác Định', ]; diff --git a/resources/lang/vi/model.php b/resources/lang/vi/model.php index ed0cdc9c..2a9f9158 100644 --- a/resources/lang/vi/model.php +++ b/resources/lang/vi/model.php @@ -1,230 +1,230 @@ [ - 'id' => 'ID Người dùng', - 'attribute' => 'Người dùng', - 'nickname' => 'Nickname', - 'username' => 'Tài khoản', - 'password' => 'Mật Khẩu', - 'credit' => 'Số dư', - 'invite_num' => 'Số lời mời', - 'reset_date' => 'Ngày đặt lại', - 'port' => 'Cổng', - 'traffic_used' => 'Đã sử dụng', - 'service' => 'Proxy', - 'group' => 'Nhóm', + 'user' => [ + 'id' => 'ID Người dùng', + 'attribute' => 'Người dùng', + 'nickname' => 'Nickname', + 'username' => 'Tài khoản', + 'password' => 'Mật Khẩu', + 'credit' => 'Số dư', + 'invite_num' => 'Số lời mời', + 'reset_date' => 'Ngày đặt lại', + 'port' => 'Cổng', + 'traffic_used' => 'Đã sử dụng', + 'service' => 'Proxy', + 'group' => 'Nhóm', 'account_status' => 'Trạng Thái Tài Khoản', - 'proxy_status' => 'Trạng thái Proxy', - 'expired_date' => 'Ngày hết hạn', - 'role' => 'Vai trò', - 'wechat' => 'WeChat', - 'qq' => 'QQ', - 'remark' => 'Ghi chú', - 'uuid' => 'VMess UUID', - 'proxy_passwd' => 'Mật khẩu proxy', - 'proxy_method' => 'Mã hoá', + 'proxy_status' => 'Trạng thái Proxy', + 'expired_date' => 'Ngày hết hạn', + 'role' => 'Vai trò', + 'wechat' => 'WeChat', + 'qq' => 'QQ', + 'remark' => 'Ghi chú', + 'uuid' => 'VMess UUID', + 'proxy_passwd' => 'Mật khẩu proxy', + 'proxy_method' => 'Mã hoá', 'usable_traffic' => 'Lưu lượng có sẵn', 'proxy_protocol' => 'Giao thức', - 'proxy_obfs' => 'Confuse', - 'speed_limit' => 'Giới hạn tốc độ', - 'inviter' => 'Người mời', - 'created_date' => 'Ngày đăng ký', + 'proxy_obfs' => 'Confuse', + 'speed_limit' => 'Giới hạn tốc độ', + 'inviter' => 'Người mời', + 'created_date' => 'Ngày đăng ký', ], - 'common' => [ - 'extend' => 'Mở rộng', - 'sort' => 'Sắp xếp', + 'common' => [ + 'extend' => 'Mở rộng', + 'sort' => 'Sắp xếp', 'description' => 'Mô tả', - 'type' => 'Loại', - 'level' => 'Cấp độ', + 'type' => 'Loại', + 'level' => 'Cấp độ', ], - 'country' => [ + 'country' => [ 'code' => 'Mã quốc gia ISO', 'icon' => 'Biểu tượng', 'name' => 'Tên quốc gia', ], - 'subscribe' => [ - 'code' => 'Subscribe code', - 'req_times' => 'Số lượng yêu cầu', + 'subscribe' => [ + 'code' => 'Subscribe code', + 'req_times' => 'Số lượng yêu cầu', 'updated_at' => 'Thời gian yêu cầu cuối cùng', - 'ban_time' => 'Thời gian chặn', - 'ban_desc' => 'Lý do', - 'req_ip' => 'IP yêu cầu', + 'ban_time' => 'Thời gian chặn', + 'ban_desc' => 'Lý do', + 'req_ip' => 'IP yêu cầu', 'req_header' => 'Header', ], - 'oauth' => [ - 'type' => 'Kênh', + 'oauth' => [ + 'type' => 'Kênh', 'identifier' => 'Identifier', ], - 'user_group' => [ + 'user_group' => [ 'attribute' => 'Nhóm người dùng', - 'name' => 'Tên nhóm', - 'nodes' => 'Chọn Node', + 'name' => 'Tên nhóm', + 'nodes' => 'Chọn Node', ], - 'node' => [ - 'attribute' => 'Node', - 'id' => 'NodeID', - 'name' => 'Tên', - 'domain' => '域名', - 'static' => '存活', - 'online_user' => '在线', - 'data_consume' => '产生流量', - 'data_rate' => '流量比例', - 'ddns' => 'DDNS', - 'ipv4' => 'IPv4地址', - 'ipv6' => 'IPv6地址', - 'push_port' => '消息推送端口', - 'rule_group' => '审计分组', - 'traffic_limit' => '节点限速', - 'client_limit' => '设备数限制', - 'label' => '标签', - 'country' => '国家/地区', - 'udp' => 'UDP', - 'display' => '显示 与 订阅', - 'detection' => '节点阻断检测', - 'method' => 'Mã hoá', - 'protocol' => 'Giao thức', - 'protocol_param' => '协议参数', - 'obfs' => 'Confuse', - 'obfs_param' => '混淆参数', - 'single' => '单端口', - 'transfer' => '中 转', - 'service_port' => '服务端口', - 'single_passwd' => '[单] 密码', - 'v2_alter_id' => '额外ID', - 'v2_net' => '传输方式', - 'v2_cover' => '伪装类型', - 'v2_host' => '伪装域名', - 'v2_path' => '路径 | 密钥', - 'v2_sni' => 'SNI', - 'v2_tls' => '连接TLS', + 'node' => [ + 'attribute' => 'Node', + 'id' => 'NodeID', + 'name' => 'Tên', + 'domain' => '域名', + 'static' => '存活', + 'online_user' => '在线', + 'data_consume' => '产生流量', + 'data_rate' => '流量比例', + 'ddns' => 'DDNS', + 'ipv4' => 'IPv4地址', + 'ipv6' => 'IPv6地址', + 'push_port' => '消息推送端口', + 'rule_group' => '审计分组', + 'traffic_limit' => '节点限速', + 'client_limit' => '设备数限制', + 'label' => '标签', + 'country' => '国家/地区', + 'udp' => 'UDP', + 'display' => '显示 与 订阅', + 'detection' => '节点阻断检测', + 'method' => 'Mã hoá', + 'protocol' => 'Giao thức', + 'protocol_param' => '协议参数', + 'obfs' => 'Confuse', + 'obfs_param' => '混淆参数', + 'single' => '单端口', + 'transfer' => '中 转', + 'service_port' => '服务端口', + 'single_passwd' => '[单] 密码', + 'v2_alter_id' => '额外ID', + 'v2_net' => '传输方式', + 'v2_cover' => '伪装类型', + 'v2_host' => '伪装域名', + 'v2_path' => '路径 | 密钥', + 'v2_sni' => 'SNI', + 'v2_tls' => '连接TLS', 'v2_tls_provider' => 'TLS配置', - 'relay_port' => '中转端口', + 'relay_port' => '中转端口', ], - 'node_auth' => [ + 'node_auth' => [ 'attribute' => '节点授权', - 'key' => '通信密钥节点用', - 'secret' => '反向通信密钥', + 'key' => '通信密钥节点用', + 'secret' => '反向通信密钥', ], - 'node_cert' => [ - 'attribute' => '域名证书', - 'domain' => '域名', - 'key' => 'KEY', - 'pem' => 'PEM', - 'issuer' => '签发机构', - 'signed_date' => '签发日期', + 'node_cert' => [ + 'attribute' => '域名证书', + 'domain' => '域名', + 'key' => 'KEY', + 'pem' => 'PEM', + 'issuer' => '签发机构', + 'signed_date' => '签发日期', 'expired_date' => '到期时间', ], - 'order' => [ - 'attribute' => '订单', - 'id' => '订单号', + 'order' => [ + 'attribute' => '订单', + 'id' => '订单号', 'original_price' => '原价', - 'price' => 'Giá', - 'pay_way' => 'Phương thức thanh toán', - 'status' => 'Trạng thái', + 'price' => 'Giá', + 'pay_way' => 'Phương thức thanh toán', + 'status' => 'Trạng thái', ], - 'goods' => [ - 'attribute' => 'Sản phẩm', - 'name' => 'Tên', - 'price' => 'Giá', - 'category' => 'Danh mục', - 'renew' => 'Giá reset data', - 'user_limit' => 'Giới hạn người dùng', - 'period' => 'Chu kì', - 'traffic' => 'Lưu lượng', - 'invite_num' => 'Số lượng mã mời quà tặng', - 'limit_num' => 'Giới hạn mua', + 'goods' => [ + 'attribute' => 'Sản phẩm', + 'name' => 'Tên', + 'price' => 'Giá', + 'category' => 'Danh mục', + 'renew' => 'Giá reset data', + 'user_limit' => 'Giới hạn người dùng', + 'period' => 'Chu kì', + 'traffic' => 'Lưu lượng', + 'invite_num' => 'Số lượng mã mời quà tặng', + 'limit_num' => 'Giới hạn mua', 'available_date' => 'Thời gian hiệu lực', - 'hot' => 'Bán chạy', - 'color' => 'Màu', - 'logo' => 'Hình ảnh', - 'info' => 'Danh sách tuỳ chỉnh', + 'hot' => 'Bán chạy', + 'color' => 'Màu', + 'logo' => 'Hình ảnh', + 'info' => 'Danh sách tuỳ chỉnh', ], - 'rule' => [ + 'rule' => [ 'attribute' => 'Quy tắc', - 'name' => 'Mô tả', - 'pattern' => 'Giá trí', + 'name' => 'Mô tả', + 'pattern' => 'Giá trí', ], - 'rule_group' => [ + 'rule_group' => [ 'attribute' => 'Nhóm quy tắc', - 'name' => 'Tên nhóm', - 'type' => '审计模式', - 'rules' => '选择规则', + 'name' => 'Tên nhóm', + 'type' => '审计模式', + 'rules' => '选择规则', ], - 'role' => [ - 'attribute' => '角色', - 'name' => 'Tên', + 'role' => [ + 'attribute' => '角色', + 'name' => 'Tên', 'permissions' => '权限', ], - 'permission' => [ - 'attribute' => '权限行为', + 'permission' => [ + 'attribute' => '权限行为', 'description' => '行为描述', - 'name' => '路由名称', + 'name' => '路由名称', ], - 'article' => [ - 'attribute' => '文章', - 'category' => '类别', - 'language' => '语言', - 'logo' => '头图', + 'article' => [ + 'attribute' => '文章', + 'category' => '类别', + 'language' => '语言', + 'logo' => '头图', 'created_at' => '发布日期', 'updated_at' => '最后更新', ], - 'coupon' => [ - 'attribute' => '卡券', - 'name' => '卡券名称', - 'sn' => '使用券码', - 'logo' => '卡券图片', - 'value' => '优惠额度', - 'priority' => '权重', - 'usable_times' => '使用次数', - 'minimum' => '满减条件', - 'used' => '个人限用', - 'levels' => '等级限定', - 'groups' => '分组限定', - 'users_whitelist' => '专属用户', - 'users_blacklist' => '禁用用户', + 'coupon' => [ + 'attribute' => '卡券', + 'name' => '卡券名称', + 'sn' => '使用券码', + 'logo' => '卡券图片', + 'value' => '优惠额度', + 'priority' => '权重', + 'usable_times' => '使用次数', + 'minimum' => '满减条件', + 'used' => '个人限用', + 'levels' => '等级限定', + 'groups' => '分组限定', + 'users_whitelist' => '专属用户', + 'users_blacklist' => '禁用用户', 'services_whitelist' => '许可商品', 'services_blacklist' => '禁用商品', - 'newbie' => '新人专属', - 'num' => '数量', + 'newbie' => '新人专属', + 'num' => '数量', ], - 'aff' => [ - 'invitee' => '消费者', - 'amount' => '消费金额', + 'aff' => [ + 'invitee' => '消费者', + 'amount' => '消费金额', 'commission' => '返利金额', 'updated_at' => '处理时间', 'created_at' => '下单时间', ], - 'referral' => [ + 'referral' => [ 'created_at' => '申请时间', - 'user' => '申请账号', - 'amount' => '申请提现金额', - 'id' => '申请单ID', + 'user' => '申请账号', + 'amount' => '申请提现金额', + 'id' => '申请单ID', ], - 'notification' => [ - 'address' => '收信地址', + 'notification' => [ + 'address' => '收信地址', 'created_at' => '投递时间', - 'status' => '投递状态', + 'status' => '投递状态', ], - 'ip' => [ + 'ip' => [ 'network_type' => '通讯类型', - 'info' => '归属地', + 'info' => '归属地', ], - 'user_traffic' => [ - 'upload' => '上传流量', + 'user_traffic' => [ + 'upload' => '上传流量', 'download' => '下载流量', - 'total' => '总流量', + 'total' => '总流量', 'log_time' => '记录时间', ], 'user_data_modify' => [ - 'before' => '变动前流量', - 'after' => '变动后流量', + 'before' => '变动前流量', + 'after' => '变动后流量', 'created_at' => '发生时间', ], - 'user_credit' => [ - 'before' => '操作前余额', - 'after' => '操作后金额', - 'amount' => '发生金额', + 'user_credit' => [ + 'before' => '操作前余额', + 'after' => '操作后金额', + 'amount' => '发生金额', 'created_at' => '发生时间', ], ]; diff --git a/resources/lang/vi/notification.php b/resources/lang/vi/notification.php index 97073379..77a4126b 100644 --- a/resources/lang/vi/notification.php +++ b/resources/lang/vi/notification.php @@ -1,35 +1,35 @@ '通知', - 'new' => ':num条新消息', - 'empty' => '目前未收到新消息', - 'payment_received' => '订单支付成功,金额::amount,查看详情', - 'account_expired' => '账号过期提醒', + 'attribute' => '通知', + 'new' => ':num条新消息', + 'empty' => '目前未收到新消息', + 'payment_received' => '订单支付成功,金额::amount,查看详情', + 'account_expired' => '账号过期提醒', 'account_expired_content' => '您的账号将在【:days】天后过期,为了确保您可以继续正常使用我们的服务,请及时续费。', - 'account_expired_blade' => '账号将于【:days天】后过期,请及时续费', - 'active_email' => '请在30分钟内完成操作', - 'close_ticket' => '工单【:id】:title关闭', - 'view_web' => '访问官网', - 'view_ticket' => '访问工单', - 'new_ticket' => '收到新工单::title', - 'reply_ticket' => '工单回复::title', - 'ticket_content' => '工单内容:', - 'node_block' => '节点阻断警告', - 'node_offline' => '节点离线警告', - 'node_offline_content' => '以下节点存在异常:心跳异常,可能离线了:', - 'block_report' => '阻断日志:', - 'traffic_warning' => '流量提醒', - 'traffic_remain' => '流量已使用::percent%,请保持关注。', - 'traffic_tips' => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量', - 'verification_account' => '账号验证', - 'verification' => '您的验证码:', - 'verification_limit' => '请在:minutes分钟内完成验证操作', - 'data_anomaly' => '流量异常用户提醒', - 'data_anomaly_content' => '用户:id:最近1小时 [上行流量::upload | 下行流量::download | 共计::total]', - 'node' => [ - 'upload' => '上传', + 'account_expired_blade' => '账号将于【:days天】后过期,请及时续费', + 'active_email' => '请在30分钟内完成操作', + 'close_ticket' => '工单【:id】:title关闭', + 'view_web' => '访问官网', + 'view_ticket' => '访问工单', + 'new_ticket' => '收到新工单::title', + 'reply_ticket' => '工单回复::title', + 'ticket_content' => '工单内容:', + 'node_block' => '节点阻断警告', + 'node_offline' => '节点离线警告', + 'node_offline_content' => '以下节点存在异常:心跳异常,可能离线了:', + 'block_report' => '阻断日志:', + 'traffic_warning' => '流量提醒', + 'traffic_remain' => '流量已使用::percent%,请保持关注。', + 'traffic_tips' => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量', + 'verification_account' => '账号验证', + 'verification' => '您的验证码:', + 'verification_limit' => '请在:minutes分钟内完成验证操作', + 'data_anomaly' => '流量异常用户提醒', + 'data_anomaly_content' => '用户:id:最近1小时 [上行流量::upload | 下行流量::download | 共计::total]', + 'node' => [ + 'upload' => '上传', 'download' => '下载', - 'total' => '总计', + 'total' => '总计', ], ]; diff --git a/resources/lang/vi/pagination.php b/resources/lang/vi/pagination.php index 03617b06..e219d3d2 100644 --- a/resources/lang/vi/pagination.php +++ b/resources/lang/vi/pagination.php @@ -1,6 +1,6 @@ 'Trang trước »', + 'next' => 'Trang trước »', 'previous' => '« Trang sau', ]; diff --git a/resources/lang/vi/user.php b/resources/lang/vi/user.php index fa563acf..508570ef 100644 --- a/resources/lang/vi/user.php +++ b/resources/lang/vi/user.php @@ -1,235 +1,235 @@ [ - 'credit' => '账户余额', - 'status' => 'Trạng Thái Tài Khoản', - 'level' => '账号等级', - 'group' => '所属分组', - 'speed_limit' => '限速', - 'remain' => '剩余流量', - 'time' => '套餐时长', - 'last_login' => '最近登录', - 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', + 'account' => [ + 'credit' => '账户余额', + 'status' => 'Trạng Thái Tài Khoản', + 'level' => '账号等级', + 'group' => '所属分组', + 'speed_limit' => '限速', + 'remain' => '剩余流量', + 'time' => '套餐时长', + 'last_login' => '最近登录', + 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', 'connect_password' => '连接密码', - 'reason' => [ - 'normal' => '账号一切正常', - 'expired' => '您的账号套餐已过期', - 'overused' => '本时段使用流量超过 :data GB触发系统限制
          :min 后解除限制', + 'reason' => [ + 'normal' => '账号一切正常', + 'expired' => '您的账号套餐已过期', + 'overused' => '本时段使用流量超过 :data GB触发系统限制
          :min 后解除限制', 'traffic_exhausted' => '您的账号[流量]消耗殆尽', - 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', + 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', ], ], - 'home' => [ - 'attendance' => [ + 'home' => [ + 'attendance' => [ 'attribute' => '签 到', - 'disable' => '系统未开启签到功能', - 'done' => '已经签到过了,明天再来吧!', - 'success' => '您获得了 :data 流量', - 'failed' => '系统❌异常', + 'disable' => '系统未开启签到功能', + 'done' => '已经签到过了,明天再来吧!', + 'success' => '您获得了 :data 流量', + 'failed' => '系统❌异常', ], - 'traffic_logs' => '流量记录', - 'announcement' => '公告', - 'wechat_push' => '微信公告推送', - 'chat_group' => '聊天群', + 'traffic_logs' => '流量记录', + 'announcement' => '公告', + 'wechat_push' => '微信公告推送', + 'chat_group' => '聊天群', 'empty_announcement' => '暂无公告', ], - 'purchase_to_unlock' => '购买服务后解锁', - 'purchase_required' => '本功能对非付费用户禁用!请', - 'attribute' => [ - 'node' => '线路', - 'data' => '流量', - 'ip' => 'IP地址', - 'isp' => '运营商', + 'purchase_to_unlock' => '购买服务后解锁', + 'purchase_required' => '本功能对非付费用户禁用!请', + 'attribute' => [ + 'node' => '线路', + 'data' => '流量', + 'ip' => 'IP地址', + 'isp' => '运营商', 'address' => '地区', ], - 'purchase_promotion' => '快 来 购 买 服 务 吧!', - 'menu' => [ - 'helps' => '帮 助', - 'home' => '主 页', - 'invites' => '邀 请', - 'invoices' => '账 单', - 'nodes' => '线 路', - 'referrals' => '推 广', - 'shop' => '服 务', - 'profile' => '设 置', - 'tickets' => '工 单', + 'purchase_promotion' => '快 来 购 买 服 务 吧!', + 'menu' => [ + 'helps' => '帮 助', + 'home' => '主 页', + 'invites' => '邀 请', + 'invoices' => '账 单', + 'nodes' => '线 路', + 'referrals' => '推 广', + 'shop' => '服 务', + 'profile' => '设 置', + 'tickets' => '工 单', 'admin_dashboard' => '管 理', ], - 'contact' => '联系方式', - 'oauth' => [ + 'contact' => '联系方式', + 'oauth' => [ 'bind_title' => '绑定社交账号', - 'not_bind' => '尚未绑定', - 'bind' => '绑 定', - 'rebind' => '重新绑定', - 'unbind' => '解 绑', + 'not_bind' => '尚未绑定', + 'bind' => '绑 定', + 'rebind' => '重新绑定', + 'unbind' => '解 绑', ], - 'coupon' => [ + 'coupon' => [ 'discount' => '优惠', - 'error' => [ - 'unknown' => '无效优惠券', - 'used' => '优惠券已被使用', - 'expired' => '优惠券已过期', - 'run_out' => '优惠券耗尽', + 'error' => [ + 'unknown' => '无效优惠券', + 'used' => '优惠券已被使用', + 'expired' => '优惠券已过期', + 'run_out' => '优惠券耗尽', 'inactive' => '优惠券尚未生效', - 'wait' => '活动将于:time生效,请耐心等待!', - 'unmet' => '使用条件未满足', - 'minimum' => '本券最低使用金额为 :amount', + 'wait' => '活动将于:time生效,请耐心等待!', + 'unmet' => '使用条件未满足', + 'minimum' => '本券最低使用金额为 :amount', 'overused' => '本券只能使用 :times 次', - 'users' => '账户不符合促销条件', + 'users' => '账户不符合促销条件', 'services' => '商品不符合折扣条件,请查看促销条款', ], ], - 'error_response' => '出现了错误,请稍后再试。', - 'invite' => [ - 'attribute' => '邀请码', - 'counts' => '共 :num 个邀请码', - 'tips' => '可生成 :num 枚邀请码,:days 日内有效', - 'logs' => '邀请记录', - 'promotion' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', + 'error_response' => '出现了错误,请稍后再试。', + 'invite' => [ + 'attribute' => '邀请码', + 'counts' => '共 :num 个邀请码', + 'tips' => '可生成 :num 枚邀请码,:days 日内有效', + 'logs' => '邀请记录', + 'promotion' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', 'generate_failed' => '生成失败:已无邀请码生成名额', ], - 'reset_data' => [ - 'action' => '重置流量', - 'cost' => '需要:amount', + 'reset_data' => [ + 'action' => '重置流量', + 'cost' => '需要:amount', 'cost_tips' => '本次重置流量将扣除余额 :amount!', - 'lack' => '余额不足,请充值余额', - 'logs' => '用户自行重置流量', - 'success' => '重置成功', + 'lack' => '余额不足,请充值余额', + 'logs' => '用户自行重置流量', + 'success' => '重置成功', ], - 'referral' => [ - 'link' => '推广链接', - 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', - 'logs' => '佣金记录', - 'failed' => '申请失败', + 'referral' => [ + 'link' => '推广链接', + 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', + 'logs' => '佣金记录', + 'failed' => '申请失败', 'success' => '申请成功', - 'msg' => [ - 'account' => '账号已过期,请先购买服务吧', - 'applied' => '已存在申请,请等待之前的申请处理完', + 'msg' => [ + 'account' => '账号已过期,请先购买服务吧', + 'applied' => '已存在申请,请等待之前的申请处理完', 'unfulfilled' => '满 :amount 才可以提现,继续努力吧', - 'wait' => '请等待管理员审核', - 'error' => '返利单建立失败,请稍后尝试或通知管理员', + 'wait' => '请等待管理员审核', + 'error' => '返利单建立失败,请稍后尝试或通知管理员', ], ], - 'inviter' => '邀请者', - 'invitee' => '受邀者', - 'registered_at' => 'Ngày đăng ký', - 'bought_at' => '购买日期', - 'payment_method' => 'Phương thức thanh toán', - 'pay' => '支付', - 'input_coupon' => '请输入充值券码', - 'recharge' => '充值', - 'recharge_credit' => '余额充值', - 'recharging' => '充值中...', + 'inviter' => '邀请者', + 'invitee' => '受邀者', + 'registered_at' => 'Ngày đăng ký', + 'bought_at' => '购买日期', + 'payment_method' => 'Phương thức thanh toán', + 'pay' => '支付', + 'input_coupon' => '请输入充值券码', + 'recharge' => '充值', + 'recharge_credit' => '余额充值', + 'recharging' => '充值中...', 'withdraw_commission' => '结算佣金', - 'withdraw_at' => '结算日期', - 'withdraw_logs' => '提现记录', - 'withdraw' => '提 现', - 'scan_qrcode' => '请使用客户端扫描二维码', - 'shop' => [ - 'hot' => '热 销', - 'limited' => '限 购', - 'change_amount' => '充值金额', + 'withdraw_at' => '结算日期', + 'withdraw_logs' => '提现记录', + 'withdraw' => '提 现', + 'scan_qrcode' => '请使用客户端扫描二维码', + 'shop' => [ + 'hot' => '热 销', + 'limited' => '限 购', + 'change_amount' => '充值金额', 'change_amount_help' => '请输入充值金额', - 'buy' => '购买', - 'description' => 'Mô tả', - 'service' => '服务', - 'pay_credit' => '余额支付', - 'pay_online' => '在线支付', - 'price' => '价格', - 'quantity' => '数量', - 'subtotal' => '小计', - 'total' => '合计', - 'conflict' => '套餐存在冲突', - 'conflict_tips' => '

          当前购买套餐将自动设置为 预支付套餐

          1. 预支付套餐会在生效中的套餐失效后自动开通!
          2. 您可以在支付后手动激活套餐!
          ', - 'call4help' => '请开工单通知客服', + 'buy' => '购买', + 'description' => 'Mô tả', + 'service' => '服务', + 'pay_credit' => '余额支付', + 'pay_online' => '在线支付', + 'price' => '价格', + 'quantity' => '数量', + 'subtotal' => '小计', + 'total' => '合计', + 'conflict' => '套餐存在冲突', + 'conflict_tips' => '

          当前购买套餐将自动设置为 预支付套餐

          1. 预支付套餐会在生效中的套餐失效后自动开通!
          2. 您可以在支付后手动激活套餐!
          ', + 'call4help' => '请开工单通知客服', ], - 'service' => [ - 'node_count' => ':num 条优质线路', + 'service' => [ + 'node_count' => ':num 条优质线路', 'country_count' => '覆盖 :num 个国家或地区', - 'unlimited' => '不限速', + 'unlimited' => '不限速', ], - 'payment' => [ - 'error' => '充值余额不合规', - 'creating' => '创建支付单中...', + 'payment' => [ + 'error' => '充值余额不合规', + 'creating' => '创建支付单中...', 'redirect_stripe' => '转跳至Stripe支付界面', - 'qrcode_tips' => '请使用:software扫描二维码', - 'close_tips' => '请在:minutes分钟内完成支付,否则订单将会自动关闭', - 'mobile_tips' => '手机用户:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款', + 'qrcode_tips' => '请使用:software扫描二维码', + 'close_tips' => '请在:minutes分钟内完成支付,否则订单将会自动关闭', + 'mobile_tips' => '手机用户:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款', ], - 'invoice' => [ - 'attribute' => '订单', - 'detail' => '消费记录', - 'amount' => '金额', + 'invoice' => [ + 'attribute' => '订单', + 'detail' => '消费记录', + 'amount' => '金额', 'active_prepaid_question' => '是否提前激活预支付套餐?', - 'active_prepaid_tips' => '套餐激活后:
          先前套餐将直接失效!
          过期日期将由本日重新开始计算!', + 'active_prepaid_tips' => '套餐激活后:
          先前套餐将直接失效!
          过期日期将由本日重新开始计算!', ], - 'node' => [ - 'info' => '配置信息', - 'setting' => '代理设置', + 'node' => [ + 'info' => '配置信息', + 'setting' => '代理设置', 'unstable' => '线路波动/维护中', - 'rate' => ':ratio倍流量消耗', + 'rate' => ':ratio倍流量消耗', ], - 'subscribe' => [ - 'link' => '订阅链接', - 'tips' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。', + 'subscribe' => [ + 'link' => '订阅链接', + 'tips' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。', 'exchange_warning' => '更换订阅地址将导致:\n1.旧地址立即失效\n2.连接密码被更改', - 'custom' => '自定义订阅', - 'ss_only' => '只订阅SS', - 'ssr_only' => '只订阅SSR (包含SS)', - 'v2ray_only' => '只订阅V2Ray', - 'trojan_only' => '只订阅Trojan', - 'error' => '更换订阅地址异常', - 'info' => [ - 'title' => '账号摘要 [非实时]', - 'upload' => '上载流量', + 'custom' => '自定义订阅', + 'ss_only' => '只订阅SS', + 'ssr_only' => '只订阅SSR (包含SS)', + 'v2ray_only' => '只订阅V2Ray', + 'trojan_only' => '只订阅Trojan', + 'error' => '更换订阅地址异常', + 'info' => [ + 'title' => '账号摘要 [非实时]', + 'upload' => '上载流量', 'download' => '下载流量', - 'total' => '套餐流量', + 'total' => '套餐流量', ], ], - 'ticket' => [ - 'attribute' => '工单', - 'submit_tips' => '确定提交工单?', - 'reply_confirm' => '确定回复工单?', - 'close_tips' => '您确定要关闭该工单吗?', - 'close' => '关闭工单', - 'failed_closed' => '错误:该工单已关闭', - 'reply_placeholder' => '说些什么呢?', - 'reply' => '回复', - 'close_msg' => '工单:ID:id用户已手动关闭', - 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', + 'ticket' => [ + 'attribute' => '工单', + 'submit_tips' => '确定提交工单?', + 'reply_confirm' => '确定回复工单?', + 'close_tips' => '您确定要关闭该工单吗?', + 'close' => '关闭工单', + 'failed_closed' => '错误:该工单已关闭', + 'reply_placeholder' => '说些什么呢?', + 'reply' => '回复', + 'close_msg' => '工单:ID:id用户已手动关闭', + 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', 'content_placeholder' => '请详细的描述您遇到的问题,或者需要我们帮助的地方,以便我们快速帮助到您', - 'new' => '创建新的工单', - 'working_hour' => '客服工作时间', - 'online_hour' => '在线时间', - 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
          重复请求,将会自动延迟处理时间', - 'error' => '未知错误!请通知客服', + 'new' => '创建新的工单', + 'working_hour' => '客服工作时间', + 'online_hour' => '在线时间', + 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
          重复请求,将会自动延迟处理时间', + 'error' => '未知错误!请通知客服', ], - 'traffic_logs' => [ + 'traffic_logs' => [ '24hours' => '今日流量使用情况', - '30days' => '本月流量使用情况', - 'tips' => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。', + '30days' => '本月流量使用情况', + 'tips' => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。', ], - 'client' => '客户端', - 'tutorials' => '教 程', - 'current_role' => '当前身份', - 'knowledge' => [ + 'client' => '客户端', + 'tutorials' => '教 程', + 'current_role' => '当前身份', + 'knowledge' => [ 'title' => '知 识 库', 'basic' => '基 础', ], - 'manual' => [ - 'red_packet' => '支付宝领红包', - 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', - 'step_1' => '须知', - 'step_1_title' => '如何正确人工支付', - 'step_2' => '支付', - 'step_2_title' => '获取支付二维码,进行支付', - 'step_3' => '完成', - 'step_3_title' => '等待支付被人工核对', - 'remark' => '备注账号', + 'manual' => [ + 'red_packet' => '支付宝领红包', + 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', + 'step_1' => '须知', + 'step_1_title' => '如何正确人工支付', + 'step_2' => '支付', + 'step_2_title' => '获取支付二维码,进行支付', + 'step_3' => '完成', + 'step_3_title' => '等待支付被人工核对', + 'remark' => '备注账号', 'remark_content' => '填入登录使用的账号,在人工核对中可以对号审核!', - 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', - 'pre' => '上一步', - 'next' => '下一步', + 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', + 'pre' => '上一步', + 'next' => '下一步', ], ]; diff --git a/resources/lang/vi/validation.php b/resources/lang/vi/validation.php index 7e5274e9..5d432f37 100644 --- a/resources/lang/vi/validation.php +++ b/resources/lang/vi/validation.php @@ -1,196 +1,196 @@ 'Trường :attribute phải được chấp nhận.', - 'accepted_if' => 'Trường :attribute phải được chấp nhận khi :other là :value.', - 'active_url' => 'Trường :attribute không phải là một URL hợp lệ.', - 'after' => 'Trường :attribute phải là một ngày sau ngày :date.', - 'after_or_equal' => 'Trường :attribute phải là thời gian bắt đầu sau hoặc đúng bằng :date.', - 'alpha' => 'Trường :attribute chỉ có thể chứa các chữ cái.', - 'alpha_dash' => 'Trường :attribute chỉ có thể chứa chữ cái, số và dấu gạch ngang.', - 'alpha_num' => 'Trường :attribute chỉ có thể chứa chữ cái và số.', - 'array' => 'Trường :attribute phải là dạng mảng.', - 'before' => 'Trường :attribute phải là một ngày trước ngày :date.', - 'before_or_equal' => 'Trường :attribute phải là thời gian bắt đầu trước hoặc đúng bằng :date.', - 'between' => [ - 'array' => 'Trường :attribute phải có từ :min - :max phần tử.', - 'file' => 'Dung lượng tập tin trong trường :attribute phải từ :min - :max kB.', + 'accepted' => 'Trường :attribute phải được chấp nhận.', + 'accepted_if' => 'Trường :attribute phải được chấp nhận khi :other là :value.', + 'active_url' => 'Trường :attribute không phải là một URL hợp lệ.', + 'after' => 'Trường :attribute phải là một ngày sau ngày :date.', + 'after_or_equal' => 'Trường :attribute phải là thời gian bắt đầu sau hoặc đúng bằng :date.', + 'alpha' => 'Trường :attribute chỉ có thể chứa các chữ cái.', + 'alpha_dash' => 'Trường :attribute chỉ có thể chứa chữ cái, số và dấu gạch ngang.', + 'alpha_num' => 'Trường :attribute chỉ có thể chứa chữ cái và số.', + 'array' => 'Trường :attribute phải là dạng mảng.', + 'before' => 'Trường :attribute phải là một ngày trước ngày :date.', + 'before_or_equal' => 'Trường :attribute phải là thời gian bắt đầu trước hoặc đúng bằng :date.', + 'between' => [ + 'array' => 'Trường :attribute phải có từ :min - :max phần tử.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải từ :min - :max kB.', 'numeric' => 'Trường :attribute phải nằm trong khoảng :min - :max.', - 'string' => 'Trường :attribute phải từ :min - :max kí tự.', + 'string' => 'Trường :attribute phải từ :min - :max kí tự.', ], - 'boolean' => 'Trường :attribute phải là true hoặc false.', - 'confirmed' => 'Giá trị xác nhận trong trường :attribute không khớp.', - 'current_password' => 'Mật khẩu không đúng.', - 'date' => 'Trường :attribute không phải là định dạng của ngày-tháng.', - 'date_equals' => 'Trường :attribute phải là một ngày bằng với :date.', - 'date_format' => 'Trường :attribute không giống với định dạng :format.', - 'declined' => 'Trường :attribute phải bị từ chối.', - 'declined_if' => 'Trường :attribute phải bị từ chối khi :other là :value.', - 'different' => 'Trường :attribute và :other phải khác nhau.', - 'digits' => 'Độ dài của trường :attribute phải gồm :digits chữ số.', - 'digits_between' => 'Độ dài của trường :attribute phải nằm trong khoảng :min and :max chữ số.', - 'dimensions' => 'Trường :attribute có kích thước không hợp lệ.', - 'distinct' => 'Trường :attribute có giá trị trùng lặp.', - 'email' => 'Trường :attribute phải là một địa chỉ email hợp lệ.', - 'ends_with' => 'Trường :attribute phải kết thúc bằng một trong những giá trị sau: :values', - 'enum' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', - 'exists' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', - 'file' => 'Trường :attribute phải là một tệp tin.', - 'filled' => 'Trường :attribute không được bỏ trống.', - 'gt' => [ - 'array' => 'Mảng :attribute phải có nhiều hơn :value phần tử.', - 'file' => 'Dung lượng trường :attribute phải lớn hơn :value kilobytes.', + 'boolean' => 'Trường :attribute phải là true hoặc false.', + 'confirmed' => 'Giá trị xác nhận trong trường :attribute không khớp.', + 'current_password' => 'Mật khẩu không đúng.', + 'date' => 'Trường :attribute không phải là định dạng của ngày-tháng.', + 'date_equals' => 'Trường :attribute phải là một ngày bằng với :date.', + 'date_format' => 'Trường :attribute không giống với định dạng :format.', + 'declined' => 'Trường :attribute phải bị từ chối.', + 'declined_if' => 'Trường :attribute phải bị từ chối khi :other là :value.', + 'different' => 'Trường :attribute và :other phải khác nhau.', + 'digits' => 'Độ dài của trường :attribute phải gồm :digits chữ số.', + 'digits_between' => 'Độ dài của trường :attribute phải nằm trong khoảng :min and :max chữ số.', + 'dimensions' => 'Trường :attribute có kích thước không hợp lệ.', + 'distinct' => 'Trường :attribute có giá trị trùng lặp.', + 'email' => 'Trường :attribute phải là một địa chỉ email hợp lệ.', + 'ends_with' => 'Trường :attribute phải kết thúc bằng một trong những giá trị sau: :values', + 'enum' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'exists' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'file' => 'Trường :attribute phải là một tệp tin.', + 'filled' => 'Trường :attribute không được bỏ trống.', + 'gt' => [ + 'array' => 'Mảng :attribute phải có nhiều hơn :value phần tử.', + 'file' => 'Dung lượng trường :attribute phải lớn hơn :value kilobytes.', 'numeric' => 'Giá trị trường :attribute phải lớn hơn :value.', - 'string' => 'Độ dài trường :attribute phải nhiều hơn :value kí tự.', + 'string' => 'Độ dài trường :attribute phải nhiều hơn :value kí tự.', ], - 'gte' => [ - 'array' => 'Mảng :attribute phải có ít nhất :value phần tử.', - 'file' => 'Dung lượng trường :attribute phải lớn hơn hoặc bằng :value kilobytes.', + 'gte' => [ + 'array' => 'Mảng :attribute phải có ít nhất :value phần tử.', + 'file' => 'Dung lượng trường :attribute phải lớn hơn hoặc bằng :value kilobytes.', 'numeric' => 'Giá trị trường :attribute phải lớn hơn hoặc bằng :value.', - 'string' => 'Độ dài trường :attribute phải lớn hơn hoặc bằng :value kí tự.', + 'string' => 'Độ dài trường :attribute phải lớn hơn hoặc bằng :value kí tự.', ], - 'image' => 'Trường :attribute phải là định dạng hình ảnh.', - 'in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', - 'in_array' => 'Trường :attribute phải thuộc tập cho phép: :other.', - 'integer' => 'Trường :attribute phải là một số nguyên.', - 'ip' => 'Trường :attribute phải là một địa chỉ IP.', - 'ipv4' => 'Trường :attribute phải là một địa chỉ IPv4.', - 'ipv6' => 'Trường :attribute phải là một địa chỉ IPv6.', - 'json' => 'Trường :attribute phải là một chuỗi JSON.', - 'lt' => [ - 'array' => 'Mảng :attribute phải có ít hơn :value phần tử.', - 'file' => 'Dung lượng trường :attribute phải nhỏ hơn :value kilobytes.', + 'image' => 'Trường :attribute phải là định dạng hình ảnh.', + 'in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'in_array' => 'Trường :attribute phải thuộc tập cho phép: :other.', + 'integer' => 'Trường :attribute phải là một số nguyên.', + 'ip' => 'Trường :attribute phải là một địa chỉ IP.', + 'ipv4' => 'Trường :attribute phải là một địa chỉ IPv4.', + 'ipv6' => 'Trường :attribute phải là một địa chỉ IPv6.', + 'json' => 'Trường :attribute phải là một chuỗi JSON.', + 'lt' => [ + 'array' => 'Mảng :attribute phải có ít hơn :value phần tử.', + 'file' => 'Dung lượng trường :attribute phải nhỏ hơn :value kilobytes.', 'numeric' => 'Giá trị trường :attribute phải nhỏ hơn :value.', - 'string' => 'Độ dài trường :attribute phải nhỏ hơn :value kí tự.', + 'string' => 'Độ dài trường :attribute phải nhỏ hơn :value kí tự.', ], - 'lte' => [ - 'array' => 'Mảng :attribute không được có nhiều hơn :value phần tử.', - 'file' => 'Dung lượng trường :attribute phải nhỏ hơn hoặc bằng :value kilobytes.', + 'lte' => [ + 'array' => 'Mảng :attribute không được có nhiều hơn :value phần tử.', + 'file' => 'Dung lượng trường :attribute phải nhỏ hơn hoặc bằng :value kilobytes.', 'numeric' => 'Giá trị trường :attribute phải nhỏ hơn hoặc bằng :value.', - 'string' => 'Độ dài trường :attribute phải nhỏ hơn hoặc bằng :value kí tự.', + 'string' => 'Độ dài trường :attribute phải nhỏ hơn hoặc bằng :value kí tự.', ], - 'mac_address' => 'Trường :attribute phải là một địa chỉ MAC hợp lệ.', - 'max' => [ - 'array' => 'Trường :attribute không được lớn hơn :max phần tử.', - 'file' => 'Dung lượng tập tin trong trường :attribute không được lớn hơn :max kB.', + 'mac_address' => 'Trường :attribute phải là một địa chỉ MAC hợp lệ.', + 'max' => [ + 'array' => 'Trường :attribute không được lớn hơn :max phần tử.', + 'file' => 'Dung lượng tập tin trong trường :attribute không được lớn hơn :max kB.', 'numeric' => 'Trường :attribute không được lớn hơn :max.', - 'string' => 'Trường :attribute không được lớn hơn :max kí tự.', + 'string' => 'Trường :attribute không được lớn hơn :max kí tự.', ], - 'mimes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', - 'mimetypes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', - 'min' => [ - 'array' => 'Trường :attribute phải có tối thiểu :min phần tử.', - 'file' => 'Dung lượng tập tin trong trường :attribute phải tối thiểu :min kB.', + 'mimes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', + 'mimetypes' => 'Trường :attribute phải là một tập tin có định dạng: :values.', + 'min' => [ + 'array' => 'Trường :attribute phải có tối thiểu :min phần tử.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải tối thiểu :min kB.', 'numeric' => 'Trường :attribute phải tối thiểu là :min.', - 'string' => 'Trường :attribute phải có tối thiểu :min kí tự.', + 'string' => 'Trường :attribute phải có tối thiểu :min kí tự.', ], - 'multiple_of' => 'Trường :attribute phải là bội số của :value', - 'not_in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', - 'not_regex' => 'Trường :attribute có định dạng không hợp lệ.', - 'numeric' => 'Trường :attribute phải là một số.', - 'password' => 'Mật khẩu không đúng.', - 'present' => 'Trường :attribute phải được cung cấp.', - 'prohibited' => 'Trường :attribute bị cấm.', - 'prohibited_if' => 'Trường :attribute bị cấm khi :other là :value.', - 'prohibited_unless' => 'Trường :attribute bị cấm trừ khi :other là một trong :values.', - 'prohibits' => 'Trường :attribute cấm :other từ thời điểm hiện tại.', - 'regex' => 'Trường :attribute có định dạng không hợp lệ.', - 'required' => 'Trường :attribute không được bỏ trống.', - 'required_array_keys' => 'Trường :attribute phải bao gồm các mục nhập cho: :values.', - 'required_if' => 'Trường :attribute không được bỏ trống khi trường :other là :value.', - 'required_unless' => 'Trường :attribute không được bỏ trống trừ khi :other là :values.', - 'required_with' => 'Trường :attribute không được bỏ trống khi một trong :values có giá trị.', - 'required_with_all' => 'Trường :attribute không được bỏ trống khi tất cả :values có giá trị.', - 'required_without' => 'Trường :attribute không được bỏ trống khi một trong :values không có giá trị.', + 'multiple_of' => 'Trường :attribute phải là bội số của :value', + 'not_in' => 'Giá trị đã chọn trong trường :attribute không hợp lệ.', + 'not_regex' => 'Trường :attribute có định dạng không hợp lệ.', + 'numeric' => 'Trường :attribute phải là một số.', + 'password' => 'Mật khẩu không đúng.', + 'present' => 'Trường :attribute phải được cung cấp.', + 'prohibited' => 'Trường :attribute bị cấm.', + 'prohibited_if' => 'Trường :attribute bị cấm khi :other là :value.', + 'prohibited_unless' => 'Trường :attribute bị cấm trừ khi :other là một trong :values.', + 'prohibits' => 'Trường :attribute cấm :other từ thời điểm hiện tại.', + 'regex' => 'Trường :attribute có định dạng không hợp lệ.', + 'required' => 'Trường :attribute không được bỏ trống.', + 'required_array_keys' => 'Trường :attribute phải bao gồm các mục nhập cho: :values.', + 'required_if' => 'Trường :attribute không được bỏ trống khi trường :other là :value.', + 'required_unless' => 'Trường :attribute không được bỏ trống trừ khi :other là :values.', + 'required_with' => 'Trường :attribute không được bỏ trống khi một trong :values có giá trị.', + 'required_with_all' => 'Trường :attribute không được bỏ trống khi tất cả :values có giá trị.', + 'required_without' => 'Trường :attribute không được bỏ trống khi một trong :values không có giá trị.', 'required_without_all' => 'Trường :attribute không được bỏ trống khi tất cả :values không có giá trị.', - 'same' => 'Trường :attribute và :other phải giống nhau.', - 'size' => [ - 'array' => 'Trường :attribute phải chứa :size phần tử.', - 'file' => 'Dung lượng tập tin trong trường :attribute phải bằng :size kB.', + 'same' => 'Trường :attribute và :other phải giống nhau.', + 'size' => [ + 'array' => 'Trường :attribute phải chứa :size phần tử.', + 'file' => 'Dung lượng tập tin trong trường :attribute phải bằng :size kB.', 'numeric' => 'Trường :attribute phải bằng :size.', - 'string' => 'Trường :attribute phải chứa :size kí tự.', + 'string' => 'Trường :attribute phải chứa :size kí tự.', ], - 'starts_with' => 'Trường :attribute phải được bắt đầu bằng một trong những giá trị sau: :values', - 'string' => 'Trường :attribute phải là một chuỗi kí tự.', - 'timezone' => 'Trường :attribute phải là một múi giờ hợp lệ.', - 'unique' => 'Trường :attribute đã có trong cơ sở dữ liệu.', - 'uploaded' => 'Trường :attribute tải lên thất bại.', - 'url' => 'Trường :attribute không giống với định dạng một URL.', - 'uuid' => 'Trường :attribute phải là một chuỗi UUID hợp lệ.', - 'attributes' => [ - 'address' => 'địa chỉ', - 'age' => 'tuổi', - 'amount' => 'Amount', - 'area' => 'khu vực', - 'available' => 'có sẵn', - 'birthday' => 'ngày sinh nhật', - 'body' => 'nội dung', - 'city' => 'thành phố', - 'content' => 'nội dung', - 'country' => 'quốc gia', - 'created_at' => 'Tạo lúc', - 'creator' => 'Người sáng tạo', - 'current_password' => 'Mật khẩu hiện tại', - 'date' => 'ngày', - 'date_of_birth' => 'Ngày sinh', - 'day' => 'ngày', - 'deleted_at' => 'Xoá lúc', - 'description' => 'mô tả', - 'district' => 'Quận/Huyện', - 'duration' => 'Duration', - 'email' => 'email', - 'excerpt' => 'trích dẫn', - 'filter' => 'Lọc', - 'first_name' => 'tên', - 'gender' => 'giới tính', - 'group' => 'Group', - 'hour' => 'giờ', - 'image' => 'Hình ảnh', - 'last_name' => 'họ', - 'lesson' => 'Bài học', - 'line_address_1' => 'Line Address 1', - 'line_address_2' => 'Line Address 2', - 'message' => 'lời nhắn', - 'middle_name' => 'Tên đệm', - 'minute' => 'phút', - 'mobile' => 'di động', - 'month' => 'tháng', - 'name' => 'tên', - 'national_code' => 'Mã quốc gia', - 'number' => 'Số', - 'password' => 'mật khẩu', - 'password_confirmation' => 'xác nhận mật khẩu', - 'phone' => 'số điện thoại', - 'photo' => 'Photo', - 'postal_code' => 'Mã bưu điện', - 'price' => 'Giá', - 'province' => 'Tỉnh/Thành Phố', + 'starts_with' => 'Trường :attribute phải được bắt đầu bằng một trong những giá trị sau: :values', + 'string' => 'Trường :attribute phải là một chuỗi kí tự.', + 'timezone' => 'Trường :attribute phải là một múi giờ hợp lệ.', + 'unique' => 'Trường :attribute đã có trong cơ sở dữ liệu.', + 'uploaded' => 'Trường :attribute tải lên thất bại.', + 'url' => 'Trường :attribute không giống với định dạng một URL.', + 'uuid' => 'Trường :attribute phải là một chuỗi UUID hợp lệ.', + 'attributes' => [ + 'address' => 'địa chỉ', + 'age' => 'tuổi', + 'amount' => 'Amount', + 'area' => 'khu vực', + 'available' => 'có sẵn', + 'birthday' => 'ngày sinh nhật', + 'body' => 'nội dung', + 'city' => 'thành phố', + 'content' => 'nội dung', + 'country' => 'quốc gia', + 'created_at' => 'Tạo lúc', + 'creator' => 'Người sáng tạo', + 'current_password' => 'Mật khẩu hiện tại', + 'date' => 'ngày', + 'date_of_birth' => 'Ngày sinh', + 'day' => 'ngày', + 'deleted_at' => 'Xoá lúc', + 'description' => 'mô tả', + 'district' => 'Quận/Huyện', + 'duration' => 'Duration', + 'email' => 'email', + 'excerpt' => 'trích dẫn', + 'filter' => 'Lọc', + 'first_name' => 'tên', + 'gender' => 'giới tính', + 'group' => 'Group', + 'hour' => 'giờ', + 'image' => 'Hình ảnh', + 'last_name' => 'họ', + 'lesson' => 'Bài học', + 'line_address_1' => 'Line Address 1', + 'line_address_2' => 'Line Address 2', + 'message' => 'lời nhắn', + 'middle_name' => 'Tên đệm', + 'minute' => 'phút', + 'mobile' => 'di động', + 'month' => 'tháng', + 'name' => 'tên', + 'national_code' => 'Mã quốc gia', + 'number' => 'Số', + 'password' => 'mật khẩu', + 'password_confirmation' => 'xác nhận mật khẩu', + 'phone' => 'số điện thoại', + 'photo' => 'Photo', + 'postal_code' => 'Mã bưu điện', + 'price' => 'Giá', + 'province' => 'Tỉnh/Thành Phố', 'recaptcha_response_field' => 'Recaptcha Response Field', - 'remember' => 'Ghi nhớ', - 'restored_at' => 'Restored At', - 'result_text_under_image' => 'Result Text Under Image', - 'role' => 'Role', - 'second' => 'giây', - 'sex' => 'giới tính', - 'short_text' => 'Văn bản ngắn', - 'size' => 'kích thước', - 'state' => 'Tình trạng', - 'street' => 'Đường', - 'student' => 'Học sinh', - 'subject' => 'tiêu đề', - 'teacher' => 'Giáo viên', - 'terms' => 'Điều kiện', - 'test_description' => 'Test Description', - 'test_locale' => 'Test Locale', - 'test_name' => 'Test Name', - 'text' => 'Văn bản', - 'time' => 'thời gian', - 'title' => 'tiêu đề', - 'updated_at' => 'Cập nhật lúc', - 'username' => 'tên đăng nhập', - 'year' => 'năm', + 'remember' => 'Ghi nhớ', + 'restored_at' => 'Restored At', + 'result_text_under_image' => 'Result Text Under Image', + 'role' => 'Role', + 'second' => 'giây', + 'sex' => 'giới tính', + 'short_text' => 'Văn bản ngắn', + 'size' => 'kích thước', + 'state' => 'Tình trạng', + 'street' => 'Đường', + 'student' => 'Học sinh', + 'subject' => 'tiêu đề', + 'teacher' => 'Giáo viên', + 'terms' => 'Điều kiện', + 'test_description' => 'Test Description', + 'test_locale' => 'Test Locale', + 'test_name' => 'Test Name', + 'text' => 'Văn bản', + 'time' => 'thời gian', + 'title' => 'tiêu đề', + 'updated_at' => 'Cập nhật lúc', + 'username' => 'tên đăng nhập', + 'year' => 'năm', ], - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], diff --git a/resources/lang/zh_CN/admin.php b/resources/lang/zh_CN/admin.php index 9c945737..6fca9f08 100644 --- a/resources/lang/zh_CN/admin.php +++ b/resources/lang/zh_CN/admin.php @@ -1,802 +1,802 @@ [ - 'users' => '总用户', - 'available_users' => '有效用户', - 'paid_users' => '付费用户', - 'active_days_users' => ':days 日内活跃用户', - 'inactive_days_users' => ':days 日以上不活跃用户', - 'online_users' => '当前在线', - 'expiring_users' => '临近到期', - 'overuse_users' => '流量大户(超过90%的用户)', - 'abnormal_users' => '1小时内流量异常', - 'nodes' => '节点', - 'maintaining_nodes' => '维护中的节点', - 'traffic_consumed' => '记录的消耗流量', - 'traffic_days_consumed' => ':days 日内消耗流量', - 'orders' => '总订单数', - 'online_orders' => '在线支付订单数', - 'succeed_orders' => '支付成功订单数', - 'credit' => '总余额', + 'dashboard' => [ + 'users' => '总用户', + 'available_users' => '有效用户', + 'paid_users' => '付费用户', + 'active_days_users' => ':days 日内活跃用户', + 'inactive_days_users' => ':days 日以上不活跃用户', + 'online_users' => '当前在线', + 'expiring_users' => '临近到期', + 'overuse_users' => '流量大户(超过90%的用户)', + 'abnormal_users' => '1小时内流量异常', + 'nodes' => '节点', + 'maintaining_nodes' => '维护中的节点', + 'traffic_consumed' => '记录的消耗流量', + 'traffic_days_consumed' => ':days 日内消耗流量', + 'orders' => '总订单数', + 'online_orders' => '在线支付订单数', + 'succeed_orders' => '支付成功订单数', + 'credit' => '总余额', 'withdrawing_commissions' => '待提现佣金', - 'withdrawn_commissions' => '已支出佣金', + 'withdrawn_commissions' => '已支出佣金', ], - 'action' => [ + 'action' => [ 'edit_item' => '编辑:attribute', - 'add_item' => '添加:attribute', + 'add_item' => '添加:attribute', ], - 'confirm' => [ - 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], + 'confirm' => [ + 'delete' => [0 => '确定删除:attribute【', 1 => '】? '], 'continues' => '确定继续操作吗? ', - 'export' => '确定全部导出? ', + 'export' => '确定全部导出? ', ], - 'user_dashboard' => '个人中心', - 'menu' => [ - 'dashboard' => '管理中心', - 'user' => [ - 'attribute' => '用户系统', - 'list' => '用户管理', - 'oauth' => '用户授权', - 'group' => '用戶分组', + 'user_dashboard' => '个人中心', + 'menu' => [ + 'dashboard' => '管理中心', + 'user' => [ + 'attribute' => '用户系统', + 'list' => '用户管理', + 'oauth' => '用户授权', + 'group' => '用戶分组', 'credit_log' => '余额变动', - 'subscribe' => '订阅管理', + 'subscribe' => '订阅管理', ], - 'rbac' => [ - 'attribute' => '权限系统', + 'rbac' => [ + 'attribute' => '权限系统', 'permission' => '权限列表', - 'role' => '角色列表', + 'role' => '角色列表', ], 'customer_service' => [ 'attribute' => '客服系统', - 'ticket' => '服务工单', - 'article' => '文章管理', - 'push' => '消息推送', - 'mail' => '邮件群发', + 'ticket' => '服务工单', + 'article' => '文章管理', + 'push' => '消息推送', + 'mail' => '邮件群发', ], - 'node' => [ + 'node' => [ 'attribute' => '线路系统', - 'list' => '线路管理', - 'auth' => '线路授权', - 'cert' => '证书列表', + 'list' => '线路管理', + 'auth' => '线路授权', + 'cert' => '证书列表', ], - 'rule' => [ + 'rule' => [ 'attribute' => '审计规则', - 'list' => '规则列表', - 'group' => '规则分组', - 'trigger' => '触发记录', + 'list' => '规则列表', + 'group' => '规则分组', + 'trigger' => '触发记录', ], - 'shop' => [ + 'shop' => [ 'attribute' => '商品系统', - 'goods' => '商品管理', - 'coupon' => '卡券管理', - 'order' => '商品订单', + 'goods' => '商品管理', + 'coupon' => '卡券管理', + 'order' => '商品订单', ], - 'promotion' => [ - 'attribute' => '推广系统', - 'invite' => '邀请管理', - 'withdraw' => '提现管理', + 'promotion' => [ + 'attribute' => '推广系统', + 'invite' => '邀请管理', + 'withdraw' => '提现管理', 'rebate_flow' => '返利流水', ], - 'analysis' => [ - 'attribute' => '分析报告', + 'analysis' => [ + 'attribute' => '分析报告', 'accounting' => '流水账簿', - 'user_flow' => '用户分析', + 'user_flow' => '用户分析', ], - 'log' => [ - 'attribute' => '日志系统', - 'traffic' => '流量使用', - 'traffic_flow' => '流量变动', - 'service_ban' => '封禁记录', - 'online_logs' => '在线记录', - 'online_monitor' => '在线监控', - 'notify' => '通知记录', + 'log' => [ + 'attribute' => '日志系统', + 'traffic' => '流量使用', + 'traffic_flow' => '流量变动', + 'service_ban' => '封禁记录', + 'online_logs' => '在线记录', + 'online_monitor' => '在线监控', + 'notify' => '通知记录', 'payment_callback' => '支付回调', - 'system' => '系统日志', + 'system' => '系统日志', ], - 'tools' => [ + 'tools' => [ 'attribute' => '工具箱', 'decompile' => '反解析', - 'convert' => '格式转换', - 'import' => '数据导入', - 'analysis' => '日志分析', + 'convert' => '格式转换', + 'import' => '数据导入', + 'analysis' => '日志分析', ], - 'setting' => [ - 'attribute' => '设置', + 'setting' => [ + 'attribute' => '设置', 'email_suffix' => '邮箱后缀管理', - 'universal' => '通用配置', - 'system' => '系统设置', + 'universal' => '通用配置', + 'system' => '系统设置', ], ], - 'user' => [ - 'massive' => [ - 'text' => '用户生成数量', - 'button' => '批量生成', - 'failed' => '批量生成账号失败', + 'user' => [ + 'massive' => [ + 'text' => '用户生成数量', + 'button' => '批量生成', + 'failed' => '批量生成账号失败', 'succeed' => '批量生成账号成功', - 'note' => '后台批量生成用户', + 'note' => '后台批量生成用户', ], - 'proxy_info' => '配置信息', + 'proxy_info' => '配置信息', 'traffic_monitor' => '流量统计', - 'online_monitor' => '在线巡查', - 'reset_traffic' => '重置流量', - 'user_view' => '用户视角', + 'online_monitor' => '在线巡查', + 'reset_traffic' => '重置流量', + 'user_view' => '用户视角', 'connection_test' => '联网测试', - 'counts' => '共 :num 个账号', - 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], - 'info' => [ - 'account' => '账号信息', - 'proxy' => '代理信息', - 'switch' => '切换身份', - 'reset_date_hint' => '账号流量下一个重置日期', - 'expired_date_hint' => '留空默认为一年', - 'uuid_hint' => 'V2Ray的账户ID', + 'counts' => '共 :num 个账号', + 'reset_confirm' => [0 => '确定重置 【', 1 => '】 的流量吗?'], + 'info' => [ + 'account' => '账号信息', + 'proxy' => '代理信息', + 'switch' => '切换身份', + 'reset_date_hint' => '账号流量下一个重置日期', + 'expired_date_hint' => '留空默认为一年', + 'uuid_hint' => 'V2Ray的账户ID', 'recharge_placeholder' => '填入负值则会扣余额', ], - 'update_help' => '更新成功,是否返回?', - 'proxies_config' => '【:username】连接配置信息', - 'group' => [ - 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', - 'name' => '分组名称', + 'update_help' => '更新成功,是否返回?', + 'proxies_config' => '【:username】连接配置信息', + 'group' => [ + 'title' => '用户分组控制(同一节点可分配至多个分组,一个用户只能属于一个分组;对于用户可见/可用节点:先按分组后按等级)', + 'name' => '分组名称', 'counts' => '共 :num 个分组', ], ], 'zero_unlimited_hint' => '不设置/0,即为无限制', - 'node' => [ + 'node' => [ 'traffic_monitor' => '流量统计', - 'refresh_geo' => '刷新地理', - 'ping' => '检测延迟', + 'refresh_geo' => '刷新地理', + 'ping' => '检测延迟', 'connection_test' => '连通性检测', - 'counts' => '共 :num 条线路', - 'reload_all' => '重载【全部】后端', + 'counts' => '共 :num 条线路', + 'reload_all' => '重载【全部】后端', 'refresh_geo_all' => '刷新【全部】节点地理信息', - 'reload_confirm' => '确定重载节点?', - 'info' => [ - 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', - 'basic' => '基础信息', - 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', - 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', - 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', - 'extend' => '扩展信息', - 'display' => [ + 'reload_confirm' => '确定重载节点?', + 'info' => [ + 'hint' => '注意: 添加节点后自动生成的ID,即为该节点部署ShadowsocksR Python版后端时usermysql.json中的node_id的值,同时也是部署V2Ray后端时的nodeId的值;', + 'basic' => '基础信息', + 'ddns_hint' => '动态IP节点需要配置DDNS,对此类型节点,节点阻断功能会通过域名进行检测', + 'domain_placeholder' => '服务器域名地址,填则优先取域名地址', + 'domain_hint' => '系统设置中开启【DDNS模式】,域名将会自动与下方IP内容进行绑定操作!无需再前往域名注册商页面修改IP信息了哟', + 'extend' => '扩展信息', + 'display' => [ 'invisible' => '完全不可见', - 'node' => '只显示于【:trans】页面', - 'sub' => '只显示于【订 阅】', - 'all' => '完全可见', - 'hint' => '用户是否可以订阅/看到本节点', + 'node' => '只显示于【:trans】页面', + 'sub' => '只显示于【订 阅】', + 'all' => '完全可见', + 'hint' => '用户是否可以订阅/看到本节点', ], - 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', - 'ipv4_placeholder' => '服务器IPv4地址', - 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', - 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', - 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', - 'level_hint' => '等级:0-无等级,全部可见', - 'detection' => [ - 'tcp' => '只检测TCP', + 'ipv4_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv6_hint' => '多IP使用“, ”分割,例:1.1.1.1, 8.8.8.8', + 'ipv4_placeholder' => '服务器IPv4地址', + 'ipv6_placeholder' => '服务器IPv6地址,填写则用户可见,域名无效', + 'push_port_hint' => '必填且防火墙需放行,否则将导致消息推送异常', + 'data_rate_hint' => '举例:0.1用100M结算10M,5用100M结算500M', + 'level_hint' => '等级:0-无等级,全部可见', + 'detection' => [ + 'tcp' => '只检测TCP', 'icmp' => '只检测ICMP', - 'all' => '检测全部', + 'all' => '检测全部', 'hint' => '每30~60分钟随机进行节点阻断检测', ], - 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', + 'obfs_param_hint' => '混淆不为 [plain] 时可填入参数进行流量伪装; 混淆为 [http_simple] 时,建议端口为 80; 混淆为 [tls] 时,建议端口为 443;', 'additional_ports_hint' => '如果启用请配置服务端的additional_ports信息', - 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', - 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', - 'v2_cover' => [ - 'none' => '无伪装', - 'http' => 'HTTP数据流', - 'srtp' => '视频通话数据 (SRTP)', - 'utp' => 'BT下载数据 (uTP)', - 'wechat' => '微信视频通话', - 'dtls' => 'DTLS1.2数据包', + 'v2_method_hint' => '使用WebSocket传输协议时不要使用none', + 'v2_net_hint' => '使用WebSocket传输协议时请启用TLS', + 'v2_cover' => [ + 'none' => '无伪装', + 'http' => 'HTTP数据流', + 'srtp' => '视频通话数据 (SRTP)', + 'utp' => 'BT下载数据 (uTP)', + 'wechat' => '微信视频通话', + 'dtls' => 'DTLS1.2数据包', 'wireguard' => 'WireGuard数据包', ], - 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', - 'v2_tls_provider_hint' => '不同后端配置不同:', - 'single_hint' => '推荐80或443,服务端需要配置
          严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', + 'v2_host_hint' => '伪装类型为http时多个伪装域名逗号隔开,使用WebSocket传输协议时只允许单个', + 'v2_tls_provider_hint' => '不同后端配置不同:', + 'single_hint' => '推荐80或443,服务端需要配置
          严格模式:用户的端口无法连接,只能通过以下指定的端口进行连接(如何配置)', ], - 'proxy_info' => '*兼容 SS', + 'proxy_info' => '*兼容 SS', 'proxy_info_hint' => '如果兼容请在服务端配置协议和混淆时加上_compatible', - 'reload' => '重载后端', - 'auth' => [ - 'title' => '节点授权列表WEBAPI', - 'deploy' => [ - 'title' => '部署 :type_label 后端', - 'attribute' => '部署后端', - 'command' => '操作命令', - 'update' => '更新:', - 'uninstall' => '卸载:', - 'start' => '启动:', - 'stop' => '停止:', - 'status' => '状态:', - 'recent_logs' => '近期日志:', + 'reload' => '重载后端', + 'auth' => [ + 'title' => '节点授权列表WEBAPI', + 'deploy' => [ + 'title' => '部署 :type_label 后端', + 'attribute' => '部署后端', + 'command' => '操作命令', + 'update' => '更新:', + 'uninstall' => '卸载:', + 'start' => '启动:', + 'stop' => '停止:', + 'status' => '状态:', + 'recent_logs' => '近期日志:', 'real_time_logs' => '实时日志:', - 'restart' => '重启:', - 'same' => '同上', - 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', + 'restart' => '重启:', + 'same' => '同上', + 'trojan_hint' => '请先填写节点域名并将域名解析到节点对应的IP上', ], - 'reset_auth' => '重置密钥', - 'counts' => '共 :num 条授权', + 'reset_auth' => '重置密钥', + 'counts' => '共 :num 条授权', 'generating_all' => '确定生成所有节点的授权吗?', ], - 'cert' => [ - 'title' => '域名证书列表(V2Ray节点的伪装域名)', - 'counts' => '共 :num 个域名证书', + 'cert' => [ + 'title' => '域名证书列表(V2Ray节点的伪装域名)', + 'counts' => '共 :num 个域名证书', 'key_placeholder' => '域名证书的KEY值,允许为空,VNET-V2Ray后端支持自动签证书', 'pem_placeholder' => '域名证书的PEM值,允许为空,VNET-V2Ray后端支持自动签证书', ], ], - 'hint' => '提示', - 'oauth' => [ - 'title' => '用户OAuth授权', + 'hint' => '提示', + 'oauth' => [ + 'title' => '用户OAuth授权', 'counts' => '共 :num 个授权', ], - 'select_all' => '全 选', - 'clear' => '清 空', - 'unselected_hint' => '待分配规则,此处可搜索', - 'selected_hint' => '已分配规则,此处可搜索', - 'clone' => '克隆', - 'monitor' => [ - 'daily_chart' => '每日流量图', + 'select_all' => '全 选', + 'clear' => '清 空', + 'unselected_hint' => '待分配规则,此处可搜索', + 'selected_hint' => '已分配规则,此处可搜索', + 'clone' => '克隆', + 'monitor' => [ + 'daily_chart' => '每日流量图', 'monthly_chart' => '月流量图', - 'node' => '节点流量', - 'user' => '用户流量', - 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', + 'node' => '节点流量', + 'user' => '用户流量', + 'hint' => '提示: 如果无统计数据,请检查定时任务是否正常。', ], - 'tools' => [ - 'analysis' => [ - 'title' => 'SSR日志分析仅适用于单机单节点', - 'req_url' => '近期请求地址', + 'tools' => [ + 'analysis' => [ + 'title' => 'SSR日志分析仅适用于单机单节点', + 'req_url' => '近期请求地址', 'not_enough' => '访问记录不足15000条,无法分析数据', ], - 'convert' => [ - 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', + 'convert' => [ + 'title' => '格式转换 Shadowsocks 转 ShadowsocksR', 'content_placeholder' => '请填入要转换的配置信息', ], 'decompile' => [ - 'title' => '反解析配置转换', - 'attribute' => '反解析', + 'title' => '反解析配置转换', + 'attribute' => '反解析', 'content_placeholder' => '请填入要反解析的ShadowsocksR链接,一行一条', ], ], - 'ticket' => [ - 'title' => '工单列表', - 'counts' => '共 :num 个工单', - 'send_to' => '请填入目标用户信息!', - 'user_info' => '用户信息', - 'inviter_info' => '邀请人信息', + 'ticket' => [ + 'title' => '工单列表', + 'counts' => '共 :num 个工单', + 'send_to' => '请填入目标用户信息!', + 'user_info' => '用户信息', + 'inviter_info' => '邀请人信息', 'close_confirm' => '确定关闭工单?', - 'error' => '未知错误!请查看运行日志', + 'error' => '未知错误!请查看运行日志', ], - 'logs' => [ - 'subscribe' => '订阅列表', - 'counts' => '共 :num 条记录', - 'rule' => [ - 'clear_all' => '清空记录', - 'title' => '触发记录', - 'name' => '触发规则', - 'reason' => '触发原因', - 'created_at' => '触发时间', - 'tag' => '✅ 访问非规则允许内容', + 'logs' => [ + 'subscribe' => '订阅列表', + 'counts' => '共 :num 条记录', + 'rule' => [ + 'clear_all' => '清空记录', + 'title' => '触发记录', + 'name' => '触发规则', + 'reason' => '触发原因', + 'created_at' => '触发时间', + 'tag' => '✅ 访问非规则允许内容', 'clear_confirm' => '确定清空所有记录吗?', ], - 'order' => [ - 'title' => '订单列表', + 'order' => [ + 'title' => '订单列表', 'is_expired' => '是否过期', - 'is_coupon' => '是否使用优惠券', + 'is_coupon' => '是否使用优惠券', ], - 'user_traffic' => [ - 'title' => '流量使用记录', + 'user_traffic' => [ + 'title' => '流量使用记录', 'choose_node' => '选择节点', ], 'user_data_modify_title' => '流量变动记录', - 'callback' => '回调日志 (在线支付)', - 'notification' => '邮件投递记录', - 'ip_monitor' => '在线IP监控 2分钟内的实时数据', - 'user_ip' => [ - 'title' => '用户在线IP列表 最近10分钟', + 'callback' => '回调日志 (在线支付)', + 'notification' => '邮件投递记录', + 'ip_monitor' => '在线IP监控 2分钟内的实时数据', + 'user_ip' => [ + 'title' => '用户在线IP列表 最近10分钟', 'connect' => '连接IP', ], - 'ban' => [ - 'title' => '用户封禁记录', - 'time' => '时长', - 'reason' => '理由', - 'ban_time' => '封禁时间', + 'ban' => [ + 'title' => '用户封禁记录', + 'time' => '时长', + 'reason' => '理由', + 'ban_time' => '封禁时间', 'last_connect_at' => '最后连接时间', ], - 'credit_title' => '余额变动记录', + 'credit_title' => '余额变动记录', ], - 'start_time' => '开始区间', - 'end_time' => '结束区间', - 'goods' => [ - 'title' => '商品列表', - 'type' => [ - 'top_up' => '充值', + 'start_time' => '开始区间', + 'end_time' => '结束区间', + 'goods' => [ + 'title' => '商品列表', + 'type' => [ + 'top_up' => '充值', 'package' => '流量包', - 'plan' => '套餐', + 'plan' => '套餐', ], - 'info' => [ - 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', - 'period_hint' => '套餐流量会每N天重置', - 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', + 'info' => [ + 'type_hint' => '套餐与账号有效期有关,流量包只扣可用流量,不影响有效期', + 'period_hint' => '套餐流量会每N天重置', + 'limit_num_hint' => '每个用户可以购买该商品次数,为 0 时代表不限购', 'available_date_hint' => '到期后会自动从总流量扣减对应的流量', - 'desc_placeholder' => '商品的简单描述', - 'list_placeholder' => '商品的自定义列表添加', - 'list_hint' => '每行内容请以<li> 开头</li> 结尾', + 'desc_placeholder' => '商品的简单描述', + 'list_placeholder' => '商品的自定义列表添加', + 'list_hint' => '每行内容请以<li> 开头</li> 结尾', ], - 'status' => [ + 'status' => [ 'yes' => '上架', - 'no' => '下架', + 'no' => '下架', ], 'sell_and_used' => '使用 / 销售', - 'counts' => '共 :num 个商品', + 'counts' => '共 :num 个商品', ], - 'sort_asc' => '排序值越大排越前', - 'yes' => '是', - 'no' => '否', - 'rule' => [ - 'type' => [ - 'reg' => '正则表达式', - 'domain' => '域名', - 'ip' => 'IP', + 'sort_asc' => '排序值越大排越前', + 'yes' => '是', + 'no' => '否', + 'rule' => [ + 'type' => [ + 'reg' => '正则表达式', + 'domain' => '域名', + 'ip' => 'IP', 'protocol' => '协议', ], 'counts' => '共 :num 条审计规则', - 'title' => '规则列表', - 'group' => [ - 'type' => [ + 'title' => '规则列表', + 'group' => [ + 'type' => [ 'off' => '阻断', - 'on' => '放行', + 'on' => '放行', ], - 'title' => '规则分组', + 'title' => '规则分组', 'counts' => '共 :num 个分组', ], ], - 'role' => [ - 'name_hint' => '唯一标识名称,例如:Administrator', + 'role' => [ + 'name_hint' => '唯一标识名称,例如:Administrator', 'description_hint' => '面板显示名称,例如:管理员', - 'title' => '权限角色列表', - 'permissions_all' => '全部权限', - 'counts' => '共 :num 个权限角色', + 'title' => '权限角色列表', + 'permissions_all' => '全部权限', + 'counts' => '共 :num 个权限角色', ], - 'report' => [ - 'monthly_accounting' => '月流水账簿', + 'report' => [ + 'monthly_accounting' => '月流水账簿', 'annually_accounting' => '年流水账簿', 'historic_accounting' => '历史流水账簿', - 'current_month' => '本 月', - 'last_month' => '上 月', - 'current_year' => '今 年', - 'last_year' => '去 年', - 'hourly_traffic' => '每时流量', - 'daily_traffic' => '每天流量', - 'today' => '本 日', + 'current_month' => '本 月', + 'last_month' => '上 月', + 'current_year' => '今 年', + 'last_year' => '去 年', + 'hourly_traffic' => '每时流量', + 'daily_traffic' => '每天流量', + 'today' => '本 日', ], - 'permission' => [ - 'title' => '权限行为列表', + 'permission' => [ + 'title' => '权限行为列表', 'description_hint' => '填写描述,例:【A系统】编辑A', - 'name_hint' => '填写路由名称,例:admin.permission.create,update', - 'counts' => '共 :num 条权限行为', + 'name_hint' => '填写路由名称,例:admin.permission.create,update', + 'counts' => '共 :num 条权限行为', ], - 'marketing' => [ - 'email' => [ - 'title' => '邮件群发列表', + 'marketing' => [ + 'email' => [ + 'title' => '邮件群发列表', 'group_send' => '群发邮件', - 'counts' => '共 :num 条消息', + 'counts' => '共 :num 条消息', ], - 'send_status' => '发送状态', - 'send_time' => '发送时间', + 'send_status' => '发送状态', + 'send_time' => '发送时间', 'error_message' => '错误信息', - 'push' => [ - 'title' => '推送消息列表', - 'send' => '推送消息', + 'push' => [ + 'title' => '推送消息列表', + 'send' => '推送消息', 'counts' => '共 :num 条推送消息', ], ], - 'creating' => '正在添加...', - 'article' => [ - 'type' => [ - 'knowledge' => '文章', + 'creating' => '正在添加...', + 'article' => [ + 'type' => [ + 'knowledge' => '文章', 'announcement' => '公告', ], 'category_hint' => '同一类别将归类与同一文件夹下', - 'logo_hint' => '推荐尺寸:100x75', - 'title' => '文章列表', - 'counts' => '共 :num 篇文章', + 'logo_hint' => '推荐尺寸:100x75', + 'title' => '文章列表', + 'counts' => '共 :num 篇文章', ], - 'coupon' => [ - 'title' => '卡券列表', - 'name_hint' => '会用于前端显示', - 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', - 'type' => [ - 'voucher' => '代金券', + 'coupon' => [ + 'title' => '卡券列表', + 'name_hint' => '会用于前端显示', + 'sn_hint' => '提供给用户使用卡券的卡券,留空则默认为8位随机码', + 'type' => [ + 'voucher' => '代金券', 'discount' => '折扣券', - 'charge' => '充值券', + 'charge' => '充值券', ], - 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', - 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', - 'value_hint' => '范围为 1% ~ 99% ', - 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', - 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', - 'used_hint' => '符合条件的用户可以使用本券 :num 次;', - 'levels_hint' => '用户等级在选定等级内,方可使用本券', - 'groups_hint' => '选定的用户分组,方可使用本券', - 'users_placeholder' => '输入用户ID, 再回车', - 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', - 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', - 'services_placeholder' => '输入商品ID, 再回车', + 'type_hint' => '抵用:抵扣商品金额,折扣:商品百分比打折,充值:充值用户账号余额', + 'value' => '{1} ➖ :num|{2} :num 折|{3} ➕ :num', + 'value_hint' => '范围为 1% ~ 99% ', + 'priority_hint' => '同【使用券码】下,符合条件的高权重码将会被优先使用。最高为 255', + 'minimum_hint' => '当支付金额超过 :num 值时,才能使用本优惠劵;', + 'used_hint' => '符合条件的用户可以使用本券 :num 次;', + 'levels_hint' => '用户等级在选定等级内,方可使用本券', + 'groups_hint' => '选定的用户分组,方可使用本券', + 'users_placeholder' => '输入用户ID, 再回车', + 'user_whitelist_hint' => '涉及用户均可使用本券,留空为不使用此条件', + 'users_blacklist_hint' => '涉及用户均不可使用本券,空为不使用此条件', + 'services_placeholder' => '输入商品ID, 再回车', 'services_whitelist_hint' => '涉及商品方可使用本券,留空为不使用此条件', 'services_blacklist_hint' => '涉及商品不可使用本券,留空为不使用此条件', - 'newbie' => [ + 'newbie' => [ 'first_discount' => '首次用任意券', - 'first_order' => '首单', - 'created_days' => '创号', + 'first_order' => '首单', + 'created_days' => '创号', ], - 'created_days_hint' => '且 创号 :days 天', - 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', - 'info_title' => '卡券信息', - 'counts' => '共 :num 张优惠券', - 'discount' => '优惠', - 'export_title' => '卡券导出', - 'single_use' => '一次性', + 'created_days_hint' => '且 创号 :days 天', + 'limit_hint' => '本项各条件为 并且 关系,请自行搭配使用', + 'info_title' => '卡券信息', + 'counts' => '共 :num 张优惠券', + 'discount' => '优惠', + 'export_title' => '卡券导出', + 'single_use' => '一次性', ], - 'times' => '次', - 'massive_export' => '批量导出', - 'system_generate' => '系统生成', - 'aff' => [ - 'rebate_title' => '返利流水记录', - 'counts' => '共 :num 个申请', - 'title' => '提现申请列表', - 'apply_counts' => '共 :num 个申请', - 'referral' => '推广返利', - 'commission_title' => '提现申请详情', + 'times' => '次', + 'massive_export' => '批量导出', + 'system_generate' => '系统生成', + 'aff' => [ + 'rebate_title' => '返利流水记录', + 'counts' => '共 :num 个申请', + 'title' => '提现申请列表', + 'apply_counts' => '共 :num 个申请', + 'referral' => '推广返利', + 'commission_title' => '提现申请详情', 'commission_counts' => '本申请共涉及 :num 单', ], - 'setting' => [ - 'common' => [ - 'title' => '通用配置', - 'set_default' => '设为默认', + 'setting' => [ + 'common' => [ + 'title' => '通用配置', + 'set_default' => '设为默认', 'connect_nodes' => '关联节点数', ], - 'email' => [ - 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', - 'tail' => '邮箱后缀', - 'rule' => '规则', - 'black' => '黑名单', - 'white' => '白名单', + 'email' => [ + 'title' => '邮箱过滤列表 (用于屏蔽注册邮箱后缀)', + 'tail' => '邮箱后缀', + 'rule' => '规则', + 'black' => '黑名单', + 'white' => '白名单', 'tail_placeholder' => '请填入邮箱后缀', ], - 'system' => [ - 'title' => '系统配置', - 'web' => '网站常规', - 'account' => '账号设置', - 'node' => '节点设置', - 'extend' => '拓展功能', - 'check_in' => '签到系统', + 'system' => [ + 'title' => '系统配置', + 'web' => '网站常规', + 'account' => '账号设置', + 'node' => '节点设置', + 'extend' => '拓展功能', + 'check_in' => '签到系统', 'promotion' => '推广系统', - 'notify' => '通知系统', - 'auto_job' => '自动任务', - 'other' => 'LOGO|客服|统计', - 'payment' => '支付系统', - 'menu' => '菜单', + 'notify' => '通知系统', + 'auto_job' => '自动任务', + 'other' => 'LOGO|客服|统计', + 'payment' => '支付系统', + 'menu' => '菜单', ], 'no_permission' => '您没有权限修改参数!', ], - 'system' => [ - 'account_expire_notification' => '账号过期通知', - 'active_times' => '激活账号次数', - 'admin_invite_days' => '管理员-邀请码有效期', - 'aff_salt' => '邀请链接 用户信息字符化', - 'alipay_qrcode' => '支付宝二维码', - 'AppStore_id' => '苹果账号', - 'AppStore_password' => '苹果密码', - 'auto_release_port' => '端口回收机制', - 'bark_key' => 'Bark设备号', - 'captcha_key' => '验证码 Key', - 'captcha_secret' => '验证码 Secret/ID', - 'codepay_id' => '码支付ID', - 'codepay_key' => '通信密钥', - 'codepay_url' => '请求URL', - 'data_anomaly_notification' => '流量异常通知', - 'data_exhaust_notification' => '流量耗尽通知', - 'ddns_key' => 'DNS服务商Key', - 'ddns_mode' => 'DDNS模式', - 'ddns_secret' => 'DNS服务商Secret', - 'default_days' => '初始有效期', - 'default_traffic' => '初始流量', - 'detection_check_times' => '阻断检测提醒', - 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', - 'dingTalk_secret' => '钉钉自定义机器人 密钥', - 'epay_key' => '商户密钥', - 'epay_mch_id' => '商户ID', - 'epay_url' => '接口对接地址', - 'expire_days' => '过期警告阈值', - 'f2fpay_app_id' => '应用ID', - 'f2fpay_private_key' => '应用私钥', - 'f2fpay_public_key' => '支付宝公钥', - 'forbid_mode' => '禁止访问模式', - 'invite_num' => '可生成邀请码数', - 'is_activate_account' => '激活账号', - 'is_AliPay' => '支付宝支付', - 'is_ban_status' => '过期自动封禁', - 'is_captcha' => '验证码模式', - 'is_checkin' => '签到加流量', - 'is_clear_log' => '自动清除日志', - 'is_custom_subscribe' => '高级订阅', - 'is_email_filtering' => '邮箱过滤机制', - 'is_forbid_robot' => '阻止机器人访问', - 'is_free_code' => '免费邀请码', - 'is_invite_register' => '邀请注册', - 'is_otherPay' => '特殊支付', - 'is_QQPay' => 'QQ钱包', - 'is_rand_port' => '随机端口', - 'is_register' => '用户注册', - 'is_subscribe_ban' => '订阅异常自动封禁', - 'is_traffic_ban' => '异常自动封号', - 'is_WeChatPay' => '微信支付', - 'iYuu_token' => 'IYUU令牌', - 'maintenance_content' => '维护介绍内容', - 'maintenance_mode' => '维护模式', - 'maintenance_time' => '维护结束时间', - 'min_port' => '端口范围', - 'min_rand_traffic' => '流量范围', - 'node_blocked_notification' => '节点阻断提醒', - 'node_daily_notification' => '节点使用报告', - 'node_offline_notification' => '节点离线提醒', - 'oauth_path' => '第三方登录平台', - 'offline_check_times' => '离线提醒次数', - 'password_reset_notification' => '重置密码', - 'paybeaver_app_id' => 'App ID', - 'paybeaver_app_secret' => 'App Secret', - 'payjs_key' => '通信密钥', - 'payjs_mch_id' => '商户号', - 'payment_confirm_notification' => '人工支付确认通知', + 'system' => [ + 'account_expire_notification' => '账号过期通知', + 'active_times' => '激活账号次数', + 'admin_invite_days' => '管理员-邀请码有效期', + 'aff_salt' => '邀请链接 用户信息字符化', + 'alipay_qrcode' => '支付宝二维码', + 'AppStore_id' => '苹果账号', + 'AppStore_password' => '苹果密码', + 'auto_release_port' => '端口回收机制', + 'bark_key' => 'Bark设备号', + 'captcha_key' => '验证码 Key', + 'captcha_secret' => '验证码 Secret/ID', + 'codepay_id' => '码支付ID', + 'codepay_key' => '通信密钥', + 'codepay_url' => '请求URL', + 'data_anomaly_notification' => '流量异常通知', + 'data_exhaust_notification' => '流量耗尽通知', + 'ddns_key' => 'DNS服务商Key', + 'ddns_mode' => 'DDNS模式', + 'ddns_secret' => 'DNS服务商Secret', + 'default_days' => '初始有效期', + 'default_traffic' => '初始流量', + 'detection_check_times' => '阻断检测提醒', + 'dingTalk_access_token' => '钉钉自定义机器人 Access Token', + 'dingTalk_secret' => '钉钉自定义机器人 密钥', + 'epay_key' => '商户密钥', + 'epay_mch_id' => '商户ID', + 'epay_url' => '接口对接地址', + 'expire_days' => '过期警告阈值', + 'f2fpay_app_id' => '应用ID', + 'f2fpay_private_key' => '应用私钥', + 'f2fpay_public_key' => '支付宝公钥', + 'forbid_mode' => '禁止访问模式', + 'invite_num' => '可生成邀请码数', + 'is_activate_account' => '激活账号', + 'is_AliPay' => '支付宝支付', + 'is_ban_status' => '过期自动封禁', + 'is_captcha' => '验证码模式', + 'is_checkin' => '签到加流量', + 'is_clear_log' => '自动清除日志', + 'is_custom_subscribe' => '高级订阅', + 'is_email_filtering' => '邮箱过滤机制', + 'is_forbid_robot' => '阻止机器人访问', + 'is_free_code' => '免费邀请码', + 'is_invite_register' => '邀请注册', + 'is_otherPay' => '特殊支付', + 'is_QQPay' => 'QQ钱包', + 'is_rand_port' => '随机端口', + 'is_register' => '用户注册', + 'is_subscribe_ban' => '订阅异常自动封禁', + 'is_traffic_ban' => '异常自动封号', + 'is_WeChatPay' => '微信支付', + 'iYuu_token' => 'IYUU令牌', + 'maintenance_content' => '维护介绍内容', + 'maintenance_mode' => '维护模式', + 'maintenance_time' => '维护结束时间', + 'min_port' => '端口范围', + 'min_rand_traffic' => '流量范围', + 'node_blocked_notification' => '节点阻断提醒', + 'node_daily_notification' => '节点使用报告', + 'node_offline_notification' => '节点离线提醒', + 'oauth_path' => '第三方登录平台', + 'offline_check_times' => '离线提醒次数', + 'password_reset_notification' => '重置密码', + 'paybeaver_app_id' => 'App ID', + 'paybeaver_app_secret' => 'App Secret', + 'payjs_key' => '通信密钥', + 'payjs_mch_id' => '商户号', + 'payment_confirm_notification' => '人工支付确认通知', 'payment_received_notification' => '支付成功通知', - 'paypal_app_id' => '应用ID', - 'paypal_certificate' => '证书', - 'paypal_password' => 'API密码', - 'paypal_secret' => '签名', - 'paypal_username' => 'API用户名', - 'pushDeer_key' => 'PushDeer Key', - 'pushplus_token' => 'PushPlus Token', - 'rand_subscribe' => '随机订阅', - 'redirect_url' => '重定向地址', - 'referral_money' => '提现限制', - 'referral_percent' => '返利比例', - 'referral_status' => '推广功能', - 'referral_traffic' => '注册送流量', - 'referral_type' => '返利模式', - 'register_ip_limit' => '同IP注册限制', - 'reset_password_times' => '重置密码次数', - 'reset_traffic' => '流量自动重置', - 'server_chan_key' => 'ServerChan SCKEY', - 'standard_currency' => '本位货币', - 'stripe_public_key' => 'Public Key', - 'stripe_secret_key' => 'Secret Key', - 'stripe_signing_secret' => 'WebHook Signing secret', - 'subject_name' => '自定义商品名称', - 'subscribe_ban_times' => '订阅请求阈值', - 'subscribe_domain' => '节点订阅地址', - 'subscribe_max' => '订阅节点数', - 'telegram_token' => 'Telegram Token', - 'tg_chat_token' => 'TG酱Token', - 'theadpay_key' => '商家密钥', - 'theadpay_mchid' => '商家ID', - 'theadpay_url' => '接口地址', - 'ticket_closed_notification' => '工单关闭通知', - 'ticket_created_notification' => '新工单通知', - 'ticket_replied_notification' => '工单回复通知', - 'traffic_ban_time' => '封号时长', - 'traffic_ban_value' => '流量异常阈值', - 'traffic_limit_time' => '时间间隔', - 'traffic_warning_percent' => '流量警告阈值', - 'trojan_license' => 'Trojan授权', - 'username_type' => '账号类型', - 'user_invite_days' => '用户-邀请码有效期', - 'v2ray_license' => 'V2Ray授权', - 'v2ray_tls_provider' => 'V2Ray TLS配置', - 'webmaster_email' => '管理员邮箱', - 'website_analytics' => '统计代码', - 'website_callback_url' => '通用支付回调地址', - 'website_customer_service' => '客服代码', - 'website_home_logo' => '首页LOGO', - 'website_logo' => '站内LOGO', - 'website_name' => '网站名称', - 'website_security_code' => '网站安全码', - 'website_url' => '网站地址', - 'web_api_url' => '授权/后端访问域名', - 'wechat_aid' => '微信企业应用ID', - 'wechat_cid' => '微信企业ID', - 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', - 'wechat_qrcode' => '微 信二维码', - 'wechat_secret' => '微信企业应用密钥', - 'wechat_token' => '微信企业应用TOKEN', - 'hint' => [ - 'account_expire_notification' => '通知用户账号即将到期', - 'active_times' => '24小时内可以通过邮件激活账号次数', - 'admin_invite_days' => '管理员生成邀请码的有效期', - 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', - 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', - 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', - 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', - 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', - 'captcha_key' => '浏览设置指南来设置', - 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', - 'data_exhaust_notification' => '通知用户流量即将耗尽', - 'ddns_key' => "浏览设置指南来设置", - 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', - 'default_days' => '用户注册时默认账户有效期,为0即当天到期', - 'default_traffic' => '用户注册时默认可用流量', - 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', - 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', - 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', - 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', - 'f2fpay_app_id' => '即:APPID', - 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', - 'f2fpay_public_key' => '注意不是应用公钥!', - 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', - 'invite_num' => '用户可以生成的邀请码数', - 'is_activate_account' => '启用后用户需要通过邮件来激活账号', - 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', - 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', - 'is_checkin' => '登录时将根据流量范围随机得到流量', - 'is_clear_log' => '(推荐)启用后自动清除无用日志', - 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', - 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', - 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', - 'is_free_code' => '关闭后免费邀请码不可见', - 'is_rand_port' => '注册、添加用户时随机生成端口', - 'is_register' => '关闭后无法注册', - 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', - 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', - 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', - 'maintenance_content' => '自定义维护内容信息', - 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", - 'maintenance_time' => '用于维护界面倒计时', - 'min_port' => '端口范围:1000 - 65535', - 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', - 'node_daily_notification' => '报告各节点流量昨日消耗情况', - 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', - 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', - 'offline_check_times' => '24小时内提醒n次后不再提醒', - 'password_reset_notification' => '启用后用户可以重置密码', - 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', - 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', - 'payjs_mch_id' => '在本界面获取信息', - 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', + 'paypal_app_id' => '应用ID', + 'paypal_certificate' => '证书', + 'paypal_password' => 'API密码', + 'paypal_secret' => '签名', + 'paypal_username' => 'API用户名', + 'pushDeer_key' => 'PushDeer Key', + 'pushplus_token' => 'PushPlus Token', + 'rand_subscribe' => '随机订阅', + 'redirect_url' => '重定向地址', + 'referral_money' => '提现限制', + 'referral_percent' => '返利比例', + 'referral_status' => '推广功能', + 'referral_traffic' => '注册送流量', + 'referral_type' => '返利模式', + 'register_ip_limit' => '同IP注册限制', + 'reset_password_times' => '重置密码次数', + 'reset_traffic' => '流量自动重置', + 'server_chan_key' => 'ServerChan SCKEY', + 'standard_currency' => '本位货币', + 'stripe_public_key' => 'Public Key', + 'stripe_secret_key' => 'Secret Key', + 'stripe_signing_secret' => 'WebHook Signing secret', + 'subject_name' => '自定义商品名称', + 'subscribe_ban_times' => '订阅请求阈值', + 'subscribe_domain' => '节点订阅地址', + 'subscribe_max' => '订阅节点数', + 'telegram_token' => 'Telegram Token', + 'tg_chat_token' => 'TG酱Token', + 'theadpay_key' => '商家密钥', + 'theadpay_mchid' => '商家ID', + 'theadpay_url' => '接口地址', + 'ticket_closed_notification' => '工单关闭通知', + 'ticket_created_notification' => '新工单通知', + 'ticket_replied_notification' => '工单回复通知', + 'traffic_ban_time' => '封号时长', + 'traffic_ban_value' => '流量异常阈值', + 'traffic_limit_time' => '时间间隔', + 'traffic_warning_percent' => '流量警告阈值', + 'trojan_license' => 'Trojan授权', + 'username_type' => '账号类型', + 'user_invite_days' => '用户-邀请码有效期', + 'v2ray_license' => 'V2Ray授权', + 'v2ray_tls_provider' => 'V2Ray TLS配置', + 'webmaster_email' => '管理员邮箱', + 'website_analytics' => '统计代码', + 'website_callback_url' => '通用支付回调地址', + 'website_customer_service' => '客服代码', + 'website_home_logo' => '首页LOGO', + 'website_logo' => '站内LOGO', + 'website_name' => '网站名称', + 'website_security_code' => '网站安全码', + 'website_url' => '网站地址', + 'web_api_url' => '授权/后端访问域名', + 'wechat_aid' => '微信企业应用ID', + 'wechat_cid' => '微信企业ID', + 'wechat_encodingAESKey' => '微信企业应用EncodingAESKey', + 'wechat_qrcode' => '微 信二维码', + 'wechat_secret' => '微信企业应用密钥', + 'wechat_token' => '微信企业应用TOKEN', + 'hint' => [ + 'account_expire_notification' => '通知用户账号即将到期', + 'active_times' => '24小时内可以通过邮件激活账号次数', + 'admin_invite_days' => '管理员生成邀请码的有效期', + 'aff_salt' => '留空时,邀请链接将显示用户ID;填入任意英文/数字 即可对用户链接ID进行加密', + 'AppStore_id' => 'iOS软件设置教程中使用的苹果账号', + 'AppStore_password' => 'iOS软件设置教程中使用的苹果密码', + 'auto_release_port' => '被封禁/过期 '.config('tasks.release_port').' 天的账号端口自动释放', + 'bark_key' => '推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串字符串,启用Bark,请务必填入本值', + 'captcha_key' => '浏览设置指南来设置', + 'data_anomaly_notification' => '1小时内流量超过异常阈值通知超管', + 'data_exhaust_notification' => '通知用户流量即将耗尽', + 'ddns_key' => "浏览设置指南来设置", + 'ddns_mode' => '添加/编辑/删除节点的【域名、ipv4、ipv6】时,自动更新对应内容至DNS服务商', + 'default_days' => '用户注册时默认账户有效期,为0即当天到期', + 'default_traffic' => '用户注册时默认可用流量', + 'detection_check_times' => '提醒N次后自动下线节点,为0/留空时不限制,不超过12', + 'dingTalk_access_token' => '可以阅读钉钉手册查阅步骤', + 'dingTalk_secret' => '可选填!开启机器人[加签]就是必填项目!', + 'expire_days' => '【账号过期通知】开始阈值,每日通知用户', + 'f2fpay_app_id' => '即:APPID', + 'f2fpay_private_key' => '生成秘钥软件生成时,产生的应用秘钥', + 'f2fpay_public_key' => '注意不是应用公钥!', + 'forbid_mode' => '依据IP对对应地区进行阻拦,非阻拦地区可正常访问', + 'invite_num' => '用户可以生成的邀请码数', + 'is_activate_account' => '启用后用户需要通过邮件来激活账号', + 'is_ban_status' => '(慎重)封禁整个账号会重置账号的所有数据且会导致用户无法登录,不开启状态下只封禁用户代理', + 'is_captcha' => '启用后 登录/注册 需要进行验证码认证', + 'is_checkin' => '登录时将根据流量范围随机得到流量', + 'is_clear_log' => '(推荐)启用后自动清除无用日志', + 'is_custom_subscribe' => '启用后,订阅信息顶部将显示过期时间、剩余流量(只支持个别客户端)', + 'is_email_filtering' => '黑名单: 用户可使用任意黑名单外的邮箱注册;白名单:用户只能选择使用白名单中的邮箱后缀注册', + 'is_forbid_robot' => '如果是机器人、爬虫、代理访问网站则会抛出404错误', + 'is_free_code' => '关闭后免费邀请码不可见', + 'is_rand_port' => '注册、添加用户时随机生成端口', + 'is_register' => '关闭后无法注册', + 'is_subscribe_ban' => '启用后用户订阅链接请求超过设定阈值则自动封禁', + 'is_traffic_ban' => '1小时内流量超过异常阈值则自动封号(仅禁用代理)', + 'iYuu_token' => '启用爱语飞飞,请务必填入本值(申请 IYUU令牌)', + 'maintenance_content' => '自定义维护内容信息', + 'maintenance_mode' => "启用后,用户访问转移至维护界面 | 管理员使用 :url 登录", + 'maintenance_time' => '用于维护界面倒计时', + 'min_port' => '端口范围:1000 - 65535', + 'node_blocked_notification' => '每小时检测节点是否被阻断并提醒管理员', + 'node_daily_notification' => '报告各节点流量昨日消耗情况', + 'node_offline_notification' => '每10分钟检测节点离线并提醒管理员', + 'oauth_path' => '请在.ENV中添加设置,再在此处开启平台', + 'offline_check_times' => '24小时内提醒n次后不再提醒', + 'password_reset_notification' => '启用后用户可以重置密码', + 'paybeaver_app_id' => '商户中心 -> 开发者 -> App ID', + 'paybeaver_app_secret' => '商户中心 -> 开发者 -> App Secret', + 'payjs_mch_id' => '在本界面获取信息', + 'payment_confirm_notification' => '用户使用人工支付后通知管理员处理订单', 'payment_received_notification' => '用户支付订单后通知用户订单状态', - 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', - 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', - 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', - 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', - 'referral_money' => '满多少元才可以申请提现', - 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', - 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', - 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', - 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', - 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', - 'reset_password_times' => '24小时内可以通过邮件重置密码次数', - 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', - 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', - 'standard_currency' => '网站中涉及金钱部分的默认货币', - 'subject_name' => '用于在支付渠道的商品标题显示', - 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', - 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', - 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', - 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', - 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', - 'ticket_closed_notification' => '工单关闭通知用户', - 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', - 'ticket_replied_notification' => '工单回复通知对方', - 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', - 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', - 'traffic_limit_time' => '间隔多久才可以再次签到', - 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', - 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', - 'user_invite_days' => '用户自行生成邀请的有效期', - 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', - 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', - 'website_analytics' => '统计JS', - 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', - 'website_customer_service' => '客服JS', - 'website_name' => '发邮件时展示', - 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', - 'website_url' => '生成重置密码、在线支付必备', - 'web_api_url' => '例:https://demo.proxypanel.cf', - 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', - 'wechat_cid' => '获取我的企业中的企业ID', - 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', - 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', - 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', + 'pushDeer_key' => '启用PushDeer,请务必填入本值(申请 Push Key)', + 'pushplus_token' => '启用PushPlus,请务必填入本值(申请 Token)', + 'rand_subscribe' => '启用后,订阅时将随机返回节点信息,否则按节点排序返回', + 'redirect_url' => '触发审计规则时访问请求被阻断并重定向至该地址', + 'referral_money' => '满多少元才可以申请提现', + 'referral_percent' => '根据推广链接注册的账号每笔消费推广人可以分成的比例', + 'referral_status' => '关闭后用户不可见,但是不影响其正常邀请返利', + 'referral_traffic' => '根据推广链接、邀请码注册则赠送相应的流量', + 'referral_type' => '切换模式后旧数据不变,新的返利按新的模式计算', + 'register_ip_limit' => '同IP在24小时内允许注册数量,为0/留空时不限制', + 'reset_password_times' => '24小时内可以通过邮件重置密码次数', + 'reset_traffic' => '用户会按其购买套餐的日期自动重置可用流量', + 'server_chan_key' => '启用ServerChan,请务必填入本值(申请 SCKEY)', + 'standard_currency' => '网站中涉及金钱部分的默认货币', + 'subject_name' => '用于在支付渠道的商品标题显示', + 'subscribe_ban_times' => '24小时内订阅链接请求次数限制', + 'subscribe_domain' => '(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https://"', + 'subscribe_max' => '客户端订阅时取得几个节点,为0/留空时返回全部节点', + 'telegram_token' => '找 @BotFather 申请机器人获取TOKEN', + 'tg_chat_token' => '启用TG酱,请务必填入本值(申请 Token)', + 'ticket_closed_notification' => '工单关闭通知用户', + 'ticket_created_notification' => '新工单通知管理/用户,取决于谁创建了新工单', + 'ticket_replied_notification' => '工单回复通知对方', + 'traffic_ban_time' => '任何异常导致用户/订阅被封禁的时长, 到期后自动解封', + 'traffic_ban_value' => '1小时内超过该值,则触发自动封号', + 'traffic_limit_time' => '间隔多久才可以再次签到', + 'traffic_warning_percent' => '【流量耗尽通知】开始阈值,每日通知用户', + 'username_type' => '规范站点用户账号的类型,默认为电子邮箱', + 'user_invite_days' => '用户自行生成邀请的有效期', + 'v2ray_tls_provider' => '后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)', + 'webmaster_email' => '错误提示时会提供管理员邮箱作为联系方式', + 'website_analytics' => '统计JS', + 'website_callback_url' => '防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https://', + 'website_customer_service' => '客服JS', + 'website_name' => '发邮件时展示', + 'website_security_code' => '非空时必须通过安全入口加上安全码才可访问', + 'website_url' => '生成重置密码、在线支付必备', + 'web_api_url' => '例:https://demo.proxypanel.cf', + 'wechat_aid' => '在应用管理自建中创建应用 - AgentId', + 'wechat_cid' => '获取我的企业中的企业ID', + 'wechat_encodingAESKey' => '应用管理->应用->设置API接收->EncodingAESKey', + 'wechat_secret' => '应用的Secret(可能需要下载企业微信才能查看)', + 'wechat_token' => '应用管理->应用->设置API接收->TOKEN,URL设置::url', ], - 'placeholder' => [ - 'default_url' => '默认为 :url', - 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', - 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', - 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', - 'bark_key' => '填入Bark的设备号 -> 再点击更新', - 'telegram_token' => '填入Telegram的 Token -> 再点击更新', - 'pushplus_token' => '请到ServerChan申请', + 'placeholder' => [ + 'default_url' => '默认为 :url', + 'server_chan_key' => '填入ServerChan的SCKEY->再点击更新', + 'pushDeer_key' => '填入PushDeer的Push Key -> 再点击更新', + 'iYuu_token' => '填入爱语飞飞的IYUU令牌 -> 再点击更新', + 'bark_key' => '填入Bark的设备号 -> 再点击更新', + 'telegram_token' => '填入Telegram的 Token -> 再点击更新', + 'pushplus_token' => '请到ServerChan申请', 'dingTalk_access_token' => '自定义机器人的WebHook中的access_token', - 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', - 'wechat_aid' => '应用的AgentId', - 'wechat_cid' => '填入微信企业ID -> 再点击更新', - 'wechat_secret' => '应用的Secret', - 'tg_chat_token' => '请到Telegram申请', - 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', + 'dingTalk_secret' => '自定义机器人加签后出现的的密钥', + 'wechat_aid' => '应用的AgentId', + 'wechat_cid' => '填入微信企业ID -> 再点击更新', + 'wechat_secret' => '应用的Secret', + 'tg_chat_token' => '请到Telegram申请', + 'codepay_url' => 'https://codepay.fateqq.com/creat_order/?', ], - 'payment' => [ + 'payment' => [ 'attribute' => '支付设置', - 'channel' => [ - 'alipay' => '支付宝F2F', - 'codepay' => '码支付', - 'epay' => '易支付', - 'payjs' => 'PayJs', - 'paypal' => 'PayPal', - 'stripe' => 'Stripe', + 'channel' => [ + 'alipay' => '支付宝F2F', + 'codepay' => '码支付', + 'epay' => '易支付', + 'payjs' => 'PayJs', + 'paypal' => 'PayPal', + 'stripe' => 'Stripe', 'paybeaver' => '海狸支付', - 'theadpay' => '平头哥支付', - 'manual' => '人工支付', + 'theadpay' => '平头哥支付', + 'manual' => '人工支付', ], - 'hint' => [ - 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', - 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', - 'payjs' => '请到PayJs 申请账号', - 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', + 'hint' => [ + 'alipay' => '本功能需要蚂蚁金服开放平台申请权限及应用', + 'codepay' => '请到 码支付申请账号,然后下载登录其挂机软件', + 'payjs' => '请到PayJs 申请账号', + 'paypal' => '使用商家账号登录API凭证申请页, 同意并获取设置信息', 'paybeaver' => '请到海狸支付 PayBeaver申请账号', - 'theadpay' => '请到平头哥支付 THeadPay申请账号', - 'manual' => '设置后会自动开启对应显示', + 'theadpay' => '请到平头哥支付 THeadPay申请账号', + 'manual' => '设置后会自动开启对应显示', ], ], - 'notification' => [ - 'channel' => [ - 'telegram' => 'TG电报', - 'wechat' => '微信企业', - 'dingtalk' => '钉钉', - 'email' => '邮箱', - 'bark' => 'Bark', + 'notification' => [ + 'channel' => [ + 'telegram' => 'TG电报', + 'wechat' => '微信企业', + 'dingtalk' => '钉钉', + 'email' => '邮箱', + 'bark' => 'Bark', 'serverchan' => 'ServerChan', - 'pushdeer' => 'PushDeer', - 'pushplus' => 'PushPlus', - 'iyuu' => '爱语飞飞', - 'tg_chat' => 'TG酱', - 'site' => '站内通知', + 'pushdeer' => 'PushDeer', + 'pushplus' => 'PushPlus', + 'iyuu' => '爱语飞飞', + 'tg_chat' => 'TG酱', + 'site' => '站内通知', ], 'send_test' => '发送测试消息', ], - 'forbid' => [ + 'forbid' => [ 'mainland' => '阻拦大陆', - 'china' => '阻拦中国', - 'oversea' => '阻拦海外', + 'china' => '阻拦中国', + 'oversea' => '阻拦海外', ], - 'username' => [ - 'email' => '电子邮箱', + 'username' => [ + 'email' => '电子邮箱', 'mobile' => '手机号码', - 'any' => '任意用户名', + 'any' => '任意用户名', ], - 'active_account' => [ + 'active_account' => [ 'before' => '注册前激活', - 'after' => '注册后激活', + 'after' => '注册后激活', ], - 'ddns' => [ - 'namesilo' => 'Namesilo', - 'aliyun' => '阿里云(国际&国内)', - 'dnspod' => 'DNSPod', + 'ddns' => [ + 'namesilo' => 'Namesilo', + 'aliyun' => '阿里云(国际&国内)', + 'dnspod' => 'DNSPod', 'cloudflare' => 'CloudFlare', ], - 'captcha' => [ - 'standard' => '普通验证码', - 'geetest' => '极 验', + 'captcha' => [ + 'standard' => '普通验证码', + 'geetest' => '极 验', 'recaptcha' => 'Google reCaptcha', - 'hcaptcha' => 'hCaptcha', + 'hcaptcha' => 'hCaptcha', ], - 'referral' => [ + 'referral' => [ 'once' => '首购返利', 'loop' => '循环返利', ], ], - 'set_to' => '置 :attribute', - 'minute' => '分钟', - 'query' => '查 询', - 'optional' => '可选', - 'require' => '必须', + 'set_to' => '置 :attribute', + 'minute' => '分钟', + 'query' => '查 询', + 'optional' => '可选', + 'require' => '必须', ]; diff --git a/resources/lang/zh_CN/auth.php b/resources/lang/zh_CN/auth.php index 65f25acc..8a403c45 100644 --- a/resources/lang/zh_CN/auth.php +++ b/resources/lang/zh_CN/auth.php @@ -1,98 +1,98 @@ '我已阅读并同意遵守', - 'active' => [ + 'accept_term' => '我已阅读并同意遵守', + 'active' => [ 'attribute' => '激活', - 'error' => [ + 'error' => [ 'activated' => '账号已激活,无需再次激活', - 'disable' => '本站关闭了账号激活子系统,您可以直接去登录!', - 'throttle' => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email', + 'disable' => '本站关闭了账号激活子系统,您可以直接去登录!', + 'throttle' => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email', ], 'promotion' => '账号尚未激活,请先「:action」!', - 'sent' => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱', + 'sent' => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱', ], - 'aup' => '可接受使用条款', - 'captcha' => [ + 'aup' => '可接受使用条款', + 'captcha' => [ 'attribute' => '验证码', - 'error' => [ - 'failed' => '验证码验证失败,请重新输入', + 'error' => [ + 'failed' => '验证码验证失败,请重新输入', 'timeout' => '验证码不合法!可能已过期,请刷新后重试', ], - 'required' => '请正确完成验证码操作', - 'sent' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱', + 'required' => '请正确完成验证码操作', + 'sent' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱', ], - 'email' => [ + 'email' => [ 'error' => [ - 'banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', + 'banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', 'invalid' => '使用邮箱不在本站支持邮箱列表内', ], ], - 'error' => [ - 'account_baned' => '您的账号已被禁止登录!', - 'login_error' => '登录错误,请稍后重试!', - 'login_failed' => '登录失败,请检查邮箱或密码是否输入正确!', + 'error' => [ + 'account_baned' => '您的账号已被禁止登录!', + 'login_error' => '登录错误,请稍后重试!', + 'login_failed' => '登录失败,请检查邮箱或密码是否输入正确!', 'not_found_user' => '未找到关联账号,请使用其他方式登录', 'repeat_request' => '请勿重复请求,请刷新后重试', - 'url_timeout' => '链接已失效, 请重新操作', + 'url_timeout' => '链接已失效, 请重新操作', ], - 'failed' => '用户名或密码错误。', - 'invite' => [ - 'attribute' => '邀请码', - 'error' => [ + 'failed' => '用户名或密码错误。', + 'invite' => [ + 'attribute' => '邀请码', + 'error' => [ 'unavailable' => '邀请码不可用,请重试', ], - 'get' => '点击获取邀请码', + 'get' => '点击获取邀请码', 'not_required' => '无需邀请码,可直接注册!', ], - 'login' => '登 录', - 'logout' => '登 出', - 'maintenance' => '维护', + 'login' => '登 录', + 'logout' => '登 出', + 'maintenance' => '维护', 'maintenance_tip' => '网站维护中', - 'oauth' => [ - 'bind_failed' => '绑定失败', - 'bind_success' => '绑定成功', - 'login_failed' => '第三方登录失败!', - 'rebind_success' => '重新绑定成功', - 'register' => '快速注册', + 'oauth' => [ + 'bind_failed' => '绑定失败', + 'bind_success' => '绑定成功', + 'login_failed' => '第三方登录失败!', + 'rebind_success' => '重新绑定成功', + 'register' => '快速注册', 'register_failed' => '注册失败', - 'registered' => '已注册,请直接登录', - 'unbind_failed' => '解绑失败', - 'unbind_success' => '解绑成功', + 'registered' => '已注册,请直接登录', + 'unbind_failed' => '解绑失败', + 'unbind_success' => '解绑成功', ], - 'optional' => '可选', - 'password' => [ - 'forget' => '忘记密码?', - 'new' => '输入新密码', + 'optional' => '可选', + 'password' => [ + 'forget' => '忘记密码?', + 'new' => '输入新密码', 'original' => '原密码', - 'reset' => [ + 'reset' => [ 'attribute' => '重置密码', - 'error' => [ + 'error' => [ 'disabled' => '本站关闭了密码重置子系统,有事请联系 :email ', - 'failed' => '重设密码失败', + 'failed' => '重设密码失败', 'throttle' => '24小时内只能重设密码 :time 次,请勿频繁操作', - 'same' => '新密码不可与旧密码一样,请重新输入', - 'wrong' => '旧密码错误,请重新输入', - 'demo' => '演示环境禁止修改管理员密码', + 'same' => '新密码不可与旧密码一样,请重新输入', + 'wrong' => '旧密码错误,请重新输入', + 'demo' => '演示环境禁止修改管理员密码', ], - 'sent' => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)', - 'success' => '新密码设置成功,请前往登录页面', + 'sent' => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)', + 'success' => '新密码设置成功,请前往登录页面', ], ], - 'register' => [ + 'register' => [ 'attribute' => '注 册', - 'code' => '注册验证码', - 'error' => [ - 'disable' => '抱歉,本站关闭了注册通道', + 'code' => '注册验证码', + 'error' => [ + 'disable' => '抱歉,本站关闭了注册通道', 'throttle' => '防刷机制已激活,请勿频繁注册', ], - 'failed' => '注册失败,请稍后尝试', + 'failed' => '注册失败,请稍后尝试', 'promotion' => '还没有账号?请去', - 'success' => '注册成功', + 'success' => '注册成功', ], - 'remember_me' => '记住我', - 'request' => '获 取', - 'throttle' => '您尝试的登录次数过多,请 :seconds 秒后再试。', - 'tos' => '用户条款', + 'remember_me' => '记住我', + 'request' => '获 取', + 'throttle' => '您尝试的登录次数过多,请 :seconds 秒后再试。', + 'tos' => '用户条款', 'one-click_login' => '一键登录', ]; diff --git a/resources/lang/zh_CN/common.php b/resources/lang/zh_CN/common.php index 14c1e592..46408027 100644 --- a/resources/lang/zh_CN/common.php +++ b/resources/lang/zh_CN/common.php @@ -1,87 +1,87 @@ '{1} 时|{2} 点', - 'account' => '账号', - 'available_date' => '有效期', - 'created_at' => '创建时间', - 'expired_at' => '到期时间', - 'updated_at' => '更新时间', - 'latest_at' => '最近时间', - 'back' => '返 回', - 'cancel' => '取 消', - 'close' => '关 闭', - 'close_item' => '关闭:attribute', - 'confirm' => '确 认', - 'continues' => '继 续', - 'open' => '打 开', - 'send' => '发 送', - 'view' => '查 看', - 'reset' => '重 置', - 'copy' => [ + 'hour' => '{1} 时|{2} 点', + 'account' => '账号', + 'available_date' => '有效期', + 'created_at' => '创建时间', + 'expired_at' => '到期时间', + 'updated_at' => '更新时间', + 'latest_at' => '最近时间', + 'back' => '返 回', + 'cancel' => '取 消', + 'close' => '关 闭', + 'close_item' => '关闭:attribute', + 'confirm' => '确 认', + 'continues' => '继 续', + 'open' => '打 开', + 'send' => '发 送', + 'view' => '查 看', + 'reset' => '重 置', + 'copy' => [ 'attribute' => '复 制', - 'success' => '复制成功', - 'failed' => '复制失败,请手动复制', + 'success' => '复制成功', + 'failed' => '复制失败,请手动复制', ], - 'add' => '添 加', - 'free' => '免费', - 'replace' => '更换', - 'submit' => '提 交', - 'submit_item' => '提交:attribute', - 'generate' => '生 成', - 'generate_item' => '生成:attribute', - 'to_safari' => [0 => '点击右上角', 1 => ',选择在', 2 => 'Safari 中打开', 3 => '就可以正常访问本站了哟!'], - 'update_browser' => [0 => '您正在使用', 1 => '过时', 2 => '的浏览器。 请', 3 => '升级您的浏览器', 4 => '来获得最佳的浏览体验'], - 'apply' => '应 用', - 'avatar' => '头像', - 'customize' => '自定义', - 'all' => '全部', - 'default' => '默认', - 'download' => '下 载', - 'goto' => '前 往', - 'warning' => '警 告', - 'success' => '成功', - 'success_item' => ':attribute成功', - 'failed' => '失败', - 'failed_item' => ':attribute失败', - 'update' => '更 新', - 'update_action' => '更新:action', - 'none' => '无', - 'new' => '新', - 'sorry' => '抱歉', - 'applied' => ':attribute生效', - 'active_item' => '激活:attribute', - 'error' => '错误', - 'toggle' => '切 换', - 'toggle_action' => '切换:action', - 'request_url' => '请求地址', - 'function' => [ + 'add' => '添 加', + 'free' => '免费', + 'replace' => '更换', + 'submit' => '提 交', + 'submit_item' => '提交:attribute', + 'generate' => '生 成', + 'generate_item' => '生成:attribute', + 'to_safari' => [0 => '点击右上角', 1 => ',选择在', 2 => 'Safari 中打开', 3 => '就可以正常访问本站了哟!'], + 'update_browser' => [0 => '您正在使用', 1 => '过时', 2 => '的浏览器。 请', 3 => '升级您的浏览器', 4 => '来获得最佳的浏览体验'], + 'apply' => '应 用', + 'avatar' => '头像', + 'customize' => '自定义', + 'all' => '全部', + 'default' => '默认', + 'download' => '下 载', + 'goto' => '前 往', + 'warning' => '警 告', + 'success' => '成功', + 'success_item' => ':attribute成功', + 'failed' => '失败', + 'failed_item' => ':attribute失败', + 'update' => '更 新', + 'update_action' => '更新:action', + 'none' => '无', + 'new' => '新', + 'sorry' => '抱歉', + 'applied' => ':attribute生效', + 'active_item' => '激活:attribute', + 'error' => '错误', + 'toggle' => '切 换', + 'toggle_action' => '切换:action', + 'request_url' => '请求地址', + 'function' => [ 'navigation' => '导航', - 'menubar' => '菜单栏', + 'menubar' => '菜单栏', 'fullscreen' => '全屏', ], - 'days' => [ + 'days' => [ 'attribute' => '{1} 天|{2} 日', - 'sun' => '周日', - 'mon' => '周一', - 'tue' => '周二', - 'wed' => '周三', - 'thu' => '周四', - 'fri' => '周五', - 'sat' => '周六', - 'weekend' => '周末', - 'work' => '工作日', - 'next' => '次日', + 'sun' => '周日', + 'mon' => '周一', + 'tue' => '周二', + 'wed' => '周三', + 'thu' => '周四', + 'fri' => '周五', + 'sat' => '周六', + 'weekend' => '周末', + 'work' => '工作日', + 'next' => '次日', ], - 'qrcode' => ':attribute二维码', - 'deleted' => '已删除', - 'deleted_item' => ':attribute已删除', - 'print' => '打印', - 'unlimited' => '无限制', - 'payment' => [ + 'qrcode' => ':attribute二维码', + 'deleted' => '已删除', + 'deleted_item' => ':attribute已删除', + 'print' => '打印', + 'unlimited' => '无限制', + 'payment' => [ 'credit' => '余额', 'alipay' => '支付宝', - 'qq' => 'QQ钱包', + 'qq' => 'QQ钱包', 'wechat' => '微信支付', 'crypto' => '虚拟货币', 'manual' => '人工支付', @@ -89,59 +89,59 @@ return [ 'wait' => '待支付', ], ], - 'order' => [ + 'order' => [ 'status' => [ - 'cancel' => '取 消', + 'cancel' => '取 消', 'complete' => '完 成', - 'prepaid' => '预支付', - 'ongoing' => '使用中', - 'review' => '待确认', + 'prepaid' => '预支付', + 'ongoing' => '使用中', + 'review' => '待确认', ], ], - 'recommend' => '推荐', - 'advance' => '进阶', - 'action' => '操作', - 'search' => '搜 索', - 'edit' => '编 辑', - 'delete' => '删 除', - 'status' => [ - 'attribute' => '状态', - 'inactive' => '未激活', - 'disabled' => '停 用', - 'banned' => '禁 用', - 'normal' => '正 常', - 'enabled' => '启 用', - 'expire' => '过 期', - 'limited' => '限 制', - 'run_out' => '流量耗尽', - 'unused' => '未使用', - 'used' => '已使用', - 'closed' => '关 闭', - 'applying' => '申请中', - 'withdrawn' => '已提现', - 'unwithdrawn' => '未提现', - 'reply' => '已回复', - 'pending' => '待处理', - 'unknown' => '未 知', - 'available' => '生效中', - 'reject' => '否 決', - 'rejected' => '已驳回', - 'review' => '待审核', - 'reviewed' => '审核通过待打款', - 'paid' => '已打款', - 'payment_pending' => '待打款', - 'pass' => '通 过', - 'send_to_credit' => '打款至余额', + 'recommend' => '推荐', + 'advance' => '进阶', + 'action' => '操作', + 'search' => '搜 索', + 'edit' => '编 辑', + 'delete' => '删 除', + 'status' => [ + 'attribute' => '状态', + 'inactive' => '未激活', + 'disabled' => '停 用', + 'banned' => '禁 用', + 'normal' => '正 常', + 'enabled' => '启 用', + 'expire' => '过 期', + 'limited' => '限 制', + 'run_out' => '流量耗尽', + 'unused' => '未使用', + 'used' => '已使用', + 'closed' => '关 闭', + 'applying' => '申请中', + 'withdrawn' => '已提现', + 'unwithdrawn' => '未提现', + 'reply' => '已回复', + 'pending' => '待处理', + 'unknown' => '未 知', + 'available' => '生效中', + 'reject' => '否 決', + 'rejected' => '已驳回', + 'review' => '待审核', + 'reviewed' => '审核通过待打款', + 'paid' => '已打款', + 'payment_pending' => '待打款', + 'pass' => '通 过', + 'send_to_credit' => '打款至余额', 'waiting_tobe_send' => '等待投递', ], - 'stay_unchanged' => '留空为不变', + 'stay_unchanged' => '留空为不变', 'random_generate' => '留空则随机生成', - 'request_failed' => '请求错误,请重试', - 'convert' => '转 换', - 'import' => '导 入', - 'or' => '或', - 'more' => '更多', - 'to' => '至', - 'to_be_send' => '待发送', - 'developing' => '开发中!敬请期待', + 'request_failed' => '请求错误,请重试', + 'convert' => '转 换', + 'import' => '导 入', + 'or' => '或', + 'more' => '更多', + 'to' => '至', + 'to_be_send' => '待发送', + 'developing' => '开发中!敬请期待', ]; diff --git a/resources/lang/zh_CN/errors.php b/resources/lang/zh_CN/errors.php index 88b354d0..8d656754 100644 --- a/resources/lang/zh_CN/errors.php +++ b/resources/lang/zh_CN/errors.php @@ -1,32 +1,32 @@ [ - 'access' => '检测到未知IP或使用代理访问,禁止访问', - 'bots' => '检测到机器人访问,禁止访问', - 'china' => '检测到中国IP或使用代理访问,禁止访问', + 'forbidden' => [ + 'access' => '检测到未知IP或使用代理访问,禁止访问', + 'bots' => '检测到机器人访问,禁止访问', + 'china' => '检测到中国IP或使用代理访问,禁止访问', 'oversea' => '检测到海外IP或代理访问,禁止访问', ], - 'log' => '日志', - 'refresh' => '刷 新', + 'log' => '日志', + 'refresh' => '刷 新', 'refresh_page' => '请刷新页面后,再访问', - 'report' => '错❌误携带了报告:', - 'safe_enter' => '安全入口访问', - 'safe_code' => '请输入安全码', - 'title' => '⚠️错误触发', + 'report' => '错❌误携带了报告:', + 'safe_enter' => '安全入口访问', + 'safe_code' => '请输入安全码', + 'title' => '⚠️错误触发', 'unsafe_enter' => '非安全入口访问', - 'visit' => '请访问', - 'whoops' => '哎呦!', - 'get_ip' => '获取IP信息异常', - 'subscribe' => [ - 'unknown' => '使用链接错误!请重新获取!', - 'sub_baned' => '链接已被封禁,请前往官网查询原因', - 'user' => '错误链接,账号不存在!请重新获取链接', + 'visit' => '请访问', + 'whoops' => '哎呦!', + 'get_ip' => '获取IP信息异常', + 'subscribe' => [ + 'unknown' => '使用链接错误!请重新获取!', + 'sub_baned' => '链接已被封禁,请前往官网查询原因', + 'user' => '错误链接,账号不存在!请重新获取链接', 'user_disable' => '账号被禁用!', - 'baned_until' => '账号封禁至:time,请解封后再更新!', - 'out' => '流量耗尽!请重新购买或重置流量!', - 'expired' => '账号过期!请续费!', - 'question' => '账号存在问题,请前往官网查询!', - 'none' => '无可用节点', + 'baned_until' => '账号封禁至:time,请解封后再更新!', + 'out' => '流量耗尽!请重新购买或重置流量!', + 'expired' => '账号过期!请续费!', + 'question' => '账号存在问题,请前往官网查询!', + 'none' => '无可用节点', ], ]; diff --git a/resources/lang/zh_CN/http-statuses.php b/resources/lang/zh_CN/http-statuses.php index bdb902f7..f9dd4a67 100644 --- a/resources/lang/zh_CN/http-statuses.php +++ b/resources/lang/zh_CN/http-statuses.php @@ -1,76 +1,76 @@ '未知错误', - '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' => '失败的依赖', - '426' => '需要升级', - '428' => '前提要求', - '429' => '请求太多', - '431' => '请求标头字段太大', - '449' => '重试', - '451' => '法律原因不可用', - '500' => '内部服务器错误', - '501' => '未实施', - '502' => '糟糕的网关', - '503' => '维护模式', - '504' => '网关超时', - '505' => '不支持HTTP版本', - '506' => '变种也谈判', - '507' => '存储空间不足', - '508' => '检测到环路', - '509' => '超出带宽限制', - '510' => '未延期', - '511' => '需要网络验证', - '520' => '未知错误', - '521' => 'Web服务器已关闭', - '522' => '连接超时', - '523' => '原点无法到达', - '524' => '发生超时', - '525' => 'SSL握手失败', - '526' => '无效的SSL证书', + '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' => '失败的依赖', + '426' => '需要升级', + '428' => '前提要求', + '429' => '请求太多', + '431' => '请求标头字段太大', + '449' => '重试', + '451' => '法律原因不可用', + '500' => '内部服务器错误', + '501' => '未实施', + '502' => '糟糕的网关', + '503' => '维护模式', + '504' => '网关超时', + '505' => '不支持HTTP版本', + '506' => '变种也谈判', + '507' => '存储空间不足', + '508' => '检测到环路', + '509' => '超出带宽限制', + '510' => '未延期', + '511' => '需要网络验证', + '520' => '未知错误', + '521' => 'Web服务器已关闭', + '522' => '连接超时', + '523' => '原点无法到达', + '524' => '发生超时', + '525' => 'SSL握手失败', + '526' => '无效的SSL证书', 'unknownError' => '未知错误', ]; diff --git a/resources/lang/zh_CN/model.php b/resources/lang/zh_CN/model.php index f46472d3..f89d8696 100644 --- a/resources/lang/zh_CN/model.php +++ b/resources/lang/zh_CN/model.php @@ -1,230 +1,230 @@ [ - 'id' => '用户ID', - 'attribute' => '用户', - 'nickname' => '昵称', - 'username' => '用户名', - 'password' => '密码', - 'credit' => '余额', - 'invite_num' => '可用邀请码', - 'reset_date' => '重置日', - 'port' => '端口', - 'traffic_used' => '流量使用', - 'service' => '代理', - 'group' => '分组', + 'user' => [ + 'id' => '用户ID', + 'attribute' => '用户', + 'nickname' => '昵称', + 'username' => '用户名', + 'password' => '密码', + 'credit' => '余额', + 'invite_num' => '可用邀请码', + 'reset_date' => '重置日', + 'port' => '端口', + 'traffic_used' => '流量使用', + 'service' => '代理', + 'group' => '分组', 'account_status' => '账号状态', - 'proxy_status' => '代理状态', - 'expired_date' => '过期日', - 'role' => '角色权限', - 'wechat' => '微信', - 'qq' => 'QQ', - 'remark' => '备注', - 'uuid' => 'VMess UUID', - 'proxy_passwd' => '密码', - 'proxy_method' => '加密方式', + 'proxy_status' => '代理状态', + 'expired_date' => '过期日', + 'role' => '角色权限', + 'wechat' => '微信', + 'qq' => 'QQ', + 'remark' => '备注', + 'uuid' => 'VMess UUID', + 'proxy_passwd' => '密码', + 'proxy_method' => '加密方式', 'usable_traffic' => '可用流量', 'proxy_protocol' => '协议', - 'proxy_obfs' => '混淆', - 'speed_limit' => '用户限速', - 'inviter' => '邀请人', - 'created_date' => '注册时间', + 'proxy_obfs' => '混淆', + 'speed_limit' => '用户限速', + 'inviter' => '邀请人', + 'created_date' => '注册时间', ], - 'common' => [ - 'extend' => '扩展', - 'sort' => '排序', + 'common' => [ + 'extend' => '扩展', + 'sort' => '排序', 'description' => '描述', - 'type' => '类型', - 'level' => '等级', + 'type' => '类型', + 'level' => '等级', ], - 'country' => [ + 'country' => [ 'code' => 'ISO国家代码', 'icon' => '图 标', 'name' => '国家/地区名称', ], - 'subscribe' => [ - 'code' => '订阅码', - 'req_times' => '请求次数', + 'subscribe' => [ + 'code' => '订阅码', + 'req_times' => '请求次数', 'updated_at' => '最后请求时间', - 'ban_time' => '封禁时间', - 'ban_desc' => '封禁理由', - 'req_ip' => '请求IP', + 'ban_time' => '封禁时间', + 'ban_desc' => '封禁理由', + 'req_ip' => '请求IP', 'req_header' => '访问', ], - 'oauth' => [ - 'type' => '渠道', + 'oauth' => [ + 'type' => '渠道', 'identifier' => '唯一标识', ], - 'user_group' => [ + 'user_group' => [ 'attribute' => '用戶分组', - 'name' => '分组名称', - 'nodes' => '选择节点', + 'name' => '分组名称', + 'nodes' => '选择节点', ], - 'node' => [ - 'attribute' => '节点', - 'id' => '节点ID', - 'name' => '名称', - 'domain' => '域名', - 'static' => '存活', - 'online_user' => '在线', - 'data_consume' => '产生流量', - 'data_rate' => '流量比例', - 'ddns' => 'DDNS', - 'ipv4' => 'IPv4地址', - 'ipv6' => 'IPv6地址', - 'push_port' => '消息推送端口', - 'rule_group' => '审计分组', - 'traffic_limit' => '节点限速', - 'client_limit' => '设备数限制', - 'label' => '标签', - 'country' => '国家/地区', - 'udp' => 'UDP', - 'display' => '显示 与 订阅', - 'detection' => '节点阻断检测', - 'method' => '加密方式', - 'protocol' => '协议', - 'protocol_param' => '协议参数', - 'obfs' => '混淆', - 'obfs_param' => '混淆参数', - 'single' => '单端口', - 'transfer' => '中 转', - 'service_port' => '服务端口', - 'single_passwd' => '[单] 密码', - 'v2_alter_id' => '额外ID', - 'v2_net' => '传输方式', - 'v2_cover' => '伪装类型', - 'v2_host' => '伪装域名', - 'v2_path' => '路径 | 密钥', - 'v2_sni' => 'SNI', - 'v2_tls' => '连接TLS', + 'node' => [ + 'attribute' => '节点', + 'id' => '节点ID', + 'name' => '名称', + 'domain' => '域名', + 'static' => '存活', + 'online_user' => '在线', + 'data_consume' => '产生流量', + 'data_rate' => '流量比例', + 'ddns' => 'DDNS', + 'ipv4' => 'IPv4地址', + 'ipv6' => 'IPv6地址', + 'push_port' => '消息推送端口', + 'rule_group' => '审计分组', + 'traffic_limit' => '节点限速', + 'client_limit' => '设备数限制', + 'label' => '标签', + 'country' => '国家/地区', + 'udp' => 'UDP', + 'display' => '显示 与 订阅', + 'detection' => '节点阻断检测', + 'method' => '加密方式', + 'protocol' => '协议', + 'protocol_param' => '协议参数', + 'obfs' => '混淆', + 'obfs_param' => '混淆参数', + 'single' => '单端口', + 'transfer' => '中 转', + 'service_port' => '服务端口', + 'single_passwd' => '[单] 密码', + 'v2_alter_id' => '额外ID', + 'v2_net' => '传输方式', + 'v2_cover' => '伪装类型', + 'v2_host' => '伪装域名', + 'v2_path' => '路径 | 密钥', + 'v2_sni' => 'SNI', + 'v2_tls' => '连接TLS', 'v2_tls_provider' => 'TLS配置', - 'relay_port' => '中转端口', + 'relay_port' => '中转端口', ], - 'node_auth' => [ + 'node_auth' => [ 'attribute' => '节点授权', - 'key' => '通信密钥节点用', - 'secret' => '反向通信密钥', + 'key' => '通信密钥节点用', + 'secret' => '反向通信密钥', ], - 'node_cert' => [ - 'attribute' => '域名证书', - 'domain' => '域名', - 'key' => 'KEY', - 'pem' => 'PEM', - 'issuer' => '签发机构', - 'signed_date' => '签发日期', + 'node_cert' => [ + 'attribute' => '域名证书', + 'domain' => '域名', + 'key' => 'KEY', + 'pem' => 'PEM', + 'issuer' => '签发机构', + 'signed_date' => '签发日期', 'expired_date' => '到期时间', ], - 'order' => [ - 'attribute' => '订单', - 'id' => '订单号', + 'order' => [ + 'attribute' => '订单', + 'id' => '订单号', 'original_price' => '原价', - 'price' => '实价', - 'pay_way' => '支付方式', - 'status' => '订单状态', + 'price' => '实价', + 'pay_way' => '支付方式', + 'status' => '订单状态', ], - 'goods' => [ - 'attribute' => '商品', - 'name' => '名称', - 'price' => '售价', - 'category' => '分类', - 'renew' => '流量重置价格', - 'user_limit' => '用户限速', - 'period' => '重置周期', - 'traffic' => '流量额度', - 'invite_num' => '赠送邀请码数量', - 'limit_num' => '限购数量', + 'goods' => [ + 'attribute' => '商品', + 'name' => '名称', + 'price' => '售价', + 'category' => '分类', + 'renew' => '流量重置价格', + 'user_limit' => '用户限速', + 'period' => '重置周期', + 'traffic' => '流量额度', + 'invite_num' => '赠送邀请码数量', + 'limit_num' => '限购数量', 'available_date' => '有效期', - 'hot' => '热销', - 'color' => '颜色', - 'logo' => '商品图片', - 'info' => '自定义列表', + 'hot' => '热销', + 'color' => '颜色', + 'logo' => '商品图片', + 'info' => '自定义列表', ], - 'rule' => [ + 'rule' => [ 'attribute' => '规则', - 'name' => '描述', - 'pattern' => '值', + 'name' => '描述', + 'pattern' => '值', ], - 'rule_group' => [ + 'rule_group' => [ 'attribute' => '规则分组', - 'name' => '分组名称', - 'type' => '审计模式', - 'rules' => '选择规则', + 'name' => '分组名称', + 'type' => '审计模式', + 'rules' => '选择规则', ], - 'role' => [ - 'attribute' => '角色', - 'name' => '名称', + 'role' => [ + 'attribute' => '角色', + 'name' => '名称', 'permissions' => '权限', ], - 'permission' => [ - 'attribute' => '权限行为', + 'permission' => [ + 'attribute' => '权限行为', 'description' => '行为描述', - 'name' => '路由名称', + 'name' => '路由名称', ], - 'article' => [ - 'attribute' => '文章', - 'category' => '类别', - 'language' => '语言', - 'logo' => '头图', + 'article' => [ + 'attribute' => '文章', + 'category' => '类别', + 'language' => '语言', + 'logo' => '头图', 'created_at' => '发布日期', 'updated_at' => '最后更新', ], - 'coupon' => [ - 'attribute' => '卡券', - 'name' => '卡券名称', - 'sn' => '使用券码', - 'logo' => '卡券图片', - 'value' => '优惠额度', - 'priority' => '权重', - 'usable_times' => '使用次数', - 'minimum' => '满减条件', - 'used' => '个人限用', - 'levels' => '等级限定', - 'groups' => '分组限定', - 'users_whitelist' => '专属用户', - 'users_blacklist' => '禁用用户', + 'coupon' => [ + 'attribute' => '卡券', + 'name' => '卡券名称', + 'sn' => '使用券码', + 'logo' => '卡券图片', + 'value' => '优惠额度', + 'priority' => '权重', + 'usable_times' => '使用次数', + 'minimum' => '满减条件', + 'used' => '个人限用', + 'levels' => '等级限定', + 'groups' => '分组限定', + 'users_whitelist' => '专属用户', + 'users_blacklist' => '禁用用户', 'services_whitelist' => '许可商品', 'services_blacklist' => '禁用商品', - 'newbie' => '新人专属', - 'num' => '数量', + 'newbie' => '新人专属', + 'num' => '数量', ], - 'aff' => [ - 'invitee' => '消费者', - 'amount' => '消费金额', + 'aff' => [ + 'invitee' => '消费者', + 'amount' => '消费金额', 'commission' => '返利金额', 'updated_at' => '处理时间', 'created_at' => '下单时间', ], - 'referral' => [ + 'referral' => [ 'created_at' => '申请时间', - 'user' => '申请账号', - 'amount' => '申请提现金额', - 'id' => '申请单ID', + 'user' => '申请账号', + 'amount' => '申请提现金额', + 'id' => '申请单ID', ], - 'notification' => [ - 'address' => '收信地址', + 'notification' => [ + 'address' => '收信地址', 'created_at' => '投递时间', - 'status' => '投递状态', + 'status' => '投递状态', ], - 'ip' => [ + 'ip' => [ 'network_type' => '通讯类型', - 'info' => '归属地', + 'info' => '归属地', ], - 'user_traffic' => [ - 'upload' => '上传流量', + 'user_traffic' => [ + 'upload' => '上传流量', 'download' => '下载流量', - 'total' => '总流量', + 'total' => '总流量', 'log_time' => '记录时间', ], 'user_data_modify' => [ - 'before' => '变动前流量', - 'after' => '变动后流量', + 'before' => '变动前流量', + 'after' => '变动后流量', 'created_at' => '发生时间', ], - 'user_credit' => [ - 'before' => '操作前余额', - 'after' => '操作后金额', - 'amount' => '发生金额', + 'user_credit' => [ + 'before' => '操作前余额', + 'after' => '操作后金额', + 'amount' => '发生金额', 'created_at' => '发生时间', ], ]; diff --git a/resources/lang/zh_CN/notification.php b/resources/lang/zh_CN/notification.php index 97073379..77a4126b 100644 --- a/resources/lang/zh_CN/notification.php +++ b/resources/lang/zh_CN/notification.php @@ -1,35 +1,35 @@ '通知', - 'new' => ':num条新消息', - 'empty' => '目前未收到新消息', - 'payment_received' => '订单支付成功,金额::amount,查看详情', - 'account_expired' => '账号过期提醒', + 'attribute' => '通知', + 'new' => ':num条新消息', + 'empty' => '目前未收到新消息', + 'payment_received' => '订单支付成功,金额::amount,查看详情', + 'account_expired' => '账号过期提醒', 'account_expired_content' => '您的账号将在【:days】天后过期,为了确保您可以继续正常使用我们的服务,请及时续费。', - 'account_expired_blade' => '账号将于【:days天】后过期,请及时续费', - 'active_email' => '请在30分钟内完成操作', - 'close_ticket' => '工单【:id】:title关闭', - 'view_web' => '访问官网', - 'view_ticket' => '访问工单', - 'new_ticket' => '收到新工单::title', - 'reply_ticket' => '工单回复::title', - 'ticket_content' => '工单内容:', - 'node_block' => '节点阻断警告', - 'node_offline' => '节点离线警告', - 'node_offline_content' => '以下节点存在异常:心跳异常,可能离线了:', - 'block_report' => '阻断日志:', - 'traffic_warning' => '流量提醒', - 'traffic_remain' => '流量已使用::percent%,请保持关注。', - 'traffic_tips' => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量', - 'verification_account' => '账号验证', - 'verification' => '您的验证码:', - 'verification_limit' => '请在:minutes分钟内完成验证操作', - 'data_anomaly' => '流量异常用户提醒', - 'data_anomaly_content' => '用户:id:最近1小时 [上行流量::upload | 下行流量::download | 共计::total]', - 'node' => [ - 'upload' => '上传', + 'account_expired_blade' => '账号将于【:days天】后过期,请及时续费', + 'active_email' => '请在30分钟内完成操作', + 'close_ticket' => '工单【:id】:title关闭', + 'view_web' => '访问官网', + 'view_ticket' => '访问工单', + 'new_ticket' => '收到新工单::title', + 'reply_ticket' => '工单回复::title', + 'ticket_content' => '工单内容:', + 'node_block' => '节点阻断警告', + 'node_offline' => '节点离线警告', + 'node_offline_content' => '以下节点存在异常:心跳异常,可能离线了:', + 'block_report' => '阻断日志:', + 'traffic_warning' => '流量提醒', + 'traffic_remain' => '流量已使用::percent%,请保持关注。', + 'traffic_tips' => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量', + 'verification_account' => '账号验证', + 'verification' => '您的验证码:', + 'verification_limit' => '请在:minutes分钟内完成验证操作', + 'data_anomaly' => '流量异常用户提醒', + 'data_anomaly_content' => '用户:id:最近1小时 [上行流量::upload | 下行流量::download | 共计::total]', + 'node' => [ + 'upload' => '上传', 'download' => '下载', - 'total' => '总计', + 'total' => '总计', ], ]; diff --git a/resources/lang/zh_CN/pagination.php b/resources/lang/zh_CN/pagination.php index e13e0403..b6aeca1b 100644 --- a/resources/lang/zh_CN/pagination.php +++ b/resources/lang/zh_CN/pagination.php @@ -1,6 +1,6 @@ '下一页 »', + 'next' => '下一页 »', 'previous' => '« 上一页', ]; diff --git a/resources/lang/zh_CN/user.php b/resources/lang/zh_CN/user.php index 6a6029a2..e9632dac 100644 --- a/resources/lang/zh_CN/user.php +++ b/resources/lang/zh_CN/user.php @@ -1,235 +1,235 @@ [ - 'credit' => '账户余额', - 'status' => '账号状态', - 'level' => '账号等级', - 'group' => '所属分组', - 'speed_limit' => '限速', - 'remain' => '剩余流量', - 'time' => '套餐时长', - 'last_login' => '最近登录', - 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', + 'account' => [ + 'credit' => '账户余额', + 'status' => '账号状态', + 'level' => '账号等级', + 'group' => '所属分组', + 'speed_limit' => '限速', + 'remain' => '剩余流量', + 'time' => '套餐时长', + 'last_login' => '最近登录', + 'reset' => '{0} 还有 :days 重置流量|[1,*] 还有 :days 天重置流量', 'connect_password' => '连接密码', - 'reason' => [ - 'normal' => '账号一切正常', - 'expired' => '您的账号套餐已过期', - 'overused' => '本时段使用流量超过 :data GB触发系统限制
          :min 后解除限制', + 'reason' => [ + 'normal' => '账号一切正常', + 'expired' => '您的账号套餐已过期', + 'overused' => '本时段使用流量超过 :data GB触发系统限制
          :min 后解除限制', 'traffic_exhausted' => '您的账号[流量]消耗殆尽', - 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', + 'unknown' => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理', ], ], - 'home' => [ - 'attendance' => [ + 'home' => [ + 'attendance' => [ 'attribute' => '签 到', - 'disable' => '系统未开启签到功能', - 'done' => '已经签到过了,明天再来吧!', - 'success' => '您获得了 :data 流量', - 'failed' => '系统❌异常', + 'disable' => '系统未开启签到功能', + 'done' => '已经签到过了,明天再来吧!', + 'success' => '您获得了 :data 流量', + 'failed' => '系统❌异常', ], - 'traffic_logs' => '流量记录', - 'announcement' => '公告', - 'wechat_push' => '微信公告推送', - 'chat_group' => '聊天群', + 'traffic_logs' => '流量记录', + 'announcement' => '公告', + 'wechat_push' => '微信公告推送', + 'chat_group' => '聊天群', 'empty_announcement' => '暂无公告', ], - 'purchase_to_unlock' => '购买服务后解锁', - 'purchase_required' => '本功能对非付费用户禁用!请', - 'attribute' => [ - 'node' => '线路', - 'data' => '流量', - 'ip' => 'IP地址', - 'isp' => '运营商', + 'purchase_to_unlock' => '购买服务后解锁', + 'purchase_required' => '本功能对非付费用户禁用!请', + 'attribute' => [ + 'node' => '线路', + 'data' => '流量', + 'ip' => 'IP地址', + 'isp' => '运营商', 'address' => '地区', ], - 'purchase_promotion' => '快 来 购 买 服 务 吧!', - 'menu' => [ - 'helps' => '帮 助', - 'home' => '主 页', - 'invites' => '邀 请', - 'invoices' => '账 单', - 'nodes' => '线 路', - 'referrals' => '推 广', - 'shop' => '服 务', - 'profile' => '设 置', - 'tickets' => '工 单', + 'purchase_promotion' => '快 来 购 买 服 务 吧!', + 'menu' => [ + 'helps' => '帮 助', + 'home' => '主 页', + 'invites' => '邀 请', + 'invoices' => '账 单', + 'nodes' => '线 路', + 'referrals' => '推 广', + 'shop' => '服 务', + 'profile' => '设 置', + 'tickets' => '工 单', 'admin_dashboard' => '管 理', ], - 'contact' => '联系方式', - 'oauth' => [ + 'contact' => '联系方式', + 'oauth' => [ 'bind_title' => '绑定社交账号', - 'not_bind' => '尚未绑定', - 'bind' => '绑 定', - 'rebind' => '重新绑定', - 'unbind' => '解 绑', + 'not_bind' => '尚未绑定', + 'bind' => '绑 定', + 'rebind' => '重新绑定', + 'unbind' => '解 绑', ], - 'coupon' => [ + 'coupon' => [ 'discount' => '优惠', - 'error' => [ - 'unknown' => '无效优惠券', - 'used' => '优惠券已被使用', - 'expired' => '优惠券已过期', - 'run_out' => '优惠券耗尽', + 'error' => [ + 'unknown' => '无效优惠券', + 'used' => '优惠券已被使用', + 'expired' => '优惠券已过期', + 'run_out' => '优惠券耗尽', 'inactive' => '优惠券尚未生效', - 'wait' => '活动将于:time生效,请耐心等待!', - 'unmet' => '使用条件未满足', - 'minimum' => '本券最低使用金额为 :amount', + 'wait' => '活动将于:time生效,请耐心等待!', + 'unmet' => '使用条件未满足', + 'minimum' => '本券最低使用金额为 :amount', 'overused' => '本券只能使用 :times 次', - 'users' => '账户不符合促销条件', + 'users' => '账户不符合促销条件', 'services' => '商品不符合折扣条件,请查看促销条款', ], ], - 'error_response' => '出现了错误,请稍后再试。', - 'invite' => [ - 'attribute' => '邀请码', - 'counts' => '共 :num 个邀请码', - 'tips' => '可生成 :num 枚邀请码,:days 日内有效', - 'logs' => '邀请记录', - 'promotion' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', + 'error_response' => '出现了错误,请稍后再试。', + 'invite' => [ + 'attribute' => '邀请码', + 'counts' => '共 :num 个邀请码', + 'tips' => '可生成 :num 枚邀请码,:days 日内有效', + 'logs' => '邀请记录', + 'promotion' => '通过您的邀请码注册并激活,你们双方都将获得:traffic流量奖励;当他们消费时,您将获得他们消费金额的:referral_percent%作为奖励。', 'generate_failed' => '生成失败:已无邀请码生成名额', ], - 'reset_data' => [ - 'action' => '重置流量', - 'cost' => '需要:amount', + 'reset_data' => [ + 'action' => '重置流量', + 'cost' => '需要:amount', 'cost_tips' => '本次重置流量将扣除余额 :amount!', - 'lack' => '余额不足,请充值余额', - 'logs' => '用户自行重置流量', - 'success' => '重置成功', + 'lack' => '余额不足,请充值余额', + 'logs' => '用户自行重置流量', + 'success' => '重置成功', ], - 'referral' => [ - 'link' => '推广链接', - 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', - 'logs' => '佣金记录', - 'failed' => '申请失败', + 'referral' => [ + 'link' => '推广链接', + 'total' => '合计返利 :amount( :total 次),满 :money 可以申请提现。', + 'logs' => '佣金记录', + 'failed' => '申请失败', 'success' => '申请成功', - 'msg' => [ - 'account' => '账号已过期,请先购买服务吧', - 'applied' => '已存在申请,请等待之前的申请处理完', + 'msg' => [ + 'account' => '账号已过期,请先购买服务吧', + 'applied' => '已存在申请,请等待之前的申请处理完', 'unfulfilled' => '满 :amount 才可以提现,继续努力吧', - 'wait' => '请等待管理员审核', - 'error' => '返利单建立失败,请稍后尝试或通知管理员', + 'wait' => '请等待管理员审核', + 'error' => '返利单建立失败,请稍后尝试或通知管理员', ], ], - 'inviter' => '邀请者', - 'invitee' => '受邀者', - 'registered_at' => '注册时间', - 'bought_at' => '购买日期', - 'payment_method' => '支付方式', - 'pay' => '支付', - 'input_coupon' => '请输入充值券码', - 'recharge' => '充值', - 'recharge_credit' => '余额充值', - 'recharging' => '充值中...', + 'inviter' => '邀请者', + 'invitee' => '受邀者', + 'registered_at' => '注册时间', + 'bought_at' => '购买日期', + 'payment_method' => '支付方式', + 'pay' => '支付', + 'input_coupon' => '请输入充值券码', + 'recharge' => '充值', + 'recharge_credit' => '余额充值', + 'recharging' => '充值中...', 'withdraw_commission' => '结算佣金', - 'withdraw_at' => '结算日期', - 'withdraw_logs' => '提现记录', - 'withdraw' => '提 现', - 'scan_qrcode' => '请使用客户端扫描二维码', - 'shop' => [ - 'hot' => '热 销', - 'limited' => '限 购', - 'change_amount' => '充值金额', + 'withdraw_at' => '结算日期', + 'withdraw_logs' => '提现记录', + 'withdraw' => '提 现', + 'scan_qrcode' => '请使用客户端扫描二维码', + 'shop' => [ + 'hot' => '热 销', + 'limited' => '限 购', + 'change_amount' => '充值金额', 'change_amount_help' => '请输入充值金额', - 'buy' => '购买', - 'description' => '描述', - 'service' => '服务', - 'pay_credit' => '余额支付', - 'pay_online' => '在线支付', - 'price' => '价格', - 'quantity' => '数量', - 'subtotal' => '小计', - 'total' => '合计', - 'conflict' => '套餐存在冲突', - 'conflict_tips' => '

          当前购买套餐将自动设置为 预支付套餐

          1. 预支付套餐会在生效中的套餐失效后自动开通!
          2. 您可以在支付后手动激活套餐!
          ', - 'call4help' => '请开工单通知客服', + 'buy' => '购买', + 'description' => '描述', + 'service' => '服务', + 'pay_credit' => '余额支付', + 'pay_online' => '在线支付', + 'price' => '价格', + 'quantity' => '数量', + 'subtotal' => '小计', + 'total' => '合计', + 'conflict' => '套餐存在冲突', + 'conflict_tips' => '

          当前购买套餐将自动设置为 预支付套餐

          1. 预支付套餐会在生效中的套餐失效后自动开通!
          2. 您可以在支付后手动激活套餐!
          ', + 'call4help' => '请开工单通知客服', ], - 'service' => [ - 'node_count' => ':num 条优质线路', + 'service' => [ + 'node_count' => ':num 条优质线路', 'country_count' => '覆盖 :num 个国家或地区', - 'unlimited' => '不限速', + 'unlimited' => '不限速', ], - 'payment' => [ - 'error' => '充值余额不合规', - 'creating' => '创建支付单中...', + 'payment' => [ + 'error' => '充值余额不合规', + 'creating' => '创建支付单中...', 'redirect_stripe' => '转跳至Stripe支付界面', - 'qrcode_tips' => '请使用:software扫描二维码', - 'close_tips' => '请在:minutes分钟内完成支付,否则订单将会自动关闭', - 'mobile_tips' => '手机用户:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款', + 'qrcode_tips' => '请使用:software扫描二维码', + 'close_tips' => '请在:minutes分钟内完成支付,否则订单将会自动关闭', + 'mobile_tips' => '手机用户:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款', ], - 'invoice' => [ - 'attribute' => '订单', - 'detail' => '消费记录', - 'amount' => '金额', + 'invoice' => [ + 'attribute' => '订单', + 'detail' => '消费记录', + 'amount' => '金额', 'active_prepaid_question' => '是否提前激活预支付套餐?', - 'active_prepaid_tips' => '套餐激活后:
          先前套餐将直接失效!
          过期日期将由本日重新开始计算!', + 'active_prepaid_tips' => '套餐激活后:
          先前套餐将直接失效!
          过期日期将由本日重新开始计算!', ], - 'node' => [ - 'info' => '配置信息', - 'setting' => '代理设置', + 'node' => [ + 'info' => '配置信息', + 'setting' => '代理设置', 'unstable' => '线路波动/维护中', - 'rate' => ':ratio倍流量消耗', + 'rate' => ':ratio倍流量消耗', ], - 'subscribe' => [ - 'link' => '订阅链接', - 'tips' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。', + 'subscribe' => [ + 'link' => '订阅链接', + 'tips' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。', 'exchange_warning' => '更换订阅地址将导致:\n1.旧地址立即失效\n2.连接密码被更改', - 'custom' => '自定义订阅', - 'ss_only' => '只订阅SS', - 'ssr_only' => '只订阅SSR (包含SS)', - 'v2ray_only' => '只订阅V2Ray', - 'trojan_only' => '只订阅Trojan', - 'error' => '更换订阅地址异常', - 'info' => [ - 'title' => '账号摘要 [非实时]', - 'upload' => '上载流量', + 'custom' => '自定义订阅', + 'ss_only' => '只订阅SS', + 'ssr_only' => '只订阅SSR (包含SS)', + 'v2ray_only' => '只订阅V2Ray', + 'trojan_only' => '只订阅Trojan', + 'error' => '更换订阅地址异常', + 'info' => [ + 'title' => '账号摘要 [非实时]', + 'upload' => '上载流量', 'download' => '下载流量', - 'total' => '套餐流量', + 'total' => '套餐流量', ], ], - 'ticket' => [ - 'attribute' => '工单', - 'submit_tips' => '确定提交工单?', - 'reply_confirm' => '确定回复工单?', - 'close_tips' => '您确定要关闭该工单吗?', - 'close' => '关闭工单', - 'failed_closed' => '错误:该工单已关闭', - 'reply_placeholder' => '说些什么呢?', - 'reply' => '回复', - 'close_msg' => '工单:ID:id用户已手动关闭', - 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', + 'ticket' => [ + 'attribute' => '工单', + 'submit_tips' => '确定提交工单?', + 'reply_confirm' => '确定回复工单?', + 'close_tips' => '您确定要关闭该工单吗?', + 'close' => '关闭工单', + 'failed_closed' => '错误:该工单已关闭', + 'reply_placeholder' => '说些什么呢?', + 'reply' => '回复', + 'close_msg' => '工单:ID:id用户已手动关闭', + 'title_placeholder' => '请简单表示你的问题类型,或者涉及的内容', 'content_placeholder' => '请详细的描述您遇到的问题,或者需要我们帮助的地方,以便我们快速帮助到您', - 'new' => '创建新的工单', - 'working_hour' => '客服工作时间', - 'online_hour' => '在线时间', - 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
          重复请求,将会自动延迟处理时间', - 'error' => '未知错误!请通知客服', + 'new' => '创建新的工单', + 'working_hour' => '客服工作时间', + 'online_hour' => '在线时间', + 'service_tips' => '本站有多种联系方式,请使用其中一种联系客服!
          重复请求,将会自动延迟处理时间', + 'error' => '未知错误!请通知客服', ], - 'traffic_logs' => [ + 'traffic_logs' => [ '24hours' => '今日流量使用情况', - '30days' => '本月流量使用情况', - 'tips' => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。', + '30days' => '本月流量使用情况', + 'tips' => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。', ], - 'client' => '客户端', - 'tutorials' => '教 程', - 'current_role' => '当前身份', - 'knowledge' => [ + 'client' => '客户端', + 'tutorials' => '教 程', + 'current_role' => '当前身份', + 'knowledge' => [ 'title' => '知 识 库', 'basic' => '基 础', ], - 'manual' => [ - 'red_packet' => '支付宝领红包', - 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', - 'step_1' => '须知', - 'step_1_title' => '如何正确人工支付', - 'step_2' => '支付', - 'step_2_title' => '获取支付二维码,进行支付', - 'step_3' => '完成', - 'step_3_title' => '等待支付被人工核对', - 'remark' => '备注账号', + 'manual' => [ + 'red_packet' => '支付宝领红包', + 'hint' => '扫码支付后, 请继续点击👇【下一步】,直到👇【提 交】才算正式支付完成!!!', + 'step_1' => '须知', + 'step_1_title' => '如何正确人工支付', + 'step_2' => '支付', + 'step_2_title' => '获取支付二维码,进行支付', + 'step_3' => '完成', + 'step_3_title' => '等待支付被人工核对', + 'remark' => '备注账号', 'remark_content' => '填入登录使用的账号,在人工核对中可以对号审核!', - 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', - 'pre' => '上一步', - 'next' => '下一步', + 'payment_hint' => '支付时,请充值对应金额(多不退,少要补)', + 'pre' => '上一步', + 'next' => '下一步', ], ]; diff --git a/resources/lang/zh_CN/validation.php b/resources/lang/zh_CN/validation.php index 04ca7ab7..6bf4f689 100644 --- a/resources/lang/zh_CN/validation.php +++ b/resources/lang/zh_CN/validation.php @@ -1,196 +1,196 @@ '您必须接受 :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 只能由字母和数字组成。', - 'array' => ':attribute 必须是一个数组。', - 'before' => ':attribute 必须要早于 :date。', - 'before_or_equal' => ':attribute 必须要等于 :date 或更早。', - 'between' => [ - 'array' => ':attribute 必须只有 :min - :max 个单元。', - 'file' => ':attribute 必须介于 :min - :max KB 之间。', + '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 只能由字母和数字组成。', + 'array' => ':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 个字符之间。', + 'string' => ':attribute 必须介于 :min - :max 个字符之间。', ], - 'boolean' => ':attribute 必须为布尔值。', - 'confirmed' => ':attribute 两次输入不一致。', - 'current_password' => '密码错误。', - 'date' => ':attribute 不是一个有效的日期。', - 'date_equals' => ':attribute 必须要等于 :date。', - 'date_format' => ':attribute 的格式必须为 :format。', - 'declined' => ':attribute 必须是拒绝的。', - 'declined_if' => '当 :other 为 :value 时字段 :attribute 必须是拒绝的。', - 'different' => ':attribute 和 :other 必须不同。', - 'digits' => ':attribute 必须是 :digits 位数字。', - 'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。', - 'dimensions' => ':attribute 图片尺寸不正确。', - 'distinct' => ':attribute 已经存在。', - 'email' => ':attribute 不是一个合法的邮箱。', - 'ends_with' => ':attribute 必须以 :values 为结尾。', - 'enum' => ':attribute 值不正确。', - 'exists' => ':attribute 不存在。', - 'file' => ':attribute 必须是文件。', - 'filled' => ':attribute 不能为空。', - 'gt' => [ - 'array' => ':attribute 必须多于 :value 个元素。', - 'file' => ':attribute 必须大于 :value KB。', + 'boolean' => ':attribute 必须为布尔值。', + 'confirmed' => ':attribute 两次输入不一致。', + 'current_password' => '密码错误。', + 'date' => ':attribute 不是一个有效的日期。', + 'date_equals' => ':attribute 必须要等于 :date。', + 'date_format' => ':attribute 的格式必须为 :format。', + 'declined' => ':attribute 必须是拒绝的。', + 'declined_if' => '当 :other 为 :value 时字段 :attribute 必须是拒绝的。', + 'different' => ':attribute 和 :other 必须不同。', + 'digits' => ':attribute 必须是 :digits 位数字。', + 'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。', + 'dimensions' => ':attribute 图片尺寸不正确。', + 'distinct' => ':attribute 已经存在。', + 'email' => ':attribute 不是一个合法的邮箱。', + 'ends_with' => ':attribute 必须以 :values 为结尾。', + 'enum' => ':attribute 值不正确。', + 'exists' => ':attribute 不存在。', + 'file' => ':attribute 必须是文件。', + 'filled' => ':attribute 不能为空。', + 'gt' => [ + 'array' => ':attribute 必须多于 :value 个元素。', + 'file' => ':attribute 必须大于 :value KB。', 'numeric' => ':attribute 必须大于 :value。', - 'string' => ':attribute 必须多于 :value 个字符。', + 'string' => ':attribute 必须多于 :value 个字符。', ], - 'gte' => [ - 'array' => ':attribute 必须多于或等于 :value 个元素。', - 'file' => ':attribute 必须大于或等于 :value KB。', + 'gte' => [ + 'array' => ':attribute 必须多于或等于 :value 个元素。', + 'file' => ':attribute 必须大于或等于 :value KB。', 'numeric' => ':attribute 必须大于或等于 :value。', - 'string' => ':attribute 必须多于或等于 :value 个字符。', + 'string' => ':attribute 必须多于或等于 :value 个字符。', ], - 'image' => ':attribute 必须是图片。', - 'in' => '已选的属性 :attribute 无效。', - 'in_array' => ':attribute 必须在 :other 中。', - 'integer' => ':attribute 必须是整数。', - 'ip' => ':attribute 必须是有效的 IP 地址。', - 'ipv4' => ':attribute 必须是有效的 IPv4 地址。', - 'ipv6' => ':attribute 必须是有效的 IPv6 地址。', - 'json' => ':attribute 必须是正确的 JSON 格式。', - 'lt' => [ - 'array' => ':attribute 必须少于 :value 个元素。', - 'file' => ':attribute 必须小于 :value KB。', + 'image' => ':attribute 必须是图片。', + 'in' => '已选的属性 :attribute 无效。', + 'in_array' => ':attribute 必须在 :other 中。', + 'integer' => ':attribute 必须是整数。', + 'ip' => ':attribute 必须是有效的 IP 地址。', + 'ipv4' => ':attribute 必须是有效的 IPv4 地址。', + 'ipv6' => ':attribute 必须是有效的 IPv6 地址。', + 'json' => ':attribute 必须是正确的 JSON 格式。', + 'lt' => [ + 'array' => ':attribute 必须少于 :value 个元素。', + 'file' => ':attribute 必须小于 :value KB。', 'numeric' => ':attribute 必须小于 :value。', - 'string' => ':attribute 必须少于 :value 个字符。', + 'string' => ':attribute 必须少于 :value 个字符。', ], - 'lte' => [ - 'array' => ':attribute 必须少于或等于 :value 个元素。', - 'file' => ':attribute 必须小于或等于 :value KB。', + 'lte' => [ + 'array' => ':attribute 必须少于或等于 :value 个元素。', + 'file' => ':attribute 必须小于或等于 :value KB。', 'numeric' => ':attribute 必须小于或等于 :value。', - 'string' => ':attribute 必须少于或等于 :value 个字符。', + 'string' => ':attribute 必须少于或等于 :value 个字符。', ], - 'mac_address' => ':attribute 必须是一个有效的 MAC 地址。', - 'max' => [ - 'array' => ':attribute 最多只有 :max 个单元。', - 'file' => ':attribute 不能大于 :max KB。', + 'mac_address' => ':attribute 必须是一个有效的 MAC 地址。', + 'max' => [ + 'array' => ':attribute 最多只有 :max 个单元。', + 'file' => ':attribute 不能大于 :max KB。', 'numeric' => ':attribute 不能大于 :max。', - 'string' => ':attribute 不能大于 :max 个字符。', + 'string' => ':attribute 不能大于 :max 个字符。', ], - 'mimes' => ':attribute 必须是一个 :values 类型的文件。', - 'mimetypes' => ':attribute 必须是一个 :values 类型的文件。', - 'min' => [ - 'array' => ':attribute 至少有 :min 个单元。', - 'file' => ':attribute 大小不能小于 :min KB。', + 'mimes' => ':attribute 必须是一个 :values 类型的文件。', + 'mimetypes' => ':attribute 必须是一个 :values 类型的文件。', + 'min' => [ + 'array' => ':attribute 至少有 :min 个单元。', + 'file' => ':attribute 大小不能小于 :min KB。', 'numeric' => ':attribute 必须大于等于 :min。', - 'string' => ':attribute 至少为 :min 个字符。', + 'string' => ':attribute 至少为 :min 个字符。', ], - 'multiple_of' => ':attribute 必须是 :value 中的多个值。', - 'not_in' => '已选的属性 :attribute 非法。', - 'not_regex' => ':attribute 的格式错误。', - 'numeric' => ':attribute 必须是一个数字。', - 'password' => '密码错误', - 'present' => ':attribute 必须存在。', - 'prohibited' => ':attribute 字段被禁止。', - 'prohibited_if' => '当 :other 为 :value 时,禁止 :attribute 字段。', - 'prohibited_unless' => ':attribute 字段被禁止,除非 :other 位于 :values 中。', - 'prohibits' => ':attribute 字段禁止出现 :other。', - 'regex' => ':attribute 格式不正确。', - 'required' => ':attribute 不能为空。', - 'required_array_keys' => ':attribute 至少包含指定的键::values.', - 'required_if' => '当 :other 为 :value 时 :attribute 不能为空。', - 'required_unless' => '当 :other 不为 :values 时 :attribute 不能为空。', - 'required_with' => '当 :values 存在时 :attribute 不能为空。', - 'required_with_all' => '当 :values 存在时 :attribute 不能为空。', - 'required_without' => '当 :values 不存在时 :attribute 不能为空。', + 'multiple_of' => ':attribute 必须是 :value 中的多个值。', + 'not_in' => '已选的属性 :attribute 非法。', + 'not_regex' => ':attribute 的格式错误。', + 'numeric' => ':attribute 必须是一个数字。', + 'password' => '密码错误', + 'present' => ':attribute 必须存在。', + 'prohibited' => ':attribute 字段被禁止。', + 'prohibited_if' => '当 :other 为 :value 时,禁止 :attribute 字段。', + 'prohibited_unless' => ':attribute 字段被禁止,除非 :other 位于 :values 中。', + 'prohibits' => ':attribute 字段禁止出现 :other。', + 'regex' => ':attribute 格式不正确。', + 'required' => ':attribute 不能为空。', + 'required_array_keys' => ':attribute 至少包含指定的键::values.', + 'required_if' => '当 :other 为 :value 时 :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。', + 'same' => ':attribute 和 :other 必须相同。', + 'size' => [ + 'array' => ':attribute 必须为 :size 个单元。', + 'file' => ':attribute 大小必须为 :size KB。', 'numeric' => ':attribute 大小必须为 :size。', - 'string' => ':attribute 必须是 :size 个字符。', + 'string' => ':attribute 必须是 :size 个字符。', ], - 'starts_with' => ':attribute 必须以 :values 为开头。', - 'string' => ':attribute 必须是一个字符串。', - 'timezone' => ':attribute 必须是一个合法的时区值。', - 'unique' => ':attribute 已经存在。', - 'uploaded' => ':attribute 上传失败。', - 'url' => ':attribute 格式不正确。', - 'uuid' => ':attribute 必须是有效的 UUID。', - 'attributes' => [ - 'address' => '地址', - 'age' => '年龄', - 'amount' => 'Amount', - 'area' => 'Area', - 'available' => '可用的', - 'birthday' => 'Birthday', - 'body' => 'Body', - 'city' => '城市', - 'content' => '内容', - 'country' => '国家', - 'created_at' => 'Created At', - 'creator' => 'Creator', - 'current_password' => 'Current Password', - 'date' => '日期', - 'date_of_birth' => 'Date Of Birth', - 'day' => '天', - 'deleted_at' => 'Deleted At', - 'description' => '描述', - 'district' => 'District', - 'duration' => 'Duration', - 'email' => '邮箱', - 'excerpt' => '摘要', - 'filter' => 'Filter', - 'first_name' => '名', - 'gender' => '性别', - 'group' => 'Group', - 'hour' => '时', - 'image' => 'Image', - 'last_name' => '姓', - 'lesson' => 'Lesson', - 'line_address_1' => 'Line Address 1', - 'line_address_2' => 'Line Address 2', - 'message' => 'Message', - 'middle_name' => 'Middle Name', - 'minute' => '分', - 'mobile' => '手机', - 'month' => '月', - 'name' => '名称', - 'national_code' => 'National Code', - 'number' => 'Number', - 'password' => '密码', - 'password_confirmation' => '确认密码', - 'phone' => '电话', - 'photo' => 'Photo', - 'postal_code' => 'Postal Code', - 'price' => 'Price', - 'province' => 'Province', + 'starts_with' => ':attribute 必须以 :values 为开头。', + 'string' => ':attribute 必须是一个字符串。', + 'timezone' => ':attribute 必须是一个合法的时区值。', + 'unique' => ':attribute 已经存在。', + 'uploaded' => ':attribute 上传失败。', + 'url' => ':attribute 格式不正确。', + 'uuid' => ':attribute 必须是有效的 UUID。', + 'attributes' => [ + 'address' => '地址', + 'age' => '年龄', + 'amount' => 'Amount', + 'area' => 'Area', + 'available' => '可用的', + 'birthday' => 'Birthday', + 'body' => 'Body', + 'city' => '城市', + 'content' => '内容', + 'country' => '国家', + 'created_at' => 'Created At', + 'creator' => 'Creator', + 'current_password' => 'Current Password', + 'date' => '日期', + 'date_of_birth' => 'Date Of Birth', + 'day' => '天', + 'deleted_at' => 'Deleted At', + 'description' => '描述', + 'district' => 'District', + 'duration' => 'Duration', + 'email' => '邮箱', + 'excerpt' => '摘要', + 'filter' => 'Filter', + 'first_name' => '名', + 'gender' => '性别', + 'group' => 'Group', + 'hour' => '时', + 'image' => 'Image', + 'last_name' => '姓', + 'lesson' => 'Lesson', + 'line_address_1' => 'Line Address 1', + 'line_address_2' => 'Line Address 2', + 'message' => 'Message', + 'middle_name' => 'Middle Name', + 'minute' => '分', + 'mobile' => '手机', + 'month' => '月', + 'name' => '名称', + 'national_code' => 'National Code', + 'number' => 'Number', + 'password' => '密码', + 'password_confirmation' => '确认密码', + 'phone' => '电话', + 'photo' => 'Photo', + 'postal_code' => 'Postal Code', + 'price' => 'Price', + 'province' => 'Province', 'recaptcha_response_field' => 'Recaptcha Response Field', - 'remember' => 'Remember', - 'restored_at' => 'Restored At', - 'result_text_under_image' => 'Result Text Under Image', - 'role' => 'Role', - 'second' => '秒', - 'sex' => '性别', - 'short_text' => 'Short Text', - 'size' => '大小', - 'state' => 'State', - 'street' => 'Street', - 'student' => 'Student', - 'subject' => 'Subject', - 'teacher' => 'Teacher', - 'terms' => 'Terms', - 'test_description' => 'Test Description', - 'test_locale' => 'Test Locale', - 'test_name' => 'Test Name', - 'text' => 'Text', - 'time' => '时间', - 'title' => '标题', - 'updated_at' => 'Updated At', - 'username' => '用户名', - 'year' => '年', + 'remember' => 'Remember', + 'restored_at' => 'Restored At', + 'result_text_under_image' => 'Result Text Under Image', + 'role' => 'Role', + 'second' => '秒', + 'sex' => '性别', + 'short_text' => 'Short Text', + 'size' => '大小', + 'state' => 'State', + 'street' => 'Street', + 'student' => 'Student', + 'subject' => 'Subject', + 'teacher' => 'Teacher', + 'terms' => 'Terms', + 'test_description' => 'Test Description', + 'test_locale' => 'Test Locale', + 'test_name' => 'Test Name', + 'text' => 'Text', + 'time' => '时间', + 'title' => '标题', + 'updated_at' => 'Updated At', + 'username' => '用户名', + 'year' => '年', ], - 'custom' => [ + 'custom' => [ 'attribute-name' => [ 'rule-name' => 'custom-message', ], diff --git a/server.php b/server.php index 5fb6379e..b07fa44b 100644 --- a/server.php +++ b/server.php @@ -3,10 +3,8 @@ /** * Laravel - A PHP Framework For Web Artisans * - * @package Laravel * @author Taylor Otwell */ - $uri = urldecode( parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) );