Laravel5.5 動態切換多語言操作(直接上程式碼)
阿新 • • 發佈:2018-11-22
第一步:新建所有的語言包檔案 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
基本上就是這樣了,試試看,希望可以對你有幫助.告辭