Adds language badges to tour overview table #39

Merged
stb merged 2 commits from language-tags into main 2025-11-08 17:39:11 +01:00
4 changed files with 70 additions and 44 deletions

View file

@ -15,3 +15,13 @@ hugo server --buildFuture --buildDrafts
```
Then open http://localhost:1313
## Shortcode: Language badge
Use the `lang` shortcode to mark whether a tour is in German, English or bilingual. It renders a small superscript badge next to the text, with details when hovered over or parsed by a screenreader.
- German: `{{< lang de >}}`
- English: `{{< lang en >}}`
- Bilingual: `{{< lang deen >}}`
For usage references check the [German](/content/de/39c3/_index.md) and [English](/content/en/39c3/_index.md) tour overview.

View file

@ -14,28 +14,28 @@ cascade:
Diese Touren bieten wir zum 39C3 Chaos Communication Congress an:
**Tag 0 (26.12.)**: [Miniatur Wunderland](./miwula/) um 12:25 und 17:15.
**Tag 0 (26.12.)**: [Miniatur Wunderland](./miwula/) um 12:25 {{< lang deen >}} und 17:15 {{< lang deen >}}.
| Zeit | Tag 1 (27.12.) | Tag 2 (28.12.) | Tag 3 (29.12.) |
| ----- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
| 10:00 | | 10:30 [Rote Flora](./flora/) | 09:30 [Feuerwehr eHLF](./firestation/) |
| 11:00 | - | - | - |
| 12:00 | 12:00 [Stadtrundgang](./city-walk/) | 12:00 [Stadtrundgang](./city-walk/) | 12:00 [Stadtrundgang](./city-walk/) |
| | | 12:15 [Eisenbahnmuseum](./eisenbahnmuseum/) | |
| | | 12:30 [Rote Flora](./flora/) | |
| 13:00 | 13:00 [Retro Spiele Museum](./retro-games-museum/) | | |
| | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) |
| | 13:45 [Freies Sender Kombinat](./fsk/) | | |
| 14:00 | 14:00 [Stadtrundgang](./city-walk/) | 14:00 [Stadtrundgang](./city-walk/) | 14:00 [Stadtrundgang](./city-walk/) |
| | 14:15 [Miniatur Wunderland](./miwula/) | 14:15 [Miniatur Wunderland](./miwula/) | 14:15 [Miniatur Wunderland](./miwula/) |
| | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) | | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) |
| | | | 14:45 [Freies Sender Kombinat](./fsk/) |
| 15:00 | 15:45 [Congress Lounge](./lounge/) | | |
| 16:00 | | | |
| 17:00 | 17:15 [Miniatur Wunderland](./miwula/) | 17:15 [Miniatur Wunderland](./miwula/) | 17:15 [Miniatur Wunderland](./miwula/) |
| | | 17:30 [Alsterdampfer](./alsterdampfer/) | 17:30 [Alsterdampfer](./alsterdampfer/) |
| | 17:45 [Tour der Giganten](./tour-der-giganten/) | 17:45 [Tour der Giganten](./tour-der-giganten/) | 17:45 [Tour der Giganten](./tour-der-giganten/) |
| 18:00 | | | |
| 19:00 | 19:00 [Alsterdampfer](./alsterdampfer/) | | |
| Zeit | Tag 1 (27.12.) | Tag 2 (28.12.) | Tag 3 (29.12.) |
|-------|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| 10:00 | | 10:30 [Rote Flora](./flora/) {{< lang de >}} | 09:30 [Feuerwehr eHLF](./firestation/) {{< lang de >}} |
| 11:00 | - | - | - |
| 12:00 | 12:00 [Stadtrundgang](./city-walk/) {{< lang de >}} | 12:00 [Stadtrundgang](./city-walk/) {{< lang de >}} | 12:00 [Stadtrundgang](./city-walk/) {{< lang de >}} |
| | | 12:15 [Eisenbahnmuseum](./eisenbahnmuseum/) {{< lang deen >}} | |
| | | 12:30 [Rote Flora](./flora/) {{< lang deen >}} | |
| 13:00 | 13:00 [Retro Spiele Museum](./retro-games-museum/) {{< lang deen >}} | | |
| | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) {{< lang de >}} | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) {{< lang de >}} | 13:30 [Alternative Hafenrundfahrt](./alternative-harbor-cruise/) {{< lang en >}} |
| | 13:45 [Freies Sender Kombinat](./fsk/) {{< lang de >}} | | |
| 14:00 | 14:00 [Stadtrundgang](./city-walk/) {{< lang en >}} | 14:00 [Stadtrundgang](./city-walk/) {{< lang en >}} | 14:00 [Stadtrundgang](./city-walk/) {{< lang en >}} |
| | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} |
| | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) {{< lang de >}} | | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) {{< lang en >}} |
| | | | 14:45 [Freies Sender Kombinat](./fsk/) {{< lang de >}} |
| 15:00 | 15:45 [Congress Lounge](./lounge/) {{< lang deen >}} | | |
| 16:00 | | | |
| 17:00 | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} |
| | | 17:30 [Alsterdampfer](./alsterdampfer/) {{< lang de >}} | 17:30 [Alsterdampfer](./alsterdampfer/) {{< lang de >}} |
| | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} |
| 18:00 | | | |
| 19:00 | 19:00 [Alsterdampfer](./alsterdampfer/) {{< lang de >}} | | |
Wir haben keine Touren an Tag 4 (30.12.).

View file

@ -13,28 +13,28 @@ cascade:
These are the tours on offer for 39C3 Chaos Communication Congress:
**Day 0 (26.12.)**: [Miniatur Wunderland](./miwula/) at 12:25 and 17:15.
**Day 0 (26.12.)**: [Miniatur Wunderland](./miwula/) at 12:25 {{< lang deen >}} and 17:15 {{< lang deen >}}.
| Time | Day 1 (27.12.) | Day 2 (28.12.) | Day 3 (29.12.) |
| ----- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- |
| 10:00 | | 10:30 [Rote Flora](./flora/) | 09:30 [Electric Firetruck](./firestation/) |
| 11:00 | - | - | - |
| 12:00 | 12:00 [City Walk](./city-walk/) | 12:00 [City Walk](./city-walk/) | 12:00 [City Walk](./city-walk/) |
| | | 12:15 [Train Museum](./eisenbahnmuseum/) | |
| | | 12:30 [Rote Flora](./flora/) | |
| 13:00 | 13:00 [Retro Games Museum](./retro-games-museum/) | | |
| | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) |
| | 13:45 [Freies Sender Kombinat Radio](./fsk/) | | |
| 14:00 | 14:00 [City Walk](./city-walk/) | 14:00 [City Walk](./city-walk/) | 14:00 [City Walk](./city-walk/) |
| | 14:15 [Miniatur Wunderland](./miwula/) | 14:15 [Miniatur Wunderland](./miwula/) | 14:15 [Miniatur Wunderland](./miwula/) |
| | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) | | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) |
| | | | 14:45 [Freies Sender Kombinat Radio](./fsk/) |
| 15:00 | 15:45 [Congress Lounge](./lounge/) | | |
| 16:00 | | | |
| 17:00 | 17:15 [Miniatur Wunderland](./miwula/) | 17:15 [Miniatur Wunderland](./miwula/) | 17:15 [Miniatur Wunderland](./miwula/) |
| | | 17:30 [Alster Steamer](./alsterdampfer/) | 17:30 [Alster Steamer](./alsterdampfer/) |
| | 17:45 [Tour der Giganten](./tour-der-giganten/) | 17:45 [Tour der Giganten](./tour-der-giganten/) | 17:45 [Tour der Giganten](./tour-der-giganten/) |
| 18:00 | | | |
| 19:00 | 19:00 [Alster Steamer](./alsterdampfer/) | | |
| Time | Day 1 (27.12.) | Day 2 (28.12.) | Day 3 (29.12.) |
|-------|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|----------------------------------------------------------------------------------|
| 10:00 | | 10:30 [Rote Flora](./flora/) {{< lang de >}} | 09:30 [Electric Firetruck](./firestation/) {{< lang de >}} |
| 11:00 | - | - | - |
| 12:00 | 12:00 [City Walk](./city-walk/) {{< lang de >}} | 12:00 [City Walk](./city-walk/) {{< lang de >}} | 12:00 [City Walk](./city-walk/) {{< lang de >}} |
| | | 12:15 [Train Museum](./eisenbahnmuseum/) {{< lang deen >}} | |
| | | 12:30 [Rote Flora](./flora/) {{< lang deen >}} | |
| 13:00 | 13:00 [Retro Games Museum](./retro-games-museum/) {{< lang deen >}} | | |
| | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) {{< lang de >}} | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) {{< lang de >}} | 13:30 [Alternative Harbour Cruise](./alternative-harbor-cruise/) {{< lang en >}} |
| | 13:45 [Freies Sender Kombinat Radio](./fsk/) {{< lang de >}} | | |
| 14:00 | 14:00 [City Walk](./city-walk/) {{< lang en >}} | 14:00 [City Walk](./city-walk/) {{< lang en >}} | 14:00 [City Walk](./city-walk/) {{< lang en >}} |
| | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 14:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} |
| | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) {{< lang de >}} | | 14:15 [Alter Elbtunnel](./alter-elbtunnel/) {{< lang en >}} |
| | | | 14:45 [Freies Sender Kombinat Radio](./fsk/) {{< lang de >}} |
| 15:00 | 15:45 [Congress Lounge](./lounge/) {{< lang deen >}} | | |
| 16:00 | | | |
| 17:00 | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} | 17:15 [Miniatur Wunderland](./miwula/) {{< lang deen >}} |
| | | 17:30 [Alster Steamer](./alsterdampfer/) {{< lang de >}} | 17:30 [Alster Steamer](./alsterdampfer/) {{< lang de >}} |
| | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} | 17:45 [Tour der Giganten](./tour-der-giganten/) {{< lang de >}} |
| 18:00 | | | |
| 19:00 | 19:00 [Alster Steamer](./alsterdampfer/) {{< lang de >}} | | |
There are no tours on day 4 (30 December).

View file

@ -0,0 +1,16 @@
{{- $code := .Get 0 | lower -}}
{{- $validCodes := slice "de" "en" "deen" -}}
{{- if not (in $validCodes $code) -}}
<span style="color: red; font-weight: bold;">Warning: Invalid or missing language code '{{ $code }}'. Use 'de', 'en', or 'deen'.</span>
{{- else -}}
{{- $label := cond (eq $code "de") "DE" (cond (eq $code "en") "EN" (cond (eq $code "deen") "DE/EN" "")) -}}
{{- $title := "" -}}
{{- if eq $code "deen" -}}
{{- $title = cond (eq .Site.Language.Lang "de") "Diese Tour wird zweisprachig stattfinden (Deutsch und Englisch)" "This tour will be bilingual (German and English)" -}}
{{- else if eq $code "de" -}}
{{- $title = cond (eq .Site.Language.Lang "de") "Diese Tour wird auf Deutsch stattfinden" "This tour will be held in German" -}}
{{- else if eq $code "en" -}}
{{- $title = cond (eq .Site.Language.Lang "de") "Diese Tour wird auf Englisch stattfinden" "This tour will be held in English" -}}
{{- end -}}
<abbr style="font-size: .65em; vertical-align: super;" title="{{ $title }}">{{ $label }}</abbr>

Initially used classes and added them to /assets/sass/_custom.scss, but this way logic and styling of the badges are limited to one file. Happy to change this, if requested.

Initially used classes and added them to `/assets/sass/_custom.scss`, but this way logic and styling of the badges are limited to one file. Happy to change this, if requested.
{{- end -}}