laravel5.5 动态切换多语言操作

2019-10-28

本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:任志帆的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!

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 这个成员属性中

参考文章

参考文章




章节列表