add menu for switching languages

This commit is contained in:
printempw 2016-09-15 09:20:02 +08:00
parent 0fe9cf19b4
commit 41f24b9a3a
15 changed files with 192 additions and 104 deletions

View File

@ -32,7 +32,7 @@ class AuthController extends Controller
} elseif ($request->has('username')) { } elseif ($request->has('username')) {
$auth_type = "username"; $auth_type = "username";
} else { } else {
return json('邮箱或角色名格式错误', 3); return json(trans('auth.validation.identification'), 3);
} }
// instantiate user // instantiate user
@ -42,11 +42,11 @@ class AuthController extends Controller
if (session('login_fails', 0) > 3) { if (session('login_fails', 0) > 3) {
if (strtolower($request->input('captcha')) != strtolower(session('phrase'))) if (strtolower($request->input('captcha')) != strtolower(session('phrase')))
return json('验证码填写错误', 1); return json(trans('auth.validation.captcha'), 1);
} }
if (!$user->is_registered) { if (!$user->is_registered) {
return json('用户不存在哦', 2); return json(trans('auth.validation.user'), 2);
} else { } else {
if ($user->checkPasswd($request->input('password'))) { if ($user->checkPasswd($request->input('password'))) {
Session::forget('login_fails'); Session::forget('login_fails');
@ -61,7 +61,7 @@ class AuthController extends Controller
return json([ return json([
'errno' => 0, 'errno' => 0,
'msg' => '登录成功,欢迎回来~', 'msg' => trans('auth.login.success'),
'token' => $user->getToken() 'token' => $user->getToken()
]); ]);
} else { } else {
@ -70,7 +70,7 @@ class AuthController extends Controller
return json([ return json([
'errno' => 1, 'errno' => 1,
'msg' => '邮箱或密码不对哦~', 'msg' => trans('auth.login.password'),
'login_fails' => session('login_fails') 'login_fails' => session('login_fails')
]); ]);
} }
@ -85,9 +85,9 @@ class AuthController extends Controller
Session::flush(); Session::flush();
return json('登出成功~', 0); return json(trans('auth.logout.success'), 0);
} else { } else {
return json('并没有有效的 session', 1); return json(trans('auth.logout.failed'), 1);
} }
} }
@ -96,14 +96,14 @@ class AuthController extends Controller
if (Option::get('user_can_register') == 1) { if (Option::get('user_can_register') == 1) {
return view('auth.register'); return view('auth.register');
} else { } else {
throw new PrettyPageException('残念。。本皮肤站已经关闭注册咯 QAQ', 7); throw new PrettyPageException(trans('auth.register.close'), 7);
} }
} }
public function handleRegister(Request $request) public function handleRegister(Request $request)
{ {
if (strtolower($request->input('captcha')) != strtolower(session('phrase'))) if (strtolower($request->input('captcha')) != strtolower(session('phrase')))
return json('验证码填写错误', 1); return json(trans('auth.validation.captcha'), 1);
$this->validate($request, [ $this->validate($request, [
'email' => 'required|email', 'email' => 'required|email',
@ -131,18 +131,18 @@ class AuthController extends Controller
return json([ return json([
'errno' => 0, 'errno' => 0,
'msg' => '注册成功,正在跳转~', 'msg' => trans('auth.register.success'),
'token' => $user->getToken() 'token' => $user->getToken()
]); ]);
} else { } else {
return json('你最多只能注册 '.Option::get('regs_per_ip').' 个账户哦', 7); return json(trans('auth.register.max', ['regs' => Option::get('regs_per_ip')]), 7);
} }
} else { } else {
return json('残念。。本皮肤站已经关闭注册咯 QAQ', 7); return json(trans('auth.register.close'), 7);
} }
} else { } else {
return json('这个邮箱已经注册过啦,换一个吧', 5); return json(trans('auth.register.registered'), 5);
} }
} }
@ -151,25 +151,25 @@ class AuthController extends Controller
if (config('mail.host') != "") { if (config('mail.host') != "") {
return view('auth.forgot'); return view('auth.forgot');
} else { } else {
throw new PrettyPageException('本站已关闭重置密码功能', 8); throw new PrettyPageException(trans('auth.forgot.close'), 8);
} }
} }
public function handleForgot(Request $request) public function handleForgot(Request $request)
{ {
if (strtolower($request->input('captcha')) != strtolower(session('phrase'))) if (strtolower($request->input('captcha')) != strtolower(session('phrase')))
return json('验证码填写错误', 1); return json(trans('auth.validation.captcha'), 1);
if (config('mail.host') == "") if (config('mail.host') == "")
return json('本站已关闭重置密码功能', 1); return json(trans('auth.forgot.close'), 1);
if (Session::has('last_mail_time') && (time() - session('last_mail_time')) < 60) if (Session::has('last_mail_time') && (time() - session('last_mail_time')) < 60)
return json('你邮件发送得太频繁啦,过 60 秒后再点发送吧', 1); return json(trans('auth.forgot.frequent-mail'), 1);
$user = new User(null, ['email' => $request->input('email')]); $user = new User(null, ['email' => $request->input('email')]);
if (!$user->is_registered) if (!$user->is_registered)
return json('该邮箱尚未注册', 1); return json(trans('auth.forgot.unregistered'), 1);
$uid = $user->uid; $uid = $user->uid;
$token = base64_encode($user->getToken().substr(time(), 4, 6).Utils::generateRndString(16)); $token = base64_encode($user->getToken().substr(time(), 4, 6).Utils::generateRndString(16));
@ -181,15 +181,15 @@ class AuthController extends Controller
$site_name = Option::get('site_name'); $site_name = Option::get('site_name');
$m->from(config('mail.username'), $site_name); $m->from(config('mail.username'), $site_name);
$m->to($request->input('email'))->subject("重置您在 $site_name 上的账户密码"); $m->to($request->input('email'))->subject(trans('auth.mail.title', ['sitename' => $site_name]));
}); });
} catch(\Exception $e) { } catch(\Exception $e) {
return json('邮件发送失败,详细信息:'.$e->getMessage(), 2); return json(trans('auth.mail.failed', ['msg' => $e->getMessage()]), 2);
} }
Session::put('last_mail_time', time()); Session::put('last_mail_time', time());
return json('邮件已发送,一小时内有效,请注意查收.', 0); return json(trans('auth.mail.success'), 0);
} }
public function reset() public function reset()
@ -197,24 +197,24 @@ class AuthController extends Controller
if (isset($_GET['uid']) && isset($_GET['token'])) { if (isset($_GET['uid']) && isset($_GET['token'])) {
$user = new User($_GET['uid']); $user = new User($_GET['uid']);
if (!$user->is_registered) if (!$user->is_registered)
return redirect('auth/forgot')->with('msg', '无效的链接'); return redirect('auth/forgot')->with('msg', trans('auth.reset.invalid'));
$token = substr(base64_decode($_GET['token']), 0, -22); $token = substr(base64_decode($_GET['token']), 0, -22);
if ($user->getToken() != $token) { if ($user->getToken() != $token) {
return redirect('auth/forgot')->with('msg', '无效的链接'); return redirect('auth/forgot')->with('msg', trans('auth.reset.invalid'));
} }
$timestamp = substr(base64_decode($_GET['token']), strlen($token), 6); $timestamp = substr(base64_decode($_GET['token']), strlen($token), 6);
// more than 1 hour // more than 1 hour
if ((substr(time(), 4, 6) - $timestamp) > 3600) { if ((substr(time(), 4, 6) - $timestamp) > 3600) {
return redirect('auth/forgot')->with('msg', '链接已过期'); return redirect('auth/forgot')->with('msg', trans('auth.reset.expired'));
} }
return view('auth.reset')->with('user', $user); return view('auth.reset')->with('user', $user);
} else { } else {
return redirect('auth/login')->with('msg', '非法访问'); return redirect('auth/login')->with('msg', trans('auth.check.anonymous'));
} }
} }
@ -229,7 +229,7 @@ class AuthController extends Controller
$user->changePasswd($request->input('password')); $user->changePasswd($request->input('password'));
return json('密码重置成功', 0); return json(trans('auth.reset.success'), 0);
} }

