Translate project content to English

Make English the project-wide language: all comments, string literals,
CLI help text, design docs, journal, agent prompts, and README. Only
CLAUDE.md (the user's own instruction file) stays German, and the live
conversation between user and Claude continues in German.

Adds a new "Project language: English" section to docs/DESIGN.md as
the durable convention. No logic changes — translation only. Four
internal error strings in the typechecker were retranslated; no
test asserts on their wording.

Verified: cargo test --workspace passes (44/44).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-07 12:17:48 +02:00
parent b1dbafc6f2
commit 7577ab8a90
21 changed files with 992 additions and 984 deletions
+13 -13
View File
@@ -1,5 +1,5 @@
//! IR-Snapshot-Tests: schützen die Codegen-Pipeline vor unbeabsichtigten
//! Veränderungen am LLVM-IR. Snapshots in tests/snapshots/. Update mit
//! IR snapshot tests: guard the codegen pipeline against unintended
//! changes to the LLVM IR. Snapshots in tests/snapshots/. Update with
//! UPDATE_SNAPSHOTS=1 cargo test ir_snapshot_.
use std::path::{Path, PathBuf};
@@ -9,17 +9,17 @@ fn ail_bin() -> &'static str {
env!("CARGO_BIN_EXE_ail")
}
/// Normalisiert IR-Text für Plattform-Stabilität:
/// Normalizes IR text for platform stability:
/// - `target triple = "..."` -> `target triple = "<NORMALIZED>"`
/// - trailing whitespace pro Zeile entfernen
/// - LF-Zeilenenden, Datei endet mit genau einem `\n`
/// - strip trailing whitespace per line
/// - LF line endings, file ends with exactly one `\n`
fn normalize(ir: &str) -> String {
let mut out = String::with_capacity(ir.len());
for line in ir.split('\n') {
let line = line.strip_suffix('\r').unwrap_or(line);
let trimmed = line.trim_end();
if let Some(rest) = trimmed.strip_prefix("target triple = ") {
// rest ist `"..."` (mit Anführungszeichen) — komplett normalisieren.
// rest is `"..."` (with quotes) — fully normalize.
let _ = rest;
out.push_str("target triple = \"<NORMALIZED>\"");
} else {
@@ -27,9 +27,9 @@ fn normalize(ir: &str) -> String {
}
out.push('\n');
}
// split('\n') erzeugt nach einem trailing `\n` ein leeres letztes Stück,
// das oben mit `\n` abgeschlossen wurde. Dadurch enthält `out` typischerweise
// genau ein abschließendes `\n`. Doppelte `\n\n` am Ende reduzieren.
// split('\n') after a trailing `\n` produces an empty last piece,
// which was closed with `\n` above. So `out` typically ends in
// exactly one trailing `\n`. Reduce double `\n\n` at the end.
while out.ends_with("\n\n") {
out.pop();
}
@@ -152,10 +152,10 @@ fn ir_snapshot_list() {
check_ir_snapshot("list.ail.json", "list.ll");
}
/// Schützt das Workspace-Lowering (Iter 5c): das Eintrittsmodul `ws_main`
/// importiert `ws_lib`, beide werden in derselben `.ll` emittiert,
/// `@ail_ws_main_main` ruft `@ail_ws_lib_add` auf, und das Trampoline
/// `@main` ruft `@ail_ws_main_main`.
/// Guards workspace lowering (Iter 5c): the entry module `ws_main`
/// imports `ws_lib`; both are emitted into the same `.ll`,
/// `@ail_ws_main_main` calls `@ail_ws_lib_add`, and the trampoline
/// `@main` calls `@ail_ws_main_main`.
#[test]
fn ir_snapshot_ws_main() {
check_ir_snapshot("ws_main.ail.json", "ws_main.ll");