Stufe 4c (#764): Kommentare in C#, WebUI-Skripten, CSS und HTML auf Englisch

Rund 2.600 Kommentarblöcke in 310 C#-Dateien übersetzt, Begründungen vollständig
erhalten: blockweise gleiche Anzahl wie vorher, kein Block unter 60 % seiner
Länge, der Code außerhalb der Kommentare per Tokenizer byte-identisch geprüft.
Zitate deutscher Oberflächentexte und Testdaten bleiben deutsch.

WebUI: Kommentare in JS/CSS/HTML übersetzt, JSDoc-@param an die in 4b
umbenannten Parameter angeglichen.

Dabei behoben:
- 4b hatte "tag" (HTML-Tag) als deutsches "Tag" gelesen und zu "dayValue"
  gemacht (makeElement, svg, Tagesübersicht) - zurück auf tag/day.
- Aufgaben "InProgress" bekamen die Plakettenart "laufend", für die es nie eine
  CSS-Klasse gab - jetzt "success" wie laufende Instanzen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-10-04 12:45:03 +02:00
co-authored by Claude Opus 5.5
parent da4ceac7d5
commit 837a634a22
311 changed files with 7238 additions and 7252 deletions
@@ -2,13 +2,13 @@ using System.Text.Json;
namespace ClawdDotNet.Core.Deploymentcenter.Watchdog;
/// <summary>Was der Server zu einem Heartbeat zurückmeldet.</summary>
/// <param name="State">Der daraus abgeleitete Monitor-Zustand (<c>up</c>, <c>warning</c>, …).</param>
/// <param name="FailingChecks">Welche der mitgeschickten Prüfungen fehlgeschlagen sind.</param>
/// <summary>What the server reports back for a heartbeat.</summary>
/// <param name="State">The monitor state derived from it (<c>up</c>, <c>warning</c>, …).</param>
/// <param name="FailingChecks">Which of the checks sent along failed.</param>
public sealed record WatchdogPingResult(string State, IReadOnlyList<string> FailingChecks);
/// <summary>
/// Sendet Heartbeats und Ereignisse an das Watchdog-Modul des Deploymentcenters.
/// Sends heartbeats and events to the Deploymentcenter's watchdog module.
/// </summary>
public interface IWatchdogClient
{
@@ -20,19 +20,19 @@ public interface IWatchdogClient
}
/// <summary>
/// Watchdog-Anbindung: <c>POST /api/watchdog/v1/ping</c> und
/// Watchdog connection: <c>POST /api/watchdog/v1/ping</c> and
/// <c>POST /api/watchdog/v1/event</c>.
///
/// <para><b>Ein Monitor je Instanz.</b> Der Schlüssel des Monitors ist das Paar
/// <c>source</c> + <c>instance</c> (so das Datenbankschema:
/// <c>UNIQUE KEY uq_monitor (source, instance)</c>). Alle ClawdDotNet-Instanzen melden
/// unter derselben <c>source</c> und tragen ihre eigene <c>instance</c> — damit ist jede
/// laufende Instanz ein eigener Monitor mit eigenem Zustand, eigenem Intervall und
/// eigenem Metrik-Verlauf. Stürzt eine von dreien ab, fällt genau deren Monitor.</para>
/// <para><b>One monitor per instance.</b> The key of the monitor is the pair
/// <c>source</c> + <c>instance</c> (per the database schema:
/// <c>UNIQUE KEY uq_monitor (source, instance)</c>). All ClawdDotNet instances report
/// under the same <c>source</c> and carry their own <c>instance</c> — so every
/// running instance is its own monitor with its own state, its own interval and
/// its own metrics history. If one of three crashes, exactly its monitor fails.</para>
///
/// <para>Der Monitor entsteht beim ersten Heartbeat von selbst (<c>INSERT … ON DUPLICATE
/// KEY UPDATE</c>) — eine Registrierung vorab gibt es nicht mehr und ist auch nicht
/// nötig.</para>
/// <para>The monitor comes into being on the first heartbeat by itself (<c>INSERT … ON DUPLICATE
/// KEY UPDATE</c>) — there is no prior registration any more, and none is
/// needed.</para>
/// </summary>
public sealed class WatchdogClient : IWatchdogClient, IDisposable
{
@@ -77,15 +77,15 @@ public sealed class WatchdogClient : IWatchdogClient, IDisposable
["group"] = _group,
["os"] = _os,
// Landet in watchdog_monitors.app_version. Damit steht im Dashboard, welche
// Fassung eine Instanz gerade fährt — bei mehreren Instanzen der
// Unterschied zwischen „läuft" und „läuft noch auf der alten Version".
// Ends up in watchdog_monitors.app_version. That way the dashboard shows which
// version an instance is currently running — with several instances the
// difference between "runs" and "still runs on the old version".
["version"] = _version
};
// Leere Objekte weglassen: Der Server übernimmt health_json nur, wenn etwas
// mitkommt — ein leeres würde den letzten bekannten Zustand nicht ersetzen,
// aber unnötig Platz im Protokoll kosten.
// Leave out empty objects: the server only takes over health_json if something
// comes along — an empty one would not replace the last known state,
// but would needlessly cost space in the log.
if (health.Checks.Count > 0)
{
payload["checks"] = health.Checks.ToDictionary(
@@ -127,9 +127,9 @@ public sealed class WatchdogClient : IWatchdogClient, IDisposable
}
/// <summary>
/// Ein einmaliges Vorkommnis statt einer zyklischen Meldung. Zulässige
/// <paramref name="kind"/>-Werte siehe <see cref="WatchdogEventKind"/> — der Server
/// weist andere ab.
/// A one-time occurrence instead of a cyclic report. Permitted
/// <paramref name="kind"/> values see <see cref="WatchdogEventKind"/> — the server
/// rejects others.
/// </summary>
public async Task SendEventAsync(
string kind, string severity, string? message, object? meta, CancellationToken ct)
@@ -155,9 +155,9 @@ public sealed class WatchdogClient : IWatchdogClient, IDisposable
}
/// <summary>
/// Die vom Server akzeptierten Ereignisarten. Die frühere Anbindung schickte
/// <c>start</c> und <c>stop</c> — beide stehen nicht auf dieser Liste und wurden
/// stillschweigend als <c>started</c> abgelegt.
/// The event kinds accepted by the server. The former connection sent
/// <c>start</c> and <c>stop</c> — neither is on this list, and they were
/// silently stored as <c>started</c>.
/// </summary>
public static class WatchdogEventKind
{