View File

@ -2,12 +2,12 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use App\Models\User;
use App\Models\UserModel;
use App\Exceptions\PrettyPageException;
use View; use View;
use Http; use Http;
use Session; use Session;
use App\Models\User;
use App\Models\UserModel;
use App\Exceptions\PrettyPageException;
class CheckAuthenticated class CheckAuthenticated
{ {
@ -17,7 +17,7 @@ class CheckAuthenticated
$user = new User(session('uid')); $user = new User(session('uid'));
if (session('token') != $user->getToken()) if (session('token') != $user->getToken())
return redirect('auth/login')->with('msg', '无效的 token请重新登录'); return redirect('auth/login')->with('msg', trans('auth.check.token'));
if ($user->getPermission() == "-1") { if ($user->getPermission() == "-1") {
// delete cookies // delete cookies
@ -26,7 +26,7 @@ class CheckAuthenticated
Session::flush(); Session::flush();
throw new PrettyPageException('你已经被本站封禁啦,请联系管理员解决', 5); throw new PrettyPageException(trans('auth.check.banned'), 5);
} }
// ask for filling email // ask for filling email
@ -41,10 +41,10 @@ class CheckAuthenticated
return $next($request); return $next($request);
} else { } else {
echo View::make('auth.bind')->with('msg', '该邮箱已被占用'); echo View::make('auth.bind')->with('msg', trans('auth.validation.email'));
} }
} else { } else {
echo View::make('auth.bind')->with('msg', '邮箱格式错误'); echo View::make('auth.bind')->with('msg', trans('auth.bind.registered'));
} }
exit; exit;
} }
@ -57,7 +57,7 @@ class CheckAuthenticated
return $next($request); return $next($request);
} else { } else {
return redirect('auth/login')->with('msg', '非法访问,请先登录'); return redirect('auth/login')->with('msg', trans('auth.check.anonymous'));
} }
return $next($request); return $next($request);

