瀏覽代碼

Translation rework!!

兔姬桑 4 年之前
父節點
當前提交
90a8a075fb
共有 100 個文件被更改,包括 1764 次插入3501 次删除
  1. 10 10
      app/Exceptions/Handler.php
  2. 3 3
      app/Http/Controllers/Admin/CertController.php
  3. 1 1
      app/Http/Controllers/Admin/Config/CountryController.php
  4. 1 1
      app/Http/Controllers/Admin/CouponController.php
  5. 1 1
      app/Http/Controllers/Admin/NodeAuthController.php
  6. 2 2
      app/Http/Controllers/Admin/SystemController.php
  7. 1 1
      app/Http/Controllers/AdminController.php
  8. 67 109
      app/Http/Controllers/AuthController.php
  9. 2 2
      app/Http/Controllers/PaymentController.php
  10. 8 6
      app/Http/Controllers/User/AffiliateController.php
  11. 9 9
      app/Http/Controllers/User/SubscribeController.php
  12. 119 113
      app/Http/Controllers/UserController.php
  13. 5 5
      app/Http/Middleware/isForbidden.php
  14. 2 2
      app/Http/Middleware/isSecurity.php
  15. 0 16
      app/Http/Requests/Auth/RegisterRequest.php
  16. 1 1
      app/Mail/sendVerifyCode.php
  17. 3 3
      app/Models/Invite.php
  18. 19 13
      app/Models/Order.php
  19. 17 0
      app/Models/ReferralApply.php
  20. 16 0
      app/Models/ReferralLog.php
  21. 4 4
      app/Models/Ticket.php
  22. 3 3
      app/helpers.php
  23. 80 79
      composer.lock
  24. 1 1
      config/geetest.php
  25. 0 2
      config/laravel-lang.php
  26. 74 71
      resources/lang/en/auth.php
  27. 85 0
      resources/lang/en/common.php
  28. 30 14
      resources/lang/en/error.php
  29. 0 203
      resources/lang/en/home.php
  30. 6 0
      resources/lang/en/pagination.php
  31. 9 0
      resources/lang/en/passwords.php
  32. 215 0
      resources/lang/en/user.php
  33. 134 0
      resources/lang/en/validation.php
  34. 0 47
      resources/lang/ja.json
  35. 0 99
      resources/lang/ja/auth.php
  36. 0 17
      resources/lang/ja/error.php
  37. 0 200
      resources/lang/ja/home.php
  38. 0 17
      resources/lang/ja/pagination.php
  39. 0 20
      resources/lang/ja/passwords.php
  40. 0 138
      resources/lang/ja/validation-inline.php
  41. 0 149
      resources/lang/ja/validation.php
  42. 0 46
      resources/lang/ko.json
  43. 0 33
      resources/lang/ko/auth.php
  44. 0 17
      resources/lang/ko/error.php
  45. 0 197
      resources/lang/ko/home.php
  46. 1 12
      resources/lang/ko/pagination.php
  47. 4 15
      resources/lang/ko/passwords.php
  48. 0 138
      resources/lang/ko/validation-inline.php
  49. 91 126
      resources/lang/ko/validation.php
  50. 0 46
      resources/lang/zh-CN.json
  51. 68 72
      resources/lang/zh-CN/auth.php
  52. 85 0
      resources/lang/zh-CN/common.php
  53. 30 14
      resources/lang/zh-CN/error.php
  54. 0 209
      resources/lang/zh-CN/home.php
  55. 1 12
      resources/lang/zh-CN/pagination.php
  56. 4 15
      resources/lang/zh-CN/passwords.php
  57. 215 0
      resources/lang/zh-CN/user.php
  58. 0 138
      resources/lang/zh-CN/validation-inline.php
  59. 105 148
      resources/lang/zh-CN/validation.php
  60. 0 46
      resources/lang/zh-TW.json
  61. 0 74
      resources/lang/zh-tw/auth.php
  62. 0 18
      resources/lang/zh-tw/error.php
  63. 0 201
      resources/lang/zh-tw/home.php
  64. 0 17
      resources/lang/zh-tw/pagination.php
  65. 0 20
      resources/lang/zh-tw/passwords.php
  66. 0 138
      resources/lang/zh-tw/validation-inline.php
  67. 0 179
      resources/lang/zh-tw/validation.php
  68. 4 4
      resources/views/admin/aff/detail.blade.php
  69. 6 6
      resources/views/admin/aff/index.blade.php
  70. 4 4
      resources/views/admin/aff/rebate.blade.php
  71. 3 3
      resources/views/admin/article/index.blade.php
  72. 15 15
      resources/views/admin/config/config.blade.php
  73. 2 2
      resources/views/admin/config/emailFilter.blade.php
  74. 96 72
      resources/views/admin/config/system.blade.php
  75. 7 7
      resources/views/admin/coupon/index.blade.php
  76. 16 16
      resources/views/admin/inviteList.blade.php
  77. 4 4
      resources/views/admin/layouts.blade.php
  78. 2 2
      resources/views/admin/logs/callback.blade.php
  79. 1 1
      resources/views/admin/logs/notification.blade.php
  80. 1 1
      resources/views/admin/logs/onlineIPMonitor.blade.php
  81. 4 4
      resources/views/admin/logs/order.blade.php
  82. 2 2
      resources/views/admin/logs/traffic.blade.php
  83. 2 2
      resources/views/admin/logs/userBanHistory.blade.php
  84. 2 2
      resources/views/admin/logs/userCreditHistory.blade.php
  85. 3 3
      resources/views/admin/logs/userMonitor.blade.php
  86. 2 2
      resources/views/admin/logs/userOnlineIP.blade.php
  87. 2 2
      resources/views/admin/logs/userTraffic.blade.php
  88. 2 2
      resources/views/admin/marketing/emailList.blade.php
  89. 1 1
      resources/views/admin/marketing/pushList.blade.php
  90. 7 7
      resources/views/admin/node/auth.blade.php
  91. 3 3
      resources/views/admin/node/cert/index.blade.php
  92. 7 7
      resources/views/admin/node/index.blade.php
  93. 2 2
      resources/views/admin/node/info.blade.php
  94. 3 3
      resources/views/admin/node/monitor.blade.php
  95. 4 4
      resources/views/admin/permission/index.blade.php
  96. 4 4
      resources/views/admin/role/index.blade.php
  97. 4 4
      resources/views/admin/rule/group/index.blade.php
  98. 7 7
      resources/views/admin/rule/index.blade.php
  99. 6 6
      resources/views/admin/rule/log.blade.php
  100. 4 4
      resources/views/admin/shop/index.blade.php

+ 10 - 10
app/Exceptions/Handler.php

@@ -79,46 +79,46 @@ class Handler extends ExceptionHandler
                     Log::info('异常请求:'.$request->fullUrl().',IP:'.IP::getClientIp());
 
                     if ($request->ajax() || $request->wantsJson()) {
-                        return Response::json(['status' => 'fail', 'message' => trans('error.MissingPage')], 404);
+                        return Response::json(['status' => 'fail', 'message' => trans('error.missing_page')], 404);
                     }
 
-                    return Response::view('auth.error', ['message' => trans('error.MissingPage')], 404);
+                    return Response::view('auth.error', ['message' => trans('error.missing_page')], 404);
                 case $exception instanceof AuthenticationException:  // 捕获身份校验异常
                     if ($request->ajax() || $request->wantsJson()) {
-                        return Response::json(['status' => 'fail', 'message' => trans('error.Unauthorized')], 401);
+                        return Response::json(['status' => 'fail', 'message' => trans('error.unauthorized')], 401);
                     }
 
-                    return Response::view('auth.error', ['message' => trans('error.Unauthorized')], 401);
+                    return Response::view('auth.error', ['message' => trans('error.unauthorized')], 401);
                 case $exception instanceof TokenMismatchException: // 捕获CSRF异常
                     if ($request->ajax() || $request->wantsJson()) {
                         return Response::json([
                             'status' => 'fail',
-                            'message' => trans('error.RefreshPage').'<a href="'.route('login').'" target="_blank">'.trans('error.Refresh').'</a>',
+                            'message' => trans('error.refresh_page').'<a href="'.route('login').'" target="_blank">'.trans('error.refresh').'</a>',
                         ], 419);
                     }
 
                     return Response::view(
                         'auth.error',
-                        ['message' => trans('error.RefreshPage').'<a href="'.route('login').'" target="_blank">'.trans('error.Refresh').'</a>'],
+                        ['message' => trans('error.refresh_page').'<a href="'.route('login').'" target="_blank">'.trans('error.refresh').'</a>'],
                         419
                     );
                 case $exception instanceof ReflectionException:
                     if ($request->ajax() || $request->wantsJson()) {
-                        return Response::json(['status' => 'fail', 'message' => trans('error.SystemError')], 500);
+                        return Response::json(['status' => 'fail', 'message' => trans('error.system')], 500);
                     }
 
-                    return Response::view('auth.error', ['message' => trans('error.SystemError')], 500);
+                    return Response::view('auth.error', ['message' => trans('error.system')], 500);
                 case $exception instanceof ErrorException: // 捕获系统错误异常
                     if ($request->ajax() || $request->wantsJson()) {
                         return Response::json([
                             'status' => 'fail',
-                            'message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="'.route('admin.log.viewer').'" target="_blank">'.trans('error.log').'</a>',
+                            'message' => trans('error.system').', '.trans('error.visit').'<a href="'.route('admin.log.viewer').'" target="_blank">'.trans('error.log').'</a>',
                         ], 500);
                     }
 
                     return Response::view(
                         'auth.error',
-                        ['message' => trans('error.SystemError').', '.trans('error.Visit').'<a href="'.route('admin.log.viewer').'" target="_blank">'.trans('error.log').'</a>'],
+                        ['message' => trans('error.system').', '.trans('error.visit').'<a href="'.route('admin.log.viewer').'" target="_blank">'.trans('error.log').'</a>'],
                         500
                     );
                 case $exception instanceof ConnectionException:

+ 3 - 3
app/Http/Controllers/Admin/CertController.php

@@ -37,7 +37,7 @@ class CertController extends Controller
     public function store(CertRequest $request)
     {
         if ($cert = NodeCertificate::create($request->validated())) {
-            return redirect(route('admin.node.cert.edit', $cert))->with('successMsg', '生成成功');
+            return redirect(route('admin.node.cert.edit', $cert))->with('successMsg', trans('common.generate_item', ['attribute' => trans('common.success')]));
         }
 
         return redirect()->back()->withInput()->withErrors('生成失败');
@@ -52,10 +52,10 @@ class CertController extends Controller
     public function update(CertRequest $request, NodeCertificate $cert)
     {
         if ($cert->update($request->validated())) {
-            return redirect()->back()->with('successMsg', '修改成功');
+            return redirect()->back()->with('successMsg', trans('common.update_action', ['action' => trans('common.success')]));
         }
 
-        return redirect()->back()->withInput()->withErrors('修改失败');
+        return redirect()->back()->withInput()->withErrors(trans('common.update_action', ['action' => trans('common.failed')]));
     }
 
     // 删除域名证书

+ 1 - 1
app/Http/Controllers/Admin/Config/CountryController.php

@@ -25,7 +25,7 @@ class CountryController extends Controller
         }
 
         if (Country::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => '生成成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.generate_item', ['attribute' => trans('common.success')])]);
         }
 
         return Response::json(['status' => 'fail', 'message' => '生成失败']);

+ 1 - 1
app/Http/Controllers/Admin/CouponController.php

@@ -71,7 +71,7 @@ class CouponController extends Controller
                 Coupon::create($data);
             }
 
-            return Redirect::route('admin.coupon.index')->with('successMsg', '生成成功');
+            return Redirect::route('admin.coupon.index')->with('successMsg', trans('common.generate_item', ['attribute' => trans('common.success')]));
         } catch (Exception $e) {
             Log::error('生成优惠券失败:'.$e->getMessage());
 

+ 1 - 1
app/Http/Controllers/Admin/NodeAuthController.php

@@ -29,7 +29,7 @@ class NodeAuthController extends Controller
             $node->auth()->create(['key' => Str::random(), 'secret' => Str::random(8)]);
         });
 
-        return Response::json(['status' => 'success', 'message' => '生成成功']);
+        return Response::json(['status' => 'success', 'message' => trans('common.generate_item', ['attribute' => trans('common.success')])]);
     }
 
     // 重置节点授权

+ 2 - 2
app/Http/Controllers/Admin/SystemController.php

@@ -141,10 +141,10 @@ class SystemController extends Controller
 
         // 更新配置
         if (Config::findOrFail($name)->update(['value' => $value])) {
-            return Response::json(['status' => 'success', 'message' => '修改成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.update_action', ['action' => trans('common.success')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '修改失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('common.update_action', ['action' => trans('common.failed')])]);
     }
 
     // 推送通知测试

+ 1 - 1
app/Http/Controllers/AdminController.php

@@ -76,7 +76,7 @@ class AdminController extends Controller
             $obj->save();
         }
 
-        return Response::json(['status' => 'success', 'message' => '生成成功']);
+        return Response::json(['status' => 'success', 'message' => trans('common.generate_item', ['attribute' => trans('common.success')])]);
     }
 
     // 导出邀请码

+ 67 - 109
app/Http/Controllers/AuthController.php

@@ -53,13 +53,7 @@ class AuthController extends Controller
 
     public function login(Request $request)
     {
-        $validator = Validator::make($request->all(), [
-            'email' => 'required|email',
-            'password' => 'required',
-        ], [
-            'email.required' => trans('auth.email_null'),
-            'password.required' => trans('auth.password_null'),
-        ]);
+        $validator = Validator::make($request->all(), ['email' => 'required|email', 'password' => 'required']);
 
         if ($validator->fails()) {
             return Redirect::back()->withInput()->withErrors($validator->errors());
@@ -73,25 +67,26 @@ class AuthController extends Controller
 
         // 验证账号并创建会话
         if (! Auth::attempt($validator->validated(), $request->input('remember'))) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.login_error'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.error.login_failed'));
         }
         $user = Auth::getUser();
 
         if (! $user) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.login_error'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.error.login_error'));
         }
 
         // 校验普通用户账号状态
-        if ($user->status < 0) {
+        if ($user->status === -1) {
             Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
-            return Redirect::back()->withInput()->withErrors(trans('auth.login_ban', ['email' => sysConfig('webmaster_email')]));
+            return Redirect::back()->withInput()->withErrors(trans('auth.error.account_baned'));
         }
 
         if ($user->status === 0 && sysConfig('is_activate_account')) {
             Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
-            return Redirect::back()->withInput()->withErrors(trans('auth.active_tip').'<a href="'.route('active').'?email='.$user->email.'" target="_blank"><span style="color:#000">【'.trans('auth.active_account').'】</span></a>');
+            return Redirect::back()->withInput()->withErrors(trans('auth.active.promotion.0').'<a href="'.route('active').'?email='.$user->email.
+                '" target="_blank">👉【'.trans('common.active_item', ['attribute' => trans('common.account')]).'】👈</span></a><br>'.trans('auth.active.promotion.1'));
         }
 
         // 写入登录日志
@@ -109,18 +104,16 @@ class AuthController extends Controller
         switch (sysConfig('is_captcha')) {
             case 1: // 默认图形验证码
                 if (! Captcha::check($request->input('captcha'))) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha_error'));
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
                 }
                 break;
             case 2: // Geetest
                 $validator = Validator::make($request->all(), [
                     'geetest_challenge' => 'required|geetest',
-                ], [
-                    'geetest' => trans('auth.captcha_fail'),
                 ]);
 
                 if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha_fail'));
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
                 }
                 break;
             case 3: // Google reCAPTCHA
@@ -129,7 +122,7 @@ class AuthController extends Controller
                 ]);
 
                 if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha_fail'));
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
                 }
                 break;
             case 4: // hCaptcha
@@ -138,7 +131,7 @@ class AuthController extends Controller
                 ]);
 
                 if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha_fail'));
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
                 }
                 break;
             default: // 不启用验证码
@@ -159,7 +152,7 @@ class AuthController extends Controller
         $ipLocation = IP::getIPInfo($ip);
 
         if (empty($ipLocation) || empty($ipLocation['country'])) {
-            Log::warning('获取IP信息异常:'.$ip);
+            Log::warning(trans('error.get_ip').':'.$ip);
         }
 
         $log = new UserLoginLog();
@@ -196,20 +189,9 @@ class AuthController extends Controller
 
         $validator = Validator::make($request->all(), [
             'username' => 'required',
-            'email' => 'required|email|unique:user',
+            'email'    => 'required|email|unique:user',
             'password' => 'required|min:6|confirmed',
-            'password_confirmation' => 'required|same:password',
-            'term' => 'accepted',
-        ], [
-            'username.required' => trans('auth.email_null'),
-            'email.required' => trans('auth.email_null'),
-            'email.email' => trans('auth.email_legitimate'),
-            'email.unique' => trans('auth.email_exist'),
-            'password.required' => trans('auth.password_null'),
-            'password.min' => trans('auth.password_limit'),
-            'password_confirmation.required' => trans('auth.confirm_password'),
-            'password_confirmation.same' => trans('auth.password_same'),
-            'term.accepted' => trans('auth.unaccepted'),
+            'term'     => 'accepted',
         ]);
 
         if ($validator->fails()) {
@@ -223,14 +205,14 @@ class AuthController extends Controller
 
         // 防止重复提交
         if ($register_token !== Session::get('register_token')) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.repeat_request'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.error.repeat_request'));
         }
 
         Session::forget('register_token');
 
         // 是否开启注册
         if (! sysConfig('is_register')) {
-            return Redirect::back()->withErrors(trans('auth.register_close'));
+            return Redirect::back()->withErrors(trans('auth.register.error.disable'));
         }
 
         // 校验域名邮箱黑白名单
@@ -246,22 +228,22 @@ class AuthController extends Controller
             // 校验邀请码合法性
             if ($code) {
                 if (Invite::whereCode($code)->whereStatus(0)->doesntExist()) {
-                    return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.code_error'));
+                    return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.invite.error.unavailable'));
                 }
             } elseif ((int) sysConfig('is_invite_register') === 2) { // 必须使用邀请码
-                return Redirect::back()->withInput()->withErrors(trans('auth.code_null'));
+                return Redirect::back()->withInput()->withErrors(trans('validation.required', ['attribute' => trans('auth.invite.attribute')]));
             }
         }
 
         // 注册前发送激活码
         if ((int) sysConfig('is_activate_account') === 1) {
             if (! $verify_code) {
-                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha_null'));
+                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.required'));
             }
 
             $verifyCode = VerifyCode::whereAddress($data['email'])->whereCode($verify_code)->whereStatus(0)->first();
             if (! $verifyCode) {
-                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha_overtime'));
+                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.error.timeout'));
             }
 
             $verifyCode->status = 1;
@@ -278,14 +260,14 @@ class AuthController extends Controller
         if (sysConfig('register_ip_limit') && Cache::has($cacheKey)) {
             $registerTimes = Cache::get($cacheKey);
             if ($registerTimes >= sysConfig('register_ip_limit')) {
-                return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.register_anti'));
+                return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.register.error.throttle'));
             }
         }
 
-        // 获取可用端口
+        // 获取可用端口 TODO: 修改判断&提示
         $port = Helpers::getPort();
         if ($port > sysConfig('max_port')) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.register_close'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.register.error.disable'));
         }
 
         // 获取aff
@@ -299,7 +281,7 @@ class AuthController extends Controller
 
         // 注册失败,抛出异常
         if (! $user) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.register_fail'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.register.failed'));
         }
 
         // 注册次数+1
@@ -326,10 +308,11 @@ class AuthController extends Controller
             $token = $this->addVerifyUrl($user->id, $user->email);
             $activeUserUrl = route('activeAccount', $token);
 
-            $logId = Helpers::addNotificationLog('注册激活', '请求地址:'.$activeUserUrl, 1, $user->email);
+            $logId = Helpers::addNotificationLog(trans('common.active_item', ['attribute' => trans('auth.register.attribute')]),
+                trans('common.request_url').':'.$activeUserUrl, 1, $user->email);
             Mail::to($user->email)->send(new activeUser($logId, $activeUserUrl));
 
-            Session::flash('successMsg', trans('auth.register_active_tip'));
+            Session::flash('successMsg', trans('auth.active.sent'));
         } else {
             // 则直接给推荐人加流量
             if ($inviter_id) {
@@ -343,7 +326,7 @@ class AuthController extends Controller
                 $user->update(['status' => 1]);
             }
 
-            Session::flash('successMsg', trans('auth.register_success'));
+            Session::flash('successMsg', trans('auth.register.success'));
         }
 
         return Redirect::route('login')->withInput();
@@ -359,28 +342,28 @@ class AuthController extends Controller
             case 1:
                 if (in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
                     if ($returnType) {
-                        return Redirect::back()->withErrors(trans('auth.email_banned'));
+                        return Redirect::back()->withErrors(trans('auth.email.error.banned'));
                     }
 
-                    return Response::json(['status' => 'fail', 'message' => trans('auth.email_banned')]);
+                    return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.banned')]);
                 }
                 break;
             //白名单
             case 2:
                 if (! in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
                     if ($returnType) {
-                        return Redirect::back()->withErrors(trans('auth.email_invalid'));
+                        return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
                     }
 
-                    return Response::json(['status' => 'fail', 'message' => trans('auth.email_invalid')]);
+                    return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
                 }
                 break;
             default:
                 if ($returnType) {
-                    return Redirect::back()->withErrors(trans('auth.email_invalid'));
+                    return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
                 }
 
-                return Response::json(['status' => 'fail', 'message' => trans('auth.email_invalid')]);
+                return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
         }
 
         return false;
