ZF3 - AbstractTranslatorHelper 和 sprintf

ZF3 - AbstractTranslatorHelper and sprintf

我有一个带有两个参数 titlesubtitle 的简单视图助手 "Header"。我的助手扩展了 AbstractTranslatorHelper 以翻译这两个字符串。

现在我遇到了这种情况,我必须在给定的字符串中设置一些变量。通常我会用 sprintf($this->translate('My string with the variable %s', 'test') 来做到这一点。但是我如何在我的助手中设置字符串和变量,以处理其中的翻译。或者我真的必须在设置之前翻译它吗?

目前我是这样做的,但我不太喜欢...

$this->header(sprintf($this->translate('title with variable %s'), 'test'), 'subtitle')

你可以做到这一点

$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->setSubtitleVariables([$subVars]);

你的主要代码是:

class HeaderHelper extends AbstractTranslatorHelper
{
    public function __invoke($title, $subtitle)
    {
        $this->title = $title;
        $this->subtitle = $subtitle;

        return $this;
    }

    public function setTitleVariables(array $variables)
    {
        $this->title = $this->translate(vsprintf($this->title, $variables));
        return $this;
    }

    public function setSubtitleVariables( array $variables)
    {
        $this->subtitle = $this->translate(vsprintf($this->subtitle, $variables));
        return $this;
    }
}

通过调用 setTitleVariablessetSubtitleVariables 使用此代码,您可以为这两个字符串传递变量

然后,由您和填充的助手来选择如何呈现这些字符串。

但是我建议你这个方法:

 public function render()
    {
        return "<h1>" . $this->title . "</h1>" . "<h3>" . $this->subtitle . "</h3>";
    }

当然你可以使用 .phtml 文件或任何你想要的东西来设计它,只要你呈现一个字符串 然后是下面的代码:

$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->render();

会全力以赴!