Artisan 控制台命令的本地化

Localization of an Artisan console command

我正在为我的 Laravel 应用编写一个 command line program,希望它可以本地化。由于该命令的帮助文本被定义为 $signature class 变量的一部分,因此我尝试这样创建它:

/**
 * The name and signature of the console command.
 *
 * @var string
 */
protected $signature = sprintf(
    "myapp:command {--i|id %s}",
    __("This is some help text for the ID")
);

但是,我收到此错误消息:

PHP Fatal error: Constant expression contains invalid operations

我假设 protected class 变量被视为常量,那么如何为帮助文本提供可正确本地化的字符串?有什么方法可以在实例化对象后提供文本吗?

函数不能在 属性 声明中使用,但它们可以在构造函数中使用,这很好用:

/**
 * Create a new command instance.
 *
 * @return void
 */
public function __construct()
{
    $this->signature = sprintf(
        "myapp:command {--i|id %s}",
        __("This is some help text for the ID")
    );
    parent::__construct();
}