Kaynağa Gözat

Update translation

BrettonYe 2 yıl önce
ebeveyn
işleme
1f294e8f27
81 değiştirilmiş dosya ile 2148 ekleme ve 1281 silme
  1. 15 23
      app/Exceptions/Handler.php
  2. 147 165
      app/Http/Controllers/AuthController.php
  3. 4 3
      app/Http/Controllers/UserController.php
  4. 3 4
      app/Notifications/AccountActivation.php
  5. 1 0
      app/Notifications/PasswordReset.php
  6. 1 1
      app/Services/ArticleService.php
  7. 1 1
      app/Services/CouponService.php
  8. 2 2
      app/helpers.php
  9. 1 0
      composer.json
  10. 188 178
      composer.lock
  11. 54 0
      resources/lang/en.json
  12. 21 21
      resources/lang/en/admin.php
  13. 24 11
      resources/lang/en/auth.php
  14. 12 10
      resources/lang/en/common.php
  15. 0 4
      resources/lang/en/errors.php
  16. 76 0
      resources/lang/en/http-statuses.php
  17. 1 1
      resources/lang/en/model.php
  18. 1 1
      resources/lang/en/pagination.php
  19. 4 8
      resources/lang/en/user.php
  20. 101 40
      resources/lang/en/validation.php
  21. 52 25
      resources/lang/ja.json
  22. 23 10
      resources/lang/ja/auth.php
  23. 12 10
      resources/lang/ja/common.php
  24. 0 4
      resources/lang/ja/errors.php
  25. 76 0
      resources/lang/ja/http-statuses.php
  26. 29 29
      resources/lang/ja/notification.php
  27. 2 2
      resources/lang/ja/pagination.php
  28. 5 5
      resources/lang/ja/passwords.php
  29. 168 172
      resources/lang/ja/user.php
  30. 174 113
      resources/lang/ja/validation.php
  31. 52 25
      resources/lang/ko.json
  32. 23 10
      resources/lang/ko/auth.php
  33. 12 10
      resources/lang/ko/common.php
  34. 0 4
      resources/lang/ko/errors.php
  35. 76 0
      resources/lang/ko/http-statuses.php
  36. 1 1
      resources/lang/ko/pagination.php
  37. 4 8
      resources/lang/ko/user.php
  38. 104 43
      resources/lang/ko/validation.php
  39. 52 25
      resources/lang/vi.json
  40. 23 10
      resources/lang/vi/auth.php
  41. 12 10
      resources/lang/vi/common.php
  42. 0 4
      resources/lang/vi/errors.php
  43. 76 0
      resources/lang/vi/http-statuses.php
  44. 2 2
      resources/lang/vi/pagination.php
  45. 5 5
      resources/lang/vi/passwords.php
  46. 8 12
      resources/lang/vi/user.php
  47. 174 113
      resources/lang/vi/validation.php
  48. 52 26
      resources/lang/zh_CN.json
  49. 1 1
      resources/lang/zh_CN/admin.php
  50. 23 10
      resources/lang/zh_CN/auth.php
  51. 12 10
      resources/lang/zh_CN/common.php
  52. 0 4
      resources/lang/zh_CN/errors.php
  53. 76 0
      resources/lang/zh_CN/http-statuses.php
  54. 1 1
      resources/lang/zh_CN/model.php
  55. 1 1
      resources/lang/zh_CN/pagination.php
  56. 4 8
      resources/lang/zh_CN/user.php
  57. 102 41
      resources/lang/zh_CN/validation.php
  58. 1 1
      resources/views/admin/article/info.blade.php
  59. 4 4
      resources/views/admin/config/system.blade.php
  60. 1 1
      resources/views/admin/coupon/create.blade.php
  61. 2 2
      resources/views/admin/logs/userMonitor.blade.php
  62. 2 2
      resources/views/admin/node/monitor.blade.php
  63. 1 1
      resources/views/admin/report/accounting.blade.php
  64. 1 1
      resources/views/admin/report/userDataAnalysis.blade.php
  65. 2 2
      resources/views/admin/shop/info.blade.php
  66. 2 2
      resources/views/admin/user/index.blade.php
  67. 1 1
      resources/views/auth/activeUser.blade.php
  68. 1 1
      resources/views/auth/login.blade.php
  69. 2 2
      resources/views/auth/maintenance.blade.php
  70. 2 2
      resources/views/auth/register.blade.php
  71. 1 1
      resources/views/auth/resetPassword.blade.php
  72. 2 2
      resources/views/components/payment/detail.blade.php
  73. 2 2
      resources/views/components/ticket/reply.blade.php
  74. 4 4
      resources/views/user/buy.blade.php
  75. 1 1
      resources/views/user/components/payment/default.blade.php
  76. 1 1
      resources/views/user/components/payment/manual.blade.php
  77. 8 8
      resources/views/user/index.blade.php
  78. 3 3
      resources/views/user/invoiceDetail.blade.php
  79. 1 1
      resources/views/user/profile.blade.php
  80. 1 1
      resources/views/user/referral.blade.php
  81. 8 8
      resources/views/user/services.blade.php

+ 15 - 23
app/Exceptions/Handler.php

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

+ 147 - 165
app/Http/Controllers/AuthController.php

@@ -84,8 +84,10 @@ class AuthController extends Controller
         if ($user->status === 0 && sysConfig('is_activate_account')) {
             Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
-            return Redirect::back()->withInput()->withErrors(trans('auth.active.promotion.0').'<a href="'.route('active').'?username='.$user->username.
-                '" target="_blank">👉【'.trans('common.active_item', ['attribute' => trans('common.account')]).'】👈</span></a><br>'.trans('auth.active.promotion.1'));
+            return Redirect::back()->withInput()->withErrors(trans('auth.active.promotion', [
+                'action' => '<a href="'.route('active', ['username' => $user->username]).'" 
+            target="_blank">'.trans('common.active_item', ['attribute' => trans('common.account')]).'</span></a><br>',
+            ]));
         }
 
         Helpers::userLoginAction($user, IP::getClientIp()); // 用户登录后操作
@@ -93,52 +95,8 @@ class AuthController extends Controller
         return redirect()->back();
     }
 
-    // 校验验证码
-    private function check_captcha(Request $request)
-    {
-        switch (sysConfig('is_captcha')) {
-            case 1: // 默认图形验证码
-                if (! Captcha::check($request->input('captcha'))) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
-                }
-                break;
-            case 2: // Geetest
-                $validator = Validator::make($request->all(), [
-                    'geetest_challenge' => 'required|geetest',
-                ]);
-
-                if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
-                }
-                break;
-            case 3: // Google reCAPTCHA
-                $validator = Validator::make($request->all(), [
-                    'g-recaptcha-response' => 'required|NoCaptcha',
-                ]);
-
-                if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
-                }
-                break;
-            case 4: // hCaptcha
-                $validator = Validator::make($request->all(), [
-                    'h-captcha-response' => 'required|HCaptcha',
-                ]);
-
-                if ($validator->fails()) {
-                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
-                }
-                break;
-            default: // 不启用验证码
-                break;
-        }
-
-        return false;
-    }
-
-    // 退出
     public function logout(Request $request): RedirectResponse
