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'); 

建立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页面访问使用  {{__('en文件夹下文件名.key名称')}}

 

posted @   carol2014  阅读(345)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示