如何在流明中使用preferredLocale?

The*_*eky 3 notifications laravel lumen

随着 Laravel 5.7 的发布,Illuminate\Notifications\Notification 类开始提供一个 locale 方法来设置所需的语言。格式化通知时,应用程序将更改为此区域设置,然后在格式化完成后恢复到先前的区域设置。以下是此功能的示例:

$user->notify((new InvoicePaid($invoice))->locale('ar'));
Run Code Online (Sandbox Code Playgroud)

我只需要在 lumen(最新版本)中使用这个功能,但是当我实现那个 Like文档时说我得到了一个错误

Call to undefined method Laravel\Lumen\Application::getLocale() 这是因为在流明应用中没有getLocale或没有setLocale方法..所以有任何解决这个问题的想法。

Ahm*_*any 6

Lumen 和 Laravel 之间的区别在于,在 Laravel 中你调用Application->setLocale().

这做了三件事,如上所述:

  1. 设置配置 app.locale
  2. 在翻译器上设置语言环境
  3. 触发 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]);
}
Run Code Online (Sandbox Code Playgroud)

在 Laravel 中,getLocale 只是读取配置变量:

public function getLocale()
{
    return $this['config']->get('app.locale');
}
Run Code Online (Sandbox Code Playgroud)

对于翻译思想来说,重要的是翻译者。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);
}
Run Code Online (Sandbox Code Playgroud)

您需要使用上述 3 种方法使您的应用程序扩展另一个类