+ // Only process links that have "title".
+ if (!isset($element['title'])) {
+ continue;
+ }
+
+ // If title is an actual render array, just move it up.
+ if (Element::isRenderArray($element['title']) && !isset($element['url'])) {
+ $element = $element['title'];
+ }
+ // Otherwise, convert into an actual "link" render array element.
+ else {
+ if (!isset($element['url'])) {
+ $element['url'] = Url::fromRoute('<none>');
+ }
+
+ $attributes = isset($element['attributes']) ? $element['attributes'] : [];
+ $wrapper_attributes = isset($element['wrapper_attributes']) ? $element['wrapper_attributes'] : [];
+
+ if (isset($element['language']) && $element['language'] instanceof LanguageInterface) {
+ $attributes['hreflang'] = $element['language']->getId();
+ $wrapper_attributes['hreflang'] = $element['language']->getId();
+
+ // Ensure the Url language is set on the object itself.
+ // @todo Possibly a core bug?
+ if (empty($element['url']->getOption('language'))) {
+ $element['url']->setOption('language', $element['language']);
+ }
+ }
+