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
    评论
在 PHP 中实现前后端分离的仿 MVC 方式,可以使用以下步骤: 1. 定义路由:在后端,使用一个路由器(例如 Slim、Laravel 等)来定义 API 路由,将请求分发到相应的控制器处理。 2. 创建控制器:控制器负责处理来自前端的请求,从模型中获取数据,并将数据传递给视图或以 JSON 格式返回给前端。 ```php class UserController { public function getUsers(Request $request, Response $response, array $args) { // 从模型获取用户数据 $users = UserModel::getAllUsers(); // 将数据以 JSON 格式返回给前端 return $response->withJson($users); } } ``` 3. 创建模型:模型负责处理与数据库的交互,执行数据操作(例如查询、插入、更新等)。 ```php class UserModel { public static function getAllUsers() { // 查询所有用户数据 $users = DB::table('users')->get(); return $users; } } ``` 4. 创建视图:在前端,使用 HTML、CSS 和 JavaScript 来创建用户界面。前端通过 AJAX 请求后端 API 获取数据,并将数据渲染到页面上。 ```javascript // 使用 JavaScript 发起 AJAX 请求获取用户数据 fetch('/api/users') .then(response => response.json()) .then(data => { // 将数据渲染到页面上 data.forEach(user => { // 渲染用户信息 // ... }); }) .catch(error => { console.error('Error:', error); }); ``` 需要注意的是,前后端分离的 MVC 方式中,后端只负责提供 API 接口,不负责渲染 HTML 页面。前端通过 AJAX 请求后端的接口,获取数据后由前端负责渲染到页面上。 这种方式可以使用各种前端框架(如 Vue.js、React 等)来构建复杂的用户界面,并通过 API 与后端进行数据交互,实现前后端的分离和解耦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值