laravel 实现切 [ web ] 和 [ api ] 前后端分离换语言包,中英文切换

17 篇文章 0 订阅

以上的是以 web 为例

第一步:新建所有的语言包文件 resources/lang
这里写图片描述
建立global.php文件

   中文的:
    return [
        "test" => "这里是测试",
        "test1" => "继续测试",
        ......
    ];
    英文的:
    return [
        "test" => "this is a test...",
        "test1" => "test again...",
    ......
    ];

就是返回一个数组 return [] 格式

注意: 各种语言中的元素键名是对应
第二步:配置文件 app/config/app.php

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

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

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Session;


class SetLangController extends Controller
{

    public function language(Request $request){

            $lang = $request->lang;

            App::setLocale($lang);  //配置默认语言
            $request->session()->put('language',$lang);  //存到session
            return App::getLocale();
    }

}

第四步:中间件的设置-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
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $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 {

            App::setLocale(Config::get('app.locale'));

        }

        return $next($request);
    }
}

配置app/http/middleware/kernel.php 添加 Language

 protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\Language::class,  //这里


        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

基本上就是这样了,试试看,希望可以对你有帮助.告辞


前后端分离,切换语言包

以下为前后端分离是laravel无法使用session ,下面讲解如何使用api切换语言包

以上不变,在中间中是需要变化一下:
一、在Kernel.php

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        ...
        ...
    'switch_lang'=>\Illuminate\Session\Middleware\StartSession::class,//这里开启session
        'lang'=>\App\Http\Middleware\Language::class,  //这里自己定义的切换语言包


    ];

二、在api路由中

<?php

$api = app("Dingo\Api\Routing\Router");
$api->version('v1', function ($api) {

    $api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','permissions','switch_lang','lang']],
        function ($api) {
        //用户认证之后在这里写api
        $api->post('college_alterlist','ResourceController@collegeList');

    });

    $api->group(["namespace" => "App\Http\Controllers\Api"], function ($api) {
        //不需要做认证在这里写api
        $api->post('login', 'TokenController@login');
    });

    //不需要权限认证
    $api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','switch_lang']], function ($api) {
        $api->post('setLang','SetLangController@language');
    });
});

到此结束

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值