@@ -439,10 +422,7 @@ class AuthController extends Controller
         if ($request->isMethod('POST')) {
             // 校验请求
             $validator = Validator::make($request->all(), [
-                'email' => 'required|email',
-            ], [
-                'email.required' => trans('auth.email_null'),
-                'email.email' => trans('auth.email_legitimate'),
+                'email' => 'required|email|exists:user,email',
             ]);
 
             if ($validator->fails()) {
@@ -453,21 +433,18 @@ class AuthController extends Controller
 
             // 是否开启重设密码
             if (! sysConfig('is_reset_password')) {
-                return Redirect::back()->withErrors(trans('auth.reset_password_close', ['email' => sysConfig('webmaster_email')]));
+                return Redirect::back()->withErrors(trans('auth.password.reset.error.disabled', ['email' => sysConfig('webmaster_email')]));
             }
 
             // 查找账号
             $user = User::whereEmail($email)->first();
-            if (! $user) {
-                return Redirect::back()->withErrors(trans('auth.email_notExist'));
-            }
 
             // 24小时内重设密码次数限制
             $resetTimes = 0;
             if (Cache::has('resetPassword_'.md5($email))) {
                 $resetTimes = Cache::get('resetPassword_'.md5($email));
                 if ($resetTimes >= sysConfig('reset_password_times')) {
-                    return Redirect::back()->withErrors(trans('auth.reset_password_limit', ['time' => sysConfig('reset_password_times')]));
+                    return Redirect::back()->withErrors(trans('auth.password.reset.error.throttle', ['time' => sysConfig('reset_password_times')]));
                 }
             }
 
@@ -477,12 +454,12 @@ class AuthController extends Controller
             // 发送邮件
             $resetPasswordUrl = route('resettingPasswd', $token);
 
-            $logId = Helpers::addNotificationLog('重置密码', '请求地址:'.$resetPasswordUrl, 1, $email);
+            $logId = Helpers::addNotificationLog(trans('auth.password.reset.attribute'), trans('common.request_url').':'.$resetPasswordUrl, 1, $email);
             Mail::to($email)->send(new resetPassword($logId, $resetPasswordUrl));
 
             Cache::put('resetPassword_'.md5($email), $resetTimes + 1, Day);
 
-            return Redirect::back()->with('successMsg', trans('auth.reset_password_success_tip'));
+            return Redirect::back()->with('successMsg', trans('auth.password.reset.sent'));
         }
 
         return view('auth.resetPassword');
@@ -498,13 +475,6 @@ class AuthController extends Controller
         if ($request->isMethod('POST')) {
             $validator = Validator::make($request->all(), [
                 'password' => 'required|min:6|confirmed',
-                'password_confirmation' => 'required|same:password',
-            ], [
-                'password.required' => trans('auth.password_null'),
-                'password.min' => trans('auth.password_limit'),
-                'password_confirmation.required' => trans('auth.password_null'),
-                'password_confirmation.min' => trans('auth.password_limit'),
-                'password_confirmation.same' => trans('auth.password_same'),
             ]);
 
             if ($validator->fails()) {
@@ -519,28 +489,28 @@ class AuthController extends Controller
                 return Redirect::route('login');
             }
 
-            if ($verify->status === 1) {
-                return Redirect::back()->withErrors(trans('auth.overtime'));
+            if ($user->status === -1) {
+                return Redirect::back()->withErrors(trans('auth.error.account_baned'));
             }
 
-            if ($user->status < 0) {
-                return Redirect::back()->withErrors(trans('auth.email_banned'));
+            if ($verify->status === 1) {
+                return Redirect::back()->withErrors(trans('auth.error.url_timeout'));
             }
 
             if (Hash::check($password, $verify->user->password)) {
-                return Redirect::back()->withErrors(trans('auth.reset_password_same_fail'));
+                return Redirect::back()->withErrors(trans('auth.password.reset.error.same'));
             }
 
             // 更新密码
             if (! $user->update(['password' => $password])) {
-                return Redirect::back()->withErrors(trans('auth.reset_password_fail'));
+                return Redirect::back()->withErrors(trans('auth.password.reset.error.failed'));
             }
 
             // 置为已使用
             $verify->status = 1;
             $verify->save();
 
-            return Redirect::route('login')->with('successMsg', trans('auth.reset_password_new'));
+            return Redirect::route('login')->with('successMsg', trans('auth.password.reset.success'));
         }
 
         $verify = Verify::type(1)->whereToken($token)->first();
@@ -561,13 +531,7 @@ class AuthController extends Controller
     public function activeUser(Request $request)
     {
         if ($request->isMethod('POST')) {
-            $validator = Validator::make($request->all(), [
-                'email' => 'required|email|exists:user,email',
-            ], [
-                'email.required' => trans('auth.email_null'),
-                'email.email' => trans('auth.email_legitimate'),
-                'email.exists' => trans('auth.email_notExist'),
-            ]);
+            $validator = Validator::make($request->all(), ['email' => 'required|email|exists:user,email']);
 
             if ($validator->fails()) {
                 return Redirect::back()->withInput()->withErrors($validator->errors());
@@ -576,18 +540,18 @@ class AuthController extends Controller
             $email = $request->input('email');
 
             // 是否开启账号激活
-            if ((int) sysConfig('is_activate_account') !== 2) {
-                return Redirect::back()->withInput()->withErrors(trans('auth.active_close', ['email' => sysConfig('webmaster_email')]));
+            if (! sysConfig('is_activate_account')) {
+                return Redirect::back()->withInput()->withErrors(trans('auth.active.error.disable'));
             }
 
             // 查找账号
             $user = User::whereEmail($email)->firstOrFail();
-            if ($user->status < 0) {
-                return Redirect::back()->withErrors(trans('auth.login_ban', ['email' => sysConfig('webmaster_email')]));
+            if ($user->status === -1) {
+                return Redirect::back()->withErrors(trans('auth.error.account_baned'));
             }
 
-            if ($user->status > 0) {
-                return Redirect::back()->withErrors(trans('auth.email_normal'));
+            if ($user->status === 1) {
+                return Redirect::back()->withErrors(trans('auth.active.error.activated'));
             }
 
             // 24小时内激活次数限制
@@ -595,7 +559,7 @@ class AuthController extends Controller
             if (Cache::has('activeUser_'.md5($email))) {
                 $activeTimes = Cache::get('activeUser_'.md5($email));
                 if ($activeTimes >= sysConfig('active_times')) {
-                    return Redirect::back()->withErrors(trans('auth.active_limit', ['time' => sysConfig('webmaster_email')]));
+                    return Redirect::back()->withErrors(trans('auth.active.error.throttle', ['email' => sysConfig('webmaster_email')]));
                 }
             }
 
@@ -605,12 +569,12 @@ class AuthController extends Controller
             // 发送邮件
             $activeUserUrl = route('activeAccount', $token);
 
-            $logId = Helpers::addNotificationLog('激活账号', '请求地址:'.$activeUserUrl, 1, $email);
+            $logId = Helpers::addNotificationLog(trans('common.active_item', ['attribute' => trans('common.account')]), trans('common.request_url').':'.$activeUserUrl, 1, $email);
             Mail::to($email)->send(new activeUser($logId, $activeUserUrl));
 
             Cache::put('activeUser_'.md5($email), $activeTimes + 1, Day);
 
-            return Redirect::back()->with('successMsg', trans('auth.register_active_tip'));
+            return Redirect::back()->with('successMsg', trans('auth.active.sent'));
         }
 
         return view('auth.activeUser');
@@ -630,19 +594,19 @@ class AuthController extends Controller
         }
 
         if (empty($user) || $verify->status > 0) {
-            Session::flash('errorMsg', trans('auth.overtime'));
+            Session::flash('errorMsg', trans('auth.error.url_timeout'));
 
             return view('auth.active');
         }
 
-        if ($user->status !== 0) {
-            Session::flash('errorMsg', trans('auth.email_normal'));
+        if ($user->status === 1) {
+            Session::flash('errorMsg', trans('auth.active.error.activated'));
 
             return view('auth.active');
         }
 
         if (time() - strtotime($verify->created_at) >= 1800) {
-            Session::flash('errorMsg', trans('auth.overtime'));
+            Session::flash('errorMsg', trans('auth.error.url_timeout'));
 
             // 置为已失效
             $verify->status = 2;
@@ -653,7 +617,7 @@ class AuthController extends Controller
 
         // 更新账号状态
         if (! $user->update(['status' => 1])) {
-            Session::flash('errorMsg', trans('auth.active_fail'));
+            Session::flash('errorMsg', trans('common.active_item', ['attribute' => trans('common.failed')]));
 
             return Redirect::back();
         }
@@ -668,7 +632,7 @@ class AuthController extends Controller
             $inviter->incrementData(sysConfig('referral_traffic') * MB);
         }
 
-        Session::flash('successMsg', trans('auth.active_success'));
+        Session::flash('successMsg', trans('common.active_item', ['attribute' => trans('common.success')]));
 
         return view('auth.active');
     }
@@ -676,13 +640,7 @@ class AuthController extends Controller
     // 发送注册验证码
     public function sendCode(Request $request)
     {
-        $validator = Validator::make($request->all(), [
-            'email' => 'required|email|unique:user,email',
-        ], [
-            'email.required' => trans('auth.email_null'),
-            'email.email' => trans('auth.email_legitimate'),
-            'email.unique' => trans('auth.email_exist'),
-        ]);
+        $validator = Validator::make($request->all(), ['email' => 'required|email|unique:user,email']);
 
         $email = $request->input('email');
 
@@ -701,24 +659,24 @@ class AuthController extends Controller
 
         // 是否开启注册发送验证码
         if ((int) sysConfig('is_activate_account') !== 1) {
-            return Response::json(['status' => 'fail', 'message' => trans('auth.captcha_close')]);
+            return Response::json(['status' => 'fail', 'message' => trans('auth.active.error.disable')]);
         }
 
         // 防刷机制
         if (Cache::has('send_verify_code_'.md5($ip))) {
-            return Response::json(['status' => 'fail', 'message' => trans('auth.register_anti')]);
+            return Response::json(['status' => 'fail', 'message' => trans('auth.register.error.throttle')]);
         }
 
         // 发送邮件
         $code = Str::random(6);
-        $logId = Helpers::addNotificationLog('发送注册验证码', '验证码:'.$code, 1, $email);
+        $logId = Helpers::addNotificationLog(trans('auth.register.code'), trans('auth.captcha.attribute').':'.$code, 1, $email);
         Mail::to($email)->send(new sendVerifyCode($logId, $code));
 
         VerifyCode::create(['address' => $email, 'code' => $code]); // 生成注册验证码
 
         Cache::put('send_verify_code_'.md5($ip), $ip, Minute);
 
-        return Response::json(['status' => 'success', 'message' => trans('auth.captcha_send')]);
+        return Response::json(['status' => 'success', 'message' => trans('auth.captcha.sent')]);
     }
 
     // 公开的邀请码列表

+ 2 - 2
app/Http/Controllers/PaymentController.php

@@ -101,7 +101,7 @@ class PaymentController extends Controller
         // 充值余额
         if ($credit) {
             if (! is_numeric($credit) || $credit <= 0) {
-                return Response::json(['status' => 'fail', 'message' => '充值余额不合规']);
+                return Response::json(['status' => 'fail', 'message' => trans('user.payment.error')]);
             }
             $amount = $credit;
         // 购买服务
@@ -215,7 +215,7 @@ class PaymentController extends Controller
 
         return view('user.payment', [
             'payment' => $payment,
-            'name' => $goods->name ?? '余额充值',
+            '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,

+ 8 - 6
app/Http/Controllers/User/AffiliateController.php

@@ -16,7 +16,7 @@ class AffiliateController extends Controller
     public function referral()
     {
         if (ReferralLog::uid()->doesntExist() && Order::uid()->whereStatus(2)->doesntExist()) {
-            return Response::view('auth.error', ['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>'], 402);
+            return Response::view('auth.error', ['message' => trans('user.purchase_required').'<a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
         }
 
         return view('user.referral', [
@@ -37,20 +37,22 @@ class AffiliateController extends Controller
     {
         // 判断账户是否过期
         if (Auth::getUser()->expired_at < date('Y-m-d')) {
-            return Response::json(['status' => 'fail', 'message' => '申请失败:账号已过期,请先购买服务吧']);
+            return Response::json(['status' => 'fail', 'title' => trans('user.referral.failed'), 'message' => trans('user.referral.msg.account')]);
         }
 
         // 判断是否已存在申请
         $referralApply = ReferralApply::uid()->whereIn('status', [0, 1])->first();
         if ($referralApply) {
-            return Response::json(['status' => 'fail', 'message' => '申请失败:已存在申请,请等待之前的申请处理完']);
+            return Response::json(['status' => 'fail', 'title' => trans('user.referral.failed'), 'message' => trans('user.referral.msg.appliedd')]);
         }
 
         // 校验可以提现金额是否超过系统设置的阀值
         $commission = ReferralLog::uid()->whereStatus(0)->sum('commission');
         $commission /= 100;
         if ($commission < sysConfig('referral_money')) {
-            return Response::json(['status' => 'fail', 'message' => '申请失败:满'.sysConfig('referral_money').'元才可以提现,继续努力吧']);
+            return Response::json([
+                'status' => 'fail', 'title' => trans('user.referral.failed'), 'message' => trans('user.referral.msg.unfulfilled', ['amount' => sysConfig('referral_money')]),
+            ]);
         }
 
         $ref = new ReferralApply();
@@ -59,9 +61,9 @@ class AffiliateController extends Controller
         $ref->amount = $commission;
         $ref->link_logs = ReferralLog::uid()->whereStatus(0)->pluck('id')->toArray();
         if ($ref->save()) {
-            return Response::json(['status' => 'success', 'message' => '申请成功,请等待管理员审核']);
+            return Response::json(['status' => 'success', 'title' => trans('user.referral.success'), 'message' => trans('user.referral.msg.wait')]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '申请失败,返利单建立失败,请稍后尝试或通知管理员']);
+        return Response::json(['status' => 'fail', 'title' => trans('user.referral.failed'), 'message' => trans('user.referral.msg.error')]);
     }
 }

+ 9 - 9
app/Http/Controllers/User/SubscribeController.php

@@ -28,38 +28,38 @@ class SubscribeController extends Controller
         // 检查订阅码是否有效
         $subscribe = UserSubscribe::whereCode($code)->first();
         if (! $subscribe) {
-            return $this->failed('使用链接错误!请重新获取!');
+            return $this->failed(trans('error.subscribe.unknown'));
         }
 
         if ($subscribe->status !== 1) {
-            return $this->failed('链接已被封禁,请前往官网查询原因!');
+            return $this->failed(trans('error.subscribe.sub_baned'));
         }
 
         // 检查用户是否有效
         $user = $subscribe->user;
         if (! $user) {
-            return $this->failed('错误链接,账号不存在!请重新获取链接');
+            return $this->failed(trans('error.subscribe.user'));
         }
 
         if ($user->status === -1) {
-            return $this->failed('账号被禁用!');
+            return $this->failed(trans('error.subscribe.user_disable'));
         }
 
         if ($user->enable !== 1) {
             if ($user->ban_time) {
-                return $this->failed('账号封禁至'.$user->ban_time.',请解封后再更新!');
+                return $this->failed(trans('error.subscribe.baned_until', ['time' => $user->ban_time]));
             }
 
             $unusedTraffic = $user->transfer_enable - $user->usedTraffic();
             if ($unusedTraffic <= 0) {
-                return $this->failed('流量耗尽!请重新购买或重置流量!');
+                return $this->failed(trans('error.subscribe.out'));
             }
 
             if ($user->expired_at < date('Y-m-d')) {
-                return $this->failed('账号过期!请续费!');
+                return $this->failed(trans('error.subscribe.expired'));
             }
 
-            return $this->failed('账号存在问题,请前往官网查询!');
+            return $this->failed(trans('error.subscribe.question'));
         }
 
         // 更新访问次数
@@ -79,7 +79,7 @@ class SubscribeController extends Controller
 
         $nodeList = $query->orderByDesc('sort')->orderBy('id')->get();
         if (empty($nodeList)) {
-            return $this->failed('无可用节点');
+            return $this->failed(trans('error.subscribe.none'));
         }
 
         $servers = [];

+ 119 - 113
app/Http/Controllers/UserController.php

@@ -57,19 +57,19 @@ class UserController extends Controller
         }
 
         return view('user.index', array_merge([
-            'remainDays' => $expireTime < date('Y-m-d') ? -1 : Helpers::daysToNow($expireTime),
-            'resetDays' => $user->reset_time ? Helpers::daysToNow($user->reset_time) : 0,
-            'unusedTraffic' => flowAutoShow($unusedTraffic),
-            'expireTime' => $expireTime,
-            'banedTime' => $user->ban_time ?: 0,
-            'unusedPercent' => $totalTransfer > 0 ? round($unusedTraffic / $totalTransfer, 2) * 100 : 0,
-            'announcements' => Article::type(2)->take(5)->latest()->Paginate(1), // 公告
+            'remainDays'       => $expireTime < date('Y-m-d') ? -1 : Helpers::daysToNow($expireTime),
+            'resetDays'        => $user->reset_time ? Helpers::daysToNow($user->reset_time) : 0,
+            'unusedTraffic'    => flowAutoShow($unusedTraffic),
+            'expireTime'       => $expireTime,
+            'banedTime'        => $user->ban_time,
+            'unusedPercent'    => $totalTransfer > 0 ? round($unusedTraffic / $totalTransfer, 2) * 100 : 0,
+            'announcements'    => Article::type(2)->take(5)->latest()->Paginate(1), // 公告
             'isTrafficWarning' => $user->isTrafficWarning(), // 流量异常判断
-            'paying_user' => $user->activePayingUser(), // 付费用户判断
-            'userLoginLog' => $user->loginLogs()->latest()->first(), // 近期登录日志
+            'paying_user'      => $user->activePayingUser(), // 付费用户判断
+            'userLoginLog'     => $user->loginLogs()->latest()->first(), // 近期登录日志
             'subscribe_status' => $user->subscribe->status,
-            'subType' => $subType,
-            'subUrl' => route('sub', $user->subscribe->code),
+            'subType'          => $subType,
+            'subUrl'           => route('sub', $user->subscribe->code),
         ], $this->dataFlowChart($user->id)));
     }
 
@@ -79,28 +79,28 @@ class UserController extends Controller
         $user = auth()->user();
         // 系统开启登录加积分功能才可以签到
         if (! sysConfig('is_checkin')) {
-            return Response::json(['status' => 'fail', 'message' => '系统未开启签到功能']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.disable')]);
         }
 
         // 已签到过,验证是否有效
         if (Cache::has('userCheckIn_'.$user->id)) {
-            return Response::json(['status' => 'fail', 'message' => '已经签到过了,明天再来吧']);
+            return Response::json(['status' => 'success', 'title' => trans('common.success'), 'message' => trans('user.home.attendance.done')]);
         }
 
         $traffic = random_int((int) sysConfig('min_rand_traffic'), (int) sysConfig('max_rand_traffic')) * MB;
 
         if (! $user->incrementData($traffic)) {
-            return Response::json(['status' => 'fail', 'message' => '签到失败,系统异常']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.failed')]);
         }
 
         // 写入用户流量变动记录
-        Helpers::addUserTrafficModifyLog($user->id, null, $user->transfer_enable, $user->transfer_enable + $traffic, '[签到]');
+        Helpers::addUserTrafficModifyLog($user->id, null, $user->transfer_enable, $user->transfer_enable + $traffic, trans('user.home.attendance.attribute'));
 
         // 多久后可以再签到
         $ttl = sysConfig('traffic_limit_time') ? sysConfig('traffic_limit_time') * Minute : Day;
         Cache::put('userCheckIn_'.$user->id, '1', $ttl);
 
-        return Response::json(['status' => 'success', 'message' => '签到成功,系统送您 '.flowAutoShow($traffic).'流量']);
+        return Response::json(['status' => 'success', 'message' => trans('user.home.attendance.success', ['data' => flowAutoShow($traffic)])]);
     }
 
     // 节点列表
@@ -138,54 +138,53 @@ class UserController extends Controller
     {
         $user = auth()->user();
         if ($request->isMethod('POST')) {
-            $old_password = $request->input('old_password');
-            $new_password = $request->input('new_password');
-            $username = $request->input('username');
-            $wechat = $request->input('wechat');
-            $qq = $request->input('qq');
-            $passwd = $request->input('passwd');
-
             // 修改密码
-            if ($old_password && $new_password) {
-                if (! Hash::check($old_password, $user->password)) {
-                    return Redirect::back()->withErrors('旧密码错误,请重新输入');
+            if ($request->has(['password', 'new_password'])) {
+                $data = $request->only(['password', 'new_password']);
+
+                if (! Hash::check($data['password'], $user->password)) {
+                    return Redirect::back()->withErrors(trans('auth.password.reset.error.wrong'));
                 }
 
-                if (Hash::check($new_password, $user->password)) {
-                    return Redirect::back()->withErrors('新密码不可与旧密码一样,请重新输入');
+                if (Hash::check($data['new_password'], $user->password)) {
+                    return Redirect::back()->withErrors(trans('auth.password.reset.error.same'));
                 }
 
                 // 演示环境禁止改管理员密码
                 if ($user->id === 1 && config('app.demo')) {
-                    return Redirect::back()->withErrors('演示环境禁止修改管理员密码');
+                    return Redirect::back()->withErrors(trans('auth.password.reset.error.demo'));
                 }
 
-                if (! $user->update(['password' => $new_password])) {
-                    return Redirect::back()->withErrors('修改失败');
+                if (! $user->update(['password' => $data['new_password']])) {
+                    return Redirect::back()->withErrors(trans('common.update_action', ['action' => trans('common.failed')]));
                 }
 
-                return Redirect::back()->with('successMsg', '修改成功');
+                return Redirect::back()->with('successMsg', trans('common.update_action', ['action' => trans('common.success')]));
                 // 修改代理密码
             }
 
-            if ($passwd) {
+            if ($request->has('passwd')) {
+                $passwd = $request->input('passwd');
                 if (! $user->update(['passwd' => $passwd])) {
-                    return Redirect::back()->withErrors('修改失败');
+                    return Redirect::back()->withErrors(trans('common.update_action', ['action' => trans('common.failed')]));
                 }
 
-                return Redirect::back()->with('successMsg', '修改成功');
+                return Redirect::back()->with('successMsg', trans('common.update_action', ['action' => trans('common.success')]));
             }
 
             // 修改联系方式
-            if (empty($username)) {
-                return Redirect::back()->withErrors('修改失败,昵称不能为空值');
-            }
+            if ($request->has(['username', 'wechat', 'qq'])) {
+                $data = $request->only(['username', 'wechat', 'qq']);
+                if (empty($data['username'])) {
+                    return Redirect::back()->withErrors(trans('validation.required', ['attribute' => trans('validation.attributes.username')]));
+                }
 
-            if (! $user->update(['username' => $username, 'wechat' => $wechat, 'qq' => $qq])) {
-                return Redirect::back()->withErrors('修改失败');
+                if (! $user->update($data)) {
+                    return Redirect::back()->withErrors(trans('common.update_action', ['action' => trans('common.failed')]));
+                }
             }
 
-            return Redirect::back()->with('successMsg', '修改成功');
+            return Redirect::back()->with('successMsg', trans('common.update_action', ['action' => trans('common.success')]));
         }
 
         return view('user.profile');
@@ -203,9 +202,9 @@ class UserController extends Controller
 
         return view('user.services', [
             'chargeGoodsList' => Goods::type(3)->whereStatus(1)->orderBy('price')->limit(10)->get(),
-            'goodsList' => Goods::whereStatus(1)->where('type', '<=', '2')->orderByDesc('type')->orderByDesc('sort')->paginate(10)->appends($request->except('page')),
-            'renewTraffic' => $renewPrice->renew ?? 0,
-            'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? Helpers::daysToNow($dataPlusDays) : 0,
+            'goodsList'       => Goods::whereStatus(1)->where('type', '<=', '2')->orderByDesc('type')->orderByDesc('sort')->paginate(10)->appends($request->except('page')),
+            'renewTraffic'    => $renewPrice->renew ?? 0,
+            'dataPlusDays'    => $dataPlusDays > date('Y-m-d') ? Helpers::daysToNow($dataPlusDays) : 0,
         ]);
     }
 
@@ -216,7 +215,7 @@ class UserController extends Controller
         $order = Order::userActivePlan()->firstOrFail();
         $renewCost = $order->goods->renew;
         if ($user->credit < $renewCost) {
-            return Response::json(['status' => 'fail', 'message' => '余额不足,请充值余额']);
+            return Response::json(['status' => 'fail', 'message' => trans('user.reset_data.lack')]);
         }
 
         $user->update(['u' => 0, 'd' => 0]);
@@ -225,9 +224,9 @@ class UserController extends Controller
         $user->updateCredit(-$renewCost);
 
         // 记录余额操作日志
-        Helpers::addUserCreditLog($user->id, null, $user->credit, $user->credit - $renewCost, -1 * $renewCost, '用户自行重置流量');
+        Helpers::addUserCreditLog($user->id, null, $user->credit, $user->credit - $renewCost, -1 * $renewCost, trans('user.reset_data.logs'));
 
-        return Response::json(['status' => 'success', 'message' => '重置成功']);
+        return Response::json(['status' => 'success', 'message' => trans('user.reset_data.success')]);
     }
 
     // 工单
@@ -242,7 +241,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(),
         ]);
     }
@@ -255,13 +254,13 @@ class UserController extends Controller
         if ($activePlan->save()) {
             // 关闭先前套餐后,新套餐自动运行
             if (Order::userActivePlan()->exists()) {
-                return Response::json(['status' => 'success', 'message' => '激活成功']);
+                return Response::json(['status' => 'success', 'message' => trans('common.active_item', ['attribute' => trans('common.success')])]);
             }
 
-            return Response::json(['status' => 'success', 'message' => '关闭']);
+            return Response::json(['status' => 'success', 'message' => trans('common.close')]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '关闭失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('common.close_item', ['attribute' => trans('common.failed')])]);
     }
 
     // 订单明细
@@ -279,12 +278,14 @@ class UserController extends Controller
         $content = str_replace(['atob', 'eval'], '', $content);
 
         if (empty($title) || empty($content)) {
-            return Response::json(['status' => 'fail', 'message' => '请输入标题和内容']);
+            return Response::json([
+                'status' => 'fail', 'message' => trans('validation.required', ['attribute' => trans('validation.attributes.title').'&'.trans('validation.attributes.content')]),
+            ]);
         }
 
-        if ($user->tickets()->create(['title' => $title, 'content' => $content])) {
-            $emailTitle = '新工单提醒';
-            $content = '标题:【'.$title.'】<br>用户:'.$user->email.'<br>内容:'.$content;
+        if ($user->tickets()->create(compact('title', 'content'))) {
+            $emailTitle = trans('common.new').trans('user.ticket.attribute');
+            $content = trans('validation.attributes.title').':【'.$title.'】<br>'.trans('validation.attributes.email').':'.$user->email.'<br>'.trans('validation.attributes.content').':'.$content;
 
             // 发邮件通知管理员
             if (sysConfig('webmaster_email')) {
@@ -294,10 +295,10 @@ class UserController extends Controller
 
             PushNotification::send($emailTitle, $content);
 
-            return Response::json(['status' => 'success', 'message' => '提交成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.submit_item', ['attribute' => trans('common.success')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '提交失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('common.submit_item', ['attribute' => trans('common.failed')])]);
     }
 
     // 回复工单
@@ -311,11 +312,13 @@ class UserController extends Controller
             $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
 
             if (empty($content)) {
-                return Response::json(['status' => 'fail', 'message' => '回复内容不能为空']);
+                return Response::json([
+                    'status' => 'fail', 'message' => trans('validation.required', ['attribute' => trans('validation.attributes.title').'&'.trans('validation.attributes.content')]),
+                ]);
             }
 
             if ($ticket->status === 2) {
-                return Response::json(['status' => 'fail', 'message' => '错误:该工单已关闭']);
+                return Response::json(['status' => 'fail', 'message' => trans('user.ticket.failed_closed')]);
             }
 
             if ($ticket->reply()->create(['user_id' => auth()->id(), 'content' => $content])) {
@@ -323,8 +326,8 @@ class UserController extends Controller
                 $ticket->status = 0;
                 $ticket->save();
 
-                $title = '工单回复提醒';
-                $content = '标题:【'.$ticket->title.'】<br>用户回复:'.$content;
+                $title = trans('user.ticket.attribute').trans('user.ticket.reply');
+                $content = trans('validation.attributes.title').':【'.$ticket->title.'】<br>'.trans('user.ticket.reply').':'.$content;
 
                 // 发邮件通知管理员
                 if (sysConfig('webmaster_email')) {
@@ -334,14 +337,14 @@ class UserController extends Controller
 
                 PushNotification::send($title, $content);
 
-                return Response::json(['status' => 'success', 'message' => '回复成功']);
+                return Response::json(['status' => 'success', 'message' => trans('user.ticket.reply').trans('common.success')]);
             }
 
-            return Response::json(['status' => 'fail', 'message' => '回复失败']);
+            return Response::json(['status' => 'fail', 'message' => trans('user.ticket.reply').trans('common.failed')]);
         }
 
         return view('user.replyTicket', [
-            'ticket' => $ticket,
+            'ticket'    => $ticket,
             'replyList' => $ticket->reply()->with('user')->oldest()->get(),
         ]);
     }
@@ -352,12 +355,12 @@ class UserController extends Controller
         $id = $request->input('id');
 
         if (Ticket::uid()->whereId($id)->close()) {
-            PushNotification::send('工单关闭提醒', '工单:ID'.$id.'用户已手动关闭');
+            PushNotification::send(trans('common.close_item', ['attribute' => trans('user.ticket.attribute')]), trans('user.ticket.close_msg', ['id' => $id]));
 
-            return Response::json(['status' => 'success', 'message' => '关闭成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.close_item', ['attribute' => trans('common.success')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '关闭失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('common.close_item', ['attribute' => trans('common.failed')])]);
     }
 
     // 邀请码
@@ -366,14 +369,14 @@ class UserController extends Controller
         if (Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist()) {
             return Response::view(
                 'auth.error',
-                ['message' => '本功能对非付费用户禁用!请 <a class="btn btn-sm btn-danger" href="/">返 回</a>'],
+                ['message' => trans('user.purchase_required').' <a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'],
                 402
             );
         }
 
         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'),
         ]);
@@ -384,7 +387,7 @@ class UserController extends Controller
     {
         $user = auth()->user();
         if ($user->invite_num <= 0) {
-            return Response::json(['status' => 'fail', 'message' => '生成失败:已无邀请码生成名额']);
+            return Response::json(['status' => 'fail', 'message' => trans('user.invite.generate_failed')]);
         }
 
         $obj = new Invite();
@@ -395,10 +398,10 @@ class UserController extends Controller
         if ($obj) {
             $user->update(['invite_num' => $user->invite_num - 1]);
 
-            return Response::json(['status' => 'success', 'message' => '生成成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.generate_item', ['attribute' => trans('common.success')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '生成邀请码失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('common.generate_item', ['attribute' => trans('common.failed')])]);
     }
 
     // 使用优惠券
@@ -408,44 +411,46 @@ class UserController extends Controller
         $good_price = $request->input('price');
 
         if (empty($coupon_sn)) {
-            return Response::json(['status' => 'fail', 'title' => '使用失败', 'message' => '请输入您的优惠劵!']);
+            return Response::json([
+                'status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('validation.required', ['attribute' => trans('user.coupon.attribute')]),
+            ]);
         }
 
         $coupon = Coupon::whereSn($coupon_sn)->whereIn('type', [1, 2])->first();
         if (! $coupon) {
-            return Response::json(['status' => 'fail', 'title' => '优惠券不存在', 'message' => '请确认优惠券是否输入正确!']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.unknown').trans('user.coupon.attribute')]);
         }
 
         if ($coupon->status === 1) {
-            return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已被使用!']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.sorry'), 'message' => trans('user.coupon.attribute').trans('user.status.used')]);
         }
 
         if ($coupon->status === 2) {
-            return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已失效!']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.sorry'), 'message' => trans('user.coupon.attribute').trans('user.status.expired')]);
         }
 
-        if ($coupon->end_time < time()) {
+        if ($coupon->getRawOriginal('end_time') < time()) {
             $coupon->status = 2;
             $coupon->save();
 
-            return Response::json(['status' => 'fail', 'title' => '抱歉', 'message' => '优惠券已失效!']);
+            return Response::json(['status' => 'fail', 'title' => trans('common.sorry'), 'message' => trans('user.coupon.attribute').trans('user.status.expired')]);
         }
 
         if ($coupon->start_time > date('Y-m-d H:i:s')) {
-            return Response::json(['status' => 'fail', 'title' => '优惠券尚未生效', 'message' => '请等待活动正式开启']);
+            return Response::json(['status' => 'fail', 'title' => trans('user.coupon.inactive'), 'message' => trans('user.coupon.wait_active', ['time' => $coupon->start_time])]);
         }
 
         if ($good_price < $coupon->rule) {
-            return Response::json(['status' => 'fail', 'title' => '使用条件未满足', 'message' => '请购买价格更高的套餐']);
+            return Response::json(['status' => 'fail', 'title' => trans('user.coupon.limit'), 'message' => trans('user.coupon.higher', ['amount' => $coupon->rule])]);
         }
 
         $data = [
-            'name' => $coupon->name,
-            'type' => $coupon->type,
+            'name'  => $coupon->name,
+            'type'  => $coupon->type,
             'value' => $coupon->value,
         ];
 
-        return Response::json(['status' => 'success', 'data' => $data, 'message' => '优惠券有效']);
+        return Response::json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('user.coupon.attribute')])]);
     }
 
     // 购买服务
@@ -457,8 +462,8 @@ class UserController extends Controller
 
         return view('user.buy', [
             'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? Helpers::daysToNow($dataPlusDays) : 0,
-            'activePlan' => Order::userActivePlan()->exists(),
-            'goods' => $good,
+            'activePlan'   => Order::userActivePlan()->exists(),
+            'goods'        => $good,
         ]);
     }
 
@@ -482,24 +487,24 @@ class UserController extends Controller
         $subscribe_link = route('sub', $subscribe->code);
 
         return view('user.help', [
-            'sub' => $data,
-            'paying_user' => auth()->user()->activePayingUser(), // 付费用户判断
-            'Shadowrocket_install' => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Shadowrocket.plist', // 客户端安装
-            'Quantumult_install' => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Quantumult.plist', // 客户端安装
-            'subscribe_status' => $subscribe->status, // 订阅连接
-            'link' => $subscribe_link,
-            'subscribe_link' => 'sub://'.base64url_encode($subscribe_link),
-            'Shadowrocket_link' => 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.urlencode(sysConfig('website_name').' '.sysConfig('website_url')),
+            'sub'                     => $data,
+            'paying_user'             => auth()->user()->activePayingUser(), // 付费用户判断
+            'Shadowrocket_install'    => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Shadowrocket.plist', // 客户端安装
+            'Quantumult_install'      => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Quantumult.plist', // 客户端安装
+            'subscribe_status'        => $subscribe->status, // 订阅连接
+            'link'                    => $subscribe_link,
+            'subscribe_link'          => 'sub://'.base64url_encode($subscribe_link),
+            'Shadowrocket_link'       => 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.urlencode(sysConfig('website_name').' '.sysConfig('website_url')),
             'Shadowrocket_linkQrcode' => 'sub://'.base64url_encode($subscribe_link).'#'.base64url_encode(sysConfig('website_name')),
-            'Clash_link' => "clash://install-config?url={$subscribe_link}",
-            'Surge_link' => "surge:///install-config?url={$subscribe_link}",
-            'Quantumultx' => 'quantumult-x:///update-configuration?remote-resource='.json_encode([
-                'server_remote' => "{$subscribe_link},  tag=".urlencode(sysConfig('website_name').' '.sysConfig('website_url')),
-                'filter_remote' => '',
+            'Clash_link'              => "clash://install-config?url={$subscribe_link}",
+            'Surge_link'              => "surge:///install-config?url={$subscribe_link}",
+            'Quantumultx'             => 'quantumult-x:///update-configuration?remote-resource='.json_encode([
+                'server_remote'  => "{$subscribe_link},  tag=".urlencode(sysConfig('website_name').' '.sysConfig('website_url')),
+                'filter_remote'  => '',
                 'rewrite_remote' => '',
             ]),
-            'Quantumult_linkOut' => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Pro.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
-            'Quantumult_linkIn' => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/BacktoCN.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
+            'Quantumult_linkOut'      => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Pro.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
+            'Quantumult_linkIn'       => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/BacktoCN.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
         ]);
     }
 
@@ -517,13 +522,13 @@ class UserController extends Controller
 
             DB::commit();
 
-            return Response::json(['status' => 'success', 'message' => '更换成功']);
+            return Response::json(['status' => 'success', 'message' => trans('common.replace').trans('common.success')]);
         } catch (Exception $e) {
             DB::rollBack();
 
-            Log::error('更换订阅地址异常:'.$e->getMessage());
+            Log::error(trans('user.subscribe.error').':'.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => '更换失败'.$e->getMessage()]);
+            return Response::json(['status' => 'fail', 'message' => trans('common.replace').trans('common.failed').$e->getMessage()]);
         }
     }
 
@@ -531,17 +536,17 @@ class UserController extends Controller
     public function switchToAdmin(): JsonResponse
     {
         if (! Session::has('admin')) {
-            return Response::json(['status' => 'fail', 'message' => '非法请求']);
+            return Response::json(['status' => 'fail', 'message' => trans('error.unauthorized')]);
         }
 
         // 管理员信息重新写入user
         $user = auth()->loginUsingId(Session::get('admin'));
         Session::forget('admin');
         if ($user) {
-            return Response::json(['status' => 'success', 'message' => '身份切换成功']);
+            return Response::json(['status' => 'success', 'message' => trans('toggle_action', ['action' => trans('common.success')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => '身份切换失败']);
+        return Response::json(['status' => 'fail', 'message' => trans('toggle_action', ['action' => trans('common.failed')])]);
     }
 
     public function charge(Request $request): ?JsonResponse
@@ -552,7 +557,7 @@ class UserController extends Controller
                     $query->whereType(3)->whereStatus(0);
                 }),
             ],
-        ], ['coupon_sn.required' => '券码不能为空', 'coupon_sn.exists' => '该券不可用']);
+        ]);
 
         if ($validator->fails()) {
             return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
@@ -564,7 +569,8 @@ class UserController extends Controller
             DB::beginTransaction();
             // 写入日志
             $user = auth()->user();
-            Helpers::addUserCreditLog($user->id, null, $user->credit, $user->credit + $coupon->value, $coupon->value, '用户手动充值 - [充值券:'.$request->input('coupon_sn').']');
+            Helpers::addUserCreditLog($user->id, null, $user->credit, $user->credit + $coupon->value, $coupon->value,
+                trans('user.recharge').' - ['.trans('user.coupon.recharge').':'.$request->input('coupon_sn').']');
 
             // 余额充值
             $user->updateCredit($coupon->value);
@@ -573,16 +579,16 @@ class UserController extends Controller
             $coupon->update(['status' => 1]);
 
             // 写入卡券日志
-            Helpers::addCouponLog('账户余额充值使用', $coupon->id);
+            Helpers::addCouponLog(trans('user.recharge_credit'), $coupon->id);
 
             DB::commit();
 
-            return Response::json(['status' => 'success', 'message' => '充值成功']);
+            return Response::json(['status' => 'success', 'message' => trans('user.recharge').trans('common.success')]);
         } catch (Exception $e) {
-            Log::error('卡劵充值错误:'.$e->getMessage());
+            Log::error(trans('user.recharge').trans('common.failed').$e->getMessage());
             DB::rollBack();
 
-            return Response::json(['status' => 'fail', 'message' => '充值失败']);
+            return Response::json(['status' => 'fail', 'message' => trans('user.recharge').trans('common.failed')]);
         }
     }
 }

+ 5 - 5
app/Http/Middleware/isForbidden.php

@@ -25,7 +25,7 @@ class isForbidden
         if (sysConfig('is_forbid_robot') && Agent::isRobot()) {
             Log::info('识别到机器人访问('.IP::getClientIp().')');
 
-            return Response::view('auth.error', ['message' => trans('error.ForbiddenRobot')], 403);
+            return Response::view('auth.error', ['message' => trans('error.forbidden.bots')], 403);
         }
 
         // 拒绝通过订阅链接域名访问网站,防止网站被探测
@@ -41,7 +41,7 @@ class isForbidden
 
         // 拒绝无IP请求
         if (! $ipLocation || empty(array_filter($ipLocation))) {
-            return Response::view('auth.error', ['message' => trans('error.ForbiddenAccess')], 403);
+            return Response::view('auth.error', ['message' => trans('error.forbidden.access')], 403);
         }
 
         if (! in_array($ipLocation['country'], ['本机地址', '局域网']) && sysConfig('forbid_mode')) {
@@ -51,21 +51,21 @@ class isForbidden
                     if (in_array($ipLocation['country'], ['China', '中国']) && ! in_array($ipLocation['province'], ['香港', '澳门', '台湾', '台湾省'])) {
                         Log::info('识别到大陆IP,拒绝访问:'.$ip);
 
-                        return Response::view('auth.error', ['message' => trans('error.ForbiddenChina')], 403);
+                        return Response::view('auth.error', ['message' => trans('error.forbidden.china')], 403);
                     }
                     break;
                 case 'ban_china':
                     if (in_array($ipLocation['country'], ['China', '中国', 'Taiwan', 'Hong Kong', 'Macao'])) {
                         Log::info('识别到中国IP,拒绝访问:'.$ip);
 
-                        return Response::view('auth.error', ['message' => trans('error.ForbiddenChina')], 403);
+                        return Response::view('auth.error', ['message' => trans('error.forbidden.china')], 403);
                     }
                     break;
                 case 'ban_oversea':
                     if (! in_array($ipLocation['country'], ['China', '中国', 'Taiwan', 'Hong Kong', 'Macao'])) {
                         Log::info('识别到海外IP,拒绝访问:'.$ip.' - '.$ipLocation['country']);
 
-                        return Response::view('auth.error', ['message' => trans('error.ForbiddenOversea')], 403);
+                        return Response::view('auth.error', ['message' => trans('error.forbidden.oversea')], 403);
                     }
                     break;
                 default:

+ 2 - 2
app/Http/Middleware/isSecurity.php

@@ -27,12 +27,12 @@ class isSecurity
 
         if ($websiteSecurityCode && ! Cache::has($cacheKey)) {
             if ($code !== $websiteSecurityCode) {
-                Log::info('拒绝非安全入口访问('.$ip.')');
+                Log::info(trans('error.unsafe_enter').$ip);
 
                 return Response::view(
                     'auth.error',
                     [
-                        'message' => trans('error.SecurityError').','.trans('error.Visit').'<a href="'.route('login').'?securityCode=" target="_self">'.trans('error.SecurityEnter').'</a>',
+                        'message' => trans('error.unsafe_enter').','.trans('error.visit').'<a href="'.route('login').'?securityCode=" target="_self">'.trans('error.safe_enter').'</a>',
                     ],
                     403
                 );

+ 0 - 16
app/Http/Requests/Auth/RegisterRequest.php

@@ -12,23 +12,7 @@ class RegisterRequest extends FormRequest
             'username' => 'required',
             'email' => 'required|email|unique:user',
             'password' => 'required|min:6|confirmed',
-            'password_confirmation' => 'required|same:password',
             'term' => 'accepted',
         ];
     }
-
-    public function messages()
-    {
-        return [
-            'username.required' => trans('auth.email_null'),
-            'email.required' => trans('auth.email_null'),
-            'email.email' => trans('auth.email_legitimate'),
-            'email.unique' => trans('auth.email_exist'),
-            'password.required' => trans('auth.password_null'),
-            'password.min' => trans('auth.password_limit'),
-            'password_confirmation.required' => trans('auth.confirm_password'),
-            'password_confirmation.same' => trans('auth.password_same'),
-            'term.accepted' => trans('auth.unaccepted'),
-        ];
-    }
 }

+ 1 - 1
app/Mail/sendVerifyCode.php

@@ -24,7 +24,7 @@ class sendVerifyCode extends Mailable implements ShouldQueue
 
     public function build(): sendVerifyCode
     {
-        return $this->view('emails.sendVerifyCode')->subject('发送注册验证码')->with(['code' => $this->code]);
+        return $this->view('emails.sendVerifyCode')->subject(trans('auth.register.code'))->with(['code' => $this->code]);
     }
 
     // 发件失败处理

+ 3 - 3
app/Models/Invite.php

@@ -37,13 +37,13 @@ class Invite extends Model
     {
         switch ($this->attributes['status']) {
             case 0:
-                $status_label = '<span class="badge badge-success">'.trans('home.invite_code_table_status_un').'</span>';
+                $status_label = '<span class="badge badge-success">'.trans('user.status.unused').'</span>';
                 break;
             case 1:
-                $status_label = '<span class="badge badge-danger">'.trans('home.invite_code_table_status_yes').'</span>';
+                $status_label = '<span class="badge badge-danger">'.trans('user.status.used').'</span>';
                 break;
             case 2:
-                $status_label = '<span class="badge badge-default">'.trans('home.invite_code_table_status_expire').'</span>';
+                $status_label = '<span class="badge badge-default">'.trans('user.status.expired').'</span>';
                 break;
             default:
                 $status_label = '<span class="badge badge-default"> 未知 </span>';

+ 19 - 13
app/Models/Order.php

@@ -105,19 +105,28 @@ class Order extends Model
     {
         switch ($this->attributes['status']) {
             case -1:
-                $status_label = trans('home.invoice_status_closed');
+                $status_label = '<span class="badge badge-default">'.trans('user.status.closed').'</span>';
+                break;
+            case 0:
+                $status_label = '<span class="badge badge-danger">'.trans('user.status.waiting_payment').'</span>';
                 break;
             case 1:
-                $status_label = trans('home.invoice_status_wait_confirm');
+                $status_label = '<span class="badge badge-info">'.trans('user.status.waiting_confirm').'</span>';
                 break;
             case 2:
-                $status_label = trans('home.invoice_status_payment_confirm');
+                if ($this->attributes['goods_id'] === 0) {
+                    $status_label = '<span class="badge badge-default">'.trans('user.status.completed').'</span>';
+                } elseif ($this->attributes['is_expire']) {
+                    $status_label = '<span class="badge badge-default">'.trans('user.status.expired').'</span>';
+                } else {
+                    $status_label = '<span class="badge badge-success">'.trans('user.status.using').'</span>';
+                }
                 break;
-            case 0:
-                $status_label = trans('home.invoice_status_wait_payment');
+            case 3:
+                $status_label = '<span class="badge badge-info">'.trans('user.status.prepaid').'</span>';
                 break;
             default:
-                $status_label = 'Unknown';
+                $status_label = trans('user.unknown');
         }
 
         return $status_label;
@@ -148,19 +157,19 @@ class Order extends Model
     {
         switch ($this->attributes['pay_type']) {
             case 0:
-                $pay_type_label = '余额';
+                $pay_type_label = trans('common.payment.credit');
                 break;
             case 1:
-                $pay_type_label = '支付宝';
+                $pay_type_label = trans('common.payment.alipay');
                 break;
             case 2:
                 $pay_type_label = 'QQ';
                 break;
             case 3:
-                $pay_type_label = '微信';
+                $pay_type_label = trans('common.payment.wechat');
                 break;
             case 4:
-                $pay_type_label = '虚拟货币';
+                $pay_type_label = trans('common.payment.crypto');
                 break;
             case 5:
                 $pay_type_label = 'PayPal';
@@ -168,9 +177,6 @@ class Order extends Model
             case 6:
                 $pay_type_label = 'Stripe';
                 break;
-            case 7:
-                $pay_type_label = 'PayBeaver';
-                break;
             default:
                 $pay_type_label = '';
         }

+ 17 - 0
app/Models/ReferralApply.php

@@ -58,4 +58,21 @@ class ReferralApply extends Model
     {
         $this->attributes['amount'] = $value * 100;
     }
+
+    public function getStatusLabelAttribute(): string
+    {
+        switch ($this->attributes['status']) {
+            case 1:
+                $status_label = '<span class="badge badge-sm badge-info">'.trans('user.status.pending').'</span>';
+                break;
+            case 2:
+                $status_label = trans('user.status.withdrawn');
+                break;
+            case 0:
+            default:
+                $status_label = '<span class="badge badge-sm badge-warning">'.trans('user.status.applying').'</span>';
+        }
+
+        return $status_label;
+    }
 }

+ 16 - 0
app/Models/ReferralLog.php

@@ -52,4 +52,20 @@ class ReferralLog extends Model
     {
         $this->attributes['commission'] = $value * 100;
     }
+
+    public function getStatusLabelAttribute(): string
+    {
+        switch ($this->attributes['status']) {
+            case 1:
+                $status_label = '<span class="badge badge-sm badge-info">'.trans('user.status.applying').'</span>';
+                break;
+            case 2:
+                $status_label = '<span class="badge badge-sm badge-default">'.trans('user.status.withdrawn').'</span>';
+                break;
+            default:
+                $status_label = '<span class="badge badge-sm badge-success">'.trans('user.status.not_withdrawn').'</span>';
+        }
+
+        return $status_label;
+    }
 }

+ 4 - 4
app/Models/Ticket.php

@@ -46,16 +46,16 @@ class Ticket extends Model
     {
         switch ($this->attributes['status']) {
             case 0:
-                $status_label = '<span class="badge badge-lg badge-success">'.trans('home.ticket_table_status_wait').'</span>';
+                $status_label = '<span class="badge badge-lg badge-success">'.trans('user.status.pending').'</span>';
                 break;
             case 1:
-                $status_label = '<span class="badge badge-lg badge-danger">'.trans('home.ticket_table_status_reply').'</span>';
+                $status_label = '<span class="badge badge-lg badge-danger">'.trans('user.status.reply').'</span>';
                 break;
             case 2:
-                $status_label = '<span class="badge badge-lg badge-default">'.trans('home.ticket_table_status_close').'</span>';
+                $status_label = '<span class="badge badge-lg badge-default">'.trans('user.status.closed').'</span>';
                 break;
             default:
-                $status_label = '<span class="badge badge-lg badge-default"> 未知 </span>';
+                $status_label = '<span class="badge badge-lg badge-default">'.trans('user.unknown').'</span>';
         }
 
         return $status_label;

+ 3 - 3
app/helpers.php

@@ -67,14 +67,14 @@ if (! function_exists('seconds2time')) {
         $hour = floor(($seconds % Day) / Hour);
         $minute = floor((($seconds % Day) % Hour) / Minute);
         if ($day > 0) {
-            return $day.'天'.$hour.'小时'.$minute.'分';
+            return $day.trans('validation.attributes.day').$hour.trans('validation.attributes.hour').$minute.trans('validation.attributes.minute');
         }
 
         if ($hour != 0) {
-            return $hour.'小时'.$minute.'分';
+            return $hour.trans('validation.attributes.hour').$minute.trans('validation.attributes.minute');
         }
 
-        return $minute.'分';
+        return $minute.trans('validation.attributes.minute');
     }
 }
 

+ 80 - 79
composer.lock

@@ -2481,26 +2481,26 @@
         },
         {
             "name": "maxmind-db/reader",
-            "version": "v1.8.0",
+            "version": "v1.9.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
-                "reference": "b566d429ac9aec10594b0935be8ff38302f8d5c8"
+                "reference": "9ee9ba9ee287b119e9f5a8e8dbfea0b49647cec4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b566d429ac9aec10594b0935be8ff38302f8d5c8",
-                "reference": "b566d429ac9aec10594b0935be8ff38302f8d5c8",
+                "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/9ee9ba9ee287b119e9f5a8e8dbfea0b49647cec4",
+                "reference": "9ee9ba9ee287b119e9f5a8e8dbfea0b49647cec4",
                 "shasum": ""
             },
             "require": {
                 "php": ">=7.2"
             },
             "conflict": {
-                "ext-maxminddb": "<1.8.0,>=2.0.0"
+                "ext-maxminddb": "<1.9.0,>=2.0.0"
             },
             "require-dev": {
-                "friendsofphp/php-cs-fixer": "2.*",
+                "friendsofphp/php-cs-fixer": "*",
                 "php-coveralls/php-coveralls": "^2.1",
                 "phpunit/phpcov": ">=6.0.0",
                 "phpunit/phpunit": ">=8.0.0,<10.0.0",
@@ -2539,9 +2539,9 @@
             ],
             "support": {
                 "issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
-                "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.8.0"
+                "source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.9.0"
             },
-            "time": "2020-10-01T17:30:21+00:00"
+            "time": "2021-01-07T21:15:29+00:00"
         },
         {
             "name": "maxmind/web-service-common",
@@ -3307,7 +3307,7 @@
         },
         {
             "name": "phpoffice/phpspreadsheet",
-            "version": "1.16.1",
+            "version": "1.16.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
@@ -3402,7 +3402,7 @@
             ],
             "support": {
                 "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
-                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.16.1"
+                "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.16.0"
             },
             "time": "2020-12-31T18:03:49+00:00"
         },
@@ -5390,16 +5390,16 @@
         },
         {
             "name": "symfony/polyfill-ctype",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-ctype.git",
-                "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41"
+                "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41",
-                "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41",
+                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
+                "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
                 "shasum": ""
             },
             "require": {
@@ -5411,7 +5411,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5449,7 +5449,7 @@
                 "portable"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5465,20 +5465,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-iconv",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-iconv.git",
-                "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024"
+                "reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024",
-                "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024",
+                "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6",
+                "reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6",
                 "shasum": ""
             },
             "require": {
@@ -5490,7 +5490,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5529,7 +5529,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-iconv/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5545,20 +5545,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-intl-grapheme",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
-                "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c"
+                "reference": "267a9adeb8ecb8071040a740930e077cdfb987af"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c",
-                "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af",
+                "reference": "267a9adeb8ecb8071040a740930e077cdfb987af",
                 "shasum": ""
             },
             "require": {
@@ -5570,7 +5570,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5610,7 +5610,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5626,20 +5626,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-intl-idn",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-idn.git",
-                "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117"
+                "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117",
-                "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
+                "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44",
                 "shasum": ""
             },
             "require": {
@@ -5653,7 +5653,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5697,7 +5697,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5713,20 +5713,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-intl-normalizer",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
-                "reference": "727d1096295d807c309fb01a851577302394c897"
+                "reference": "6e971c891537eb617a00bb07a43d182a6915faba"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897",
-                "reference": "727d1096295d807c309fb01a851577302394c897",
+                "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba",
+                "reference": "6e971c891537eb617a00bb07a43d182a6915faba",
                 "shasum": ""
             },
             "require": {
@@ -5738,7 +5738,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5781,7 +5781,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5797,20 +5797,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T17:09:11+00:00"
         },
         {
             "name": "symfony/polyfill-mbstring",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-mbstring.git",
-                "reference": "39d483bdf39be819deabf04ec872eb0b2410b531"
+                "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531",
-                "reference": "39d483bdf39be819deabf04ec872eb0b2410b531",
+                "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
+                "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13",
                 "shasum": ""
             },
             "require": {
@@ -5822,7 +5822,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -5861,7 +5861,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -5877,7 +5877,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-php56",
@@ -5949,16 +5949,16 @@
         },
         {
             "name": "symfony/polyfill-php72",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php72.git",
-                "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930"
+                "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930",
-                "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930",
+                "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
+                "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
                 "shasum": ""
             },
             "require": {
@@ -5967,7 +5967,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -6005,7 +6005,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -6021,20 +6021,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-php73",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php73.git",
-                "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed"
+                "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed",
-                "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed",
+                "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
+                "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
                 "shasum": ""
             },
             "require": {
@@ -6043,7 +6043,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -6084,7 +6084,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -6100,20 +6100,20 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/polyfill-php80",
-            "version": "v1.20.0",
+            "version": "v1.22.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/polyfill-php80.git",
-                "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de"
+                "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
-                "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de",
+                "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
+                "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
                 "shasum": ""
             },
             "require": {
@@ -6122,7 +6122,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-main": "1.20-dev"
+                    "dev-main": "1.22-dev"
                 },
                 "thanks": {
                     "name": "symfony/polyfill",
@@ -6167,7 +6167,7 @@
                 "shim"
             ],
             "support": {
-                "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0"
+                "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0"
             },
             "funding": [
                 {
@@ -6183,7 +6183,7 @@
                     "type": "tidelift"
                 }
             ],
-            "time": "2020-10-23T14:02:19+00:00"
+            "time": "2021-01-07T16:49:33+00:00"
         },
         {
             "name": "symfony/process",
@@ -7766,16 +7766,16 @@
         },
         {
             "name": "barryvdh/laravel-debugbar",
-            "version": "v3.5.1",
+            "version": "v3.5.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/barryvdh/laravel-debugbar.git",
-                "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc"
+                "reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/233c10688f4c1a6e66ed2ef123038b1363d1bedc",
-                "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc",
+                "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/cae0a8d1cb89b0f0522f65e60465e16d738e069b",
+                "reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b",
                 "shasum": ""
             },
             "require": {
@@ -7788,6 +7788,7 @@
                 "symfony/finder": "^4.3|^5"
             },
             "require-dev": {
+                "mockery/mockery": "^1.3.3",
                 "orchestra/testbench-dusk": "^4|^5|^6",
                 "phpunit/phpunit": "^8.5|^9.0",
                 "squizlabs/php_codesniffer": "^3.5"
@@ -7834,7 +7835,7 @@
             ],
             "support": {
                 "issues": "https://github.com/barryvdh/laravel-debugbar/issues",
-                "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.1"
+                "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.2"
             },
             "funding": [
                 {
@@ -7842,7 +7843,7 @@
                     "type": "github"
                 }
             ],
-            "time": "2020-09-07T19:32:39+00:00"
+            "time": "2021-01-06T14:21:44+00:00"
         },
         {
             "name": "barryvdh/laravel-ide-helper",

+ 1 - 1
config/geetest.php

@@ -1,7 +1,7 @@
 <?php
 
 return [
-    'lang' => 'zh-cn',
+    'lang' => app()->getLocale(),
     'server-get-config' => true,
     'id' => env('GEETEST_ID'),
     'key' => env('GEETEST_KEY'),

+ 0 - 2
config/laravel-lang.php

@@ -17,10 +17,8 @@ return [
      */
 
     'locales' => [
-        'ja',
         'ko',
         'zh-CN',
-        'zh-TW',
     ],
 
     /* -----------------------------------------------------------------

+ 74 - 71
resources/lang/en/auth.php

@@ -1,75 +1,78 @@
 <?php
 
 return [
-    'username' => 'Username',
-    'active' => 'Activate',
-    'active_account' => 'Activate account',
-    'active_tip' => 'Account is not active yet, Please ',
-    'captcha' => 'Verification code',
-    'code' => 'Invite Code',
-    'optional' => 'Optional',
-    'login' => 'Sign In',
-    'register' => 'Sign Up',
-    'send' => 'Send',
-    'tip' => 'Tip',
-    'email' => 'Email',
-    'password' => 'Password',
-    'confirm_password' => 'Please renter your password',
-    'back' => 'Back',
-    'close' => 'Close',
-    'submit' => 'Submit',
-    'request' => 'Request',
-    'remember' => 'Remember Me',
-    'resetPassword' => 'Reset Password',
-    'new_password' => 'Enter a new password',
-    'forget_password' => 'Find my Password',
-    'reset_password' => 'Reset Password',
-    'get_free_code' => 'Click to get a free invitation code',
-    'accept_term' => 'I have read and agree to obey',
-    'tos' => 'Terms of Service',
-    'aup' => 'Acceptable Use Policy',
-    'register_tip' => 'Still no account? Please go to',
-    'system_maintenance' => 'The system is being maintained',
-    'system_maintenance_tip' => 'System in under maintenance, please email :email if you need an account',
-    'overtime' => 'The link has expired',
-
-    'active_success' => 'Successful activation',
-    'active_fail' => 'Activation fail',
-    'active_limit' => 'You have triggered the activation request restriction mechanism, do not operate frequently! If you have any questions, please contact :email',
-    'active_close' => 'The account activation function has been disabled, please contact :email',
-    'code_null' => 'Please enter invite code',
-    'captcha_null' => 'Please enter Verification code',
-    'captcha_error' => 'The Verification code is incorrect, please input the code again',
-    'captcha_overtime' => 'The verification code is invalid! Please refresh and try again',
-    'captcha_loading' => 'Loading Verification code...',
-    'captcha_required' => 'Please complete the Verification code operation correctly',
-    'captcha_fail' => 'Server verification failed, please try again',
-    'captcha_close' => 'Verification code registration is disable',
-    'captcha_send' => 'Verification code sent',
-    'code_error' => 'The invitation code is invalid! Please try again',
-    'username_null' => 'Please enter your username',
-    'email_null' => 'Please enter your email address',
-    'email_normal' => 'Your account has been activated',
-    'email_legitimate' => 'Account must be a legitimate email',
-    'email_banned' => 'The mailbox contains sensitive words. Please use another valid email',
-    'email_exist' => 'Email have been register! If you forget your password, please use "Find my Password" to reset your password',
-    'email_notExist' => 'The account does not exist. Please try again',
-    'login_error' => 'Wrong password or email address',
-    'login_ban' => 'Your email is banned',
-    'password_null' => 'Please enter your password',
-    'password_limit' => 'Password is too short',
-    'password_same' => 'The passwords you typed do not match',
-    'register_close' => 'We close the registration for new users, please email :email the administrator',
-    'register_anti' => 'Anti-robot registration is enabled! Please do not register Multiple accounts',
-    'register_fail' => 'Registration failed, please try later',
-    'register_success' => 'Registered successfully',
-    'register_active_tip' => 'Activation email sent! Please check the mailbox (the email may be in the Trash)',
-    'repeat_request' => 'Please refresh the page and try again',
-    'reset_password_close' => '"Find my Password"function is disabled.If you need help, Please email :email',
-    'reset_password_limit' => 'Password can only be reset :time times within 24 hours!',
-    'reset_password_success_tip' => 'Reset successfully! Please check the mailbox (the email may be in the Trash)',
-    'reset_password_same_fail' => 'The new password is the same as the old one. Please renter',
-    'reset_password_fail' => 'Password reset failed',
-    'reset_password_new' => 'The new password has been set successfully!',
-    'request_error' => 'Request exception, Please refresh and try again',
+    'accept_term'     => 'I have read and agree to obey',
+    'active'          => [
+        'attribute' => 'Activation',
+        'error'     => [
+            'activated' => 'The account has been activated, no need to activate again',
+            'disable'   => 'The account activation subsystem has been disabled, you can login directly!',
+            'throttle'  => 'Anti-bots Shield Active! Please do not send multiple activate from at short amount of times! If you have any questions, please contact :email',
+        ],
+        'promotion' => ['0' => 'Account has not been activated,Please', '1' => 'before login!'],
+        'sent'      => 'Email has been sent! Please check your mailbox! (Email may be in the Trash)',
+    ],
+    'aup'             => 'Acceptable Use Policy',
+    'captcha'         => [
+        'attribute' => 'Captcha',
+        'error'     => ['failed' => 'Verification failed, please try again', 'timeout' => 'The code is invalid! 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)',
+    ],
+    'email'           => [
+        'error' => [
+            'banned'  => 'Your email service provider was banned by our platform. Please use another valid email',
+            'invalid' => 'Your email service provider is not in our supporting 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!',
+        'repeat_request' => 'Please refresh the page and try again',
+        'url_timeout'    => 'The link has expired, please try again',
+    ],
+    'invite'          => [
+        'attribute'    => 'Invitation code',
+        'error'        => ['unavailable' => 'Invitation code is invalid!'],
+        'get'          => 'Click to get the invitation code',
+        'not_required' => 'No invitation code is required, you can register directly!',
+    ],
+    'login'           => 'Login',
+    'logout'          => 'Logout',
+    'maintenance'     => 'Maintain',
+    'maintenance_tip' => 'Website under maintenance',
+    'optional'        => 'Optional',
+    'password'        => [
+        'forget'   => 'forget password?',
+        'new'      => 'Enter a new password',
+        'original' => 'Original Password',
+        'reset'    => [
+            'attribute' => 'Reset Password',
+            'error'     => [
+                'disabled' => 'The password reset subsystem has been disabled, you can contact :email for help',
+                'failed'   => 'Password reset failed',
+                'throttle' => 'Password can only be reset :time times within 24 hours, Please Do not operate too frequently',
+                'same'     => 'The new password cannot be the same as the old password, please re-enter',
+                'wrong'    => 'The password is incorrect, please re-enter',
+                'demo'     => 'You can not change administrator password under Demo environment',
+            ],
+            'sent'      => 'Reset link has been sent to your email, please check the mailbox (the email may be in the Trash)',
+            'success'   => 'The password has been reset successfully, please go to login',
+        ],
+    ],
+    'register'        => [
+        'attribute' => 'Register',
+        'code'      => 'Registration Code',
+        'error'     => [
+            'disable'  => 'Sorry, The registration function has been disabled',
+            'throttle' => 'Anti-bots shield is active! Please do not send multiple register from at short amount of times!',
+        ],
+        'promotion' => 'No account yet? Please go to',
+        'failed'    => 'Registration failed, please try later',
+        'success'   => 'Registration successfully',
+    ],
+    'remember_me'     => 'Remember me',
+    'request'         => 'Request',
+    'tos'             => 'Terms of Service',
 ];

+ 85 - 0
resources/lang/en/common.php

@@ -0,0 +1,85 @@
+<?php
+
+return [
+    'account'        => 'Account',
+    'available_date' => 'Available Until/Period',
+    'created_at'     => 'Created At',
+    'expired_at'     => 'Expired At',
+    'updated_at'     => 'Updated At',
+    'back'           => 'Back',
+    'cancel'         => 'Cancel',
+    'close'          => 'Close',
+    'close_item'     => 'Close :attribute',
+    'confirm'        => 'Confirm',
+    'continues'      => 'Continues',
+    'open'           => 'Open',
+    'send'           => 'Send',
+    'view'           => 'View',
+    'reset'          => 'Rest',
+    'copy'           => [
+        'attribute' => 'Copy',
+        'success'   => 'Copy successfully',
+        'failed'    => 'Copy failed, please copy manually',
+    ],
+    'free'           => 'Free',
+    'replace'        => 'Change',
+    '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',
+    'failed'         => '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',
+        'fullscreen' => 'Fullscreen',
+    ],
+    'days'           => [
+        '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'        => [
+        'credit' => 'Credit',
+        'wechat' => 'Wechat',
+        'alipay' => 'Alipay',
+        'crypto' => 'Cryptocurrency',
+    ],
+    'recommend'      => 'Recommend',
+    'advance'        => 'Advance',
+    'status'         => 'Status',
+    'action'         => 'Action',
+];

+ 30 - 14
resources/lang/en/error.php

@@ -1,18 +1,34 @@
 <?php
 
 return [
-    'title' => 'ACCESS DENIED',
-    'ForbiddenRobot' => 'Robot Access Forbidden',
-    'ForbiddenAccess' => 'IP or Proxy Access Forbidden',
-    'ForbiddenChina' => 'China IP or Proxy Access Forbidden',
-    'ForbiddenOversea' => 'Oversea IP or Proxy Access Forbidden',
-    'MissingPage' => 'Page Not Found',
-    'Unauthorized' => 'Unauthorized visit',
-    'Refresh' => 'Refresh',
-    'RefreshPage' => 'Refresh Page, Try One More Time',
-    'SystemError' => 'System Error',
-    'Visit' => 'Please visit',
-    'log' => 'Logs',
-    'SecurityError' => 'unsafe visit',
-    'SecurityEnter' => 'Safety Enter',
+    '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',
+    'missing_page' => 'Page Not Found',
+    'refresh'      => 'Refresh',
+    'refresh_page' => 'Please Refresh Page, Then Try Again',
+    'report'       => 'Error comes back with log: ',
+    'safe_enter'   => 'Secure Entrance',
+    'system'       => 'System Error',
+    'title'        => '⚠️Error Detected',
+    'unauthorized' => 'Unauthorized Access',
+    'unsafe_enter' => 'Non-Secure Entrance',
+    'visit'        => 'Please visit',
+    'whoops'       => 'Whoops!',
+    'get_ip'       => 'Get IP information abnormal',
+    '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 Banned!',
+        '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',
+    ],
 ];

+ 0 - 203
resources/lang/en/home.php

@@ -1,203 +0,0 @@
-<?php
-
-return [
-    'panel' => 'User Panel',
-    'subscribe_help' => 'Interactive Tutorial',
-    'subscribe_link' => 'Subscription Address',
-    'copy_subscribe_address' => 'Copy Address',
-    'exchange_subscribe' => 'Exchange Address',
-    'subscribe_warning' => 'Warning: This subscription address is for personal use only. Do not propagate the address.',
-    'reset_password_title' => 'Reset Password',
-    'email_placeholder' => 'Please Enter Email',
-    'system_down' => 'The system is being maintained',
-    'subscribe_baned' => 'Your subscription function has been banned. Please contact the administrator.',
-    'download' => 'Download',
-    'sign_in' => 'Sign In',
-
-    // 菜单
-    'home' => 'Home',
-    'nodeList' => 'Servers',
-    'services' => 'Shop',
-    'traffic_log' => 'Monitor',
-    'help' => 'Help',
-    'invite_code' => 'Invite Code',
-    'invoices' => 'Invoices',
-    'tickets' => 'Tickets',
-    'referrals' => 'Referrals',
-    'free_invite_codes_title' => 'Free Invite Codes',
-    'no_need_invite_codes' => 'In the open registration system, no invitation code is required',
-
-    // 首页
-    'ratio_tips' => 'Recommends the use of support node subscription function of the client, through subscription function can quickly synchronize node information in the client.',
-    'subscribe_button' => 'Subscribe',
-    'account_info' => 'Account Info',
-    'account_level' => 'Level',
-    'account_credit' => 'Credit',
-    'account_score' => 'Score',
-    'account_status' => 'Status',
-    'account_expire' => 'Overdue At',
-    'account_last_usage' => 'Last Usage',
-    'account_last_login' => 'Last Login',
-    'account_bandwidth_usage' => 'Data Usage',
-    'account_total_traffic' => 'Total',
-    'account_usage_traffic' => 'Usage',
-    'account_reset_notice' => ':reset_day days unit data renew',
-    'account_login_log' => 'Login Log',
-    'article_title' => 'Article List',
-    'bandwidth' => 'Data Plan',
-    'recharge' => 'Recharge',
-    'enabled' => 'Normal',
-    'disabled' => 'Disabled',
-    'limited' => 'Limited',
-    'never_used' => 'Never Used',
-    'expired' => 'Expired',
-    'reason' => 'Reason',
-    'reason_expired' => 'Your account has expired',
-    'reason_traffic_exhausted' => 'You have used all of your available data',
-    'reason_overused' => 'Your hourly data usages <code>:data</code> GB has reached<br/> After <code id="countdown">:min</code> the limited will be lifted!',
-    'reason_unknown' => 'Unknown, Please open a ticket and ask a customer service',
-    'never_loggedin' => 'Never logged in',
-    'announcement' => 'Announcement',
-    'recharge_credit' => 'Recharge Credit',
-    'payment_method' => 'charge method',
-    'close' => 'Close',
-    'cancel' => 'Cancel',
-    'redeem_score' => 'Redeem for bandwidth',
-    'redeem' => 'Redeem',
-    'redeem_info' => 'You have got :score points and can redeem :score M free bandwidth.',
-    'coupon_code' => 'Coupon Code',
-    'please_input_coupon' => 'Please input the coupon code',
-    'scan_qrcode' => 'Scan qrcode with your client',
-    'setting_info' => 'Setting Information',
-    'ratio' => 'traffic ratio',
-    'coupon_not_empty' => 'Coupon code can not be empty',
-    'recharging' => 'Recharging...',
-    'error_response' => 'Error reponse, please retry',
-    'error' => 'Error',
-    'online_pay' => 'Online Pay',
-    'pay' => 'Pay Now',
-
-    // 用户资料
-    'submit' => 'Submit',
-    'contact' => 'Contact',
-    'ssr_setting' => 'Proxy Setting',
-    'password' => 'Password',
-    'new_password' => 'New Password',
-    'current_password' => 'Current Password',
-    'wechat' => 'Wechat',
-    'connection_password' => 'Connection Password',
-    'encrpytion' => 'Encrpytion',
-    'protocal' => 'Protocal',
-    'obfs' => 'OBFS',
-
-    // 购买服务
-    'service_title' => 'Services',
-    'service_name' => 'Service',
-    'service_desc' => 'Description',
-    'service_type' => 'Type',
-    'service_price' => 'Sales Price',
-    'service_quantity' => 'Quantity',
-    'service_subtotal_price' => 'Subtotal Price',
-    'service_total_price' => 'Total Price',
-    'service_pay_button' => 'Pay',
-    'services_none' => 'None Services',
-    'service_traffic' => 'Traffic',
-    'service_days' => 'Term of Validity',
-    'service_buy_button' => 'Order Now',
-    'service_unlimited' => 'Unlimited',
-    'service_device' => 'Devices',
-    'day' => 'days',
-    'month' => 'month',
-    'coupon' => 'Coupon',
-    'redeem_coupon' => 'Redeem',
-    'service_type_1' => 'Flow Packet',
-    'service_type_2' => 'Flow Plans',
-
-    // 流量日志
-    'traffic_log_tips' => 'Tips: The update of the flow chart will be delayed.',
-    'traffic_log_30days' => '30 Days Statistics',
-    'traffic_log_24hours' => '24 Hours Statistics',
-    'traffic_log_keywords' => 'Bandwidth',
-    'traffic_log_unit' => 'Unit: G',
-    'traffic_log_max' => 'Max',
-
-    // 邀请码
-    'invite_code_make' => 'Generate Invite Code',
-    'invite_code_button' => 'Create',
-    'invite_code_tips' => 'You can generate<strong> :num </strong>invite codes, effective within :days days',
-    'invite_code_my_codes' => 'My Invite Codes',
-    'invite_code_table_name' => 'Codes',
-    'invite_code_table_date' => 'Overdue Date',
-    'invite_code_table_user' => 'Usage User',
-    'invite_code_table_status' => 'Status',
-    'invite_code_table_none_codes' => 'None available information',
-    'invite_code_table_status_un' => 'Active',
-    'invite_code_table_status_yes' => 'Already Used',
-    'invite_code_table_status_expire' => 'Overdue',
-    'invite_code_summary' => 'Total of :total invite codes',
-
-    // 单据
-    'invoice_title' => 'My Invoices',
-    'invoice_table_id' => 'No.',
-    'invoice_table_name' => 'Service',
-    'invoice_table_pay_way' => 'Pay Method',
-    'invoice_table_price' => 'Amount',
-    'invoice_table_create_date' => 'Created On',
-    'invoice_table_expired_at' => 'Expire Time',
-    'invoice_table_status' => 'Status',
-    'invoice_table_none' => 'None Data',
-    'invoice_table_closed' => 'Closed',
-    'invoice_table_wait_payment' => 'Wait Payment',
-    'invoice_table_wait_confirm' => 'Wait Confirm',
-    'invoice_table_wait_active' => 'Active',
-    'invoice_table_expired' => 'Overdue',
-    'invoice_table_goods_deleted' => '[Deleted]',
-
-    // 工单
-    'ticket_title' => 'Support Tickets',
-    'ticket_open' => 'Open',
-    'ticket_close' => 'Close',
-    'ticket_cancel' => 'Cancel',
-    'ticket_confirm' => 'Confirm',
-    'ticket_table_title' => 'Title',
-    'ticket_table_status' => 'Status',
-    'ticket_table_none' => 'No Data',
-    'ticket_table_status_wait' => 'Wait Reply',
-    'ticket_table_status_reply' => 'Wait Reply',
-    'ticket_table_status_close' => 'Closed',
-    'ticket_table_new_button' => 'Open New Support Ticket',
-    'ticket_table_new_title' => 'Title: (Financial Support, Account Support, Technical Support, Pre-sale Support, etc)',
-    'ticket_table_content' => 'Please fill in your questions with detail information',
-    'ticket_table_view' => 'View',
-    'ticket_reply' => 'Send',
-    'ticket_reply_me' => 'Me',
-    'ticket_reply_master' => 'Master',
-    'ticket_reply_placeholder' => 'Say something...',
-    'ticket_close_title' => 'Close Ticket',
-    'ticket_close_content' => 'You are going to close the support tickets, are you sure?',
-
-    // 推广返利
-    'referral_title' => 'Commissions',
-    'referral_button' => 'Copy Link',
-    'referral_my_link' => 'My Referral Link',
-    'referral_table_user' => 'Who',
-    'referral_table_amount' => 'Amount',
-    'referral_table_commission' => 'Commission',
-    'referral_table_status' => 'Status',
-    'referral_table_date' => 'Date',
-    'referral_table_none' => 'None Data',
-    'referral_table_apply' => 'Apply',
-    'referral_summary' => 'Total rebate :amount RMB (:total times), full :money RMB can apply for withdrawals.',
-    'referral_apply_title' => 'Present Record',
-    'referral_apply_table_amount' => 'Amount',
-    'referral_apply_table_status' => 'Status',
-    'referral_apply_table_date' => 'Date',
-    'console' => 'Console',
-    'profile' => 'Profile',
-    'logout' => 'Log Out',
-    'promote_link' => 'With your promotion link registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.',
-    'promote_invite_code' => 'With your invite code registration and activation, both of you will receive :traffic traffic awards; when they are consumed, you will receive :referral_percent% of their consumption amount as a reward.',
-    'invite_user_title' => 'Invitation record',
-    'invite_user_email' => 'email',
-    'invite_user_created_at' => 'Registration time',
-];

+ 6 - 0
resources/lang/en/pagination.php

@@ -0,0 +1,6 @@
+<?php
+
+return [
+    'previous' => '&laquo; Previous',
+    'next'     => 'Next &raquo;',
+];

+ 9 - 0
resources/lang/en/passwords.php

@@ -0,0 +1,9 @@
+<?php
+
+return [
+    'reset'     => 'Your password has been reset!',
+    'sent'      => 'We have emailed your password reset link!',
+    'throttled' => 'Please wait before retrying.',
+    'token'     => 'This password reset token is invalid.',
+    'user'      => 'We can\'t find a user with that email address.',
+];

+ 215 - 0
resources/lang/en/user.php

@@ -0,0 +1,215 @@
+<?php
+
+return [
+    'account'             => [
+        'credit'           => 'Credit',
+        'status'           => 'Status',
+        'level'            => 'Level',
+        'group'            => 'Group',
+        'speed_limit'      => 'Speed Limit',
+        'remain'           => 'Remain Data',
+        'time'             => 'Period',
+        'last_login'       => 'Last Login',
+        'reset'            => ':days days to next reset',
+        'connect_password' => 'Proxy Connect Password',
+        'reason'           => [
+            'normal'            => 'Normal',
+            'expired'           => 'Expired',
+            'overused'          => 'You have reach the <code>:data</code> GB hourly data spend limit<br/> Wait <code id="countdown">:min</code> to cool down',
+            'traffic_exhausted' => 'OUT OF DATA',
+            'unknown'           => 'UNKNOWN ERROR, please contact admin for reason',
+        ],
+    ],
+    'status'              => [
+        'disabled'        => 'Disabled',
+        'enabled'         => 'Normal',
+        'expired'         => 'Expired',
+        'limited'         => 'Limited',
+        'unused'          => 'Unused',
+        'used'            => 'Used',
+        'closed'          => 'Closed',
+        'completed'       => 'Completed',
+        'waiting_payment' => 'Waiting for payment',
+        'using'           => 'Using',
+        'waiting_confirm' => 'Waiting for confirm',
+        'prepaid'         => 'Prepaid',
+        'applying'        => 'Applying',
+        'withdrawn'       => 'Withdrawn',
+        'not_withdrawn'   => 'Not withdrawn',
+        'reply'           => 'Replied',
+        'pending'         => 'Pending',
+    ],
+    'home'                => [
+        'attendance'         => [
+            'attribute' => 'Attendance',
+            'disable'   => 'Attendance System is disabled',
+            'done'      => 'You have already signed in, Come back tomorrow!',
+            'success'   => 'You got :data traffic',
+            'failed'    => 'System ❌ Error',
+        ],
+        'traffic_logs'       => 'Data Records',
+        'announcement'       => 'Announcement',
+        'wechat_push'        => 'WeChat Notification Service',
+        'chat_group'         => 'Chat Group',
+        'empty_announcement' => 'No Announcement',
+    ],
+    'purchase_to_unlock'  => 'Unlock after purchasing service',
+    'purchase_required'   => 'This feature is disabled for non-paying users! Please',
+    'more'                => 'More',
+    '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'       => 'Affiliates',
+        'shop'            => 'Shop',
+        'tickets'         => 'Ticket',
+        'admin_dashboard' => 'Admin Dashboard',
+    ],
+    'contact'             => 'Contact Info',
+    'coupon'              => [
+        'attribute'   => 'Coupon',
+        'voucher'     => 'Voucher',
+        'recharge'    => 'Gift Card',
+        'inactive'    => 'Coupon Inactive',
+        'wait_active' => 'The Event will begin until :time, Please wait',
+        'limit'       => 'Coupon Not Satisfied',
+        'higher'      => 'The minimum requirement of this coupon is ¥:amount',
+        'discount'    => 'Discount',
+    ],
+    'error_response'      => 'Something went wrong, please try again later.',
+    'invite'              => [
+        'attribute'       => 'Invitation code',
+        'total'           => 'Total: num invitation codes',
+        'tips'            => 'Can generate <strong> :num <strong> invitation codes, valid within :days',
+        'logs'            => 'Invitation Record',
+        'promotion'       => 'Register and activate with your invitation code, Both sides will get <mark>:traffic<mark> traffic as rewards; when invitees purchase services, you will get <mark>:referral percent%<mark> of their spend amount as commission.',
+        'generate_failed' => 'Failed to generate',
+    ],
+    'reset_data'          => [
+        ''          => 'Reset Data',
+        'required'  => 'Required',
+        'cost_tips' => 'This following action will cost ¥:amount!',
+        'lack'      => 'No enough Credit!',
+        '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 reach  ¥:money.',
+        'amount'     => 'Spend amount',
+        'commission' => 'Rebate amount',
+        'logs'       => 'Commission records',
+        'failed'     => 'Application failed',
+        'success'    => 'Application success',
+        'msg'        => [
+            'account'     => 'Account has expired, please purchase to active service first',
+            'applied'     => 'There is an application exist, please wait for the previous application to be processed',
+            'unfulfilled' => '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',
+        ],
+    ],
+    'inviter'             => 'Inviter',
+    'invitee'             => 'Invitee',
+    'consumer'            => 'Consumer',
+    'unknown'             => 'Unknown',
+    'registered_at'       => 'Registration at',
+    'bought_at'           => 'Purchased at',
+    'payment_method'      => 'payment method',
+    'pay'                 => 'Pay',
+    'input_coupon'        => 'Please enter the gift code',
+    'user_profile'        => 'Account settings',
+    'recharge'            => 'Pay',
+    'recharge_credit'     => 'Add Funds',
+    'recharging'          => 'Paying ...',
+    'withdraw_commission' => 'Withdraw Commission',
+    'withdraw_at'         => 'Withdraw Date',
+    'withdraw_logs'       => 'Withdrawals records',
+    'withdraw'            => 'Withdraw',
+    'scan_qrcode'         => 'Please scan the QR code',
+    'shop'                => [
+        'hot'           => 'HOT',
+        'limited'       => 'LIMIT',
+        'change_amount' => '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' => '<p>Current order will be set as <code>Prepaid order</code><p><ol class="text-left"><li> Prepaid order will be active after current service expired!</li><li> Your also can active the order manually</li></ol>',
+        'call4help'     => 'Please create a ticket to ask customer service',
+    ],
+    'payment'             => [
+        'error'           => 'The recharge balance is not compliant',
+        'creating'        => 'Creating payment order...',
+        'redirect_stripe' => 'Redirect to Stripe ...',
+        'qrcode_tips'     => 'Please using <strong class="red-600">:software</strong> to scan QrCode',
+        'close_tips'      => 'Please complete payment in <code>:minutes minutes</code>, otherwise it will be auto-closed by system',
+        'mobile_tips'     => '<strong>Mobile User</strong>:Press QrCode image for a short amount of time -> Save Images -> Open payment software -> Scan it',
+    ],
+    'invoice'             => [
+        'attribute'               => 'Order',
+        'id'                      => 'Order number',
+        'detail'                  => 'Order Detail',
+        'amount'                  => 'Amount',
+        'active_prepaid_question' => 'Are you sure to active prepaid order?',
+        'active_prepaid_tips'     => 'After active:<br>Current order will be set to expired! <br> Expired dates will be recalculated!',
+    ],
+    'node'                => [
+        'info'     => 'Configuration information',
+        'setting'  => 'Proxy settings',
+        'unstable' => 'Node fluctuation/under maintenance',
+        'rate'     => ':ratio time data consumption',
+    ],
+    'subscribe'           => [
+        'baned'            => 'Your subscription function is disabled, please contact the administrator to restore',
+        'link'             => 'Subscribe Link',
+        'tips'             => 'Warning:Subscribe Link is for personal used only, Please do not show to anyone else. Otherwise, they may using your service without your permission',
+        'exchange_warning' => 'Exchange Link:\n1. Old Link will be disabled\n2. Proxy connection password will be reset',
+        'ss_only'          => 'Subscribe SS/SSR Only',
+        'v2ray_only'       => 'Subscribe V2Ray Only',
+        'trojan_only'      => 'Subscribe Trojan Only',
+        'error'            => 'Exchange Link Error',
+    ],
+    '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 :id has been closed by user',
+        'placeholder'       => 'Please describe your questions in detail',
+        'title_placeholder' => 'Please describe your questions in few key words',
+        'new'               => 'Create Ticket',
+        'working_hour'      => 'Customer Service',
+        'online_hour'       => 'Working Hours',
+        'service_tips'      => 'We have many way to contact, please choose <code> ONE </code> of them! <br> Duplicate request will cost the service to delay',
+        'error'             => 'Error!Please contact Customer Service',
+    ],
+    'traffic_logs'        => [
+        '24hours' => 'Today Traffic Usage',
+        '30days'  => 'Daily Traffic Usage',
+        'tips'    => 'Tips: Traffic logs has delays!',
+    ],
+    'client'              => 'Clients',
+    'tutorials'           => 'Tutorials',
+    'current_role'        => 'Current Role as',
+];

+ 134 - 0
resources/lang/en/validation.php

@@ -0,0 +1,134 @@
+<?php
+
+return [
+    'accepted'             => 'The :attribute must be accepted.',
+    'active_url'           => 'The :attribute is not a valid URL.',
+    'after'                => 'The :attribute must be a date after :date.',
+    'after_or_equal'       => 'The :attribute must be a date after or equal to :date.',
+    'alpha'                => 'The :attribute may only contain letters.',
+    'alpha_dash'           => 'The :attribute may only contain letters, numbers, dashes and underscores.',
+    'alpha_num'            => 'The :attribute may only contain letters and numbers.',
+    'array'                => 'The :attribute must be an array.',
+    'before'               => 'The :attribute must be a date before :date.',
+    'before_or_equal'      => 'The :attribute must be a date before or equal to :date.',
+    'between'              => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file'    => 'The :attribute must be between :min and :max kilobytes.',
+        'string'  => 'The :attribute must be between :min and :max characters.',
+        'array'   => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean'              => 'The :attribute field must be true or false.',
+    'confirmed'            => 'The :attribute confirmation does not match.',
+    'date'                 => 'The :attribute is not a valid date.',
+    'date_equals'          => 'The :attribute must be a date equal to :date.',
+    'date_format'          => 'The :attribute does not match the format :format.',
+    'different'            => 'The :attribute and :other must be different.',
+    'digits'               => 'The :attribute must be :digits digits.',
+    'digits_between'       => 'The :attribute must be between :min and :max digits.',
+    'dimensions'           => 'The :attribute has invalid image dimensions.',
+    'distinct'             => 'The :attribute field has a duplicate value.',
+    'email'                => 'The :attribute must be a valid email address.',
+    'ends_with'            => 'The :attribute must end with one of the following: :values.',
+    'exists'               => 'The selected :attribute is invalid.',
+    'file'                 => 'The :attribute must be a file.',
+    'filled'               => 'The :attribute field must have a value.',
+    'gt'                   => [
+        'numeric' => 'The :attribute must be greater than :value.',
+        'file'    => 'The :attribute must be greater than :value kilobytes.',
+        'string'  => 'The :attribute must be greater than :value characters.',
+        'array'   => 'The :attribute must have more than :value items.',
+    ],
+    'gte'                  => [
+        'numeric' => 'The :attribute must be greater than or equal :value.',
+        'file'    => 'The :attribute must be greater than or equal :value kilobytes.',
+        'string'  => 'The :attribute must be greater than or equal :value characters.',
+        'array'   => 'The :attribute must have :value items or more.',
+    ],
+    'image'                => 'The :attribute must be an image.',
+    'in'                   => 'The selected :attribute is invalid.',
+    'in_array'             => 'The :attribute field does not exist in :other.',
+    'integer'              => 'The :attribute must be an integer.',
+    'ip'                   => 'The :attribute must be a valid IP address.',
+    'ipv4'                 => 'The :attribute must be a valid IPv4 address.',
+    'ipv6'                 => 'The :attribute must be a valid IPv6 address.',
+    'json'                 => 'The :attribute must be a valid JSON string.',
+    'lt'                   => [
+        'numeric' => 'The :attribute must be less than :value.',
+        'file'    => 'The :attribute must be less than :value kilobytes.',
+        'string'  => 'The :attribute must be less than :value characters.',
+        'array'   => 'The :attribute must have less than :value items.',
+    ],
+    'lte'                  => [
+        'numeric' => 'The :attribute must be less than or equal :value.',
+        'file'    => 'The :attribute must be less than or equal :value kilobytes.',
+        'string'  => 'The :attribute must be less than or equal :value characters.',
+        'array'   => 'The :attribute must not have more than :value items.',
+    ],
+    'max'                  => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file'    => 'The :attribute may not be greater than :max kilobytes.',
+        'string'  => 'The :attribute may not be greater than :max characters.',
+        'array'   => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes'                => 'The :attribute must be a file of type: :values.',
+    'mimetypes'            => 'The :attribute must be a file of type: :values.',
+    'min'                  => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file'    => 'The :attribute must be at least :min kilobytes.',
+        'string'  => 'The :attribute must be at least :min characters.',
+        'array'   => 'The :attribute must have at least :min items.',
+    ],
+    'multiple_of'          => 'The :attribute must be a multiple of :value',
+    'not_in'               => 'The selected :attribute is invalid.',
+    'not_regex'            => 'The :attribute format is invalid.',
+    'numeric'              => 'The :attribute must be a number.',
+    'password'             => 'The password is incorrect.',
+    'present'              => 'The :attribute field must be present.',
+    'regex'                => 'The :attribute format is invalid.',
+    'required'             => 'The :attribute field is required.',
+    '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 and :other must match.',
+    'size'                 => [
+        'numeric' => 'The :attribute must be :size.',
+        'file'    => 'The :attribute must be :size kilobytes.',
+        'string'  => 'The :attribute must be :size characters.',
+        'array'   => 'The :attribute must contain :size items.',
+    ],
+    'starts_with'          => 'The :attribute must start with one of the following: :values.',
+    'string'               => 'The :attribute must be a string.',
+    'timezone'             => 'The :attribute must be a valid zone.',
+    'unique'               => 'The :attribute has already been taken.',
+    'uploaded'             => 'The :attribute failed to upload.',
+    'url'                  => 'The :attribute format is invalid.',
+    'uuid'                 => 'The :attribute must be a valid UUID.',
+    'custom'               => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+    'attributes'           => [
+        'name'                  => 'Name',
+        'username'              => 'Nick Name',
+        'email'                 => 'Email',
+        'password'              => 'Password',
+        'password_confirmation' => 'Password Confirmation',
+        'phone'                 => 'Phone',
+        'day'                   => 'Day',
+        'month'                 => 'Month',
+        'year'                  => 'Year',
+        'hour'                  => 'Hour',
+        'minute'                => 'Minute',
+        'second'                => 'Second',
+        'title'                 => 'Title',
+        'content'               => 'Content',
+        'description'           => 'Description',
+        'excerpt'               => 'Excerpt',
+        'date'                  => 'Date',
+        'time'                  => 'Time',
+    ],
+];

+ 0 - 47
resources/lang/ja.json

@@ -1,47 +0,0 @@
-{
-  "A fresh verification link has been sent to your email address.": "新しい確認リンクを送りました。",
-  "All rights reserved.": "",
-  "Before proceeding, please check your email for a verification link.": "次に進む前に、確認リンクのメールをチェックしてください。",
-  "click here to request another": "ここをクリックしてメールを再送信してください。",
-  "Confirm Password": "パスワード(確認用)",
-  "E-Mail Address": "メールアドレス",
-  "Error": "エラー",
-  "Forbidden": "禁止されています",
-  "Forgot Your Password?": "パスワードを忘れた方はこちら",
-  "Go Home": "ホームへ",
-  "Hello!": "こんにちは",
-  "hi": "こんにちは",
-  "If you did not create an account, no further action is required.": "アカウントの作成にお心当たりが無い場合は、このメールを無視してください。",
-  "If you did not receive the email": "メールが届かなかった場合",
-  "If you did not request a password reset, no further action is required.": "パスワードのリセットにお心当たりが無い場合は、このメールを無視してください。",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "\":actionText\" ボタンが機能しない場合は, 次のURLをコピーしてWebブラウザに貼り付けてください。[:displayableActionUrl](:actionURL)",
-  "Login": "ログイン",
-  "Logout": "ログアウト",
-  "Name": "氏名",
-  "Oh no": "オーノー",
-  "Page Expired": "期限切れのページ",
-  "Page Not Found": "ページが見つかりません",
-  "Password": "パスワード",
-  "Please click the button below to verify your email address.": "メールアドレスを確認するには、下のボタンをクリックしてください。",
-  "Regards": "よろしくお願いします",
-  "Register": "アカウント作成",
-  "Remember Me": "ログイン状態を保持する",
-  "Reset Password": "パスワードリセット",
-  "Reset Password Notification": "パスワードリセット通知",
-  "Send Password Reset Link": "パスワードリセットリンクを送信",
-  "Service Unavailable": "サービスは利用できません",
-  "Sorry, you are forbidden from accessing this page.": "申し訳ありません、このページへのアクセスは禁止されています。",
-  "Sorry, the page you are looking for could not be found.": "申し訳ありません、探しているページは見つかりませんでした。",
-  "Sorry, you are making too many requests to our servers.": "申し訳ありません、一定時間内のリクエスト上限回数を超えました。",
-  "Sorry, you are not authorized to access this page.": "申し訳ありません、このページにアクセスする権限がありません。",
-  "Sorry, your session has expired. Please refresh and try again.": "申し訳ありません、セッションは期限切れです。更新してもう一度やり直してください。",
-  "Sorry, we are doing some maintenance. Please check back soon.": "申し訳ありません、メンテナンス中です。あとでもう一度確認してください。",
-  "Toggle navigation": "ナビゲーションを切り替える",
-  "Too Many Requests": "大量のリクエストがありました",
-  "Unauthorized": "認証が必要です",
-  "Verify Email Address": "メールアドレスを確認",
-  "Verify Your Email Address": "メールアドレスを確認してください",
-  "You are receiving this email because we received a password reset request for your account.": "パスワードリセットのリクエストを受け付けました。",
-  "Whoops!": "おっと!",
-  "Whoops, something went wrong on our servers.": "おっと、サーバーで何か問題が発生しました。"
-}

+ 0 - 99
resources/lang/ja/auth.php

@@ -1,99 +0,0 @@
-<?php
-
-return [
-    'title' => 'アカウントを有効にする',
-    'login_button' => 'ログイン',
-    'email_placeholder' => 'アカウントを入力してください',
-    'tips' => 'システムメンテナンス中に、アカウントを有効にする必要がある場合は、管理者に連絡してください',
-    'back' => '戻る',
-    'submit' => '有効化',
-    'email' => 'アカウント',
-    'password' => 'パスワード',
-    'captcha' => '認証コード',
-    'remember' => 'ログイン状態を保持',
-    'forget_password' => 'パスワードを忘れた',
-    'login' => 'ログイン',
-    'register' => '登録する',
-    'register_tip' => 'まだアカウントはありませんか?してください',
-    'loading_captcha' => '確認コードを読み込んでいます...',
-    'required_captcha' => '確認コードの操作を正しく完了してください',
-    'fail_captcha' => 'サーバーの確認に失敗しました。もう一度お試しください',
-    'confirm_password' => 'パスワードの確認',
-    'code' => '招待コード',
-    'send' => '送 信',
-    'tnc_button' => '私はすでに読んで守ることに同意した',
-    'tnc_link' => '私は利用規約を読み、同意した',
-    'tos' => '利用規約',
-    'aup' => '許容される使用ポリシー',
-    'register_alter' => 'システムはメンテナンス中です',
-    'get_free_code' => 'クリックすると無料の招待状コードが表示されます',
-    'tnc_title' => '私は読んだことがあります',
-    'tnc_content' => '現地法令を遵守してください。',
-    'overtime' => 'リンクは有効期限切れです',
-
-    'active' => 'Activate',
-    'active_account' => 'Activate account',
-    'active_tip' => 'Account is not active yet, Please ',
-    'captcha' => '確認コード',
-    'code' => 'Invite Code',
-    'login' => 'Sign In',
-    'register' => 'ログイン',
-    'email' => 'メール',
-    'password' => 'パスワード',
-    'confirm_password' => 'パスワードの確認',
-    'back' => 'Back',
-    'close' => 'Close',
-    'submit' => 'Submit',
-    'request' => 'Request',
-    'remember' => 'Remember Me',
-    'resetPassword' => 'Reset Password',
-    'new_password' => 'Enter a new password',
-    'forget_password' => 'Find my Password',
-    'reset_password' => 'Reset Password',
-    'get_free_code' => 'Click to get a free invitation code',
-    'accept_term' => 'I have read and agree to obey',
-    'tos' => 'Terms of Service',
-    'aup' => 'Acceptable Use Policy',
-    'register_tip' => 'Still no account? Please go to',
-    'system_maintenance' => 'The system is being maintained',
-    'system_maintenance_tip' => 'System in under maintenance, please email :email if you need an account',
-    'overtime' => 'The link has expired',
-
-    'active_success' => 'Successful activation',
-    'active_fail' => 'Activation fail',
-    'active_limit' => 'You have triggered the activation request restriction mechanism, do not operate frequently! If you have any questions, please contact :email',
-    'active_close' => 'The account activation function has been disabled, please contact :email',
-    'code_null' => 'Please enter invite code',
-    'captcha_null' => 'Please enter Verification code',
-    'captcha_error' => 'The Verification code is incorrect, please input the code again',
-    'captcha_overtime' => 'The verification code is invalid! Please refresh and try again',
-    'captcha_loading' => 'Loading Verification code...',
-    'captcha_required' => 'Please complete the Verification code operation correctly',
-    'captcha_fail' => 'Server verification failed, please try again',
-    'captcha_close' => 'Verification code registration is disable',
-    'captcha_send' => 'Verification code sent',
-    'code_error' => 'The invitation code is invalid! Please try again',
-    'email_null' => 'Please enter your email address',
-    'email_normal' => 'Your account has been activated',
-    'email_legitimate' => 'Account must be a legitimate email',
-    'email_banned' => 'The mailbox contains sensitive words. Please use another valid email',
-    'email_exist' => 'Email have been register! If you forget your password, please use "Find my Password" to reset your password',
-    'email_notExist' => 'The account does not exist. Please try again',
-    'login_error' => 'Wrong password or email address',
-    'login_ban' => 'Your email is banned',
-    'password_null' => 'Please enter your password',
-    'password_limit' => 'Password is too short',
-    'password_same' => 'The passwords you typed do not match',
-    'register_close' => 'We close the registration for new users, please email :email the administrator',
-    'register_anti' => 'Anti-robot registration is enabled! Please do not register Multiple accounts',
-    'register_fail' => 'Registration failed, please try later',
-    'register_success' => 'Registered successfully',
-    'register_active_tip' => 'Activation email sent! Please check the mailbox (the email may be in the Trash)',
-    'repeat_request' => 'Please refresh the page and try again',
-    'reset_password_close' => '"Find my Password"function is disabled.If you need help, Please email :email',
-    'reset_password_limit' => 'Password can only be reset :time times within 24 hours!',
-    'reset_password_success_tip' => 'Reset successfully! Please check the mailbox (the email may be in the Trash)',
-    'reset_password_same_fail' => 'The new password is the same as the old one. Please renter',
-    'reset_password_fail' => 'Password reset failed',
-    'reset_password_new' => 'The new password has been set successfully!',
-];

+ 0 - 17
resources/lang/ja/error.php

@@ -1,17 +0,0 @@
-<?php
-
-return [
-    'title' => 'アクセスが拒否されました',
-    'ForbiddenRobot' => 'ロボットアクセスを禁止する',
-    'ForbiddenAccess' => 'IPまたはプロキシアクセスを禁止する',
-    'ForbiddenChina' => '中国のIPまたはプロキシアクセスを禁止する',
-    'ForbiddenOversea' => '海外IPまたはプロキシアクセスを禁止する',
-    'MissingPage' => 'ページが見つかりません',
-    'Unauthorized' => '許可されていない訪問',
-    'RefreshPage' => 'ページを更新し、もう一度お試しください',
-    'SystemError' => 'システムエラー',
-    'Visit' => 'リンクを見てください',
-    'log' => 'ログ',
-    'SecurityError' => '危険な訪問',
-    'SecurityEnter' => '安全に入る',
-];

+ 0 - 200
resources/lang/ja/home.php

@@ -1,200 +0,0 @@
-<?php
-
-return [
-    'panel' => 'コントロールパネル',
-    'subscribe_help' => 'インタラクティブチュートリアル',
-    'copy_subscribe_address' => 'コピー',
-    'exchange_subscribe' => '変更',
-    'subscribe_warning' => '警告:この購読URLは個人用です。このURLは拡散しないでください。それ以外の場合は、アカウントのデータ通信量が異常である可能性があります。',
-    'reset_password_title' => 'パスワードを再設定する',
-    'email_placeholder' => 'アカウントを入力してください',
-    'system_down' => 'システムはメンテナンス中です',
-    'subscribe_baned' => '購読が無効になっています。管理者にお問い合わせください。',
-    'download' => 'ダウンロード',
-
-    // 菜单
-    'home' => 'ホームページ',
-    'nodeList' => '私のノード',
-    'services' => 'ショップ',
-    'traffic_log' => '使用記録',
-    'help' => '手伝いをする',
-    'invite_code' => '招待コード',
-    'invoices' => 'ビル',
-    'tickets' => 'サポート',
-    'referrals' => '招待リンク',
-    'free_invite_codes_title' => '無料招待コード',
-    'no_need_invite_codes' => 'プラットフォームオープン登録、招待コードなし',
-
-    // 首页
-    'ratio_tips' => 'ノードの購読機能をサポートするクライアントを使用することをお勧めします。',
-    'subscribe_button' => '取得する',
-    'account_info' => 'アカウント情報',
-    'account_level' => 'レベル',
-    'account_credit' => '残りのお金',
-    'account_score' => '積分',
-    'account_status' => '状態',
-    'account_expire' => '有効期限まで',
-    'account_last_usage' => '最近使用日',
-    'account_last_login' => '最近ログイン日',
-    'account_bandwidth_usage' => 'データ通信量の使用状況',
-    'account_total_traffic' => 'データ通信量の上限',
-    'account_usage_traffic' => '使用済み',
-    'account_reset_notice' => '毎月 :reset_day 日にデータ通信量をリセットする',
-    'account_login_log' => '登録ログ',
-    'article_title' => '文章',
-    'recharge' => 'チャージ',
-    'enabled' => '有効',
-    'disabled' => '無効',
-    'never_used' => '使用されていない',
-    'expired' => '期限が切れる',
-    'reason' => '理由',
-    'reason_expired' => 'あなたのアカウントは期限切れです',
-    'reason_traffic_exhausted' => '利用可能なデータをすべて使用しました',
-    'reason_overused' => '1時間あたりのデータ使用量がシステムの1時間あたりの制限に達しました',
-    'reason_unknown' => '不明、チケットを開いてカスタマーサービスに依頼してください',
-    'never_logging' => '从未登録',
-    'never_loggedin' => 'ログインされていない',
-    'announcement' => 'お知らせ',
-    'recharge_credit' => 'チャージ',
-    'payment_method' => 'チャージの方法',
-    'close' => 'キャンセル',
-    'redeem_score' => 'データ通信量を兌換する',
-    'redeem' => '今すぐ兌換',
-    'redeem_info' => 'あなたは :score ポイントを持っており、 :score M 無料のデータ通信量を利用できます。',
-    'coupon_code' => 'クーポンコード',
-    'please_input_coupon' => 'クーポンコードを入力してください',
-    'scan_qrcode' => 'QRコードをスキャンするクライアントを使用してください',
-    'setting_info' => '構成情報',
-    'ratio' => '決済レート',
-    'coupon_not_empty' => 'クーポンコードは空にできません。',
-    'recharging' => 'チャージしている',
-    'error_response' => 'エラーが発生し、後でやり直してください。',
-    'error' => 'エラー',
-    'online_pay' => 'オンラインで支払う',
-    'pay' => 'お支払い',
-
-    // 用户资料
-    'submit' => '提出する',
-    'contact' => '連絡方法',
-    'ssr_setting' => 'プロキシ設定',
-    'password' => 'パスワード',
-    'new_password' => '新しいパスワード',
-    'current_password' => '既存のパスワード',
-    'wechat' => 'WeChat',
-    'connection_password' => '接続のパスワード',
-    'encrpytion' => '暗号化方式',
-    'protocal' => '契約方法',
-    'obfs' => 'OBFS パラメータ',
-
-    // 购买服务
-    'service_title' => 'ショップ',
-    'service_name' => 'サービス',
-    'service_desc' => '説明する',
-    'service_type' => 'タイプ',
-    'service_price' => '価格',
-    'service_quantity' => '数量',
-    'service_subtotal_price' => '小計',
-    'service_total_price' => '合計',
-    'service_pay_button' => '残額で払う',
-    'services_none' => '利用可能なサービスはありません',
-    'service_traffic' => '流れを含む',
-    'service_days' => '有効期間',
-    'service_buy_button' => '購入する',
-    'service_unlimited' => '無制限',
-    'service_device' => 'デバイス数',
-    'day' => '日',
-    'month' => '月',
-    'coupon' => 'クーポン券',
-    'redeem_coupon' => '使用する',
-    'service_type_1' => '流量包',
-    'service_type_2' => 'コース',
-    'service_type_3' => '残高',
-
-    // 流量日志
-    'traffic_log_tips' => '注意:データの更新が遅れている',
-    'traffic_log_30days' => '30 日内のデータ通信量消耗',
-    'traffic_log_24hours' => '24 時間内のデータ通信量消耗',
-    'traffic_log_keywords' => 'データ通信量消耗',
-    'traffic_log_unit' => '単位 / G',
-    'traffic_log_max' => '最大値',
-
-    // 邀请码
-    'invite_code_make' => '招待コードを生成する',
-    'invite_code_button' => '生成する',
-    'invite_code_tips' => '生成できる<strong> :num </strong>枚の招待コード, :days 日以内有効',
-    'invite_code_my_codes' => '私の招待コード',
-    'invite_code_table_name' => '招待コード',
-    'invite_code_table_date' => '有効期限',
-    'invite_code_table_user' => '使用者',
-    'invite_code_table_status' => '状態',
-    'invite_code_table_none_codes' => 'データなし',
-    'invite_code_table_status_un' => '使用されていない',
-    'invite_code_table_status_yes' => '使用済み',
-    'invite_code_table_status_expire' => '期限が切れた',
-    'invite_code_summary' => '全部で :total 枚の招待コードがあります。',
-
-    // 单据
-    'invoice_title' => 'ビル',
-    'invoice_table_id' => 'ビル番号',
-    'invoice_table_name' => 'サービス',
-    'invoice_table_pay_way' => '支払い方式',
-    'invoice_table_price' => '金額',
-    'invoice_table_create_date' => '購入日',
-    'invoice_table_expired_at' => '有効期限',
-    'invoice_table_status' => '状態',
-    'invoice_table_none' => 'データなし',
-    'invoice_table_closed' => '閉鎖された',
-    'invoice_table_wait_payment' => '保留中の支払い',
-    'invoice_table_wait_confirm' => '確認を待っています',
-    'invoice_table_wait_active' => '使用中',
-    'invoice_table_expired' => '期限が切れた',
-    'invoice_table_goods_deleted' => '[削除]',
-
-    // 工单
-    'ticket_title' => 'サポートチケット',
-    'ticket_open' => '開いた',
-    'ticket_close' => '閉じる',
-    'ticket_cancel' => 'キャンセル',
-    'ticket_confirm' => '確認',
-    'ticket_table_title' => 'タイトル',
-    'ticket_table_status' => '状態',
-    'ticket_table_none' => 'データなし',
-    'ticket_table_status_wait' => '処理を待つ',
-    'ticket_table_status_reply' => 'もう回復',
-    'ticket_table_status_close' => '閉鎖された',
-    'ticket_table_new_button' => '新しいサポートチケットを開く',
-    'ticket_table_new_title' => 'タイトル:(財務サポート、アカウントサポート、テクニカルサポート、事前販売サポートなど)',
-    'ticket_table_content' => 'あなたの質問を記入してください',
-    'ticket_table_view' => 'ビュー',
-    'ticket_reply' => '送信',
-    'ticket_reply_me' => '私',
-    'ticket_reply_master' => '管理者',
-    'ticket_reply_placeholder' => '何か言って',
-    'ticket_close_title' => 'チケットを閉じる',
-    'ticket_close_content' => 'あなたはサポートチケットを閉じるつもりです、本当ですか?',
-
-    // 推广返利
-    'referral_title' => '口銭',
-    'referral_button' => 'コピー',
-    'referral_my_link' => '私のプロモーションリンク',
-    'referral_table_user' => '消費者',
-    'referral_table_amount' => '消費量',
-    'referral_table_commission' => '返金額',
-    'referral_table_status' => '状態',
-    'referral_table_date' => 'リベート期間',
-    'referral_table_none' => 'データなし',
-    'referral_table_apply' => '引き出しを申請する',
-    'referral_summary' => '全部 :total 件の記録があり、合計 :amount のリベートがあり、 :total に達すると現金引き出しを申請することができます。',
-    'referral_apply_title' => '記録を現す',
-    'referral_apply_table_amount' => '金額',
-    'referral_apply_table_status' => '狀態',
-    'referral_apply_table_date' => '日付',
-    'console' => '管理センター',
-    'profile' => '個人設定',
-    'logout' => 'ログアウト',
-    'promote_link' => 'あなたの普及のリンクを通じて登録してアクティブにして、あなたたちの双方はすべて :traffic の流量の奨励を獲得します;彼らが消費する時、あなたは彼らの消費金額の :referral_percent% を獲得することを奨励します。',
-    'promote_invite_code' => 'お客様の招待コードの登録をアクティブにして、あなた達の双方は獲得して :traffic 流量奨励;彼らが消费の時、あなたは獲得して彼らの消費金額の :referral_percent% ご褒美として。',
-    'invite_user_title' => '招待状',
-    'invite_user_email' => 'ユーザー名',
-    'invite_user_created_at' => '登録時間',
-];

+ 0 - 17
resources/lang/ja/pagination.php

@@ -1,17 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Pagination Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used by the paginator library to build
-    | the simple pagination links. You are free to change them to anything
-    | you want to customize your views to better match your application.
-    |
-    */
-
-    'previous' => '&laquo; 前',
-    'next' => '次 &raquo;',
-];

+ 0 - 20
resources/lang/ja/passwords.php

@@ -1,20 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Password Reminder Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are the default lines which match reasons
-    | that are given by the password broker for a password update attempt
-    | has failed, such as for an invalid token or invalid new password.
-    |
-    */
-
-    'reset' => 'パスワードをリセットしました。',
-    'sent' => 'パスワードリマインダーを送信しました。',
-    'throttled' => '時間を置いて再度お試しください。',
-    'token' => 'このパスワードリセットトークンは無効です。',
-    'user' => 'このメールアドレスに一致するユーザーを見つけることが出来ませんでした。',
-];

+ 0 - 138
resources/lang/ja/validation-inline.php

@@ -1,138 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => 'This field must be accepted.',
-    'active_url' => 'This is not a valid URL.',
-    'after' => 'This must be a date after :date.',
-    'after_or_equal' => 'This must be a date after or equal to :date.',
-    'alpha' => 'This field may only contain letters.',
-    'alpha_dash' => 'This field may only contain letters, numbers, dashes and underscores.',
-    'alpha_num' => 'This field may only contain letters and numbers.',
-    'array' => 'This field must be an array.',
-    'before' => 'This must be a date before :date.',
-    'before_or_equal' => 'This must be a date before or equal to :date.',
-    'between' => [
-        'numeric' => 'This value must be between :min and :max.',
-        'file' => 'This file must be between :min and :max kilobytes.',
-        'string' => 'This string must be between :min and :max characters.',
-        'array' => 'This content must have between :min and :max items.',
-    ],
-    'boolean' => 'This field must be true or false.',
-    'confirmed' => 'The confirmation does not match.',
-    'date' => 'This is not a valid date.',
-    'date_equals' => 'This must be a date equal to :date.',
-    'date_format' => 'This does not match the format :format.',
-    'different' => 'This value must be different from :other.',
-    'digits' => 'This must be :digits digits.',
-    'digits_between' => 'This must be between :min and :max digits.',
-    'dimensions' => 'This image has invalid dimensions.',
-    'distinct' => 'This field has a duplicate value.',
-    'email' => 'This must be a valid email address.',
-    'ends_with' => 'This must end with one of the following: :values.',
-    'exists' => 'The selected value is invalid.',
-    'file' => 'The content must be a file.',
-    'filled' => 'This field must have a value.',
-    'gt' => [
-        'numeric' => 'The value must be greater than :value.',
-        'file' => 'The file size must be greater than :value kilobytes.',
-        'string' => 'The string must be greater than :value characters.',
-        'array' => 'The content must have more than :value items.',
-    ],
-    'gte' => [
-        'numeric' => 'The value must be greater than or equal :value.',
-        'file' => 'The file size must be greater than or equal :value kilobytes.',
-        'string' => 'The string must be greater than or equal :value characters.',
-        'array' => 'The content must have :value items or more.',
-    ],
-    'image' => 'This must be an image.',
-    'in' => 'The selected value is invalid.',
-    'in_array' => 'This value does not exist in :other.',
-    'integer' => 'This must be an integer.',
-    'ip' => 'This must be a valid IP address.',
-    'ipv4' => 'This must be a valid IPv4 address.',
-    'ipv6' => 'This must be a valid IPv6 address.',
-    'json' => 'This must be a valid JSON string.',
-    'lt' => [
-        'numeric' => 'The value must be less than :value.',
-        'file' => 'The file size must be less than :value kilobytes.',
-        'string' => 'The string must be less than :value characters.',
-        'array' => 'The content must have less than :value items.',
-    ],
-    'lte' => [
-        'numeric' => 'The value must be less than or equal :value.',
-        'file' => 'The file size must be less than or equal :value kilobytes.',
-        'string' => 'The string must be less than or equal :value characters.',
-        'array' => 'The content must not have more than :value items.',
-    ],
-    'max' => [
-        'numeric' => 'The value may not be greater than :max.',
-        'file' => 'The file size may not be greater than :max kilobytes.',
-        'string' => 'The string may not be greater than :max characters.',
-        'array' => 'The content may not have more than :max items.',
-    ],
-    'mimes' => 'This must be a file of type: :values.',
-    'mimetypes' => 'This must be a file of type: :values.',
-    'min' => [
-        'numeric' => 'The value must be at least :min.',
-        'file' => 'The file size must be at least :min kilobytes.',
-        'string' => 'The string must be at least :min characters.',
-        'array' => 'The value must have at least :min items.',
-    ],
-    'not_in' => 'The selected value is invalid.',
-    'not_regex' => 'This format is invalid.',
-    'numeric' => 'This must be a number.',
-    'password' => 'The password is incorrect.',
-    'present' => 'This field must be present.',
-    'regex' => 'This format is invalid.',
-    'required' => 'This field is required.',
-    'required_if' => 'This field is required when :other is :value.',
-    'required_unless' => 'This field is required unless :other is in :values.',
-    'required_with' => 'This field is required when :values is present.',
-    'required_with_all' => 'This field is required when :values are present.',
-    'required_without' => 'This field is required when :values is not present.',
-    'required_without_all' => 'This field is required when none of :values are present.',
-    'same' => 'The value of this field must match the one from :other.',
-    'size' => [
-        'numeric' => 'The value must be :size.',
-        'file' => 'The file size must be :size kilobytes.',
-        'string' => 'The string must be :size characters.',
-        'array' => 'The content must contain :size items.',
-    ],
-    'starts_with' => 'This must start with one of the following: :values.',
-    'string' => 'This must be a string.',
-    'timezone' => 'This must be a valid zone.',
-    'unique' => 'This has already been taken.',
-    'uploaded' => 'This failed to upload.',
-    'url' => 'This format is invalid.',
-    'uuid' => 'This must be a valid UUID.',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-];

+ 0 - 149
resources/lang/ja/validation.php

@@ -1,149 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages.
-    |
-    */
-
-    'accepted' => ':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' => [
-        'numeric' => ':attributeには、:minから、:maxまでの数字を指定してください。',
-        'file' => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。',
-        'string' => ':attributeは、:min文字から:max文字にしてください。',
-        'array' => ':attributeの項目は、:min個から:max個にしてください。',
-    ],
-    'boolean' => ":attributeには、'true'か'false'を指定してください。",
-    'confirmed' => ':attributeと:attribute確認が一致しません。',
-    'date' => ':attributeは、正しい日付ではありません。',
-    'date_equals' => ':attributeは:dateに等しい日付でなければなりません。',
-    'date_format' => ":attributeの形式は、':format'と合いません。",
-    'different' => ':attributeと:otherには、異なるものを指定してください。',
-    'digits' => ':attributeは、:digits桁にしてください。',
-    'digits_between' => ':attributeは、:min桁から:max桁にしてください。',
-    'dimensions' => ':attributeの画像サイズが無効です',
-    'distinct' => ':attributeの値が重複しています。',
-    'email' => ':attributeは、有効なメールアドレス形式で指定してください。',
-    'ends_with' => ':attributeは、次のうちのいずれかで終わらなければなりません。: :values',
-    'exists' => '選択された:attributeは、有効ではありません。',
-    'file' => ':attributeはファイルでなければいけません。',
-    'filled' => ':attributeは必須です。',
-    'gt' => [
-        'numeric' => ':attributeは、:valueより大きくなければなりません。',
-        'file' => ':attributeは、:value KBより大きくなければなりません。',
-        'string' => ':attributeは、:value文字より大きくなければなりません。',
-        'array' => ':attributeの項目数は、:value個より大きくなければなりません。',
-    ],
-    'gte' => [
-        'numeric' => ':attributeは、:value以上でなければなりません。',
-        'file' => ':attributeは、:value KB以上でなければなりません。',
-        'string' => ':attributeは、:value文字以上でなければなりません。',
-        'array' => ':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' => [
-        'numeric' => ':attributeは、:valueより小さくなければなりません。',
-        'file' => ':attributeは、:value KBより小さくなければなりません。',
-        'string' => ':attributeは、:value文字より小さくなければなりません。',
-        'array' => ':attributeの項目数は、:value個より小さくなければなりません。',
-    ],
-    'lte' => [
-        'numeric' => ':attributeは、:value以下でなければなりません。',
-        'file' => ':attributeは、:value KB以下でなければなりません。',
-        'string' => ':attributeは、:value文字以下でなければなりません。',
-        'array' => ':attributeの項目数は、:value個以下でなければなりません。',
-    ],
-    'max' => [
-        'numeric' => ':attributeには、:max以下の数字を指定してください。',
-        'file' => ':attributeには、:max KB以下のファイルを指定してください。',
-        'string' => ':attributeは、:max文字以下にしてください。',
-        'array' => ':attributeの項目は、:max個以下にしてください。',
-    ],
-    'mimes' => ':attributeには、:valuesタイプのファイルを指定してください。',
-    'mimetypes' => ':attributeには、:valuesタイプのファイルを指定してください。',
-    'min' => [
-        'numeric' => ':attributeには、:min以上の数字を指定してください。',
-        'file' => ':attributeには、:min KB以上のファイルを指定してください。',
-        'string' => ':attributeは、:min文字以上にしてください。',
-        'array' => ':attributeの項目は、:min個以上にしてください。',
-    ],
-    'not_in' => '選択された:attributeは、有効ではありません。',
-    'not_regex' => ':attributeの形式が無効です。',
-    'numeric' => ':attributeには、数字を指定してください。',
-    'password' => 'パスワードが正しくありません。',
-    'present' => ':attributeが存在している必要があります。',
-    'regex' => ':attributeには、有効な正規表現を指定してください。',
-    'required' => ':attributeは、必ず指定してください。',
-    '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' => [
-        'numeric' => ':attributeには、:sizeを指定してください。',
-        'file' => ':attributeには、:size KBのファイルを指定してください。',
-        'string' => ':attributeは、:size文字にしてください。',
-        'array' => ':attributeの項目は、:size個にしてください。',
-    ],
-    'starts_with' => ':attributeは、次のいずれかで始まる必要があります。:values',
-    'string' => ':attributeには、文字を指定してください。',
-    'timezone' => ':attributeには、有効なタイムゾーンを指定してください。',
-    'unique' => '指定の:attributeは既に使用されています。',
-    'uploaded' => ':attributeのアップロードに失敗しました。',
-    'url' => ':attributeは、有効なURL形式で指定してください。',
-    'uuid' => ':attributeは、有効なUUIDでなければなりません。',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Attributes
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used to swap attribute place-holders
-    | with something more reader friendly such as E-Mail Address instead
-    | of "email". This simply helps us make messages a little cleaner.
-    |
-    */
-
-    'attributes' => [],
-];

+ 0 - 46
resources/lang/ko.json

@@ -1,46 +0,0 @@
-{
-  "A fresh verification link has been sent to your email address.": "새로운 확인 링크가 당신의 이메일 주소로 보내졌습니다.",
-  "All rights reserved.": "무단 전재 금지.",
-  "Before proceeding, please check your email for a verification link.": "계속하기 전에 이메일에서 확인 링크를 확인하십시오.",
-  "click here to request another": "여기를 클릭하여 다른 것을 요청하십시오.",
-  "Confirm Password": "비밀번호 확인",
-  "E-Mail Address": "E-Mail 주소",
-  "Forbidden": "금지",
-  "Forgot Your Password?": "비밀번호를 잊으셨나요?",
-  "Go Home": "시작으로 이동",
-  "Hello!": "안녕하세요!",
-  "If you did not create an account, no further action is required.": "계정을 생성하지 않았다면 추가 조치가 필요하지 않습니다.",
-  "If you did not request a password reset, no further action is required.": "귀하께서 비밀번호 재설정을 요청하지 않으셨다면, 더이상 진행하지 마십시오.",
-  "If you did not receive the email": "이메일을 받지 못한 경우",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "\":actionText\" 단추를 클릭하는 데 문제가 있는 경우 아래 URL을 복사하여\n웹 브라우저에 붙여 넣으십시오:",
-  "Invalid signature.": "잘못된 시그니처.",
-  "Login": "로그인",
-  "Logout": "로그아웃",
-  "Name": "이름",
-  "Not Found": "찾을 수 없습니다",
-  "Oh no": "안 돼",
-  "Page Expired": "만료된 페이지",
-  "Password": "비밀번호",
-  "Please click the button below to verify your email address.": "이메일 주소를 확인하려면 아래 버튼을 클릭하십시오.",
-  "Please confirm your password before continuing.": "계속하기 전에 암호를 확인하십시오.",
-  "Register": "회원가입",
-  "Regards": "안부",
-  "Remember Me": "로그인 상태 유지",
-  "Reset Password": "비밀번호 재설정",
-  "Reset Password Notification": "비밀번호 재설정 알림",
-  "Send Password Reset Link": "비밀번호 재설정 링크 보내기",
-  "Server Error": "서버 에러",
-  "Service Unavailable": "서비스를 사용할 수 없습니다.",
-  "This action is unauthorized.": "이 조치는 승인되지 않습니다.",
-  "This password reset link will expire in :count minutes.": "이 비밀번호 재설정 링크는 :count분 후에 만료됩니다.",
-  "Toggle navigation": "토글 네비게이션",
-  "Too Many Attempts.": "너무 많은 시도들.",
-  "Too Many Requests": "너무 많은 요청들",
-  "Unauthorized": "무허가",
-  "Verify Email Address": "이메일 주소 확인",
-  "Verify Your Email Address": "너의 이메일 주소 확인",
-  "We won't ask for your password again for a few hours.": "몇 시간 동안 비밀번호를 다시 묻지 않습니다.",
-  "You are receiving this email because we received a password reset request for your account.": "귀하의 계정에 비밀번호 재설정이 요청되어 해당 메일이 발송되었습니다.",
-  "Your email address is not verified.": "이메일 주소가 확인되지 않습니다.",
-  "Whoops!": "Oups !"
-}

+ 0 - 33
resources/lang/ko/auth.php

@@ -1,33 +0,0 @@
-<?php
-
-return [
-    'title' => '아이디 활성화',
-    'login_button' => '로그인',
-    'email_placeholder' => '아이디를 입력하세요',
-    'tips' => '서버 점검중입니다,아이디 활성화 하실려면 관리자에게 문의하세요',
-    'back' => '돌아가기',
-    'submit' => '활성화 하기',
-    'email' => '아이디',
-    'password' => '비밀번호',
-    'captcha' => '인증코드',
-    'remember' => '로그인 상태 유지',
-    'forget_password' => '비밀번호 찾기',
-    'login' => '로그인',
-    'register' => '회원가입',
-    'register_tip' => '아직 계정이 없습니까? 제발 가라',
-    'loading_captcha' => '인증 코드로드 중 ...',
-    'required_captcha' => '인증 코드 작업을 올바르게 완료하십시오.',
-    'fail_captcha' => '서버 확인에 실패했습니다. 다시 시도하십시오.',
-    'confirm_password' => '비밀번호 재확인',
-    'code' => '처청코드',
-    'send' => '보내기',
-    'tnc_button' => '이용약관에 됭의합니다',
-    'tos' => '이용 약관',
-    'aup' => '이용 목적 제한 방침',
-    'register_alter' => '서버 점검중입니다',
-    'get_free_code' => '무료 초대 코드를 받으려면 클릭하십시오.',
-    'tnc_title' => '이용약관에 됭의합니다',
-    'tnc_content' => '현지의 법률 법규를 준수하시오.',
-    'overtime' => '링크가 만료되었습니다.',
-
-];

+ 0 - 17
resources/lang/ko/error.php

@@ -1,17 +0,0 @@
-<?php
-
-return [
-    'title' => '접근 불가',
-    'ForbiddenRobot' => '로봇 접근 금지',
-    'ForbiddenAccess' => 'IP 또는 프록시 액세스를 금지하십시오',
-    'ForbiddenChina' => '중국 IP 또는 프록시 액세스 금지',
-    'ForbiddenOversea' => '해외 IP 또는 프록시 액세스 금지',
-    'MissingPage' => '페이지를 찾을 수 없음',
-    'Unauthorized' => '무단 방문',
-    'RefreshPage' => '페이지 새로 고침, 한번 더 시도',
-    'SystemError' => '시스템 오류',
-    'Visit' => '방문하시기 바랍니다',
-    'log' => '로그',
-    'SecurityError' => '안전하지 않은 방문',
-    'SecurityEnter' => '안전 입력',
-];

+ 0 - 197
resources/lang/ko/home.php

@@ -1,197 +0,0 @@
-<?php
-
-return [
-    'panel' => '제어판',
-    'subscribe_help' => '대화 형 자습서',
-    'copy_subscribe_address' => '주소복사',
-    'exchange_subscribe' => '주소변경',
-    'subscribe_warning' => '경고: 구독 주소 는 개인적 으로 사용 되 지 말고 이 주소 를 전파 하지 마시오',
-    'reset_password_title' => '비번리셋',
-    'email_placeholder' => '아이디를 입력하세요',
-    'system_down' => '서비스 점금중',
-    'subscribe_baned' => '구독주소가 금지되였습니다,관리자에게 문의해주세요',
-    'download' => '다운로드',
-
-    // 菜单
-    'home' => '홈페이지',
-    'nodeList' => '내 서버',
-    'services' => '서버구축',
-    'traffic_log' => '트래픽',
-    'help' => '도와주다',
-    'invite_code' => '초청코드',
-    'invoices' => '오더관리',
-    'tickets' => '고객센트',
-    'referrals' => '홍보센트',
-    'free_invite_codes_title' => '무료초청코드',
-    'no_need_invite_codes' => '초청코드 없이 가입가능합니다',
-
-    // 首页
-    'ratio_tips' => '지원 기능의 구독 기능을 사용하는 클라이언트 사용, 구독 기능으로 클라이언트 동기화 정보를 입력할 수 있습니다.',
-    'subscribe_button' => 'RSS구도주소 보기',
-    'account_info' => '유저정보',
-    'account_level' => '레벨',
-    'account_credit' => '금액',
-    'account_score' => '적분',
-    'account_status' => '상태',
-    'account_expire' => '유효기간',
-    'account_last_usage' => '최근사용',
-    'account_last_login' => '최근로그인',
-    'account_bandwidth_usage' => '트래픽 사용량',
-    'account_total_traffic' => '총',
-    'account_usage_traffic' => '이미사용',
-    'account_reset_notice' => '매월 :reset_day 일에 트래픽 초기화',
-    'account_login_log' => '로그인 로그',
-    'article_title' => '공지사항',
-    'recharge' => '충전',
-    'enabled' => '정상',
-    'disabled' => '금지',
-    'nerver_used' => '미사용',
-    'expired' => '기간만료',
-    'reason' => '이유',
-    'reason_expired' => '계정이 만료되었습니다',
-    'reason_traffic_exhausted' => '사용 가능한 모든 데이터를 사용했습니다',
-    'reason_overused' => '귀하의 시간별 데이터의 사용은 우리의 시스템 시간마다 한계에 도달',
-    'reason_unknown' => '알 수 없음, 티켓을 열고 고객 서비스에 문의하십시오',
-    'never_loggedin' => '로그인 안됨',
-    'announcement' => '공지',
-    'recharge_credit' => '금액충전',
-    'payment_method' => '충전방식',
-    'close' => '취소',
-    'redeem_score' => '트래픽 ',
-    'redeem' => '환전하기',
-    'redeem_info' => '총 :score 포인트,:score M 의 트레픽 화전가능。',
-    'coupon_code' => '충전카드',
-    'please_input_coupon' => '충전 카드 번호를 입력하세요',
-    'scan_qrcode' => '앱 으로 QR코드를 스켄해주시면 서버가 추가 됩니다',
-    'setting_info' => '설정 정보',
-    'ratio' => '정산비율',
-    'coupon_not_empty' => '카드번호가 비였습니다',
-    'recharging' => '충전중...',
-    'error_response' => '오류발생,다시시도하세요',
-    'error' => '잘못',
-
-    // 用户资料
-    'submit' => '확인',
-    'contact' => '연락방식',
-    'ssr_setting' => '에이전트 설정',
-    'password' => '비밀번호',
-    'new_password' => '새로운 비밀번호',
-    'current_password' => '현재 비밀번호',
-    'wechat' => '위쳇아이디',
-    'connection_password' => '연결암호',
-    'encrpytion' => '암호화 방식',
-    'protocal' => '프로토콜',
-    'obfs' => '혼동',
-
-    // 购买服务
-    'service_title' => '서버구축',
-    'service_name' => '서버스',
-    'service_desc' => '소개',
-    'service_type' => '类型',
-    'service_price' => '가격',
-    'service_quantity' => '수량',
-    'service_subtotal_price' => '소계',
-    'service_total_price' => '합계',
-    'service_pay_button' => '잔액지불',
-    'services_none' => '내용이 없습니다',
-    'service_traffic' => '함유 흐름',
-    'service_days' => '휴효기간',
-    'service_buy_button' => '구입',
-    'service_unlimited' => '무제한',
-    'service_device' => '장치 수',
-    'day' => '일',
-    'month' => '달',
-    'coupon' => '할인권',
-    'redeem_coupon' => '사용',
-    'service_type_1' => '유량용 가방',
-    'service_type_2' => '세트',
-    'service_type_3' => '잔액',
-
-    // 流量日志
-    'traffic_log_tips' => '메모:데이터 갱신 지연.',
-    'traffic_log_30days' => '30 일트래픽 사용현황',
-    'traffic_log_24hours' => '24 간트패픽 사용현환',
-    'traffic_log_keywords' => '사용된트래픽',
-    'traffic_log_unit' => '단위 / G',
-    'traffic_log_max' => '최대치',
-
-    // 邀请码
-    'invite_code_make' => '초청코드생성',
-    'invite_code_button' => '생성',
-    'invite_code_tips' => '생성가능<strong> :num </strong>개 총청코드, :days 일내에 유효하다.',
-    'invite_code_my_codes' => '나의 초청코드',
-    'invite_code_table_name' => '초청코드',
-    'invite_code_table_date' => '유효기간',
-    'invite_code_table_user' => '사용자',
-    'invite_code_table_status' => '상태',
-    'invite_code_table_none_codes' => '데이터 없음',
-    'invite_code_table_status_un' => '미使用',
-    'invite_code_table_status_yes' => '이미사용',
-    'invite_code_table_status_expire' => '기간만료',
-    'invite_code_summary' => '총 :total 개초청코드',
-
-    // 单据
-    'invoice_title' => '거래내역',
-    'invoice_table_id' => '번호',
-    'invoice_table_name' => '서버스',
-    'invoice_table_pay_way' => '지불 방식',
-    'invoice_table_price' => '금액',
-    'invoice_table_create_date' => '구입일자',
-    'invoice_table_expired_at' => '만료 시간',
-    'invoice_table_status' => '상태',
-    'invoice_table_none' => '데이터 없음',
-    'invoice_table_closed' => '닫혔어',
-    'invoice_table_wait_payment' => '지불대기',
-    'invoice_table_wait_confirm' => '확인중',
-    'invoice_table_wait_active' => '사용중',
-    'invoice_table_expired' => '기간만료',
-    'invoice_table_goods_deleted' => '[삭제됨]',
-
-    // 工单
-    'ticket_title' => '티켓 지원',
-    'ticket_open' => '열다',
-    'ticket_close' => '닫기',
-    'ticket_cancel' => '취소',
-    'ticket_confirm' => '확인',
-    'ticket_table_title' => '재목',
-    'ticket_table_status' => '상태',
-    'ticket_table_none' => '데이터가 없다',
-    'ticket_table_status_wait' => '처리중',
-    'ticket_table_status_reply' => '답장',
-    'ticket_table_status_close' => '닫혔어',
-    'ticket_table_new_button' => '새 지원 티켓 열기',
-    'ticket_table_new_title' => '제목 : (재정 지원, 계정 지원, 기술 지원, 사전 판매 지원 등)',
-    'ticket_table_content' => '질문을 작성하십시오',
-    'ticket_table_view' => '전망',
-    'ticket_reply' => '보내다',
-    'ticket_reply_me' => '나',
-    'ticket_reply_master' => '관리자',
-    'ticket_reply_placeholder' => '뭐라고 말해봐',
-    'ticket_close_title' => '티켓 닫기',
-    'ticket_close_content' => '지원 티켓을 닫을 예정입니까?',
-
-    // 推广返利
-    'referral_title' => '수수료',
-    'referral_button' => '주소사 ',
-    'referral_my_link' => '홍보전용 링크',
-    'referral_table_user' => '소비자',
-    'referral_table_amount' => '소비금액',
-    'referral_table_commission' => '리턴금액',
-    'referral_table_status' => '상태',
-    'referral_table_date' => '리턴시간',
-    'referral_table_none' => '데이터 없음',
-    'referral_table_apply' => '출금신청 ',
-    'referral_summary' => '총 :total 개기록,합계리턴 :amount 원, :money 원되여야 리턴가능 합니다。',
-    'referral_apply_title' => '현금 인출 기록',
-    'referral_apply_table_amount' => '양',
-    'referral_apply_table_status' => '상태',
-    'referral_apply_table_date' => '날짜',
-    'console' => '관리센트',
-    'profile' => '개인정보',
-    'logout' => '로그아웃',
-    'promote_link' => '보급 링크 등록을 통해 활성화, 양측 모두 :traffic 유량에 장려합니다; 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있는 :referral_percent% 를 장려합니다.',
-    'promote_invite_code' => '요청을 통해 등록 및 활성화, 양측 모두 :traffic 유량에 장려합니다, 그들이 소비할 때, 그들의 소비 금액을 얻을 수 있습니다 :referral_percent% 를 장려합니다',
-    'invite_user_title' => '초대장',
-    'invite_user_email' => '사용자 이름',
-    'invite_user_created_at' => '등록 시간',
-];

+ 1 - 12
resources/lang/ko/pagination.php

@@ -1,17 +1,6 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Pagination Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used by the paginator library to build
-    | the simple pagination links. You are free to change them to anything
-    | you want to customize your views to better match your application.
-    |
-    */
-
     'previous' => '&laquo; 이전',
-    'next' => '다음 &raquo;',
+    'next'     => '다음 &raquo;',
 ];

+ 4 - 15
resources/lang/ko/passwords.php

@@ -1,20 +1,9 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Password Reminder Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are the default lines which match reasons
-    | that are given by the password broker for a password update attempt
-    | has failed, such as for an invalid token or invalid new password.
-    |
-    */
-
-    'reset' => '비밀번호가 변경되었습니다!',
-    'sent' => '비밀번호 재설정 링크를 이메일로 전송했습니다!',
+    'reset'     => '비밀번호가 변경되었습니다!',
+    'sent'      => '비밀번호 재설정 링크를 이메일로 전송했습니다!',
     'throttled' => '잠시 후 다시 시도해주세요.',
-    'token' => '해당 비밀번호 재설정 토큰이 유효하지 않습니다.',
-    'user' => '해당 이메일을 사용하는 사용자를 찾을 수 없습니다.',
+    'token'     => '해당 비밀번호 재설정 토큰이 유효하지 않습니다.',
+    'user'      => '해당 이메일을 사용하는 사용자를 찾을 수 없습니다.',
 ];

+ 0 - 138
resources/lang/ko/validation-inline.php

@@ -1,138 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => 'This field must be accepted.',
-    'active_url' => 'This is not a valid URL.',
-    'after' => 'This must be a date after :date.',
-    'after_or_equal' => 'This must be a date after or equal to :date.',
-    'alpha' => 'This field may only contain letters.',
-    'alpha_dash' => 'This field may only contain letters, numbers, dashes and underscores.',
-    'alpha_num' => 'This field may only contain letters and numbers.',
-    'array' => 'This field must be an array.',
-    'before' => 'This must be a date before :date.',
-    'before_or_equal' => 'This must be a date before or equal to :date.',
-    'between' => [
-        'numeric' => 'This value must be between :min and :max.',
-        'file' => 'This file must be between :min and :max kilobytes.',
-        'string' => 'This string must be between :min and :max characters.',
-        'array' => 'This content must have between :min and :max items.',
-    ],
-    'boolean' => 'This field must be true or false.',
-    'confirmed' => 'The confirmation does not match.',
-    'date' => 'This is not a valid date.',
-    'date_equals' => 'This must be a date equal to :date.',
-    'date_format' => 'This does not match the format :format.',
-    'different' => 'This value must be different from :other.',
-    'digits' => 'This must be :digits digits.',
-    'digits_between' => 'This must be between :min and :max digits.',
-    'dimensions' => 'This image has invalid dimensions.',
-    'distinct' => 'This field has a duplicate value.',
-    'email' => 'This must be a valid email address.',
-    'ends_with' => 'This must end with one of the following: :values.',
-    'exists' => 'The selected value is invalid.',
-    'file' => 'The content must be a file.',
-    'filled' => 'This field must have a value.',
-    'gt' => [
-        'numeric' => 'The value must be greater than :value.',
-        'file' => 'The file size must be greater than :value kilobytes.',
-        'string' => 'The string must be greater than :value characters.',
-        'array' => 'The content must have more than :value items.',
-    ],
-    'gte' => [
-        'numeric' => 'The value must be greater than or equal :value.',
-        'file' => 'The file size must be greater than or equal :value kilobytes.',
-        'string' => 'The string must be greater than or equal :value characters.',
-        'array' => 'The content must have :value items or more.',
-    ],
-    'image' => 'This must be an image.',
-    'in' => 'The selected value is invalid.',
-    'in_array' => 'This value does not exist in :other.',
-    'integer' => 'This must be an integer.',
-    'ip' => 'This must be a valid IP address.',
-    'ipv4' => 'This must be a valid IPv4 address.',
-    'ipv6' => 'This must be a valid IPv6 address.',
-    'json' => 'This must be a valid JSON string.',
-    'lt' => [
-        'numeric' => 'The value must be less than :value.',
-        'file' => 'The file size must be less than :value kilobytes.',
-        'string' => 'The string must be less than :value characters.',
-        'array' => 'The content must have less than :value items.',
-    ],
-    'lte' => [
-        'numeric' => 'The value must be less than or equal :value.',
-        'file' => 'The file size must be less than or equal :value kilobytes.',
-        'string' => 'The string must be less than or equal :value characters.',
-        'array' => 'The content must not have more than :value items.',
-    ],
-    'max' => [
-        'numeric' => 'The value may not be greater than :max.',
-        'file' => 'The file size may not be greater than :max kilobytes.',
-        'string' => 'The string may not be greater than :max characters.',
-        'array' => 'The content may not have more than :max items.',
-    ],
-    'mimes' => 'This must be a file of type: :values.',
-    'mimetypes' => 'This must be a file of type: :values.',
-    'min' => [
-        'numeric' => 'The value must be at least :min.',
-        'file' => 'The file size must be at least :min kilobytes.',
-        'string' => 'The string must be at least :min characters.',
-        'array' => 'The value must have at least :min items.',
-    ],
-    'not_in' => 'The selected value is invalid.',
-    'not_regex' => 'This format is invalid.',
-    'numeric' => 'This must be a number.',
-    'password' => 'The password is incorrect.',
-    'present' => 'This field must be present.',
-    'regex' => 'This format is invalid.',
-    'required' => 'This field is required.',
-    'required_if' => 'This field is required when :other is :value.',
-    'required_unless' => 'This field is required unless :other is in :values.',
-    'required_with' => 'This field is required when :values is present.',
-    'required_with_all' => 'This field is required when :values are present.',
-    'required_without' => 'This field is required when :values is not present.',
-    'required_without_all' => 'This field is required when none of :values are present.',
-    'same' => 'The value of this field must match the one from :other.',
-    'size' => [
-        'numeric' => 'The value must be :size.',
-        'file' => 'The file size must be :size kilobytes.',
-        'string' => 'The string must be :size characters.',
-        'array' => 'The content must contain :size items.',
-    ],
-    'starts_with' => 'This must start with one of the following: :values.',
-    'string' => 'This must be a string.',
-    'timezone' => 'This must be a valid zone.',
-    'unique' => 'This has already been taken.',
-    'uploaded' => 'This failed to upload.',
-    'url' => 'This format is invalid.',
-    'uuid' => 'This must be a valid UUID.',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-];

