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
@@ -4,17 +4,17 @@ using Shouldly;
namespace ClawdDotNet.Tools.Tests.SocialMedia;
/// <summary>
/// S2 aus der Bestandsaufnahme: Die Kanal-/Video-Angabe wurde ungeprüft in eine
/// Argument-Zeichenkette für yt-dlp interpoliert. UseShellExecute=false verhindert
/// Shell-Metazeichen, nicht aber Options-Injection — yt-dlp kennt --exec, das beliebige
/// Befehle ausführt.
/// S2 from the inventory: the channel/video statement was interpolated unchecked into an
/// argument string for yt-dlp. UseShellExecute=false prevents
/// shell metacharacters, but not option injection — yt-dlp knows --exec, which executes arbitrary
/// commands.
///
/// Die Angriffsfälle bleiben hier dauerhaft als Testfälle dokumentiert.
/// The attack cases stay permanently documented here as test cases.
/// </summary>
public sealed class YouTubeUrlTests
{
// ═══════════════════════════════════════════════════════════
// Angriffe
// Attacks
// ═══════════════════════════════════════════════════════════
[Theory]
@@ -44,9 +44,9 @@ public sealed class YouTubeUrlTests
}
[Theory]
[InlineData("kanal name")] // Leerzeichen
[InlineData("kanal\"name")] // Anführungszeichen
[InlineData("kanal\nname")] // Zeilenumbruch
[InlineData("kanal name")] // space
[InlineData("kanal\"name")] // quotation marks
[InlineData("kanal\nname")] // line break
[InlineData("kanal;name")]
[InlineData("kanal&name")]
[InlineData("../../etc/passwd")]
@@ -67,7 +67,7 @@ public sealed class YouTubeUrlTests
}
// ═══════════════════════════════════════════════════════════
// Gegenproben — legitime Eingaben müssen weiter funktionieren
// Counter-checks — legitimate inputs must keep working
// ═══════════════════════════════════════════════════════════
[Theory]
@@ -93,14 +93,14 @@ public sealed class YouTubeUrlTests
}
// ═══════════════════════════════════════════════════════════
// Argumentbildung
// Building the arguments
// ═══════════════════════════════════════════════════════════
[Fact]
public void Die_URL_steht_hinter_dem_Optionsende_Trenner()
{
// "--" beendet die Optionsliste. Selbst wenn ein Wert wie eine Option aussähe,
// würde yt-dlp ihn danach als Adresse behandeln.
// "--" ends the option list. Even if a value looked like an option,
// yt-dlp would treat it as an address after that.
var args = YouTubeUrl.BuildLatestVideoIdArgs("https://www.youtube.com/@kanal/videos");
var separator = args.IndexOf("--");
@@ -112,8 +112,8 @@ public sealed class YouTubeUrlTests
[Fact]
public void Jedes_Argument_ist_ein_eigener_Eintrag()
{
// Entscheidend: Kein Eintrag darf mehrere Argumente enthalten — sonst könnten
// sie beim Start wieder aufgetrennt werden.
// Crucial: no entry may contain several arguments — otherwise they could
// be split apart again at startup.
var args = YouTubeUrl.BuildAudioDownloadArgs(
@"C:\Pfad mit Leerzeichen\datei.mp3",
"https://www.youtube.com/watch?v=abc",