laravel - 如何在流明中使用preferredLocale?

标签 laravel notifications lumen

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

$user->notify((new InvoicePaid($invoice))->locale('ar'));

我只需要在 lumen (最新版本) 中使用这个功能,但是当我实现它时就像 documentation说我有错误

调用未定义的方法 Laravel\Lumen\Application::getLocale() 这是因为在 lumen 应用程序中没有 getLocalesetLocale 方法。所以任何解决这个问题的想法。

最佳答案

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]);
}

在 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/

相关文章:

php - Laravel 迁移找不到驱动程序

laravel - 我如何用更好的方式隐藏 Laravel 模型字段

ios - 使用通知作为回调有问题吗?

php - 无法为测试设置单独的数据库 - Laravel/Lumen

laravel - 如何在Lumen中使用多个数据库

php - 如何将整理添加到 laravel 查询

php - Docker 下的 Elasticsearch 客户端中的主机名解析不起作用

java - 定期到期通知——如何避免同一条目收到重复通知?

java - 如果人们很长时间没有打开您的 Android 应用程序,如何提醒他们使用它?

php - Laravel Lumen 确保 JSON 响应