There just has to be a better way to insert a link to an alternative translation than this:
function THEME_preprocess_node(&$ variables) { $ node = &$ variables['node']; // Current language $ current_language = \Drupal::languageManager()->getCurrentLanguage()->getId(); $ variables['current_language'] = $ current_language; $ variables['current_language_url'] = $ node->toUrl()->toString(); // If this is a multi-lingual node, get links to alternative language. $ languages = $ node->getTranslationLanguages(); foreach ($ languages AS $ langcode => $ language) { $ node_ja = ($ langcode == 'ja') ? $ node->getTranslation('ja') : null; if ($ node_ja && is_object($ node_ja) && $ current_language == 'en') { $ node_url = $ node_ja->toUrl()->toString(); $ variables['node_url_ja'] = $ node_url; $ variables['node_url_ja_translation'] = '<a href="' . $ node_url . '">Japanese</a>'; } $ node_en = ($ langcode == 'en') ? $ node->getTranslation('en') : null; if ($ node_en && is_object($ node_en) && $ current_language == 'ja') { $ node_url = $ node_en->toUrl()->toString(); $ variables['node_url_en'] = $ node_url; $ variables['node_url_en_translation'] = '<a href="' . $ node_url . '">English</a>'; } } // Display link to alternate translation. $ variables['node_url_translation'] = ($ current_language == 'en') ? $ variables['node_url_ja_translation'] : $ variables['node_url_en_translation']; }
It works, but it’s just not at all graceful. How should this be written? I just want to put in a link like this into a templates/node.html.twig file:
{{ node_url_translation|raw }}