diff --git a/src/lib/components/blocks/StrommixBlock.svelte b/src/lib/components/blocks/StrommixBlock.svelte
index 7e5bf82..6679ee8 100644
--- a/src/lib/components/blocks/StrommixBlock.svelte
+++ b/src/lib/components/blocks/StrommixBlock.svelte
@@ -1,314 +1,451 @@
- {#if block.intro_headline || introHtml}
-
- {#if block.intro_headline}
- {block.intro_headline}
- {/if}
- {#if introHtml}
- {@html introHtml}
- {/if}
-
- {/if}
+ {#if block.intro_headline || introHtml}
+
+ {#if block.intro_headline}
+ {block.intro_headline}
+ {/if}
+ {#if introHtml}
+ {@html introHtml}
+ {/if}
+
+ {/if}
-
-
-
-
-
- Strommix jetzt
-
- {#if live?.measuredAtUnix}
-
Stand: {fmtTime(live.measuredAtUnix)} Uhr
- {/if}
+
+
+
+
+
+ {t(T.strommix_header)}
+
+ {#if live?.measuredAtUnix}
+ {t(T.strommix_stand, {
+ time: fmtTime(live.measuredAtUnix),
+ })}
+ {/if}
+
+
+
+ {#if loadError}
+
+ {t(T.strommix_load_error, { error: loadError })}
+
+ {:else if !live}
+
+ {t(T.strommix_loading)}
+
+ {:else}
+
+ {#if renewablePct != null}
+
+
+ {t(T.strommix_wind_solar_share)}
+
+
+ → {statusLabel}
+
+ {#if argumentHtml}
+
+ {@html argumentHtml}
+
+ {/if}
+ {:else}
+
+
+ {t(T.strommix_load_missing)}
+
+ {/if}
+
+
+
+
+
+
+ {t(T.strommix_conventional_now)}
+
+
+ {fmtMw(live.conventionalMw)}
+
+
+ {t(T.strommix_conventional_formula)}
+
+
+
+
+ {importDirection === "Import"
+ ? t(T.strommix_import)
+ : importDirection === "Export"
+ ? t(T.strommix_export)
+ : t(T.strommix_saldo)}
+
+
+ {#if importDirection === "Import"}↓{/if}
+ {#if importDirection === "Export"}↑{/if}
+ {fmtGw(live.netFlowGw)}
+
+ {#if live.crossborderMeasuredAtUnix}
+
+ {t(T.strommix_stand, {
+ time: fmtTime(live.crossborderMeasuredAtUnix),
+ })}
+ {#if cbStale}
+ · {t(T.strommix_delayed)}{/if}
+
+ {/if}
+
+
+
+
+
+
+ {t(T.strommix_price_de, {
+ price: fmtPrice(live.priceDeEurMwh),
+ })}
+ {#if enableFr && live.priceFrEurMwh != null}
+ {t(T.strommix_price_fr_inline, {
+ price: fmtPrice(live.priceFrEurMwh),
+ })}
+ {/if}
+ {#if live.priceMeasuredAtUnix}
+
+ · {t(T.strommix_slot, {
+ time: fmtTime(live.priceMeasuredAtUnix),
+ })}
+
+ {/if}
+ {#if (live.priceDeEurMwh ?? 0) < 0}
+
+
+ {t(T.strommix_negative_price)}
+
+ {/if}
+
+
+ {/if}
-
- {#if loadError}
-
- Live-Daten nicht erreichbar: {loadError}
-
- {:else if !live}
-
Lade Live-Daten…
- {:else}
-
- {#if renewablePct != null}
-
-
Wind & Solar am Bedarf
-
→ {statusLabel}
- {#if argumentHtml}
-
- {@html argumentHtml}
-
- {/if}
- {:else}
-
-
- Lastwert von SMARD gerade nicht verfügbar — Prozentanzeige ausgesetzt.
- Erzeugung wird unten in der Detailansicht weiter angezeigt.
-
- {/if}
-
-
-
-
-
-
Konventionell jetzt
-
{fmtMw(live.conventionalMw)}
-
Braunkohle + Steinkohle + Erdgas + Kernkraft
-
-
-
- {importDirection ?? "Saldo"}
-
-
- {#if importDirection === "Import"}↓{/if}
- {#if importDirection === "Export"}↑{/if}
- {fmtGw(live.netFlowGw)}
-
- {#if live.crossborderMeasuredAtUnix}
-
- Stand: {fmtTime(live.crossborderMeasuredAtUnix)} Uhr
- {#if cbStale} · verzögert{/if}
-
- {/if}
-
-
-
-
-
-
- Strompreis DE: {fmtPrice(live.priceDeEurMwh)}
- {#if enableFr && live.priceFrEurMwh != null}
- (Frankreich: {fmtPrice(live.priceFrEurMwh)})
- {/if}
- {#if live.priceMeasuredAtUnix}
-
- · Slot {fmtTime(live.priceMeasuredAtUnix)}
-
- {/if}
- {#if (live.priceDeEurMwh ?? 0) < 0}
-
-
- Negativpreis
-
- {/if}
-
-
- {/if}
-
-
-
- {#if live}
-
-
- Wert prüfen — alle Komponenten anzeigen
-
-
-
Wind onshore
{fmtMw(live.windOnshoreMw)}
-
Wind offshore
{fmtMw(live.windOffshoreMw)}
-
Photovoltaik
{fmtMw(live.solarMw)}
-
Braunkohle
{fmtMw(live.ligniteMw)}
-
Steinkohle
{fmtMw(live.hardCoalMw)}
-
Erdgas
{fmtMw(live.gasMw)}
-
Kernkraft
{fmtMw(live.nuclearMw)}
-
Biomasse
{fmtMw(live.biomassMw)}
-
Wasserkraft
{fmtMw(live.hydroMw)}
-
Last
{fmtMw(live.loadMw)}
-
-
- Quelle:
- {#if live.dataSource === "smard"}
- smard.de (Bundesnetzagentur)
- {:else if live.dataSource === "smard+energy-charts"}
- smard.de + energy-charts.info (Last-Wert ergänzt)
- {:else}
- energy-charts.info (ENTSO-E + SMARD)
- {/if}
- — 15-Min-Auflösung, Stand: {fmtTime(live.measuredAtUnix)} Uhr.
- Konventionell = Braunkohle + Steinkohle + Erdgas + Kernkraft (Pumpspeicher,
- Sonstige Konventionelle und Wasserkraft sind separat ausgewiesen).
-
-
- {/if}
+ {#if live}
+
+
+ {t(T.strommix_check_values)}
+
+
+
+ {t(T.strommix_field_wind_onshore)}
+
+
{fmtMw(live.windOnshoreMw)}
+
+ {t(T.strommix_field_wind_offshore)}
+
+
{fmtMw(live.windOffshoreMw)}
+
{t(T.strommix_field_solar)}
+
{fmtMw(live.solarMw)}
+
+ {t(T.strommix_field_lignite)}
+
+
{fmtMw(live.ligniteMw)}
+
+ {t(T.strommix_field_hard_coal)}
+
+
{fmtMw(live.hardCoalMw)}
+
{t(T.strommix_field_gas)}
+
{fmtMw(live.gasMw)}
+
+ {t(T.strommix_field_nuclear)}
+
+
{fmtMw(live.nuclearMw)}
+
+ {t(T.strommix_field_biomass)}
+
+
{fmtMw(live.biomassMw)}
+
{t(T.strommix_field_hydro)}
+
{fmtMw(live.hydroMw)}
+
+ {t(T.strommix_field_load)}
+
+
{fmtMw(live.loadMw)}
+
+
+ {t(T.strommix_source)}
+ {#if live.dataSource === "smard"}
+ {t(T.strommix_source_smard)}
+ {:else if live.dataSource === "smard+energy-charts"}
+ {t(T.strommix_source_hybrid)}
+ {:else}
+ {t(T.strommix_source_energy_charts)}
+ {/if}
+ — {t(T.strommix_source_resolution, {
+ time: fmtTime(live.measuredAtUnix),
+ })}
+ {t(T.strommix_conventional_explanation)}
+
+
+ {/if}
-
- {#if disclaimerHtml || explanationHref || isStale}
-
- {/if}
+
+ {#if disclaimerHtml || explanationHref || isStale}
+
+ {/if}
diff --git a/src/lib/translations.ts b/src/lib/translations.ts
index 04e6f61..97e4583 100644
--- a/src/lib/translations.ts
+++ b/src/lib/translations.ts
@@ -168,6 +168,42 @@ const TRANSLATION_KEYS = [
"post_action_copied",
"post_action_print",
"post_action_reading_time",
+ // Strommix-Live-Widget (StrommixBlock.svelte).
+ "strommix_header",
+ "strommix_stand", // {{time}}
+ "strommix_load_error", // {{error}}
+ "strommix_loading",
+ "strommix_wind_solar_share",
+ "strommix_load_missing",
+ "strommix_conventional_now",
+ "strommix_conventional_formula",
+ "strommix_saldo",
+ "strommix_import",
+ "strommix_export",
+ "strommix_delayed",
+ "strommix_price_de", // {{price}}
+ "strommix_price_fr_inline", // {{price}}
+ "strommix_slot", // {{time}}
+ "strommix_negative_price",
+ "strommix_check_values",
+ "strommix_field_wind_onshore",
+ "strommix_field_wind_offshore",
+ "strommix_field_solar",
+ "strommix_field_lignite",
+ "strommix_field_hard_coal",
+ "strommix_field_gas",
+ "strommix_field_nuclear",
+ "strommix_field_biomass",
+ "strommix_field_hydro",
+ "strommix_field_load",
+ "strommix_source",
+ "strommix_source_smard",
+ "strommix_source_hybrid",
+ "strommix_source_energy_charts",
+ "strommix_source_resolution", // {{time}}
+ "strommix_conventional_explanation",
+ "strommix_stored_data",
+ "strommix_how_calculated",
] as const;
export type TranslationKey = (typeof TRANSLATION_KEYS)[number];