随着 Laravel 5.7 的发布,Illuminate\Notifications\Notification 类开始提供一种区域设置方法来设置所需的语言。格式化通知时,应用程序将更改为此区域设置,然后在格式化完成后恢复为先前的区域设置。这是此功能的一个示例:
$user->notify((new InvoicePaid($invoice))->locale('ar'));
我只需要在 lumen (最新版本) 中使用这个功能,但是当我实现它时就像 documentation说我有错误
调用未定义的方法 Laravel\Lumen\Application::getLocale()
这是因为在 lumen 应用程序中没有 getLocale
或 setLocale
方法。所以任何解决这个问题的想法。
最佳答案
Lumen 和 Laravel 的区别在于,在 Laravel 中你调用了 Application->setLocale()
。
这做了三件事,如上所述:
- 设置配置
app.locale
- 在翻译器上设置区域设置
- 触发 locale.changed 事件
在 Lumen 中,您可以直接使用 app('translator')->setLocale()
或 App::make('translator ')->setLocale()
,
所以这里的区别是config变量不会被自动设置,locale.changed事件也不会被触发。
Laravel 的 Application 类也会更新配置并触发事件:
public function setLocale($locale)
{
$this['config']->set('app.locale', $locale);
$this['translator']->setLocale($locale);
$this['events']->fire('locale.changed', [$locale]);
}
在 Laravel 中,getLocale 只是读取配置变量:
public function getLocale()
{
return $this['config']->get('app.locale');
}
对于翻译思想来说,最重要的是翻译。 Laravel 的 trans 助手看起来像这样:
function trans($id = null, $parameters = [], $domain = 'messages', $locale = null)
{
if (is_null($id)) {
return app('translator');
}
return app('translator')->trans($id, $parameters, $domain, $locale);
}
你需要让你的应用用上面3个方法扩展另一个类
关于laravel - 如何在流明中使用preferredLocale?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54216880/