registerArgument('element', RootRenderableInterface::class, 'Form Element to translate', true); $this->registerArgument('property', 'mixed', 'Property to translate'); $this->registerArgument('renderingOptionProperty', 'mixed', 'Property to translate'); $this->registerArgument('languageKey', 'string', 'Language key ("da" for example) or "default" to use. Also a Locale object is possible. If empty, use current locale from the request.'); } /** * Return array element by key. */ public function render(): array|string|null { self::assertArgumentTypes($this->arguments); $element = $this->arguments['element']; $property = null; if (!empty($this->arguments['property'])) { $property = $this->arguments['property']; } elseif (!empty($this->arguments['renderingOptionProperty'])) { $property = $this->arguments['renderingOptionProperty']; } if (empty($property)) { $propertyParts = []; } elseif (is_array($property)) { $propertyParts = $property; } else { $propertyParts = [$property]; } /** @var FormRuntime $formRuntime */ $formRuntime = $this->renderingContext ->getViewHelperVariableContainer() ->get(RenderRenderableViewHelper::class, 'formRuntime'); return $this->translationService->translateFormElementValue($element, $propertyParts, $formRuntime, $this->arguments['languageKey']); } private static function assertArgumentTypes(array $arguments): void { foreach (['property', 'renderingOptionProperty'] as $argumentName) { if ( !isset($arguments[$argumentName]) || is_string($arguments[$argumentName]) || is_array($arguments[$argumentName]) ) { continue; } throw new InvalidArgumentValueException( sprintf( 'Arguments "%s" either must be string or array', $argumentName ), 1504871830 ); } } }