laravel配置语言包,实现网站中英文切换

戚阳曜
2023-12-01

一、laravel语言包的配置,在resources/lang/en,这是默认的语言,自己添加一个zh文件夹,在下面创建需要切换的语言页面,如

zh/header.php

<?php

return [
    'home' => '首页',
    'operation' => '操作',
];

随便定义一个语言,在页面模板中调用的时候就使用{{ trans('header.home') }},当后台语言包设置为英文的时候就是Home,中文的时候就是显示首页。

二、接下来说一下具体的实现,先配置路由中间件,

1.在app/Http/Kernel.php中添加代码如下:

 /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'switch_lang' => Middleware\SwitchLanguage::class,// 语言包中间件注册
    ];

2.在app/Http/Middleware文件夹下面创建一个类名字为:SwitchLanguage.php代码如下:

<?php

namespace App\Http\Middleware;

use Closure;

class SwitchLanguage
{
    /**
     * 根据路由自动切换语言包
     *
     * @param \Illuminate\Http\Request $request
     * @param Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $lang = 'en';// 选择的语言包,默认英文
        $clientUrl = $request->getPathInfo();// 获取请求路径
        // 如果路由为空或者/,则直接选择英文版本
        if (!empty($clientUrl) || $clientUrl == '/') {
            // 获取系统可选择的语言包数组
            $langs = config('global.lang');//这里配置语言种类
            // 切割数组获取路由中的语言包信息
            $urls = explode('/', $clientUrl);
            // 如果选择的语言版本存在,则切换到该版本
            if (!empty($urls) && in_array($urls[1], $langs)) {
                $lang = $urls[1];
            }
        }
        app()->setLocale($lang);// 设置语言包
        return $next($request);
    }

}

3.这时候配置路由组,找到routes/web.php,写路由组,代码如下:

Route::group(array('prefix' => '{lang}', 'middleware' => 'switch_lang'), function () {

    // 登录注册
    Route::group(array('namespace' => 'Web'), function () {
        Route::post('index', 'HomeController@index');
    });

});

上面prefix为定义前缀,{lang}只是随便取的名字,可以是{a},{bfa},{ds}等等,作用是为了当访问路由http://XXXX.com/zh/home时,那边的zh就表示页面加载的语言包是中文的,当为http://XXXX.com/en/home时,页面加载的语言包就是英文的。实现原理是中间件那边实现的,就是第二部实现切换的。

4.以上基本实现了所需要的配置,接下来是页面中的切换问题、前端页面代码如下:

<ul class="dropdown-menu language-ul">
    <li>
        <a href="" >{{trans('user_header.lang')}}</a>
    </li>

    <li>
        <a href="{{ str_ireplace(['/en/','/zh/'],'/en/',request()->getRequestUri())}}" >{{trans('header.en')}}</a>
    </li>
    <li>
        <a href="{{ str_ireplace(['/en/','/zh/'],'/zh/',request()->getRequestUri())}}" data-value="zh">{{trans('header.zh')}}</a>
    </li>
</ul>
以上就实现了页面的中英文切换了。


 类似资料: