Laravel 不会在内核文件中设置本地化 - 它仅在我在 routes/api 中设置时有效。php

Laravel won't to set localize in Kernel file - it works only when I set in routes/api.php

在Laravel中我根据站点的解决方案添加:set Locale in Laravel

SetLocale.php 文件在 app/Http/Middleware 在这个文件中我设置了本地化:

 <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\App;
    
    class SetLocale
    {
        public function handle($request, Closure $next)
        {
            App::setLocale('fr');
            
            return $next($request);
        }
    }

而Laravel并没有调用上面的函数。在我的应用程序中,我一直设置 en 语言。在 Kernel.php 文件中,我同时添加到网络和 api 组:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\SetLocale::class,
        EncryptCookies::class,
        AddQueuedCookiesToResponse::class,
        StartSession::class,
        ShareErrorsFromSession::class,
        VerifyCsrfToken::class,
        SubstituteBindings::class,
    ],

    'api' => [
        \App\Http\Middleware\SetLocale::class,

但是 SetLocale 的方法句柄没有被调用。

当我将此行添加到 routes/api.php 文件时它起作用了:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

app()->setLocale('fr');
Route::get('/', function ()
{
    return 'Hello API';
});

这是我的 config/app.php 文件,其中语言环境设置为 fr:

'locale' => 'fr',
'fallback_locale' => 'fr',

我正在控制器中检查:

class RegistrationController extends Controller
{
    public function store (Request $request)
    {
       return response()->json([ 'message' => __('auth.testmessage') . ' ' . app()->getLocale() ]);

当我调用此方法的请求时,我得到:

{"message":"test message2 en"}

但是当我在 api.php 文件中设置时,我得到 ... test message2 fr

如果您想要更改应用程序语言环境,您只需修改 config/app.php 文件。

此文件包含一个 array,将值从键 locale 更改为您想要的语言环境,如下所示:

'locale' => 'fr',

之后您可能需要清除配置缓存:

运行 这个命令在你的项目文件夹中 php artisan config:cache


您展示的站点只是展示了当您有一个具有多种语言的系统并且您想要提供此功能时如何在运行时更改您的应用程序区域设置配置,从任何页面更改语言。