feat(web): translate combat log, action buttons, and victory/defeat screen to English

Translates formatEvent() and monsterIntentLabel() combat-log templates,
default participant-name fallbacks (Du/Der Gegner -> You/The enemy), and
every static string in the combat page template: round header, action
buttons, outcome headings, rewards panel, post-combat buttons, log panel,
and loading/error/aria-label text.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ACkMEDYiwtcfchqKkiUJNX
This commit is contained in:
Bastian Wagner
2026-08-21 21:40:04 +02:00
parent 5586e6c672
commit 0923fc0a23
3 changed files with 73 additions and 73 deletions

View File

@@ -196,7 +196,7 @@ export class CombatPageComponent implements OnInit {
}
// The location is the screen a fight resolves back into. It sits beside
// "Weiter jagen" rather than replacing it, so the hunt loop keeps its
// "Keep Hunting" rather than replacing it, so the hunt loop keeps its
// one-click rhythm.
protected goToLocation(): void {
void this.router.navigate(['/location']);
@@ -233,7 +233,7 @@ export class CombatPageComponent implements OnInit {
if (!combat || combat.monster.pendingIntent !== 'HEAVY_ATTACK') {
return null;
}
return `${combat.monster.name} bereitet Schweren Hieb vor.`;
return `${combat.monster.name} is winding up a Heavy Strike.`;
}
protected logRounds(): CombatLogRound[] {
@@ -254,36 +254,36 @@ export class CombatPageComponent implements OnInit {
protected formatEvent(event: CombatEvent): string {
const combat = this.displayed();
const playerName = combat?.player.name ?? 'Du';
const monsterName = combat?.monster.name ?? 'Der Gegner';
const playerName = combat?.player.name ?? 'You';
const monsterName = combat?.monster.name ?? 'The enemy';
if (event.type === 'DAMAGE') {
const attacker = event.source === 'PLAYER' ? playerName : monsterName;
const defender = event.target === 'PLAYER' ? playerName : monsterName;
return `${attacker} trifft ${defender} für ${event.amount} Schaden.`;
return `${attacker} hits ${defender} for ${event.amount} damage.`;
}
if (event.type === 'HEAL') {
return `${playerName} trinkt einen Trank und heilt ${event.amount} Lebenspunkte.`;
return `${playerName} drinks a potion and heals ${event.amount} HP.`;
}
if (event.type === 'DEFEND') {
return `${playerName} geht in die Verteidigung.`;
return `${playerName} braces to defend.`;
}
if (event.type === 'TELEGRAPH') {
return `${monsterName} bereitet Schweren Hieb vor.`;
return `${monsterName} is winding up a Heavy Strike.`;
}
if (event.type === 'INTERRUPT') {
return `${playerName} unterbricht den vorbereiteten Angriff von ${monsterName}.`;
return `${playerName} interrupts ${monsterName}'s attack.`;
}
if (event.type === 'COMBAT_WON') {
return `${monsterName} wurde besiegt.`;
return `${monsterName} has been defeated.`;
}
return `${playerName} wurde im Kampf besiegt.`;
return `${playerName} has been defeated.`;
}
private wait(ms: number): Promise<void> {