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 动态切换多语言的操作方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 Laravel5.5 动态切换多语言的操作方式 的全部内容, 来源链接: utcz.com/p/223834.html

回到顶部