首页 > 编程 > PHP > 正文

Laravel5.5 动态切换多语言的操作方式

2019-11-21 19:41:00
字体:
来源:转载
供稿:网友

第一步: 新建所有的语言包文件 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',

第三步:处理多语言切换的控制器以及方法

<?phpnamespace 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 内容如下

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表