laravel构建多语言系统
多语言切换
config/app.php 中 locale 中默认为 en
'locale' => 'zh_CN',
新建 LanguageController 用于切换语言
namespace App\Http\Controllers;
class LanguageController extends Controller
{
public function setlocale()
{
$lang = session('language');
if ($lang == 'zh_CN') {
session(['language' => 'en']);
} else {
session(['language' => 'zh_CN']);
}
return view('lang');
}
}
添加路由
Route::get('lang', 'LanguageController@setlocale')->name('lang');
App::setLocale 仅作用于当次请求,新建 Language 中间件用于拦截请求。
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\App;
class Language
{
public function handle($request, Closure $next)
{
if (session()->has('language')) {
App::setLocale(session('language'));
} else {
session(['language' => App::getLocale()]);
}
return $next($request);
}
}
将 Language 中间件添加到中间件组中
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
protected $middleware = [
....
];
protected $middlewareGroups = [
'web' => [
...
\App\Http\Middleware\Language::class
],
'api' => [
...
],
];
protected $routeMiddleware = [
....
];
}
这样访问任何路由都会执行 Language 中间件中 handle() 的内容。
resources/lang 目录下比照 en 文件夹建立对应的语言包,blade 页面访问使用 {{__('语言文件夹下文件名.key名称')}}
浙公网安备 33010602011771号