随着Laravel 5.7的发布,Illuminate \ Notifications \ Notification类开始提供一种设置所需语言的语言环境方法。格式化通知时,应用程序将更改为该区域设置,格式化完成后,应用程序将还原为以前的区域设置。这是此功能的示例:
$user->notify((new InvoicePaid($invoice))->locale('ar'));
我只需要在流明(最新版本)中使用此功能,但是当我实现Like documentation时我说错了
Call to undefined method Laravel\Lumen\Application::getLocale()
这是因为在流明应用中没有getLocale
或setLocale
方法。所以有什么办法可以解决这个问题。
答案 0 :(得分:2)
流明和Laravel之间的区别在于,在Laravel中,您称Application->setLocale()
。
这完成了三件事,如上所述:
app.locale
在流明中,您可以直接使用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__) . '/')
);