laravel5.5 动态切换多语言操作
2019-10-28
本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:任志帆的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
- 1、新建所有的语言包文件 resources/lang
- 2、配置文件 app/config/app.php
- 3、处理多语言切换的路由
- 4、修改blade模板
- 5、中间件的设置-middleware(每一次请求,每个中间件都会执行) app/http/middleware下添加Language.php 内容如下
- 6、配置app/http/middleware/kernel.php 添加Language
- 参考文章
1、新建所有的语言包文件 resources/lang
header.php 就是返回一个数组 return [] 格式
中文的
<?php
return [
"language" => "简体中文",
];
英文的:
return [
"language" => "English",
];
繁体的:
return [
"language" => "繁體中文",
];
韩文的:
return [
"language" => "한국어",
];
各种语言中的元素键名是对应
2、配置文件 app/config/app.php
'locale' => 'cn',
'locales' => ['cn','cnc','en','kn'], //包含的语言种类
'fallback_locale' => 'en',
3、处理多语言切换的路由
//语言切换接口
Route::get('/lang/{locale}', function ($locale) {
if (in_array($locale, ['en', 'sc'])) {
\Cookie::queue(\Cookie::forever('lang', $locale));
}
return back()->withInput();
});
4、修改blade模板
<select name="language" class="apply_select">
<option>--请选择--</option>
<option value="0" class="select-option"></option>
<option value="1"></option>
<option value="2" ></option>
<option value="3" ></option>
</select>
5、中间件的设置-middleware(每一次请求,每个中间件都会执行) app/http/middleware下添加Language.php 内容如下
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Session;
class Language
{
/**
* @param $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!empty($request->cookie('lang'))) {
\App::setLocale($request->cookie('lang'));
}else{
\App::setLocale(\Config::get('app.locale'));
}
return $next($request);
}
}
6、配置app/http/middleware/kernel.php 添加Language
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'language' => \App\Http\Middleware\Language::class,
];
这里注意要放在$routeMiddleware 这个成员属性中