diff --git a/token.module b/token.module index ff0c3db..17d95da 100644 --- a/token.module +++ b/token.module @@ -617,10 +617,13 @@ function token_element_children(&$elements, $sort = FALSE) { * The 'p1' ... 'p9' keys point to parents of the page, if they exist, with 'p1' * pointing to the book itself and the last defined pX to the current page. * + * @param string $langcode + * The langcode in which parents should be loaded. + * * @return string[] * List of node titles of the book parents. */ -function token_book_load_all_parents(array $book) { +function token_book_load_all_parents(array $book, $langcode = NULL) { $cache = &drupal_static(__FUNCTION__, []); if (empty($book['nid'])) { @@ -632,7 +635,11 @@ function token_book_load_all_parents(array $book) { $cache[$nid] = []; $i = 1; while ($book["p$i"] != $nid) { - $cache[$nid][] = Node::load($book["p$i"])->getTitle(); + $node = Node::load($book["p$i"]); + if ($langcode) { + $node = \Drupal::service('entity.repository')->getTranslationFromContext($node, $langcode); + } + $cache[$nid][] = $node->getTitle(); $i++; } } diff --git a/token.tokens.inc b/token.tokens.inc index 7b2e2cf..dbc67bd 100755 --- a/token.tokens.inc +++ b/token.tokens.inc @@ -1227,6 +1227,9 @@ function book_tokens($type, $tokens, array $data, array $options, BubbleableMeta if (!empty($book['bid'])) { if ($book_tokens = \Drupal::token()->findWithPrefix($tokens, 'book')) { $child_node = Node::load($book['nid']); + if (!empty($options['langcode'])) { + $child_node = \Drupal::service('entity.repository')->getTranslationFromContext($child_node, $options['langcode']); + } $replacements += \Drupal::token()->generate('book', $book_tokens, ['book' => $child_node], $options, $bubbleable_metadata); } } @@ -1237,7 +1240,9 @@ function book_tokens($type, $tokens, array $data, array $options, BubbleableMeta if (!empty($book['bid'])) { $book_node = Node::load($book['bid']); - + if (!empty($options['langcode'])) { + $book_node = \Drupal::service('entity.repository')->getTranslationFromContext($book_node, $options['langcode']); + } foreach ($tokens as $name => $original) { switch ($name) { case 'root': @@ -1248,12 +1253,15 @@ function book_tokens($type, $tokens, array $data, array $options, BubbleableMeta case 'parent': if (!empty($book['pid'])) { $parent_node = Node::load($book['pid']); + if (!empty($options['langcode'])) { + $parent_node = \Drupal::service('entity.repository')->getTranslationFromContext($parent_node, $options['langcode']); + } $replacements[$original] = $parent_node->getTitle(); } break; case 'parents': - if ($parents = token_book_load_all_parents($book)) { + if ($parents = token_book_load_all_parents($book, $options['langcode'] ?? NULL)) { $replacements[$original] = token_render_array($parents, $options); } break; @@ -1268,10 +1276,13 @@ function book_tokens($type, $tokens, array $data, array $options, BubbleableMeta } if (!empty($book['pid']) && $book_tokens = \Drupal::token()->findWithPrefix($tokens, 'parent')) { $parent_node = Node::load($book['pid']); + if (!empty($options['langcode'])) { + $parent_node = \Drupal::service('entity.repository')->getTranslationFromContext($parent_node, $options['langcode']); + } $replacements += \Drupal::token()->generate('node', $book_tokens, ['node' => $parent_node], $options, $bubbleable_metadata); } if ($book_tokens = \Drupal::token()->findWithPrefix($tokens, 'parents')) { - $parents = token_book_load_all_parents($book); + $parents = token_book_load_all_parents($book, $options['langcode'] ?? NULL); $replacements += \Drupal::token()->generate('array', $book_tokens, ['array' => $parents], $options, $bubbleable_metadata); } }