View File

@ -2,9 +2,9 @@
namespace App\Http\Middleware; namespace App\Http\Middleware;
use Illuminate\Support\Arr;
use Session;
use App; use App;
use Session;
use Illuminate\Support\Arr;
class Internationalization class Internationalization
{ {

View File

@ -9,6 +9,6 @@ return [
| Available Languages | Available Languages
| |
*/ */
'zh-CN' => 'Chinese Simplified', 'zh-CN' => '简体中文',
'en' => 'English' 'en' => 'English'
]; ];

View File

@ -1,34 +1,70 @@
login: login:
login: 登录 title: 登录
button: 登录
message: 登录以管理您的角色及皮肤 message: 登录以管理您的角色及皮肤
keep: 保持登录状态 keep: 保持登录状态
success: 登录成功,欢迎回来~
check:
anonymous: 非法访问,请先登录
banned: 你已经被本站封禁啦,请联系管理员解决
token: 无效的 token请重新登录
register: register:
register: 注册 title: 注册
button: 注册
message: 欢迎使用 :sitename message: 欢迎使用 :sitename
nickname-intro: 昵称可使用汉字,不可包含特殊字符 nickname-intro: 昵称可使用汉字,不可包含特殊字符
repeat-pwd: 重复密码 repeat-pwd: 重复密码
close: 残念。。本皮肤站已经关闭注册咯 QAQ
success: 注册成功,正在跳转~
max: 你最多只能注册 :regs 个账户哦
registered: 这个邮箱已经注册过啦,换一个吧
forgot: forgot:
forgot: 重置密码 title: 忘记密码
button: 发送
message: 我们将会向您发送一封验证邮件 message: 我们将会向您发送一封验证邮件
send: 发送
login-link: 我又想起来了 login-link: 我又想起来了
close: 本站已关闭重置密码功能
frequent-mail: 你邮件发送得太频繁啦,过 60 秒后再点发送吧
unregistered: 该邮箱尚未注册
mail: mail:
title: 重置您在 :sitename 上的账户密码
success: 邮件已发送,一小时内有效,请注意查收。
failed: 邮件发送失败,详细信息::msg
message: 您收到这封邮件,是因为在 :sitename 的用户重置密码功能使用了您的地址。 message: 您收到这封邮件,是因为在 :sitename 的用户重置密码功能使用了您的地址。
ignore: 如果您并没有访问过我们的网站,或没有进行上述操作,请忽略这封邮件。 您不需要退订或进行其他进一步的操作。 ignore: 如果您并没有访问过我们的网站,或没有进行上述操作,请忽略这封邮件。 您不需要退订或进行其他进一步的操作。
reset: 重置密码 reset: 重置密码
notice: 本邮件由系统自动发送,就算你回复了我们也不会回复你哦 notice: 本邮件由系统自动发送,就算你回复了我们也不会回复你哦
reset: reset:
reset: 重置 title: 重置密码
button: 重置
invalid: 无效的链接
expired: 链接已过期
message: :username在这里重置你的密码 message: :username在这里重置你的密码
success: 密码重置成功
bind: bind:
bind: 绑定 title: 绑定邮箱
button: 绑定
message: 你需要绑定邮箱地址以继续使用本站 message: 你需要绑定邮箱地址以继续使用本站
introduction: 邮箱地址仅用于重置密码,我们将不会向您发送任何垃圾邮件 introduction: 邮箱地址仅用于重置密码,我们将不会向您发送任何垃圾邮件
registered: 该邮箱已被占用
validation:
identification: 邮箱或角色名格式错误
email: 邮箱格式错误
captcha: 验证码填写错误
user: 用户不存在哦
password: 邮箱或密码不对哦~
logout:
success: 登出成功~
fail: 并没有有效的 session
nickname: 昵称 nickname: 昵称
email: Email email: Email

View File

@ -0,0 +1,7 @@
index: 首页
skinlib: 皮肤库
langs: 语言
user-center: 用户中心
logout: 登出
login: 登录
register: 现在注册

View File

@ -44,6 +44,17 @@
<!-- Navbar Right Menu --> <!-- Navbar Right Menu -->
<div class="navbar-custom-menu"> <div class="navbar-custom-menu">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<!-- Language Menu -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-language" aria-hidden="true"></i> {{ trans('index.langs') }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@foreach(config('locales') as $locale => $lang)
<li><a href="{{ url('/locale/'.$locale) }}">{{ $lang }}</a></li>
@endforeach
</ul>
</li>
<!-- User Account Menu --> <!-- User Account Menu -->
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<!-- Menu Toggle Button --> <!-- Menu Toggle Button -->

View File

@ -1,6 +1,6 @@
@extends('auth.master') @extends('auth.master')
@section('title', trans('auth.bind.bind')) @section('title', trans('auth.bind.title'))
@section('content') @section('content')
@ -27,7 +27,7 @@
<div class="row"> <div class="row">
<div class="col-xs-8"></div> <div class="col-xs-8"></div>
<div class="col-xs-4"> <div class="col-xs-4">
<button type="submit" class="btn btn-primary btn-block btn-flat">{{ trans('auth.bind.bind') }}</button> <button type="submit" class="btn btn-primary btn-block btn-flat">{{ trans('auth.bind.button') }}</button>
</div><!-- /.col --> </div><!-- /.col -->
</div> </div>
</form> </form>

View File

@ -1,6 +1,6 @@
@extends('auth.master') @extends('auth.master')
@section('title', trans('auth.forgot.forgot')) @section('title', trans('auth.forgot.title'))
@section('content') @section('content')
@ -39,7 +39,7 @@
</div> </div>
<!-- /.col --> <!-- /.col -->
<div class="col-xs-4"> <div class="col-xs-4">
<button id="forgot-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.forgot.send') }}</button> <button id="forgot-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.forgot.button') }}</button>
</div> </div>
<!-- /.col --> <!-- /.col -->
</div> </div>

View File

@ -1,6 +1,6 @@
@extends('auth.master') @extends('auth.master')
@section('title', trans('auth.login.login')) @section('title', trans('auth.login.title'))
@section('content') @section('content')
@ -47,7 +47,7 @@
</div> </div>
<!-- /.col --> <!-- /.col -->
<div class="col-xs-4"> <div class="col-xs-4">
<button id="login-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.login.login') }}</button> <button id="login-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.login.button') }}</button>
</div> </div>
<!-- /.col --> <!-- /.col -->
</div> </div>

View File

@ -1,6 +1,6 @@
@extends('auth.master') @extends('auth.master')
@section('title', trans('auth.register.register')) @section('title', trans('auth.register.title'))
@section('content') @section('content')
@ -52,7 +52,7 @@
</div> </div>
<!-- /.col --> <!-- /.col -->
<div class="col-xs-4"> <div class="col-xs-4">
<button id="register-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.register.register') }}</button> <button id="register-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.register.button') }}</button>
</div> </div>
<!-- /.col --> <!-- /.col -->
</div> </div>

View File

@ -1,6 +1,6 @@
@extends('auth.master') @extends('auth.master')
@section('title', trans('auth.forgot.reset')) @section('title', trans('auth.reset.title'))
@section('content') @section('content')
@ -31,7 +31,7 @@
</div> </div>
<!-- /.col --> <!-- /.col -->
<div class="col-xs-4"> <div class="col-xs-4">
<button id="reset-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.reset.reset') }}</button> <button id="reset-button" class="btn btn-primary btn-block btn-flat">{{ trans('auth.reset.button') }}</button>
</div> </div>
<!-- /.col --> <!-- /.col -->
</div> </div>

View File

@ -36,8 +36,19 @@
<!-- Collect the nav links, forms, and other content for toggling --> <!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse pull-left" id="navbar-collapse"> <div class="collapse navbar-collapse pull-left" id="navbar-collapse">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<li class="active"><a href="{{ url('/') }}">首页</a></li> <li class="active"><a href="{{ url('/') }}">{{ trans('index.index') }}</a></li>
<li><a href="{{ url('skinlib') }}">皮肤库</a></li> <li><a href="{{ url('skinlib') }}">{{ trans('index.skinlib') }}</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-language" aria-hidden="true"></i> {{ trans('index.langs') }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@foreach(config('locales') as $locale => $lang)
<li><a href="{{ url('/locale/'.$locale) }}">{{ $lang }}</a></li>
@endforeach
</ul>
</li>
</ul> </ul>
</div><!-- /.navbar-collapse --> </div><!-- /.navbar-collapse -->
<!-- Navbar Right Menu --> <!-- Navbar Right Menu -->
@ -62,10 +73,10 @@
<!-- Menu Footer--> <!-- Menu Footer-->
<li class="user-footer"> <li class="user-footer">
<div class="pull-left"> <div class="pull-left">
<a href="{{ url('user') }}" class="btn btn-default btn-flat">用户中心</a> <a href="{{ url('user') }}" class="btn btn-default btn-flat">{{ trans('index.user-center') }}</a>
</div> </div>
<div class="pull-right"> <div class="pull-right">
<a href="javascript:logout();" class="btn btn-default btn-flat">登出</a> <a href="javascript:logout();" class="btn btn-default btn-flat">{{ trans('index.logout') }}</a>
</div> </div>
</li> </li>
</ul> </ul>
@ -73,7 +84,7 @@
@else {{-- Anonymous User --}} @else {{-- Anonymous User --}}
<!-- User Account Menu --> <!-- User Account Menu -->
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<a href="{{ url('auth/login') }}" class="btn btn-login">登录</a> <a href="{{ url('auth/login') }}" class="btn btn-login">{{ trans('index.login') }}</a>
</li> </li>
@endif @endif
</ul> </ul>
@ -92,9 +103,9 @@
</p> </p>
<p> <p>
@if (is_null($user)) @if (is_null($user))
<a href="{{ url('auth/register') }}" class="button">现在注册</a> <a href="{{ url('auth/register') }}" class="button">{{ trans('index.register') }}</a>
@else @else
<a href="{{ url('user') }}" class="button">用户中心</a> <a href="{{ url('user') }}" class="button">{{ trans('index.user-center') }}</a>
@endif @endif
</p> </p>
</div> </div>

View File

@ -75,6 +75,18 @@
<!-- Navbar Right Menu --> <!-- Navbar Right Menu -->
<div class="navbar-custom-menu"> <div class="navbar-custom-menu">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<!-- Language Menu -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-language" aria-hidden="true"></i> {{ trans('index.langs') }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@foreach(config('locales') as $locale => $lang)
<li><a href="{{ url('/locale/'.$locale) }}">{{ $lang }}</a></li>
@endforeach
</ul>
</li>
<li><a href="{{ url('skinlib/upload') }}"><i class="fa fa-upload" aria-hidden="true"></i> 上传新皮肤</a></li> <li><a href="{{ url('skinlib/upload') }}"><i class="fa fa-upload" aria-hidden="true"></i> 上传新皮肤</a></li>
@if (!is_null($user)) @if (!is_null($user))
<!-- User Account Menu --> <!-- User Account Menu -->

View File

@ -42,6 +42,17 @@
<!-- Navbar Right Menu --> <!-- Navbar Right Menu -->
<div class="navbar-custom-menu"> <div class="navbar-custom-menu">
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
<!-- Language Menu -->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="fa fa-language" aria-hidden="true"></i> {{ trans('index.langs') }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
@foreach(config('locales') as $locale => $lang)
<li><a href="{{ url('/locale/'.$locale) }}">{{ $lang }}</a></li>
@endforeach
</ul>
</li>
<!-- User Account Menu --> <!-- User Account Menu -->
<li class="dropdown user user-menu"> <li class="dropdown user user-menu">
<!-- Menu Toggle Button --> <!-- Menu Toggle Button -->