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:
@@ -62,11 +62,11 @@ describe('LocationPageComponent', () => {
|
||||
it('names the place and its region straight away', async () => {
|
||||
const { element } = await setup();
|
||||
|
||||
expect(element.querySelector('h1')?.textContent).toContain('Verbrannte Straße');
|
||||
expect(element.textContent).toContain('Gebiet 1');
|
||||
expect(element.textContent).toContain('Aschenfelder');
|
||||
expect(element.querySelector('h1')?.textContent).toContain('Burned Road');
|
||||
expect(element.textContent).toContain('Tier 1');
|
||||
expect(element.textContent).toContain('Ashen Fields');
|
||||
expect(element.textContent).toContain(
|
||||
'Ein alter Handelsweg, der durch Feuer und Krieg in Asche gelegt wurde.',
|
||||
'An old trade road, burned to ash by fire and war. Charred carts, broken weapons, and silenced cries line the path into the Ashen Fields.',
|
||||
);
|
||||
});
|
||||
|
||||
@@ -75,7 +75,7 @@ describe('LocationPageComponent', () => {
|
||||
const image = element.querySelector('img') as HTMLImageElement;
|
||||
|
||||
expect(image.getAttribute('src')).toBe('/images/backgrounds/Aschestrasse.png');
|
||||
expect(image.getAttribute('alt')).toBe('Location view: Verbrannte Straße');
|
||||
expect(image.getAttribute('alt')).toBe('Location view: Burned Road');
|
||||
});
|
||||
|
||||
it('places every hotspot on the artwork', async () => {
|
||||
@@ -96,10 +96,10 @@ describe('LocationPageComponent', () => {
|
||||
const actions = element.querySelectorAll('[data-action]');
|
||||
|
||||
expect([...actions].map((action) => action.querySelector('.location-action__label')?.textContent?.trim())).toEqual([
|
||||
'Jagd beginnen',
|
||||
'Spuren untersuchen',
|
||||
'Umgebung durchsuchen',
|
||||
'Zur Karte',
|
||||
'Begin Hunt',
|
||||
'Investigate tracks',
|
||||
'Search surroundings',
|
||||
'To Map',
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -173,13 +173,13 @@ describe('LocationPageComponent', () => {
|
||||
|
||||
interactionResult.set({
|
||||
interactionKey: 'inspect-tracks',
|
||||
title: 'Verdächtige Spuren',
|
||||
text: 'Frische Stiefelabdrücke führen nach Osten.',
|
||||
title: 'Suspicious Tracks',
|
||||
text: 'Among the ash and broken stones you make out several fresh bootprints. They lead east, toward the abandoned watchpost.',
|
||||
});
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-interaction-panel]')?.textContent).toContain(
|
||||
'Frische Stiefelabdrücke führen nach Osten.',
|
||||
'Among the ash and broken stones you make out several fresh bootprints. They lead east, toward the abandoned watchpost.',
|
||||
);
|
||||
// The scene is not replaced by the panel.
|
||||
expect(element.querySelector('img')).not.toBeNull();
|
||||
@@ -234,7 +234,7 @@ describe('LocationPageComponent', () => {
|
||||
it('renders a second location from its own data alone', async () => {
|
||||
const { element } = await setup(southGateFixture(southGateContent()));
|
||||
|
||||
expect(element.querySelector('h1')?.textContent).toContain('Südtor von Graufurt');
|
||||
expect(element.querySelector('h1')?.textContent).toContain('Graufurt South Gate');
|
||||
expect(element.querySelectorAll('app-location-poi')).toHaveLength(1);
|
||||
expect(element.querySelectorAll('[data-action]')).toHaveLength(1);
|
||||
});
|
||||
@@ -245,8 +245,8 @@ function southGateContent(): Partial<CurrentLocationResponse> {
|
||||
pointsOfInterest: [
|
||||
{
|
||||
key: 'gate-watch',
|
||||
title: 'Torwache',
|
||||
actionLabel: 'Sprechen',
|
||||
title: 'Gate Watch',
|
||||
actionLabel: 'Talk',
|
||||
type: 'NPC',
|
||||
iconKey: 'speak',
|
||||
xPercent: 45,
|
||||
@@ -257,8 +257,8 @@ function southGateContent(): Partial<CurrentLocationResponse> {
|
||||
primaryActions: [
|
||||
{
|
||||
key: 'talk-to-watch',
|
||||
label: 'Wache ansprechen',
|
||||
description: 'Lage erfragen',
|
||||
label: 'Talk to the watch',
|
||||
description: 'Ask about the situation',
|
||||
type: 'NPC',
|
||||
iconKey: 'speak',
|
||||
enabled: true,
|
||||
|
||||
Reference in New Issue
Block a user