ZF3 - AbstractTranslatorHelper 和 sprintf
ZF3 - AbstractTranslatorHelper and sprintf
我有一个带有两个参数 title
和 subtitle
的简单视图助手 "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;
}
}
通过调用 setTitleVariables
或 setSubtitleVariables
使用此代码,您可以为这两个字符串传递变量
然后,由您和填充的助手来选择如何呈现这些字符串。
但是我建议你这个方法:
public function render()
{
return "<h1>" . $this->title . "</h1>" . "<h3>" . $this->subtitle . "</h3>";
}
当然你可以使用 .phtml
文件或任何你想要的东西来设计它,只要你呈现一个字符串
然后是下面的代码:
$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->render();
会全力以赴!
我有一个带有两个参数 title
和 subtitle
的简单视图助手 "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;
}
}
通过调用 setTitleVariables
或 setSubtitleVariables
使用此代码,您可以为这两个字符串传递变量
然后,由您和填充的助手来选择如何呈现这些字符串。
但是我建议你这个方法:
public function render()
{
return "<h1>" . $this->title . "</h1>" . "<h3>" . $this->subtitle . "</h3>";
}
当然你可以使用 .phtml
文件或任何你想要的东西来设计它,只要你呈现一个字符串
然后是下面的代码:
$this->header('title with variable %s', 'subtitle')->setTitleVariables([$variables])->render();
会全力以赴!