Skip to content

Commit 31c9794

Browse files
authored
feat: handle Spanish translations from Sessionize (#155)
1 parent dd850dc commit 31c9794

5 files changed

Lines changed: 102 additions & 8 deletions

web/themes/interledger/interledger.theme

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,90 @@ function interledger_preprocess_block__interledger_content(&$variables) {
5454
}
5555
}
5656
}
57+
58+
/**
59+
* Helper function for Summit Talk and Summit Speaker nodes.
60+
*/
61+
function interledger_get_summit_entity_field(\Drupal\node\NodeInterface $node, $spanish_field, $default_field)
62+
{
63+
$default_language = \Drupal::languageManager()->getDefaultLanguage()->getId();
64+
$current_language = \Drupal::languageManager()->getCurrentLanguage()->getId();
65+
66+
if ($current_language != $default_language && !$node->get($spanish_field)->isEmpty()) {
67+
return $node->get($spanish_field)->value;
68+
}
69+
return $node->get($default_field)->value;
70+
}
71+
72+
/**
73+
* Preprocesses the Summit Speaker 2025 full node
74+
*
75+
* Sets the speaker bio based on the page language.
76+
*
77+
* Uses the Spanish bio (`field_speaker_biografia`) when viewing the page
78+
* in Spanish; otherwise, or if unavailable, falls back to the default
79+
* (English) bio (`field_speaker_bio`).
80+
*/
81+
function interledger_preprocess_node__summit_speaker_2025__full(&$variables)
82+
{
83+
$node = \Drupal::routeMatch()->getParameter('node');
84+
85+
$variables['bio'] = interledger_get_summit_entity_field($node, 'field_speaker_biografia', 'field_speaker_bio');
86+
}
87+
88+
/**
89+
* Preprocesses the Summit Talk 2025 full node
90+
*
91+
* Sets the Talk title and talk description based on the page language.
92+
*
93+
* Uses the Spanish title & description (`field_titulo_de_la_sesion` & `field_descripcion`) when viewing
94+
* the page in Spanish; otherwise, or if unavailable, falls back to the default
95+
* (English) title & description (`field_talk_title` & `field_talk_description`).
96+
*/
97+
function interledger_preprocess_node__summit_talk_2025__full(&$variables)
98+
{
99+
$node = \Drupal::routeMatch()->getParameter('node');
100+
101+
$variables['description'] = interledger_get_summit_entity_field($node, 'field_descripcion', 'field_talk_description');
102+
$variables['title'] = interledger_get_summit_entity_field($node, 'field_titulo_de_la_sesion', 'field_talk_title');
103+
}
104+
105+
/**
106+
* Preprocesses the Summit Talk 2025 teasers displayed in summit/2025/talks view
107+
*
108+
* Sets the Talk title and talk description based on the view language.
109+
*
110+
* Uses the Spanish title & description (`field_titulo_de_la_sesion` & `field_descripcion`) when viewing
111+
* the page in Spanish; otherwise, or if unavailable, falls back to the default
112+
* (English) title & description (`field_talk_title` & `field_talk_description`).
113+
*/
114+
function interledger_preprocess_node__summit_talk_2025__teaser(&$variables)
115+
{
116+
$node = $variables['node'];
117+
118+
$variables['description'] = interledger_get_summit_entity_field($node, 'field_descripcion', 'field_talk_description');
119+
$variables['title'] = interledger_get_summit_entity_field($node, 'field_titulo_de_la_sesion', 'field_talk_title');
120+
}
121+
122+
/**
123+
* Preprocesses the `field--node-speaker-talk-entities` field
124+
* displayed on /summit/2025/speaker/[speaker-name] page
125+
*
126+
* Prepares data for Summit Talk teasers based on the view language nodes
127+
* Uses the Spanish title & description (`field_titulo_de_la_sesion` &
128+
* `field_descripcion`) when viewing the page in Spanish; otherwise,
129+
* or if unavailable, falls back to the default (English) title &
130+
* description (`field_talk_title` & `field_talk_description`).
131+
**/
132+
function interledger_preprocess_field__node__field_speaker_talk_entities(&$variables)
133+
{
134+
$items = $variables['items'];
135+
136+
foreach ($items as $index => $item) {
137+
$node = $item['content']['#node'];
138+
$template_index = $index + 1;
139+
140+
$variables['description'][$template_index] = interledger_get_summit_entity_field($node, 'field_descripcion', 'field_talk_description');
141+
$variables['title'][$template_index] = interledger_get_summit_entity_field($node, 'field_titulo_de_la_sesion', 'field_talk_title');
142+
}
143+
}

