laravel5.4中英文切换简单实例

一、准备工作及需要了解的相关知识点:
1、相关配置文件及含义
 在 config/app.php文件中
      ‘locale’ => ‘cn’ 默认使用中文包
      ‘fallback_locale’ => ‘en’ 回退语言,当默认语言文本没有时,使用这个语言的
2、配置语言包
在 resources/lang 目录下创建你所要使用的语言包目录,如英文的叫en、中文的叫cn,安装好的laravel中会有自带的一个en目录,可以进去查看一下里面的php文件内容,所有的文件返回的都是数组。我们需要准备的就是en和cn目录中的文件要一一对应,且里面对应的数组下标也是对应的,只是它们的值需要各自配置好英文和中文的值。
3、涉及的函数方法
App::getLocale(); 获取当前语言包

App::setLocale("en"); 设置语言包

App::isLocale("en"); 判断当前是否为该语言
echo __('message.notAllow'); 使用该全局方法获取语言文本内容,message表示文件名,notAllow表示数组下标,如果当前是中文包,则获取cn包中message.php数组的值。(该用法还有很多拓展,就不多做说明了,可以自己去官网查看)
在blade试图中,方法很多 例如:{{ __(‘message.notAllow’) }}、@lang(‘message.notAllow’)、{{ trans(‘message.notAllow’) }} 都可以。
4、中间件
如果不了解中间件的可以先去了解一下,大家可以理解中间件就是在你的方法执行前先执行加载的对象(描述的可能不准确)。但是要记住,5.3以后的版本构造方法优于中间件,先执行构造后执行中间件中的方法。所以,不能在构造方法中使用seesion中间件,会报错。这里我们使用中间件辅助做中英文切换。
二、正式开始
1、en、cn包全部设置就位。
2、配置中间件:
执行命令
php artisan make:middleware language.php
生成一个叫language.php中间件,当然也 可以自己手动在 app/Http/MiddleWare中创建language.php。
然后配置,打开 Http/kernel.php,在web=>[ ],数组配置中添加上下面这段
\App\Http\Middleware\Language::class,
三、功能编写
定义好路由之后,我们先编写Controller,代码如下:
class IndexController extends Controller

{

    public function index(){

        return view("index");

    }

/** 语言切换

* @param Request $request

*/

public function edit_language(Request $request){

    if($request->ajax()){

        $data = $request->all();

        App::setLocale($data['lang']);

        $request->session()->put('lang',$data['lang']);

        echo json_encode(['status'=>200,'msg'=>'OK']);

    }

}

}
视图代码:
<!doctype html>

<html lang="{{ app()->getLocale() }}">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>中英文切换</title>

</head>

<body>

<div class="container">

<div class="content">

     <select onchange="changelang(this.value)">

       <option value="en" @if(App::getLocale() =='en')selected @endif> English </option>

       <option value='zh-cn'@if(App::getLocale() == 'zh-cn') selected @endif>简体中文</option>

    </select>

</div>

<div style="width:500px;height:200px;margin:10px auto;font-size:20px;color:blue;">{{ trans('message.result') }}</div>

</div>

<script src="{{asset('js/jquery.js')}}"></script>

<script>

function changelang(val){

$.ajax({

    type :'get',

    url :'{{url("edit_language")}}',

    data:{

       lang :val

    },

    dataType :'json',

    success:function(res){

        if(res){

         window.location.reload();

       }

    }

})

}

</script>

</body>

</html>
中间件代码:
class language

{

     public function handle($request, Closure $next)

    {

        if($request->session()->exists("lang")){

             App::setLocale(session("lang"));

        }

    return $next($request);

    }

}

运行的结果如下图:

喜欢的可以手动测试下!

你们的支持是我前进的动力,多谢阅读!

发表评论