+ 91 - 126
resources/lang/ko/validation.php

@@ -1,150 +1,115 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages.
-    |
-    */
-
-    'accepted' => ':attribute을(를) 동의해야 합니다.',
-    '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' => [
-        'numeric' => ':attribute은(는) :min에서 :max 사이여야 합니다.',
-        'file' => ':attribute은(는) :min에서 :max 킬로바이트 사이여야 합니다.',
-        'string' => ':attribute은(는) :min에서 :max 문자 사이여야 합니다.',
-        'array' => ':attribute은(는) :min에서 :max 개의 항목이 있어야 합니다.',
+    'accepted'             => ':attribute을(를) 동의해야 합니다.',
+    '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'              => [
+        'numeric' => ':attribute의 값은 :min에서 :max 사이여야 합니다.',
+        'file'    => ':attribute의 용량은 :min에서 :max 킬로바이트 사이여야 합니다.',
+        'string'  => ':attribute의 길이는 :min에서 :max 문자 사이여야 합니다.',
+        'array'   => ':attribute의 항목 수는 :min에서 :max 개의 항목이 있어야 합니다.',
     ],
-    'boolean' => ':attribute은(는) true 또는 false 이어야 합니다.',
-    'confirmed' => ':attribute 확인 항목이 일치하지 않습니다.',
-    'date' => ':attribute은(는) 유효한 날짜가 아닙니다.',
-    'date_equals' => ':attribute은(는) :date과(와) 같은날짜여야합니다.',
-    'date_format' => ':attribute이(가) :format 형식과 일치하지 않습니다.',
-    'different' => ':attribute와(과) :other은(는) 서로 달라야 합니다.',
-    'digits' => ':attribute은(는) :digits 자리 숫자여야 합니다.',
-    'digits_between' => ':attribute)은(는) :min에서 :max 자리 사이여야 합니다.',
-    'dimensions' => ':attribute은(는) 유효하지 않는 이미지 크기입니다.',
-    'distinct' => ':attribute 필드에 중복된 값이 있습니다.',
-    'email' => ':attribute은(는) 유효한 이메일 주소여야 합니다.',
-    'ends_with' => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.',
-    'exists' => '선택된 :attribute은(는) 유효하지 않습니다.',
-    'file' => ':attribute은(는) 파일이어야 합니다.',
-    'filled' => ':attribute 필드는 값이 있어야 합니다.',
-    'gt' => [
+    'boolean'              => ':attribute은(는) true 또는 false 이어야 합니다.',
+    'confirmed'            => ':attribute 확인 항목이 일치하지 않습니다.',
+    'date'                 => ':attribute은(는) 유효한 날짜가 아닙니다.',
+    'date_equals'          => ':attribute은(는) :date과(와) 같은날짜여야합니다.',
+    'date_format'          => ':attribute이(가) :format 형식과 일치하지 않습니다.',
+    'different'            => ':attribute와(과) :other은(는) 서로 달라야 합니다.',
+    'digits'               => ':attribute은(는) :digits 자리 숫자여야 합니다.',
+    'digits_between'       => ':attribute)은(는) :min에서 :max 자리 사이여야 합니다.',
+    'dimensions'           => ':attribute은(는) 올바르지 않는 이미지 크기입니다.',
+    'distinct'             => ':attribute 필드에 중복된 값이 있습니다.',
+    'email'                => ':attribute은(는) 유효한 이메일 주소여야 합니다.',
+    'ends_with'            => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.',
+    'exists'               => '선택된 :attribute은(는) 올바르지 않습니다.',
+    'file'                 => ':attribute은(는) 파일이어야 합니다.',
+    'filled'               => ':attribute 필드는 값이 있어야 합니다.',
+    'gt'                   => [
         'numeric' => ':attribute의 값은 :value보다 커야 합니다.',
-        'file' => ':attribute의 용량은 :value킬로바이트보다 커야 합니다.',
-        'string' => ':attribute의 길이는 :value보다 길어야 합니다.',
-        'array' => ':attribute의 항목수는 :value개 보다 많아야 합니다.',
+        'file'    => ':attribute의 용량은 :value킬로바이트보다 커야 합니다.',
+        'string'  => ':attribute의 길이는 :value보다 길어야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 많아야 합니다.',
     ],
-    'gte' => [
+    'gte'                  => [
         'numeric' => ':attribute의 값은 :value보다 같거나 커야 합니다.',
-        'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 커야 합니다.',
-        'string' => ':attribute의 길이는 :value보다 같거나 길어야 합니다.',
-        'array' => ':attribute의 항목수는 :value개 보다 같거나 많아야 합니다.',
+        'file'    => ':attribute의 용량은 :value킬로바이트보다 같거나 커야 합니다.',
+        'string'  => ':attribute의 길이는 :value보다 같거나 길어야 합니다.',
+        'array'   => ':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' => [
+    'image'                => ':attribute은(는) 이미지여야 합니다.',
+    'in'                   => '선택된 :attribute은(는) 올바르지 않습니다.',
+    'in_array'             => ':attribute 필드는 :other에 존재하지 않습니다.',
+    'integer'              => ':attribute은(는) 정수여야 합니다.',
+    'ip'                   => ':attribute은(는) 유효한 IP 주소여야 합니다.',
+    'ipv4'                 => ':attribute은(는) 유효한 IPv4 주소여야 합니다.',
+    'ipv6'                 => ':attribute은(는) 유효한 IPv6 주소여야 합니다.',
+    'json'                 => ':attribute은(는) JSON 문자열이어야 합니다.',
+    'lt'                   => [
         'numeric' => ':attribute의 값은 :value보다 작아야 합니다.',
-        'file' => ':attribute의 용량은 :value킬로바이트보다 작아야 합니다.',
-        'string' => ':attribute의 길이는 :value보다 짧아야 합니다.',
-        'array' => ':attribute의 항목수는 :value개 보다 작아야 합니다.',
+        'file'    => ':attribute의 용량은 :value킬로바이트보다 작아야 합니다.',
+        'string'  => ':attribute의 길이는 :value보다 짧아야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 작아야 합니다.',
     ],
-    'lte' => [
+    'lte'                  => [
         'numeric' => ':attribute의 값은 :value보다 같거나 작아야 합니다.',
-        'file' => ':attribute의 용량은 :value킬로바이트보다 같거나 작아야 합니다.',
-        'string' => ':attribute의 길이는 :value보다 같거나 짧아야 합니다.',
-        'array' => ':attribute의 항목수는 :value개 보다 같거나 작아야 합니다.',
+        'file'    => ':attribute의 용량은 :value킬로바이트보다 같거나 작아야 합니다.',
+        'string'  => ':attribute의 길이는 :value보다 같거나 짧아야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 같거나 작아야 합니다.',
     ],
-    'max' => [
+    'max'                  => [
         'numeric' => ':attribute은(는) :max보다 클 수 없습니다.',
-        'file' => ':attribute은(는) :max킬로바이트보다 클 수 없습니다.',
-        'string' => ':attribute은(는) :max자보다 클 수 없습니다.',
-        'array' => ':attribute은(는) :max개보다 많을 수 없습니다.',
+        'file'    => ':attribute은(는) :max킬로바이트보다 클 수 없습니다.',
+        'string'  => ':attribute은(는) :max자보다 클 수 없습니다.',
+        'array'   => ':attribute은(는) :max개보다 많을 수 없습니다.',
     ],
-    'mimes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
-    'mimetypes' => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
-    'min' => [
+    'mimes'                => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
+    'mimetypes'            => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
+    'min'                  => [
         'numeric' => ':attribute은(는) 최소한 :min이어야 합니다.',
-        'file' => ':attribute은(는) 최소한 :min킬로바이트이어야 합니다.',
-        'string' => ':attribute은(는) 최소한 :min자이어야 합니다.',
-        'array' => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.',
+        'file'    => ':attribute은(는) 최소한 :min킬로바이트이어야 합니다.',
+        'string'  => ':attribute은(는) 최소한 :min자이어야 합니다.',
+        'array'   => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.',
     ],
-    'not_in' => '선택된 :attribute이(가) 유효하지 않습니다.',
-    'not_regex' => ':attribute의 형식이 올바르지 않습니다.',
-    'numeric' => ':attribute은(는) 숫자여야 합니다.',
-    'password' => ':비밀번호가 잘못되었습니다.',
-    'present' => ':attribute 필드가 있어야 합니다.',
-    'regex' => ':attribute 형식이 유효하지 않습니다.',
-    'required' => ':attribute 필드는 필수입니다.',
-    '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 필드가 있어야 합니다.',
+    'regex'                => ':attribute 형식이 올바르지 않습니다.',
+    'required'             => ':attribute 필드는 필수입니다.',
+    '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' => [
+    'same'                 => ':attribute와(과) :other은(는) 일치해야 합니다.',
+    'size'                 => [
         'numeric' => ':attribute은(는) :size (이)여야 합니다.',
-        'file' => ':attribute은(는) :size킬로바이트여야 합니다.',
-        'string' => ':attribute은(는) :size자여야 합니다.',
-        'array' => ':attribute은(는) :size개의 항목을 포함해야 합니다.',
+        'file'    => ':attribute은(는) :size킬로바이트여야 합니다.',
+        'string'  => ':attribute은(는) :size자여야 합니다.',
+        'array'   => ':attribute은(는) :size개의 항목을 포함해야 합니다.',
     ],
-    'starts_with' => ':attribute은(는) :values 중하나로시작해야합니다.',
-    'string' => ':attribute은(는) 문자열이어야 합니다.',
-    'timezone' => ':attribute은(는) 올바른 시간대 이어야 합니다.',
-    'unique' => ':attribute은(는) 이미 사용 중입니다.',
-    'uploaded' => ':attribute을(를) 업로드하지 못했습니다.',
-    'url' => ':attribute 형식은 유효하지 않습니다.',
-    'uuid' => ':attribute은(는) 유효한UUID여야합니다.',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
+    'starts_with'          => ':attribute은(는) :values 중 하나로 시작해야 합니다.',
+    'string'               => ':attribute은(는) 문자열이어야 합니다.',
+    'timezone'             => ':attribute은(는) 올바른 시간대 이어야 합니다.',
+    'unique'               => ':attribute은(는) 이미 사용 중입니다.',
+    'uploaded'             => ':attribute을(를) 업로드하지 못했습니다.',
+    'url'                  => ':attribute 형식은 올바르지 않습니다.',
+    'uuid'                 => ':attribute은(는) 유효한UUID여야합니다.',
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => 'custom-message',
         ],
     ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Attributes
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used to swap attribute place-holders
-    | with something more reader friendly such as E-Mail Address instead
-    | of "email". This simply helps us make messages a little cleaner.
-    |
-    */
-
-    'attributes' => [
-    ],
+    'attributes'           => [],
 ];

+ 0 - 46
resources/lang/zh-CN.json

@@ -1,46 +0,0 @@
-{
-  "A fresh verification link has been sent to your email address.": "新的验证链接已发送到您的 E-mail。",
-  "All rights reserved.": "版本所有。",
-  "Before proceeding, please check your email for a verification link.": "在继续之前请先验证您的 E-mail。",
-  "click here to request another": "点击重新发送 E-mail",
-  "Confirm Password": "确认密码",
-  "E-Mail Address": "E-mail",
-  "Forbidden": "访问被拒绝",
-  "Forgot Your Password?": "忘记密码?",
-  "Go Home": "回首页",
-  "Hello!": "您好:",
-  "If you did not create an account, no further action is required.": "如果您未注册帐号,请忽略此邮件。",
-  "If you did not receive the email": "如果您没有收到",
-  "If you did not request a password reset, no further action is required.": "如果您未申请重设密码,请忽略此邮件。",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "如果您点击「:actionText」按钮时出现问题,请复制下方链接到浏览器中开启:",
-  "Invalid signature.": "签名无效",
-  "Login": "登录",
-  "Logout": "注销",
-  "Name": "姓名",
-  "Not Found": "页面不存在",
-  "Oh no": "不好了",
-  "Page Expired": "页面会话已超时",
-  "Password": "密码",
-  "Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail:",
-  "Please confirm your password before continuing.": "如要继续操作,请先确认密码。",
-  "Regards": "致敬",
-  "Register": "注册",
-  "Remember Me": "记住我",
-  "Reset Password": "重设密码",
-  "Reset Password Notification": "重设密码通知",
-  "Send Password Reset Link": "发送重设密码链接",
-  "Server Error": "服务器错误",
-  "Service Unavailable": "暂时不提供服务",
-  "This action is unauthorized.": "权限不足",
-  "This password reset link will expire in :count minutes.": "这个重设密码链接将会在 :count 分钟后失效。",
-  "Toggle navigation": "切换导航",
-  "Too Many Attempts.": "尝试次数过多",
-  "Too Many Requests": "请求次数过多",
-  "Unauthorized": "未授权",
-  "Verify Email Address": "验证 E-mail",
-  "Verify Your Email Address": "验证 E-mail",
-  "We won't ask for your password again for a few hours.": "确认完成后,接下来几个小时内您不需再输入密码。",
-  "You are receiving this email because we received a password reset request for your account.": "您收到此电子邮件是因为我们收到了您帐户的密码重设请求。",
-  "Your email address is not verified.": "您的电子邮件尚未验证通过",
-  "Whoops!": "哎呦!"
-}

+ 68 - 72
resources/lang/zh-CN/auth.php

@@ -1,76 +1,72 @@
 <?php
 
 return [
-    'active' => '激 活',
-    'active_account' => '激活账号',
-    'active_tip' => '账号未激活,请点击',
-    'captcha' => '验证码',
-    'code' => '邀请码',
-    'optional' => '可选',
-    'login' => '登 录',
-    'register' => '注 册',
-    'send' => '发送',
-    'tip' => '提示',
-    'email' => '邮箱',
-    'password' => '密码',
-    'confirm_password' => '请再次输入密码',
-    'back' => '返 回',
-    'close' => '关 闭',
-    'submit' => '提 交',
-    'request' => '获 取',
-    'remember' => '记住账号',
-    'resetPassword' => '重置密码',
-    'new_password' => '输入新密码',
-    'forget_password' => '找回密码',
-    'reset_password' => '重置密码',
-    'get_free_code' => '点击获取邀请码',
-    'accept_term' => '我已阅读并同意遵守',
-    'tos' => '用户条款',
-    'aup' => '可接受使用条款',
-    'register_tip' => '还没有账号?请去',
-    'system_maintenance' => '系统维护中...',
-    'system_maintenance_tip' => '系统正在维护,如果您需要注册,请联系 :email ',
-    'overtime' => '该链接已失效',
-    'active_success' => '激活成功',
-    'active_fail' => '激活失败',
-    'active_limit' => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email',
-    'active_close' => '本站已关闭账号激活功能,请联系:email',
-    'code_null' => '请输入邀请码',
-    'captcha_null' => '请输入验证码',
-    'captcha_error' => '验证码错误,请重新输入',
-    'captcha_overtime' => '验证码不合法!可能已过期,请刷新后重试',
-    'captcha_loading' => '正在加载验证码...',
-    'captcha_required' => '请正确完成验证码操作',
-    'captcha_fail' => '服务器验证失败,请重新尝试',
-    'captcha_close' => '本站关闭了通过验证码注册',
-    'captcha_send' => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱',
-    'code_error' => '邀请码不可用,请重试',
-    'username_null' => '请输入昵称',
-    'email_null' => '请输入邮箱账号',
-    'email_normal' => '账号状态正常,无需激活',
-    'email_legitimate' => '邮箱地址不合规',
-    'email_banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱',
-    'email_invalid' => '使用邮箱不在本站支持邮箱列表内',
-    'email_exist' => '账号已存在,如果忘记密码请找回密码',
-    'email_notExist' => '账号不存在,请重试',
-    'login_error' => '邮箱或密码错误',
-    'login_ban' => '您的账号已被禁止登录,请联系:email',
-    'password_null' => '请输入密码',
-    'password_limit' => '密码最少要6位数',
-    'password_same' => '两次输入密码不一致',
-    'register_close' => '本站关闭了注册通道',
-    'register_anti' => '防刷机制已激活,请勿频繁注册',
-    'register_fail' => '注册失败,请稍后尝试',
-    'register_success' => '注册成功',
-    'register_active_tip' => '激活邮件已发送! 请查看注册所用邮箱(邮件可能在垃圾箱中)',
-    'repeat_request' => '请勿重复请求,请刷新后重试',
-    'reset_password_close' => '本站关闭了找回密码功能,请联系:email',
-    'reset_password_limit' => '24小时内只能重设密码:time次,请勿频繁操作',
-    'reset_password_success_tip' => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)',
-    'reset_password_same_fail' => '新旧密码一样,请重新输入',
-    'reset_password_fail' => '重设密码失败',
-    'reset_password_new' => '新密码设置成功,请自行登录',
-    'request_error' => '请求异常,请刷新页面后重试',
-    'username' => '昵称',
-    'unaccepted' => '请阅读用户条款和可接受使用条款,并同意',
+    'accept_term'     => '我已阅读并同意遵守',
+    'active'          => [
+        'attribute' => '激活',
+        'error'     => [
+            'activated' => '账号已激活,无需再次激活',
+            'disable'   => '本站关闭了账号激活子系统,您可以直接去登录!',
+            'throttle'  => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email',
+        ],
+        'promotion' => ['0' => '账号尚未激活,请点击', '1' => '启动激活程序!'],
+        'sent'      => '激活邮件已发送! 请查看注册所用邮箱(邮件可能在垃圾箱中)',
+    ],
+    'aup'             => '可接受使用条款',
+    'captcha'         => [
+        'attribute' => '验证码',
+        'error'     => ['failed' => '验证码验证失败,请重新输入', 'timeout' => '验证码不合法!可能已过期,请刷新后重试'],
+        'required'  => '请正确完成验证码操作',
+        'sent'      => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱',
+    ],
+    'email'           => [
+        'error' => ['banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', 'invalid' => '使用邮箱不在本站支持邮箱列表内'],
+    ],
+    'error'           => [
+        'account_baned'  => '您的账号已被禁止登录!',
+        'login_error'    => '登录错误,请稍后重试!',
+        'login_failed'   => '登录失败,请检查邮箱或密码是否输入正确!',
+        'repeat_request' => '请勿重复请求,请刷新后重试',
+        'url_timeout'    => '链接已失效, 请重新操作',
+    ],
+    'invite'          => [
+        'attribute'    => '邀请码',
+        'error'        => ['unavailable' => '邀请码不可用,请重试'],
+        'get'          => '点击获取邀请码',
+        'not_required' => '无需邀请码,可直接注册!',
+    ],
+    'login'           => '登 录',
+    'logout'          => '登 出',
+    'maintenance'     => '维护',
+    'maintenance_tip' => '网站维护中',
+    'optional'        => '可选',
+    'password'        => [
+        'forget'   => '忘记密码?',
+        'new'      => '输入新密码',
+        'original' => '原密码',
+        'reset'    => [
+            'attribute' => '重置密码',
+            'error'     => [
+                'disabled' => '本站关闭了密码重置子系统,有事请联系 :email ',
+                'failed'   => '重设密码失败',
+                'throttle' => '24小时内只能重设密码 :time 次,请勿频繁操作',
+                'same'     => '新密码不可与旧密码一样,请重新输入',
+                'wrong'    => '旧密码错误,请重新输入',
+                'demo'     => '演示环境禁止修改管理员密码',
+            ],
+            'sent'      => '重置成功,请查看所用邮箱(邮件可能在垃圾箱中)',
+            'success'   => '新密码设置成功,请前往登录页面',
+        ],
+    ],
+    'register'        => [
+        'attribute' => '注 册',
+        'code'      => '注册验证码',
+        'error'     => ['disable' => '抱歉,本站关闭了注册通道', 'throttle' => '防刷机制已激活,请勿频繁注册'],
+        'promotion' => '还没有账号?请去',
+        'failed'    => '注册失败,请稍后尝试',
+        'success'   => '注册成功',
+    ],
+    'remember_me'     => '记住我',
+    'request'         => '获 取',
+    'tos'             => '用户条款',
 ];

+ 85 - 0
resources/lang/zh-CN/common.php

@@ -0,0 +1,85 @@
+<?php
+
+return [
+    'account'        => '账号',
+    'available_date' => '有效期',
+    'created_at'     => '生成时间',
+    'expired_at'     => '到期时间',
+    'updated_at'     => '更新时间',
+    'back'           => '返 回',
+    'cancel'         => '取 消',
+    'close'          => '关 闭',
+    'close_item'     => '关闭:attribute',
+    'confirm'        => '确 认',
+    'continues'      => '继 续',
+    'open'           => '打 开',
+    'send'           => '发 送',
+    'view'           => '查 看',
+    'reset'          => '重 置',
+    'copy'           => [
+        'attribute' => '复 制',
+        'success'   => '复制成功',
+        'failed'    => '复制失败,请手动复制',
+    ],
+    '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'        => '成功',
+    'failed'         => '失败',
+    'update'         => '更 新',
+    'update_action'  => '更新:action',
+    'none'           => '无',
+    'new'            => '新',
+    'sorry'          => '抱歉',
+    'applied'        => ':attribute生效',
+    'active_item'    => '激活:attribute',
+    'error'          => '错误',
+    'toggle'         => '切 换',
+    'toggle_action'  => '切换:action',
+    'request_url'    => '请求地址',
+    'function'       => [
+        'navigation' => '导航',
+        'menubar'    => '菜单栏',
+        'fullscreen' => '全屏',
+    ],
+    'days'           => [
+        'sun'     => '周日',
+        'mon'     => '周一',
+        'tue'     => '周二',
+        'wed'     => '周三',
+        'thu'     => '周四',
+        'fri'     => '周五',
+        'sat'     => '周六',
+        'weekend' => '周末',
+        'work'    => '工作日',
+        'next'    => '次日',
+    ],
+    'qrcode'         => ':attribute二维码',
+    'deleted'        => '已删除',
+    'deleted_item'   => ':attribute已删除',
+    'print'          => '打印',
+    'unlimited'      => '无限制',
+    'payment'        => [
+        'credit' => '余额',
+        'wechat' => '微信',
+        'alipay' => '支付宝',
+        'crypto' => '虚拟货币',
+    ],
+    'recommend'      => '推荐',
+    'advance'        => '进阶',
+    'status'         => '状态',
+    'action'         => '操作',
+];

+ 30 - 14
resources/lang/zh-CN/error.php

@@ -1,18 +1,34 @@
 <?php
 
 return [
-    'title' => '访问被拒绝',
-    'ForbiddenRobot' => '检测到机器人访问,禁止访问',
-    'ForbiddenAccess' => '检测到未知IP或使用代理访问,禁止访问',
-    'ForbiddenChina' => '检测到中国IP或使用代理访问,禁止访问',
-    'ForbiddenOversea' => '检测到海外IP或代理访问,禁止访问',
-    'MissingPage' => '找不到网页',
-    'Unauthorized' => '未授权访问',
-    'Refresh' => '刷 新',
-    'RefreshPage' => '请刷新页面后,再访问',
-    'SystemError' => '系统错误',
-    'Visit' => '请访问',
-    'log' => '日志',
-    'SecurityError' => '非安全入口访问',
-    'SecurityEnter' => '安全入口访问',
+    'forbidden'    => [
+        'access'  => '检测到未知IP或使用代理访问,禁止访问',
+        'bots'    => '检测到机器人访问,禁止访问',
+        'china'   => '检测到中国IP或使用代理访问,禁止访问',
+        'oversea' => '检测到海外IP或代理访问,禁止访问',
+    ],
+    'log'          => '日志',
+    'missing_page' => '找不到网页',
+    'refresh'      => '刷 新',
+    'refresh_page' => '请刷新页面后,再访问',
+    'report'       => '错❌误携带了报告:',
+    'safe_enter'   => '安全入口访问',
+    'system'       => '系统错误',
+    'title'        => '⚠️错误触发',
+    'unauthorized' => '未授权访问',
+    'unsafe_enter' => '非安全入口访问',
+    'visit'        => '请访问',
+    'whoops'       => '哎呦!',
+    'get_ip'       => '获取IP信息异常',
+    'subscribe'    => [
+        'unknown'      => '使用链接错误!请重新获取!',
+        'sub_baned'    => '链接已被封禁,请前往官网查询原因',
+        'user'         => '错误链接,账号不存在!请重新获取链接',
+        'user_disable' => '账号被禁用!',
+        'baned_until'  => '账号封禁至:time,请解封后再更新!',
+        'out'          => '流量耗尽!请重新购买或重置流量!',
+        'expired'      => '账号过期!请续费!',
+        'question'     => '账号存在问题,请前往官网查询!',
+        'none'         => '无可用节点',
+    ],
 ];

+ 0 - 209
resources/lang/zh-CN/home.php

@@ -1,209 +0,0 @@
-<?php
-
-return [
-    'panel' => '用户中心',
-    'subscribe_help' => '互动式教程',
-    'subscribe_link' => '订阅链接',
-    'copy_subscribe_address' => '复制',
-    'exchange_subscribe' => '更换',
-    'subscribe_warning' => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。',
-    'reset_password_title' => '重置密码',
-    'email_placeholder' => '请输入用户名',
-    'system_down' => '系统维护中',
-    'subscribe_baned' => '您的订阅功能被禁用,请联系管理员恢复',
-    'download' => '下载',
-    'sign_in' => '签 到',
-
-    // 菜单
-    'home' => '主页',
-    'nodeList' => '我的线路',
-    'services' => '购买服务',
-    'traffic_log' => '流量记录',
-    'help' => '帮助中心',
-    'invite_code' => '邀请码',
-    'invoices' => '我的账单',
-    'tickets' => '服务单',
-    'referrals' => '推广返利',
-    'free_invite_codes_title' => '免费邀请码',
-    'no_need_invite_codes' => '现在无需邀请码',
-
-    // 首页
-    'ratio_tips' => '推荐使用支持节点订阅功能的客户端,通过订阅功能可以在客户端快速同步节点信息。',
-    'subscribe_button' => '获取订阅链接',
-    'account_info' => '账号信息',
-    'account_level' => '等级',
-    'account_credit' => '账户余额',
-    'account_score' => '积分',
-    'account_status' => '账号状态',
-    'account_expire' => '套餐时长',
-    'account_last_usage' => '最近使用',
-    'account_last_login' => '最近登录',
-    'bandwidth' => '流量',
-    'account_bandwidth_usage' => '剩余流量',
-    'account_total_traffic' => '共计',
-    'account_usage_traffic' => '已使用',
-    'account_reset_notice' => '还有 :reset_day 天重置',
-    'account_login_log' => '登陆日志',
-    'article_title' => '文章',
-    'recharge' => '充值',
-    'enabled' => '正常',
-    'disabled' => '停用',
-    'limited' => '限制',
-    'never_used' => '从未使用',
-    'expired' => '已过期',
-    'reason' => '理由',
-    'normal' => '账号一切正常',
-    'reason_expired' => '您的账号套餐已过期',
-    'reason_traffic_exhausted' => '您的账号[剩余流量]消耗殆尽',
-    'reason_overused' => '本时段使用流量超过 <code>:data</code> GB触发系统限制<br/> <code id="countdown">:min</code> 后解除限制',
-    'reason_unknown' => '未知原因,请开工单联系管理',
-    'never_loggedin' => '从未登录',
-    'announcement' => '公告',
-    'recharge_credit' => '余额充值',
-    'payment_method' => '充值方式',
-    'close' => '关闭',
-    'cancel' => '取消',
-    'redeem_score' => '兑换流量',
-    'redeem' => '立即兑换',
-    'redeem_info' => '您有 :score 积分,可兑换 :score M 免费流量。',
-    'coupon_code' => '充值券码',
-    'please_input_coupon' => '请输入充值券码',
-    'scan_qrcode' => '请使用客户端扫描二维码',
-    'setting_info' => '配置信息',
-    'ratio' => '结算比例',
-    'coupon_not_empty' => '优惠券码不能为空',
-    'recharging' => '充值中...',
-    'error_response' => '出现了错误,请稍后再试。',
-    'error' => '错误',
-    'online_pay' => '在线支付',
-    'pay' => '支付',
-
-    // 用户资料
-    'submit' => '提 交',
-    'contact' => '联系方式',
-    'ssr_setting' => '代理设置',
-    'password' => '用户密码',
-    'new_password' => '新密码',
-    'current_password' => '原密码',
-    'wechat' => '微信',
-    'connection_password' => '连接密码',
-    'encrpytion' => '加密方式',
-    'protocal' => '协议插件',
-    'obfs' => '混淆插件',
-
-    // 购买服务
-    'service_title' => '商店',
-    'service_name' => '服务',
-    'service_desc' => '描述',
-    'service_type' => '类型',
-    'service_price' => '售价',
-    'service_quantity' => '数量',
-    'service_subtotal_price' => '小计',
-    'service_total_price' => '合计',
-    'service_pay_button' => '余额支付',
-    'services_none' => '暂无可用服务',
-    'service_traffic' => '内含流量',
-    'service_days' => '有效期',
-    'service_buy_button' => '购买',
-    'service_unlimited' => '无限制',
-    'service_device' => '设备数量',
-    'day' => '天',
-    'month' => '月',
-    'coupon' => '优惠券',
-    'redeem_coupon' => '使用',
-    'service_type_1' => '流量包',
-    'service_type_2' => '套餐',
-    'service_type_3' => '余额',
-
-    // 流量日志
-    'traffic_log_tips' => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。',
-    'traffic_log_30days' => '本月流量使用情况',
-    'traffic_log_24hours' => '今日流量使用情况',
-    'traffic_log_keywords' => '使用流量',
-    'traffic_log_unit' => '单位 / G',
-    'traffic_log_max' => '使用高峰',
-
-    // 邀请码
-    'invite_code_make' => '生成邀请码',
-    'invite_code_button' => '生成',
-    'invite_code_tips' => '可生成<strong> :num </strong>枚邀请码,:days 日内有效',
-    'invite_code_my_codes' => '我的邀请码',
-    'invite_code_table_name' => '邀请码',
-    'invite_code_table_date' => '有效期',
-    'invite_code_table_user' => '使用者',
-    'invite_code_table_status' => '状态',
-    'invite_code_table_none_codes' => '暂无数据',
-    'invite_code_table_status_un' => '未使用',
-    'invite_code_table_status_yes' => '已使用',
-    'invite_code_table_status_expire' => '已过期',
-    'invite_code_summary' => '共 :total 个邀请码',
-
-    // 单据
-    'invoice_title' => '消费记录',
-    'invoice_table_id' => '编号',
-    'invoice_table_name' => '服务',
-    'invoice_table_pay_way' => '支付方式',
-    'invoice_table_price' => '金额',
-    'invoice_table_create_date' => '购买日期',
-    'invoice_table_expired_at' => '到期时间',
-    'invoice_table_status' => '状态',
-    'invoice_table_actions' => '操作',
-    'invoice_table_none' => '暂无数据',
-    'invoice_status_closed' => '关  闭',
-    'invoice_status_wait_payment' => '待付款',
-    'invoice_status_wait_confirm' => '待确认',
-    'invoice_status_payment_confirm' => '完 成',
-    'invoice_table_prepay' => '预支付',
-    'invoice_table_start' => '启 用',
-    'invoice_table_active' => '使用中',
-    'invoice_table_expired' => '已过期',
-    'invoice_goods_deleted' => '[服務已刪除]',
-
-    // 工单
-    'ticket_title' => '人工服务',
-    'ticket_open' => '打开',
-    'ticket_close' => '关闭',
-    'ticket_cancel' => '取消',
-    'ticket_confirm' => '确认',
-    'ticket_table_title' => '标题',
-    'ticket_table_status' => '状态',
-    'ticket_table_none' => '暂无数据',
-    'ticket_table_status_wait' => '待处理',
-    'ticket_table_status_reply' => '已回复',
-    'ticket_table_status_close' => '已关闭',
-    'ticket_table_new_button' => '创建新的工单',
-    'ticket_table_new_title' => '标题:(财务问题,账号问题,技术问题,售后问题等)',
-    'ticket_table_content' => '请详细的描述您遇到的问题,或者需要我们帮助的地方',
-    'ticket_table_view' => '查看',
-    'ticket_reply' => '发送',
-    'ticket_reply_me' => '我',
-    'ticket_reply_master' => '管理员',
-    'ticket_reply_placeholder' => '说些什么呢?',
-    'ticket_close_title' => '关闭工单',
-    'ticket_close_content' => '您确定要关闭该工单吗?',
-
-    // 推广返利
-    'referral_title' => '佣金记录',
-    'referral_button' => '复制',
-    'referral_my_link' => '我的推广链接',
-    'referral_table_user' => '消费者',
-    'referral_table_amount' => '消费金额',
-    'referral_table_commission' => '返利金额',
-    'referral_table_status' => '状态',
-    'referral_table_date' => '返利时间',
-    'referral_table_none' => '暂无数据',
-    'referral_table_apply' => '提现',
-    'referral_summary' => '合计返利 :amount 元( :total 次),满 :money 元可以申请提现。',
-    'referral_apply_title' => '提现记录',
-    'referral_apply_table_amount' => '提现金额',
-    'referral_apply_table_status' => '状态',
-    'referral_apply_table_date' => '提现日期',
-    'console' => '管理中心',
-    'profile' => '个人设置',
-    'logout' => '退出登录',
-    'promote_link' => '通过您的推广链接注册并激活,你们双方都将获得<mark>:traffic</mark>流量奖励;当他们消费时,您将获得他们消费金额的<mark>:referral_percent%</mark>作为奖励。',
-    'promote_invite_code' => '通过您的邀请码注册并激活,你们双方都将获得<mark>:traffic</mark>流量奖励;当他们消费时,您将获得他们消费金额的<mark>:referral_percent%</mark>作为奖励。',
-    'invite_user_title' => '邀请记录',
-    'invite_user_email' => '邮箱',
-    'invite_user_created_at' => '注册时间',
-];

+ 1 - 12
resources/lang/zh-CN/pagination.php

@@ -1,17 +1,6 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Pagination Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used by the paginator library to build
-    | the simple pagination links. You are free to change them to anything
-    | you want to customize your views to better match your application.
-    |
-    */
-
     'previous' => '&laquo; 上一页',
-    'next' => '下一页 &raquo;',
+    'next'     => '下一页 &raquo;',
 ];

+ 4 - 15
resources/lang/zh-CN/passwords.php

@@ -1,20 +1,9 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Password Reminder Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are the default lines which match reasons
-    | that are given by the password broker for a password update attempt
-    | has failed, such as for an invalid token or invalid new password.
-    |
-    */
-
-    'reset' => '密码重置成功!',
-    'sent' => '密码重置邮件已发送!',
+    'reset'     => '密码重置成功!',
+    'sent'      => '密码重置邮件已发送!',
     'throttled' => '请稍候再试。',
-    'token' => '密码重置令牌无效。',
-    'user' => '找不到该邮箱对应的用户。',
+    'token'     => '密码重置令牌无效。',
+    'user'      => '找不到该邮箱对应的用户。',
 ];

+ 215 - 0
resources/lang/zh-CN/user.php

@@ -0,0 +1,215 @@
+<?php
+
+return [
+    'account'             => [
+        'credit'           => '账户余额',
+        'status'           => '账号状态',
+        'level'            => '账号等级',
+        'group'            => '所属分组',
+        'speed_limit'      => '限速',
+        'remain'           => '剩余流量',
+        'time'             => '套餐时长',
+        'last_login'       => '最近登录',
+        'reset'            => '还有 :days 天重置',
+        'connect_password' => '连接密码',
+        'reason'           => [
+            'normal'            => '账号一切正常',
+            'expired'           => '您的账号套餐已过期',
+            'overused'          => '本时段使用流量超过 <code>:data</code> GB触发系统限制<br/> <code id="countdown">:min</code> 后解除限制',
+            'traffic_exhausted' => '您的账号[流量]消耗殆尽',
+            'unknown'           => '未知原因,请开工单联系管理',
+        ],
+    ],
+    'status'              => [
+        'disabled'        => '停用',
+        'enabled'         => '正常',
+        'expired'         => '已过期',
+        'limited'         => '限制',
+        'unused'          => '未使用',
+        'used'            => '已使用',
+        'closed'          => '关 闭',
+        'completed'       => '完 成',
+        'waiting_payment' => '待付款',
+        'using'           => '使用中',
+        'waiting_confirm' => '待确认',
+        'prepaid'         => '预支付',
+        'applying'        => '申请中',
+        'withdrawn'       => '已提现',
+        'not_withdrawn'   => '未提现',
+        'reply'           => '已回复',
+        'pending'         => '待处理',
+    ],
+    'home'                => [
+        'attendance'         => [
+            'attribute' => '签 到',
+            'disable'   => '系统未开启签到功能',
+            'done'      => '已经签到过了,明天再来吧!',
+            'success'   => '您获得了 :data 流量',
+            'failed'    => '系统❌异常',
+        ],
+        'traffic_logs'       => '流量记录',
+        'announcement'       => '公告',
+        'wechat_push'        => '微信公告推送',
+        'chat_group'         => '聊天群',
+        'empty_announcement' => '暂无公告',
+    ],
+    'purchase_to_unlock'  => '购买服务后解锁',
+    'purchase_required'   => '本功能对非付费用户禁用!请',
+    'more'                => '更多',
+    'attribute'           => [
+        'node'    => '线路',
+        'data'    => '流量',
+        'ip'      => 'IP地址',
+        'isp'     => '运营商',
+        'address' => '地区',
+    ],
+    'purchase_promotion'  => '快 来 购 买 服 务 吧!',
+    'menu'                => [
+        'helps'           => '帮 助',
+        'home'            => '主 页',
+        'invites'         => '邀 请',
+        'invoices'        => '账 单',
+        'nodes'           => '线 路',
+        'referrals'       => '推 广',
+        'shop'            => '服 务',
+        'tickets'         => '工 单',
+        'admin_dashboard' => '管理面板',
+    ],
+    'contact'             => '联系方式',
+    'coupon'              => [
+        'attribute'   => '优惠券',
+        'voucher'     => '代金券',
+        'recharge'    => '充值券码',
+        'inactive'    => '优惠券尚未生效',
+        'wait_active' => '活动将于:time生效,请耐心等待!',
+        'limit'       => '使用条件未满足',
+        'higher'      => '本券最低使用金额为 ¥:amount',
+        'discount'    => '优惠',
+    ],
+    'error_response'      => '出现了错误,请稍后再试。',
+    'invite'              => [
+        'attribute'       => '邀请码',
+        'total'           => '共 :num 个邀请码',
+        'tips'            => '可生成<strong> :num </strong>枚邀请码,:days 日内有效',
+        'logs'            => '邀请记录',
+        'promotion'       => '通过您的邀请码注册并激活,你们双方都将获得<mark>:traffic</mark>流量奖励;当他们消费时,您将获得他们消费金额的<mark>:referral_percent%</mark>作为奖励。',
+        'generate_failed' => '生成失败:已无邀请码生成名额',
+    ],
+    'reset_data'          => [
+        ''          => '重置流量',
+        'required'  => '需要',
+        'cost_tips' => '本次重置流量将扣除余额 ¥:amount!',
+        'lack'      => '余额不足,请充值余额',
+        'logs'      => '用户自行重置流量',
+        'success'   => '重置成功',
+    ],
+    'referral'            => [
+        'link'       => '推广链接',
+        'total'      => '合计返利 :amount 元( :total 次),满 :money 元可以申请提现。',
+        'amount'     => '消费金额',
+        'commission' => '返利金额',
+        'logs'       => '佣金记录',
+        'failed'     => '申请失败',
+        'success'    => '申请成功',
+        'msg'        => [
+            'account'     => '账号已过期,请先购买服务吧',
+            'applied'     => '已存在申请,请等待之前的申请处理完',
+            'unfulfilled' => '满:amount元才可以提现,继续努力吧',
+            'wait'        => '请等待管理员审核',
+            'error'       => '返利单建立失败,请稍后尝试或通知管理员',
+        ],
+    ],
+    'inviter'             => '邀请者',
+    'invitee'             => '受邀者',
+    'consumer'            => '消费者',
+    'unknown'             => '未知',
+    'registered_at'       => '注册时间',
+    'bought_at'           => '购买日期',
+    'payment_method'      => '支付方式',
+    'pay'                 => '支付',
+    'input_coupon'        => '请输入充值券码',
+    'user_profile'        => '个人设置',
+    'recharge'            => '充值',
+    'recharge_credit'     => '余额充值',
+    'recharging'          => '充值中...',
+    'withdraw_commission' => '结算佣金',
+    'withdraw_at'         => '结算日期',
+    'withdraw_logs'       => '提现记录',
+    'withdraw'            => '提 现',
+    'scan_qrcode'         => '请使用客户端扫描二维码',
+    'shop'                => [
+        'hot'           => '热 销',
+        'limited'       => '限 购',
+        'change_amount' => '充值金额',
+        'buy'           => '购买',
+        'description'   => '描述',
+        'service'       => '服务',
+        'pay_credit'    => '余额支付',
+        'pay_online'    => '在线支付',
+        'price'         => '价格',
+        'quantity'      => '数量',
+        'subtotal'      => '小计',
+        'total'         => '合计',
+        'conflict'      => '套餐存在冲突',
+        'conflict_tips' => '<p>当前购买套餐将自动设置为 <code>预支付套餐</code><p><ol class="text-left"><li> 预支付套餐会在生效中的套餐失效后自动开通!</li><li> 您可以在支付后手动激活套餐!</li></ol>',
+        'call4help'     => '请开工单通知客服',
+    ],
+    'payment'             => [
+        'error'           => '充值余额不合规',
+        'creating'        => '创建支付单中...',
+        'redirect_stripe' => '转跳至Stripe支付界面...',
+        'qrcode_tips'     => '请使用<strong class="red-600">:software</strong>扫描二维码',
+        'close_tips'      => '请在<code>:minutes分钟</code>内完成支付,否者订单将会自动关闭',
+        'mobile_tips'     => '<strong>手机用户</strong>:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款',
+    ],
+    'invoice'             => [
+        'attribute'               => '订单',
+        'id'                      => '订单号',
+        'detail'                  => '消费记录',
+        'amount'                  => '金额',
+        'active_prepaid_question' => '是否提前激活预支付套餐?',
+        'active_prepaid_tips'     => '套餐激活后:<br>先前套餐将直接失效!<br>过期日期将由本日重新开始计算!',
+    ],
+    'node'                => [
+        'info'     => '配置信息',
+        'setting'  => '代理设置',
+        'unstable' => '线路波动/维护中',
+        'rate'     => ':ratio倍流量消耗',
+    ],
+    'subscribe'           => [
+        'baned'            => '您的订阅功能被禁用,请联系管理员恢复',
+        'link'             => '订阅链接',
+        'tips'             => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。',
+        'exchange_warning' => '更换订阅地址将导致:\n1.旧地址立即失效\n2.连接密码被更改',
+        'ss_only'          => '只订阅SS/SSR',
+        'v2ray_only'       => '只订阅V2Ray',
+        'trojan_only'      => '只订阅Trojan',
+        'error'            => '更换订阅地址异常',
+    ],
+    'ticket'              => [
+        'attribute'         => '工单',
+        'submit_tips'       => '确定提交工单?',
+        'reply_confirm'     => '确定回复工单?',
+        'close_tips'        => '您确定要关闭该工单吗?',
+        'close'             => '关闭工单',
+        'failed_closed'     => '错误:该工单已关闭',
+        'reply_placeholder' => '说些什么呢?',
+        'reply'             => '回复',
+        'close_msg'         => '工单:ID:id用户已手动关闭',
+        'placeholder'       => '请详细的描述您遇到的问题,或者需要我们帮助的地方',
+        'title_placeholder' => '请详细的描述您遇到的问题,或者需要我们帮助的地方',
+        'new'               => '创建新的工单',
+        'working_hour'      => '客服工作时间',
+        'online_hour'       => '在线时间',
+        'service_tips'      => '本站有多种联系方式,请使用其中<code>一种</code>联系客服! <br>重复请求,将会自动延迟处理时间',
+        'error'             => '未知错误!请通知客服',
+    ],
+    'traffic_logs'        => [
+        '24hours' => '今日流量使用情况',
+        '30days'  => '本月流量使用情况',
+        'tips'    => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。',
+    ],
+    'client'              => '客户端',
+    'tutorials'           => '教程',
+    'current_role'        => '当前身份',
+];

+ 0 - 138
resources/lang/zh-CN/validation-inline.php

@@ -1,138 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => 'This field must be accepted.',
-    'active_url' => 'This is not a valid URL.',
-    'after' => 'This must be a date after :date.',
-    'after_or_equal' => 'This must be a date after or equal to :date.',
-    'alpha' => 'This field may only contain letters.',
-    'alpha_dash' => 'This field may only contain letters, numbers, dashes and underscores.',
-    'alpha_num' => 'This field may only contain letters and numbers.',
-    'array' => 'This field must be an array.',
-    'before' => 'This must be a date before :date.',
-    'before_or_equal' => 'This must be a date before or equal to :date.',
-    'between' => [
-        'numeric' => 'This value must be between :min and :max.',
-        'file' => 'This file must be between :min and :max kilobytes.',
-        'string' => 'This string must be between :min and :max characters.',
-        'array' => 'This content must have between :min and :max items.',
-    ],
-    'boolean' => 'This field must be true or false.',
-    'confirmed' => 'The confirmation does not match.',
-    'date' => 'This is not a valid date.',
-    'date_equals' => 'This must be a date equal to :date.',
-    'date_format' => 'This does not match the format :format.',
-    'different' => 'This value must be different from :other.',
-    'digits' => 'This must be :digits digits.',
-    'digits_between' => 'This must be between :min and :max digits.',
-    'dimensions' => 'This image has invalid dimensions.',
-    'distinct' => 'This field has a duplicate value.',
-    'email' => 'This must be a valid email address.',
-    'ends_with' => 'This must end with one of the following: :values.',
-    'exists' => 'The selected value is invalid.',
-    'file' => 'The content must be a file.',
-    'filled' => 'This field must have a value.',
-    'gt' => [
-        'numeric' => 'The value must be greater than :value.',
-        'file' => 'The file size must be greater than :value kilobytes.',
-        'string' => 'The string must be greater than :value characters.',
-        'array' => 'The content must have more than :value items.',
-    ],
-    'gte' => [
-        'numeric' => 'The value must be greater than or equal :value.',
-        'file' => 'The file size must be greater than or equal :value kilobytes.',
-        'string' => 'The string must be greater than or equal :value characters.',
-        'array' => 'The content must have :value items or more.',
-    ],
-    'image' => 'This must be an image.',
-    'in' => 'The selected value is invalid.',
-    'in_array' => 'This value does not exist in :other.',
-    'integer' => 'This must be an integer.',
-    'ip' => 'This must be a valid IP address.',
-    'ipv4' => 'This must be a valid IPv4 address.',
-    'ipv6' => 'This must be a valid IPv6 address.',
-    'json' => 'This must be a valid JSON string.',
-    'lt' => [
-        'numeric' => 'The value must be less than :value.',
-        'file' => 'The file size must be less than :value kilobytes.',
-        'string' => 'The string must be less than :value characters.',
-        'array' => 'The content must have less than :value items.',
-    ],
-    'lte' => [
-        'numeric' => 'The value must be less than or equal :value.',
-        'file' => 'The file size must be less than or equal :value kilobytes.',
-        'string' => 'The string must be less than or equal :value characters.',
-        'array' => 'The content must not have more than :value items.',
-    ],
-    'max' => [
-        'numeric' => 'The value may not be greater than :max.',
-        'file' => 'The file size may not be greater than :max kilobytes.',
-        'string' => 'The string may not be greater than :max characters.',
-        'array' => 'The content may not have more than :max items.',
-    ],
-    'mimes' => 'This must be a file of type: :values.',
-    'mimetypes' => 'This must be a file of type: :values.',
-    'min' => [
-        'numeric' => 'The value must be at least :min.',
-        'file' => 'The file size must be at least :min kilobytes.',
-        'string' => 'The string must be at least :min characters.',
-        'array' => 'The value must have at least :min items.',
-    ],
-    'not_in' => 'The selected value is invalid.',
-    'not_regex' => 'This format is invalid.',
-    'numeric' => 'This must be a number.',
-    'password' => 'The password is incorrect.',
-    'present' => 'This field must be present.',
-    'regex' => 'This format is invalid.',
-    'required' => 'This field is required.',
-    'required_if' => 'This field is required when :other is :value.',
-    'required_unless' => 'This field is required unless :other is in :values.',
-    'required_with' => 'This field is required when :values is present.',
-    'required_with_all' => 'This field is required when :values are present.',
-    'required_without' => 'This field is required when :values is not present.',
-    'required_without_all' => 'This field is required when none of :values are present.',
-    'same' => 'The value of this field must match the one from :other.',
-    'size' => [
-        'numeric' => 'The value must be :size.',
-        'file' => 'The file size must be :size kilobytes.',
-        'string' => 'The string must be :size characters.',
-        'array' => 'The content must contain :size items.',
-    ],
-    'starts_with' => 'This must start with one of the following: :values.',
-    'string' => 'This must be a string.',
-    'timezone' => 'This must be a valid zone.',
-    'unique' => 'This has already been taken.',
-    'uploaded' => 'This failed to upload.',
-    'url' => 'This format is invalid.',
-    'uuid' => 'This must be a valid UUID.',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-];

+ 105 - 148
resources/lang/zh-CN/validation.php

@@ -1,132 +1,111 @@
 <?php
 
 return [
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => '您必须接受 :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' => [
+    'accepted'             => '您必须接受 :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'              => [
         'numeric' => ':attribute 必须介于 :min - :max 之间。',
-        'file' => ':attribute 必须介于 :min - :max KB 之间。',
-        'string' => ':attribute 必须介于 :min - :max 个字符之间。',
-        'array' => ':attribute 必须只有 :min - :max 个单元。',
+        'file'    => ':attribute 必须介于 :min - :max KB 之间。',
+        'string'  => ':attribute 必须介于 :min - :max 个字符之间。',
+        'array'   => ':attribute 必须只有 :min - :max 个单元。',
     ],
-    'boolean' => ':attribute 必须为布尔值。',
-    'confirmed' => ':attribute 两次输入不一致。',
-    'date' => ':attribute 不是一个有效的日期。',
-    'date_equals' => ':attribute 必须要等于 :date。',
-    'date_format' => ':attribute 的格式必须为 :format。',
-    'different' => ':attribute 和 :other 必须不同。',
-    'digits' => ':attribute 必须是 :digits 位数字。',
-    'digits_between' => ':attribute 必须是介于 :min 和 :max 位的数字。',
-    'dimensions' => ':attribute 图片尺寸不正确。',
-    'distinct' => ':attribute 已经存在。',
-    'email' => ':attribute 不是一个合法的邮箱。',
-    'ends_with' => ':attribute 必须以 :values 为结尾。',
-    'exists' => ':attribute 不存在。',
-    'file' => ':attribute 必须是文件。',
-    'filled' => ':attribute 不能为空。',
-    'gt' => [
+    'boolean'              => ':attribute 必须为布尔值。',
+    'confirmed'            => ':attribute 两次输入不一致。',
+    'date'                 => ':attribute 不是一个有效的日期。',
+    'date_equals'          => ':attribute 必须要等于 :date。',
+    'date_format'          => ':attribute 的格式必须为 :format。',
+    'different'            => ':attribute 和 :other 必须不同。',
+    'digits'               => ':attribute 必须是 :digits 位数字。',
+    'digits_between'       => ':attribute 必须是介于 :min 和 :max 位的数字。',
+    'dimensions'           => ':attribute 图片尺寸不正确。',
+    'distinct'             => ':attribute 已经存在。',
+    'email'                => ':attribute 不是一个合法的邮箱。',
+    'ends_with'            => ':attribute 必须以 :values 为结尾。',
+    'exists'               => ':attribute 不存在。',
+    'file'                 => ':attribute 必须是文件。',
+    'filled'               => ':attribute 不能为空。',
+    'gt'                   => [
         'numeric' => ':attribute 必须大于 :value。',
-        'file' => ':attribute 必须大于 :value KB。',
-        'string' => ':attribute 必须多于 :value 个字符。',
-        'array' => ':attribute 必须多于 :value 个元素。',
+        'file'    => ':attribute 必须大于 :value KB。',
+        'string'  => ':attribute 必须多于 :value 个字符。',
+        'array'   => ':attribute 必须多于 :value 个元素。',
     ],
-    'gte' => [
+    'gte'                  => [
         'numeric' => ':attribute 必须大于或等于 :value。',
-        'file' => ':attribute 必须大于或等于 :value KB。',
-        'string' => ':attribute 必须多于或等于 :value 个字符。',
-        'array' => ':attribute 必须多于或等于 :value 个元素。',
+        'file'    => ':attribute 必须大于或等于 :value KB。',
+        'string'  => ':attribute 必须多于或等于 :value 个字符。',
+        'array'   => ':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' => [
+    'image'                => ':attribute 必须是图片。',
+    'in'                   => '已选的属性 :attribute 无效。',
+    'in_array'             => ':attribute 必须在 :other 中。',
+    'integer'              => ':attribute 必须是整数。',
+    'ip'                   => ':attribute 必须是有效的 IP 地址。',
+    'ipv4'                 => ':attribute 必须是有效的 IPv4 地址。',
+    'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',
+    'json'                 => ':attribute 必须是正确的 JSON 格式。',
+    'lt'                   => [
         'numeric' => ':attribute 必须小于 :value。',
-        'file' => ':attribute 必须小于 :value KB。',
-        'string' => ':attribute 必须少于 :value 个字符。',
-        'array' => ':attribute 必须少于 :value 个元素。',
+        'file'    => ':attribute 必须小于 :value KB。',
+        'string'  => ':attribute 必须少于 :value 个字符。',
+        'array'   => ':attribute 必须少于 :value 个元素。',
     ],
-    'lte' => [
+    'lte'                  => [
         'numeric' => ':attribute 必须小于或等于 :value。',
-        'file' => ':attribute 必须小于或等于 :value KB。',
-        'string' => ':attribute 必须少于或等于 :value 个字符。',
-        'array' => ':attribute 必须少于或等于 :value 个元素。',
+        'file'    => ':attribute 必须小于或等于 :value KB。',
+        'string'  => ':attribute 必须少于或等于 :value 个字符。',
+        'array'   => ':attribute 必须少于或等于 :value 个元素。',
     ],
-    'max' => [
+    'max'                  => [
         'numeric' => ':attribute 不能大于 :max。',
-        'file' => ':attribute 不能大于 :max KB。',
-        'string' => ':attribute 不能大于 :max 个字符。',
-        'array' => ':attribute 最多只有 :max 个单元。',
+        'file'    => ':attribute 不能大于 :max KB。',
+        'string'  => ':attribute 不能大于 :max 个字符。',
+        'array'   => ':attribute 最多只有 :max 个单元。',
     ],
-    'mimes' => ':attribute 必须是一个 :values 类型的文件。',
-    'mimetypes' => ':attribute 必须是一个 :values 类型的文件。',
-    'min' => [
+    'mimes'                => ':attribute 必须是一个 :values 类型的文件。',
+    'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',
+    'min'                  => [
         'numeric' => ':attribute 必须大于等于 :min。',
-        'file' => ':attribute 大小不能小于 :min KB。',
-        'string' => ':attribute 至少为 :min 个字符。',
-        'array' => ':attribute 至少有 :min 个单元。',
+        'file'    => ':attribute 大小不能小于 :min KB。',
+        'string'  => ':attribute 至少为 :min 个字符。',
+        'array'   => ':attribute 至少有 :min 个单元。',
     ],
-    'not_in' => '已选的属性 :attribute 非法。',
-    'not_regex' => ':attribute 的格式错误。',
-    'numeric' => ':attribute 必须是一个数字。',
-    'password' => '密码错误',
-    'present' => ':attribute 必须存在。',
-    'regex' => ':attribute 格式不正确。',
-    'required' => ':attribute 不能为空。',
-    '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'          => 'The :attribute must be a multiple of :value',
+    'not_in'               => '已选的属性 :attribute 非法。',
+    'not_regex'            => ':attribute 的格式错误。',
+    'numeric'              => ':attribute 必须是一个数字。',
+    'password'             => '密码错误',
+    'present'              => ':attribute 必须存在。',
+    'regex'                => ':attribute 格式不正确。',
+    'required'             => ':attribute 不能为空。',
+    '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' => [
+    'same'                 => ':attribute 和 :other 必须相同。',
+    'size'                 => [
         'numeric' => ':attribute 大小必须为 :size。',
-        'file' => ':attribute 大小必须为 :size KB。',
-        'string' => ':attribute 必须是 :size 个字符。',
-        'array' => ':attribute 必须为 :size 个单元。',
+        'file'    => ':attribute 大小必须为 :size KB。',
+        'string'  => ':attribute 必须是 :size 个字符。',
+        'array'   => ':attribute 必须为 :size 个单元。',
     ],
-    'starts_with' => ':attribute 必须以 :values 为开头。',
-    'string' => ':attribute 必须是一个字符串。',
-    'timezone' => ':attribute 必须是一个合法的时区值。',
-    'unique' => ':attribute 已经存在。',
-    'uploaded' => ':attribute 上传失败。',
-    'url' => ':attribute 格式不正确。',
-    'uuid' => ':attribute 必须是有效的 UUID。',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
+    'starts_with'          => ':attribute 必须以 :values 为开头。',
+    'string'               => ':attribute 必须是一个字符串。',
+    'timezone'             => ':attribute 必须是一个合法的时区值。',
+    'unique'               => ':attribute 已经存在。',
+    'uploaded'             => ':attribute 上传失败。',
+    'url'                  => ':attribute 格式不正确。',
+    'uuid'                 => ':attribute 必须是有效的 UUID。',
 
     'custom' => [
         'attribute-name' => [
@@ -134,46 +113,24 @@ return [
         ],
     ],
 
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Attributes
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used to swap our attribute placeholder
-    | with something more reader friendly such as "E-Mail Address" instead
-    | of "email". This simply helps us make our message more expressive.
-    |
-    */
-
     'attributes' => [
-        'name' => '名称',
-        'username' => '用户名',
-        'email' => '邮箱',
-        'first_name' => '名',
-        'last_name' => '姓',
-        'password' => '密码',
+        'name'                  => '名称',
+        'username'              => '昵称',
+        'email'                 => '邮箱',
+        'password'              => '密码',
         'password_confirmation' => '确认密码',
-        'city' => '城市',
-        'country' => '国家',
-        'address' => '地址',
-        'phone' => '电话',
-        'mobile' => '手机',
-        'age' => '年龄',
-        'sex' => '性别',
-        'gender' => '性别',
-        'day' => '天',
-        'month' => '月',
-        'year' => '年',
-        'hour' => '时',
-        'minute' => '分',
-        'second' => '秒',
-        'title' => '标题',
-        'content' => '内容',
-        'description' => '描述',
-        'excerpt' => '摘要',
-        'date' => '日期',
-        'time' => '时间',
-        'available' => '可用的',
-        'size' => '大小',
+        'phone'                 => '电话',
+        'day'                   => '天',
+        'month'                 => '月',
+        'year'                  => '年',
+        'hour'                  => '时',
+        'minute'                => '分',
+        'second'                => '秒',
+        'title'                 => '标题',
+        'content'               => '内容',
+        'description'           => '描述',
+        'excerpt'               => '摘要',
+        'date'                  => '日期',
+        'time'                  => '时间',
     ],
 ];

+ 0 - 46
resources/lang/zh-TW.json

@@ -1,46 +0,0 @@
-{
-  "A fresh verification link has been sent to your email address.": "新的驗證連結已發送到您的 E-mail。",
-  "All rights reserved.": "版權所有。",
-  "Before proceeding, please check your email for a verification link.": "在繼續之前請先驗證您的 E-mail。",
-  "click here to request another": "點擊重新發送 E-mail",
-  "Confirm Password": "確認密碼",
-  "E-Mail Address": "E-mail",
-  "Forbidden": "無法瀏覽",
-  "Forgot Your Password?": "忘記密碼?",
-  "Go Home": "回首頁",
-  "Hello!": "您好:",
-  "If you did not create an account, no further action is required.": "如果您未註冊帳號,請忽略此郵件。",
-  "If you did not receive the email": "如果您沒有收到",
-  "If you did not request a password reset, no further action is required.": "如果您未申請重設密碼,請忽略此郵件。",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "如果您點擊「:actionText」按鈕時出現問題,請複製下方連結到瀏覽器中開啟:",
-  "Invalid signature.": "簽名無效",
-  "Login": "登入",
-  "Logout": "登出",
-  "Name": "姓名",
-  "Not Found": "頁面不存在",
-  "Oh no": "不好了",
-  "Page Expired": "頁面逾時",
-  "Password": "密碼",
-  "Please click the button below to verify your email address.": "請點擊下面按鈕驗證您的 E-mail:",
-  "Please confirm your password before continuing.": "如要繼續操作,請先確認密碼。",
-  "Regards": "致敬",
-  "Register": "註冊",
-  "Remember Me": "記住我",
-  "Reset Password": "重設密碼",
-  "Reset Password Notification": "重設密碼通知",
-  "Send Password Reset Link": "發送重設密碼連結",
-  "Server Error": "伺服器錯誤",
-  "Service Unavailable": "暫時不提供服務",
-  "This action is unauthorized.": "權限不足",
-  "This password reset link will expire in :count minutes.": "這個重設密碼連結將於 :count 分鐘後過期。",
-  "Toggle navigation": "切換導航",
-  "Too Many Attempts.": "嘗試次數過多",
-  "Too Many Requests": "請求次數過多",
-  "Unauthorized": "權限不足",
-  "Verify Email Address": "驗證 E-mail",
-  "Verify Your Email Address": "驗證 E-mail",
-  "We won't ask for your password again for a few hours.": "確認完成後,接下來幾個小時內您不需再輸入密碼。",
-  "You are receiving this email because we received a password reset request for your account.": "您收到此電子郵件是因為我們收到了您帳戶的密碼重設請求。",
-  "Your email address is not verified.": "您的 E-mail 尚未驗證通過",
-  "Whoops!": "哎呦!"
-}

+ 0 - 74
resources/lang/zh-tw/auth.php

@@ -1,74 +0,0 @@
-<?php
-
-return [
-    'active' => '激 活',
-    'active_account' => '激活賬號',
-    'active_tip' => '賬號未激活,請點擊',
-    'captcha' => '驗證碼',
-    'code' => '邀請碼',
-    'optional' => '可選',
-    'login' => '登 錄',
-    'register' => '注 冊',
-    'send' => '發送',
-    'tip' => '提示',
-    'email' => '郵箱',
-    'password' => '密碼',
-    'confirm_password' => '請再次輸入密碼',
-    'back' => '返 回',
-    'close' => '關 閉',
-    'submit' => '提 交',
-    'request' => '獲 取',
-    'remember' => '記住賬號',
-    'resetPassword' => '重置密碼',
-    'new_password' => '輸入新密碼',
-    'forget_password' => '找回密碼',
-    'reset_password' => '重置密碼',
-    'get_free_code' => '點擊獲取邀請碼',
-    'accept_term' => '我已閱讀並同意遵守',
-    'tos' => '用戶條款',
-    'aup' => '可接受使用條款',
-    'register_tip' => '還沒有賬號?請去',
-    'system_maintenance' => '系統維護中...',
-    'system_maintenance_tip' => '系統正在維護,如果您需要註冊,請聯繫 :email ',
-    'overtime' => '該鏈接已失效',
-
-    'active_success' => '激活成功',
-    'active_fail' => '激活失敗',
-    'active_limit' => '您已觸發本站激活請求限制機制,請勿頻繁操作!如有問題,請聯繫:email',
-    'active_close' => '本站已關閉賬號激活功能,請聯繫:email',
-    'code_null' => '請輸入邀請碼',
-    'captcha_null' => '請輸入驗證碼',
-    'captcha_error' => '驗證碼錯誤,請重新輸入',
-    'captcha_overtime' => '驗證碼不合法!可能已過期,請刷新後重試',
-    'captcha_loading' => '正在加載驗證碼...',
-    'captcha_required' => '請正確完成驗證碼操作',
-    'captcha_fail' => '服務器驗證失敗,請重新嘗試',
-    'captcha_close' => '本站關閉了通過驗證碼註冊',
-    'captcha_send' => '驗證碼已發送',
-    'code_error' => '邀請碼不可用,請重試',
-    'email_null' => '請輸入郵箱賬號',
-    'email_normal' => '賬號狀態正常,無需激活',
-    'email_legitimate' => '郵箱地址不合規',
-    'email_banned' => '郵箱含有敏感詞,請使用其他有效郵箱',
-    'email_exist' => '賬號已存在,如果忘記密碼請找回密碼',
-    'email_notExist' => '賬號不存在,請重試',
-    'login_error' => '郵箱或密碼錯誤',
-    'login_ban' => '您的賬號已被禁止登錄,請聯繫:email',
-    'password_null' => '請輸入密碼',
-    'password_limit' => '密碼最少要6位數',
-    'password_same' => '兩次輸入密碼不一致',
-    'register_close' => '本站關閉了註冊通道',
-    'register_anti' => '防刷機制已激活,請勿頻繁註冊',
-    'register_fail' => '註冊失敗,請稍後嘗試',
-    'register_success' => '註冊成功',
-    'register_active_tip' => '激活郵件已發送! 請查看註冊所用郵箱(郵件可能在垃圾箱中)',
-    'repeat_request' => '請勿重複請求,請刷新後重試',
-    'reset_password_close' => '本站關閉了找回密碼功能,請聯繫:email',
-    'reset_password_limit' => '24小時內只能重設密碼:time次,請勿頻繁操作',
-    'reset_password_success_tip' => '重置成功,請查看所用郵箱(郵件可能在垃圾箱中)',
-    'reset_password_same_fail' => '新舊密碼一樣,請重新輸入',
-    'reset_password_fail' => '重設密碼失敗',
-    'reset_password_new' => '新密碼設置成功,請自行登錄',
-    'request_error' => '請求異常,請刷新頁面後重試',
-    'username' => '昵稱',
-];

+ 0 - 18
resources/lang/zh-tw/error.php

@@ -1,18 +0,0 @@
-<?php
-
-return [
-    'title' => '訪問被拒絕',
-    'ForbiddenRobot' => '檢測到機器人訪問,禁止訪問',
-    'ForbiddenAccess' => '檢測到未知IP或使用代理訪問,禁止訪問',
-    'ForbiddenChina' => '檢測到中國IP或使用代理訪問,禁止訪問',
-    'ForbiddenOversea' => '檢測到海外IP或打理,禁止訪問',
-    'MissingPage' => '找不到網頁',
-    'Unauthorized' => '未授權訪問',
-    'Refresh' => '刷 新',
-    'RefreshPage' => '請刷新頁面後,再訪問',
-    'SystemError' => '系統錯誤',
-    'Visit' => '請訪問',
-    'log' => '日誌',
-    'SecurityError' => '非安全入口訪問',
-    'SecurityEnter' => '安全入口訪問',
-];

+ 0 - 201
resources/lang/zh-tw/home.php

@@ -1,201 +0,0 @@
-<?php
-
-return [
-    'panel' => '用戶中心',
-    'subscribe_help' => '互動式教程',
-    'subscribe_link' => '訂閱鏈接',
-    'copy_subscribe_address' => '複製',
-    'exchange_subscribe' => '更換',
-    'subscribe_warning' => '注意:該訂閱鏈接僅限個人使用,請勿傳播該鏈接,這會導致您的帳號流量使用情况异常。',
-    'reset_password_title' => '重置密碼',
-    'email_placeholder' => '請輸入用戶名',
-    'system_down' => '系統維護中',
-    'subscribe_baned' => '您的訂閱功能被暫時禁用,請聯系管理員恢復',
-    'download' => '下載',
-    'sign_in' => '簽到',
-
-    // 菜单
-    'home' => '主頁',
-    'nodeList' => '我的線路',
-    'services' => '購買服務',
-    'traffic_log' => '流量記錄',
-    'help' => '幫助中心',
-    'invite_code' => '邀請碼',
-    'invoices' => '我的帳單',
-    'tickets' => '服務單',
-    'referrals' => '推廣返利',
-    'free_invite_codes_title' => '免費邀請碼',
-    'no_need_invite_codes' => '現在無需邀請碼,即可注册',
-
-    // 首页
-    'ratio_tips' => '自動同步更新節點信息,請獲取',
-    'subscribe_button' => '訂閱鏈接',
-    'account_info' => '帳號資訊',
-    'account_level' => '等級',
-    'account_credit' => '帳戶餘額',
-    'account_score' => '積分',
-    'account_status' => '狀態',
-    'account_expire' => '有效期至',
-    'account_last_usage' => '最近使用',
-    'account_last_login' => '最近登錄',
-    'account_bandwidth_usage' => '流量',
-    'account_total_traffic' => '共計',
-    'account_usage_traffic' => '已使用',
-    'account_reset_notice' => ':reset_day 日重置',
-    'account_login_log' => '登錄日誌',
-    'article_title' => '文章',
-    'recharge' => '充值',
-    'enabled' => '正常',
-    'disabled' => '禁用',
-    'never_used' => '從未使用',
-    'expired' => '已過期',
-    'reason' => '理由',
-    'reason_expired' => '您的賬號套餐已過期',
-    'reason_traffic_exhausted' => '您的賬號可用流量消耗殆盡',
-    'reason_overused' => '您的流量小時流量超過了系統限制',
-    'reason_unknown' => '未知,請開工單聯繫管理',
-    'never_loggedin' => '從未登錄',
-    'announcement' => '公告',
-    'recharge_credit' => '餘額充值',
-    'payment_method' => '充值管道',
-    'close' => '取消',
-    'redeem_score' => '兌換流量',
-    'redeem' => '立即兌換',
-    'redeem_info' => '您有 :score 積分,可兌換 :score M 免費流量。',
-    'coupon_code' => '優惠券碼',
-    'please_input_coupon' => '請輸入優惠券碼',
-    'scan_qrcode' => '請使用用戶端掃描二維碼',
-    'setting_info' => '配寘資訊',
-    'ratio' => '結算比例',
-    'coupon_not_empty' => '優惠券碼不能為空',
-    'recharging' => '充值中...',
-    'error_response' => '出現了錯誤,請稍後再試。',
-    'error' => '錯誤',
-    'online_pay' => '線上支付',
-    'pay' => '支付',
-
-    // 用户资料
-    'submit' => '提 交',
-    'contact' => '聯繫方式',
-    'ssr_setting' => '代理設定',
-    'password' => '使用者密碼',
-    'new_password' => '新密碼',
-    'current_password' => '原密碼',
-    'wechat' => '微信',
-    'connection_password' => '連接密碼',
-    'encrpytion' => '加密管道',
-    'protocal' => '協定挿件',
-    'obfs' => '混淆挿件',
-
-    // 购买服务
-    'service_title' => '商店',
-    'service_name' => '服務',
-    'service_desc' => '描述',
-    'service_type' => '類型',
-    'service_price' => '售價',
-    'service_quantity' => '數量',
-    'service_subtotal_price' => '小計',
-    'service_total_price' => '合計',
-    'service_pay_button' => '餘額支付',
-    'services_none' => '暫無可用服務',
-    'service_traffic' => '内含流量',
-    'service_days' => '有效期',
-    'service_buy_button' => '購買',
-    'service_unlimited' => '無限制',
-    'service_device' => '設備數量',
-    'day' => '天',
-    'month' => '月',
-    'coupon' => '優惠券',
-    'redeem_coupon' => '使用',
-    'service_type_1' => '流量包',
-    'service_type_2' => '套餐',
-    'service_type_3' => '餘額',
-
-    // 流量日志
-    'traffic_log_tips' => '提示:流量統計更新會有延遲。按天統計于次日更新,按小時統計圖于次小時更新。',
-    'traffic_log_30days' => '最近 30 天的流量使用情况',
-    'traffic_log_24hours' => '最近 24 小時的流量使用情况',
-    'traffic_log_keywords' => '使用流量',
-    'traffic_log_unit' => '單位 / G',
-    'traffic_log_max' => '使用高峰',
-
-    // 邀请码
-    'invite_code_make' => '生成邀請碼',
-    'invite_code_button' => '生成',
-    'invite_code_tips' => '可生成 <strong> :num </strong> 枚邀請碼,:days 日內有效',
-    'invite_code_my_codes' => '我的邀請碼',
-    'invite_code_table_name' => '邀請碼',
-    'invite_code_table_date' => '有效期',
-    'invite_code_table_user' => '使用者',
-    'invite_code_table_status' => '狀態',
-    'invite_code_table_none_codes' => '暫無數據',
-    'invite_code_table_status_un' => '未使用',
-    'invite_code_table_status_yes' => '已使用',
-    'invite_code_table_status_expire' => '已過期',
-    'invite_code_summary' => '共 :total 个邀請碼',
-
-    // 单据
-    'invoice_title' => '消費記錄',
-    'invoice_table_id' => '編號',
-    'invoice_table_name' => '服務',
-    'invoice_table_pay_way' => '支付方式',
-    'invoice_table_price' => '金額',
-    'invoice_table_create_date' => '購買日期',
-    'invoice_table_expired_at' => '到期時間',
-    'invoice_table_status' => '狀態',
-    'invoice_table_none' => '暫無數據',
-    'invoice_table_closed' => '關閉',
-    'invoice_table_wait_payment' => '待付款',
-    'invoice_table_wait_confirm' => '待確認',
-    'invoice_table_wait_active' => '使用中',
-    'invoice_table_expired' => '已過期',
-    'invoice_table_goods_deleted' => '[服務已刪除]',
-
-    // 工单
-    'ticket_title' => '人工服務',
-    'ticket_open' => '打開',
-    'ticket_close' => '關閉',
-    'ticket_cancel' => '取消',
-    'ticket_confirm' => '確認',
-    'ticket_table_title' => '標題',
-    'ticket_table_status' => '狀態',
-    'ticket_table_none' => '暫無數據',
-    'ticket_table_status_wait' => '待處理',
-    'ticket_table_status_reply' => '已回復',
-    'ticket_table_status_close' => '已關閉',
-    'ticket_table_new_button' => '創建新的工單',
-    'ticket_table_new_title' => '標題:(財務問題,賬號問題,技術問題,售後問題等)',
-    'ticket_table_content' => '請詳細的描述您遇到的問題,或者說明需要我們幫助的地方',
-    'ticket_table_view' => '查看',
-    'ticket_reply' => '發送',
-    'ticket_reply_me' => '我',
-    'ticket_reply_master' => '管理員',
-    'ticket_reply_placeholder' => '說些什麼呢?',
-    'ticket_close_title' => '關閉工單',
-    'ticket_close_content' => '您確定要關閉該工單嗎?',
-
-    // 推广返利
-    'referral_title' => '傭金記錄',
-    'referral_button' => '複製',
-    'referral_my_link' => '我的推廣鏈接',
-    'referral_table_user' => '消費者',
-    'referral_table_amount' => '消費金額',
-    'referral_table_commission' => '返利金額',
-    'referral_table_status' => '狀態',
-    'referral_table_date' => '返利時間',
-    'referral_table_none' => '暫無數據',
-    'referral_table_apply' => '提現',
-    'referral_summary' => '合計返利 :amount 元(:total次),滿 :money元 可以申請提現。',
-    'referral_apply_title' => '提現記錄',
-    'referral_apply_table_amount' => '提現金額',
-    'referral_apply_table_status' => '狀態',
-    'referral_apply_table_date' => '提現日期',
-    'console' => '管理中心',
-    'profile' => '個人設置',
-    'logout' => '登出',
-    'promote_link' => '通過您的推廣連結注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。',
-    'promote_invite_code' => '通過您的邀請碼注册並啟動,您和新用戶都會獲得 :traffic 流量獎勵;當他們消費時,您將獲得他們消費金額的 :referral_percent% 作為獎勵。',
-    'invite_user_title' => '邀請記錄',
-    'invite_user_email' => '郵箱',
-    'invite_user_created_at' => '註冊時間',
-];

+ 0 - 17
resources/lang/zh-tw/pagination.php

@@ -1,17 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Pagination Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used by the paginator library to build
-    | the simple pagination links. You are free to change them to anything
-    | you want to customize your views to better match your application.
-    |
-    */
-
-    'previous' => '&laquo; 上一頁',
-    'next' => '下一頁 &raquo;',
-];

+ 0 - 20
resources/lang/zh-tw/passwords.php

@@ -1,20 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Password Reminder Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are the default lines which match reasons
-    | that are given by the password broker for a password update attempt
-    | has failed, such as for an invalid token or invalid new password.
-    |
-    */
-
-    'reset' => '密碼已成功重設!',
-    'sent' => '密碼重設郵件已發送!',
-    'throttled' => '請稍候再試。',
-    'token' => '密碼重設碼無效。',
-    'user' => '找不到該 E-mail 對應的使用者。',
-];

+ 0 - 138
resources/lang/zh-tw/validation-inline.php

@@ -1,138 +0,0 @@
-<?php
-
-return [
-
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => 'This field must be accepted.',
-    'active_url' => 'This is not a valid URL.',
-    'after' => 'This must be a date after :date.',
-    'after_or_equal' => 'This must be a date after or equal to :date.',
-    'alpha' => 'This field may only contain letters.',
-    'alpha_dash' => 'This field may only contain letters, numbers, dashes and underscores.',
-    'alpha_num' => 'This field may only contain letters and numbers.',
-    'array' => 'This field must be an array.',
-    'before' => 'This must be a date before :date.',
-    'before_or_equal' => 'This must be a date before or equal to :date.',
-    'between' => [
-        'numeric' => 'This value must be between :min and :max.',
-        'file' => 'This file must be between :min and :max kilobytes.',
-        'string' => 'This string must be between :min and :max characters.',
-        'array' => 'This content must have between :min and :max items.',
-    ],
-    'boolean' => 'This field must be true or false.',
-    'confirmed' => 'The confirmation does not match.',
-    'date' => 'This is not a valid date.',
-    'date_equals' => 'This must be a date equal to :date.',
-    'date_format' => 'This does not match the format :format.',
-    'different' => 'This value must be different from :other.',
-    'digits' => 'This must be :digits digits.',
-    'digits_between' => 'This must be between :min and :max digits.',
-    'dimensions' => 'This image has invalid dimensions.',
-    'distinct' => 'This field has a duplicate value.',
-    'email' => 'This must be a valid email address.',
-    'ends_with' => 'This must end with one of the following: :values.',
-    'exists' => 'The selected value is invalid.',
-    'file' => 'The content must be a file.',
-    'filled' => 'This field must have a value.',
-    'gt' => [
-        'numeric' => 'The value must be greater than :value.',
-        'file' => 'The file size must be greater than :value kilobytes.',
-        'string' => 'The string must be greater than :value characters.',
-        'array' => 'The content must have more than :value items.',
-    ],
-    'gte' => [
-        'numeric' => 'The value must be greater than or equal :value.',
-        'file' => 'The file size must be greater than or equal :value kilobytes.',
-        'string' => 'The string must be greater than or equal :value characters.',
-        'array' => 'The content must have :value items or more.',
-    ],
-    'image' => 'This must be an image.',
-    'in' => 'The selected value is invalid.',
-    'in_array' => 'This value does not exist in :other.',
-    'integer' => 'This must be an integer.',
-    'ip' => 'This must be a valid IP address.',
-    'ipv4' => 'This must be a valid IPv4 address.',
-    'ipv6' => 'This must be a valid IPv6 address.',
-    'json' => 'This must be a valid JSON string.',
-    'lt' => [
-        'numeric' => 'The value must be less than :value.',
-        'file' => 'The file size must be less than :value kilobytes.',
-        'string' => 'The string must be less than :value characters.',
-        'array' => 'The content must have less than :value items.',
-    ],
-    'lte' => [
-        'numeric' => 'The value must be less than or equal :value.',
-        'file' => 'The file size must be less than or equal :value kilobytes.',
-        'string' => 'The string must be less than or equal :value characters.',
-        'array' => 'The content must not have more than :value items.',
-    ],
-    'max' => [
-        'numeric' => 'The value may not be greater than :max.',
-        'file' => 'The file size may not be greater than :max kilobytes.',
-        'string' => 'The string may not be greater than :max characters.',
-        'array' => 'The content may not have more than :max items.',
-    ],
-    'mimes' => 'This must be a file of type: :values.',
-    'mimetypes' => 'This must be a file of type: :values.',
-    'min' => [
-        'numeric' => 'The value must be at least :min.',
-        'file' => 'The file size must be at least :min kilobytes.',
-        'string' => 'The string must be at least :min characters.',
-        'array' => 'The value must have at least :min items.',
-    ],
-    'not_in' => 'The selected value is invalid.',
-    'not_regex' => 'This format is invalid.',
-    'numeric' => 'This must be a number.',
-    'password' => 'The password is incorrect.',
-    'present' => 'This field must be present.',
-    'regex' => 'This format is invalid.',
-    'required' => 'This field is required.',
-    'required_if' => 'This field is required when :other is :value.',
-    'required_unless' => 'This field is required unless :other is in :values.',
-    'required_with' => 'This field is required when :values is present.',
-    'required_with_all' => 'This field is required when :values are present.',
-    'required_without' => 'This field is required when :values is not present.',
-    'required_without_all' => 'This field is required when none of :values are present.',
-    'same' => 'The value of this field must match the one from :other.',
-    'size' => [
-        'numeric' => 'The value must be :size.',
-        'file' => 'The file size must be :size kilobytes.',
-        'string' => 'The string must be :size characters.',
-        'array' => 'The content must contain :size items.',
-    ],
-    'starts_with' => 'This must start with one of the following: :values.',
-    'string' => 'This must be a string.',
-    'timezone' => 'This must be a valid zone.',
-    'unique' => 'This has already been taken.',
-    'uploaded' => 'This failed to upload.',
-    'url' => 'This format is invalid.',
-    'uuid' => 'This must be a valid UUID.',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-];

+ 0 - 179
resources/lang/zh-tw/validation.php

@@ -1,179 +0,0 @@
-<?php
-
-return [
-    /*
-    |--------------------------------------------------------------------------
-    | Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines contain the default error messages used by
-    | the validator class. Some of these rules have multiple versions such
-    | as the size rules. Feel free to tweak each of these messages here.
-    |
-    */
-
-    'accepted' => '必須接受 :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' => [
-        'numeric' => ':attribute 必須介於 :min 至 :max 之間。',
-        'file' => ':attribute 必須介於 :min 至 :max KB 之間。 ',
-        'string' => ':attribute 必須介於 :min 至 :max 個字元之間。',
-        'array' => ':attribute: 必須有 :min - :max 個元素。',
-    ],
-    'boolean' => ':attribute 必須為布林值。',
-    'confirmed' => ':attribute 確認欄位的輸入不一致。',
-    'date' => ':attribute 不是有效的日期。',
-    'date_equals' => ':attribute 必須等於 :date。',
-    'date_format' => ':attribute 不符合 :format 的格式。',
-    'different' => ':attribute 與 :other 必須不同。',
-    'digits' => ':attribute 必須是 :digits 位數字。',
-    'digits_between' => ':attribute 必須介於 :min 至 :max 位數字。',
-    'dimensions' => ':attribute 圖片尺寸不正確。',
-    'distinct' => ':attribute 已經存在。',
-    'email' => ':attribute 必須是有效的 E-mail。',
-    'ends_with' => ':attribute 結尾必須包含下列之一::values',
-    'exists' => ':attribute 不存在。',
-    'file' => ':attribute 必須是有效的檔案。',
-    'filled' => ':attribute 不能留空。',
-    'gt' => [
-        'numeric' => ':attribute 必須大於 :value。',
-        'file' => ':attribute 必須大於 :value KB。',
-        'string' => ':attribute 必須多於 :value 個字元。',
-        'array' => ':attribute 必須多於 :value 個元素。',
-    ],
-    'gte' => [
-        'numeric' => ':attribute 必須大於或等於 :value。',
-        'file' => ':attribute 必須大於或等於 :value KB。',
-        'string' => ':attribute 必須多於或等於 :value 個字元。',
-        'array' => ':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' => [
-        'numeric' => ':attribute 必須小於 :value。',
-        'file' => ':attribute 必須小於 :value KB。',
-        'string' => ':attribute 必須少於 :value 個字元。',
-        'array' => ':attribute 必須少於 :value 個元素。',
-    ],
-    'lte' => [
-        'numeric' => ':attribute 必須小於或等於 :value。',
-        'file' => ':attribute 必須小於或等於 :value KB。',
-        'string' => ':attribute 必須少於或等於 :value 個字元。',
-        'array' => ':attribute 必須少於或等於 :value 個元素。',
-    ],
-    'max' => [
-        'numeric' => ':attribute 不能大於 :max。',
-        'file' => ':attribute 不能大於 :max KB。',
-        'string' => ':attribute 不能多於 :max 個字元。',
-        'array' => ':attribute 最多有 :max 個元素。',
-    ],
-    'mimes' => ':attribute 必須為 :values 的檔案。',
-    'mimetypes' => ':attribute 必須為 :values 的檔案。',
-    'min' => [
-        'numeric' => ':attribute 不能小於 :min。',
-        'file' => ':attribute 不能小於 :min KB。',
-        'string' => ':attribute 不能小於 :min 個字元。',
-        'array' => ':attribute 至少有 :min 個元素。',
-    ],
-    'not_in' => '所選擇的 :attribute 選項無效。',
-    'not_regex' => ':attribute 的格式錯誤。',
-    'numeric' => ':attribute 必須為一個數字。',
-    'password' => '密碼錯誤',
-    'present' => ':attribute 必須存在。',
-    'regex' => ':attribute 的格式錯誤。',
-    'required' => ':attribute 不能留空。',
-    'required_if' => '當 :other 是 :value 時 :attribute 不能留空。',
-    'required_unless' => '當 :other 不是 :values 時 :attribute 不能留空。',
-    'required_with' => '當 :values 出現時 :attribute 不能留空。',
-    'required_with_all' => '當 :values 出現時 :attribute 不能為空。',
-    'required_without' => '當 :values 留空時 :attribute field 不能留空。',
-    'required_without_all' => '當 :values 都不出現時 :attribute 不能留空。',
-    'same' => ':attribute 與 :other 必須相同。',
-    'size' => [
-        'numeric' => ':attribute 的大小必須是 :size。',
-        'file' => ':attribute 的大小必須是 :size KB。',
-        'string' => ':attribute 必須是 :size 個字元。',
-        'array' => ':attribute 必須是 :size 個元素。',
-    ],
-    'starts_with' => ':attribute 開頭必須包含下列之一::values',
-    'string' => ':attribute 必須是一個字串。',
-    'timezone' => ':attribute 必須是一個正確的時區值。',
-    'unique' => ':attribute 已經存在。',
-    'uploaded' => ':attribute 上傳失敗。',
-    'url' => ':attribute 的格式錯誤。',
-    'uuid' => ':attribute 必須是有效的 UUID。',
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Language Lines
-    |--------------------------------------------------------------------------
-    |
-    | Here you may specify custom validation messages for attributes using the
-    | convention "attribute.rule" to name the lines. This makes it quick to
-    | specify a specific custom language line for a given attribute rule.
-    |
-    */
-
-    'custom' => [
-        'attribute-name' => [
-            'rule-name' => 'custom-message',
-        ],
-    ],
-
-    /*
-    |--------------------------------------------------------------------------
-    | Custom Validation Attributes
-    |--------------------------------------------------------------------------
-    |
-    | The following language lines are used to swap our attribute placeholder
-    | with something more reader friendly such as "E-Mail Address" instead
-    | of "email". This simply helps us make our message more expressive.
-    |
-    */
-
-    'attributes' => [
-        'address' => '地址',
-        'age' => '年齡',
-        'available' => '可用的',
-        'city' => '城市',
-        'content' => '內容',
-        'country' => '國家',
-        'date' => '日期',
-        'day' => '天',
-        'description' => '描述',
-        'email' => 'E-mail',
-        'excerpt' => '摘要',
-        'first_name' => '名',
-        'gender' => '性別',
-        'hour' => '時',
-        'last_name' => '姓',
-        'minute' => '分',
-        'mobile' => '手機',
-        'month' => '月',
-        'name' => '名稱',
-        'password' => '密碼',
-        'password_confirmation' => '確認密碼',
-        'phone' => '電話',
-        'second' => '秒',
-        'sex' => '性別',
-        'size' => '大小',
-        'time' => '時間',
-        'title' => '標題',
-        'username' => '使用者名稱',
-        'year' => '年',
-    ],
-];

+ 4 - 4
resources/views/admin/aff/detail.blade.php

@@ -22,7 +22,7 @@
                         <thead class="thead-default">
                         <tr>
                             <th colspan="6">
-                                申请单ID:{{$referral->id}} | 申请人:{{$referral->user->email}} | 申请提现金额:{{$referral->amount}} | 申请时间:{{$referral->created_at}}
+                                申请单ID:{{$referral->id}} | 申请人:{{$referral->user->email}} | 申请提现金额:¥{{$referral->amount}} | 申请时间:{{$referral->created_at}}
                             </th>
                         </tr>
                         <tr>
@@ -39,7 +39,7 @@
 
                             <tr>
                                 <td> {{$commission->id}} </td>
-                                <td> {{$commission->invitee->email ?? '【账号已删除】'}} </td>
+                                <td> {{$commission->invitee->email ?? '【'.trans('common.deleted_item', ['attribute' => trans('common.account')]).'】'}} </td>
                                 <td>
                                     @can('admin.order')
                                         <a href="{{route('admin.order', ['id' => $commission->order->id])}}" target="_blank">
@@ -49,8 +49,8 @@
                                         {{$commission->order->goods->name}}
                                     @endcan
                                 </td>
-                                <td> {{$commission->amount}} </td>
-                                <td> {{$commission->commission}} </td>
+                                <td> ¥{{$commission->amount}} </td>
+                                <td> ¥{{$commission->commission}} </td>
                                 <td> {{$commission->created_at}} </td>
                             </tr>
                         @endforeach

+ 6 - 6
resources/views/admin/aff/index.blade.php

@@ -24,7 +24,7 @@
                     </div>
                     <div class="form-group col-lg-1 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.aff.index')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.aff.index')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -34,9 +34,9 @@
                         <th> 申请时间</th>
                         <th> 申请账号</th>
                         <th> 申请提现金额</th>
-                        <th> 状态</th>
+                        <th> {{trans('common.status')}}</th>
                         <th> 处理时间</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -46,7 +46,7 @@
                             <td> {{$apply->created_at}} </td>
                             <td>
                                 @if(empty($apply->user))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     @can('admin.user.index')
                                         <a href="{{route('admin.user.index', ['id'=>$apply->user_id])}}" target="_blank">
@@ -57,7 +57,7 @@
                                     @endcan
                                 @endif
                             </td>
-                            <td> {{$apply->amount}} </td>
+                            <td> ¥{{$apply->amount}} </td>
                             <td>
                                 @if($apply->status === -1)
                                     <span class="badge badge-lg badge-danger"> 驳 回 </span>
@@ -158,7 +158,7 @@
               $.each(errors.errors, function(index, value) {
                 str += '<li>' + value + '</li>';
               });
-              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('home.ticket_confirm')}}'});
+              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('common.confirm')}}'});
             }
           },
         });

+ 4 - 4
resources/views/admin/aff/rebate.blade.php

@@ -26,7 +26,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.aff.rebate')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.aff.rebate')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -40,7 +40,7 @@
                         <th> 返利金额</th>
                         <th> 生成时间</th>
                         <th> 处理时间</th>
-                        <th> 状态</th>
+                        <th> {{trans('common.status')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -49,14 +49,14 @@
                             <td> {{$referralLog->id}} </td>
                             <td>
                                 @if(empty($referralLog->invitee))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     <a href="{{route('admin.aff.rebate',['invitee_email' => $referralLog->invitee->email])}}"> {{$referralLog->invitee->email}} </a>
                                 @endif
                             </td>
                             <td>
                                 @if(empty($referralLog->inviter))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     <a href="{{route('admin.aff.rebate',['inviter_email' => $referralLog->inviter->email])}}"> {{$referralLog->inviter->email}} </a>
                                 @endif

+ 3 - 3
resources/views/admin/article/index.blade.php

@@ -22,7 +22,7 @@
                         <th> 标题</th>
                         <th> 排序</th>
                         <th> 发布日期</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -94,8 +94,8 @@
               title: '确定删除文章?',
               icon: 'question',
               showCancelButton: true,
-              cancelButtonText: '{{trans('home.ticket_close')}}',
-              confirmButtonText: '{{trans('home.ticket_confirm')}}',
+              cancelButtonText: '{{trans('common.close')}}',
+              confirmButtonText: '{{trans('common.confirm')}}',
             }).then((result) => {
               if (result.value) {
                 $.ajax({

+ 15 - 15
resources/views/admin/config/config.blade.php

@@ -40,7 +40,7 @@
                                 <thead class="thead-default">
                                 <tr>
                                     <th> 名称</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -74,7 +74,7 @@
                                 <thead class="thead-default">
                                 <tr>
                                     <th> 名称</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -108,7 +108,7 @@
                                 <thead class="thead-default">
                                 <tr>
                                     <th> 名称</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -143,7 +143,7 @@
                                 <tr>
                                     <th> 等级</th>
                                     <th> 名称</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -178,7 +178,7 @@
                                     <th> 图标</th>
                                     <th> 代码</th>
                                     <th> 国家/地区名称</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -218,7 +218,7 @@
                                     <th> 名称</th>
                                     <th> 关联节点数</th>
                                     <th> 排序</th>
-                                    <th> 操作</th>
+                                    <th> {{trans('common.action')}}</th>
                                 </tr>
                                 </thead>
                                 <tbody>
@@ -451,8 +451,8 @@
             icon: 'question',
             allowEnterKey: false,
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               $.ajax({
@@ -557,8 +557,8 @@
             icon: 'question',
             allowEnterKey: false,
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               $.ajax({
@@ -653,8 +653,8 @@
             icon: 'question',
             allowEnterKey: false,
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               $.ajax({
@@ -757,12 +757,12 @@
         // 删除标签
         function delLabel(id, name) {
           swal.fire({
-            title: '警告',
+            title: '{{trans('common.warning')}}',
             text: '确定删除标签 【' + name + '】 ?',
             icon: 'warning',
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             $.ajax({
               method: 'DELETE',

+ 2 - 2
resources/views/admin/config/emailFilter.blade.php

@@ -23,7 +23,7 @@
                         <th> #</th>
                         <th> 类型</th>
                         <th> 邮箱后缀</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -131,7 +131,7 @@
         // 删除邮箱后缀
         function delSuffix(id, name) {
           swal.fire({
-            title: '警告',
+            title: '{{trans('common.warning')}}',
             text: '确定删除邮箱后缀 【' + name + '】 ?',
             icon: 'warning',
             showCancelButton: true,

+ 96 - 72
resources/views/admin/config/system.blade.php

@@ -70,7 +70,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="website_name" value="{{$website_name}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('website_name')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('website_name')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 发邮件时展示 </span>
@@ -84,7 +84,7 @@
                                                 <div class="input-group">
                                                     <input type="url" class="form-control" id="website_url" value="{{$website_url}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('website_url')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('website_url')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">生成重置密码、在线支付必备 </span>
@@ -98,7 +98,7 @@
                                                 <div class="input-group">
                                                     <input type="email" class="form-control" id="AppStore_id" value="{{$AppStore_id}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('AppStore_id')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('AppStore_id')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> iOS软件设置教程中使用的苹果账号 </span>
@@ -112,7 +112,7 @@
                                                 <div class="input-group">
                                                     <input type="password" class="form-control" id="AppStore_password" value="{{$AppStore_password}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('AppStore_password')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('AppStore_password')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> iOS软件设置教程中使用的苹果密码 </span>
@@ -126,7 +126,7 @@
                                                 <div class="input-group">
                                                     <input type="email" class="form-control" id="webmaster_email" value="{{$webmaster_email}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('webmaster_email')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('webmaster_email')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 错误提示时会提供管理员邮箱作为联系方式 </span>
@@ -141,7 +141,7 @@
                                                     <input type="text" class="form-control" id="website_security_code" value="{{$website_security_code}}"/>
                                                     <span class="input-group-append">
                                                         <button class="btn btn-info" type="button" onclick="makeWebsiteSecurityCode()">生成</button>
-                                                        <button class="btn btn-primary" type="button" onclick="update('website_security_code')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('website_security_code')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">非空时必须通过<a href="{{route('login')}}?securityCode=" target="_blank">安全入口</a>加上安全码才可访问</span>
@@ -191,7 +191,7 @@
                                                 <div class="input-group">
                                                     <input type="datetime-local" class="form-control" id="maintenance_time" value="{{$maintenance_time}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('maintenance_time')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('maintenance_time')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 用于维护界面倒计时 </span>
@@ -205,7 +205,7 @@
                                                 <div class="input-group">
                                                     <textarea class="form-control" rows="3" id="maintenance_content">{{$maintenance_content}}</textarea>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('maintenance_content')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('maintenance_content')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 自定义维护内容信息 </span>
@@ -219,7 +219,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="redirect_url" value="{{$redirect_url}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('redirect_url')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('redirect_url')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 触发审计规则时访问请求被阻断并重定向至该地址 </span>
@@ -326,7 +326,8 @@
                                                     <input type="number" class="form-control" id="default_days" value="{{$default_days}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('default_days','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('default_days','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 用户注册时默认账户有效期,为0即当天到期 </span>
@@ -341,7 +342,8 @@
                                                     <input type="number" class="form-control" id="default_traffic" value="{{$default_traffic}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">MB</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('default_traffic','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('default_traffic','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 用户注册时默认可用流量 </span>
@@ -355,7 +357,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="invite_num" value="{{$invite_num}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('invite_num','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('invite_num','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 用户可以生成的邀请码数 </span>
@@ -369,7 +372,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="reset_password_times" value="{{$reset_password_times}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('reset_password_times','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('reset_password_times','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 24小时内可以通过邮件重置密码次数 </span>
@@ -397,7 +401,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="active_times" value="{{$active_times}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('active_times','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('active_times','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 24小时内可以通过邮件激活账号次数 </span>
@@ -411,7 +416,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="register_ip_limit" value="{{$register_ip_limit}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('register_ip_limit','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('register_ip_limit','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 同IP在24小时内允许注册数量,为0时不限制 </span>
@@ -426,7 +432,8 @@
                                                     <input type="number" class="form-control" id="user_invite_days" value="{{$user_invite_days}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
-                                                        <button class="btn btn-primary" type="button" onchange="updateFromOther('user_invite_days','1',false)">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onchange="updateFromOther('user_invite_days','1',false)">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 用户自行生成邀请的有效期 </span>
@@ -442,7 +449,8 @@
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
                                                     </div>
-                                                    <button class="btn btn-primary" type="button" onclick="updateFromInput('admin_invite_days','1',false)">修改</button>
+                                                    <button class="btn btn-primary" type="button"
+                                                            onclick="updateFromInput('admin_invite_days','1',false)">{{trans('common.update')}}</button>
                                                 </div>
                                                 <span class="text-help"> 管理员生成邀请码的有效期 </span>
                                             </div>
@@ -461,7 +469,7 @@
                                                 <div class="input-group">
                                                     <input type="url" class="form-control" id="subscribe_domain" value="{{$subscribe_domain}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('subscribe_domain')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('subscribe_domain')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">(推荐)防止面板域名被DNS投毒后无法正常订阅,需带http://或https:// </span>
@@ -475,7 +483,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="subscribe_max" value="{{$subscribe_max}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('subscribe_max','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('subscribe_max','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 客户端订阅时取得几个节点,为0时返回全部节点 </span>
@@ -519,7 +528,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="web_api_url" value="{{$web_api_url}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('web_api_url')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('web_api_url')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">用于 VNet后端授权,此域名需要解析A记录到面板,例:https://demo.proxypanel.ml</span>
@@ -533,7 +542,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="v2ray_license" value="{{$v2ray_license}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('v2ray_license')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('v2ray_license')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -546,7 +555,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="trojan_license" value="{{$trojan_license}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('trojan_license')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('trojan_license')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -559,7 +568,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="v2ray_tls_provider" value="{{$v2ray_tls_provider}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('v2ray_tls_provider')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('v2ray_tls_provider')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">后端自动签发/载入TLS证书时用(节点的设置值优先级高于此处)</span>
@@ -595,7 +604,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="ddns_key" value="{{$ddns_key}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('ddns_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('ddns_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">浏览<a href="https://proxypanel.gitbook.io/wiki/ddns" target="_blank">设置指南</a>来设置</span>
@@ -609,7 +618,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="ddns_secret" value="{{$ddns_secret}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('ddns_secret')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('ddns_secret')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -638,7 +647,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="geetest_id" value="{{$geetest_id}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('geetest_id')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('geetest_id')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">本功能需要<a href="https://auth.geetest.com/login/" target="_blank">极验后台</a>申请权限及应用</span>
@@ -652,7 +661,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="geetest_key" value="{{$geetest_key}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('geetest_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('geetest_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -665,7 +674,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="google_captcha_secret" value="{{$google_captcha_secret}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('google_captcha_secret')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('google_captcha_secret')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">本功能需要<a href="https://www.google.com/recaptcha/admin" target="_blank">GooglereCAPTCHA后台</a>申请权限及应用 (申请需科学上网,日常验证不用)</span>
@@ -679,7 +688,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="google_captcha_sitekey" value="{{$google_captcha_sitekey}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('google_captcha_sitekey')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('google_captcha_sitekey')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -692,7 +701,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="hcaptcha_secret" value="{{$hcaptcha_secret}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('hcaptcha_secret')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('hcaptcha_secret')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">本功能需要<a href="https://hCaptcha.com/?r=2d46d3aa7a4e" target="_blank">hCaptcha后台</a>申请权限及应用</span>
@@ -706,7 +715,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="hcaptcha_sitekey" value="{{$hcaptcha_sitekey}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('hcaptcha_sitekey')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('hcaptcha_sitekey')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -736,7 +745,8 @@
                                                     <input type="number" class="form-control" id="traffic_limit_time" value="{{$traffic_limit_time}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">分钟</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('traffic_limit_time','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('traffic_limit_time','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 间隔多久才可以再次签到</span>
@@ -804,7 +814,8 @@
                                                     <input type="number" class="form-control" id="referral_traffic" value="{{$referral_traffic}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">MB</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('referral_traffic','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('referral_traffic','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 根据推广链接、邀请码注册则赠送相应的流量 </span>
@@ -819,7 +830,8 @@
                                                     <input type="number" class="form-control" id="referral_percent" value="{{$referral_percent * 100}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">%</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('referral_percent','0','100')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('referral_percent','0','100')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 根据推广链接注册的账号每笔消费推广人可以分成的比例 </span>
@@ -834,7 +846,8 @@
                                                     <input type="number" class="form-control" id="referral_money" value="{{$referral_money}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">元</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('referral_money','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('referral_money','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 满多少元才可以申请提现 </span>
@@ -865,7 +878,8 @@
                                                     <input type="number" class="form-control" id="expire_days" value="{{$expire_days}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">天</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('expire_days','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('expire_days','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 账号距离过期还差多少天时发警告邮件 </span>
@@ -890,7 +904,8 @@
                                                     <input type="number" class="form-control" id="traffic_warning_percent" value="{{$traffic_warning_percent}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">%</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('traffic_warning_percent','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('traffic_warning_percent','0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 建议设置在70%~90% </span>
@@ -915,7 +930,8 @@
                                                     <input type="number" class="form-control" id="offline_check_times" value="{{$offline_check_times}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">次</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('offline_check_times','0','60')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('offline_check_times','0','60')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 提醒几次后不再提醒,为0时不限制,不超过60 </span>
@@ -940,7 +956,8 @@
                                                     <input type="number" class="form-control" id="detection_check_times" value="{{$detection_check_times}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">次</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('detection_check_times','0','12')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('detection_check_times','0','12')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 提醒N次后自动下线节点,为0时不限制,不超过12 </span>
@@ -969,7 +986,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="server_chan_key" value="{{$server_chan_key}}" placeholder="请到ServerChan申请"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('server_chan_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('server_chan_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">启用ServerChan,请务必填入本值(<a href="http://sc.ftqq.com" target="_blank">申请SCKEY</a>)</span>
@@ -983,7 +1000,7 @@
                                                 <div class="input-group">
                                                     <input type="url" class="form-control" id="bark_key" value="{{$bark_key}}" placeholder="安装并打开Bark后取得"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('bark_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('bark_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help">推送消息到iOS设备,需要在iOS设备里装一个名为Bark的应用,取网址后的一长串代码,启用Bark,请务必填入本值 </span>
@@ -1007,7 +1024,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="push_bear_send_key" value="{{$push_bear_send_key}}" placeholder="创建消息通道后即可获取"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('push_bear_send_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('push_bear_send_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 启用PushBear,请务必填入本值 </span>
@@ -1021,7 +1038,7 @@
                                                 <div class="input-group">
                                                     <input type="url" class="form-control" id="push_bear_qrcode" value="{{$push_bear_qrcode}}" placeholder="填入消息通道的二维码URL"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('push_bear_qrcode')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('push_bear_qrcode')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 创建消息通道后,在二维码上点击右键“复制图片地址”并粘贴至此处 </span>
@@ -1071,7 +1088,8 @@
                                                 <div class="input-group">
                                                     <input type="number" class="form-control" id="subscribe_ban_times" value="{{$subscribe_ban_times}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('subscribe_ban_times','0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('subscribe_ban_times','0')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                                 <span class="text-help"> 24小时内订阅链接请求次数限制 </span>
@@ -1096,7 +1114,8 @@
                                                     <input type="number" class="form-control" id="traffic_ban_value" value="{{$traffic_ban_value}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">GB</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('traffic_ban_value', '1')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('traffic_ban_value', '1')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 1小时内超过该值,则触发自动封号 </span>
@@ -1111,7 +1130,8 @@
                                                     <input type="number" class="form-control" id="traffic_ban_time" value="{{$traffic_ban_time}}"/>
                                                     <div class="input-group-append">
                                                         <span class="input-group-text">分钟</span>
-                                                        <button class="btn btn-primary" type="button" onclick="updateFromInput('traffic_ban_time', '0')">修改</button>
+                                                        <button class="btn btn-primary" type="button"
+                                                                onclick="updateFromInput('traffic_ban_time', '0')">{{trans('common.update')}}</button>
                                                     </div>
                                                 </div>
                                                 <span class="text-help"> 触发流量异常导致用户被封禁的时长,到期后自动解封 </span>
@@ -1187,7 +1207,8 @@
                                         <label class="col-form-label col-md-3" for="website_analytics">统计代码</label>
                                         <div class="col-md-9">
                                             <textarea class="form-control" rows="10" id="website_analytics" name="website_analytics">{{$website_analytics}}</textarea>
-                                            <button class="btn btn-success float-right mt-10" type="button" onclick="update('website_analytics')">修改</button>
+                                            <button class="btn btn-success float-right mt-10" type="button"
+                                                    onclick="update('website_analytics')">{{trans('common.update')}}</button>
                                         </div>
                                     </div>
                                 </div>
@@ -1197,7 +1218,8 @@
                                         <div class="col-md-9">
                                                 <textarea class="form-control" rows="10" id="website_customer_service"
                                                           name="website_customer_service">{{$website_customer_service}}</textarea>
-                                            <button class="btn btn-success float-right mt-10" type="button" onclick="update('website_customer_service')">修改</button>
+                                            <button class="btn btn-success float-right mt-10" type="button"
+                                                    onclick="update('website_customer_service')">{{trans('common.update')}}</button>
                                         </div>
                                     </div>
                                 </div>
@@ -1254,7 +1276,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="subject_name" value="{{$subject_name}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('subject_name')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('subject_name')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help"> 用于在支付渠道的商品标题显示 </span>
@@ -1266,7 +1288,8 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="website_callback_url" value="{{$website_callback_url}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('website_callback_url')">修改</button>
+                                                            <button class="btn btn-primary" type="button"
+                                                                    onclick="update('website_callback_url')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help">防止因为网站域名被DNS投毒后导致支付无法正常回调,需带http://或https:// </span>
@@ -1288,7 +1311,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="f2fpay_app_id" value="{{$f2fpay_app_id}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_app_id')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_app_id')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help">即:APPID</span>
@@ -1300,7 +1323,7 @@
                                                 <div class="input-group">
                                                     <input class="form-control" type="text" id="f2fpay_private_key" value="{{$f2fpay_private_key}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_private_key')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_private_key')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help">生成秘钥软件生成时,产生的应用秘钥</span>
@@ -1312,7 +1335,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="f2fpay_public_key" value="{{$f2fpay_public_key}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_public_key')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('f2fpay_public_key')">{{trans('common.update')}}</button>
                                                         </span>
                                                     <span class="text-help"> 注意不是应用公钥!</span>
                                                 </div>
@@ -1335,7 +1358,7 @@
                                                     <input type="text" class="form-control" id="codepay_url" value="{{$codepay_url}}"
                                                            placeholder="https://codepay.fateqq.com/creat_order/?"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('codepay_url')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('codepay_url')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1346,7 +1369,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="codepay_id" value="{{$codepay_id}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('codepay_id')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('codepay_id')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1357,7 +1380,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="codepay_key" value="{{$codepay_key}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('codepay_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('codepay_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1380,7 +1403,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="epay_url" value="{{$epay_url}}" placeholder="https://www.example.com"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('epay_url')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('epay_url')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1391,7 +1414,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="epay_mch_id" value="{{$epay_mch_id}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('epay_mch_id')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('epay_mch_id')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1402,7 +1425,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="epay_key" value="{{$epay_key}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('epay_key')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('epay_key')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1423,7 +1446,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="payjs_mch_id" value="{{$payjs_mch_id}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('payjs_mch_id')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('payjs_mch_id')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help">在<a href="https://payjs.cn/dashboard/member" target="_blank">本界面</a>获取信息</span>
@@ -1435,7 +1458,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="payjs_key" value="{{$payjs_key}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('payjs_key')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('payjs_key')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1456,7 +1479,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="bitpay_secret" value="{{$bitpay_secret}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('bitpay_secret')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('bitpay_secret')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help">在<a href="https://merchants.mugglepay.com/basic/api" target="_blank">API设置</a>中获取后台服务器的秘钥</span>
@@ -1478,7 +1501,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paypal_username" value="{{$paypal_username}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('paypal_username')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('paypal_username')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1489,7 +1512,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paypal_password" value="{{$paypal_password}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('paypal_password')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('paypal_password')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                             </div>
@@ -1500,7 +1523,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paypal_secret" value="{{$paypal_secret}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_secret')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_secret')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1511,7 +1534,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paypal_certificate" value="{{$paypal_certificate}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_certificate')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_certificate')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1522,7 +1545,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paypal_app_id" value="{{$paypal_app_id}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_app_id')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('paypal_app_id')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1540,7 +1563,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="stripe_public_key" value="{{$stripe_public_key}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_public_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_public_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1551,7 +1574,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="stripe_secret_key" value="{{$stripe_secret_key}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_secret_key')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_secret_key')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1562,7 +1585,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="stripe_signing_secret" value="{{$stripe_signing_secret}}"/>
                                                     <span class="input-group-append">
-                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_signing_secret')">修改</button>
+                                                        <button class="btn btn-primary" type="button" onclick="update('stripe_signing_secret')">{{trans('common.update')}}</button>
                                                     </span>
                                                 </div>
                                             </div>
@@ -1584,7 +1607,7 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paybeaver_app_id" value="{{$paybeaver_app_id}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('paybeaver_app_id')">修改</button>
+                                                            <button class="btn btn-primary" type="button" onclick="update('paybeaver_app_id')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help"><a href="https://merchant.paybeaver.com/" target="_blank">商户中心</a> -&gt; 开发者 -&gt; App ID</span>
@@ -1596,7 +1619,8 @@
                                                 <div class="input-group">
                                                     <input type="text" class="form-control" id="paybeaver_app_secret" value="{{$paybeaver_app_secret}}"/>
                                                     <span class="input-group-append">
-                                                            <button class="btn btn-primary" type="button" onclick="update('paybeaver_app_secret')">修改</button>
+                                                            <button class="btn btn-primary" type="button"
+                                                                    onclick="update('paybeaver_app_secret')">{{trans('common.update')}}</button>
                                                         </span>
                                                 </div>
                                                 <span class="text-help"><a href="https://merchant.paybeaver.com/" target="_blank">商户中心</a> -&gt; 开发者 -&gt; App Secret</span>

+ 7 - 7
resources/views/admin/coupon/index.blade.php

@@ -41,7 +41,7 @@
                     </div>
                     <div class="form-group col-lg-3 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.coupon.index')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.coupon.index')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -55,8 +55,8 @@
                         <th> 使用次数</th>
                         <th> 优惠</th>
                         <th> 有效期</th>
-                        <th> 状态</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.status')}}</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -150,8 +150,8 @@
           text: '确定导出所有卡券吗?',
           icon: 'question',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             window.location.href = '{{route('admin.coupon.export')}}';
@@ -168,8 +168,8 @@
           icon: 'question',
           allowEnterKey: false,
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.ajax({

+ 16 - 16
resources/views/admin/inviteList.blade.php

@@ -9,12 +9,12 @@
                 <div class="card">
                     <div class="card-block">
                         <h4 class="card-title cyan-600"><i class="icon wb-plus"></i>
-                            {{trans('home.invite_code_make')}}
+                            {{trans('common.generate_item', ['attribute' => trans('user.invite.attribute')])}}
                         </h4>
-                        <x-alert type="info" :message="trans('home.invite_code_tips', ['num'=>10, 'days' => sysConfig('user_invite_days')])"/>
+                        <x-alert type="info" :message="trans('user.invite.tips', ['num'=>10, 'days' => sysConfig('user_invite_days')])"/>
                         @can('admin.invite.create')
                             <button type="button" class="btn btn-primary btn-animate btn-animate-side" onclick="makeInvite()">
-                                <i class="icon wb-plus"></i> {{trans('home.invite_code_button')}}
+                                <i class="icon wb-plus"></i> {{trans('common.generate')}}
                             </button>
                         @endcan
                     </div>
@@ -24,7 +24,7 @@
                 <div class="panel">
                     <div class="panel-heading">
                         <h4 class="panel-title cyan-600">
-                            <i class="icon wb-extension"></i>{{trans('home.invite_code_my_codes')}}
+                            <i class="icon wb-extension"></i>{{trans('user.invite.attribute')}}
                         </h4>
                         @can('admin.invite.export')
                             <div class="panel-actions">
@@ -37,11 +37,11 @@
                             <thead class="thead-default">
                             <tr>
                                 <th> #</th>
-                                <th> {{trans('home.invite_code_table_name')}} </th>
-                                <th> {{trans('home.invite_code_table_date')}} </th>
-                                <th> 生成者</th>
-                                <th> {{trans('home.invite_code_table_status')}} </th>
-                                <th> {{trans('home.invite_code_table_user')}} </th>
+                                <th> {{trans('user.invite.attribute')}} </th>
+                                <th> {{trans('common.available_date')}} </th>
+                                <th> {{trans('user.inviter')}}</th>
+                                <th> {{trans('common.status')}} </th>
+                                <th> {{trans('user.invitee')}} </th>
                             </tr>
                             </thead>
                             <tbody>
@@ -54,13 +54,13 @@
                                     </td>
                                     <td> {{$invite->dateline}} </td>
                                     <td>
-                                        {{$invite->inviter_id === null ? '系统生成' : ($invite->inviter->email ?? '【账号已删除】')}}
+                                        {{$invite->inviter_id === null ? '系统生成' : ($invite->inviter->email ?? '【'.trans('common.deleted_item', ['attribute' => trans('common.account')]).'】')}}
                                     </td>
                                     <td>
                                         {!!$invite->status_label!!}
                                     </td>
                                     <td>
-                                        {{$invite->status === 1 ? ($invite->invitee->email ?? '【账号已删除】') : ''}}
+                                        {{$invite->status === 1 ? ($invite->invitee->email ?? '【'.trans('common.deleted_item', ['attribute' => trans('common.account')]).'】') : ''}}
                                     </td>
                                 </tr>
                             @endforeach
@@ -70,7 +70,7 @@
                     <div class="panel-footer">
                         <div class="row">
                             <div class="col-md-4">
-                                {{trans('home.invite_code_summary', ['total' => $inviteList->total()])}}
+                                {{trans('user.invite.total', ['num' => $inviteList->total()])}}
                             </div>
                             <div class="col-md-8">
                                 <nav class="Page navigation float-right">
@@ -120,8 +120,8 @@
             text: '确定导出所有邀请码吗',
             icon: 'question',
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               window.location.href = '{{route('admin.invite.export')}}';
@@ -133,7 +133,7 @@
         const clipboard = new ClipboardJS('.mt-clipboard');
         clipboard.on('success', function() {
           swal.fire({
-            title: '复制成功',
+            title: '{{trans('common.copy.success')}}',
             icon: 'success',
             timer: 1300,
             showConfirmButton: false,
@@ -141,7 +141,7 @@
         });
         clipboard.on('error', function() {
           swal.fire({
-            title: '复制失败,请手动复制',
+            title: '{{trans('common.copy.failed')}}',
             icon: 'error',
             timer: 1500,
             showConfirmButton: false,

+ 4 - 4
resources/views/admin/layouts.blade.php

@@ -8,7 +8,7 @@
     <nav class="site-navbar navbar navbar-default navbar-fixed-top navbar-mega navbar-inverse bg-indigo-600" role="navigation">
         <div class="navbar-header">
             <button type="button" class="navbar-toggler hamburger hamburger-close navbar-toggler-left hided" data-toggle="menubar">
-                <span class="sr-only">Toggle navigation</span>
+                <span class="sr-only">{{trans('toggle_action', ['action' => trans('common.function.navigation')])}}</span>
                 <span class="hamburger-bar"></span>
             </button>
             <button type="button" class="navbar-toggler collapsed" data-target="#site-navbar-collapse" data-toggle="collapse">
@@ -25,14 +25,14 @@
                     <li class="nav-item hidden-float" id="toggleMenubar">
                         <a class="nav-link" data-toggle="menubar" href="#" role="button">
                             <i class="icon hamburger hamburger-arrow-left">
-                                <span class="sr-only">菜单</span>
+                                <span class="sr-only">{{trans('toggle_action', ['action' => trans('common.function.menubar')])}}</span>
                                 <span class="hamburger-bar"></span>
                             </i>
                         </a>
                     </li>
                     <li class="nav-item hidden-sm-down">
                         <a class="nav-link icon icon-fullscreen" data-toggle="fullscreen" href="#" role="button">
-                            <span class="sr-only">全屏</span>
+                            <span class="sr-only">{{trans('toggle_action', ['action' => trans('common.function.fullscreen')])}}</span>
                         </a>
                     </li>
                 </ul>
@@ -52,7 +52,7 @@
                             <div class="dropdown-divider" role="presentation"></div>
                             <a class="dropdown-item" href="{{route('logout')}}" role="menuitem">
                                 <i class="icon wb-power" aria-hidden="true"></i>
-                                {{trans('home.logout')}}
+                                {{trans('auth.logout')}}
                             </a>
                         </div>
                     </li>

+ 2 - 2
resources/views/admin/logs/callback.blade.php

@@ -40,7 +40,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.payment.callback')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.payment.callback')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -51,7 +51,7 @@
                         <th> 平台订单号</th>
                         <th> 本地订单号</th>
                         <th> 交易金额</th>
-                        <th> 状态</th>
+                        <th> {{trans('common.status')}}</th>
                     </tr>
                     </thead>
                     <tbody>

+ 1 - 1
resources/views/admin/logs/notification.blade.php

@@ -25,7 +25,7 @@
                     </div>
                     <div class="form-group col-lg-1 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.notify')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.notify')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">

+ 1 - 1
resources/views/admin/logs/onlineIPMonitor.blade.php

@@ -39,7 +39,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.online')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.online')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">

+ 4 - 4
resources/views/admin/logs/order.blade.php

@@ -79,7 +79,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.order')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.order')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -114,11 +114,11 @@
                                 @endif
                             </td>
                             <td> {{$order->order_sn}}</td>
-                            <td> {{empty($order->goods) ? ($order->goods_id === 0 ? '余额充值' : trans('home.invoice_table_goods_deleted')) : $order->goods->name}} </td>
+                            <td> {{empty($order->goods) ? ($order->goods_id === 0 ? trans('user.recharge_credit') : trans('home.invoice_table_goods_deleted')) : $order->goods->name}} </td>
                             <td> {{$order->is_expire ? '已过期' : $order->expired_at}} </td>
                             <td> {{$order->coupon ? $order->coupon->name . ' - ' . $order->coupon->sn : ''}} </td>
-                            <td> {{$order->origin_amount}} </td>
-                            <td> {{$order->amount}} </td>
+                            <td> ¥{{$order->origin_amount}} </td>
+                            <td> ¥{{$order->amount}} </td>
                             <td>
                                 <span class="badge badge-lg badge-info"> {{$order->pay_way_label}} </span>
                             </td>

+ 2 - 2
resources/views/admin/logs/traffic.blade.php

@@ -47,7 +47,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.traffic')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.traffic')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -69,7 +69,7 @@
                             <td> {{$log->id}} </td>
                             <td>
                                 @if(empty($log->user))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     @can('admin.user.index')
                                         <a href="{{route('admin.user.index', ['id' => $log->user->id])}}" target="_blank"> {{$log->user->email}} </a>

+ 2 - 2
resources/views/admin/logs/userBanHistory.blade.php

@@ -15,7 +15,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.ban')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.ban')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -43,7 +43,7 @@
                                         {{$log->user->email}}
                                     @endcan
                                 @else
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @endif
                             </td>
                             <td> {{$log->time}}分钟</td>

+ 2 - 2
resources/views/admin/logs/userCreditHistory.blade.php

@@ -15,7 +15,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.credit')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.credit')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -37,7 +37,7 @@
                             <td> {{$log->id}} </td>
                             <td>
                                 @if(empty($log->user))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     <a href="{{route('admin.log.credit', ['email'=>$log->user->email])}}"> {{$log->user->email}} </a>
                                 @endif

+ 3 - 3
resources/views/admin/logs/userMonitor.blade.php

@@ -7,7 +7,7 @@
             </div>
             <div class="alert alert-info alert-dismissible">
                 <button class="close" data-dismiss="alert" aria-label="Close">
-                    <span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
+                    <span aria-hidden="true">&times;</span><span class="sr-only">{{trans('common.close')}}</span>
                 </button>
                 <h4 class="block">{{$email}}</h4>
                 <strong>提示:</strong> 如果无统计数据,请检查定时任务是否正常。
@@ -71,7 +71,7 @@
                 },
                 scaleLabel: {
                   display: true,
-                  labelString: '{{trans('home.traffic_log_24hours')}}',
+                  labelString: '{{trans('user.traffic_logs.24hours')}}',
                 },
               }],
           },
@@ -121,7 +121,7 @@
                 },
                 scaleLabel: {
                   display: true,
-                  labelString: '{{trans('home.traffic_log_30days')}}',
+                  labelString: '{{trans('user.traffic_logs.30days')}}',
                 },
               }],
           },

+ 2 - 2
resources/views/admin/logs/userOnlineIP.blade.php

@@ -34,7 +34,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.ip')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.ip')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -43,7 +43,7 @@
                         <th> #</th>
                         <th> 用户名</th>
                         <th> 端口</th>
-                        <th> 状态</th>
+                        <th> {{trans('common.status')}}</th>
                         <th> 代理</th>
                         <th> 连接IP</th>
                     </tr>

+ 2 - 2
resources/views/admin/logs/userTraffic.blade.php

@@ -15,7 +15,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.log.flow')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.log.flow')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -36,7 +36,7 @@
                             <td> {{$log->id}} </td>
                             <td>
                                 @if(empty($log->user))
-                                    【账号已删除
+                                    【{{trans('common.deleted_item', ['attribute' => trans('common.account')])}}
                                 @else
                                     <a href="{{route('admin.log.flow', ['email' => $log->user->email])}}"> {{$log->user->email}} </a>
                                 @endif

+ 2 - 2
resources/views/admin/marketing/emailList.blade.php

@@ -23,7 +23,7 @@
                     </div>
                     <div class="form-group col-lg-3 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.marketing.email')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.marketing.email')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -76,7 +76,7 @@
 
       // 发送邮件
       function send() {
-        swal.fire('抱歉', '开发中!敬请期待', 'info');
+        swal.fire(trans('common.sorry'), '开发中!敬请期待', 'info');
       }
 
       function Search() {

+ 1 - 1
resources/views/admin/marketing/pushList.blade.php

@@ -27,7 +27,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-6 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.marketing.push')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.marketing.push')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <div class="alert alert-info alert-dismissible" role="alert">

+ 7 - 7
resources/views/admin/node/auth.blade.php

@@ -26,7 +26,7 @@
                         <th> IPv4</th>
                         <th> 通信密钥<small>节点用</small></th>
                         <th> 反向通信密钥</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -220,8 +220,8 @@
           text: '确定生成所有节点的授权吗?',
           icon: 'info',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.post('{{route('admin.node.auth.store')}}', {_token: '{{csrf_token()}}'}, function(ret) {
@@ -244,8 +244,8 @@
           text: '确定删除该授权吗?',
           icon: 'info',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.ajax({
@@ -274,8 +274,8 @@
           text: '确定继续操作吗?',
           icon: 'info',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.ajax({

+ 3 - 3
resources/views/admin/node/cert/index.blade.php

@@ -26,7 +26,7 @@
                         <th> 签发机构</th>
                         <th> 签发日期</th>
                         <th> 到期时间</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -87,8 +87,8 @@
               text: '确定删除该证书吗?',
               icon: 'info',
               showCancelButton: true,
-              cancelButtonText: '{{trans('home.ticket_close')}}',
-              confirmButtonText: '{{trans('home.ticket_confirm')}}',
+              cancelButtonText: '{{trans('common.close')}}',
+              confirmButtonText: '{{trans('common.confirm')}}',
             }).then((result) => {
               if (result.value) {
                 $.ajax({

+ 7 - 7
resources/views/admin/node/index.blade.php

@@ -39,12 +39,12 @@
                         <th> IP</th>
                         <th> 域名</th>
                         <th> 存活</th>
-                        <th> 状态</th>
+                        <th> {{trans('common.status')}}</th>
                         <th> 在线</th>
                         <th> 产生流量</th>
                         <th> 流量比例</th>
                         <th> 扩展</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -219,8 +219,8 @@
             text: '确定重载节点?',
             icon: 'question',
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               $.ajax({
@@ -274,12 +274,12 @@
         // 删除节点
         function delNode(id, name) {
           swal.fire({
-            title: '警告',
+            title: '{{trans('common.warning')}}',
             text: '确定删除节点 【' + name + '】 ?',
             icon: 'warning',
             showCancelButton: true,
-            cancelButtonText: '{{trans('home.ticket_close')}}',
-            confirmButtonText: '{{trans('home.ticket_confirm')}}',
+            cancelButtonText: '{{trans('common.close')}}',
+            confirmButtonText: '{{trans('common.confirm')}}',
           }).then((result) => {
             if (result.value) {
               $.ajax({

+ 2 - 2
resources/views/admin/node/info.blade.php

@@ -17,7 +17,7 @@
             <div class="alert alert-info" role="alert">
                 <button class="close" data-dismiss="alert" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
-                    <span class="sr-only">{{trans('home.close')}}</span>
+                    <span class="sr-only">{{trans('common.close')}}</span>
                 </button>
                 <strong>注意:</strong> 添加节点后自动生成的<code>ID</code>,即为该节点部署ShadowsocksR Python版后端时<code>usermysql.json</code>中的<code>node_id</code>的值,同时也是部署V2Ray后端时的<code>nodeId</code>的值;
             </div>
@@ -576,7 +576,7 @@
               $.each(errors.errors, function(index, value) {
                 str += '<li>' + value + '</li>';
               });
-              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('home.ticket_confirm')}}'});
+              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('common.confirm')}}'});
             }
           },
         });

+ 3 - 3
resources/views/admin/node/monitor.blade.php

@@ -7,7 +7,7 @@
             </div>
             <div class="alert alert-info alert-dismissible">
                 <button class="close" data-dismiss="alert" aria-label="Close">
-                    <span aria-hidden="true">&times;</span><span class="sr-only">{{trans('home.close')}}</span>
+                    <span aria-hidden="true">&times;</span><span class="sr-only">{{trans('common.close')}}</span>
                 </button>
                 <h4 class="block">{{$nodeName}}
                     <small class="pl-10">{{$nodeServer}}</small>
@@ -70,7 +70,7 @@
                 },
                 scaleLabel: {
                   display: true,
-                  labelString: '{{trans('home.traffic_log_24hours')}}',
+                  labelString: '{{trans('user.traffic_logs.24hours')}}',
                 },
               }],
           },
@@ -117,7 +117,7 @@
                 },
                 scaleLabel: {
                   display: true,
-                  labelString: '{{trans('home.traffic_log_30days')}}',
+                  labelString: '{{trans('user.traffic_logs.30days')}}',
                 },
               }],
           },

+ 4 - 4
resources/views/admin/permission/index.blade.php

@@ -22,7 +22,7 @@
                         <th> #</th>
                         <th> 名称</th>
                         <th> 行为</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -73,12 +73,12 @@
         <script>
           function delPermission(url, name) {
             swal.fire({
-              title: '警告',
+              title: '{{trans('common.warning')}}',
               text: '确定删除 【' + name + '】 权限行为?',
               icon: 'warning',
               showCancelButton: true,
-              cancelButtonText: '{{trans('home.close')}}',
-              confirmButtonText: '{{trans('home.ticket_confirm')}}',
+              cancelButtonText: '{{trans('common.close')}}',
+              confirmButtonText: '{{trans('common.confirm')}}',
             }).then((result) => {
               if (result.value) {
                 $.ajax({

+ 4 - 4
resources/views/admin/role/index.blade.php

@@ -22,7 +22,7 @@
                         <th> #</th>
                         <th> 名称</th>
                         <th> 权限</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -80,12 +80,12 @@
         <script>
           function delRole(url, name) {
             swal.fire({
-              title: '警告',
+              title: '{{trans('common.warning')}}',
               text: '确定删除 【' + name + '】 权限角色?',
               icon: 'warning',
               showCancelButton: true,
-              cancelButtonText: '{{trans('home.close')}}',
-              confirmButtonText: '{{trans('home.ticket_confirm')}}',
+              cancelButtonText: '{{trans('common.close')}}',
+              confirmButtonText: '{{trans('common.confirm')}}',
             }).then((result) => {
               if (result.value) {
                 $.ajax({

+ 4 - 4
resources/views/admin/rule/group/index.blade.php

@@ -22,7 +22,7 @@
                         <th> #</th>
                         <th> 分组名称</th>
                         <th> 审计模式</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -76,12 +76,12 @@
           // 删除规则分组
           function delRuleGroup(url, name) {
             swal.fire({
-              title: '警告',
+              title: '{{trans('common.warning')}}',
               text: '确定删除分组 【' + name + '】 ?',
               icon: 'warning',
               showCancelButton: true,
-              cancelButtonText: '{{trans('home.ticket_close')}}',
-              confirmButtonText: '{{trans('home.ticket_confirm')}}',
+              cancelButtonText: '{{trans('common.close')}}',
+              confirmButtonText: '{{trans('common.confirm')}}',
             }).then((result) => {
               if (result.value) {
                 $.ajax({

+ 7 - 7
resources/views/admin/rule/index.blade.php

@@ -28,7 +28,7 @@
                         </select>
                     </div>
                     <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4">
-                        <a href="{{route('admin.rule.index')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.rule.index')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -38,7 +38,7 @@
                         <th> 类型</th>
                         <th> 描述</th>
                         <th> 值</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -176,7 +176,7 @@
               $.each(errors.errors, function(index, value) {
                 str += '<li>' + value + '</li>';
               });
-              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('home.ticket_confirm')}}'});
+              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('common.confirm')}}'});
             }
           },
         });
@@ -209,7 +209,7 @@
               $.each(errors.errors, function(index, value) {
                 str += '<li>' + value + '</li>';
               });
-              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('home.ticket_confirm')}}'});
+              swal.fire({title: '提示', html: str, icon: 'error', confirmButtonText: '{{trans('common.confirm')}}'});
             }
           },
         });
@@ -220,12 +220,12 @@
       // 删除规则
       function delRule(url, name) {
         swal.fire({
-          title: '警告',
+          title: '{{trans('common.warning')}}',
           text: '确定删除规则 【' + name + '】 ?',
           icon: 'warning',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.ajax({

+ 6 - 6
resources/views/admin/rule/log.blade.php

@@ -42,7 +42,7 @@
                     </div>
                     <div class="form-group col-xxl-1 col-lg-3 col-md-3 col-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.rule.log')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.rule.log')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -61,8 +61,8 @@
                     @foreach($ruleLogs as $ruleLog)
                         <tr>
                             <td> {{$ruleLog->id}} </td>
-                            <td> {{$ruleLog->user->id ?? '【账号已删除】'}} </td>
-                            <td> {{$ruleLog->user->username ?? '【账号已删除】'}} </td>
+                            <td> {{$ruleLog->user->id ?? '【'.trans('common.deleted_item', ['attribute' => trans('common.account')]).'】'}} </td>
+                            <td> {{$ruleLog->user->username ?? '【'.trans('common.deleted_item', ['attribute' => trans('common.account')]).'】'}} </td>
                             <td> {{empty($ruleLog->node) ? '【节点已删除】' : '【节点ID:' . $ruleLog->node_id . '】' . $ruleLog->node->name}} </td>
                             <td> {{$ruleLog->rule_id ? '⛔  ' . ($ruleLog->rule->name ?? '【规则已删除】') : '✅  访问非规则允许内容'}} </td>
                             <td> {{$ruleLog->reason}} </td>
@@ -101,12 +101,12 @@
       // 清除所有记录
       function clearLog() {
         swal.fire({
-          title: '警告',
+          title: '{{trans('common.warning')}}',
           text: '确定清空所有记录吗?',
           icon: 'warning',
           showCancelButton: true,
-          cancelButtonText: '{{trans('home.ticket_close')}}',
-          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+          cancelButtonText: '{{trans('common.close')}}',
+          confirmButtonText: '{{trans('common.confirm')}}',
         }).then((result) => {
           if (result.value) {
             $.post("{{route('admin.rule.clear')}}", {_token: '{{csrf_token()}}'}, function(ret) {

+ 4 - 4
resources/views/admin/shop/index.blade.php

@@ -31,7 +31,7 @@
                     </div>
                     <div class="form-group col-lg-2 col-sm-4 btn-group">
                         <button class="btn btn-primary" onclick="Search()">搜 索</button>
-                        <a href="{{route('admin.goods.index')}}" class="btn btn-danger">重 置</a>
+                        <a href="{{route('admin.goods.index')}}" class="btn btn-danger">{{trans('common.reset')}}</a>
                     </div>
                 </div>
                 <table class="text-md-center" data-toggle="table" data-mobile-responsive="true">
@@ -46,8 +46,8 @@
                         <th> 排序</th>
                         <th> 热销</th>
                         <th> 限购数</th>
-                        <th> 状态</th>
-                        <th> 操作</th>
+                        <th> {{trans('common.status')}}</th>
+                        <th> {{trans('common.action')}}</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -146,7 +146,7 @@
       // 删除商品
       function delGoods(url, name) {
         swal.fire({
-          title: '警告',
+          title: '{{trans('common.warning')}}',
           text: '确定删除商品 【' + name + '】 ?',
           icon: 'warning',
           showCancelButton: true,

Some files were not shown because too many files changed in this diff