-    {
+    { // 退出
         Auth::logout();
         $request->session()->invalidate();
         $request->session()->regenerateToken();
@@ -153,9 +111,8 @@ class AuthController extends Controller
         return view('auth.register', ['emailList' => (int) sysConfig('is_email_filtering') !== 2 ? false : EmailFilter::whereType(2)->get()]);
     }
 
-    // 注册
     public function register(RegisterRequest $request)
-    {
+    { // 注册
         $cacheKey = 'register_times_'.md5(IP::getClientIp()); // 注册限制缓存key
 
         $data = $request->validated();
@@ -289,111 +246,8 @@ class AuthController extends Controller
         return Redirect::route('login')->withInput();
     }
 
-    //邮箱检查
-    private function emailChecker($email, $returnType = 0)
-    {
-        $emailFilterList = EmailFilter::whereType(sysConfig('is_email_filtering'))->pluck('words')->toArray();
-        $emailSuffix = explode('@', $email); // 提取邮箱后缀
-
-        if ($emailSuffix) {
-            switch (sysConfig('is_email_filtering')) {
-                // 黑名单
-                case 1:
-                    if (in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
-                        if ($returnType) {
-                            return Redirect::back()->withErrors(trans('auth.email.error.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.error.invalid'));
-                        }
-
-                        return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
-                    }
-                    break;
-                default:
-                    if ($returnType) {
-                        return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
-                    }
-
-                    return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * 获取AFF.
-     *
-     * @param  string|null  $code  邀请码
-     * @param  int|null  $aff  URL中的aff参数
-     * @return array
-     */
-    private function getAff($code = null, $aff = null): array
-    {
-        $data = ['inviter_id' => null, 'code_id' => 0]; // 邀请人ID 与 邀请码ID
-
-        // 有邀请码先用邀请码,用谁的邀请码就给谁返利
-        if ($code) {
-            $inviteCode = Invite::whereCode($code)->whereStatus(0)->first();
-            if ($inviteCode) {
-                $data['inviter_id'] = $inviteCode->inviter_id;
-                $data['code_id'] = $inviteCode->id;
-            }
-        }
-
-        // 没有用邀请码或者邀请码是管理员生成的,则检查cookie或者url链接
-        if (! $data['inviter_id']) {
-            // 检查一下cookie里有没有aff
-            $cookieAff = \request()->cookie('register_aff');
-            if ($cookieAff) {
-                $cookieAff = $this->affConvert($cookieAff);
-                $data['inviter_id'] = $cookieAff && User::find($cookieAff) ? $cookieAff : null;
-            } elseif ($aff) { // 如果cookie里没有aff,就再检查一下请求的url里有没有aff,因为有些人的浏览器会禁用了cookie,比如chrome开了隐私模式
-                $aff = $this->affConvert($aff);
-                $data['inviter_id'] = $aff && User::find($aff) ? $aff : null;
-            }
-        }
-
-        return $data;
-    }
-
-    private function affConvert($aff)
-    {
-        if (is_numeric($aff)) {
-            return $aff;
-        }
-
-        $decode = (new Hashids(sysConfig('aff_salt'), 8))->decode($aff);
-        if ($decode) {
-            return $decode[0];
-        }
-
-        return false;
-    }
-
-    // 生成申请的请求地址
-    private function addVerifyUrl($uid, $email)
-    {
-        $token = md5(sysConfig('website_name').$email.microtime());
-        $verify = new Verify();
-        $verify->user_id = $uid;
-        $verify->token = $token;
-        $verify->save();
-
-        return $token;
-    }
-
-    // 重设密码页
     public function resetPassword(Request $request)
-    {
+    { // 重设密码页
         if ($request->isMethod('POST')) {
             // 校验请求
             $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|exists:user,username']);
@@ -436,9 +290,8 @@ class AuthController extends Controller
         return view('auth.resetPassword');
     }
 
-    // 重设密码
     public function reset(Request $request, $token)
-    {
+    { // 重设密码
         if (! $token) {
             return Redirect::route('login');
         }
@@ -498,9 +351,8 @@ class AuthController extends Controller
         return view('auth.reset', ['verify' => Verify::type(1)->whereToken($token)->first()]); // 重新获取一遍verify
     }
 
-    // 激活账号页
     public function activeUser(Request $request)
-    {
+    { // 激活账号页
         if ($request->isMethod('POST')) {
             $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|exists:user,username']);
 
@@ -550,9 +402,8 @@ class AuthController extends Controller
         return view('auth.activeUser');
     }
 
-    // 激活账号
     public function active($token)
-    {
+    { // 激活账号
         if (! $token) {
             return Redirect::route('login');
         }
@@ -607,9 +458,8 @@ class AuthController extends Controller
         return view('auth.active');
     }
 
-    // 发送注册验证码
     public function sendCode(Request $request)
-    {
+    { // 发送注册验证码
         $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username']);
 
         if ($validator->fails()) {
@@ -647,17 +497,149 @@ class AuthController extends Controller
         return Response::json(['status' => 'success', 'message' => trans('auth.captcha.sent')]);
     }
 
-    // 公开的邀请码列表
     public function free()
-    {
+    { // 公开的邀请码列表
         return view('auth.free', ['inviteList' => Invite::whereInviterId(null)->whereStatus(0)->paginate()]);
     }
 
-    // 切换语言
     public function switchLang(string $locale): RedirectResponse
-    {
+    { // 切换语言
         Session::put('locale', $locale);
 
         return Redirect::back();
     }
+
+    private function check_captcha(Request $request)
+    { // 校验验证码
+        switch (sysConfig('is_captcha')) {
+            case 1: // 默认图形验证码
+                if (! Captcha::check($request->input('captcha'))) {
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
+                }
+                break;
+            case 2: // Geetest
+                $validator = Validator::make($request->all(), ['geetest_challenge' => 'required|geetest']);
+
+                if ($validator->fails()) {
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
+                }
+                break;
+            case 3: // Google reCAPTCHA
+                $validator = Validator::make($request->all(), ['g-recaptcha-response' => 'required|NoCaptcha']);
+
+                if ($validator->fails()) {
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
+                }
+                break;
+            case 4: // hCaptcha
+                $validator = Validator::make($request->all(), ['h-captcha-response' => 'required|HCaptcha']);
+
+                if ($validator->fails()) {
+                    return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
+                }
+                break;
+            default: // 不启用验证码
+                break;
+        }
+
+        return false;
+    }
+
+    private function emailChecker($email, $returnType = 0)
+    { // 邮箱检查
+        $emailFilterList = EmailFilter::whereType(sysConfig('is_email_filtering'))->pluck('words')->toArray();
+        $emailSuffix = explode('@', $email); // 提取邮箱后缀
+
+        if ($emailSuffix) {
+            switch (sysConfig('is_email_filtering')) {
+                case 1: // 黑名单
+                    if (in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
+                        if ($returnType) {
+                            return Redirect::back()->withErrors(trans('auth.email.error.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.error.invalid'));
+                        }
+
+                        return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
+                    }
+                    break;
+                default:
+                    if ($returnType) {
+                        return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
+                    }
+
+                    return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * 获取AFF.
+     *
+     * @param  string|null  $code  邀请码
+     * @param  int|null  $aff  URL中的aff参数
+     * @return array
+     */
+    private function getAff($code = null, $aff = null): array
+    {
+        $data = ['inviter_id' => null, 'code_id' => 0]; // 邀请人ID 与 邀请码ID
+
+        // 有邀请码先用邀请码,用谁的邀请码就给谁返利
+        if ($code) {
+            $inviteCode = Invite::whereCode($code)->whereStatus(0)->first();
+            if ($inviteCode) {
+                $data['inviter_id'] = $inviteCode->inviter_id;
+                $data['code_id'] = $inviteCode->id;
+            }
+        }
+
+        // 没有用邀请码或者邀请码是管理员生成的,则检查cookie或者url链接
+        if (! $data['inviter_id']) {
+            // 检查一下cookie里有没有aff
+            $cookieAff = \request()->cookie('register_aff');
+            if ($cookieAff) {
+                $cookieAff = $this->affConvert($cookieAff);
+                $data['inviter_id'] = $cookieAff && User::find($cookieAff) ? $cookieAff : null;
+            } elseif ($aff) { // 如果cookie里没有aff,就再检查一下请求的url里有没有aff,因为有些人的浏览器会禁用了cookie,比如chrome开了隐私模式
+                $aff = $this->affConvert($aff);
+                $data['inviter_id'] = $aff && User::find($aff) ? $aff : null;
+            }
+        }
+
+        return $data;
+    }
+
+    private function affConvert($aff)
+    {
+        if (is_numeric($aff)) {
+            return $aff;
+        }
+
+        $decode = (new Hashids(sysConfig('aff_salt'), 8))->decode($aff);
+        if ($decode) {
+            return $decode[0];
+        }
+
+        return false;
+    }
+
+    private function addVerifyUrl($uid, $email)
+    { // 生成申请的请求地址
+        $token = md5(sysConfig('website_name').$email.microtime());
+        $verify = new Verify();
+        $verify->user_id = $uid;
+        $verify->token = $token;
+        $verify->save();
+
+        return $token;
+    }
 }

+ 4 - 3
app/Http/Controllers/UserController.php

@@ -185,7 +185,7 @@ class UserController extends Controller
             if ($request->has(['nickname', 'wechat', 'qq'])) {
                 $data = $request->only(['nickname', 'wechat', 'qq']);
                 if (empty($data['nickname'])) {
-                    return Redirect::back()->withErrors(trans('validation.required', ['attribute' => trans('validation.attributes.nickname')]));
+                    return Redirect::back()->withErrors(trans('validation.required', ['attribute' => trans('model.user.nickname')]));
                 }
 
                 if (! $user->update($data)) {
@@ -219,6 +219,7 @@ class UserController extends Controller
         }
         foreach ($goodsList as $goods) {
             $goods->node_count = $nodes->where('level', '<=', $goods->level)->count();
+            $goods->node_countries = $nodes->where('level', '<=', $goods->level)->pluck('country_code')->unique();
         }
 
         return view('user.services', [
@@ -421,7 +422,7 @@ class UserController extends Controller
             'value' => $ret->type === 2 ? $ret->value : Helpers::getPriceTag($ret->value),
         ];
 
-        return Response::json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('user.coupon.attribute')])]);
+        return Response::json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('model.coupon.attribute')])]);
     }
 
     // 购买服务
@@ -491,7 +492,7 @@ class UserController extends Controller
     public function switchToAdmin(): JsonResponse
     { // 转换成管理员的身份
         if (! Session::has('admin')) {
-            return Response::json(['status' => 'fail', 'message' => trans('errors.unauthorized')]);
+            return Response::json(['status' => 'fail', 'message' => trans('http-statuses.401')]);
         }
 
         // 管理员信息重新写入user

+ 3 - 4
app/Notifications/AccountActivation.php

@@ -24,10 +24,9 @@ class AccountActivation extends Notification
 
     public function toMail($notifiable)
     {
-        return (new MailMessage)
-            ->subject(__('Verify Email Address'))
-            ->line(__('Please click the button below to verify your email address.'))
+        return (new MailMessage)->subject(__('Verify Email Address'))->line(__('Please click the button below to verify your email address.'))
             ->action(__('Verify Your Email Address'), $this->url)
-            ->line(__('If you did not request a password reset, please ignore this email.'));
+            ->line(__("If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:", ['actionText' => $this->url]))
+            ->line(__('If you did not create an account, no further action is required.'));
     }
 }

+ 1 - 0
app/Notifications/PasswordReset.php

@@ -28,6 +28,7 @@ class PasswordReset extends Notification
             ->subject(__('Reset Password Notification'))
             ->line(__('Please click on the button below to reset your password.'))
             ->action(__('Reset Password'), $this->url)
+            ->line(__("If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:", ['actionText' => $this->url]))
             ->line(__('You are receiving this email because we received a password reset request for your account.'))
             ->line(__('If you did not request a password reset, no further action is required.'));
     }

+ 1 - 1
app/Services/ArticleService.php

@@ -48,7 +48,7 @@ class ArticleService extends BaseService
                 $accessArea = $this->getInBetween($body, '<!--access_mode_1 start-->', '<!--access_mode_1 end-->');
                 if ($accessArea) {
                     $body = strtr($body,
-                        [$accessArea => '<div class="user-no-access"><i class="icon wb-lock" aria-hidden="true"></i>'.__('You must have a valid subscription to view content in this area!').'</div>']);
+                        [$accessArea => '<div class="user-no-access"><i class="icon wb-lock" aria-hidden="true"></i>'.__('You must have a valid subscription to view the content in this area!').'</div>']);
                 }
             }
         }

+ 1 - 1
app/Services/CouponService.php

@@ -124,7 +124,7 @@ class CouponService
         if ($coupon && $coupon->status === 0) {
             try {
                 Helpers::addUserCreditLog($this->user->id, null, $this->user->credit, $this->user->credit + $coupon->value, $coupon->value,
-                    trans('user.recharge').' - ['.trans('user.coupon.recharge').':'.$coupon->sn.']'); // 写入用户余额变动日志
+                    trans('user.recharge').' - ['.trans('admin.coupon.type.charge').':'.$coupon->sn.']'); // 写入用户余额变动日志
                 $this->user->updateCredit($coupon->value); // 余额充值
                 $coupon->used(); // 更改卡券状态
                 Helpers::addCouponLog(trans('user.recharge_credit'), $coupon->id); // 写入卡券使用日志

+ 2 - 2
app/helpers.php

@@ -65,11 +65,11 @@ if (! function_exists('seconds2time')) {
         $hour = floor(($seconds % Day) / Hour);
         $minute = floor((($seconds % Day) % Hour) / Minute);
         if ($day > 0) {
-            return $day.trans_choice('validation.attributes.day', 1).$hour.trans_choice('validation.attributes.hour', 1).$minute.trans('validation.attributes.minute');
+            return $day.trans_choice('common.days.attribute', 1).$hour.trans_choice('common.hour', 1).$minute.trans('validation.attributes.minute');
         }
 
         if ($hour != 0) {
-            return $hour.trans_choice('validation.attributes.hour', 1).$minute.trans('validation.attributes.minute');
+            return $hour.trans_choice('common.hour', 1).$minute.trans('validation.attributes.minute');
         }
 
         return $minute.trans('validation.attributes.minute');

+ 1 - 0
composer.json

@@ -51,6 +51,7 @@
     "barryvdh/laravel-ide-helper": "^2.8",
     "facade/ignition": "^2.0",
     "fakerphp/faker": "^1.9.1",
+    "laravel-lang/common": "^1.0",
     "laravel/telescope": "^3.5",
     "mockery/mockery": "^1.3.1",
     "nunomaduro/collision": "^4.3",

Dosya farkı çok büyük olduğundan ihmal edildi
+ 188 - 178
composer.lock


+ 54 - 0
resources/lang/en.json

@@ -0,0 +1,54 @@
+{
+    "A fresh verification link has been sent to your email address.": "A fresh verification link has been sent to your email address.",
+    "All rights reserved.": "All rights reserved.",
+    "Before proceeding, please check your email for a verification link.": "Before proceeding, please check your email for a verification link.",
+    "click here to request another": "click here to request another",
+    "Confirm Password": "Confirm Password",
+    "E-Mail Address": "E-Mail Address",
+    "Forbidden": "Forbidden",
+    "Forgot Your Password?": "Forgot Your Password?",
+    "Go Home": "Go Home",
+    "Go to page :page": "Go to page :page",
+    "Hello!": "Hello!",
+    "If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.",
+    "If you did not receive the email": "If you did not receive the email",
+    "If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.",
+    "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:",
+    "Login": "Login",
+    "Logout": "Logout",
+    "Name": "Name",
+    "Not Found": "Not Found",
+    "of": "of",
+    "Oh no": "Oh no",
+    "Page Expired": "Page Expired",
+    "Pagination Navigation": "Pagination Navigation",
+    "Password": "Password",
+    "Please click the button below to verify your email address.": "Please click the button below to verify your email address.",
+    "Regards": "Regards",
+    "Register": "Register",
+    "Remember Me": "Remember Me",
+    "Reset Password": "Reset Password",
+    "Reset Password Notification": "Reset Password Notification",
+    "results": "results",
+    "Send Password Reset Link": "Send Password Reset Link",
+    "Server Error": "Server Error",
+    "Service Unavailable": "Service Unavailable",
+    "Showing": "Showing",
+    "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.",
+    "The :attribute must contain at least one letter.": "The :attribute must contain at least one letter.",
+    "The :attribute must contain at least one number.": "The :attribute must contain at least one number.",
+    "The :attribute must contain at least one symbol.": "The :attribute must contain at least one symbol.",
+    "The :attribute must contain at least one uppercase and one lowercase letter.": "The :attribute must contain at least one uppercase and one lowercase letter.",
+    "The given :attribute has appeared in a data leak. Please choose a different :attribute.": "The given :attribute has appeared in a data leak. Please choose a different :attribute.",
+    "This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.",
+    "to": "to",
+    "Toggle navigation": "Toggle navigation",
+    "Too Many Requests": "Too Many Requests",
+    "Unauthorized": "Unauthorized",
+    "Verify Email Address": "Verify Email Address",
+    "Verify Your Email Address": "Verify Your Email Address",
+    "Whoops!": "Whoops!",
+    "You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.",
+    "You have not responded this ticket in :num hours, System has closed your ticket.": "You have not responded this ticket in :num hours, System has closed your ticket.",
+    "You must have a valid subscription to view the content in this area!": "You must have a valid subscription to view the content in this area!"
+}

+ 21 - 21
resources/lang/en/admin.php

@@ -122,7 +122,7 @@ return [
         'reset_traffic'   => 'Reset Data',
         'user_view'       => 'Switch to User Profile',
         'connection_test' => 'Network test',
-        'counts'          => 'out of <code>:num</code> accounts',
+        'counts'          => 'Total of <code>:num</code> accounts',
         'reset_confirm'   => [0 => 'Do you want to reset [', 1 => ']\'s data?'],
         'info'            => [
             'account'              => 'Account Information',
@@ -138,7 +138,7 @@ return [
         'group'           => [
             'title'  => 'User Group Control<small>(same node can be assigned to more than one group, One user can only belong to one group; For visible/available nodes: filter by level first, then group)</small>',
             'name'   => 'Group Name',
-            'counts' => 'Total <code>:num</code> groups',
+            'counts' => 'Total of <code>:num</code> groups',
         ],
     ],
     'zero_unlimited_hint' => 'Unset/0, as unlimited',
@@ -147,7 +147,7 @@ return [
         'refresh_geo'     => 'Refresh Geography',
         'ping'            => 'Detect Delay',
         'connection_test' => 'Connectivity Test',
-        'counts'          => 'Total <code>:num </code> nodes',
+        'counts'          => 'Total of <code>:num</code> nodes',
         'reload_all'      => 'Reload All Backend',
         'refresh_geo_all' => 'Refresh All Nodes\' Geographies',
         'reload_confirm'  => 'Do you want to reload the node?',
@@ -216,12 +216,12 @@ return [
                 'trojan_hint'    => 'Please fill in the node\'s<a href=":url" target="_blank">domain name</a> and resolve IP to this the domain',
             ],
             'reset_auth'     => 'Reset Key',
-            'counts'         => 'Total <code>:num</code> Authorizations',
+            'counts'         => 'Total of <code>:num</code> authorizations',
             'generating_all' => 'Do you want to generate authorization for all nodes?',
         ],
         'cert'            => [
             'title'           => 'Domain Certificates <small>Spoofing Domain for V2Ray Nodes</small>',
-            'counts'          => 'Total  <code>:num</code> domain certificates',
+            'counts'          => 'Total of <code>:num</code> domain certificates',
             'key_placeholder' => 'The KEY value of the domain certificate. Allowed to be empty, VNET-V2Ray backend support auto-signing certificate',
             'pem_placeholder' => 'The PEM value of the domain certificate. Allowed to be empty, VNET-V2Ray backend support auto-signing certificate',
         ],
@@ -229,7 +229,7 @@ return [
     'hint'                => 'Hint',
     'oauth'               => [
         'title'  => 'User OAuth',
-        'counts' => 'Total <code>:num</code> open authorizations',
+        'counts' => 'Total of <code>:num</code> open authorizations',
     ],
     'select_all'          => 'Select All',
     'clear'               => 'Clear',
@@ -261,7 +261,7 @@ return [
     ],
     'ticket'              => [
         'title'         => 'Tickets',
-        'counts'        => 'Total <code>:num</code> tickets',
+        'counts'        => 'Total of <code>:num</code> tickets',
         'send_to'       => 'Please fill in the target user information',
         'user_info'     => 'User Information',
         'inviter_info'  => 'Inviter Information',
@@ -270,7 +270,7 @@ return [
     ],
     'logs'                => [
         'subscribe'              => 'Subscriptions',
-        'counts'                 => 'Total <code>:num</code> records',
+        'counts'                 => 'Total of <code>:num</code> records',
         'rule'                   => [
             'clear_all'     => 'Clear all records',
             'title'         => 'Trigger record',
@@ -329,7 +329,7 @@ return [
             'no'  => 'Inactive',
         ],
         'sell_and_used' => 'In Use/Sales',
-        'counts'        => 'Total <code>:num</code> products',
+        'counts'        => 'Total of <code>:num</code> products',
     ],
     'sort_asc'            => 'The larger the sort value, the higher the priority',
     'yes'                 => 'Yes',
@@ -341,7 +341,7 @@ return [
             'ip'       => 'IP',
             'protocol' => 'Protocol',
         ],
-        'counts' => 'Total <code>:num</code> audit rules',
+        'counts' => 'Total of <code>:num</code> audit rules',
         'title'  => 'Rules',
         'group'  => [
             'type'   => [
@@ -349,7 +349,7 @@ return [
                 'on'  => 'Allow',
             ],
             'title'  => 'Audit Group',
-            'counts' => 'Total <code>:num</code> audit groups',
+            'counts' => 'Total of <code>:num</code> audit groups',
         ],
     ],
     'role'                => [
@@ -357,7 +357,7 @@ return [
         'description_hint' => 'Displays name, ex: Administrator',
         'title'            => 'Permission Roles',
         'permissions_all'  => 'All Permissions',
-        'counts'           => 'Total <code>:num</code> permission roles',
+        'counts'           => 'Total of <code>:num</code> permission roles',
     ],
     'report'              => [
         'monthly_accounting'  => 'Monthly Income',
@@ -375,13 +375,13 @@ return [
         'title'            => 'Permissions',
         'description_hint' => 'Description of permission, ex: [X system] Edit A',
         'name_hint'        => 'Fill in the route, ex: admin.permission.create,update',
-        'counts'           => 'Total <code>:num</code> permissions',
+        'counts'           => 'Total of <code>:num</code> permissions',
     ],
     'marketing'           => [
         'email'         => [
             'title'      => 'Marketing Emails',
             'group_send' => 'Send Group Email',
-            'counts'     => 'Total <code>:num</code> emails',
+            'counts'     => 'Total of <code>:num</code> emails',
         ],
         'send_status'   => 'Delivery Status',
         'send_time'     => 'Sending time',
@@ -389,7 +389,7 @@ return [
         'push'          => [
             'title'  => 'Marketing Push Messages',
             'send'   => 'Push Marketing Message',
-            'counts' => 'Total <code>:num</code> push messages',
+            'counts' => 'Total of <code>:num</code> push messages',
         ],
     ],
     'creating'            => 'Adding...',
@@ -401,14 +401,14 @@ return [
         'category_hint' => 'Same category will be grouped under the same folder',
         'logo_hint'     => 'Recommended size: 100x75',
         'title'         => 'Articles',
-        'counts'        => 'Total <code>:num</code> articles',
+        'counts'        => 'Total of <code>:num</code> articles',
     ],
     'coupon'              => [
         'title'                   => 'Coupons',
         'name_hint'               => 'For user-end display',
         'sn_hint'                 => 'The code to use the coupon, leave it blank will generate 8-digit random code by default',
         'type'                    => [
-            'voucher'  => 'Reduction Coupon',
+            'voucher'  => 'Voucher',
             'discount' => 'Discount Coupon',
             'charge'   => 'Recharge Coupon',
         ],
@@ -434,7 +434,7 @@ return [
         'created_days_hint'       => '<code>:day</code> days of account creation',
         'limit_hint'              => 'The rules of this restriction are <strong>and</strong> relation, please use them properly',
         'info_title'              => 'Coupon Information',
-        'counts'                  => 'Total <code>:num</code> coupons',
+        'counts'                  => 'Total of <code>:num</code> coupons',
         'discount'                => 'Discount',
         'export_title'            => 'Coupon Export',
         'single_use'              => 'One-time',
@@ -444,9 +444,9 @@ return [
     'system_generate'     => 'System Generated',
     'aff'                 => [
         'rebate_title'      => 'Referral Rebate History',
-        'counts'            => 'Total <code>:num</code> applications',
+        'counts'            => 'Total of <code>:num</code> applications',
         'title'             => 'Withdrawal Requests',
-        'apply_counts'      => 'Total <code>:num</code> requests',
+        'apply_counts'      => 'Total of <code>:num</code> requests',
         'referral'          => 'Promotional Rebates',
         'commission_title'  => 'Withdrawal Request Details',
         'commission_counts' => 'This application involves <code>:num</code> orders',
@@ -794,7 +794,7 @@ return [
             'loop' => 'Always Rebate',
         ],
     ],
-    'set_to'              => 'Set to :attribute',
+    'set_to'              => 'Set as :attribute',
     'minute'              => ' minutes',
     'query'               => 'Query',
     'optional'            => 'Optional',

+ 24 - 11
resources/lang/en/auth.php

@@ -9,19 +9,25 @@ return [
             'disable'   => 'Account activation has been disabled, you can sign in directly!',
             'throttle'  => 'You have triggered the activation request restriction, please do not operate too frequent! If you have any questions, please contact: email',
         ],
+        'promotion' => 'Account not yet activated, please [:action] first!',
         'sent'      => 'Activation Email has sent to your mailbox, please check your mailbox (Email may be in the Trash)',
-        'promotion' => ['0' => 'Account has not been activated, Please', '1' => 'before sign in!'],
     ],
     'aup'             => 'Acceptable Use Policy',
     'captcha'         => [
         'attribute' => 'Captcha',
-        'error'     => ['failed' => 'Captcha verification failed, please try again', 'timeout' => 'Invalid verification code! It maybe expired, please refresh and try again.'],
+        'error'     => [
+            'failed'  => 'Captcha verification failed, please try again',
+            'timeout' => 'Invalid verification code! It maybe expired, please refresh and try again.',
+        ],
         'required'  => 'Please complete the Captcha operation!',
         'sent'      => 'Email has been sent! Please check your mailbox! (Email may be in the Trash)',
     ],
     '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 supported list. Please use another 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 supported list. Please use another email
+',
+        ],
     ],
     'error'           => [
         'account_baned'  => 'Your account has been banned!',
@@ -31,9 +37,12 @@ return [
         'repeat_request' => 'Please refresh the page and try again',
         'url_timeout'    => 'The link has expired, please try again',
     ],
+    'failed'          => 'These credentials do not match our records.',
     'invite'          => [
         'attribute'    => 'Invitation code',
-        'error'        => ['unavailable' => 'Invitation code is invalid!'],
+        'error'        => [
+            'unavailable' => 'Invitation code is invalid!',
+        ],
         'get'          => 'Click to get the invitation code',
         'not_required' => 'No invitation code is required, you can sign up directly!',
     ],
@@ -42,15 +51,15 @@ return [
     'maintenance'     => 'Maintenance',
     'maintenance_tip' => 'Maintenance in progress',
     'oauth'           => [
-        'bind_success'    => 'Binding successfully',
         'bind_failed'     => 'Binding failed',
+        'bind_success'    => 'Binding successfully',
         'login_failed'    => 'Third-party login failed!',
+        'rebind_success'  => 'Re-binding successfully',
         'register'        => 'Quick Registration',
-        'registered'      => 'Already registered, please sign in directly',
         'register_failed' => 'Registration failed',
-        'rebind_success'  => 'Re-binding successfully',
-        'unbind_success'  => 'Unbinding successfully',
+        'registered'      => 'Already registered, please sign in directly',
         'unbind_failed'   => 'Unbinding failed',
+        'unbind_success'  => 'Unbinding successfully',
     ],
     'optional'        => 'Optional',
     'password'        => [
@@ -74,12 +83,16 @@ return [
     'register'        => [
         'attribute' => 'Sign up',
         'code'      => 'Registration Code',
-        'error'     => ['disable' => 'Sorry, we have temporarily stopped accepting new users', 'throttle' => 'Anti-bots is active! Please do not send register forms too frequently!'],
-        'promotion' => 'Still no account? Please go to ',
+        'error'     => [
+            'disable'  => 'Sorry, we have temporarily stopped accepting new users',
+            'throttle' => 'Anti-bots is active! Please do not send register forms too frequently!',
+        ],
         'failed'    => 'Registration failed, please try later',
+        'promotion' => 'Still no account? Please go to ',
         'success'   => 'Registration successfully',
     ],
     'remember_me'     => 'Remember me',
     'request'         => 'Request',
+    'throttle'        => 'Too many login attempts. Please try again in :seconds seconds.',
     'tos'             => 'Terms of Service',
 ];

+ 12 - 10
resources/lang/en/common.php

@@ -1,6 +1,7 @@
 <?php
 
 return [
+    'hour'            => '{1} Hour | {2} Clock',
     'account'         => 'Account',
     'available_date'  => 'Available Until/Period',
     'created_at'      => 'Created At',
@@ -58,16 +59,17 @@ return [
         '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',
+        'attribute' => '{1} Day | Day {2}',
+        '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',

+ 0 - 4
resources/lang/en/errors.php

@@ -7,17 +7,13 @@ return [
         'china'   => 'Chinese IP or Proxy Access Forbidden',
         'oversea' => 'Oversea IP or Proxy Access Forbidden',
     ],
-    'http'         => 'HTTP Method Not Allowed',
     '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',
     'safe_code'    => 'Please enter the security code',
-    'system'       => 'System Error',
     'title'        => '⚠️Error Detected',
-    'unauthorized' => 'Unauthorized Access',
     'unsafe_enter' => 'Non-Secure Entrance',
     'visit'        => 'Please visit',
     'whoops'       => 'Whoops!',

+ 76 - 0
resources/lang/en/http-statuses.php

@@ -0,0 +1,76 @@
+<?php
+
+return [
+    '0'            => 'Unknown Error',
+    '100'          => 'Continue',
+    '101'          => 'Switching Protocols',
+    '102'          => 'Processing',
+    '200'          => 'OK',
+    '201'          => 'Created',
+    '202'          => 'Accepted',
+    '203'          => 'Non-Authoritative Information',
+    '204'          => 'No Content',
+    '205'          => 'Reset Content',
+    '206'          => 'Partial Content',
+    '207'          => 'Multi-Status',
+    '208'          => 'Already Reported',
+    '226'          => 'IM Used',
+    '300'          => 'Multiple Choices',
+    '301'          => 'Moved Permanently',
+    '302'          => 'Found',
+    '303'          => 'See Other',
+    '304'          => 'Not Modified',
+    '305'          => 'Use Proxy',
+    '307'          => 'Temporary Redirect',
+    '308'          => 'Permanent Redirect',
+    '400'          => 'Bad Request',
+    '401'          => 'Unauthorized',
+    '402'          => 'Payment Required',
+    '403'          => 'Forbidden',
+    '404'          => 'Page Not Found',
+    '405'          => 'Method Not Allowed',
+    '406'          => 'Not Acceptable',
+    '407'          => 'Proxy Authentication Required',
+    '408'          => 'Request Timeout',
+    '409'          => 'Conflict',
+    '410'          => 'Gone',
+    '411'          => 'Length Required',
+    '412'          => 'Precondition Failed',
+    '413'          => 'Payload Too Large',
+    '414'          => 'URI Too Long',
+    '415'          => 'Unsupported Media Type',
+    '416'          => 'Range Not Satisfiable',
+    '417'          => 'Expectation Failed',
+    '418'          => 'I\'m a teapot',
+    '419'          => 'Session Has Expired',
+    '421'          => 'Misdirected Request',
+    '422'          => 'Unprocessable Entity',
+    '423'          => 'Locked',
+    '424'          => 'Failed Dependency',
+    '426'          => 'Upgrade Required',
+    '428'          => 'Precondition Required',
+    '429'          => 'Too Many Requests',
+    '431'          => 'Request Header Fields Too Large',
+    '449'          => 'Retry With',
+    '451'          => 'Unavailable For Legal Reasons',
+    '500'          => 'Internal Server Error',
+    '501'          => 'Not Implemented',
+    '502'          => 'Bad Gateway',
+    '503'          => 'Maintenance Mode',
+    '504'          => 'Gateway Timeout',
+    '505'          => 'HTTP Version Not Supported',
+    '506'          => 'Variant Also Negotiates',
+    '507'          => 'Insufficient Storage',
+    '508'          => 'Loop Detected',
+    '509'          => 'Bandwidth Limit Exceeded',
+    '510'          => 'Not Extended',
+    '511'          => 'Network Authentication Required',
+    '520'          => 'Unknown Error',
+    '521'          => 'Web Server is Down',
+    '522'          => 'Connection Timed Out',
+    '523'          => 'Origin Is Unreachable',
+    '524'          => 'A Timeout Occurred',
+    '525'          => 'SSL Handshake Failed',
+    '526'          => 'Invalid SSL Certificate',
+    'unknownError' => 'Unknown Error',
+];

+ 1 - 1
resources/lang/en/model.php

@@ -5,7 +5,7 @@ return [
         'id'             => 'User ID',
         'attribute'      => 'User',
         'nickname'       => 'Nickname',
-        'username'       => 'Account',
+        'username'       => 'Username',
         'password'       => 'Password',
         'credit'         => 'Balance',
         'invite_num'     => 'Available Invitation Code',

+ 1 - 1
resources/lang/en/pagination.php

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

+ 4 - 8
resources/lang/en/user.php

@@ -36,7 +36,6 @@ return [
     ],
     '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',
@@ -66,11 +65,8 @@ return [
         'unbind'     => 'Unbind',
     ],
     'coupon'              => [
-        'attribute' => 'Coupon',
-        'voucher'   => 'Voucher',
-        'recharge'  => 'Gift Card',
-        'discount'  => 'Discount',
-        'error'     => [
+        'discount' => 'Discount',
+        'error'    => [
             'unknown'  => 'Unknown Coupon',
             'used'     => 'Coupon has been used',
             'expired'  => 'Expired',
@@ -94,8 +90,8 @@ return [
         'generate_failed' => 'Failed to generate',
     ],
     'reset_data'          => [
-        ''          => 'Reset Data',
-        'required'  => 'Required',
+        'action'    => 'Reset Data',
+        'cost'      => 'Need <code>:amount</code>',
         'cost_tips' => 'This following action will cost :amount!',
         'lack'      => 'Insufficient balance. Please recharge!',
         'logs'      => 'User purchase reset data',

+ 101 - 40
resources/lang/en/validation.php

@@ -2,6 +2,7 @@
 
 return [
     'accepted'             => 'The :attribute field must be accepted.',
+    'accepted_if'          => 'The :attribute must be accepted when :other is :value.',
     'active_url'           => 'The :attribute field must be a valid URL.',
     'after'                => 'The :attribute field must be a date after :date.',
     'after_or_equal'       => 'The :attribute field must be a date after or equal to :date.',
@@ -12,16 +13,19 @@ return [
     'before'               => 'The :attribute field must be a date before :date.',
     'before_or_equal'      => 'The :attribute field must be a date before or equal to :date.',
     'between'              => [
-        'numeric' => 'The :attribute field must be between :min and :max.',
+        'array'   => 'The :attribute field must have between :min and :max items.',
         'file'    => 'The :attribute field must be between :min and :max kilobytes.',
+        'numeric' => 'The :attribute field must be between :min and :max.',
         'string'  => 'The :attribute field must be between :min and :max characters.',
-        'array'   => 'The :attribute field must have between :min and :max items.',
     ],
     'boolean'              => 'The :attribute field must be true or false.',
     'confirmed'            => 'The :attribute field confirmation does not match.',
+    'current_password'     => 'The password is incorrect.',
     'date'                 => 'The :attribute field must be a valid date.',
     'date_equals'          => 'The :attribute field must be a date equal to :date.',
     'date_format'          => 'The :attribute field must match the format :format.',
+    'declined'             => 'The :attribute must be declined.',
+    'declined_if'          => 'The :attribute must be declined when :other is :value.',
     'different'            => 'The :attribute field and :other must be different.',
     'digits'               => 'The :attribute field must be :digits digits.',
     'digits_between'       => 'The :attribute field must be between :min and :max digits.',
@@ -29,20 +33,21 @@ return [
     'distinct'             => 'The :attribute field has a duplicate value.',
     'email'                => 'The :attribute field must be a valid email address.',
     'ends_with'            => 'The :attribute field must end with one of the following: :values.',
+    'enum'                 => 'The selected :attribute is invalid.',
     'exists'               => 'The selected :attribute is invalid.',
     'file'                 => 'The :attribute field must be a file.',
     'filled'               => 'The :attribute field must have a value.',
     'gt'                   => [
-        'numeric' => 'The :attribute field must be greater than :value.',
+        'array'   => 'The :attribute field must have more than :value items.',
         'file'    => 'The :attribute field must be greater than :value kilobytes.',
+        'numeric' => 'The :attribute field must be greater than :value.',
         'string'  => 'The :attribute field must be greater than :value characters.',
-        'array'   => 'The :attribute field must have more than :value items.',
     ],
     'gte'                  => [
-        'numeric' => 'The :attribute field must be greater than or equal to :value.',
+        'array'   => 'The :attribute field must have :value items or more.',
         'file'    => 'The :attribute field must be greater than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute field must be greater than or equal to :value.',
         'string'  => 'The :attribute field must be greater than or equal to :value characters.',
-        'array'   => 'The :attribute field must have :value items or more.',
     ],
     'image'                => 'The :attribute field must be an image.',
     'in'                   => 'The selected :attribute is invalid.',
@@ -53,30 +58,31 @@ return [
     'ipv6'                 => 'The :attribute field must be a valid IPv6 address.',
     'json'                 => 'The :attribute field must be a valid JSON string.',
     'lt'                   => [
-        'numeric' => 'The :attribute field must be less than :value.',
+        'array'   => 'The :attribute field must have less than :value items.',
         'file'    => 'The :attribute field must be less than :value kilobytes.',
+        'numeric' => 'The :attribute field must be less than :value.',
         'string'  => 'The :attribute field must be less than :value characters.',
-        'array'   => 'The :attribute field must have less than :value items.',
     ],
     'lte'                  => [
-        'numeric' => 'The :attribute field must be less than or equal to :value.',
+        'array'   => 'The :attribute field must not have more than :value items.',
         'file'    => 'The :attribute field must be less than or equal to :value kilobytes.',
+        'numeric' => 'The :attribute field must be less than or equal to :value.',
         'string'  => 'The :attribute field must be less than or equal to :value characters.',
-        'array'   => 'The :attribute field must not have more than :value items.',
     ],
+    'mac_address'          => 'The :attribute must be a valid MAC address.',
     'max'                  => [
-        'numeric' => 'The :attribute field must not be greater than :max.',
+        'array'   => 'The :attribute field must not have more than :max items.',
         'file'    => 'The :attribute field must not be greater than :max kilobytes.',
+        'numeric' => 'The :attribute field must not be greater than :max.',
         'string'  => 'The :attribute field must not be greater than :max characters.',
-        'array'   => 'The :attribute field must not have more than :max items.',
     ],
     'mimes'                => 'The :attribute field must be a file of type: :values.',
     'mimetypes'            => 'The :attribute field must be a file of type: :values.',
     'min'                  => [
-        'numeric' => 'The :attribute field must be at least :min.',
+        'array'   => 'The :attribute field must have at least :min items.',
         'file'    => 'The :attribute field must be at least :min kilobytes.',
+        'numeric' => 'The :attribute field must be at least :min.',
         'string'  => 'The :attribute field must be at least :min characters.',
-        'array'   => 'The :attribute field must have at least :min items.',
     ],
     'multiple_of'          => 'The :attribute field must be a multiple of :value.',
     'not_in'               => 'The selected :attribute is invalid.',
@@ -84,8 +90,13 @@ return [
     'numeric'              => 'The :attribute field must be a number.',
     'password'             => 'The password is incorrect.',
     'present'              => 'The :attribute field must be present.',
+    'prohibited'           => 'The :attribute field is prohibited.',
+    'prohibited_if'        => 'The :attribute field is prohibited when :other is :value.',
+    'prohibited_unless'    => 'The :attribute field is prohibited unless :other is in :values.',
+    'prohibits'            => 'The :attribute field prohibits :other from being present.',
     'regex'                => 'The :attribute field format is invalid.',
     'required'             => 'The :attribute field is required.',
+    'required_array_keys'  => 'The :attribute field must contain entries for: :values.',
     'required_if'          => 'The :attribute field is required when :other is :value.',
     'required_unless'      => 'The :attribute field is required unless :other is in :values.',
     'required_with'        => 'The :attribute field is required when :values is present.',
@@ -94,10 +105,10 @@ return [
     'required_without_all' => 'The :attribute field is required when none of :values are present.',
     'same'                 => 'The :attribute field must match :other.',
     'size'                 => [
-        'numeric' => 'The :attribute field must be :size.',
+        'array'   => 'The :attribute field must contain :size items.',
         'file'    => 'The :attribute field must be :size kilobytes.',
+        'numeric' => 'The :attribute field must be :size.',
         'string'  => 'The :attribute field must be :size characters.',
-        'array'   => 'The :attribute field must contain :size items.',
     ],
     'starts_with'          => 'The :attribute field must start with one of the following: :values.',
     'string'               => 'The :attribute field must be a string.',
@@ -106,32 +117,82 @@ return [
     'uploaded'             => 'The :attribute failed to upload.',
     'url'                  => 'The :attribute field must be a valid URL.',
     'uuid'                 => 'The :attribute field must be a valid UUID.',
-
-    'custom' => [
+    'attributes'           => [
+        'address'                  => 'Address',
+        'age'                      => 'Age',
+        'amount'                   => 'Amount',
+        'area'                     => 'Area',
+        'available'                => 'Available',
+        'birthday'                 => 'Birthday',
+        'body'                     => 'Body',
+        'city'                     => 'City',
+        'content'                  => 'Content',
+        'country'                  => 'Country',
+        'created_at'               => 'Created At',
+        'creator'                  => 'Creator',
+        'current_password'         => 'Current Password',
+        'date'                     => 'Date',
+        'date_of_birth'            => 'Date Of Birth',
+        'day'                      => 'Day',
+        'deleted_at'               => 'Deleted At',
+        'description'              => 'Description',
+        'district'                 => 'District',
+        'duration'                 => 'Duration',
+        'email'                    => 'Email',
+        'excerpt'                  => 'Excerpt',
+        'filter'                   => 'Filter',
+        'first_name'               => 'First Name',
+        'gender'                   => 'Gender',
+        'group'                    => 'Group',
+        'hour'                     => 'Hour',
+        'image'                    => 'Image',
+        'last_name'                => 'Last Name',
+        'lesson'                   => 'Lesson',
+        'line_address_1'           => 'Line Address 1',
+        'line_address_2'           => 'Line Address 2',
+        'message'                  => 'Message',
+        'middle_name'              => 'Middle Name',
+        'minute'                   => 'Minute',
+        'mobile'                   => 'Mobile',
+        'month'                    => 'Month',
+        'name'                     => 'Name',
+        'national_code'            => 'National Code',
+        'number'                   => 'Number',
+        'password'                 => 'Password',
+        'password_confirmation'    => 'Password Confirmation',
+        'phone'                    => 'Phone',
+        'photo'                    => 'Photo',
+        'postal_code'              => 'Postal Code',
+        'price'                    => 'Price',
+        'province'                 => 'Province',
+        'recaptcha_response_field' => 'Recaptcha Response Field',
+        'remember'                 => 'Remember',
+        'restored_at'              => 'Restored At',
+        'result_text_under_image'  => 'Result Text Under Image',
+        'role'                     => 'Role',
+        'second'                   => 'Second',
+        'sex'                      => 'Sex',
+        'short_text'               => 'Short Text',
+        'size'                     => 'Size',
+        'state'                    => 'State',
+        'street'                   => 'Street',
+        'student'                  => 'Student',
+        'subject'                  => 'Subject',
+        'teacher'                  => 'Teacher',
+        'terms'                    => 'Terms',
+        'test_description'         => 'Test Description',
+        'test_locale'              => 'Test Locale',
+        'test_name'                => 'Test Name',
+        'text'                     => 'Text',
+        'time'                     => 'Date/Time',
+        'title'                    => 'Title',
+        'updated_at'               => 'Updated At',
+        'username'                 => 'Username',
+        'year'                     => 'Year',
+    ],
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => 'custom-message',
         ],
     ],
-
-    'attributes' => [
-        'name'                  => 'Name',
-        'nickname'              => 'Nickname',
-        'username'              => 'Username',
-        'email'                 => 'Email',
-        'password'              => 'Password',
-        'password_confirmation' => 'Password Confirmation',
-        'phone'                 => 'Phone',
-        'day'                   => '{1} Day | Day {2}',
-        'month'                 => 'Month',
-        'year'                  => 'Year',
-        'hour'                  => '{1} Hour | {2} Clock',
-        'minute'                => 'Minute',
-        'second'                => 'Second',
-        'title'                 => 'Title',
-        'content'               => 'Content',
-        'description'           => 'Description',
-        'excerpt'               => 'Excerpt',
-        'date'                  => 'Date',
-        'time'                  => 'Date/Time',
-    ],
 ];

+ 52 - 25
resources/lang/ja.json

@@ -1,27 +1,54 @@
 {
-  "All rights reserved.": "利用可能な全てだ",
-  "Hello!": "こんにちは:",
-  "If you did not request a password reset, please ignore this email.": "パスワードのリセットを申請しなかった場合は、このメールは無視してください。",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "「:actionText」ボタンのクリック時に問題がありました。下記のリンクをコピーしてください:",
-  "If your issue is not resolved, please create another ticket.": "問題が解決されない場合は、別のチケットを開くようにしてください。",
-  "Invoice Detail": "注文詳細",
-  "Daily Data Usage Report": "回線毎日のトラフィックレポート",
-  "Payment for #:sn has been received! Total amount: :amount.": "ご注文番号#:snnn,総額は :amountです。",
-  "Payment Received": "請求書の支払いが完了しました",
-  "Please click the button below to verify your email address.": "下のボタンをクリックしてメールアドレスを認証してください:",
-  "Please click on the button below to reset your password.": "下のボタンをクリックしてパスワードをリセットしてください:",
-  "Regards": "敬礼",
-  "Reset Password Notification": "パスワード通知をリセット",
-  "Reset Password": "パスワードをリセット",
-  "Send Password Reset Link": "パスワード再設定リンクの送信",
-  "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "ご登録ありがとうございます! メールアドレスを確認するため、あなたのメールボックスに送信リンクをクリックしてあなたのメールを送信してください。もしメールが届かない場合は再度メールを送信してください。",
-  "Too Many Attempts.": "試行回数が多すぎます",
-  "Too Many Requests": "リクエストが多すぎます",
-  "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.": "あなたのメールアドレスは確認されていません",
-  "You have not responded this ticket in :num hours, System has closed your ticket.": "超:num以上返信のチケットは報告されていません。自動的にチケットのプロセスを停止しました。",
-  "You must have a valid subscription to view the content in this area!": "この地域のコンテンツを表示するには、利用可能なプランが必要です。"
+    "A fresh verification link has been sent to your email address.": "新しい確認リンクがメールアドレスに送信されました。",
+    "All rights reserved.": "All rights reserved.",
+    "Before proceeding, please check your email for a verification link.": "先に進む前に、確認リンクのためにあなたの電子メールを確認してください。",
+    "click here to request another": "ここをクリックして別のものをリクエストしてください",
+    "Confirm Password": "パスワード(確認用)",
+    "E-Mail Address": "電子メールアドレス",
+    "Forbidden": "禁止されています",
+    "Forgot Your Password?": "パスワードを忘れた方はこちら",
+    "Go Home": "ホームへ",
+    "Go to page :page": ":pageページへ",
+    "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\"ボタンがクリックできない場合は以下のURLを直接入力してください。",
+    "Login": "ログイン",
+    "Logout": "ログアウト",
+    "Name": "氏名",
+    "Not Found": "見つかりません",
+    "of": "の",
+    "Oh no": "オーノー",
+    "Page Expired": "ページが無効です",
+    "Pagination Navigation": "ページネーション",
+    "Password": "パスワード",
+    "Please click the button below to verify your email address.": "メールアドレスを確認するには、以下のボタンをクリックしてください。",
+    "Regards": "よろしくお願いします",
+    "Register": "アカウント作成",
+    "Remember Me": "ログイン状態を保持する",
+    "Reset Password": "パスワード再設定",
+    "Reset Password Notification": "パスワード再設定のお知らせ",
+    "results": "結果",
+    "Send Password Reset Link": "パスワード再設定URLを送信",
+    "Server Error": "サーバーエラー",
+    "Service Unavailable": "サービスは利用できません",
+    "Showing": "示すこと",
+    "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "ご登録ありがとうございます! メールアドレスを確認するため、あなたのメールボックスに送信リンクをクリックしてあなたのメールを送信してください。もしメールが届かない場合は再度メールを送信してください。",
+    "The :attribute must contain at least one letter.": ":attributeは文字を1文字以上含めなければなりません。",
+    "The :attribute must contain at least one number.": ":attributeは数字を1文字以上含めなければなりません。",
+    "The :attribute must contain at least one symbol.": ":attributeは記号を1文字以上含めなければなりません。",
+    "The :attribute must contain at least one uppercase and one lowercase letter.": ":attributeは大文字と小文字をそれぞれ1文字以上含めなければなりません。",
+    "The given :attribute has appeared in a data leak. Please choose a different :attribute.": ":attributeはデータ漏洩の対象だった可能性があります。別の:attributeを選んでください。",
+    "This password reset link will expire in :count minutes.": "このパスワード再設定リンクの有効期限は:count分です。",
+    "to": "に",
+    "Toggle navigation": "ナビゲーションを切り替える",
+    "Too Many Requests": "リクエストが多すぎます",
+    "Unauthorized": "認証が必要です",
+    "Verify Email Address": "メールアドレスを確認してください",
+    "Verify Your Email Address": "メールアドレスの確認",
+    "Whoops!": "おっと!",
+    "You are receiving this email because we received a password reset request for your account.": "パスワード再設定のリクエストを受け付けました。",
+    "You have not responded this ticket in :num hours, System has closed your ticket.": "超:num以上返信のチケットは報告されていません。自動的にチケットのプロセスを停止しました。",
+    "You must have a valid subscription to view the content in this area!": "この地域のコンテンツを表示するには、利用可能なプランが必要です。"
 }

+ 23 - 10
resources/lang/ja/auth.php

@@ -9,18 +9,24 @@ return [
             'disable'   => 'アカウントのサブシステムを無効化しました。すぐにログインできます!',
             'throttle'  => '本サイトのアクティベーションにより、頻繁なアクセスを行います。問題がある場合は: Email にご連絡ください。',
         ],
+        'promotion' => 'アカウントがまだ有効化されていません。前に「:action」をメールしてください!',
         'sent'      => 'アクティベーションリンクがあなたのメール アドレスに送信されました。少々お待ち下さい。',
-        'promotion' => ['0' => 'アカウントがまだ有効にされていません。クリックしてください', '1' => '起動!'],
     ],
     'aup'             => '許容される条件',
     'captcha'         => [
         'attribute' => '認証コード',
-        'error'     => ['failed' => 'キャプチャ認証に失敗しました。もう一度入力してください。', 'timeout' => '認証コードが合っていない!期限切れではないようです。再読み込みしてからやり直してください。'],
+        'error'     => [
+            'failed'  => 'キャプチャ認証に失敗しました。もう一度入力してください。',
+            'timeout' => '認証コードが合っていない!期限切れではないようです。再読み込みしてからやり直してください。',
+        ],
         'required'  => '正しい認証コードが必要です',
         'sent'      => '確認コードをメールに送信しました。少々お待ち下さい。',
     ],
     'email'           => [
-        'error' => ['banned' => 'メールサービスの利用者をブロックしています。別のメールアドレスを使用してください。', 'invalid' => '当駅でサポートされるメールボックスのリスト内で使用する'],
+        'error' => [
+            'banned'  => 'メールサービスの利用者をブロックしています。別のメールアドレスを使用してください。',
+            'invalid' => '当駅でサポートされるメールボックスのリスト内で使用する',
+        ],
     ],
     'error'           => [
         'account_baned'  => 'あなたのアカウントはすでに禁止されています。',
@@ -30,9 +36,12 @@ return [
         'repeat_request' => '何度もリクエストを繰り返さないでください。後で再試行してください。',
         'url_timeout'    => 'リンクは無効になっています。再度実行してください',
     ],
+    'failed'          => '認証に失敗しました。',
     'invite'          => [
         'attribute'    => '招待コード',
-        'error'        => ['unavailable' => '招待コードは利用できません。再試行してください'],
+        'error'        => [
+            'unavailable' => '招待コードは利用できません。再試行してください',
+        ],
         'get'          => 'クリックして招待コードを獲得',
         'not_required' => '招待コードは必要ありません。直接サインアップ!',
     ],
@@ -41,15 +50,15 @@ return [
     'maintenance'     => 'メンテナンス',
     'maintenance_tip' => 'サイトのメンテナンス中です',
     'oauth'           => [
-        'bind_success'    => '正常にバインドされました。',
         'bind_failed'     => 'リンク失敗',
+        'bind_success'    => '正常にバインドされました。',
         'login_failed'    => 'サードパーティ のサインインに失敗しました!',
+        'rebind_success'  => '正常にバインドされました。',
         'register'        => 'クイック登録',
-        'registered'      => 'すでにご登録いただいていますので、すぐにログインしてください。',
         'register_failed' => '登録できませんでした',
-        'rebind_success'  => '正常にバインドされました。',
-        'unbind_success'  => '解除成功',
+        'registered'      => 'すでにご登録いただいていますので、すぐにログインしてください。',
         'unbind_failed'   => '失敗',
+        'unbind_success'  => '解除成功',
     ],
     'optional'        => 'オプション',
     'password'        => [
@@ -73,12 +82,16 @@ return [
     'register'        => [
         'attribute' => '収納',
         'code'      => '登録コード',
-        'error'     => ['disable' => '申し訳ありませんが、当駅があなたを閉鎖しています。', 'throttle' => 'フラッシュ設定機能が有効になっています。頻繁に更新さないでください'],
-        'promotion' => 'まだアカウントを持っていませんか?',
+        'error'     => [
+            'disable'  => '申し訳ありませんが、当駅があなたを閉鎖しています。',
+            'throttle' => 'フラッシュ設定機能が有効になっています。頻繁に更新さないでください',
+        ],
         'failed'    => '登録に失敗しました。後でもう一度試してください。',
+        'promotion' => 'まだアカウントを持っていませんか?',
         'success'   => '登録が完了しました',
     ],
     'remember_me'     => 'ログイン状態を保持する',
     'request'         => '取込',
+    'throttle'        => 'ログインの試行回数が多すぎます。:seconds 秒後にお試しください。',
     'tos'             => '使用条件',
 ];

+ 12 - 10
resources/lang/ja/common.php

@@ -1,6 +1,7 @@
 <?php
 
 return [
+    'hour'            => '{1} タイム|{2} ポイント',
     'account'         => 'アカウント',
     'available_date'  => '有効期限',
     'created_at'      => '作成日時',
@@ -58,16 +59,17 @@ return [
         'fullscreen' => 'フルスクリーン',
     ],
     'days'            => [
-        'sun'     => '日曜日',
-        'mon'     => '月曜日',
-        'tue'     => '火曜日',
-        'wed'     => '水曜日',
-        'thu'     => '木曜日',
-        'fri'     => '金曜日',
-        'sat'     => '土曜日',
-        'weekend' => '週末',
-        'work'    => '平日',
-        'next'    => '翌日配達',
+        'attribute' => '{1} 日|{2}',
+        'sun'       => '日曜日',
+        'mon'       => '月曜日',
+        'tue'       => '火曜日',
+        'wed'       => '水曜日',
+        'thu'       => '木曜日',
+        'fri'       => '金曜日',
+        'sat'       => '土曜日',
+        'weekend'   => '週末',
+        'work'      => '平日',
+        'next'      => '翌日配達',
     ],
     'qrcode'          => ':attribute は eQRにして下さい。',
     'deleted'         => '削除済み',

+ 0 - 4
resources/lang/ja/errors.php

@@ -7,17 +7,13 @@ return [
         'china'   => '中国IPを検出するか、プロキシを使用してアクセスを禁止します。',
         'oversea' => '海外IPまたはプロキシアクセスが検出されましたアクセス禁止',
     ],
-    'http'         => 'HTTPリクエストタイプが無効です',
     'log'          => 'ログ',
-    'missing_page' => 'ページが見つかりません',
     'refresh'      => '新しいブラシ',
     'refresh_page' => 'ページを更新してから次にアクセスしてください',
     'report'       => 'エラー❌誤報告がある:',
     'safe_enter'   => '安全なポータルへのアクセス',
     'safe_code'    => '在庫探索をしない',
-    'system'       => 'システムエラー',
     'title'        => '⚠️エラートリガー',
-    'unauthorized' => 'アクセスできません',
     'unsafe_enter' => '非安全なポータルへのアクセス',
     'visit'        => 'サポートはこちら:',
     'whoops'       => '痛い!',

+ 76 - 0
resources/lang/ja/http-statuses.php

@@ -0,0 +1,76 @@
+<?php
+
+return [
+    '0'            => 'Unknown Error',
+    '100'          => 'Continue',
+    '101'          => 'Switching Protocols',
+    '102'          => 'Processing',
+    '200'          => 'OK',
+    '201'          => 'Created',
+    '202'          => 'Accepted',
+    '203'          => 'Non-Authoritative Information',
+    '204'          => 'No Content',
+    '205'          => 'Reset Content',
+    '206'          => 'Partial Content',
+    '207'          => 'Multi-Status',
+    '208'          => 'Already Reported',
+    '226'          => 'IM Used',
+    '300'          => 'Multiple Choices',
+    '301'          => 'Moved Permanently',
+    '302'          => 'Found',
+    '303'          => 'See Other',
+    '304'          => 'Not Modified',
+    '305'          => 'Use Proxy',
+    '307'          => 'Temporary Redirect',
+    '308'          => 'Permanent Redirect',
+    '400'          => 'Bad Request',
+    '401'          => 'Unauthorized',
+    '402'          => 'Payment Required',
+    '403'          => 'Forbidden',
+    '404'          => 'Page Not Found',
+    '405'          => 'Method Not Allowed',
+    '406'          => 'Not Acceptable',
+    '407'          => 'Proxy Authentication Required',
+    '408'          => 'Request Timeout',
+    '409'          => 'Conflict',
+    '410'          => 'Gone',
+    '411'          => 'Length Required',
+    '412'          => 'Precondition Failed',
+    '413'          => 'Payload Too Large',
+    '414'          => 'URI Too Long',
+    '415'          => 'Unsupported Media Type',
+    '416'          => 'Range Not Satisfiable',
+    '417'          => 'Expectation Failed',
+    '418'          => 'I\'m a teapot',
+    '419'          => 'Session Has Expired',
+    '421'          => 'Misdirected Request',
+    '422'          => 'Unprocessable Entity',
+    '423'          => 'Locked',
+    '424'          => 'Failed Dependency',
+    '426'          => 'Upgrade Required',
+    '428'          => 'Precondition Required',
+    '429'          => 'Too Many Requests',
+    '431'          => 'Request Header Fields Too Large',
+    '449'          => 'Retry With',
+    '451'          => 'Unavailable For Legal Reasons',
+    '500'          => 'Internal Server Error',
+    '501'          => 'Not Implemented',
+    '502'          => 'Bad Gateway',
+    '503'          => 'Maintenance Mode',
+    '504'          => 'Gateway Timeout',
+    '505'          => 'HTTP Version Not Supported',
+    '506'          => 'Variant Also Negotiates',
+    '507'          => 'Insufficient Storage',
+    '508'          => 'Loop Detected',
+    '509'          => 'Bandwidth Limit Exceeded',
+    '510'          => 'Not Extended',
+    '511'          => 'Network Authentication Required',
+    '520'          => 'Unknown Error',
+    '521'          => 'Web Server is Down',
+    '522'          => 'Connection Timed Out',
+    '523'          => 'Origin Is Unreachable',
+    '524'          => 'A Timeout Occurred',
+    '525'          => 'SSL Handshake Failed',
+    '526'          => 'Invalid SSL Certificate',
+    'unknownError' => 'Unknown Error',
+];

+ 29 - 29
resources/lang/ja/notification.php

@@ -1,35 +1,35 @@
 <?php
 
 return [
-    'attribute'               => '通知',
-    'new'                     => ':num条新消息',
-    'empty'                   => '目前未收到新消息',
-    'payment_received'        => '订单支付成功,金额::amount,查看详情',
-    'account_expired'         => '账号过期提醒',
-    'account_expired_content' => '您的账号将在【:days】天后过期,为了确保您可以继续正常使用我们的服务,请及时续费。',
-    'account_expired_blade'   => '账号将于【:days天】后过期,请及时续费',
-    'active_email'            => '请在30分钟内完成操作',
-    'close_ticket'            => '工单【:id】:title关闭',
-    'view_web'                => '访问官网',
-    'view_ticket'             => '访问工单',
-    'new_ticket'              => '收到新工单::title',
-    'reply_ticket'            => '工单回复::title',
-    'ticket_content'          => '工单内容:',
-    'node_block'              => '节点阻断警告',
-    'node_offline'            => '节点离线警告',
-    'node_offline_content'    => '以下节点存在异常:心跳异常,可能离线了:',
-    'block_report'            => '阻断日志:',
-    'traffic_warning'         => '流量提醒',
-    'traffic_remain'          => '流量已使用::percent%,请保持关注。',
-    'traffic_tips'            => '请注意套餐流量重置日,合理分配流量使用或在流量耗尽后,付费重置套餐流量',
-    'verification_account'    => '账号验证',
-    'verification'            => '您的验证码:',
-    'verification_limit'      => '请在:minutes分钟内完成验证操作',
-    'data_anomaly'            => '流量异常用户提醒',
-    'data_anomaly_content'    => '用户:id:最近1小时 [上行流量::upload | 下行流量::download | 共计::total]',
+    'attribute'               => 'お知らせ',
+    'new'                     => ':numの新しいメッセージ',
+    'empty'                   => '現在新しいメッセージが届いています',
+    'payment_received'        => '注文支払成功、量::amount,詳細を参照',
+    'account_expired'         => 'アカウントの期限切れアラーム',
+    'account_expired_content' => 'アカウントは :days\' 日後に期限切れになります。あなたのサービスの利用を継続するには、お預かりにお支払いください。',
+    'account_expired_blade'   => 'アカウントは :days日" に期限切れになります。次回ご利用ください',
+    'active_email'            => 'この操作を 30 分以内にしてください。',
+    'close_ticket'            => 'チケット: titleがクローズされました',
+    'view_web'                => 'アクセスウェブサイト',
+    'view_ticket'             => 'チケットにアクセス',
+    'new_ticket'              => '新しいチケットを受け取りました::title',
+    'reply_ticket'            => 'チケット返信::titles',
+    'ticket_content'          => 'チケットの内容:',
+    'node_block'              => 'ノードがブロックされるときの警告',
+    'node_offline'            => 'オフラインノード警告',
+    'node_offline_content'    => '次のノードには、例外:心臓血管異常があります。おそらくオフライン:',
+    'block_report'            => 'ログを無効化:',
+    'traffic_warning'         => 'トラフィックのリマインダー',
+    'traffic_remain'          => 'データ使用:: percent%を使用しています、集中させてください',
+    'traffic_tips'            => 'あなたのサブスクリプションデータに日数をリセットします。トラフィック使用または使用し、その後数量を0にすればプランをリセットできます。',
+    'verification_account'    => 'アカウントの認証',
+    'verification'            => '認証コード:',
+    'verification_limit'      => '有効な:minutes分で認証を完了してください。',
+    'data_anomaly'            => 'データ例外ユーザーアラート',
+    'data_anomaly_content'    => 'ユーザーの場合、ID:最近の1時間 [上り従量::upload| 下り速度::download | と共計::total]',
     'node'                    => [
-        'upload'   => '上传',
-        'download' => '下载',
-        'total'    => '总计',
+        'upload'   => 'アップロード',
+        'download' => 'ダウンロード',
+        'total'    => '合計',
     ],
 ];

+ 2 - 2
resources/lang/ja/pagination.php

@@ -1,6 +1,6 @@
 <?php
 
 return [
-    'previous' => '&laquo; 上一页',
-    'next'     => '下一页 &raquo;',
+    'next'     => '次へ &raquo;',
+    'previous' => '&laquo; 前へ',
 ];

+ 5 - 5
resources/lang/ja/passwords.php

@@ -1,9 +1,9 @@
 <?php
 
 return [
-    'reset'     => '密码重置成功!',
-    'sent'      => '密码重置邮件已发送!',
-    'throttled' => '请稍候再试。',
-    'token'     => '密码重置令牌无效。',
-    'user'      => '找不到该邮箱对应的用户。',
+    'reset'     => 'パスワードをリセットしました。',
+    'sent'      => 'パスワードリマインダーを送信しました。',
+    'throttled' => '時間を置いて再度お試しください。',
+    'token'     => 'このパスワード再設定トークンは無効です。',
+    'user'      => 'このメールアドレスに一致するユーザーがいません。',
 ];

+ 168 - 172
resources/lang/ja/user.php

@@ -2,218 +2,214 @@
 
 return [
     'account'             => [
-        'credit'           => '账户余额',
-        'status'           => '账号状态',
-        'level'            => '账号等级',
-        'group'            => '所属分组',
-        'speed_limit'      => '限速',
-        'remain'           => '剩余流量',
-        'time'             => '套餐时长',
-        'last_login'       => '最近登录',
-        'reset'            => '{0} 还有 <code id="restTime">:days</code> 重置流量|[1,*] 还有 :days 天重置流量',
-        'connect_password' => '连接密码',
+        'credit'           => 'アカウント残高',
+        'status'           => 'アカウント状態',
+        'level'            => 'アカウントレベル',
+        'group'            => '下限額',
+        'speed_limit'      => 'スピード',
+        'remain'           => '残りのデータ',
+        'time'             => 'サブスクリプション期間',
+        'last_login'       => '最近のサインイン順',
+        'reset'            => '{0} が残っています <code id="restTime">:days</code> のトラフィックのリセット|[1,*] と :days 日のデータをリセットしました',
+        'connect_password' => '接続パスワード',
         'reason'           => [
-            'normal'            => '账号一切正常',
-            'expired'           => '您的账号套餐已过期',
-            'overused'          => '本时段使用流量超过 <code>:data</code> GB触发系统限制<br/> <code id="banedTime">:min</code> 后解除限制',
-            'traffic_exhausted' => '您的账号[流量]消耗殆尽',
-            'unknown'           => '未知原因,请尝试[刷新]你的浏览器!多次无果后再请开工单联系管理',
+            'normal'            => 'いつも大丈夫よ',
+            'expired'           => 'サブスクリプションの有効期限が切れました',
+            'overused'          => 'この期間でのデータ通信量が <code>:data</code> GB<br/> を超えてシステムの制限をトリガー <code id="banedTime">%</code> から切断される',
+            'traffic_exhausted' => 'アカウント[流量]は壊れているため',
+            'unknown'           => '原因は不明です。[刷新]あなたのブラウザをお試しください。何度も問題が続くようであれば,管理者に連絡を取ってください.',
         ],
     ],
     'home'                => [
         'attendance'         => [
-            'attribute' => '签 到',
-            'disable'   => '系统未开启签到功能',
-            'done'      => '已经签到过了,明天再来吧!',
-            'success'   => '您获得了 :data 流量',
-            'failed'    => '系统❌异常',
+            'attribute' => 'セプト',
+            'disable'   => 'システムにはログイン機能が開放されていません',
+            'done'      => '簽到已經簽到了,明天再來!',
+            'success'   => 'データ取得した :data',
+            'failed'    => 'システム❌例外',
         ],
-        'traffic_logs'       => '流量记录',
-        'announcement'       => '公告',
-        'wechat_push'        => '微信公告推送',
-        'chat_group'         => '聊天群',
-        'empty_announcement' => '暂无公告',
-    ],
-    'purchase_to_unlock'  => '购买服务后解锁',
-    'purchase_required'   => '本功能对非付费用户禁用!请',
-    'more'                => '更多',
+        'traffic_logs'       => 'トラフィックのログ',
+        'announcement'       => 'お知らせ',
+        'wechat_push'        => 'WeChat 通知',
+        'chat_group'         => 'チャットグループ',
+        'empty_announcement' => 'お知らせはありません',
+    ],
+    'purchase_to_unlock'  => '購入後にアンロックする',
+    'purchase_required'   => 'この機能は非課金ユーザーに代わって有効です!',
     'attribute'           => [
-        'node'    => '线路',
-        'data'    => '流量',
-        'ip'      => 'IP地址',
-        'isp'     => '运营商',
-        'address' => '地',
+        'node'    => 'ネットワーク',
+        'data'    => 'トラフィック',
+        'ip'      => 'IPアドレス',
+        'isp'     => 'キャリア',
+        'address' => '地',
     ],
-    'purchase_promotion'  => '快 来 购 买 服 务 吧!',
+    'purchase_promotion'  => 'さあ買って買ってわかったかい?',
     'menu'                => [
-        'helps'           => '助',
-        'home'            => '主 页',
-        'invites'         => '邀 请',
-        'invoices'        => '账 单',
-        'nodes'           => '线 路',
-        'referrals'       => '推 广',
-        'shop'            => '服 务',
-        'profile'         => '置',
-        'tickets'         => '工 单',
-        'admin_dashboard' => '管 理',
-    ],
-    'contact'             => '联系方式',
+        'helps'           => '組織援助',
+        'home'            => 'メインページ',
+        'invites'         => '招待者',
+        'invoices'        => '元帳',
+        'nodes'           => 'ルーティング',
+        'referrals'       => 'あなたの宣伝フィールド',
+        'shop'            => 'ビジネス',
+        'profile'         => '置',
+        'tickets'         => '仕事オーダー',
+        'admin_dashboard' => '関係ある?',
+    ],
+    'contact'             => '連絡先情報',
     'oauth'               => [
-        'bind_title' => '绑定社交账号',
-        'not_bind'   => '尚未绑定',
-        'bind'       => '绑 定',
-        'rebind'     => '重新绑定',
-        'unbind'     => '解',
+        'bind_title' => 'ソーシャル連携アカウント',
+        'not_bind'   => '未リンク',
+        'bind'       => 'ほどく',
+        'rebind'     => '再リンクする',
+        'unbind'     => '別荘を分解',
     ],
     'coupon'              => [
-        'attribute' => '优惠券',
-        'voucher'   => '代金券',
-        'recharge'  => '充值券码',
-        'discount'  => '优惠',
-        'error'     => [
-            'unknown'  => '无效优惠券',
-            'used'     => '优惠券已被使用',
-            'expired'  => '优惠券已过期',
-            'run_out'  => '优惠券耗尽',
-            'inactive' => '优惠券尚未生效',
-            'wait'     => '活动将于:time生效,请耐心等待!',
-            'unmet'    => '使用条件未满足',
-            'minimum'  => '本券最低使用金额为 :amount',
-            'overused' => '本券只能使用 :times 次',
-            'users'    => '账户不符合促销条件',
-            'services' => '商品不符合折扣条件,请查看促销条款',
+        'discount' => 'オフ',
+        'error'    => [
+            'unknown'  => '無効なクーポン',
+            'used'     => 'このクーポンは既に使用されています',
+            'expired'  => 'クーポンの有効期限が切れています',
+            'run_out'  => 'クーポン切れ',
+            'inactive' => 'このクーポンはまだ有効ではありません',
+            'wait'     => 'イベントまで :timeは実行されますが、少々お待ちください。',
+            'unmet'    => '使用条件が足りません',
+            'minimum'  => 'このクーポンを利用できるのは :amount です',
+            'overused' => 'この券は:times 回のみ使用できます',
+            'users'    => 'アカウントはセール条件を満たしていません。',
+            'services' => '品が割引基準を満たしていません。プロモーション条件をチェックしてください',
         ],
     ],
-    'error_response'      => '出现了错误,请稍后再试。',
+    'error_response'      => 'エラーが発生しました。後でもう一度お試し下さい。',
     'invite'              => [
-        'attribute'       => '邀请码',
-        'counts'          => '共 <code>:num</code> 个邀请码',
-        'tips'            => '可生成<strong> :num </strong>枚邀请码,:days 日内有效',
-        'logs'            => '邀请记录',
-        'promotion'       => '通过您的邀请码注册并激活,你们双方都将获得<mark>:traffic</mark>流量奖励;当他们消费时,您将获得他们消费金额的<mark>:referral_percent%</mark>作为奖励。',
-        'generate_failed' => '生成失败:已无邀请码生成名额',
+        'attribute'       => '招待コード',
+        'counts'          => '合計 <code>:num</code> 招待コード',
+        'tips'            => 'の生成<strong> :num </strong>の招待コード、:days の',
+        'logs'            => '招待履歴',
+        'promotion'       => '招待コードに登録し、有効にすると購読者間の<mark>クフーン</mark>トラフィックが贈られます。消費時、消費される消費額の獲得金額が<mark>:referral_percent</mark>となります。',
+        'generate_failed' => '生成に失敗しました:出席者が指定した回数だけ増やせません',
     ],
     'reset_data'          => [
-        ''          => '重置流量',
-        'required'  => '需要',
-        'cost_tips' => '本次重置流量将扣除余额 :amount!',
-        'lack'      => '余额不足,请充值余额',
-        'logs'      => '用户自行重置流量',
-        'success'   => '重置成功',
+        'action'    => 'トラフィックのリセット',
+        'cost'      => '<code>:amount</code> が必要です',
+        'cost_tips' => '今回のリセットトラフィックは残高:amountが差し引かれます!',
+        'lack'      => '残高不足です。請求してください',
+        'logs'      => 'ユーザー操作に必要な量をリセット',
+        'success'   => 'リセットしました',
     ],
     'referral'            => [
-        'link'    => '推广链接',
-        'total'   => '合计返利 :amount( :total 次),满 :money 可以申请提现。',
-        'logs'    => '佣金记录',
-        'failed'  => '申请失败',
-        'success' => '申请成功',
+        'link'    => '住所1',
+        'total'   => '戻額合計額:amount(:total 回)、amoneyが追加された場合、出金を申請してください。',
+        'logs'    => 'コミッション履歴',
+        'failed'  => '申請できませんでした',
+        'success' => '申請に成功しました。',
         'msg'     => [
-            'account'     => '账号已过期,请先购买服务吧',
-            'applied'     => '已存在申请,请等待之前的申请处理完',
-            'unfulfilled' => '满 :amount 才可以提现,继续努力吧',
-            'wait'        => '请等待管理员审核',
-            'error'       => '返利单建立失败,请稍后尝试或通知管理员',
+            'account'     => 'アカウントが期限切れです。購入してください。',
+            'applied'     => '申請中です。前回の応募が終わるまでお待ちください。',
+            'unfulfilled' => '出金することができ、:amountのご利用をお待ちください',
+            'wait'        => '販売中',
+            'error'       => '還元フォームの作成に失敗しました。後ほどお試しください',
         ],
     ],
-    'inviter'             => '邀请者',
-    'invitee'             => '受邀者',
-    'registered_at'       => '注册时间',
-    'bought_at'           => '购买日期',
-    'payment_method'      => '支付方式',
-    'pay'                 => '支付',
-    'input_coupon'        => '请输入充值券码',
-    'recharge'            => '充值',
-    'recharge_credit'     => '余额充值',
-    'recharging'          => '充值中...',
-    'withdraw_commission' => '结算佣金',
-    'withdraw_at'         => '结算日期',
-    'withdraw_logs'       => '提现记录',
-    'withdraw'            => '提 现',
-    'scan_qrcode'         => '请使用客户端扫描二维码',
+    'inviter'             => '招待者',
+    'invitee'             => '招待者',
+    'registered_at'       => '登録日',
+    'bought_at'           => '購入日',
+    'payment_method'      => '支払い方法',
+    'pay'                 => 'お支払い',
+    'input_coupon'        => 'チャージ券コードを入力してください',
+    'recharge'            => 'クレジットの追加',
+    'recharge_credit'     => '資金を追加',
+    'recharging'          => 'クレジットを追加中...',
+    'withdraw_commission' => 'チェックアウト手数料',
+    'withdraw_at'         => '決済日',
+    'withdraw_logs'       => 'キャッシュアウトの記録',
+    'withdraw'            => '条件',
+    'scan_qrcode'         => '代わりにクライアントを使用してQRコードをスキャン',
     'shop'                => [
-        'hot'                => '热 销',
-        'limited'            => '限 购',
-        'change_amount'      => '充值金额',
-        'change_amount_help' => '请输入充值金额',
-        'buy'                => '购买',
-        'description'        => '描述',
-        'service'            => '服务',
-        'pay_credit'         => '余额支付',
-        'pay_online'         => '在线支付',
-        'price'              => '格',
-        'quantity'           => '数',
-        'subtotal'           => '小',
-        'total'              => '合',
-        'conflict'           => '套餐存在冲突',
+        'hot'                => 'ヒート',
+        'limited'            => '公式',
+        'change_amount'      => '追加入金',
+        'change_amount_help' => '追加入荷額を入力してください',
+        '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'          => '请开工单通知客服',
+        'call4help'          => 'チケット・サポートチケットを開いてください。',
     ],
     'service'             => [
-        'node_count'    => '<code>:num</code> 条优质线路',
-        'country_count' => '覆盖 <code>:num</code> 个国家或地区',
-        'unlimited'     => '不限速',
+        'node_count'    => '<code>:num</code> 高品質なワイヤー',
+        'country_count' => '<code>:num</code> か国を上書きします。',
+        'unlimited'     => 'スピード制限',
     ],
     'payment'             => [
-        'error'           => '充值余额不合规',
-        'creating'        => '创建支付单中...',
-        'redirect_stripe' => '转跳至Stripe支付界面',
-        'qrcode_tips'     => '请使用<strong class="red-600">:software</strong>扫描二维码',
-        'close_tips'      => '请在<code>:minutes分钟</code>内完成支付,否则订单将会自动关闭',
-        'mobile_tips'     => '<strong>手机用户</strong>:长按二维码 -> 保存图片 ->打开支付软件 -> 扫一扫 -> 选择相册 进行付款',
+        'error'           => 'チャージ残高が正しくありません',
+        'creating'        => '支払いフォームを作成しています...',
+        'redirect_stripe' => 'Stripeの支払い画面に移動',
+        'qrcode_tips'     => 'QRコードをスキャンするには<strong class="red-600">:software</strong>を使用してください',
+        'close_tips'      => '<code>:minutes</code>内の支払い手続きを完了してください。さもなければ注文は自動的にオフになります。',
+        'mobile_tips'     => '<strong>モバイルユーザー</strong>:長押しの QR コード → 支払いを保存します -> スイート -> スイート -> スイートの選択で 支払いの選択',
     ],
     'invoice'             => [
-        'attribute'               => '订单',
-        'detail'                  => '消费记录',
-        'amount'                  => '金',
-        'active_prepaid_question' => '是否提前激活预支付套餐?',
-        'active_prepaid_tips'     => '套餐激活后:<br>先前套餐将直接失效!<br>过期日期将由本日重新开始计算!',
+        'attribute'               => '注文',
+        'detail'                  => '支払い履歴',
+        'amount'                  => '金',
+        'active_prepaid_question' => '事前決済サービスを有効化しますか?',
+        'active_prepaid_tips'     => '現在のパッケージはパック内から有効になりました:<br>以前のパッケージは直すことができます!<br>この日最初からやり直しです!',
     ],
     'node'                => [
-        'info'     => '配置信息',
-        'setting'  => '代理设置',
-        'unstable' => '线路波动/维护中',
-        'rate'     => ':ratio倍流量消耗',
+        'info'     => '設定情報',
+        'setting'  => 'プロキシ設定',
+        'unstable' => '車両の変動/メンテナンスで',
+        'rate'     => ':ratio倍トラフィック消費',
     ],
     'subscribe'           => [
-        'baned'            => '您的订阅功能被禁用,请联系管理员恢复',
-        'link'             => '订阅链接',
-        'tips'             => '警告:该订阅链接仅限个人使用,请勿传播该链接,否则会导致您的账号流量使用情况异常触发自动封号机制。',
-        'exchange_warning' => '更换订阅地址将导致:\n1.旧地址立即失效\n2.连接密码被更改',
-        'custom'           => '自定义订阅',
-        'ss_only'          => '只订阅SS',
-        'ssr_only'         => '只订阅SSR (包含SS)',
-        'v2ray_only'       => '只订阅V2Ray',
-        'trojan_only'      => '只订阅Trojan',
-        'error'            => '更换订阅地址异常',
+        'baned'            => '登録機能は無効になっています。回復するには管理者に連絡してください。',
+        'link'             => 'サブスクリプションリンク',
+        'tips'             => 'アラート:このサブスクリプションリンクは個人にのみ利用され、このリンクを伝染しない限り、そのリンクはアカウントの利用量の異常なパケットを発信します。',
+        'exchange_warning' => 'サブスクリプションアドレスを変更すると、\n1.古いアドレスがすぐ無効\n2.接続パスワードの変更が発生します。',
+        'custom'           => 'カスタムフィード',
+        'ss_only'          => 'SSのみ購読する',
+        'ssr_only'         => 'SSR(SSを含む)',
+        '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用户已手动关闭',
-        'title_placeholder'   => '请简单表示你的问题类型,或者涉及的内容',
-        'content_placeholder' => '请详细的描述您遇到的问题,或者需要我们帮助的地方,以便我们快速帮助到您',
-        'new'                 => '创建新的工单',
-        'working_hour'        => '客服工作时间',
-        'online_hour'         => '在线时间',
+        'attribute'           => 'チケット',
+        'submit_tips'         => '課題を確認しますか?',
+        'reply_confirm'       => '課題に返信してよろしいですか。',
+        'close_tips'          => 'この課題をクローズしますか?',
+        'close'               => 'チケットを閉じる',
+        'failed_closed'       => 'エラー:このチケットを閉じました',
+        'reply_placeholder'   => '何か言えますか?',
+        'reply'               => '返信',
+        'close_msg'           => 'チケット:ID :id人が手動でクローズしました',
+        'title_placeholder'   => 'イシューや問題の内容は簡単に表現できます。',
+        'content_placeholder' => 'どのような状況で問題が起こるか、あなたが助けを必要とする場所かあなたの手助けをしてください',
+        'new'                 => '新しいチケットを作成する',
+        'working_hour'        => '営業時間',
+        'online_hour'         => '現在時刻',
         'service_tips'        => '本站有多种联系方式,请使用其中<code>一种</code>联系客服! <br>重复请求,将会自动延迟处理时间',
-        'error'               => '未知错误!请通知客服',
+        'error'               => '不明なエラーです!サポートに連絡してください',
     ],
     'traffic_logs'        => [
-        '24hours' => '今日流量使用情况',
-        '30days'  => '本月流量使用情况',
-        'tips'    => '提示:流量统计更新会有延迟。按天统计于次日更新,按小时统计于次小时更新。',
+        '24hours' => '本日のデータ使用',
+        '30days'  => '今月のデータ使用',
+        'tips'    => 'ヒント:トラフィックの統計更新は遅延があります。統計は、翌日更新され、更新、1時間ごとに更新されます。',
     ],
-    'client'              => '客户端',
-    'tutorials'           => '程',
-    'current_role'        => '当前身份',
+    'client'              => 'クライアント',
+    'tutorials'           => '程',
+    'current_role'        => '現在のロール:',
     'knowledge'           => [
-        'title' => '知 识 库',
-        'basic' => '基 础',
+        'title' => 'コンセンサス',
+        'basic' => '親しくさ',
     ],
 ];

+ 174 - 113
resources/lang/ja/validation.php

@@ -1,137 +1,198 @@
 <?php
 
 return [
-    '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 或更早。',
+    'accepted'             => ':attributeを承認してください。',
+    'accepted_if'          => ':otherが:valueの場合、:attributeを受け入れる必要があります。',
+    'active_url'           => ':attributeは、有効なURLではありません。',
+    'after'                => ':attributeには、:dateより後の日付を指定してください。',
+    'after_or_equal'       => ':attributeには、:date以降の日付を指定してください。',
+    'alpha'                => ':attributeには、アルファベッドのみ使用できます。',
+    'alpha_dash'           => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')とハイフンと下線(\'-\',\'_\')が使用できます。',
+    'alpha_num'            => ':attributeには、英数字(\'A-Z\',\'a-z\',\'0-9\')が使用できます。',
+    'array'                => ':attributeには、配列を指定してください。',
+    'before'               => ':attributeには、:dateより前の日付を指定してください。',
+    'before_or_equal'      => ':attributeには、:date以前の日付を指定してください。',
     'between'              => [
-        'numeric' => ':attribute 必须介于 :min - :max 之间。',
-        'file'    => ':attribute 必须介于 :min - :max KB 之间。',
-        'string'  => ':attribute 必须介于 :min - :max 个字符之间。',
-        'array'   => ':attribute 必须只有 :min - :max 个单元。',
+        'array'   => ':attributeの項目は、:min個から:max個にしてください。',
+        'file'    => ':attributeには、:min KBから:max KBまでのサイズのファイルを指定してください。',
+        'numeric' => ':attributeには、:minから、:maxまでの数字を指定してください。',
+        'string'  => ':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 不能为空。',
+    'boolean'              => ':attributeには、\'true\'か\'false\'を指定してください。',
+    'confirmed'            => ':attributeと:attribute確認が一致しません。',
+    'current_password'     => 'パスワードが正しくありません。',
+    'date'                 => ':attributeは、正しい日付ではありません。',
+    'date_equals'          => ':attributeは:dateに等しい日付でなければなりません。',
+    'date_format'          => ':attributeの形式は、\':format\'と合いません。',
+    'declined'             => ':attributeは 辞退する必要があります。',
+    'declined_if'          => ':otherが:valueの場合、:attributeは拒否されなければならない。',
+    'different'            => ':attributeと:otherには、異なるものを指定してください。',
+    'digits'               => ':attributeは、:digits桁にしてください。',
+    'digits_between'       => ':attributeは、:min桁から:max桁にしてください。',
+    'dimensions'           => ':attributeの画像サイズが無効です',
+    'distinct'             => ':attributeの値が重複しています。',
+    'email'                => ':attributeは、有効なメールアドレス形式で指定してください。',
+    'ends_with'            => ':attributeは、次のうちのいずれかで終わらなければなりません。: :values',
+    'enum'                 => '選択した :attributeは 無効です。',
+    'exists'               => '選択された:attributeは、有効ではありません。',
+    'file'                 => ':attributeはファイルでなければいけません。',
+    'filled'               => ':attributeは必須です。',
     'gt'                   => [
-        'numeric' => ':attribute 必须大于 :value。',
-        'file'    => ':attribute 必须大于 :value KB。',
-        'string'  => ':attribute 必须多于 :value 个字符。',
-        'array'   => ':attribute 必须多于 :value 个元素。',
+        'array'   => ':attributeの項目数は、:value個より大きくなければなりません。',
+        'file'    => ':attributeは、:value KBより大きくなければなりません。',
+        'numeric' => ':attributeは、:valueより大きくなければなりません。',
+        'string'  => ':attributeは、:value文字より大きくなければなりません。',
     ],
     'gte'                  => [
-        'numeric' => ':attribute 必须大于或等于 :value。',
-        'file'    => ':attribute 必须大于或等于 :value KB。',
-        'string'  => ':attribute 必须多于或等于 :value 个字符。',
-        'array'   => ':attribute 必须多于或等于 :value 个元素。',
+        'array'   => ':attributeの項目数は、:value個以上でなければなりません。',
+        'file'    => ':attributeは、:value KB以上でなければなりません。',
+        'numeric' => ':attributeは、:value以上でなければなりません。',
+        'string'  => ':attributeは、:value文字以上でなければなりません。',
     ],
-    'image'                => ':attribute 必须是图片。',
-    'in'                   => '已选的属性 :attribute 无效。',
-    'in_array'             => ':attribute 必须在 :other 中。',
-    'integer'              => ':attribute 必须是整数。',
-    'ip'                   => ':attribute 必须是有效的 IP 地址。',
-    'ipv4'                 => ':attribute 必须是有效的 IPv4 地址。',
-    'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',
-    'json'                 => ':attribute 必须是正确的 JSON 格式。',
+    '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 个元素。',
+        'array'   => ':attributeの項目数は、:value個より小さくなければなりません。',
+        'file'    => ':attributeは、:value KBより小さくなければなりません。',
+        'numeric' => ':attributeは、:valueより小さくなければなりません。',
+        'string'  => ':attributeは、:value文字より小さくなければなりません。',
     ],
     'lte'                  => [
-        'numeric' => ':attribute 必须小于或等于 :value。',
-        'file'    => ':attribute 必须小于或等于 :value KB。',
-        'string'  => ':attribute 必须少于或等于 :value 个字符。',
-        'array'   => ':attribute 必须少于或等于 :value 个元素。',
+        'array'   => ':attributeの項目数は、:value個以下でなければなりません。',
+        'file'    => ':attributeは、:value KB以下でなければなりません。',
+        'numeric' => ':attributeは、:value以下でなければなりません。',
+        'string'  => ':attributeは、:value文字以下でなければなりません。',
     ],
+    'mac_address'          => ':attributeは有効なMACアドレスである必要があります。',
     'max'                  => [
-        'numeric' => ':attribute 不能大于 :max。',
-        'file'    => ':attribute 不能大于 :max KB。',
-        'string'  => ':attribute 不能大于 :max 个字符。',
-        'array'   => ':attribute 最多只有 :max 个单元。',
+        'array'   => ':attributeの項目は、:max個以下にしてください。',
+        'file'    => ':attributeには、:max KB以下のファイルを指定してください。',
+        'numeric' => ':attributeには、:max以下の数字を指定してください。',
+        'string'  => ':attributeは、:max文字以下にしてください。',
     ],
-    'mimes'                => ':attribute 必须是一个 :values 类型的文件。',
-    'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',
+    'mimes'                => ':attributeには、:valuesタイプのファイルを指定してください。',
+    'mimetypes'            => ':attributeには、:valuesタイプのファイルを指定してください。',
     'min'                  => [
-        'numeric' => ':attribute 必须大于等于 :min。',
-        'file'    => ':attribute 大小不能小于 :min KB。',
-        'string'  => ':attribute 至少为 :min 个字符。',
-        'array'   => ':attribute 至少有 :min 个单元。',
+        'array'   => ':attributeの項目は、:min個以上にしてください。',
+        'file'    => ':attributeには、:min KB以上のファイルを指定してください。',
+        'numeric' => ':attributeには、:min以上の数字を指定してください。',
+        'string'  => ':attributeは、:min文字以上にしてください。',
     ],
-    '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 必须相同。',
+    'multiple_of'          => ':attributeは:valueの倍数でなければなりません',
+    'not_in'               => '選択された:attributeは、有効ではありません。',
+    'not_regex'            => ':attributeの形式が無効です。',
+    'numeric'              => ':attributeには、数字を指定してください。',
+    'password'             => 'パスワードが正しくありません。',
+    'present'              => ':attributeが存在している必要があります。',
+    'prohibited'           => ':attributeフィールドは禁止されています。',
+    'prohibited_if'        => ':attributeフィールドは、:otherが:valueの場合は禁止されています。',
+    'prohibited_unless'    => ':attributeフィールドは、:otherが:valuesでない限り禁止されています。',
+    'prohibits'            => ':attribute フィールドは、:other が存在することを禁止します。',
+    'regex'                => ':attributeには、有効な正規表現を指定してください。',
+    'required'             => ':attributeは、必ず指定してください。',
+    'required_array_keys'  => ':attributeフィールドには、:valuesのエントリを含める必要があります。',
+    'required_if'          => ':otherが:valueの場合、:attributeを指定してください。',
+    'required_unless'      => ':otherが:values以外の場合、:attributeを指定してください。',
+    'required_with'        => ':valuesが指定されている場合、:attributeも指定してください。',
+    'required_with_all'    => ':valuesが全て指定されている場合、:attributeも指定してください。',
+    'required_without'     => ':valuesが指定されていない場合、:attributeを指定してください。',
+    'required_without_all' => ':valuesが全て指定されていない場合、:attributeを指定してください。',
+    'same'                 => ':attributeと:otherが一致しません。',
     'size'                 => [
-        'numeric' => ':attribute 大小必须为 :size。',
-        'file'    => ':attribute 大小必须为 :size KB。',
-        'string'  => ':attribute 必须是 :size 个字符。',
-        'array'   => ':attribute 必须为 :size 个单元。',
+        'array'   => ':attributeの項目は、:size個にしてください。',
+        'file'    => ':attributeには、:size KBのファイルを指定してください。',
+        'numeric' => ':attributeには、:sizeを指定してください。',
+        'string'  => ':attributeは、:size文字にしてください。',
     ],
-    'starts_with'          => ':attribute 必须以 :values 为开头。',
-    'string'               => ':attribute 必须是一个字符串。',
-    'timezone'             => ':attribute 必须是一个合法的时区值。',
-    'unique'               => ':attribute 已经存在。',
-    'uploaded'             => ':attribute 上传失败。',
-    'url'                  => ':attribute 格式不正确。',
-    'uuid'                 => ':attribute 必须是有效的 UUID。',
-
-    'custom' => [
+    'starts_with'          => ':attributeは、次のいずれかで始まる必要があります。:values',
+    'string'               => ':attributeには、文字を指定してください。',
+    'timezone'             => ':attributeには、有効なタイムゾーンを指定してください。',
+    'unique'               => '指定の:attributeは既に使用されています。',
+    'uploaded'             => ':attributeのアップロードに失敗しました。',
+    'url'                  => ':attributeは、有効なURL形式で指定してください。',
+    'uuid'                 => ':attributeは、有効なUUIDでなければなりません。',
+    'attributes'           => [
+        'address'                  => '住所',
+        'age'                      => '年',
+        'amount'                   => '額',
+        'area'                     => 'エリア',
+        'available'                => '利用可能',
+        'birthday'                 => '誕生日',
+        'body'                     => 'ボディ',
+        'city'                     => '市',
+        'content'                  => 'コンテンツ',
+        'country'                  => '国',
+        'created_at'               => '作成日',
+        'creator'                  => 'クリエーター',
+        'current_password'         => '現在のパスワード',
+        'date'                     => '日付',
+        'date_of_birth'            => '生年月日',
+        'day'                      => '日',
+        'deleted_at'               => 'で削除',
+        'description'              => '説明',
+        'district'                 => '地区',
+        'duration'                 => '期間',
+        'email'                    => 'Eメール',
+        'excerpt'                  => '抜粋',
+        'filter'                   => 'フィルタ',
+        'first_name'               => '名前',
+        'gender'                   => '性別',
+        'group'                    => 'グループ',
+        'hour'                     => '時間',
+        'image'                    => '画像',
+        'last_name'                => '名字',
+        'lesson'                   => 'レッスン',
+        'line_address_1'           => '回線アドレス1',
+        'line_address_2'           => '回線アドレス2',
+        'message'                  => 'メッセージ',
+        'middle_name'              => 'ミドルネーム',
+        'minute'                   => 'ポイント',
+        'mobile'                   => 'モバイル',
+        'month'                    => 'ヶ月',
+        'name'                     => '名前',
+        'national_code'            => '国コード',
+        'number'                   => '番号',
+        'password'                 => 'パスワード',
+        'password_confirmation'    => 'パスワードの確認',
+        'phone'                    => '電話番号',
+        'photo'                    => '写真',
+        'postal_code'              => '郵便番号',
+        'price'                    => '価格',
+        'province'                 => '都道府県',
+        'recaptcha_response_field' => 'Recaptcha応答フィールド',
+        'remember'                 => '覚えて',
+        'restored_at'              => 'で復元',
+        'result_text_under_image'  => '画像の下の結果テキスト',
+        'role'                     => 'ロール',
+        'second'                   => 'セカンド',
+        'sex'                      => 'ジェンダー',
+        'short_text'               => '短いテキスト',
+        'size'                     => 'サイズ',
+        'state'                    => '状態',
+        'street'                   => 'ストリート',
+        'student'                  => 'スチューデント',
+        'subject'                  => '課題',
+        'teacher'                  => '先生',
+        'terms'                    => '利用規約',
+        'test_description'         => 'テスト内容',
+        'test_locale'              => 'テストロケール',
+        'test_name'                => 'テスト名',
+        'text'                     => 'テキスト',
+        'time'                     => 'てま',
+        'title'                    => 'タイトル',
+        'updated_at'               => '更新日',
+        'username'                 => 'ユーザー名',
+        'year'                     => '年',
+    ],
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => 'custom-message',
         ],
     ],
-
-    'attributes' => [
-        'name'                  => '名称',
-        'nickname'              => '昵称',
-        'username'              => '用户名',
-        'email'                 => '邮箱',
-        'password'              => '密码',
-        'password_confirmation' => '确认密码',
-        'phone'                 => '电话',
-        'day'                   => '{1} 天|{2} 日',
-        'month'                 => '月',
-        'year'                  => '年',
-        'hour'                  => '{1} 时|{2} 点',
-        'minute'                => '分',
-        'second'                => '秒',
-        'title'                 => '标题',
-        'content'               => '内容',
-        'description'           => '描述',
-        'excerpt'               => '摘要',
-        'date'                  => '日期',
-        'time'                  => '时间',
-    ],
 ];

+ 52 - 25
resources/lang/ko.json

@@ -1,27 +1,54 @@
 {
-  "All rights reserved.": "버전 소유",
-  "Hello!": "안녕하세요",
-  "If you did not request a password reset, please ignore this email.": "암호 재설정을 요청하지 않은 경우 추가 작업이 필요하지 않습니다.",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "\":actionText\" 버튼을 클릭하는데 문제가 있는 경우 아래 URL을 복사하여 웹 브라우저에 붙여 넣으세요.",
-  "If your issue is not resolved, please create another ticket.": "문제가 해결되지 않은 경우 다른 해결방안을 살펴보세요",
-  "Invoice Detail": "주문서 상세 내역",
-  "Daily Data Usage Report": "회선 데이터 보고",
-  "Payment for #:sn has been received! Total amount: :amount.": "您成功支付了订单#:sn,总金额为 :amount。",
-  "Payment Received": "주문서 결제 성공",
-  "Please click the button below to verify your email address.": "아래 버튼을 클릭하여 이메일을 인증하세요",
-  "Please click on the button below to reset your password.": "비밀번호를 초기화하려면 아래 버튼을 누르십시오:",
-  "Regards": "권장",
-  "Reset Password Notification": "비밀번호 재설정 알림 ",
-  "Reset Password": "비밀번호 재설정",
-  "Send Password Reset Link": "비밀번호 재설정 링크 전송",
-  "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "회원가입 해주셔서 감사합니다! 시작하기 전에 이메일 계정으로 보낸 링크를 클릭해서 이메일을 확인해야 합니다! 만약 이메일을 받지 못했다면, 다시 전송해드리겠습니다.",
-  "Too Many Attempts.": "너무 많이 시도하였습니다",
-  "Too Many Requests": "요청이 횟수 많음",
-  "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.": "이메일이 인증되지 않았습니다.",
-  "You have not responded this ticket in :num hours, System has closed your ticket.": ":num시간 이상 동안 문의 답장이 없습니다. 시스템이 자동으로 문의를 닫았습니다.",
-  "You must have a valid subscription to view the content in this area!": "您必须拥有有效套餐才可以查看该区域的内容!"
+    "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 Address",
+    "Forbidden": "권한 없음",
+    "Forgot Your Password?": "비밀번호를 잊으셨나요?",
+    "Go Home": "홈으로 이동",
+    "Go to page :page": ":page 페이지로 이동",
+    "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\" 버튼을 클릭하는 중에 문제가 있는 경우 아래 URL을 복사하여\n웹 브라우저에 붙여넣으세요:",
+    "Login": "로그인",
+    "Logout": "로그아웃",
+    "Name": "이름",
+    "Not Found": "찾을 수 없습니다",
+    "of": "의",
+    "Oh no": "저런!",
+    "Page Expired": "만료된 페이지",
+    "Pagination Navigation": "페이지네이션 내비게이션",
+    "Password": "비밀번호",
+    "Please click the button below to verify your email address.": "이메일 주소를 확인하려면 아래 버튼을 클릭하십시오.",
+    "Regards": "안부",
+    "Register": "회원가입",
+    "Remember Me": "로그인 상태 유지",
+    "Reset Password": "비밀번호 재설정",
+    "Reset Password Notification": "비밀번호 재설정 알림 ",
+    "results": "결과",
+    "Send Password Reset Link": "비밀번호 재설정 링크 보내기",
+    "Server Error": "서버 오류",
+    "Service Unavailable": "서비스를 사용할 수 없습니다.",
+    "Showing": "보기",
+    "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "회원가입 해주셔서 감사합니다! 시작하기 전에 이메일 계정으로 보낸 링크를 클릭해서 이메일을 확인해야 합니다! 만약 이메일을 받지 못했다면, 다시 전송해드리겠습니다.",
+    "The :attribute must contain at least one letter.": ":attribute은(는) 반드시 하나 이상의 문자를 포함해야합니다.",
+    "The :attribute must contain at least one number.": ":attribute은(는) 반드시 하나 이상의 숫자를 포함해야합니다.",
+    "The :attribute must contain at least one symbol.": "attribute은(는) 반드시 하나 이상의 특수 문자를 포함해야합니다.",
+    "The :attribute must contain at least one uppercase and one lowercase letter.": ":attribute에는 하나 이상의 대문자와 하나의 소문자가 포함되어야 합니다.",
+    "The given :attribute has appeared in a data leak. Please choose a different :attribute.": "주어진 :attribute이(가) 데이터 누출에 나타났습니다. 다른 :attribute을(를) 선택하세요.",
+    "This password reset link will expire in :count minutes.": "이 비밀번호 재설정 링크는 :count분 후에 만료됩니다.",
+    "to": "에",
+    "Toggle navigation": "내비게이션 전환",
+    "Too Many Requests": "너무 많은 요청",
+    "Unauthorized": "인증되지 않음",
+    "Verify Email Address": "이메일 주소 확인",
+    "Verify Your Email Address": "이메일 주소 확인",
+    "Whoops!": "저런!",
+    "You are receiving this email because we received a password reset request for your account.": "귀하의 계정에 대한 비밀번호 재설정이 요청되어 이 메일이 발송되었습니다.",
+    "You have not responded this ticket in :num hours, System has closed your ticket.": ":num시간 이상 동안 문의 답장이 없습니다. 시스템이 자동으로 문의를 닫았습니다.",
+    "You must have a valid subscription to view the content in this area!": "이 영역의 콘텐츠를 보려면 유효한 패키지가 있어야 합니다!"
 }

+ 23 - 10
resources/lang/ko/auth.php

@@ -9,18 +9,24 @@ return [
             'disable'   => '이 사이트는 계정 활성화 시스템을 사용하지 않습니다. 사이트로 가서 로그인 해주세요!',
             'throttle'  => '회원님의 비정상적인 행동이 감지되었습니다. 조작에 주의부탁드립니다! 문제가 있을 경우 이메일로 연락주세요.',
         ],
+        'promotion' => '계정이 아직 활성화되지 않은 경우 먼저 [:action]하세요!',
         'sent'      => '활성화코드가 이미 회원님의 이메일로 전송되었습니다. 잠시 후에 메일 확인이 안 될 경우, 휴지통이나 스팸차단을 확인해주세요.',
-        'promotion' => ['0' => '계정이 비활성화 되었습니다. 클릭해주세요', '1' => '활성화 시스템을 가동합니다!'],
     ],
     'aup'             => '수용가능한 이용약관',
     'captcha'         => [
         'attribute' => '인증번호',
-        'error'     => ['failed' => '인증번호 확인 실패, 다시 입력해주세요.', 'timeout' => '인증번호가 올바르지 않습니다! 제한시간이 지났거나 새로고침하여 다시 시도해주세요.'],
+        'error'     => [
+            'failed'  => '인증번호 확인 실패, 다시 입력해주세요.',
+            'timeout' => '인증번호가 올바르지 않습니다! 제한시간이 지났거나 새로고침하여 다시 시도해주세요.',
+        ],
         'required'  => '인증번호를 정확하게 입력해주세요.',
         'sent'      => '인증번호가 메일로 전송되었습니다. 잠시 후에 도착하지 않을 경우 휴지통이나 스팸차단을 확인해주세요',
     ],
     'email'           => [
-        'error' => ['banned' => '사이트에서 고객님이 사용하시는 이메일을 차단하였습니다. 다른 유효한 이메일을 사용해주세요.', 'invalid' => '지원하지 않는 이메일 형식입니다.'],
+        'error' => [
+            'banned'  => '사이트에서 고객님이 사용하시는 이메일을 차단하였습니다. 다른 유효한 이메일을 사용해주세요.',
+            'invalid' => '지원하지 않는 이메일 형식입니다.',
+        ],
     ],
     'error'           => [
         'account_baned'  => '회원님의 계정은 차단되었습니다!',
@@ -30,9 +36,12 @@ return [
         'repeat_request' => '새로 고침 후 다시 시도해 주시기 바랍니다.',
         'url_timeout'    => '연결 실패, 다시 시도해주세요.',
     ],
+    'failed'          => '제출된 인증 정보가 레코드와 일치하지 않습니다.',
     'invite'          => [
         'attribute'    => '초대 코드',
-        'error'        => ['unavailable' => '초대코드 사용불가. 다시 시도해주세요.'],
+        'error'        => [
+            'unavailable' => '초대코드 사용불가. 다시 시도해주세요.',
+        ],
         'get'          => '초대 코드를 받기',
         'not_required' => '초대 코드없이 회원가입을 진행해주세요!',
     ],
@@ -41,15 +50,15 @@ return [
     'maintenance'     => '보호',
     'maintenance_tip' => '사이트 점검 중',
     'oauth'           => [
-        'bind_success'    => '연동 성공',
         'bind_failed'     => '연동 실패',
+        'bind_success'    => '연동 성공',
         'login_failed'    => '중복 접속 실패!',
+        'rebind_success'  => '재연동 성공',
         'register'        => '회원가입 바로가기',
-        'registered'      => '이미 가입되셨습니다, 로그인 해주세요.',
         'register_failed' => '회원가입 실패',
-        'rebind_success'  => '재연동 성공',
-        'unbind_success'  => '연동 해제 성공',
+        'registered'      => '이미 가입되셨습니다, 로그인 해주세요.',
         'unbind_failed'   => '연동 해제 실패',
+        'unbind_success'  => '연동 해제 성공',
     ],
     'optional'        => '옵션',
     'password'        => [
@@ -73,12 +82,16 @@ return [
     'register'        => [
         'attribute' => '회원가입',
         'code'      => '회원가입 인증번호',
-        'error'     => ['disable' => '죄송합니다. 현재 회원가입이 불가합니다.', 'throttle' => '防刷机制已激活,请勿频繁注册'],
-        'promotion' => '아직 계정이 없으신가요?',
+        'error'     => [
+            'disable'  => '죄송합니다. 현재 회원가입이 불가합니다.',
+            'throttle' => '防刷机制已激活,请勿频繁注册',
+        ],
         'failed'    => '회원가입 실패, 잠시 후 다시 시도해주세요.',
+        'promotion' => '아직 계정이 없으신가요?',
         'success'   => '회원가입 성공',
     ],
     'remember_me'     => '로그인 상태 유지',
     'request'         => '획득',
+    'throttle'        => '너무 많은 로그인을 시도하였습니다. :seconds 초 후에 다시 시도하십시오.',
     'tos'             => '이용 약관',
 ];

+ 12 - 10
resources/lang/ko/common.php

@@ -1,6 +1,7 @@
 <?php
 
 return [
+    'hour'            => '시',
     'account'         => '아이디',
     'available_date'  => '유효기간',
     'created_at'      => '创建时间',
@@ -58,16 +59,17 @@ return [
         'fullscreen' => '全屏',
     ],
     'days'            => [
-        'sun'     => '周日',
-        'mon'     => '周一',
-        'tue'     => '周二',
-        'wed'     => '周三',
-        'thu'     => '周四',
-        'fri'     => '周五',
-        'sat'     => '周六',
-        'weekend' => '周末',
-        'work'    => '工作日',
-        'next'    => '次日',
+        'attribute' => '일 | 일',
+        'sun'       => '周日',
+        'mon'       => '周一',
+        'tue'       => '周二',
+        'wed'       => '周三',
+        'thu'       => '周四',
+        'fri'       => '周五',
+        'sat'       => '周六',
+        'weekend'   => '周末',
+        'work'      => '工作日',
+        'next'      => '次日',
     ],
     'qrcode'          => ':attribute二维码',
     'deleted'         => '已删除',

+ 0 - 4
resources/lang/ko/errors.php

@@ -7,17 +7,13 @@ return [
         'china'   => '중국IP 혹은 프록시 접근 감지, 접근을 금지합니다.',
         'oversea' => '해외 IP 감지, 접근을 금지합니다.',
     ],
-    'http'         => 'HTTP请求类型错误',
     'log'          => '로그',
-    'missing_page' => '페이지를 찾을 수 없습니다.',
     'refresh'      => '새로고침',
     'refresh_page' => '페이즈를 새로고침 후, 다시 방문해주세요.',
     'report'       => '错❌误携带了报告:',
     'safe_enter'   => '정상적인 접근',
     'safe_code'    => '보안코드를 입력해주세요.',
-    'system'       => '시스템 오류',
     'title'        => '⚠️오류발생',
-    'unauthorized' => '접근 허가 없음',
     'unsafe_enter' => '비정상적인 접근',
     'visit'        => '방문해주세요.',
     'whoops'       => '!!!',

+ 76 - 0
resources/lang/ko/http-statuses.php

@@ -0,0 +1,76 @@
+<?php
+
+return [
+    '0'            => 'Unknown Error',
+    '100'          => 'Continue',
+    '101'          => 'Switching Protocols',
+    '102'          => 'Processing',
+    '200'          => 'OK',
+    '201'          => 'Created',
+    '202'          => 'Accepted',
+    '203'          => 'Non-Authoritative Information',
+    '204'          => 'No Content',
+    '205'          => 'Reset Content',
+    '206'          => 'Partial Content',
+    '207'          => 'Multi-Status',
+    '208'          => 'Already Reported',
+    '226'          => 'IM Used',
+    '300'          => 'Multiple Choices',
+    '301'          => 'Moved Permanently',
+    '302'          => 'Found',
+    '303'          => 'See Other',
+    '304'          => 'Not Modified',
+    '305'          => 'Use Proxy',
+    '307'          => 'Temporary Redirect',
+    '308'          => 'Permanent Redirect',
+    '400'          => 'Bad Request',
+    '401'          => 'Unauthorized',
+    '402'          => 'Payment Required',
+    '403'          => 'Forbidden',
+    '404'          => 'Page Not Found',
+    '405'          => 'Method Not Allowed',
+    '406'          => 'Not Acceptable',
+    '407'          => 'Proxy Authentication Required',
+    '408'          => 'Request Timeout',
+    '409'          => 'Conflict',
+    '410'          => 'Gone',
+    '411'          => 'Length Required',
+    '412'          => 'Precondition Failed',
+    '413'          => 'Payload Too Large',
+    '414'          => 'URI Too Long',
+    '415'          => 'Unsupported Media Type',
+    '416'          => 'Range Not Satisfiable',
+    '417'          => 'Expectation Failed',
+    '418'          => 'I\'m a teapot',
+    '419'          => 'Session Has Expired',
+    '421'          => 'Misdirected Request',
+    '422'          => 'Unprocessable Entity',
+    '423'          => 'Locked',
+    '424'          => 'Failed Dependency',
+    '426'          => 'Upgrade Required',
+    '428'          => 'Precondition Required',
+    '429'          => 'Too Many Requests',
+    '431'          => 'Request Header Fields Too Large',
+    '449'          => 'Retry With',
+    '451'          => 'Unavailable For Legal Reasons',
+    '500'          => 'Internal Server Error',
+    '501'          => 'Not Implemented',
+    '502'          => 'Bad Gateway',
+    '503'          => 'Maintenance Mode',
+    '504'          => 'Gateway Timeout',
+    '505'          => 'HTTP Version Not Supported',
+    '506'          => 'Variant Also Negotiates',
+    '507'          => 'Insufficient Storage',
+    '508'          => 'Loop Detected',
+    '509'          => 'Bandwidth Limit Exceeded',
+    '510'          => 'Not Extended',
+    '511'          => 'Network Authentication Required',
+    '520'          => 'Unknown Error',
+    '521'          => 'Web Server is Down',
+    '522'          => 'Connection Timed Out',
+    '523'          => 'Origin Is Unreachable',
+    '524'          => 'A Timeout Occurred',
+    '525'          => 'SSL Handshake Failed',
+    '526'          => 'Invalid SSL Certificate',
+    'unknownError' => 'Unknown Error',
+];

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

@@ -1,6 +1,6 @@
 <?php
 
 return [
-    'previous' => '&laquo; 이전',
     'next'     => '다음 &raquo;',
+    'previous' => '&laquo; 이전',
 ];

+ 4 - 8
resources/lang/ko/user.php

@@ -36,7 +36,6 @@ return [
     ],
     'purchase_to_unlock'  => '서비스 구매 후 잠금 해제',
     'purchase_required'   => '해당 기능은 유료 구매자에게만 제공됩니다!',
-    'more'                => '더 보기',
     'attribute'           => [
         'node'    => '회선',
         'data'    => '용량',
@@ -66,11 +65,8 @@ return [
         'unbind'     => '연동 해제',
     ],
     'coupon'              => [
-        'attribute' => '할인쿠폰',
-        'voucher'   => '상품권',
-        'recharge'  => '충전권',
-        'discount'  => '할인',
-        'error'     => [
+        'discount' => '할인',
+        'error'    => [
             'unknown'  => '유효하지 않은 쿠폰',
             'used'     => '이미 사용된 쿠폰',
             'expired'  => '쿠폰이 만료됨',
@@ -94,8 +90,8 @@ return [
         'generate_failed' => '생성 실패: 초대코드 생성 불가',
     ],
     'reset_data'          => [
-        ''          => '데이터 재설정',
-        'required'  => '필요',
+        'action'    => '데이터 재설정',
+        'cost'      => '需要<code>:amount</code>',
         'cost_tips' => '本次重置流量将扣除余额 :amount!',
         'lack'      => '잔액 부족, 잔액을 충전해주세요',
         'logs'      => '사용자 직접 용량을 초기화',

+ 104 - 43
resources/lang/ko/validation.php

@@ -2,6 +2,7 @@
 
 return [
     'accepted'             => ':attribute을(를) 동의해야 합니다.',
+    'accepted_if'          => ':attribute을(를) :other이(가) :value이면 동의해야 합니다.',
     'active_url'           => ':attribute은(는) 유효한 URL이 아닙니다.',
     'after'                => ':attribute은(는) :date 이후 날짜여야 합니다.',
     'after_or_equal'       => ':attribute은(는) :date 이후 날짜이거나 같은 날짜여야 합니다.',
@@ -12,37 +13,41 @@ return [
     'before'               => ':attribute은(는) :date 이전 날짜여야 합니다.',
     'before_or_equal'      => ':attribute은(는) :date 이전 날짜이거나 같은 날짜여야 합니다.',
     'between'              => [
-        'numeric' => ':attribute의 값은 :min에서 :max 사이여야 합니다.',
+        'array'   => ':attribute의 항목 수는 :min에서 :max 개의 항목이 있어야 합니다.',
         'file'    => ':attribute의 용량은 :min에서 :max 킬로바이트 사이여야 합니다.',
+        'numeric' => ':attribute의 값은 :min에서 :max 사이여야 합니다.',
         'string'  => ':attribute의 길이는 :min에서 :max 문자 사이여야 합니다.',
-        'array'   => ':attribute의 항목 수는 :min에서 :max 개의 항목이 있어야 합니다.',
     ],
     'boolean'              => ':attribute은(는) true 또는 false 이어야 합니다.',
     'confirmed'            => ':attribute 확인 항목이 일치하지 않습니다.',
+    'current_password'     => '패스워드가 일치하지 않습니다.',
     'date'                 => ':attribute은(는) 유효한 날짜가 아닙니다.',
     'date_equals'          => ':attribute은(는) :date과(와) 같은날짜여야합니다.',
     'date_format'          => ':attribute이(가) :format 형식과 일치하지 않습니다.',
+    'declined'             => ':attribute은(는) 거부되어야 합니다.',
+    'declined_if'          => ':other이(가) :value일때 :attribute은(는) 거부되어야 합니다.',
     'different'            => ':attribute와(과) :other은(는) 서로 달라야 합니다.',
     'digits'               => ':attribute은(는) :digits 자리 숫자여야 합니다.',
-    'digits_between'       => ':attribute)은(는) :min에서 :max 자리 사이여야 합니다.',
+    'digits_between'       => ':attribute은(는) :min에서 :max 자리 사이여야 합니다.',
     'dimensions'           => ':attribute은(는) 올바르지 않는 이미지 크기입니다.',
     'distinct'             => ':attribute 필드에 중복된 값이 있습니다.',
     'email'                => ':attribute은(는) 유효한 이메일 주소여야 합니다.',
     'ends_with'            => ':attribute은(는) 다음 중 하나로 끝나야 합니다: :values.',
-    'exists'               => '선택된 :attribute은(는) 올바르지 않습니다.',
+    'enum'                 => ':attribute의 값이 잘못되었습니다.',
+    'exists'               => ':attribute이(가) 존재하지 않습니다.',
     'file'                 => ':attribute은(는) 파일이어야 합니다.',
     'filled'               => ':attribute 필드는 값이 있어야 합니다.',
     'gt'                   => [
-        'numeric' => ':attribute의 값은 :value보다 커야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 많아야 합니다.',
         'file'    => ':attribute의 용량은 :value킬로바이트보다 커야 합니다.',
+        'numeric' => ':attribute의 값은 :value보다 커야 합니다.',
         'string'  => ':attribute의 길이는 :value보다 길어야 합니다.',
-        'array'   => ':attribute의 항목 수는 :value개 보다 많아야 합니다.',
     ],
     'gte'                  => [
-        'numeric' => ':attribute의 값은 :value보다 같거나 커야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 같거나 많아야 합니다.',
         'file'    => ':attribute의 용량은 :value킬로바이트보다 같거나 커야 합니다.',
+        'numeric' => ':attribute의 값은 :value보다 같거나 커야 합니다.',
         'string'  => ':attribute의 길이는 :value보다 같거나 길어야 합니다.',
-        'array'   => ':attribute의 항목 수는 :value개 보다 같거나 많아야 합니다.',
     ],
     'image'                => ':attribute은(는) 이미지여야 합니다.',
     'in'                   => '선택된 :attribute은(는) 올바르지 않습니다.',
@@ -53,30 +58,31 @@ return [
     'ipv6'                 => ':attribute은(는) 유효한 IPv6 주소여야 합니다.',
     'json'                 => ':attribute은(는) JSON 문자열이어야 합니다.',
     'lt'                   => [
-        'numeric' => ':attribute의 값은 :value보다 작아야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 작아야 합니다.',
         'file'    => ':attribute의 용량은 :value킬로바이트보다 작아야 합니다.',
+        'numeric' => ':attribute의 값은 :value보다 작아야 합니다.',
         'string'  => ':attribute의 길이는 :value보다 짧아야 합니다.',
-        'array'   => ':attribute의 항목 수는 :value개 보다 작아야 합니다.',
     ],
     'lte'                  => [
-        'numeric' => ':attribute의 값은 :value보다 같거나 작아야 합니다.',
+        'array'   => ':attribute의 항목 수는 :value개 보다 같거나 작아야 합니다.',
         'file'    => ':attribute의 용량은 :value킬로바이트보다 같거나 작아야 합니다.',
+        'numeric' => ':attribute의 값은 :value보다 같거나 작아야 합니다.',
         'string'  => ':attribute의 길이는 :value보다 같거나 짧아야 합니다.',
-        'array'   => ':attribute의 항목 수는 :value개 보다 같거나 작아야 합니다.',
     ],
+    'mac_address'          => ':attribute은(는) 올바른 MAC 주소가 아닙니다.',
     'max'                  => [
-        'numeric' => ':attribute은(는) :max보다 클 수 없습니다.',
+        'array'   => ':attribute은(는) :max개보다 많을 수 없습니다.',
         'file'    => ':attribute은(는) :max킬로바이트보다 클 수 없습니다.',
+        'numeric' => ':attribute은(는) :max보다 클 수 없습니다.',
         'string'  => ':attribute은(는) :max자보다 클 수 없습니다.',
-        'array'   => ':attribute은(는) :max개보다 많을 수 없습니다.',
     ],
     'mimes'                => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
     'mimetypes'            => ':attribute은(는) 다음의 파일 형식이어야 합니다: :values.',
     'min'                  => [
-        'numeric' => ':attribute은(는) 최소한 :min이어야 합니다.',
+        'array'   => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.',
         'file'    => ':attribute은(는) 최소한 :min킬로바이트이어야 합니다.',
+        'numeric' => ':attribute은(는) 최소한 :min이어야 합니다.',
         'string'  => ':attribute은(는) 최소한 :min자이어야 합니다.',
-        'array'   => ':attribute은(는) 최소한 :min개의 항목이 있어야 합니다.',
     ],
     'multiple_of'          => ':attribute 는 :value 의 배수여야 합니다.',
     'not_in'               => '선택된 :attribute이(가) 올바르지 않습니다.',
@@ -84,8 +90,13 @@ return [
     'numeric'              => ':attribute은(는) 숫자여야 합니다.',
     'password'             => '비밀번호가 잘못되었습니다.',
     'present'              => ':attribute 필드가 있어야 합니다.',
+    'prohibited'           => ':attribute (은)는 금지되어 있습니다.',
+    'prohibited_if'        => ':attribute (은)는 :other 이(가) :value 인 경우 금지되어 있습니다.',
+    'prohibited_unless'    => ':attribute (은)는 :other 이(가) :value 이(가) 아닌 경우 금지되어 있습니다.',
+    'prohibits'            => ':attribute (은)는 :other 을(를) 금지합니다.',
     'regex'                => ':attribute 형식이 올바르지 않습니다.',
     'required'             => ':attribute 필드는 필수입니다.',
+    'required_array_keys'  => 'The :attribute field must contain entries for: :values.',
     'required_if'          => ':other이(가) :value 일 때 :attribute 필드는 필수입니다.',
     'required_unless'      => ':other이(가) :values에 없다면 :attribute 필드는 필수입니다.',
     'required_with'        => ':values이(가) 있는 경우 :attribute 필드는 필수입니다.',
@@ -94,44 +105,94 @@ return [
     'required_without_all' => ':values이(가) 모두 없는 경우 :attribute 필드는 필수입니다.',
     'same'                 => ':attribute와(과) :other은(는) 일치해야 합니다.',
     'size'                 => [
-        'numeric' => ':attribute은(는) :size (이)여야 합니다.',
+        'array'   => ':attribute은(는) :size개의 항목을 포함해야 합니다.',
         'file'    => ':attribute은(는) :size킬로바이트여야 합니다.',
+        'numeric' => ':attribute은(는) :size (이)여야 합니다.',
         'string'  => ':attribute은(는) :size자여야 합니다.',
-        'array'   => ':attribute은(는) :size개의 항목을 포함해야 합니다.',
     ],
     'starts_with'          => ':attribute은(는) :values 중 하나로 시작해야 합니다.',
     'string'               => ':attribute은(는) 문자열이어야 합니다.',
     'timezone'             => ':attribute은(는) 올바른 시간대 이어야 합니다.',
     'unique'               => ':attribute은(는) 이미 사용 중입니다.',
     'uploaded'             => ':attribute을(를) 업로드하지 못했습니다.',
-    'url'                  => ':attribute 형식은 올바르지 않습니다.',
+    'url'                  => ':attribute은(는) 형식은 올바르지 않습니다.',
     'uuid'                 => ':attribute은(는) 유효한UUID여야합니다.',
-
-    'custom' => [
+    'attributes'           => [
+        'address'                  => '주소',
+        'age'                      => '나이',
+        'amount'                   => 'Amount',
+        'area'                     => 'Area',
+        'available'                => 'Available',
+        'birthday'                 => 'Birthday',
+        'body'                     => '몸',
+        'city'                     => '도시',
+        'content'                  => '내용',
+        'country'                  => '나라',
+        'created_at'               => 'Created At',
+        'creator'                  => 'Creator',
+        'current_password'         => 'Current Password',
+        'date'                     => '날짜',
+        'date_of_birth'            => 'Date Of Birth',
+        'day'                      => '일',
+        'deleted_at'               => 'Deleted At',
+        'description'              => '상세설명',
+        'district'                 => 'District',
+        'duration'                 => 'Duration',
+        'email'                    => '이메일',
+        'excerpt'                  => '발췌',
+        'filter'                   => 'Filter',
+        'first_name'               => '이름',
+        'gender'                   => '성별',
+        'group'                    => 'Group',
+        'hour'                     => '시',
+        'image'                    => 'Image',
+        'last_name'                => '성',
+        'lesson'                   => 'Lesson',
+        'line_address_1'           => 'Line Address 1',
+        'line_address_2'           => 'Line Address 2',
+        'message'                  => '메시지',
+        'middle_name'              => 'Middle Name',
+        'minute'                   => '분',
+        'mobile'                   => '모바일',
+        'month'                    => '월',
+        'name'                     => '이름',
+        'national_code'            => 'National Code',
+        'number'                   => 'Number',
+        'password'                 => '비밀번호',
+        'password_confirmation'    => '비밀번호 확인',
+        'phone'                    => '전화번호',
+        'photo'                    => '사진',
+        'postal_code'              => 'Postal Code',
+        'price'                    => '가격',
+        'province'                 => 'Province',
+        'recaptcha_response_field' => 'Recaptcha Response Field',
+        'remember'                 => 'Remember',
+        'restored_at'              => 'Restored At',
+        'result_text_under_image'  => 'Result Text Under Image',
+        'role'                     => '규칙',
+        'second'                   => '초',
+        'sex'                      => '성별',
+        'short_text'               => 'Short Text',
+        'size'                     => 'Size',
+        'state'                    => 'State',
+        'street'                   => 'Street',
+        'student'                  => 'Student',
+        'subject'                  => '주제',
+        'teacher'                  => 'Teacher',
+        'terms'                    => '약관',
+        'test_description'         => 'Test Description',
+        'test_locale'              => 'Test Locale',
+        'test_name'                => 'Test Name',
+        'text'                     => 'Text',
+        'time'                     => '시간',
+        'title'                    => '제목',
+        'updated_at'               => 'Updated At',
+        'username'                 => '유저네임',
+        'year'                     => '년',
+    ],
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => '사용자 지정 메세지',
         ],
     ],
-
-    'attributes' => [
-        'name'                  => '이름',
-        'nickname'              => '닉네임',
-        'username'              => '사용자 이름',
-        'email'                 => '이메일',
-        'password'              => '비밀번호',
-        'password_confirmation' => '비밀번호 확인',
-        'phone'                 => '전화번호',
-        'day'                   => '일 | 일',
-        'month'                 => '월',
-        'year'                  => '년',
-        'hour'                  => '시',
-        'minute'                => '분',
-        'second'                => '초',
-        'title'                 => '제목',
-        'content'               => '내용',
-        'description'           => '표시',
-        'excerpt'               => '요약',
-        'date'                  => '날짜',
-        'time'                  => '시간',
-    ],
 ];

+ 52 - 25
resources/lang/vi.json

@@ -1,27 +1,54 @@
 {
-  "All rights reserved.": "版本所有。",
-  "Hello!": "您好:",
-  "If you did not request a password reset, please ignore this email.": "如果您未申请重设密码,请忽略此邮件。",
-  "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "如果您点击「:actionText」按钮时出现问题,请复制下方链接到浏览器中开启:",
-  "If your issue is not resolved, please create another ticket.": "如果您的问题尚未解决,请另开工单解决。",
-  "Invoice Detail": "订单明细",
-  "Daily Data Usage Report": "线路每日流量报告",
-  "Payment for #:sn has been received! Total amount: :amount.": "您成功支付了订单#:sn,总金额为 :amount。",
-  "Payment Received": "账单付款成功",
-  "Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail:",
-  "Please click on the button below to reset your password.": "请点击下面按钮重置您的密码:",
-  "Regards": "致敬",
-  "Reset Password Notification": "重设密码通知",
-  "Reset Password": "重设密码",
-  "Send Password Reset Link": "发送重设密码链接",
-  "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "感谢您的注册! 在开始之前,您需要通过点击我们刚刚发送至您邮箱中的链接来验证您的电子邮件! 如果您没有收到电子邮件,我们很乐意再发送一封给您。",
-  "Too Many Attempts.": "尝试次数过多",
-  "Too Many Requests": "请求次数过多",
-  "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.": "您的电子邮件尚未验证通过",
-  "You have not responded this ticket in :num hours, System has closed your ticket.": "超过:num小时未回复工单,系统已自动关闭了您的工单",
-  "You must have a valid subscription to view the content in this area!": "您必须拥有有效套餐才可以查看该区域的内容!"
+    "A fresh verification link has been sent to your email address.": "Một liên kết xác minh mới đã được gửi đến địa chỉ email của bạn.",
+    "All rights reserved.": "Đã đăng kí bản quyền",
+    "Before proceeding, please check your email for a verification link.": "Trước khi tiếp tục, vui lòng kiểm tra email của bạn để biết liên kết xác minh.",
+    "click here to request another": "click vào đây để tạo yêu cầu khác",
+    "Confirm Password": "Xác Nhận Mật Khẩu",
+    "E-Mail Address": "Địa chỉ E-Mail",
+    "Forbidden": "Cấm Truy Cập",
+    "Forgot Your Password?": "Quên Mật Khẩu?",
+    "Go Home": "Về trang chủ",
+    "Go to page :page": "Tới trang :page",
+    "Hello!": "Xin chào!",
+    "If you did not create an account, no further action is required.": "Nếu bạn không đăng ký tài khoản này, bạn không cần thực hiện thêm hành động nào.",
+    "If you did not receive the email": "Nếu bạn không nhận được email",
+    "If you did not request a password reset, no further action is required.": "Nếu bạn không yêu cầu đặt lại mật khẩu, bạn không cần thực hiện thêm hành động nào.",
+    "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Nếu bạn gặp vấn đề khi click vào nút \":actionText\", hãy sao chép dán địa chỉ bên dưới\nvào trình duyệt web của bạn:",
+    "Login": "Đăng nhập",
+    "Logout": "Đăng xuất",
+    "Name": "Tên",
+    "Not Found": "Không Tìm Thấy",
+    "of": "trong",
+    "Oh no": "Oh, không",
+    "Page Expired": "Trang Đã Hết Hạn",
+    "Pagination Navigation": "Điều hướng phân trang",
+    "Password": "Mật khẩu",
+    "Please click the button below to verify your email address.": "Vui lòng click vào nút bên dưới để xác minh địa chỉ email của bạn.",
+    "Regards": "Trân trọng",
+    "Register": "Đăng ký",
+    "Remember Me": "Ghi Nhớ",
+    "Reset Password": "Đặt Lại Mật Khẩu",
+    "Reset Password Notification": "Thông Báo Đặt Lại Mật Khẩu",
+    "results": "kết quả",
+    "Send Password Reset Link": "Gửi Đường Dẫn Đặt Lại Mật Khẩu",
+    "Server Error": "Máy Chủ Gặp Sự Cố",
+    "Service Unavailable": "Dịch Vụ Không Khả Dụng",
+    "Showing": "Đang hiển thị",
+    "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "感谢您的注册! 在开始之前,您需要通过点击我们刚刚发送至您邮箱中的链接来验证您的电子邮件! 如果您没有收到电子邮件,我们很乐意再发送一封给您。",
+    "The :attribute must contain at least one letter.": "Trường :attribute phải chứa ít nhất một chữ cái.",
+    "The :attribute must contain at least one number.": "Trường :attribute phải chứa ít nhất một số.",
+    "The :attribute must contain at least one symbol.": "Trường :attribute must phải chứa ít nhất một ký hiệu.",
+    "The :attribute must contain at least one uppercase and one lowercase letter.": "Trường :attribute phải chứa ít nhất một chữ hoa và một chữ thường.",
+    "The given :attribute has appeared in a data leak. Please choose a different :attribute.": ":attribute đã cho đã xuất hiện trong một vụ rò rỉ dữ liệu. Vui lòng chọn :attribute khác.",
+    "This password reset link will expire in :count minutes.": "Đường dẫn lấy lại mật khẩu sẽ hết hạn trong :count phút.",
+    "to": "tới",
+    "Toggle navigation": "Chuyển hướng điều hướng",
+    "Too Many Requests": "Quá Nhiều Yêu Cầu",
+    "Unauthorized": "Không Được Phép",
+    "Verify Email Address": "Xác Minh Địa Chỉ Email",
+    "Verify Your Email Address": "Xác Minh Địa Chỉ Email Của Bạn",
+    "Whoops!": "Rất tiếc!",
+    "You are receiving this email because we received a password reset request for your account.": "Bạn nhận được email này vì chúng tôi đã nhận được yêu cầu đặt lại mật khẩu cho tài khoản của bạn.",
+    "You have not responded this ticket in :num hours, System has closed your ticket.": "超过:num小时未回复工单,系统已自动关闭了您的工单",
+    "You must have a valid subscription to view the content in this area!": "您必须拥有有效套餐才可以查看该区域的内容!"
 }

+ 23 - 10
resources/lang/vi/auth.php

@@ -9,18 +9,24 @@ return [
             'disable'   => '本站关闭了账号激活子系统,您可以直接去登录!',
             'throttle'  => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email',
         ],
+        'promotion' => '账号尚未激活,请先「:action」!',
         'sent'      => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱',
-        'promotion' => ['0' => '账号尚未激活,请点击', '1' => '启动激活程序!'],
     ],
     'aup'             => '可接受使用条款',
     'captcha'         => [
         'attribute' => '验证码',
-        'error'     => ['failed' => '验证码验证失败,请重新输入', 'timeout' => '验证码不合法!可能已过期,请刷新后重试'],
+        'error'     => [
+            'failed'  => '验证码验证失败,请重新输入',
+            'timeout' => '验证码不合法!可能已过期,请刷新后重试',
+        ],
         'required'  => '请正确完成验证码操作',
         'sent'      => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱',
     ],
     'email'           => [
-        'error' => ['banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', 'invalid' => '使用邮箱不在本站支持邮箱列表内'],
+        'error' => [
+            'banned'  => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱',
+            'invalid' => '使用邮箱不在本站支持邮箱列表内',
+        ],
     ],
     'error'           => [
         'account_baned'  => '您的账号已被禁止登录!',
@@ -30,9 +36,12 @@ return [
         'repeat_request' => '请勿重复请求,请刷新后重试',
         'url_timeout'    => '链接已失效, 请重新操作',
     ],
+    'failed'          => 'Thông tin tài khoản không tìm thấy trong hệ thống.',
     'invite'          => [
         'attribute'    => '邀请码',
-        'error'        => ['unavailable' => '邀请码不可用,请重试'],
+        'error'        => [
+            'unavailable' => '邀请码不可用,请重试',
+        ],
         'get'          => '点击获取邀请码',
         'not_required' => '无需邀请码,可直接注册!',
     ],
@@ -41,15 +50,15 @@ return [
     'maintenance'     => '维护',
     'maintenance_tip' => '网站维护中',
     'oauth'           => [
-        'bind_success'    => '绑定成功',
         'bind_failed'     => '绑定失败',
+        'bind_success'    => '绑定成功',
         'login_failed'    => '第三方登录失败!',
+        'rebind_success'  => '重新绑定成功',
         'register'        => '快速注册',
-        'registered'      => '已注册,请直接登录',
         'register_failed' => '注册失败',
-        'rebind_success'  => '重新绑定成功',
-        'unbind_success'  => '解绑成功',
+        'registered'      => '已注册,请直接登录',
         'unbind_failed'   => '解绑失败',
+        'unbind_success'  => '解绑成功',
     ],
     'optional'        => '可选',
     'password'        => [
@@ -73,12 +82,16 @@ return [
     'register'        => [
         'attribute' => '注 册',
         'code'      => '注册验证码',
-        'error'     => ['disable' => '抱歉,本站关闭了注册通道', 'throttle' => '防刷机制已激活,请勿频繁注册'],
-        'promotion' => '还没有账号?请去',
+        'error'     => [
+            'disable'  => '抱歉,本站关闭了注册通道',
+            'throttle' => '防刷机制已激活,请勿频繁注册',
+        ],
         'failed'    => '注册失败,请稍后尝试',
+        'promotion' => '还没有账号?请去',
         'success'   => '注册成功',
     ],
     'remember_me'     => '记住我',
     'request'         => '获 取',
+    'throttle'        => 'Vượt quá số lần đăng nhập cho phép. Vui lòng thử lại sau :seconds giây.',
     'tos'             => '用户条款',
 ];

+ 12 - 10
resources/lang/vi/common.php

@@ -1,6 +1,7 @@
 <?php
 
 return [
+    'hour'            => '{1} 时|{2} 点',
     'account'         => 'Tài khoản',
     'available_date'  => 'Thời gian hiệu lực',
     'created_at'      => '创建时间',
@@ -58,16 +59,17 @@ return [
         'fullscreen' => '全屏',
     ],
     'days'            => [
-        'sun'     => '周日',
-        'mon'     => '周一',
-        'tue'     => '周二',
-        'wed'     => '周三',
-        'thu'     => '周四',
-        'fri'     => '周五',
-        'sat'     => '周六',
-        'weekend' => '周末',
-        'work'    => '工作日',
-        'next'    => '次日',
+        'attribute' => '{1} 天|{2} 日',
+        'sun'       => '周日',
+        'mon'       => '周一',
+        'tue'       => '周二',
+        'wed'       => '周三',
+        'thu'       => '周四',
+        'fri'       => '周五',
+        'sat'       => '周六',
+        'weekend'   => '周末',
+        'work'      => '工作日',
+        'next'      => '次日',
     ],
     'qrcode'          => ':attribute二维码',
     'deleted'         => '已删除',

+ 0 - 4
resources/lang/vi/errors.php

@@ -7,17 +7,13 @@ return [
         'china'   => '检测到中国IP或使用代理访问,禁止访问',
         'oversea' => '检测到海外IP或代理访问,禁止访问',
     ],
-    'http'         => 'HTTP请求类型错误',
     'log'          => '日志',
-    'missing_page' => '找不到网页',
     'refresh'      => '刷 新',
     'refresh_page' => '请刷新页面后,再访问',
     'report'       => '错❌误携带了报告:',
     'safe_enter'   => '安全入口访问',
     'safe_code'    => '请输入安全码',
-    'system'       => '系统错误',
     'title'        => '⚠️错误触发',
-    'unauthorized' => '未授权访问',
     'unsafe_enter' => '非安全入口访问',
     'visit'        => '请访问',
     'whoops'       => '哎呦!',

+ 76 - 0
resources/lang/vi/http-statuses.php

@@ -0,0 +1,76 @@
+<?php
+
+return [
+    '0'            => 'Lỗi Không Xác Định',
+    '100'          => 'Tiếp Tục',
+    '101'          => 'Chuyển Đổi Giao Thức',
+    '102'          => 'Đang Xử Lí',
+    '200'          => 'OK',
+    '201'          => 'Đã Tạo',
+    '202'          => 'Đã Chấp Nhận',
+    '203'          => 'Thông Tin Không Có Thẩm Quyền',
+    '204'          => 'Không Có Nội Dung',
+    '205'          => 'Đặt Lại Nội Dung',
+    '206'          => 'Nội Dung Một Phần',
+    '207'          => 'Đa Trạng Thái',
+    '208'          => 'Đã Được Báo Cáo',
+    '226'          => 'Tôi Đã Sử Dụng',
+    '300'          => 'Nhiều Sự Lựa Chọn',
+    '301'          => 'Chuyển Hướng Vĩnh Viễn',
+    '302'          => 'Tìm Thấy',
+    '303'          => 'Xem Cái Khác',
+    '304'          => 'Không Có Thay Đổi',
+    '305'          => 'Dùng Proxy',
+    '307'          => 'Chuyển Hướng Tạm Thời',
+    '308'          => 'Chuyển Hướng Vĩnh Viễn',
+    '400'          => 'Yêu Cầu Không Hợp Lệ',
+    '401'          => 'Không Được Phép',
+    '402'          => 'Yêu Cầu Thanh Toán',
+    '403'          => 'Cấm Truy Cập',
+    '404'          => 'Không Tìm Thấy',
+    '405'          => 'Phương Thức Không Được Phép',
+    '406'          => 'Không Thể Chấp Nhận',
+    '407'          => 'Yêu Càu Xác Thực Proxy',
+    '408'          => 'Quá Thời Gian Yêu Cầu',
+    '409'          => 'Xung Đột',
+    '410'          => 'Không Còn',
+    '411'          => 'Yêu Cầu Chiều Dài',
+    '412'          => 'Điều Kiện Tiên Quyết Không Thành Công',
+    '413'          => 'Tải Trọng Quá Lớn',
+    '414'          => 'URI Quá Dài',
+    '415'          => 'Loại Phương Tiện Không Được Hỗ Trợ',
+    '416'          => 'Phạm Vi Không Đạt Yêu Cầu',
+    '417'          => 'Kỳ Vọng Không Thành Công',
+    '418'          => 'Tôi là teapot',
+    '419'          => 'Phiên Đã Hết Hạn',
+    '421'          => 'Yêu Cầu Sai Hướng',
+    '422'          => 'Không Thể Xử Lí yêu Cầu',
+    '423'          => 'Đã Khóa',
+    '424'          => 'Không Phụ Thuộc',
+    '426'          => 'Yêu Cầu Nâng Cấp',
+    '428'          => 'Yêu Cầu Điều Kiện Tiên Quyết',
+    '429'          => 'Quá Nhiều Yêu Cầu',
+    '431'          => 'Header Của Yêu Cầu Quá Lớn',
+    '449'          => 'Thử Lại Với',
+    '451'          => 'Không Có Sẵn Vì Lí Do Pháp Lí',
+    '500'          => 'Lỗi Từ Máy Chủ Nội Bộ',
+    '501'          => 'Không Được Thực Hiện',
+    '502'          => 'Cổng Không Hợp Lệ',
+    '503'          => 'Trạng Thái Bảo Trì',
+    '504'          => 'Quá Thời Gian Phản Hồi Của Cổng',
+    '505'          => 'Phiên Bản HTTP Không Được Hỗ Trợ',
+    '506'          => 'Biến Thể Cũng Đàm Phán',
+    '507'          => 'Không Đủ Bộ Nhớ',
+    '508'          => 'Phát Hiện Lặp',
+    '509'          => 'Giới Hạn Băng Thông',
+    '510'          => 'Không Mở Rộng',
+    '511'          => 'Yêu Cầu Xác Thực Mạng',
+    '520'          => 'Không Xác Địng',
+    '521'          => 'Máy Chủ Web Đã Tắt',
+    '522'          => 'Quá Thời Gian Kết Nối',
+    '523'          => 'Nguồn Gốc Không Chấp Nhận',
+    '524'          => 'Xảy Ra Thời Gian Chờ',
+    '525'          => 'Kết Nối SSL Không Thành Công',
+    '526'          => 'Chứng Chỉ SSL Không Hợp Lệ',
+    'unknownError' => 'Lỗi Không Xác Định',
+];

+ 2 - 2
resources/lang/vi/pagination.php

@@ -1,6 +1,6 @@
 <?php
 
 return [
-    'previous' => '&laquo; 上一页',
-    'next'     => '下一页 &raquo;',
+    'next'     => 'Trang trước &raquo;',
+    'previous' => '&laquo; Trang sau',
 ];

+ 5 - 5
resources/lang/vi/passwords.php

@@ -1,9 +1,9 @@
 <?php
 
 return [
-    'reset'     => '密码重置成功!',
-    'sent'      => '密码重置邮件已发送!',
-    'throttled' => '请稍候再试。',
-    'token'     => '密码重置令牌无效。',
-    'user'      => '找不到该邮箱对应的用户。',
+    'reset'     => 'Mật khẩu mới đã được cập nhật!',
+    'sent'      => 'Hướng dẫn cấp lại mật khẩu đã được gửi!',
+    'throttled' => 'Vui lòng đợi trước khi thử lại.',
+    'token'     => 'Mã khôi phục mật khẩu không hợp lệ.',
+    'user'      => 'Không tìm thấy người dùng với địa chỉ email này.',
 ];

+ 8 - 12
resources/lang/vi/user.php

@@ -3,7 +3,7 @@
 return [
     'account'             => [
         'credit'           => '账户余额',
-        'status'           => '账号状态',
+        'status'           => 'Trạng Thái Tài Khoản',
         'level'            => '账号等级',
         'group'            => '所属分组',
         'speed_limit'      => '限速',
@@ -36,7 +36,6 @@ return [
     ],
     'purchase_to_unlock'  => '购买服务后解锁',
     'purchase_required'   => '本功能对非付费用户禁用!请',
-    'more'                => '更多',
     'attribute'           => [
         'node'    => '线路',
         'data'    => '流量',
@@ -66,11 +65,8 @@ return [
         'unbind'     => '解 绑',
     ],
     'coupon'              => [
-        'attribute' => '优惠券',
-        'voucher'   => '代金券',
-        'recharge'  => '充值券码',
-        'discount'  => '优惠',
-        'error'     => [
+        'discount' => '优惠',
+        'error'    => [
             'unknown'  => '无效优惠券',
             'used'     => '优惠券已被使用',
             'expired'  => '优惠券已过期',
@@ -94,8 +90,8 @@ return [
         'generate_failed' => '生成失败:已无邀请码生成名额',
     ],
     'reset_data'          => [
-        ''          => '重置流量',
-        'required'  => '需要',
+        'action'    => '重置流量',
+        'cost'      => '需要<code>:amount</code>',
         'cost_tips' => '本次重置流量将扣除余额 :amount!',
         'lack'      => '余额不足,请充值余额',
         'logs'      => '用户自行重置流量',
@@ -117,9 +113,9 @@ return [
     ],
     'inviter'             => '邀请者',
     'invitee'             => '受邀者',
-    'registered_at'       => '注册时间',
+    'registered_at'       => 'Ngày đăng ký',
     'bought_at'           => '购买日期',
-    'payment_method'      => '支付方式',
+    'payment_method'      => 'Phương thức thanh toán',
     'pay'                 => '支付',
     'input_coupon'        => '请输入充值券码',
     'recharge'            => '充值',
@@ -136,7 +132,7 @@ return [
         'change_amount'      => '充值金额',
         'change_amount_help' => '请输入充值金额',
         'buy'                => '购买',
-        'description'        => '描述',
+        'description'        => 'Mô tả',
         'service'            => '服务',
         'pay_credit'         => '余额支付',
         'pay_online'         => '在线支付',

+ 174 - 113
resources/lang/vi/validation.php

@@ -1,137 +1,198 @@
 <?php
 
 return [
-    '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 或更早。',
+    'accepted'             => 'Trường :attribute phải được chấp nhận.',
+    'accepted_if'          => 'Trường :attribute phải được chấp nhận khi :other là :value.',
+    'active_url'           => 'Trường :attribute không phải là một URL hợp lệ.',
+    'after'                => 'Trường :attribute phải là một ngày sau ngày :date.',
+    'after_or_equal'       => 'Trường :attribute phải là thời gian bắt đầu sau hoặc đúng bằng :date.',
+    'alpha'                => 'Trường :attribute chỉ có thể chứa các chữ cái.',
+    'alpha_dash'           => 'Trường :attribute chỉ có thể chứa chữ cái, số và dấu gạch ngang.',
+    'alpha_num'            => 'Trường :attribute chỉ có thể chứa chữ cái và số.',
+    'array'                => 'Trường :attribute phải là dạng mảng.',
+    'before'               => 'Trường :attribute phải là một ngày trước ngày :date.',
+    'before_or_equal'      => 'Trường :attribute phải là thời gian bắt đầu trước hoặc đúng bằng :date.',
     'between'              => [
-        'numeric' => ':attribute 必须介于 :min - :max 之间。',
-        'file'    => ':attribute 必须介于 :min - :max KB 之间。',
-        'string'  => ':attribute 必须介于 :min - :max 个字符之间。',
-        'array'   => ':attribute 必须只有 :min - :max 个单元。',
+        'array'   => 'Trường :attribute phải có từ :min - :max phần tử.',
+        'file'    => 'Dung lượng tập tin trong trường :attribute phải từ :min - :max kB.',
+        'numeric' => 'Trường :attribute phải nằm trong khoảng :min - :max.',
+        'string'  => 'Trường :attribute phải từ :min - :max kí tự.',
     ],
-    '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 不能为空。',
+    'boolean'              => 'Trường :attribute phải là true hoặc false.',
+    'confirmed'            => 'Giá trị xác nhận trong trường :attribute không khớp.',
+    'current_password'     => 'Mật khẩu không đúng.',
+    'date'                 => 'Trường :attribute không phải là định dạng của ngày-tháng.',
+    'date_equals'          => 'Trường :attribute phải là một ngày bằng với :date.',
+    'date_format'          => 'Trường :attribute không giống với định dạng :format.',
+    'declined'             => 'Trường :attribute phải bị từ chối.',
+    'declined_if'          => 'Trường :attribute phải bị từ chối khi :other là :value.',
+    'different'            => 'Trường :attribute và :other phải khác nhau.',
+    'digits'               => 'Độ dài của trường :attribute phải gồm :digits chữ số.',
+    'digits_between'       => 'Độ dài của trường :attribute phải nằm trong khoảng :min and :max chữ số.',
+    'dimensions'           => 'Trường :attribute có kích thước không hợp lệ.',
+    'distinct'             => 'Trường :attribute có giá trị trùng lặp.',
+    'email'                => 'Trường :attribute phải là một địa chỉ email hợp lệ.',
+    'ends_with'            => 'Trường :attribute phải kết thúc bằng một trong những giá trị sau: :values',
+    'enum'                 => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
+    'exists'               => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
+    'file'                 => 'Trường :attribute phải là một tệp tin.',
+    'filled'               => 'Trường :attribute không được bỏ trống.',
     'gt'                   => [
-        'numeric' => ':attribute 必须大于 :value。',
-        'file'    => ':attribute 必须大于 :value KB。',
-        'string'  => ':attribute 必须多于 :value 个字符。',
-        'array'   => ':attribute 必须多于 :value 个元素。',
+        'array'   => 'Mảng :attribute phải có nhiều hơn :value phần tử.',
+        'file'    => 'Dung lượng trường :attribute phải lớn hơn :value kilobytes.',
+        'numeric' => 'Giá trị trường :attribute phải lớn hơn :value.',
+        'string'  => 'Độ dài trường :attribute phải nhiều hơn :value kí tự.',
     ],
     'gte'                  => [
-        'numeric' => ':attribute 必须大于或等于 :value。',
-        'file'    => ':attribute 必须大于或等于 :value KB。',
-        'string'  => ':attribute 必须多于或等于 :value 个字符。',
-        'array'   => ':attribute 必须多于或等于 :value 个元素。',
+        'array'   => 'Mảng :attribute phải có ít nhất :value phần tử.',
+        'file'    => 'Dung lượng trường :attribute phải lớn hơn hoặc bằng :value kilobytes.',
+        'numeric' => 'Giá trị trường :attribute phải lớn hơn hoặc bằng :value.',
+        'string'  => 'Độ dài trường :attribute phải lớn hơn hoặc bằng :value kí tự.',
     ],
-    'image'                => ':attribute 必须是图片。',
-    'in'                   => '已选的属性 :attribute 无效。',
-    'in_array'             => ':attribute 必须在 :other 中。',
-    'integer'              => ':attribute 必须是整数。',
-    'ip'                   => ':attribute 必须是有效的 IP 地址。',
-    'ipv4'                 => ':attribute 必须是有效的 IPv4 地址。',
-    'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',
-    'json'                 => ':attribute 必须是正确的 JSON 格式。',
+    'image'                => 'Trường :attribute phải là định dạng hình ảnh.',
+    'in'                   => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
+    'in_array'             => 'Trường :attribute phải thuộc tập cho phép: :other.',
+    'integer'              => 'Trường :attribute phải là một số nguyên.',
+    'ip'                   => 'Trường :attribute phải là một địa chỉ IP.',
+    'ipv4'                 => 'Trường :attribute phải là một địa chỉ IPv4.',
+    'ipv6'                 => 'Trường :attribute phải là một địa chỉ IPv6.',
+    'json'                 => 'Trường :attribute phải là một chuỗi JSON.',
     'lt'                   => [
-        'numeric' => ':attribute 必须小于 :value。',
-        'file'    => ':attribute 必须小于 :value KB。',
-        'string'  => ':attribute 必须少于 :value 个字符。',
-        'array'   => ':attribute 必须少于 :value 个元素。',
+        'array'   => 'Mảng :attribute phải có ít hơn :value phần tử.',
+        'file'    => 'Dung lượng trường :attribute phải nhỏ hơn :value kilobytes.',
+        'numeric' => 'Giá trị trường :attribute phải nhỏ hơn :value.',
+        'string'  => 'Độ dài trường :attribute phải nhỏ hơn :value kí tự.',
     ],
     'lte'                  => [
-        'numeric' => ':attribute 必须小于或等于 :value。',
-        'file'    => ':attribute 必须小于或等于 :value KB。',
-        'string'  => ':attribute 必须少于或等于 :value 个字符。',
-        'array'   => ':attribute 必须少于或等于 :value 个元素。',
+        'array'   => 'Mảng :attribute không được có nhiều hơn :value phần tử.',
+        'file'    => 'Dung lượng trường :attribute phải nhỏ hơn hoặc bằng :value kilobytes.',
+        'numeric' => 'Giá trị trường :attribute phải nhỏ hơn hoặc bằng :value.',
+        'string'  => 'Độ dài trường :attribute phải nhỏ hơn hoặc bằng :value kí tự.',
     ],
+    'mac_address'          => 'Trường :attribute phải là một địa chỉ MAC hợp lệ.',
     'max'                  => [
-        'numeric' => ':attribute 不能大于 :max。',
-        'file'    => ':attribute 不能大于 :max KB。',
-        'string'  => ':attribute 不能大于 :max 个字符。',
-        'array'   => ':attribute 最多只有 :max 个单元。',
+        'array'   => 'Trường :attribute không được lớn hơn :max phần tử.',
+        'file'    => 'Dung lượng tập tin trong trường :attribute không được lớn hơn :max kB.',
+        'numeric' => 'Trường :attribute không được lớn hơn :max.',
+        'string'  => 'Trường :attribute không được lớn hơn :max kí tự.',
     ],
-    'mimes'                => ':attribute 必须是一个 :values 类型的文件。',
-    'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',
+    'mimes'                => 'Trường :attribute phải là một tập tin có định dạng: :values.',
+    'mimetypes'            => 'Trường :attribute phải là một tập tin có định dạng: :values.',
     'min'                  => [
-        'numeric' => ':attribute 必须大于等于 :min。',
-        'file'    => ':attribute 大小不能小于 :min KB。',
-        'string'  => ':attribute 至少为 :min 个字符。',
-        'array'   => ':attribute 至少有 :min 个单元。',
+        'array'   => 'Trường :attribute phải có tối thiểu :min phần tử.',
+        'file'    => 'Dung lượng tập tin trong trường :attribute phải tối thiểu :min kB.',
+        'numeric' => 'Trường :attribute phải tối thiểu là :min.',
+        'string'  => 'Trường :attribute phải có tối thiểu :min kí tự.',
     ],
-    '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 必须相同。',
+    'multiple_of'          => 'Trường :attribute phải là bội số của :value',
+    'not_in'               => 'Giá trị đã chọn trong trường :attribute không hợp lệ.',
+    'not_regex'            => 'Trường :attribute có định dạng không hợp lệ.',
+    'numeric'              => 'Trường :attribute phải là một số.',
+    'password'             => 'Mật khẩu không đúng.',
+    'present'              => 'Trường :attribute phải được cung cấp.',
+    'prohibited'           => 'Trường :attribute bị cấm.',
+    'prohibited_if'        => 'Trường :attribute bị cấm khi :other là :value.',
+    'prohibited_unless'    => 'Trường :attribute bị cấm trừ khi :other là một trong :values.',
+    'prohibits'            => 'Trường :attribute cấm :other từ thời điểm hiện tại.',
+    'regex'                => 'Trường :attribute có định dạng không hợp lệ.',
+    'required'             => 'Trường :attribute không được bỏ trống.',
+    'required_array_keys'  => 'Trường :attribute phải bao gồm các mục nhập cho: :values.',
+    'required_if'          => 'Trường :attribute không được bỏ trống khi trường :other là :value.',
+    'required_unless'      => 'Trường :attribute không được bỏ trống trừ khi :other là :values.',
+    'required_with'        => 'Trường :attribute không được bỏ trống khi một trong :values có giá trị.',
+    'required_with_all'    => 'Trường :attribute không được bỏ trống khi tất cả :values có giá trị.',
+    'required_without'     => 'Trường :attribute không được bỏ trống khi một trong :values không có giá trị.',
+    'required_without_all' => 'Trường :attribute không được bỏ trống khi tất cả :values không có giá trị.',
+    'same'                 => 'Trường :attribute và :other phải giống nhau.',
     'size'                 => [
-        'numeric' => ':attribute 大小必须为 :size。',
-        'file'    => ':attribute 大小必须为 :size KB。',
-        'string'  => ':attribute 必须是 :size 个字符。',
-        'array'   => ':attribute 必须为 :size 个单元。',
+        'array'   => 'Trường :attribute phải chứa :size phần tử.',
+        'file'    => 'Dung lượng tập tin trong trường :attribute phải bằng :size kB.',
+        'numeric' => 'Trường :attribute phải bằng :size.',
+        'string'  => 'Trường :attribute phải chứa :size kí tự.',
     ],
-    'starts_with'          => ':attribute 必须以 :values 为开头。',
-    'string'               => ':attribute 必须是一个字符串。',
-    'timezone'             => ':attribute 必须是一个合法的时区值。',
-    'unique'               => ':attribute 已经存在。',
-    'uploaded'             => ':attribute 上传失败。',
-    'url'                  => ':attribute 格式不正确。',
-    'uuid'                 => ':attribute 必须是有效的 UUID。',
-
-    'custom' => [
+    'starts_with'          => 'Trường :attribute phải được bắt đầu bằng một trong những giá trị sau: :values',
+    'string'               => 'Trường :attribute phải là một chuỗi kí tự.',
+    'timezone'             => 'Trường :attribute phải là một múi giờ hợp lệ.',
+    'unique'               => 'Trường :attribute đã có trong cơ sở dữ liệu.',
+    'uploaded'             => 'Trường :attribute tải lên thất bại.',
+    'url'                  => 'Trường :attribute không giống với định dạng một URL.',
+    'uuid'                 => 'Trường :attribute phải là một chuỗi UUID hợp lệ.',
+    'attributes'           => [
+        'address'                  => 'địa chỉ',
+        'age'                      => 'tuổi',
+        'amount'                   => 'Amount',
+        'area'                     => 'khu vực',
+        'available'                => 'có sẵn',
+        'birthday'                 => 'ngày sinh nhật',
+        'body'                     => 'nội dung',
+        'city'                     => 'thành phố',
+        'content'                  => 'nội dung',
+        'country'                  => 'quốc gia',
+        'created_at'               => 'Tạo lúc',
+        'creator'                  => 'Người sáng tạo',
+        'current_password'         => 'Mật khẩu hiện tại',
+        'date'                     => 'ngày',
+        'date_of_birth'            => 'Ngày sinh',
+        'day'                      => 'ngày',
+        'deleted_at'               => 'Xoá lúc',
+        'description'              => 'mô tả',
+        'district'                 => 'Quận/Huyện',
+        'duration'                 => 'Duration',
+        'email'                    => 'email',
+        'excerpt'                  => 'trích dẫn',
+        'filter'                   => 'Lọc',
+        'first_name'               => 'tên',
+        'gender'                   => 'giới tính',
+        'group'                    => 'Group',
+        'hour'                     => 'giờ',
+        'image'                    => 'Hình ảnh',
+        'last_name'                => 'họ',
+        'lesson'                   => 'Bài học',
+        'line_address_1'           => 'Line Address 1',
+        'line_address_2'           => 'Line Address 2',
+        'message'                  => 'lời nhắn',
+        'middle_name'              => 'Tên đệm',
+        'minute'                   => 'phút',
+        'mobile'                   => 'di động',
+        'month'                    => 'tháng',
+        'name'                     => 'tên',
+        'national_code'            => 'Mã quốc gia',
+        'number'                   => 'Số',
+        'password'                 => 'mật khẩu',
+        'password_confirmation'    => 'xác nhận mật khẩu',
+        'phone'                    => 'số điện thoại',
+        'photo'                    => 'Photo',
+        'postal_code'              => 'Mã bưu điện',
+        'price'                    => 'Giá',
+        'province'                 => 'Tỉnh/Thành Phố',
+        'recaptcha_response_field' => 'Recaptcha Response Field',
+        'remember'                 => 'Ghi nhớ',
+        'restored_at'              => 'Restored At',
+        'result_text_under_image'  => 'Result Text Under Image',
+        'role'                     => 'Role',
+        'second'                   => 'giây',
+        'sex'                      => 'giới tính',
+        'short_text'               => 'Văn bản ngắn',
+        'size'                     => 'kích thước',
+        'state'                    => 'Tình trạng',
+        'street'                   => 'Đường',
+        'student'                  => 'Học sinh',
+        'subject'                  => 'tiêu đề',
+        'teacher'                  => 'Giáo viên',
+        'terms'                    => 'Điều kiện',
+        'test_description'         => 'Test Description',
+        'test_locale'              => 'Test Locale',
+        'test_name'                => 'Test Name',
+        'text'                     => 'Văn bản',
+        'time'                     => 'thời gian',
+        'title'                    => 'tiêu đề',
+        'updated_at'               => 'Cập nhật lúc',
+        'username'                 => 'tên đăng nhập',
+        'year'                     => 'năm',
+    ],
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => 'custom-message',
         ],
     ],
-
-    'attributes' => [
-        'name'                  => '名称',
-        'nickname'              => '昵称',
-        'username'              => '用户名',
-        'email'                 => '邮箱',
-        'password'              => '密码',
-        'password_confirmation' => '确认密码',
-        'phone'                 => '电话',
-        'day'                   => '{1} 天|{2} 日',
-        'month'                 => '月',
-        'year'                  => '年',
-        'hour'                  => '{1} 时|{2} 点',
-        'minute'                => '分',
-        'second'                => '秒',
-        'title'                 => '标题',
-        'content'               => '内容',
-        'description'           => '描述',
-        'excerpt'               => '摘要',
-        'date'                  => '日期',
-        'time'                  => '时间',
-    ],
 ];

+ 52 - 26
resources/lang/zh_CN.json

@@ -1,28 +1,54 @@
 {
-  "All rights reserved.": "版本所有。",
-  "Hello!": "您好:",
-  "If you did not request a password reset, please ignore this 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」按钮时出现问题,请复制下方链接到浏览器中开启:",
-  "If your issue is not resolved, please create another ticket.": "如果您的问题尚未解决,请另开工单解决。",
-  "Invoice Detail": "订单明细",
-  "Daily Data Usage Report": "线路每日流量报告",
-  "Payment for #:sn has been received! Total amount: :amount.": "您成功支付了订单#:sn,总金额为 :amount。",
-  "Payment Received": "账单付款成功",
-  "Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail:",
-  "Please click on the button below to reset your password.": "请点击下面按钮重置您的密码:",
-  "Regards": "致敬",
-  "Reset Password Notification": "重设密码通知",
-  "Reset Password": "重设密码",
-  "Send Password Reset Link": "发送重设密码链接",
-  "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "感谢您的注册! 在开始之前,您需要通过点击我们刚刚发送至您邮箱中的链接来验证您的电子邮件! 如果您没有收到电子邮件,我们很乐意再发送一封给您。",
-  "Too Many Attempts.": "尝试次数过多",
-  "Too Many Requests": "请求次数过多",
-  "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.": "您的电子邮件尚未验证通过",
-  "You have not responded this ticket in :num hours, System has closed your ticket.": "超过:num小时未回复工单,系统已自动关闭了您的工单",
-  "You must have a valid subscription to view the content in this area!": "您必须拥有有效套餐才可以查看该区域的内容!"
+    "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": "电子邮件地址",
+    "Forbidden": "访问被拒绝",
+    "Forgot Your Password?": "忘记密码?",
+    "Go Home": "回首页",
+    "Go to page :page": "前往第 :page 页",
+    "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」按钮时遇到问题,请复制下方链接到浏览器中访问:",
+    "Login": "登录",
+    "Logout": "登出",
+    "Name": "姓名",
+    "Not Found": "页面不存在",
+    "of": "于",
+    "Oh no": "不好了",
+    "Page Expired": "页面会话已超时",
+    "Pagination Navigation": "分页导航",
+    "Password": "密码",
+    "Please click the button below to verify your email address.": "请点击下面按钮验证您的 E-mail:",
+    "Regards": "致敬",
+    "Register": "注册",
+    "Remember Me": "记住我",
+    "Reset Password": "重置密码",
+    "Reset Password Notification": "重置密码通知",
+    "results": "结果",
+    "Send Password Reset Link": "发送重设密码链接",
+    "Server Error": "服务器错误",
+    "Service Unavailable": "服务不可用",
+    "Showing": "显示中",
+    "Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one.": "感谢您的注册! 在开始之前,您需要通过点击我们刚刚发送至您邮箱中的链接来验证您的电子邮件! 如果您没有收到电子邮件,我们很乐意再发送一封给您。",
+    "The :attribute must contain at least one letter.": ":attribute 至少包含一个字母。",
+    "The :attribute must contain at least one number.": ":attribute 至少包含一个数字。",
+    "The :attribute must contain at least one symbol.": ":attribute 至少包含一个符号。",
+    "The :attribute must contain at least one uppercase and one lowercase letter.": ":attribute 至少包含一个大写字母和一个小写字母。",
+    "The given :attribute has appeared in a data leak. Please choose a different :attribute.": "给定的 :attribute 出现在数据泄漏中。请选择不同的 :attribute。",
+    "This password reset link will expire in :count minutes.": "这个重设密码链接将会在 :count 分钟后失效。",
+    "to": "至",
+    "Toggle navigation": "切换导航",
+    "Too Many Requests": "请求次数过多。",
+    "Unauthorized": "未授权",
+    "Verify Email Address": "验证 E-mail",
+    "Verify Your Email Address": "验证您的邮件地址",
+    "Whoops!": "哎呀!",
+    "You are receiving this email because we received a password reset request for your account.": "您收到此电子邮件是因为我们收到了您帐户的密码重设请求。",
+    "You have not responded this ticket in :num hours, System has closed your ticket.": "超过:num小时未回复工单,系统已自动关闭了您的工单",
+    "You must have a valid subscription to view the content in this area!": "您必须拥有有效套餐才可以查看该区域的内容!"
 }

+ 1 - 1
resources/lang/zh_CN/admin.php

@@ -408,7 +408,7 @@ return [
         'name_hint'               => '会用于前端显示',
         'sn_hint'                 => '提供给用户使用卡券的卡券,留空则默认为8位随机码',
         'type'                    => [
-            'voucher'  => '抵用券',
+            'voucher'  => '代金券',
             'discount' => '折扣券',
             'charge'   => '充值券',
         ],

+ 23 - 10
resources/lang/zh_CN/auth.php

@@ -9,18 +9,24 @@ return [
             'disable'   => '本站关闭了账号激活子系统,您可以直接去登录!',
             'throttle'  => '您已触发本站激活请求限制机制,请勿频繁操作!如有问题,请联系:email',
         ],
+        'promotion' => '账号尚未激活,请先「:action」!',
         'sent'      => '激活链接已发送至您的邮箱,请稍作等待或查看垃圾箱',
-        'promotion' => ['0' => '账号尚未激活,请点击', '1' => '启动激活程序!'],
     ],
     'aup'             => '可接受使用条款',
     'captcha'         => [
         'attribute' => '验证码',
-        'error'     => ['failed' => '验证码验证失败,请重新输入', 'timeout' => '验证码不合法!可能已过期,请刷新后重试'],
+        'error'     => [
+            'failed'  => '验证码验证失败,请重新输入',
+            'timeout' => '验证码不合法!可能已过期,请刷新后重试',
+        ],
         'required'  => '请正确完成验证码操作',
         'sent'      => '验证码已发送至您的邮箱,请稍作等待或查看垃圾箱',
     ],
     'email'           => [
-        'error' => ['banned' => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱', 'invalid' => '使用邮箱不在本站支持邮箱列表内'],
+        'error' => [
+            'banned'  => '本站屏蔽了您使用的邮箱服务商,请使用其他有效邮箱',
+            'invalid' => '使用邮箱不在本站支持邮箱列表内',
+        ],
     ],
     'error'           => [
         'account_baned'  => '您的账号已被禁止登录!',
@@ -30,9 +36,12 @@ return [
         'repeat_request' => '请勿重复请求,请刷新后重试',
         'url_timeout'    => '链接已失效, 请重新操作',
     ],
+    'failed'          => '用户名或密码错误。',
     'invite'          => [
         'attribute'    => '邀请码',
-        'error'        => ['unavailable' => '邀请码不可用,请重试'],
+        'error'        => [
+            'unavailable' => '邀请码不可用,请重试',
+        ],
         'get'          => '点击获取邀请码',
         'not_required' => '无需邀请码,可直接注册!',
     ],
@@ -41,15 +50,15 @@ return [
     'maintenance'     => '维护',
     'maintenance_tip' => '网站维护中',
     'oauth'           => [
-        'bind_success'    => '绑定成功',
         'bind_failed'     => '绑定失败',
+        'bind_success'    => '绑定成功',
         'login_failed'    => '第三方登录失败!',
+        'rebind_success'  => '重新绑定成功',
         'register'        => '快速注册',
-        'registered'      => '已注册,请直接登录',
         'register_failed' => '注册失败',
-        'rebind_success'  => '重新绑定成功',
-        'unbind_success'  => '解绑成功',
+        'registered'      => '已注册,请直接登录',
         'unbind_failed'   => '解绑失败',
+        'unbind_success'  => '解绑成功',
     ],
     'optional'        => '可选',
     'password'        => [
@@ -73,12 +82,16 @@ return [
     'register'        => [
         'attribute' => '注 册',
         'code'      => '注册验证码',
-        'error'     => ['disable' => '抱歉,本站关闭了注册通道', 'throttle' => '防刷机制已激活,请勿频繁注册'],
-        'promotion' => '还没有账号?请去',
+        'error'     => [
+            'disable'  => '抱歉,本站关闭了注册通道',
+            'throttle' => '防刷机制已激活,请勿频繁注册',
+        ],
         'failed'    => '注册失败,请稍后尝试',
+        'promotion' => '还没有账号?请去',
         'success'   => '注册成功',
     ],
     'remember_me'     => '记住我',
     'request'         => '获 取',
+    'throttle'        => '您尝试的登录次数过多,请 :seconds 秒后再试。',
     'tos'             => '用户条款',
 ];

+ 12 - 10
resources/lang/zh_CN/common.php

@@ -1,6 +1,7 @@
 <?php
 
 return [
+    'hour'            => '{1} 时|{2} 点',
     'account'         => '账号',
     'available_date'  => '有效期',
     'created_at'      => '创建时间',
@@ -58,16 +59,17 @@ return [
         'fullscreen' => '全屏',
     ],
     'days'            => [
-        'sun'     => '周日',
-        'mon'     => '周一',
-        'tue'     => '周二',
-        'wed'     => '周三',
-        'thu'     => '周四',
-        'fri'     => '周五',
-        'sat'     => '周六',
-        'weekend' => '周末',
-        'work'    => '工作日',
-        'next'    => '次日',
+        'attribute' => '{1} 天|{2} 日',
+        'sun'       => '周日',
+        'mon'       => '周一',
+        'tue'       => '周二',
+        'wed'       => '周三',
+        'thu'       => '周四',
+        'fri'       => '周五',
+        'sat'       => '周六',
+        'weekend'   => '周末',
+        'work'      => '工作日',
+        'next'      => '次日',
     ],
     'qrcode'          => ':attribute二维码',
     'deleted'         => '已删除',

+ 0 - 4
resources/lang/zh_CN/errors.php

@@ -7,17 +7,13 @@ return [
         'china'   => '检测到中国IP或使用代理访问,禁止访问',
         'oversea' => '检测到海外IP或代理访问,禁止访问',
     ],
-    'http'         => 'HTTP请求类型错误',
     'log'          => '日志',
-    'missing_page' => '找不到网页',
     'refresh'      => '刷 新',
     'refresh_page' => '请刷新页面后,再访问',
     'report'       => '错❌误携带了报告:',
     'safe_enter'   => '安全入口访问',
     'safe_code'    => '请输入安全码',
-    'system'       => '系统错误',
     'title'        => '⚠️错误触发',
-    'unauthorized' => '未授权访问',
     'unsafe_enter' => '非安全入口访问',
     'visit'        => '请访问',
     'whoops'       => '哎呦!',

+ 76 - 0
resources/lang/zh_CN/http-statuses.php

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

+ 1 - 1
resources/lang/zh_CN/model.php

@@ -5,7 +5,7 @@ return [
         'id'             => '用户ID',
         'attribute'      => '用户',
         'nickname'       => '昵称',
-        'username'       => '账号',
+        'username'       => '用户名',
         'password'       => '密码',
         'credit'         => '余额',
         'invite_num'     => '可用邀请码',

+ 1 - 1
resources/lang/zh_CN/pagination.php

@@ -1,6 +1,6 @@
 <?php
 
 return [
-    'previous' => '&laquo; 上一页',
     'next'     => '下一页 &raquo;',
+    'previous' => '&laquo; 上一页',
 ];

+ 4 - 8
resources/lang/zh_CN/user.php

@@ -36,7 +36,6 @@ return [
     ],
     'purchase_to_unlock'  => '购买服务后解锁',
     'purchase_required'   => '本功能对非付费用户禁用!请',
-    'more'                => '更多',
     'attribute'           => [
         'node'    => '线路',
         'data'    => '流量',
@@ -66,11 +65,8 @@ return [
         'unbind'     => '解 绑',
     ],
     'coupon'              => [
-        'attribute' => '优惠券',
-        'voucher'   => '代金券',
-        'recharge'  => '充值券码',
-        'discount'  => '优惠',
-        'error'     => [
+        'discount' => '优惠',
+        'error'    => [
             'unknown'  => '无效优惠券',
             'used'     => '优惠券已被使用',
             'expired'  => '优惠券已过期',
@@ -94,8 +90,8 @@ return [
         'generate_failed' => '生成失败:已无邀请码生成名额',
     ],
     'reset_data'          => [
-        ''          => '重置流量',
-        'required'  => '需要',
+        'action'    => '重置流量',
+        'cost'      => '需要<code>:amount</code>',
         'cost_tips' => '本次重置流量将扣除余额 :amount!',
         'lack'      => '余额不足,请充值余额',
         'logs'      => '用户自行重置流量',

+ 102 - 41
resources/lang/zh_CN/validation.php

@@ -2,6 +2,7 @@
 
 return [
     'accepted'             => '您必须接受 :attribute。',
+    'accepted_if'          => '当 :other 为 :value 时,必须接受 :attribute。',
     'active_url'           => ':attribute 不是一个有效的网址。',
     'after'                => ':attribute 必须要晚于 :date。',
     'after_or_equal'       => ':attribute 必须要等于 :date 或更晚。',
@@ -12,16 +13,19 @@ return [
     'before'               => ':attribute 必须要早于 :date。',
     'before_or_equal'      => ':attribute 必须要等于 :date 或更早。',
     'between'              => [
-        'numeric' => ':attribute 必须介于 :min - :max 之间。',
+        'array'   => ':attribute 必须只有 :min - :max 个单元。',
         'file'    => ':attribute 必须介于 :min - :max KB 之间。',
+        'numeric' => ':attribute 必须介于 :min - :max 之间。',
         'string'  => ':attribute 必须介于 :min - :max 个字符之间。',
-        'array'   => ':attribute 必须只有 :min - :max 个单元。',
     ],
     'boolean'              => ':attribute 必须为布尔值。',
     'confirmed'            => ':attribute 两次输入不一致。',
+    'current_password'     => '密码错误。',
     'date'                 => ':attribute 不是一个有效的日期。',
     'date_equals'          => ':attribute 必须要等于 :date。',
     'date_format'          => ':attribute 的格式必须为 :format。',
+    'declined'             => ':attribute 必须是拒绝的。',
+    'declined_if'          => '当 :other 为 :value 时字段 :attribute 必须是拒绝的。',
     'different'            => ':attribute 和 :other 必须不同。',
     'digits'               => ':attribute 必须是 :digits 位数字。',
     'digits_between'       => ':attribute 必须是介于 :min 和 :max 位的数字。',
@@ -29,20 +33,21 @@ return [
     'distinct'             => ':attribute 已经存在。',
     'email'                => ':attribute 不是一个合法的邮箱。',
     'ends_with'            => ':attribute 必须以 :values 为结尾。',
+    'enum'                 => ':attribute 值不正确。',
     'exists'               => ':attribute 不存在。',
     'file'                 => ':attribute 必须是文件。',
     'filled'               => ':attribute 不能为空。',
     'gt'                   => [
-        'numeric' => ':attribute 必须大于 :value。',
+        'array'   => ':attribute 必须多于 :value 个元素。',
         'file'    => ':attribute 必须大于 :value KB。',
+        'numeric' => ':attribute 必须大于 :value。',
         'string'  => ':attribute 必须多于 :value 个字符。',
-        'array'   => ':attribute 必须多于 :value 个元素。',
     ],
     'gte'                  => [
-        'numeric' => ':attribute 必须大于或等于 :value。',
+        'array'   => ':attribute 必须多于或等于 :value 个元素。',
         'file'    => ':attribute 必须大于或等于 :value KB。',
+        'numeric' => ':attribute 必须大于或等于 :value。',
         'string'  => ':attribute 必须多于或等于 :value 个字符。',
-        'array'   => ':attribute 必须多于或等于 :value 个元素。',
     ],
     'image'                => ':attribute 必须是图片。',
     'in'                   => '已选的属性 :attribute 无效。',
@@ -53,39 +58,45 @@ return [
     'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',
     'json'                 => ':attribute 必须是正确的 JSON 格式。',
     'lt'                   => [
-        'numeric' => ':attribute 必须小于 :value。',
+        'array'   => ':attribute 必须少于 :value 个元素。',
         'file'    => ':attribute 必须小于 :value KB。',
+        'numeric' => ':attribute 必须小于 :value。',
         'string'  => ':attribute 必须少于 :value 个字符。',
-        'array'   => ':attribute 必须少于 :value 个元素。',
     ],
     'lte'                  => [
-        'numeric' => ':attribute 必须小于或等于 :value。',
+        'array'   => ':attribute 必须少于或等于 :value 个元素。',
         'file'    => ':attribute 必须小于或等于 :value KB。',
+        'numeric' => ':attribute 必须小于或等于 :value。',
         'string'  => ':attribute 必须少于或等于 :value 个字符。',
-        'array'   => ':attribute 必须少于或等于 :value 个元素。',
     ],
+    'mac_address'          => ':attribute 必须是一个有效的 MAC 地址。',
     'max'                  => [
-        'numeric' => ':attribute 不能大于 :max。',
+        'array'   => ':attribute 最多只有 :max 个单元。',
         'file'    => ':attribute 不能大于 :max KB。',
+        'numeric' => ':attribute 不能大于 :max。',
         'string'  => ':attribute 不能大于 :max 个字符。',
-        'array'   => ':attribute 最多只有 :max 个单元。',
     ],
     'mimes'                => ':attribute 必须是一个 :values 类型的文件。',
     'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',
     'min'                  => [
-        'numeric' => ':attribute 必须大于等于 :min。',
+        'array'   => ':attribute 至少有 :min 个单元。',
         'file'    => ':attribute 大小不能小于 :min KB。',
+        'numeric' => ':attribute 必须大于等于 :min。',
         'string'  => ':attribute 至少为 :min 个字符。',
-        'array'   => ':attribute 至少有 :min 个单元。',
     ],
-    'multiple_of'          => 'The :attribute must be a multiple of :value',
+    'multiple_of'          => ':attribute 必须是 :value 中的多个值。',
     'not_in'               => '已选的属性 :attribute 非法。',
     'not_regex'            => ':attribute 的格式错误。',
     'numeric'              => ':attribute 必须是一个数字。',
     'password'             => '密码错误',
     'present'              => ':attribute 必须存在。',
+    'prohibited'           => ':attribute 字段被禁止。',
+    'prohibited_if'        => '当 :other 为 :value 时,禁止 :attribute 字段。',
+    'prohibited_unless'    => ':attribute 字段被禁止,除非 :other 位于 :values 中。',
+    'prohibits'            => ':attribute 字段禁止出现 :other。',
     'regex'                => ':attribute 格式不正确。',
     'required'             => ':attribute 不能为空。',
+    'required_array_keys'  => ':attribute 至少包含指定的键::values.',
     'required_if'          => '当 :other 为 :value 时 :attribute 不能为空。',
     'required_unless'      => '当 :other 不为 :values 时 :attribute 不能为空。',
     'required_with'        => '当 :values 存在时 :attribute 不能为空。',
@@ -94,10 +105,10 @@ return [
     'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',
     'same'                 => ':attribute 和 :other 必须相同。',
     'size'                 => [
-        'numeric' => ':attribute 大小必须为 :size。',
+        'array'   => ':attribute 必须为 :size 个单元。',
         'file'    => ':attribute 大小必须为 :size KB。',
+        'numeric' => ':attribute 大小必须为 :size。',
         'string'  => ':attribute 必须是 :size 个字符。',
-        'array'   => ':attribute 必须为 :size 个单元。',
     ],
     'starts_with'          => ':attribute 必须以 :values 为开头。',
     'string'               => ':attribute 必须是一个字符串。',
@@ -106,32 +117,82 @@ return [
     'uploaded'             => ':attribute 上传失败。',
     'url'                  => ':attribute 格式不正确。',
     'uuid'                 => ':attribute 必须是有效的 UUID。',
-
-    'custom' => [
+    'attributes'           => [
+        'address'                  => '地址',
+        'age'                      => '年龄',
+        'amount'                   => 'Amount',
+        'area'                     => 'Area',
+        'available'                => '可用的',
+        'birthday'                 => 'Birthday',
+        'body'                     => 'Body',
+        'city'                     => '城市',
+        'content'                  => '内容',
+        'country'                  => '国家',
+        'created_at'               => 'Created At',
+        'creator'                  => 'Creator',
+        'current_password'         => 'Current Password',
+        'date'                     => '日期',
+        'date_of_birth'            => 'Date Of Birth',
+        'day'                      => '天',
+        'deleted_at'               => 'Deleted At',
+        'description'              => '描述',
+        'district'                 => 'District',
+        'duration'                 => 'Duration',
+        'email'                    => '邮箱',
+        'excerpt'                  => '摘要',
+        'filter'                   => 'Filter',
+        'first_name'               => '名',
+        'gender'                   => '性别',
+        'group'                    => 'Group',
+        'hour'                     => '时',
+        'image'                    => 'Image',
+        'last_name'                => '姓',
+        'lesson'                   => 'Lesson',
+        'line_address_1'           => 'Line Address 1',
+        'line_address_2'           => 'Line Address 2',
+        'message'                  => 'Message',
+        'middle_name'              => 'Middle Name',
+        'minute'                   => '分',
+        'mobile'                   => '手机',
+        'month'                    => '月',
+        'name'                     => '名称',
+        'national_code'            => 'National Code',
+        'number'                   => 'Number',
+        'password'                 => '密码',
+        'password_confirmation'    => '确认密码',
+        'phone'                    => '电话',
+        'photo'                    => 'Photo',
+        'postal_code'              => 'Postal Code',
+        'price'                    => 'Price',
+        'province'                 => 'Province',
+        'recaptcha_response_field' => 'Recaptcha Response Field',
+        'remember'                 => 'Remember',
+        'restored_at'              => 'Restored At',
+        'result_text_under_image'  => 'Result Text Under Image',
+        'role'                     => 'Role',
+        'second'                   => '秒',
+        'sex'                      => '性别',
+        'short_text'               => 'Short Text',
+        'size'                     => '大小',
+        'state'                    => 'State',
+        'street'                   => 'Street',
+        'student'                  => 'Student',
+        'subject'                  => 'Subject',
+        'teacher'                  => 'Teacher',
+        'terms'                    => 'Terms',
+        'test_description'         => 'Test Description',
+        'test_locale'              => 'Test Locale',
+        'test_name'                => 'Test Name',
+        'text'                     => 'Text',
+        'time'                     => '时间',
+        'title'                    => '标题',
+        'updated_at'               => 'Updated At',
+        'username'                 => '用户名',
+        'year'                     => '年',
+    ],
+    'custom'               => [
         'attribute-name' => [
             'rule-name' => 'custom-message',
         ],
     ],
-
-    'attributes' => [
-        'name'                  => '名称',
-        'nickname'              => '昵称',
-        'username'              => '用户名',
-        'email'                 => '邮箱',
-        'password'              => '密码',
-        'password_confirmation' => '确认密码',
-        'phone'                 => '电话',
-        'day'                   => '{1} 天|{2} 日',
-        'month'                 => '月',
-        'year'                  => '年',
-        'hour'                  => '{1} 时|{2} 点',
-        'minute'                => '分',
-        'second'                => '秒',
-        'title'                 => '标题',
-        'content'               => '内容',
-        'description'           => '描述',
-        'excerpt'               => '摘要',
-        'date'                  => '日期',
-        'time'                  => '时间',
-    ],
 ];

+ 1 - 1
resources/views/admin/article/info.blade.php

@@ -37,7 +37,7 @@
                         </div>
                     </div>
                     <div class="form-group row">
-                        <label class="col-form-label col-md-2" for="title"> {{ trans('validation.attributes..title') }} </label>
+                        <label class="col-form-label col-md-2" for="title"> {{ trans('validation.attributes.title') }} </label>
                         <div class="col-md-4">
                             <input type="text" class="form-control" name="title" id="title" autofocus required/>
                         </div>

+ 4 - 4
resources/views/admin/config/system.blade.php

@@ -106,7 +106,7 @@
                             <x-system.switch code="is_rand_port" :check="$is_rand_port"/>
                             <x-system.input-limit code="min_port" hcode="max_port" :value="$min_port" min="1000" max="$('#max_port').val()" :hvalue="$max_port" hmin="$
                             ('#min_port').val()" hmax="65535"/>
-                            <x-system.input-limit code="default_days" :value="$default_days" unit="{{ trans_choice('validation.attributes.day', 1) }}"/>
+                            <x-system.input-limit code="default_days" :value="$default_days" unit="{{ trans_choice('common.days.attribute', 1) }}"/>
                             <x-system.input-limit code="default_traffic" :value="$default_traffic" unit="MB"/>
                             <x-system.input-limit code="invite_num" :value="$invite_num"/>
                             <x-system.input-limit code="reset_password_times" :value="$reset_password_times"/>
@@ -114,8 +114,8 @@
                                              :list="[trans('common.status.closed') => '', trans('admin.setting.email.black') => 1, trans('admin.setting.email.white') => 2]"/>
                             <x-system.input-limit code="active_times" :value="$active_times"/>
                             <x-system.input-limit code="register_ip_limit" :value="$register_ip_limit"/>
-                            <x-system.input-limit code="user_invite_days" :value="$user_invite_days" min="1" unit="{{ trans_choice('validation.attributes.day', 1) }}"/>
-                            <x-system.input-limit code="admin_invite_days" :value="$admin_invite_days" min="1" unit="{{ trans_choice('validation.attributes.day', 1) }}"/>
+                            <x-system.input-limit code="user_invite_days" :value="$user_invite_days" min="1" unit="{{ trans_choice('common.days.attribute', 1) }}"/>
+                            <x-system.input-limit code="admin_invite_days" :value="$admin_invite_days" min="1" unit="{{ trans_choice('common.days.attribute', 1) }}"/>
                         </x-system.tab-pane>
                         <x-system.tab-pane id="node">
                             <x-system.input code="subscribe_domain" :value="$subscribe_domain" :holder="trans('admin.system.placeholder.default_url', ['url' => $website_url])"
@@ -173,7 +173,7 @@
                             <hr class="col-10"/>
                             <x-system.select code="account_expire_notification" multiple="1"
                                              :list="[trans('admin.system.notification.channel.email') => 'mail', trans('admin.system.notification.channel.site') => 'database']"/>
-                            <x-system.input-limit code="expire_days" :value="$expire_days" unit="{{ trans_choice('validation.attributes.day', 1) }}"/>
+                            <x-system.input-limit code="expire_days" :value="$expire_days" unit="{{ trans_choice('common.days.attribute', 1) }}"/>
                             <x-system.select code="data_exhaust_notification" multiple="1"
                                              :list="[trans('admin.system.notification.channel.email') => 'mail', trans('admin.system.notification.channel.site') => 'database']"/>
                             <x-system.input-limit code="traffic_warning_percent" :value="$traffic_warning_percent" unit="%"/>

+ 1 - 1
resources/views/admin/coupon/create.blade.php

@@ -192,7 +192,7 @@
                                             </div>
                                             <input type="number" class="form-control col-md-3" name="days" id="days" value="{{old('days')}}"/>
                                             <div class="input-group-append">
-                                                <span class="input-group-text">{{ trans_choice('validation.attributes.day', 0) }}</span>
+                                                <span class="input-group-text">{{ trans_choice('common.days.attribute', 0) }}</span>
                                             </div>
                                         </div>
                                     </li>

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

@@ -89,13 +89,13 @@
       new Chart(document.getElementById('dailyChart'), {
         type: 'line',
         data: datasets(@json($dayHours), @json($trafficHourly)),
-        options: common_options(' {{trans_choice('validation.attributes.hour', 2)}}'),
+        options: common_options(' {{trans_choice('common.hour', 2)}}'),
       });
 
       new Chart(document.getElementById('monthlyChart'), {
         type: 'line',
         data: datasets(@json($monthDays), @json($trafficDaily)),
-        options: common_options(' {{trans_choice('validation.attributes.day', 2)}}'),
+        options: common_options(' {{trans_choice('common.days.attribute', 2)}}'),
       });
     </script>
 @endsection

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

@@ -91,13 +91,13 @@
       new Chart(document.getElementById('dailyChart'), {
         type: 'line',
         data: datasets(@json($dayHours), @json($trafficHourly)),
-        options: common_options(' {{trans_choice('validation.attributes.hour', 2)}}'),
+        options: common_options(' {{trans_choice('common.hour', 2)}}'),
       });
 
       new Chart(document.getElementById('monthlyChart'), {
         type: 'line',
         data: datasets(@json($monthDays), @json($trafficDaily)),
-        options: common_options(' {{trans_choice('validation.attributes.day', 2)}}'),
+        options: common_options(' {{trans_choice('common.days.attribute', 2)}}'),
       });
     </script>
 @endsection

+ 1 - 1
resources/views/admin/report/accounting.blade.php

@@ -125,7 +125,7 @@
             area_a('{{ trans('admin.report.current_month') }}',@json($data['currentMonth'])),
             area_b('{{ trans('admin.report.last_month') }} ',@json($data['lastMonth']))],
         },
-        options: common_options(' {{ trans_choice('validation.attributes.day', 1) }}'),
+        options: common_options(' {{ trans_choice('common.days.attribute', 1) }}'),
       });
 
       new Chart(document.getElementById('months'), {

+ 1 - 1
resources/views/admin/report/userDataAnalysis.blade.php

@@ -86,7 +86,7 @@
                   font: {size: 14},
                 },
               },
-              tooltip: label_callbacks(' {{ trans_choice('validation.attributes.day', 1) }}'),
+              tooltip: label_callbacks(' {{ trans_choice('common.days.attribute', 1) }}'),
             },
           };
 

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

@@ -102,7 +102,7 @@
                                 <label class="col-md-2 col-form-label" for="period">{{ trans('model.goods.period') }}</label>
                                 <div class="col-md-4 input-group">
                                     <input type="number" class="form-control" name="period" id="period" value="30"/>
-                                    <span class="input-group-text"> {{ trans_choice('validation.attributes.day', 1) }}</span>
+                                    <span class="input-group-text"> {{ trans_choice('common.days.attribute', 1) }}</span>
                                     <span class="text-help"> {{ trans('admin.goods.info.period_hint') }} </span>
                                 </div>
                             </div>
@@ -137,7 +137,7 @@
                                 <label class="col-md-2 col-form-label" for="days">{{ trans('model.goods.available_date') }}</label>
                                 <div class="col-md-4 input-group">
                                     <input type="number" class="form-control" name="days" id="days" value="30"/>
-                                    <span class="input-group-text">{{ trans_choice('validation.attributes.day', 1) }}</span>
+                                    <span class="input-group-text">{{ trans_choice('common.days.attribute', 1) }}</span>
                                     <span class="text-help"> {{ trans('admin.goods.info.available_date_hint') }} </span>
                                 </div>
                             </div>

+ 2 - 2
resources/views/admin/user/index.blade.php

@@ -39,7 +39,7 @@
                         <input type="number" class="form-control" name="id" value="{{Request::query('id')}}" placeholder="{{ trans('model.user.id') }}"/>
                     </div>
                     <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
-                        <input type="text" class="form-control" name="username" value="{{Request::query('username')}}" placeholder="{{ trans('validation.attributes.username') }}"/>
+                        <input type="text" class="form-control" name="username" value="{{Request::query('username')}}" placeholder="{{ trans('model.user.username') }}"/>
                     </div>
                     <div class="form-group col-xxl-2 col-lg-3 col-md-3 col-sm-4">
                         <input type="text" class="form-control" name="wechat" value="{{Request::query('wechat')}}" placeholder="{{ trans('model.user.wechat') }}"/>
@@ -90,7 +90,7 @@
                     <thead class="thead-default">
                     <tr>
                         <th> @sortablelink('id', '#')</th>
-                        <th> {{ trans('validation.attributes.username') }}</th>
+                        <th> {{ trans('model.user.username') }}</th>
                         <th> @sortablelink('credit', trans('model.user.credit'))</th>
                         <th> @sortablelink('port', trans('model.user.port'))</th>
                         <th> {{ trans('model.subscribe.code') }}</th>

+ 1 - 1
resources/views/auth/activeUser.blade.php

@@ -16,7 +16,7 @@
             <div class="form-group form-material floating" data-plugin="formMaterial">
                 <input type="text" class="form-control" name="username" value="{{Request::query('username')}}" required/>
                 <label class="floating-label" for="username">
-                    {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('validation.attributes.username')}}
+                    {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('model.user.username')}}
                 </label>
             </div>
         @else

+ 1 - 1
resources/views/auth/login.blade.php

@@ -12,7 +12,7 @@
         <div class="form-group form-material floating" data-plugin="formMaterial">
             <input type="text" class="form-control" name="username" value="{{old('username')}}" required/>
             <label class="floating-label" for="username">
-                {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('validation.attributes.username')}}
+                {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('model.user.username')}}
             </label>
         </div>
         <div class="form-group form-material floating" data-plugin="formMaterial">

+ 2 - 2
resources/views/auth/maintenance.blade.php

@@ -23,8 +23,8 @@
             const hours = Math.floor(distance % 86400000 / 3600000);
             const minutes = Math.floor(distance % 3600000 / 60000);
             const seconds = Math.floor(distance % 60000 / 1000);
-            document.getElementById('countdown').innerHTML = '<h2>' + days + ' <span> {{trans_choice('validation.attributes.day', 1)}} </span>: ' +
-                hours + ' <span>{{trans_choice('validation.attributes.hour', 1)}}</span>: ' + minutes + ' <span>{{trans('validation.attributes.minute')}} </span>: ' +
+            document.getElementById('countdown').innerHTML = '<h2>' + days + ' <span> {{trans_choice('common.days.attribute', 1)}} </span>: ' +
+                hours + ' <span>{{trans_choice('common.hour', 1)}}</span>: ' + minutes + ' <span>{{trans('validation.attributes.minute')}} </span>: ' +
                 seconds + '<span> {{trans('validation.attributes.second')}}</span> </h2>';
             if (distance <= 0) {
                 clearInterval(x);

+ 2 - 2
resources/views/auth/register.blade.php

@@ -15,7 +15,7 @@
             <div class="form-group form-material floating" data-plugin="formMaterial">
                 <input type="text" class="form-control" name="nickname" id="nickname"
                        value="{{old('nickname') ? : Request::query('nickname')}}" autocomplete="off" required/>
-                <label class="floating-label" for="username">{{trans('validation.attributes.nickname')}}</label>
+                <label class="floating-label" for="username">{{trans('model.user.nickname')}}</label>
             </div>
             <div class="form-group form-material floating" data-plugin="formMaterial">
                 @if($emailList)
@@ -35,7 +35,7 @@
                 @else
                     <input type="text" class="form-control" name="username" id="username" value="{{old('username')}}" required/>
                     <label class="floating-label" for="username">
-                        {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('validation.attributes.username')}}
+                        {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('model.user.username')}}
                     </label>
                 @endif
             </div>

+ 1 - 1
resources/views/auth/resetPassword.blade.php

@@ -16,7 +16,7 @@
             <div class="form-group form-material floating" data-plugin="formMaterial">
                 <input type="text" class="form-control" name="username" value="{{old('username')}}" autofocus required/>
                 <label class="floating-label" for="username">
-                    {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('validation.attributes.username')}}
+                    {{sysConfig('username_type') === 'email' || sysConfig('username_type') === null ? trans('validation.attributes.email') : trans('model.user.username')}}
                 </label>
             </div>
         @else

+ 2 - 2
resources/views/components/payment/detail.blade.php

@@ -69,10 +69,10 @@
                         <div class="panel-body">
                             <ul class="list-group">
                                 <li class="list-group-item">
-                                    {{ trans('validation.attributes.nickname') }}:{{ $user->nickname }}
+                                    {{ trans('model.user.nickname') }}:{{ $user->nickname }}
                                 </li>
                                 <li class="list-group-item">
-                                    {{ trans('validation.attributes.username') }}:{{ $user->username }}
+                                    {{ trans('model.user.username') }}:{{ $user->username }}
                                 </li>
                                 <li class="list-group-item">
                                     {{ trans('user.attribute.data') }}:{{ flowAutoShow($user->used_traffic) }} / {{ flowAutoShow($user->transfer_enable) }}

+ 2 - 2
resources/views/components/ticket/reply.blade.php

@@ -69,10 +69,10 @@
                         <div class="panel-body">
                             <ul class="list-group">
                                 <li class="list-group-item">
-                                    {{ trans('validation.attributes.nickname') }}:{{ $user->nickname }}
+                                    {{ trans('model.user.nickname') }}:{{ $user->nickname }}
                                 </li>
                                 <li class="list-group-item">
-                                    {{ trans('validation.attributes.username') }}:{{ $user->username }}
+                                    {{ trans('model.user.username') }}:{{ $user->username }}
                                 </li>
                                 <li class="list-group-item">
                                     {{ trans('user.attribute.data') }}:{{ flowAutoShow($user->used_traffic) }} / {{ flowAutoShow($user->transfer_enable) }}

+ 4 - 4
resources/views/user/buy.blade.php

@@ -20,7 +20,7 @@
                         <tr>
                             <td class="text-middle">{{$goods->name}} </td>
                             <td>{{trans('common.available_date')}}
-                                <strong>{{$goods->type === 1? $dataPlusDays : $goods->days}} {{trans_choice('validation.attributes.day', 1)}}</strong>
+                                <strong>{{$goods->type === 1? $dataPlusDays : $goods->days}} {{trans_choice('common.days.attribute', 1)}}</strong>
                                 <br>
                                 <strong>{{$goods->traffic_label}}</strong> {{trans('user.attribute.data')}}
                                 <br>
@@ -36,7 +36,7 @@
                     @if($goods->type <= 2)
                         <div class="col-lg-3 pl-30">
                             <div class="input-group">
-                                <input type="text" class="form-control" name="coupon_sn" id="coupon_sn" placeholder="{{trans('user.coupon.attribute')}}"/>
+                                <input type="text" class="form-control" name="coupon_sn" id="coupon_sn" placeholder="{{trans('model.coupon.attribute')}}"/>
                                 <div class="input-group-btn">
                                     <button type="submit" class="btn btn-info" onclick="redeemCoupon()">
                                         <i class="icon wb-loop" aria-hidden="true"></i> {{trans('common.apply')}}
@@ -93,7 +93,7 @@
               if (ret.data.type === 2) {
                 const discount = goods_price * (ret.data.value / 100);
 
-                coupon_text.innerHTML = '【{{trans('user.coupon.attribute')}}】:' + ret.data.name + '_'
+                coupon_text.innerHTML = '【{{trans('admin.coupon.type.discount')}}】:' + ret.data.name + '_'
                     + (100 - ret.data.value) + '%<br> {{trans('user.coupon.discount')}}: - ' + sign + discount.toFixed(2);
                 total_price = goods_price - discount;
               } else {
@@ -101,7 +101,7 @@
                 total_price = goods_price - ret.data.value.match(/(.*?[^0-9])(\d+\.?.*)/)[2];
                 total_price = total_price > 0 ? total_price : 0;
                 if (ret.data.type === 1) {
-                  coupon_text.innerHTML = '【{{trans('user.coupon.voucher')}}】:' + ret.data.name + ' -' + ret.data.value;
+                  coupon_text.innerHTML = '【{{trans('admin.coupon.type.voucher')}}】:' + ret.data.name + ' -' + ret.data.value;
                 }
               }
 

+ 1 - 1
resources/views/user/components/payment/default.blade.php

@@ -17,7 +17,7 @@
                             <li class="list-group-item">{{trans('user.shop.service').': '.$name}}</li>
                             <li class="list-group-item">{{trans('user.shop.price').': '.$payment->amount_tag}}</li>
                             @if($days !== 0)
-                                <li class="list-group-item">{{trans('common.available_date').': '.$days.trans_choice('validation.attributes.day', 1)}}</li>
+                                <li class="list-group-item">{{trans('common.available_date').': '.$days.trans_choice('common.days.attribute', 1)}}</li>
                             @endif
                             <li class="list-group-item"> {!! trans('user.payment.close_tips', ['minutes' => config('tasks.close.orders')]) !!}</li>
                         </ul>

+ 1 - 1
resources/views/user/components/payment/manual.blade.php

@@ -161,7 +161,7 @@
                             <li class="list-group-item">{{trans('user.shop.service').': '.$name}}</li>
                             <li class="list-group-item">{{trans('user.shop.price').': '.$payment->amount_tag}}</li>
                             @if($days !== 0)
-                                <li class="list-group-item">{{trans('common.available_date').': '.$days.trans_choice('validation.attributes.day', 1)}}</li>
+                                <li class="list-group-item">{{trans('common.available_date').': '.$days.trans_choice('common.days.attribute', 1)}}</li>
                             @endif
                         </ul>
                     </div>

+ 8 - 8
resources/views/user/index.blade.php

@@ -25,9 +25,9 @@
                         @endif
                         <div class="content-text text-center mb-0">
                             @if(!$paying_user)
-                                <p class="ml-15 mt-15 text-left">{{trans('user.more')}}<code>{{trans('validation.attributes.time')}}</code></p>
-                                <p class="text-center">{{trans('user.more')}}<code>{{trans('user.attribute.data')}}</code></p>
-                                <p class="mb-15 mr-15 text-right">{{trans('user.more')}}<code>{{trans('user.attribute.node')}}</code></p>
+                                <p class="ml-15 mt-15 text-left">{{trans('common.more')}}<code>{{trans('validation.attributes.time')}}</code></p>
+                                <p class="text-center">{{trans('common.more')}}<code>{{trans('user.attribute.data')}}</code></p>
+                                <p class="mb-15 mr-15 text-right">{{trans('common.more')}}<code>{{trans('user.attribute.node')}}</code></p>
                                 <a href="{{route('shop')}}" class="btn btn-block btn-danger">{{trans('user.purchase_promotion')}}</a>
                             @elseif(Auth::user()->enable)
                                 <i class="wb-check green-400 font-size-40 mr-10"></i>
@@ -93,7 +93,7 @@
                         <span class="font-weight-400">{{trans('user.account.time')}}</span>
                         <div class="content-text text-center mb-0">
                             @if($remainDays >= 0)
-                                <span class="font-size-40 font-weight-100">{{$remainDays.' '.trans_choice('validation.attributes.day', 1)}}</span>
+                                <span class="font-size-40 font-weight-100">{{$remainDays.' '.trans_choice('common.days.attribute', 1)}}</span>
                                 <p class="blue-grey-500 font-weight-300 m-0">{{$expireTime}}</p>
                             @else
                                 <span class="font-size-40 font-weight-100">{{trans('common.status.expire')}}</span>
@@ -247,7 +247,7 @@
                                     <ul class="nav nav-pills" role="tablist">
                                         <li class="nav-item">
                                             <a class="nav-link active" data-toggle="tab" href="#daily" aria-controls="daily" role="tab" aria-expanded="true"
-                                               aria-selected="false">{{trans_choice('validation.attributes.day', 1)}}</a>
+                                               aria-selected="false">{{trans_choice('common.days.attribute', 1)}}</a>
                                         </li>
                                         <li class="nav-item">
                                             <a class="nav-link" data-toggle="tab" href="#monthly" aria-controls="monthly" role="tab"
@@ -410,13 +410,13 @@
       new Chart(document.getElementById('dailyChart'), {
         type: 'line',
         data: datasets(@json($dayHours), @json($trafficHourly)),
-        options: common_options(' {{trans_choice('validation.attributes.hour', 2)}}'),
+        options: common_options(' {{trans_choice('common.hour', 2)}}'),
       });
 
       new Chart(document.getElementById('monthlyChart'), {
         type: 'line',
         data: datasets(@json($monthDays), @json($trafficDaily)),
-        options: common_options(' {{trans_choice('validation.attributes.day', 2)}}'),
+        options: common_options(' {{trans_choice('common.days.attribute', 2)}}'),
       });
 
       @if($banedTime) // 封禁倒计时
@@ -441,7 +441,7 @@
         const minute = Math.floor((distance % 3600000) / 60000);
         let string = '';
         if (hour) {
-          string += hour + '{{ trans_choice('validation.attributes.hour', 1) }} ';
+          string += hour + '{{ trans_choice('common.hour', 1) }} ';
         }
         if (minute) {
           string += minute + '{{ trans('validation.attributes.minute') }}';

+ 3 - 3
resources/views/user/invoiceDetail.blade.php

@@ -32,7 +32,7 @@
                             <th>{{trans('user.shop.description')}} </th>
                             <th>{{trans('user.shop.price')}}</th>
                             <th>{{trans('user.shop.quantity')}}</th>
-                            <th>{{trans('user.coupon.attribute')}}</th>
+                            <th>{{trans('model.coupon.attribute')}}</th>
                             <th>{{trans('user.shop.total')}}</th>
                             <th>{{trans('common.status.attribute')}}</th>
                         </tr>
@@ -45,7 +45,7 @@
                             <td>
                                 @if($order->goods)
                                     {{trans('common.available_date')}}
-                                    <code>{{$order->goods->days}}</code> {{trans_choice('validation.attributes.day', 1)}}
+                                    <code>{{$order->goods->days}}</code> {{trans_choice('common.days.attribute', 1)}}
                                     <br/>
                                     @if($order->goods->type === 2)
                                         <code>{{$order->goods->traffic_label}}</code>
@@ -54,7 +54,7 @@
                                         <code>{{$order->goods->traffic_label}}</code>
                                         {{trans('user.attribute.data')}}/
                                         <code>{{$order->goods->days}}</code>
-                                        {{trans_choice('validation.attributes.day', 1)}}
+                                        {{trans_choice('common.days.attribute', 1)}}
                                     @endif
                                 @else
                                     {{trans('user.recharge_credit')}}

+ 1 - 1
resources/views/user/profile.blade.php

@@ -99,7 +99,7 @@
                                 <form action="{{route('profile')}}" method="post" enctype="multipart/form-data" class="form-horizontal">
                                     @csrf
                                     <div class="form-group row">
-                                        <label for="nickname" class="col-md-5 col-form-label">{{trans('validation.attributes.nickname')}}</label>
+                                        <label for="nickname" class="col-md-5 col-form-label">{{trans('model.user.nickname')}}</label>
                                         <input type="text" class="form-control col-md-6 round" name="nickname" id="nickname" value="{{Auth::getUser()->nickname}}"/>
                                     </div>
                                     <div class="form-group row">

+ 1 - 1
resources/views/user/referral.blade.php

@@ -36,7 +36,7 @@
                             <thead class="thead-default">
                             <tr>
                                 <th data-cell-style="cellStyle"> #</th>
-                                <th> {{trans('validation.attributes.username')}} </th>
+                                <th> {{trans('model.user.username')}} </th>
                                 <th> {{trans('user.registered_at')}}</th>
                             </tr>
                             </thead>

+ 8 - 8
resources/views/user/services.blade.php

@@ -25,9 +25,9 @@
                             <button type="button" class="btn btn-floating btn-sm btn-pure">
                                 <i class="icon wb-payment green-500"></i>
                             </button>
-                            <span class="font-weight-400">{{trans('user.reset_data.')}}</span>
+                            <span class="font-weight-400">{{trans('user.reset_data.action')}}</span>
                             <div class="content-text text-center mb-0">
-                                <span class="font-size-20 font-weight-100">{{trans('user.reset_data.required')}} <code>{{$renewTraffic}}</code></span>
+                                <span class="font-size-20 font-weight-100">{!! trans('user.reset_data.cost', ['amount' => $renewTraffic]) !!}</span>
                                 <br/>
                                 <button class="btn btn-danger mt-10" onclick="resetTraffic()">{{trans('common.reset')}}</button>
                             </div>
@@ -63,7 +63,7 @@
                                             <div class="pricing-price text-white @if($goods->type === 1) text-center @endif">
                                                 <span class="pricing-amount">{{$goods->price_tag}}</span>
                                                 @if($goods->type === 2)
-                                                    <span class="pricing-period">/ {{$goods->days.trans_choice('validation.attributes.day', 1)}}</span>
+                                                    <span class="pricing-period">/ {{$goods->days.trans_choice('common.days.attribute', 1)}}</span>
                                                 @endif
                                             </div>
                                             @if($goods->description)
@@ -73,7 +73,7 @@
                                         <ul class="pricing-features">
                                             <li>
                                                 <strong>{{$goods->traffic_label}}</strong>{{trans('user.attribute.data')}}
-                                                {!!$goods->type === 1? ' <code>'.$dataPlusDays.'</code> '.trans_choice('validation.attributes.day', 1):'/'.trans('validation.attributes.month')!!}
+                                                {!!$goods->type === 1? ' <code>'.$dataPlusDays.'</code> '.trans_choice('common.days.attribute', 1):'/'.trans('validation.attributes.month')!!}
                                             </li>
                                             <li>
                                                 {!!trans('user.service.node_count', ['num' => $goods->node_count])!!}
@@ -114,7 +114,7 @@
                                     @if(sysConfig('is_onlinePay') || sysConfig('alipay_qrcode') || sysConfig('wechat_qrcode'))
                                         <option value="1">{{trans('user.shop.pay_online')}}</option>
                                     @endif
-                                    <option value="2">{{trans('user.coupon.recharge')}}</option>
+                                    <option value="2">{{trans('admin.coupon.type.charge')}}</option>
                                 </select>
                             </div>
                         @endif
@@ -129,7 +129,7 @@
                         @endif
                         <div class="form-group row" id="charge_coupon_code">
                             <label for="charge_coupon"
-                                   class="offset-md-2 col-md-2 col-form-label"> {{trans('user.coupon.recharge')}} </label>
+                                   class="offset-md-2 col-md-2 col-form-label"> {{trans('admin.coupon.type.charge')}} </label>
                             <div class="col-md-6">
                                 <input type="text" class="form-control round" name="charge_coupon" id="charge_coupon" placeholder="{{trans('user.input_coupon')}}">
                             </div>
@@ -180,7 +180,7 @@
       // 重置流量
       function resetTraffic() {
         swal.fire({
-          title: '{{trans('user.reset_data.')}}',
+          title: '{{trans('user.reset_data.action')}}',
           text: '{{trans('user.reset_data.cost_tips', ['amount' => $renewTraffic])}}',
           icon: 'question',
           showCancelButton: true,
@@ -240,7 +240,7 @@
           });
         } else if (paymentType === 2) {
           if (charge_coupon === '') {
-            $('#charge_msg').show().html("{{trans('validation.required', ['attribute' => trans('user.coupon.attribute')])}}");
+            $('#charge_msg').show().html("{{trans('validation.required', ['attribute' => trans('model.coupon.attribute')])}}");
             $('#charge_coupon').focus();
             return false;
           }

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor