当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-18 10:34:34 浏览: 评论:0 

今天小编就为大家分享一篇Laravel5.5 动态切换多语言的操作方式,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

第一步: 新建所有的语言包文件 resources/lang

Laravel5.5切换多语言

messages.php

就是返回一个数组 return [] 格式

中文的:

  1. return [ 
  2.  "test" => "这里是测试"
  3.  "test1" => "继续测试"
  4.  ...... 
  5. ]; 

英文的:

  1. return [ 
  2.  "test" => "this is a test..."
  3.  "test1" => "test again..."
  4.  ...... 
  5. ]; 

各种语言中的元素键名是对应

第二步:配置文件 app/config/app.php

  1. 'locale' => 'zh'
  2. 'locales' => ['zh','en','cht'], //包含的语言种类 
  3. 'fallback_locale' => 'cht'

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

  1. <?php 
  2. namespace App\Http\Controllers\Home; 
  3. use App\Http\Controllers\Controller; 
  4. use Illuminate\Http\Request; 
  5. use Illuminate\Support\Facades\App; 
  6. use Session; 
  7. class LangController extends Controller{ 
  8.  /** 
  9.   * 切换语言包 
  10.   * @param Request $request 
  11.   */ 
  12.  public function language(Request $request){ 
  13.   if($request->ajax()) { //Ajax请求访问 
  14.    $lang = $request->all(); 
  15.    $lang = $lang['lang']; 
  16.    App::setLocale($lang); //配置默认语言 
  17.    $request->session()->put('language',$lang); //存到session 
  18.    return App::getLocale(); 
  19.   }else
  20.    if($request->session()->has('language')){ 
  21.     $res = $request->session()->get('language'); //获取session 
  22.     return $res
  23.    } 
  24.    
  25.   } 
  26.  } 

第四步:blade模板

  1. <meta name="csrf-token" content="{{ csrf_token() }}"
  2. <select name="lang" id="lang"
  3.  <option value="zh" @if(Session::get('language') == 'zh') selected @endif>中文</option> 
  4.  <option value="cht" @if(Session::get('language') == 'cht') selected @endif>繁体</option> 
  5.  <option value="en" @if(Session::get('language') == 'en') selected @endif>English</option> 
  6. </select> 

js部分

  1. <script> 
  2.  $("#lang").change(function(){ 
  3.   $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}}); 
  4.   $.post( 
  5.     "{{url('lang')}}"
  6.     { 
  7.      lang:$("#lang").val() 
  8.     }, 
  9.     function(d){ 
  10.      if(d){ 
  11.       console.log(d); 
  12.       location.reload(); //重新刷新页面 
  13.      } 
  14.     } 
  15.   ); 
  16.  }); 
  17. </script> 

第五步: 中间件的设置-middleware(每一次请求,每个中间件都会执行) app/http/middleware下添加Language.php 内容如下

  1. <?php 
  2. namespace App\Http\Middleware; 
  3.    
  4. use Closure; 
  5. use Illuminate\Support\Facades\App; 
  6. use Illuminate\Support\Facades\Config; 
  7. use Illuminate\Support\Facades\Session; 
  8.    
  9. class Language 
  10.  /** 
  11.   * @param $request 
  12.   * @param Closure $next 
  13.   * @return mixed 
  14.   */ 
  15.  public function handle($request, Closure $next
  16.  { 
  17.   if (Session::has('language') AND in_array(Session::get('language'), Config::get('app.locales'))) { 
  18.    App::setLocale(Session::get('language')); 
  19.   } 
  20.   else { // This is optional as Laravel will automatically set the fallback language if there is none specified 
  21.    App::setLocale(Config::get('app.locale')); 
  22.   } 
  23.   return $next($request); 
  24.  } 
  25.    

配置app/http/middleware/kernel.php 添加Language

Laravel5.5切换多语言

基本上就是这样了,试试看,希望可以对你有帮助,告辞!

Tags: Laravel5.5切换多语言

分享到: