*/ class InlineLanguageLabelsViewHelper extends AbstractViewHelper { public function initializeArguments() { parent::initializeArguments(); $this->registerArgument('labels', 'mixed', 'Comma separated list of label keys to include', FALSE, []); $this->registerArgument('htmlEscape', 'bool', 'Escape the output', FALSE, FALSE); } /** * Renders the required javascript to make the language labels available * * @return string */ public function render(): string { $labels = $this->arguments['labels']; $htmlEscape = $this->arguments['htmlEscape']; $controllerContext = $this->renderingContext->getControllerContext(); $extensionName = $controllerContext->getRequest()->getControllerExtensionName(); if (\is_string($labels)) { $labels = GeneralUtility::trimExplode(',', $labels, TRUE); } if (!\is_array($labels)) { throw new \InvalidArgumentException( 'The argument "labels" was registered with type "array|string", but is of type "' . \gettype($labels) . '" in view helper "' . \get_class($this) . '".', 1256475113 ); } $languageArray = []; foreach ($labels as $key) { $value = LocalizationUtility::translate($key, $extensionName); $languageArray[$key] = ($htmlEscape ? \htmlentities($value) : $value); } $javascriptCode = ' var AY = AY || {}; AY.lang = AY.lang || {}; AY.lang.' . $extensionName . ' = AY.lang.' . $extensionName . ' || {}; var languageLabels = ' . \json_encode($languageArray) . '; for (label in languageLabels) { AY.lang.' . $extensionName . '[label] = languageLabels[label]; } '; $this->getPageRenderer()->addJsInlineCode($extensionName, $javascriptCode); return ''; } }