fix: close out remaining German player-facing text across web and API tests

Repo-wide grep sweep (apps/web/src, apps/api/src) for leftover German
content strings missed by Tasks 1-9, mostly in spec fixtures/assertions
that mirror already-translated seed content (monster/item names, POI
titles and action labels, location names/descriptions) plus a few real
source-file gaps:

- inventory-detail-panel.component.ts: STAT_LABELS (Waffenschaden,
  Angriff, Leben, Rüstung) were never translated by Task 6; now match
  the identical English labels already used in inventory-page.component.html.
- app-shell.component.html: aria-label="Spielinhalt" -> "Game content"
  (this file was outside every prior task's file list).
- location-interaction-panel.component.spec.ts: dead NPC-quote fixture
  translated to match the real wounded-scout POI text.

Code comments referencing German source-spec section titles or
not-yet-seeded faction names, and inline calculation-documentation
comments, are left as-is per the source spec's scope (dev-facing
comments may stay German).

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 22:59:34 +02:00
parent ae163f000a
commit 1322285b0f
38 changed files with 243 additions and 241 deletions

View File

@@ -158,7 +158,7 @@ function createState(overrides: Partial<State> = {}): State {
{
id: BANDIT_BLADE,
key: 'bandit-blade',
name: 'Räuberklinge',
name: 'Bandit Blade',
type: ItemType.EQUIPMENT,
rarity: ItemRarity.COMMON,
iconPath: '/images/items/bandit-blade.png',
@@ -239,7 +239,7 @@ describe('CombatRewardService', () => {
});
});
describe('Aschenratte', () => {
describe('Ash Rat', () => {
it('grants a silver roll inside 4-7, persisted on the character', async () => {
const state = createState();
@@ -266,7 +266,7 @@ describe('CombatRewardService', () => {
});
});
describe('Straßenräuber', () => {
describe('Road Bandit', () => {
const banditCombat = combat({ monsterDefinitionId: ROAD_BANDIT_ID });
it('grants a silver roll inside 9-15', async () => {
@@ -281,7 +281,7 @@ describe('CombatRewardService', () => {
expect(reward.silver).toBe(9);
});
it('persists a dropped Räuberklinge as a CharacterItem and references it in the reward', async () => {
it('persists a dropped Bandit Blade as a CharacterItem and references it in the reward', async () => {
const state = createState();
const reward = await service(
@@ -301,7 +301,7 @@ describe('CombatRewardService', () => {
characterItemId: state.characterItems[0].id,
item: {
key: 'bandit-blade',
name: 'Räuberklinge',
name: 'Bandit Blade',
rarity: ItemRarity.COMMON,
iconPath: '/images/items/bandit-blade.png',
},
@@ -311,7 +311,7 @@ describe('CombatRewardService', () => {
expect(state.combatRewardItems).toHaveLength(1);
});
it('reports no items when the Räuberklinge does not drop', async () => {
it('reports no items when the Bandit Blade does not drop', async () => {
const state = createState();
const reward = await service(state, fakeLoot()).grantVictoryRewards(
@@ -450,7 +450,7 @@ describe('CombatRewardService', () => {
{
id: BANDIT_BLADE,
key: 'bandit-blade',
name: 'Räuberklinge',
name: 'Bandit Blade',
type: ItemType.EQUIPMENT,
rarity: ItemRarity.COMMON,
iconPath: '/images/items/bandit-blade.png',
@@ -458,7 +458,7 @@ describe('CombatRewardService', () => {
{
id: BANDIT_HOOD,
key: 'bandit-hood',
name: 'Räuberkapuze',
name: 'Bandit Hood',
type: ItemType.EQUIPMENT,
rarity: ItemRarity.COMMON,
iconPath: '/images/items/bandit-hood.png',