如何在流明中使用preferredLocale?

时间:2019-01-16 12:14:54

标签: laravel notifications lumen

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

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

我只需要在流明(最新版本)中使用此功能,但是当我实现Like documentation时我说错了

Call to undefined method Laravel\Lumen\Application::getLocale() 这是因为在流明应用中没有getLocalesetLocale方法。所以有什么办法可以解决这个问题。

2 个答案:

答案 0 :(得分:2)

流明和Laravel之间的区别在于,在Laravel中,您称Application->setLocale()

这完成了三件事,如上所述:

  1. 设置配置app.locale
  2. 在翻译器上设置区域设置
  3. 触发locale.changed事件

在流明中,您可以直接使用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只是读取config变量:

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

对于翻译而言,重要的是翻译。 Laravel的跨性别助手看起来像这样:

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种方法使您的应用程序扩展另一个类

答案 1 :(得分:2)

您可以将Laravel\Lumen\Application扩展到新的类中,并使$app变量从bootstrap\app.php文件中的新类中获取一个实例

1-像这样创建新类:

<?php namespace App\Core;

use Laravel\Lumen\Application as Core;

class Application extends Core
{
    /**
     * @param $locale
     */
    public function setLocale($locale): void
    {
        $this['config']->set('app.locale', $locale);
        $this['translator']->setLocale($locale);
        $this['events']->fire('locale.changed', [ $locale ]);
    }

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

2-从您的新类中创建一个实例,例如:

$app = new App\Core\Application( realpath(dirname(__DIR__) . '/') );