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:
@@ -14,7 +14,7 @@ const activeCombat: Combat = {
|
||||
player: { name: 'Aric Duskwalker', maxHp: 100, currentHp: 95, potionsRemaining: 2, potionsMax: 2 },
|
||||
monster: {
|
||||
key: 'ash-rat',
|
||||
name: 'Aschenratte',
|
||||
name: 'Ash Rat',
|
||||
level: 1,
|
||||
maxHp: 45,
|
||||
currentHp: 31,
|
||||
@@ -28,7 +28,7 @@ const activeCombat: Combat = {
|
||||
rewards: null,
|
||||
};
|
||||
|
||||
const monsterHitLine = 'Aschenratte hits Aric Duskwalker for 5 damage.';
|
||||
const monsterHitLine = 'Ash Rat hits Aric Duskwalker for 5 damage.';
|
||||
|
||||
function countOccurrences(haystack: string | null, needle: string): number {
|
||||
return haystack ? haystack.split(needle).length - 1 : 0;
|
||||
@@ -97,7 +97,7 @@ describe('CombatPageComponent', () => {
|
||||
|
||||
expect(element.textContent).toContain('Aric Duskwalker');
|
||||
expect(element.textContent).toContain('95 / 100');
|
||||
expect(element.textContent).toContain('Aschenratte');
|
||||
expect(element.textContent).toContain('Ash Rat');
|
||||
expect(element.textContent).toContain('31 / 45');
|
||||
expect(element.querySelector('[data-combat-round]')?.textContent).toContain('Round 2');
|
||||
expect(element.querySelector('[data-combat-attack]')).toBeTruthy();
|
||||
@@ -169,7 +169,7 @@ describe('CombatPageComponent', () => {
|
||||
const element = fixture.nativeElement as HTMLElement;
|
||||
|
||||
expect(element.querySelector('[data-combat-telegraph]')?.textContent).toContain(
|
||||
'Aschenratte is winding up a Heavy Strike.',
|
||||
'Ash Rat is winding up a Heavy Strike.',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -194,16 +194,16 @@ describe('CombatPageComponent', () => {
|
||||
|
||||
expect(element.textContent).toContain('Aric Duskwalker drinks a potion and heals 35 HP.');
|
||||
expect(element.textContent).toContain('Aric Duskwalker braces to defend.');
|
||||
expect(element.textContent).toContain('Aschenratte is winding up a Heavy Strike.');
|
||||
expect(element.textContent).toContain("Aric Duskwalker interrupts Aschenratte's attack.");
|
||||
expect(element.textContent).toContain('Ash Rat is winding up a Heavy Strike.');
|
||||
expect(element.textContent).toContain("Aric Duskwalker interrupts Ash Rat's attack.");
|
||||
});
|
||||
|
||||
it('renders the structured events as readable English combat-log entries', async () => {
|
||||
const fixture = await setup(activeCombat);
|
||||
const element = fixture.nativeElement as HTMLElement;
|
||||
|
||||
expect(element.textContent).toContain('Aric Duskwalker hits Aschenratte for 14 damage.');
|
||||
expect(element.textContent).toContain('Aschenratte hits Aric Duskwalker for 5 damage.');
|
||||
expect(element.textContent).toContain('Aric Duskwalker hits Ash Rat for 14 damage.');
|
||||
expect(element.textContent).toContain('Ash Rat hits Aric Duskwalker for 5 damage.');
|
||||
});
|
||||
|
||||
it('calls combatStore.performAction("ATTACK") when Attack is clicked', async () => {
|
||||
@@ -334,7 +334,7 @@ describe('CombatPageComponent', () => {
|
||||
await vi.advanceTimersByTimeAsync(540);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.textContent).toContain("Aric Duskwalker interrupts Aschenratte's attack.");
|
||||
expect(element.textContent).toContain("Aric Duskwalker interrupts Ash Rat's attack.");
|
||||
expect(element.querySelector('[data-combat-telegraph]')).toBeNull();
|
||||
expect(monster?.classList.contains('sprite--lunge')).toBe(false);
|
||||
});
|
||||
@@ -557,7 +557,7 @@ describe('CombatPageComponent', () => {
|
||||
it('renders a dropped item with its icon, name, and rarity', async () => {
|
||||
const fixture = await setup({
|
||||
...wonWithRewards,
|
||||
monster: { ...activeCombat.monster, key: 'road-bandit', name: 'Straßenräuber', currentHp: 0 },
|
||||
monster: { ...activeCombat.monster, key: 'road-bandit', name: 'Road Bandit', currentHp: 0 },
|
||||
rewards: {
|
||||
silver: 12,
|
||||
items: [
|
||||
@@ -565,7 +565,7 @@ describe('CombatPageComponent', () => {
|
||||
characterItemId: 'character-item-1',
|
||||
item: {
|
||||
key: 'bandit-blade',
|
||||
name: 'Räuberklinge',
|
||||
name: 'Bandit Blade',
|
||||
rarity: 'COMMON',
|
||||
iconPath: '/images/items/bandit-blade.png',
|
||||
},
|
||||
@@ -579,7 +579,7 @@ describe('CombatPageComponent', () => {
|
||||
expect(element.querySelector<HTMLImageElement>('[data-item-icon]')?.getAttribute('src')).toBe(
|
||||
'/images/items/bandit-blade.png',
|
||||
);
|
||||
expect(element.querySelector('[data-item-name]')?.textContent).toContain('Räuberklinge');
|
||||
expect(element.querySelector('[data-item-name]')?.textContent).toContain('Bandit Blade');
|
||||
expect(element.querySelector('[data-item-rarity]')?.textContent).toContain('Common');
|
||||
expect(element.querySelector('[data-reward-empty]')).toBeNull();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user