欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-08 11:42:00
第一步: 新建所有的语言包文件 resources/lang messages.php 就是返回一个数组 return [] 格式 中文的: return [...

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

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

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