我在Laravel项目中尝试实现翻译系统时遇到了一个问题。
在布局文件layout.php中,我在生成内容之前设置了语言:
<?php
App::setLocale(session()->get('language'));
?>
它似乎适用于后面的@lang指令(放在layout.php中(
在这些之后,我将页面的内容如下:
@yield('content')
但是文件中扩展布局的@lang指令(并且有"content"部分(不起作用。
可能是什么问题?
App::setLocale()
不是持久的,区域设置在运行时仅适用于当前请求。您可以创建一个中间件,并在中间件的句柄函数中对每个请求强制执行区域设置
App::setLocale( session('app_locale', 'fallback_language') );
然后在appHttpKernel.php
下的web组注册语言中间件后的StartSession中间件如下。
protected $middleware = [
...
AppHttpMiddlewareLanguageMiddleware::class,
...
];
签出这篇文章,https://mydnic.be/post/laravel-5-and-his-fcking-non-persistent-app-setlocale其Laravel 5,但概念相同。