web/themes/interledger/templates/field--node--field-speaker-talk-entities.html.twig

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{% for item in items %}
2-
{% set talkDescription = item.content['#node'].field_talk_description[0].value %}
3-
{% set talkTitle = item.content['#node'].title[0].value %}
2+
{# description[index] and title[index] are from preprocess function#}
3+
{% set talkDescription = description[loop.index] %}
4+
{% set talkTitle = title[loop.index] %}
45
{% set talkNode = item.content['#node'].nid[0].value %}
56
<div class="speaker__talk">
67
<h2><a href="{{ url('entity.node.canonical', {'node': talkNode}) }}">{{ talkTitle }}</a></h2>

web/themes/interledger/templates/node--summit-speaker-2025--full.html.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
{% set imageUrl = file_url(node.field_speaker_image.0.value|raw) %}
22
{% set imageAlt = node.field_speaker_name.0.value|raw %}
3+
{# speaker_bio variable from preprocess function #}
4+
{% set speaker_bio = bio %}
35

46
<div class="speaker node--{{ node.id }}">
57
<header class="speaker__header">
@@ -15,7 +17,7 @@
1517
</header>
1618

1719
<div class="speaker__info content-wrapper">
18-
<p>{{ node.field_speaker_bio.0.value|raw }}</p>
20+
<p>{{ speaker_bio|raw }}</p>
1921

2022
<div class="speaker__talks">
2123
{{ content.field_speaker_talk_entities }}

web/themes/interledger/templates/node--summit-talk-2025--full.html.twig

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
{% set endDate = node.field_talk_end.0.value|raw %}
33
{% set difference = endDate|date('U') - startDate|date('U') %}
44
{% set duration = (difference / 60) %}
5+
{# description and title are from preprocess function #}
6+
{% set talk_title = title %}
7+
{% set talk_description = description %}
58

69
<div class="talk node--{{ node.id }} content-wrapper">
710

@@ -26,7 +29,7 @@
2629
{% endif %}
2730

2831
<header class="talk__header">
29-
<h1>{{ node.field_talk_title.0.value|raw }}</h1>
32+
<h1>{{ talk_title|raw }}</h1>
3033
<p><time datetime="{{ startDate }}">{{ node.field_talk_start.0.value|date('U')|format_date('custom', 'D j M Y, H:i') }}</time><span> - {{ duration }}{{ 'min'|t }}</span></p>
3134
<p>
3235
{% for language in node.field_session_languages %}
@@ -44,7 +47,7 @@
4447
<div class="talk__info">
4548
{% if node.field_talk_description.0.value is defined %}
4649
<div class="talk__description">
47-
{{ node.field_talk_description.0.value|nl2br }}
50+
{{ talk_description |nl2br }}
4851
</div>
4952
{% endif %}
5053

web/themes/interledger/templates/node--summit-talk-2025--teaser.html.twig

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@
55
{% set difference = endDate|date('U') - startDate|date('U') %}
66
{% set duration = (difference / 60) %}
77
{% set nodeLink = path('entity.node.canonical', {'node': node.id}) %}
8-
{% set talkDescription = content.field_talk_description.0 |render|striptags %}
9-
8+
{# description and title from preprocess function#}
9+
{% set talkDescription = description |render|striptags %}
10+
{% set talk_title = title %}
1011
{% if content.field_talk_video[0]['#media'] is defined %}
1112
{% set videoIndicator = '<span class="talk__recording">(recording available)</span>' %}
1213
{% endif %}
1314

1415
<img src="{{ imageUrl }}" alt="{{ imageAlt }}" height="200" width="200">
1516
<div class="talk__teaser">
16-
<h2><a href="{{ nodeLink }}">{{ node.title.0.value|raw }}</a></h2>
17+
<h2><a href="{{ nodeLink }}">{{ talk_title |raw }}</a></h2>
1718
<p>
1819
<time datetime="{{ startDate }}">{{ node.field_talk_start.0.value|date('U')|format_date('custom', 'D j M Y, H:i') }}</time><span> - {{ duration }}{{ 'min'|t }}</span>
1920
{{ videoIndicator|raw }}

0 commit comments

Comments
 (0)