laravel5.5 动态切换多语言操作

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

语言包.jpg

header.php
就是返回一个数组 return [] 格式
中文的

<?php
return [
    "language" => "简体中文",
];

英文的:

return [
    "language" => "English",
];

繁体的:

return [
    "language" => "繁體中文",
];

韩文的:

return [
    "language" => "한국어",
];

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

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

 'locale' => 'cn',
    'locales' => ['cn','cnc','en','kn'],  //包含的语言种类
    'fallback_locale' => 'en',

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

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class LanguageController extends Controller
{
    //
    public function language(Request $request)
    {
        if ($request->ajax()) {  //Ajax请求访问
            $lang=$request->input('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模板

<select name="language" class="apply_select">
        <option>--请选择--</option>
        <option value="0"  class="select-option">{{trans('header.language')}}</option>
        <option value="1">{{trans('header.language')}}</option>
        <option value="2" >{{trans('header.language')}}</option>
        <option value="3" >{{trans('header.language')}}</option>
    </select>

js部分

 $(function () {
        $("input:button").click(function () {
            $.ajax({
                url: "/language",
                type: "GET",
                data: "lang=cn",
                dataType: "json",  //返回数据的 类型 text|json|html--
                success: function (users) {    //回调函数 和 后台返回的 数据
                }
            });
            window.location.reload()
        });
    });

第五步:中间件的设置-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

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'language' => \App\Http\Middleware\Language::class,
    ];

这里注意要放在$routeMiddleware 这个成员属性中

参考文章 https://blog.csdn.net/Gino_tkzzz/article/details/81080328

任志帆博客
请先登录后发表评论
  • 最新评论
  • 总共1条评论
任志帆博客

梦里寻香:为什么配图都是坦克。。。

2018-09-10 17:19:06 回复

任志帆博客
  • 任志帆 回复 梦里寻香:随便弄的 哈哈任志帆博客
  • 2018-09-10 17:50:44 回复
  • v1.0- renzhifan.cn 版权所有 ICP证:京ICP备18035965号
  • 联系邮箱:zhifan6797@163.com