应用程序的默认语言存储在config/app.php 配置文件的locale 配置选项中。您可以随意修改此值以满足您的应用程序的需要。
您可以在运行时使用App 门面提供的setLocale 方法修改单个HTTP 请求的默认语言:
use Illuminate\Support\Facades\App;
Route::get('/greeting/{locale}', function ($locale) {
if (! in_array($locale, ['en', 'es', 'fr'])) {
abort(400);
}
App::setLocale($locale);
//
});
您可以配置“备用语言”,当活动语言不包含给定的翻译字符串时将使用该语言。和默认语言一样,回退语言也在config/app.php配置文件中配置:
'fallback_locale' => 'en',
确定当前语言环境
您可以使用App 外观上的currentLocale 和isLocale 方法来确定当前语言环境或检查语言环境是否为给定值:
use Illuminate\Support\Facades\App;
$locale = App::currentLocale();
if (App::isLocale('en')) {
//
}
我的建议是您创建一个中间件来相应地更改用户语言。
<?php
namespace App\Http\Middleware;
use App;
use Closure;
class Localization
{
/**
* Handle an incoming request.
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (session()->has('locale')) {
App::setlocale(session()->get('locale'));
}
return $next($request);
}
}
最后将你创建的中间件添加到 kernel.php 的 middlewareGroups 数组下。
/**
* The application's route middleware groups.
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Laravel\Jetstream\Http\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\HandleInertiaRequests::class,
\App\Http\Middleware\Localization::class, // <- Localization Middleware
],
'api' => [
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];