laravel實現(xiàn)于語言包的完美切換方法
需要引入:
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\App;
前言:
App::getLocale();獲取當前語言
App::setLocale();設(shè)置語言配置文件
語言配置文件config/app.php
locale 是默認語言,fallback_locale為備用語言
語言字符串存放在resources/lang目錄中,Blade模板引擎打印語言行{{ trans('messages.welcome') }}
思路是把當前的語言設(shè)定存在Session里頭,然后再寫個Middleware去截Http請求,在截住的請求里用Session里的語言設(shè)定值來設(shè)Locale。
1.創(chuàng)建中間件
在Mideleware中創(chuàng)建一個名為language.php的中間件如下:
2、中間鍵創(chuàng)建完成后需要進行注冊中間才能使用哦接下來我們進行注冊language中間鍵進行注冊,如果還是有不懂的小伙伴可以參考一下官網(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、通過路由訪問對應(yīng)的控制器接下來我們創(chuàng)建一個控制器IndexController
思路:前端頁面通過下拉菜單獲取當前用戶選擇的語言包是英文還是簡體。通過ajax請求到當前控制器,把通過setLocale進行設(shè)置,把語言包存入到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();
//寫入自己的邏輯存把信息返回到頁面中區(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ù)據(jù)庫來實現(xiàn)數(shù)據(jù)的切換。這樣看起來不是那么的亂。如果親們還有什么好的方法一定留言
以上這篇laravel實現(xiàn)于語言包的完美切換方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Laravel框架中擴展函數(shù)、擴展自定義類的方法
- 關(guān)于擴展 Laravel 默認 Session 中間件導(dǎo)致的 Session 寫入失效問題分析
- Laravel中擴展Memcached緩存驅(qū)動實現(xiàn)使用阿里云OCS緩存
- Laravel Intervention/image圖片處理擴展包的安裝、使用與可能遇到的坑詳解
- Laravel4中的Validator驗證擴展用法詳解
- laravel容器延遲加載以及auth擴展詳解
- Laravel中基于Artisan View擴展包創(chuàng)建及刪除應(yīng)用視圖文件的方法
- Laravel框架路由配置總結(jié)、設(shè)置技巧大全
- 淺析Laravel5中隊列的配置及使用
- PHP開發(fā)框架laravel安裝與配置教程
- PHP框架laravel的.env文件配置教程
- laravel框架語言包拓展實現(xiàn)方法分析
相關(guān)文章
Swoole?webSocket客服IM消息系統(tǒng)方案解析
這篇文章主要為大家介紹了Swoole?webSocket客服IM消息系統(tǒng)方案解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
簡單示例AJAX結(jié)合PHP代碼實現(xiàn)登錄效果代碼
比較簡單的通過ajax+php實現(xiàn)登陸功能,這是個簡單的例子,固定字符,實際應(yīng)用中可以從數(shù)據(jù)庫中讀取2008-07-07
ThinkPHP5.1+Ajax實現(xiàn)的無刷新分頁功能示例
這篇文章主要介紹了ThinkPHP5.1+Ajax實現(xiàn)的無刷新分頁功能,結(jié)合實例形式詳細分析了ThinkPHP5.1+Ajax無刷新分頁具體原理、前臺數(shù)據(jù)發(fā)送與后臺處理相關(guān)操作技巧,需要的朋友可以參考下2020-02-02
destoon實現(xiàn)會員商鋪中指定會員或會員組投放廣告的方法
這篇文章主要介紹了destoon實現(xiàn)會員商鋪中指定會員或會員組投放廣告的方法,很實用的技巧,需要的朋友可以參考下2014-08-08
php實現(xiàn)的IMEI限制的短信驗證碼發(fā)送類
本文給大家分享的是可以檢驗手機號碼與IMEI的短信驗證碼發(fā)送的php類,十分的實用,這里推薦給大家,有需要的小伙伴可以參考下。2015-05-05
PHP下 Mongodb 連接遠程數(shù)據(jù)庫的實例代碼
這篇文章主要介紹了PHP下 Mongodb 連接遠程數(shù)據(jù)庫的實例代碼,需要的朋友可以參考下2017-08-08

