微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

setLocale 方法适用于布局中的翻译,但不适用于内部生成的组件

如何解决setLocale 方法适用于布局中的翻译,但不适用于内部生成的组件

我在 Laravel 项目中尝试实现翻译系统时遇到了一个问题。

在布局文件 layout.PHP 中,我在生成内容之前设置了语言:

<?PHP
    \App::setLocale(session()->get('language'));
?>

它似乎适用于后面的@lang 指令(放置在 layout.PHP 中)。

在这些之后,我产生了这样的页面内容

@yield('content')

但是扩展布局(并具有“内容”部分)的文件中的@lang 指令不起作用。

可能是什么问题?

解决方法

App::setLocale() 不是持久性的,语言环境仅适用于运行时的当前请求。您可以创建一个中间件并在中间件的句柄函数中对每个请求强制执行区域设置

App::setLocale( session('app_locale','fallback_language') );

然后在Web组下的app\Http\Kernel.php下注册Language中间件后的StartSession中间件如下。

protected $middleware = [
   ...
   \App\Http\Middleware\LanguageMiddleware::class,...
];

查看这篇文章,https://mydnic.be/post/laravel-5-and-his-fcking-non-persistent-app-setlocale 其 Laravel 5 但概念是相同的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。