diff --git a/README.md b/README.md
index 1722bb7..f4d205f 100644
--- a/README.md
+++ b/README.md
@@ -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.
\ No newline at end of file
diff --git a/content/de/39c3/_index.md b/content/de/39c3/_index.md
index 8d9d928..0da2ca4 100644
--- a/content/de/39c3/_index.md
+++ b/content/de/39c3/_index.md
@@ -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 en >}} | 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.).
\ No newline at end of file
diff --git a/content/en/39c3/_index.md b/content/en/39c3/_index.md
index 916a81c..41b8f7f 100644
--- a/content/en/39c3/_index.md
+++ b/content/en/39c3/_index.md
@@ -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 of the Giants](./tour-der-giganten/) {{< lang de >}} | 17:45 [Tour of the Giants](./tour-der-giganten/) {{< lang en >}} | 17:45 [Tour of the Giants](./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).
\ No newline at end of file
diff --git a/content/en/39c3/tour-der-giganten/index.md b/content/en/39c3/tour-der-giganten/index.md
index 401ffa7..40f3c31 100644
--- a/content/en/39c3/tour-der-giganten/index.md
+++ b/content/en/39c3/tour-der-giganten/index.md
@@ -44,7 +44,7 @@ Hansaport is Germany's largest seaport terminal for iron ore and coal. Inconspic
## Details
* Tours:
* Day 1 (27 December) **17:45** German
- * Day 2 (28 December) **17:45** German
+ * Day 2 (28 December) **17:45** English
* Day 3 (29 December) **17:45** German
* Duration: about 3.5 hours including a short (toilet) break
* Language: German
diff --git a/layouts/shortcodes/lang.html b/layouts/shortcodes/lang.html
new file mode 100644
index 0000000..d3a1a63
--- /dev/null
+++ b/layouts/shortcodes/lang.html
@@ -0,0 +1,16 @@
+{{- $code := .Get 0 | lower -}}
+{{- $validCodes := slice "de" "en" "deen" -}}
+{{- if not (in $validCodes $code) -}}
+ Warning: Invalid or missing language code '{{ $code }}'. Use 'de', 'en', or 'deen'.
+{{- 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 -}}
+ {{ $label }}
+{{- end -}}
\ No newline at end of file