laravel實(shí)現(xiàn)于語言包的完美切換方法
需要引入:
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\App;
前言:
App::getLocale();獲取當(dāng)前語言
App::setLocale();設(shè)置語言配置文件
語言配置文件config/app.php
locale 是默認(rèn)語言,fallback_locale為備用語言
語言字符串存放在resources/lang目錄中,Blade模板引擎打印語言行{{ trans('messages.welcome') }}
思路是把當(dāng)前的語言設(shè)定存在Session里頭,然后再寫個(gè)Middleware去截Http請(qǐng)求,在截住的請(qǐng)求里用Session里的語言設(shè)定值來設(shè)Locale。
1.創(chuàng)建中間件
在Mideleware中創(chuàng)建一個(gè)名為language.php的中間件如下:
2、中間鍵創(chuàng)建完成后需要進(jìn)行注冊中間才能使用哦接下來我們進(jìn)行注冊language中間鍵進(jìn)行注冊,如果還是有不懂的小伙伴可以參考一下官網(wǎng)
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、通過路由訪問對(duì)應(yīng)的控制器接下來我們創(chuàng)建一個(gè)控制器IndexController
思路:前端頁面通過下拉菜單獲取當(dāng)前用戶選擇的語言包是英文還是簡體。通過ajax請(qǐng)求到當(dāng)前控制器,把通過setLocale進(jìn)行設(shè)置,把語言包存入到session中進(jìn)行返回。返回的同時(shí)進(jìn)行刷新頁面
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();
//寫入自己的邏輯存把信息返回到頁面中區(qū) 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>
中英文切換完成。我這邊在做語言包數(shù)據(jù)切換時(shí),在后臺(tái)是直接切換中英數(shù)據(jù)庫來實(shí)現(xiàn)數(shù)據(jù)的切換。這樣看起來不是那么的亂。如果親們還有什么好的方法一定留言
以上這篇laravel實(shí)現(xiàn)于語言包的完美切換方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Laravel框架中擴(kuò)展函數(shù)、擴(kuò)展自定義類的方法
- 關(guān)于擴(kuò)展 Laravel 默認(rèn) Session 中間件導(dǎo)致的 Session 寫入失效問題分析
- Laravel中擴(kuò)展Memcached緩存驅(qū)動(dòng)實(shí)現(xiàn)使用阿里云OCS緩存
- Laravel Intervention/image圖片處理擴(kuò)展包的安裝、使用與可能遇到的坑詳解
- Laravel4中的Validator驗(yàn)證擴(kuò)展用法詳解
- laravel容器延遲加載以及auth擴(kuò)展詳解
- Laravel中基于Artisan View擴(kuò)展包創(chuàng)建及刪除應(yīng)用視圖文件的方法
- Laravel框架路由配置總結(jié)、設(shè)置技巧大全
- 淺析Laravel5中隊(duì)列的配置及使用
- PHP開發(fā)框架laravel安裝與配置教程
- PHP框架laravel的.env文件配置教程
- laravel框架語言包拓展實(shí)現(xiàn)方法分析
相關(guān)文章
Laravel5.7框架安裝與使用學(xué)習(xí)筆記圖文詳解
這篇文章主要介紹了Laravel5.7框架安裝與使用學(xué)習(xí)筆記,結(jié)合圖文形式詳細(xì)講解了Laravel5.7框架的安裝、配置、組件、路由等基礎(chǔ)與操作技巧,需要的朋友可以參考下2019-04-04微信公眾號(hào)開發(fā)之語音消息識(shí)別php代碼
這篇文章主要為大家詳細(xì)介紹了微信公眾號(hào)開發(fā)之語音消息識(shí)別php代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08php定時(shí)執(zhí)行任務(wù)設(shè)置詳解
這篇文章主要介紹了php定時(shí)執(zhí)行任務(wù)設(shè)置的方法,非常簡單,有需要的小伙伴參考下。2015-02-02基于HTTP長連接的"服務(wù)器推"技術(shù)的php 簡易聊天室
關(guān)于HTTP長連接的“服務(wù)器推”技術(shù)原理可以查看IBM的這篇文章,我簡單的做了個(gè)DEMO.2009-10-10PHP靜態(tài)延遲綁定和普通靜態(tài)效率的對(duì)比
這篇文章主要介紹了PHP靜態(tài)延遲綁定和普通靜態(tài)效率的對(duì)比的相關(guān)資料,這里舉例說明他們之間的效率問題,需要的朋友可以參考下2017-10-10PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄
這篇文章主要為大家詳細(xì)介紹了PHP后臺(tái)實(shí)現(xiàn)微信小程序登錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08