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} -
- -
- - - {#if live?.measuredAtUnix} - Stand: {fmtTime(live.measuredAtUnix)} Uhr - {/if} +
+ +
+ + + {#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} +
+ {Math.round(renewablePct)}% +
+
+ {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} + + + {/if} +
+
+ {/if}
- - {#if loadError} -
- Live-Daten nicht erreichbar: {loadError} -
- {:else if !live} -
Lade Live-Daten…
- {:else} -
- {#if renewablePct != null} -
- {Math.round(renewablePct)}% -
-
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} - - - {/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 disclaimerHtml} -
{@html disclaimerHtml}
- {/if} - {#if explanationHref} - - Wie wird das berechnet? - - {/if} - {#if isStale} - - - {/if} -
- {/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];