今天小編就爲大家分享一篇laravel實現於語言包的完美切換方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
需要引入:
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\App;
前言:
App::getLocale();獲取當前語言
App::setLocale();設置語言配置文件
語言配置文件config/app.php
locale 是默認語言,fallback_locale爲備用語言
語言字符串存放在resources/lang目錄中,Blade模板引擎打印語言行{{ trans('messages.welcome') }}
思路是把當前的語言設定存在Session裏頭,然後再寫個Middleware去截Http請求,在截住的請求裏用Session裏的語言設定值來設Locale。
1.創建中間件
在Mideleware中創建一個名爲language.php的中間件如下:
2、中間鍵創建完成後需要進行註冊中間才能使用哦接下來我們進行註冊language中間鍵進行註冊,如果還是有不懂的小夥伴可以參考一下官網
http://laravelacademy.org/post/57.html,中間件詳解,這塊比較重要:
8在app下面找到Http/Kernel.php,編輯該文件 找到如下:
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \App\Http\Middleware\Language::class, //語言包中間件註冊。 ],
3、接下來我們開始書寫路由了:Route::get('demos','IndexController@ins');
4、通過路由訪問對應的控制器接下來我們創建一個控制器IndexController
思路:前端頁面通過下拉菜單獲取當前用戶選擇的語言包是英文還是簡體。通過ajax請求到當前控制器,把通過setLocale進行設置,把語言包存入到session中進行返回。返回的同時進行刷新頁面
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\App; use Illuminate\Http\Response;
public function ins(Request $request){ if($request->ajax()){ $data = $request->all(); App::setLocale($data['language']); $res = $request->session()->put('language',$data['language']); return $this->returnCode(200,'',$res); }else{
//刷新後頁面,再去獲取語言包 $rr = App::getLocale();
//寫入自己的邏輯存把信息返回到頁面中區 return view('welcome')->with('lan',$rr); } }
5、接下來我們開始編寫前端的代碼:在我們直接一welcome頁面爲例子:
<div class="container"> <div class="content"> <!--<div class="title"><a href="/demo/zh_cn" rel="external nofollow" >{{ trans('welcome.message') }}</a></div>--> <select οnchange="changelanguage(this.value)"> <option value="en"> @if(App::getLocale() =='en') selected @else @endif English </option> <option value='zh_cn'@if(App::getLocale() == 'zh_cn') selected @else @endif>簡體中文</option>> <div>{{trans('welcome.message')}}{{$lan}}</div> </select> </div> <script src="{{asset('public/home/js/jquery.min.js')}}"></script> <script> function changelanguage(val){ $.ajax({ type :'get', url :'demos', data:{ language :val }, dataType :'json', success:function(res){ if(res){ window.location.reload(); } } }) } </script> </body>
中英文切換完成。我這邊在做語言包數據切換時,在後臺是直接切換中英數據庫來實現數據的切換。這樣看起來不是那麼的亂。如果親們還有什麼好的方法一定留言
以上這篇laravel實現於語言包的完美切換方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持神馬文庫。