天天看點

laravel 實作切 [ web ] 和 [ api ] 前後端分離換語言包,中英文切換

以上的是以

web

為例

第一步:建立所有的語言封包件

resources/lang

laravel 實作切 [ web ] 和 [ api ] 前後端分離換語言包,中英文切換

建立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','[email protected]');

    });

    $api->group(["namespace" => "App\Http\Controllers\Api"], function ($api) {
        //不需要做認證在這裡寫api
        $api->post('login', '[email protected]');
    });

    //不需要權限認證
    $api->group(["namespace" => "App\Http\Controllers\Api",'middleware'=>['auth.token','auth:api','switch_lang']], function ($api) {
        $api->post('setLang','[email protected]');
    });
});
           

到此結束