1. 程式人生 > >Laravel5.5 動態切換多語言操作(直接上程式碼)

Laravel5.5 動態切換多語言操作(直接上程式碼)

第一步:新建所有的語言包檔案  resources/lang

messages.php

就是返回一個數組 return [] 格式

中文的:
return [
    "test" => "這裡是測試",
    "test1" => "繼續測試",
    ......
];

英文的:

return [
    "test" => "this is a test...",
    "test1" => "test again...",
    ......
];

各種語言中的元素鍵名是對應

第二步:配置檔案 app/config/app.php

'locale' => 'zh',
'locales' => ['zh','en','cht'],  //包含的語言種類
'fallback_locale' => 'cht',

第三步:處理多語言切換的控制器以及方法

<?php
namespace App\Http\Controllers\Home;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Session;
class LangController extends Controller{
    /**
     * 切換語言包
     * @param Request $request
     */
    public function language(Request $request){
        if($request->ajax()) {  //Ajax請求訪問
            $lang = $request->all();
            $lang = $lang['lang'];
            App::setLocale($lang);  //配置預設語言
            $request->session()->put('language',$lang);  //存到session
            return App::getLocale();
        }else{
            if($request->session()->has('language')){
                $res = $request->session()->get('language'); //獲取session
                return $res;
            }

        }
    }
}

第四步:blade模板

<meta name="csrf-token" content="{{ csrf_token() }}">
<select name="lang" id="lang">
    <option value="zh" @if(Session::get('language') == 'zh') selected @endif>中文</option>
    <option value="cht" @if(Session::get('language') == 'cht') selected @endif>繁體</option>
    <option value="en" @if(Session::get('language') == 'en') selected @endif>English</option>
</select>

js部分

<script>
    $("#lang").change(function(){
        $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});
        $.post(
                "{{url('lang')}}",
                {
                    lang:$("#lang").val()
                },
                function(d){
                    if(d){
                        console.log(d);
                        location.reload(); //重新重新整理頁面
                    }
                }
        );
    });
</script>

第五步:中介軟體的設定-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 (Session::has('language') AND in_array(Session::get('language'), Config::get('app.locales'))) {
            App::setLocale(Session::get('language'));
        }
        else { // This is optional as Laravel will automatically set the fallback language if there is none specified
            App::setLocale(Config::get('app.locale'));
        }
        return $next($request);
    }

}

配置app/http/middleware/kernel.php  新增Language

基本上就是這樣了,試試看,希望可以對你有幫助.告辭