_isNodeTranslatable($node)) {
return;
}
foreach ($this->_getNodeNamesToTranslate($node) as $translatableArg) {
/*
* .(dot) character is used as a path separator in nodes hierarchy
* e.g. info.title means that Magento needs to translate value of
node
* that is a child of node
*/
// @var $argumentHierarchy array - path to translatable item in $args array
$argumentHierarchy = explode('.', $translatableArg);
$argumentStack = & $args;
$canTranslate = true;
while (is_array($argumentStack) && count($argumentStack) > 0) {
$argumentName = array_shift($argumentHierarchy);
if (isset($argumentStack[$argumentName])) {
/*
* Move to the next element in arguments hierarchy
* in order to find target translatable argument
*/
$argumentStack = & $argumentStack[$argumentName];
} else {
// Target argument cannot be found
$canTranslate = false;
break;
}
}
if ($canTranslate && is_string($argumentStack)) {
// $argumentStack is now a reference to target translatable argument so it can be translated
$argumentStack = $this->_translateValue($argumentStack);
}
}
}
/**
* Translate argument value
*
* @param Element $node
* @return string
*/
public function translateArgument(Element $node)
{
$value = $this->_getNodeValue($node);
if ($this->_isSelfTranslatable($node)) {
$value = $this->_translateValue($value);
} elseif ($this->_isNodeTranslatable($node->getParent())) {
if (true === in_array($node->getName(), $this->_getNodeNamesToTranslate($node->getParent()))) {
$value = $this->_translateValue($value);
}
}
return $value;
}
/**
* Get node names that have to be translated
*
* @param Element $node
* @return array
*/
protected function _getNodeNamesToTranslate(Element $node)
{
return explode(' ', (string)$node['translate']);
}
/**
* Check if node has to be translated
*
* @param Element $node
* @return bool
*/
protected function _isNodeTranslatable(Element $node)
{
return isset($node['translate']);
}
/**
* Check if node has to translate own value
*
* @param Element $node
* @return bool
*/
protected function _isSelfTranslatable(Element $node)
{
return $this->_isNodeTranslatable($node) && 'true' == (string)$node['translate'];
}
/**
* Get node value
*
* @param Element $node
* @return string
*/
protected function _getNodeValue(Element $node)
{
return trim((string)$node);
}
/**
* Translate node value
*
* @param string $value
* @return \Magento\Framework\Phrase
*/
protected function _translateValue($value)
{
return (string)new \Magento\Framework\Phrase($value);
}
}