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

2019-10-2516:24:48后端程序开发Comments2,670 views字数 2070阅读模式

第一步: 新建所有的语言包文件 resources/lang文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

Laravel5.5 动态切换多语言的操作方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

messages.php文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

就是返回一个数组 return [] 格式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

中文的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

return [
 "test" => "这里是测试",
 "test1" => "继续测试",
 ......
];

英文的:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

return [
 "test" => "this is a test...",
 "test1" => "test again...",
 ......
];

各种语言中的元素键名是对应文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

第二步:配置文件 app/config/文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

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

第三步:处理多语言切换的控制器以及方法文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

<?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模板文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

<meta name="csrf-token" content="{{ csrf_token() }}">
<select name="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部分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

<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){
      (d);
      (); //重新刷新页面
     }
    }
  );
 });
</script>

第五步: 中间件的设置-middleware(每一次请求,每个中间件都会执行) app/http/middleware下添加 内容如下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

<?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::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(''));
  }
  return $next($request);
 }
 
}

配置app/http/middleware/ 添加Language文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

Laravel5.5 动态切换多语言的操作方式文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

基本上就是这样了,试试看,希望可以对你有帮助。告辞!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/17134.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/17134.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定