您好,登錄后才能下訂單哦!
使用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
看完上述內容,你們掌握使用Laravel5.5怎么動態切換多語言的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。