feat: use proper German umlauts in UI and score reasons

This commit is contained in:
Oliver 2026-02-15 14:02:57 +01:00
parent 2f5a97aa62
commit a0b1c76d14
No known key found for this signature in database
3 changed files with 15 additions and 15 deletions

View file

@ -196,7 +196,7 @@ def collect_local_event_factors(lat: float, lon: float, night_end: dt.datetime)
event_type = row["event_type"]
label = {
"waste": "Muellabfuhr am Morgen",
"waste": "Müllabfuhr am Morgen",
"market": "Marktbetrieb am Morgen",
"event": "Lokale Veranstaltung",
"construction": "Baustelle",
@ -239,7 +239,7 @@ def collect_community_factors(spot_id: str, at_time: dt.datetime) -> list[dict]:
buckets = {
"knock": {"base": -25.0, "half_life": 10.0, "window": 30, "label": "Klopfen gemeldet"},
"noise": {"base": -15.0, "half_life": 7.0, "window": 14, "label": "Laerm gemeldet"},
"noise": {"base": -15.0, "half_life": 7.0, "window": 14, "label": "Lärm gemeldet"},
"calm": {"base": 10.0, "half_life": 7.0, "window": 14, "label": "Ruhig gemeldet"},
"police": {"base": -18.0, "half_life": 10.0, "window": 30, "label": "Polizei-Einsatz gemeldet"},
}

View file

@ -71,7 +71,7 @@ function initialize() {
legalOutputEl.textContent = "MVP-Hinweis: Impressum im Produktionsbetrieb verpflichtend mit Anbieterkennzeichnung.";
});
// Pilotwert fuer Mettmann, falls noch keine Eingabe.
// Pilotwert für Mettmann, falls noch keine Eingabe.
if (!latEl.value && !lonEl.value) {
latEl.value = "51.2500";
lonEl.value = "6.9730";
@ -136,12 +136,12 @@ async function checkApiHealth() {
}
function renderQueueStatus() {
queueStatusEl.textContent = `Queue: ${signalQueue.length} ausstehend`;
queueStatusEl.textContent = `Warteschlange: ${signalQueue.length} ausstehend`;
}
async function fillLocationFromDevice() {
if (!navigator.geolocation) {
alert("Geolocation wird auf diesem Geraet nicht unterstuetzt.");
alert("Geolocation wird auf diesem Gerät nicht unterstützt.");
return;
}
@ -177,7 +177,7 @@ async function loadScore() {
const lat = Number(latEl.value);
const lon = Number(lonEl.value);
if (!Number.isFinite(lat) || !Number.isFinite(lon)) {
alert("Bitte gueltige Koordinaten eingeben.");
alert("Bitte gültige Koordinaten eingeben.");
return;
}
@ -205,7 +205,7 @@ async function loadScore() {
currentSpot = cached.payload;
renderScore(cached.payload, true, cached.fetchedAt);
} else {
signalStatusEl.textContent = "Kein Live-Score und kein Cache fuer diesen Spot vorhanden.";
signalStatusEl.textContent = "Kein Live-Score und kein Cache für diesen Spot vorhanden.";
}
} finally {
loadScoreEl.disabled = false;
@ -217,7 +217,7 @@ function renderScore(data, fromCache, cacheTime = "") {
ampelEl.classList.remove("green", "yellow", "red");
ampelEl.classList.add(data.ampel);
ampelEl.textContent = data.ampel === "green" ? "Gruen" : data.ampel === "yellow" ? "Gelb" : "Rot";
ampelEl.textContent = data.ampel === "green" ? "Grün" : data.ampel === "yellow" ? "Gelb" : "Rot";
nightWindowEl.textContent = `Bezug: ${toLocal(data.night_window.start)} bis ${toLocal(data.night_window.end)}`;
@ -281,7 +281,7 @@ async function sendSignal(signalType) {
}
signalQueue.push(signal);
saveJSON(SIGNAL_QUEUE_KEY, signalQueue);
signalStatusEl.textContent = `Offline/Fehler: Signal '${signalType}' gequeued.`;
signalStatusEl.textContent = `Offline/Fehler: Signal '${signalType}' zwischengespeichert.`;
renderQueueStatus();
}
}
@ -323,7 +323,7 @@ async function flushSignalQueue() {
renderQueueStatus();
if (!keep.length && pending.length) {
signalStatusEl.textContent = "Alle gequeueten Signale wurden synchronisiert.";
signalStatusEl.textContent = "Alle zwischengespeicherten Signale wurden synchronisiert.";
}
}

View file

@ -13,7 +13,7 @@
<header class="top">
<h1>StaySense</h1>
<p>Kreis Mettmann Pilot: ruhige Nacht in weniger als 10 Sekunden bewerten.</p>
<small id="network-status">Netzwerkstatus wird geprueft ...</small>
<small id="network-status">Netzwerkstatus wird geprüft ...</small>
<small id="data-status">Datenstand: -</small>
</header>
@ -33,7 +33,7 @@
<div class="button-row">
<button id="use-location" class="btn secondary">Aktuellen Standort nutzen</button>
<button id="load-score" class="btn">Score fuer heute Nacht (22-06)</button>
<button id="load-score" class="btn">Score für heute Nacht (22-06)</button>
</div>
<p class="hint">Night Hours im MVP fix: 22:00 bis 06:00.</p>
@ -55,12 +55,12 @@
<h3>Community Signal</h3>
<div class="signal-grid">
<button class="btn signal" data-signal="calm">Ruhige Nacht</button>
<button class="btn signal" data-signal="noise">Laerm</button>
<button class="btn signal" data-signal="noise">Lärm</button>
<button class="btn signal" data-signal="knock">Klopfen</button>
<button class="btn signal" data-signal="police">Polizei</button>
</div>
<small id="signal-status">Noch kein Signal gesendet.</small>
<small id="queue-status">Queue: 0 ausstehend</small>
<small id="queue-status">Warteschlange: 0 ausstehend</small>
</section>
<section class="panel settings-panel">
@ -69,7 +69,7 @@
<input id="signals-enabled" type="checkbox" checked />
Community Signals aktivieren
</label>
<p class="small">Offline werden Signale gequeued und spaeter gesendet.</p>
<p class="small">Offline werden Signale zwischengespeichert und später gesendet.</p>
<h3>Rechtliches</h3>
<ul class="legal">