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

(0)

相关推荐

  • 在laravel中使用with实现动态添加where条件

    关键点:闭包 模型: public function getCollect() { return $this->belongsTo('App\Components\Misc\Models\CollectCareerTalk', 'id', 'career_talk_id'); } public function otherMethod() { return $this->belongsTo('App\Components\Misc\Models\OtherMethodModel', '主键',

  • laravel 5.5 关闭token的3种实现方式

    方法一: 关闭掉选中的那一行 整个项目可全部关闭token 方法二: 在middleware的verifyCsrfTkoen.php中添加函数方法 handle 可以在项目整个禁用token; 方法三: 定义在 protected $except = [ '屏蔽掉不用提交token的路由'], 这个可以在项目屏蔽掉部分路由不用使用token,使用起来更灵活 以上这篇laravel 5.5 关闭token的3种实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 解决Laravel5.5下的toArray问题

    作为一个有轻度强迫症且受ThinkPHP影响较深的PHP码农,总觉得Laravel5.5的DB::xxoo->get()->toArray()之后竟然还没得到我想要的ThinkPHP中的select()出来的数组,于是决定做一下修改. PS:出于尽量不影响原有框架的考虑,我是新建了一个方法叫getList来暂代toArray那不知所谓的返回结果,在没有找到更好的解决办法之前,暂时这么用着,总体感觉,get()->getList()仍觉得略丑.... 具体修改如下: 1.在/vendor/

  • 在Laravel中实现使用AJAX动态刷新部分页面

    AJAX相信大家都不陌生,有很多不同的Javascript Frameworks可以用来快速实现AJAX功能.那么今天我们一起来看一下如何在使用了PHP Frameworks的网站中使用AJAX来刷新页面的一小部分. 这里我使用的是jQuery + Laravel(当然如果使用了其他框架,基本的概念也是不变的).如图,假设我们制作了一个页面来管理客户的茶叶消耗: 我们想制作一个模块来动态为每一个新的茶叶消耗增加一个消耗选择区,即点击新增消耗后,会动态增加一个新的茶叶消耗区域: 另外,当点击删除该

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

    第一步: 新建所有的语言包文件 resources/lang messages.php 就是返回一个数组 return [] 格式 中文的: return [ "test" => "这里是测试", "test1" => "继续测试", ...... ]; 英文的: return [ "test" => "this is a test...", "test1&q

  • Spring + Mybatis 项目实现动态切换数据源实例详解

    项目背景:项目开发中数据库使用了读写分离,所有查询语句走从库,除此之外走主库. 最简单的办法其实就是建两个包,把之前数据源那一套配置copy一份,指向另外的包,但是这样扩展很有限,所有采用下面的办法. 参考了两篇文章如下: http://www.jb51.net/article/111840.htm http://www.jb51.net/article/111842.htm 这两篇文章都对原理进行了分析,下面只写自己的实现过程其他不再叙述. 实现思路是: 第一步,实现动态切换数据源:配置两个D

  • Spring配置多个数据源并实现动态切换示例

    1.配置两个不同的数据源,如下(由于项目使用的是druid数据库连接,配置可以会复杂点比较): <!-- 数据源配置1 --> <bean id="testDataSource1" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name=&quo

  • 关于Spring3 + Mybatis3整合时多数据源动态切换的问题

    以前的项目经历中,基本上都是spring + hibernate + Spring JDBC这种组合用的多.至于MyBatis,也就这个项目才开始试用,闲话不多说,进入正题. 以前的这种框架组合中,动态数据源切换可谓已经非常成熟了,网上也有非常多的博客介绍,都是继承AbstractRoutingDataSource,重写determineCurrentLookupKey()方法.具体做法就不在此废话了. 所以当项目中碰到这个问题,我几乎想都没有想,就采用了这种做法,但是一测试,一点反应都没有.当

  • Jquery实现动态切换图片的方法

    本文实例讲述了Jquery实现动态切换图片的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &

  • jQuery实现百度登录框的动态切换效果

    点击右下角图片进行状态切换,效果图 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>百度登录框</title> <style type="text/css"> *{margin: 0;padding: 0;} body { font-size: 12px; } a { te

  • jquery动态切换背景图片的简单实现方法

    本文实例讲述了jquery动态切换背景图片的简单实现方法.分享给大家供大家参考,具体如下: (function() { var bgCounter = 0, backgrounds = [ "Images/BACKGROUND_1_TEST.png", "Images/BACKGROUND_2_TEST.png", "Images/BACKGROUND_3_TEST.png" ]; function changeBackground() { bg

  • jQuery定义背景动态切换效果的方法

    本文实例讲述了jQuery定义背景动态切换效果的方法.分享给大家供大家参考.具体如下: 通过下面的jQuery插件,你可以将图片放在一个数组里,然后告诉jQuery图片需要在什么地方背景轮换 (function($){ var defaultSettings; var divfg, divbg; var fadeInterval; var fqTimer; var currImg = 0; var displImg = 0; var running = false; // Setup setti

  • javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法

    本文实例讲述了javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1

  • js动态切换图片的方法

    本文实例讲述了js动态切换图片的方法.分享给大家供大家参考.具体实现方法如下: index.css文件如下: 复制代码 代码如下: * {      margin: 0px;padding: 0px;  }    body {      width: 632px;      /*background-color: blue;*/      margin: 0 auto;  }    #imgsCom {      background-color: yellow;      /*相对定位,为了下

随机推荐