6.9 KiB
Ashen Realms – Playable Slice 0.6.6
English Game Content Foundation
Status: Implementation Specification
Depends on: Slice 0.6.5 – Reputation / Renown Foundation
Purpose: Convert all currently implemented player-facing game content to English before the next major content expansion.
1. Goal
From this slice onward, all player-facing game content is written in English.
Development documentation may remain German. Internal technical names may remain unchanged when they are already stable, but new data keys should be language-neutral English slugs.
This slice is deliberately a cleanup and convention slice. It must not introduce a large localization framework.
Project rule after this slice: All player-facing game content is English. Development documentation may remain German.
2. Why this slice exists now
The project is about to add significantly more content:
- more monsters
- trade goods
- loot bags
- merchants
- reputation-gated offers
- NPC dialogue
- quests
- the Abandoned Watchpost
- the Ash Pit
- the first area boss
Translating later would touch much more persisted content, UI copy, seed data and tests. Therefore the language switch happens before Slice 0.7 V2.
3. Scope
Convert every currently visible German string in the playable loop:
- navigation
- locations
- monsters
- items
- combat actions
- combat log
- hunt screen
- travel screen
- loot screen
- inventory
- character screen
- system messages
- danger labels
- error messages visible to the player
Do not translate German development documentation in /docs unless it is itself rendered in the game.
4. Naming convention
Technical identity must not depend on display language.
Preferred pattern:
{
key: 'ash-rat',
name: 'Ash Rat'
}
Avoid new language-specific identifiers such as:
key: 'aschenratte'
Existing UUIDs must never change because of the language conversion.
5. Initial terminology
Use the following English terminology consistently for the currently relevant content.
Locations
| German / Previous Label | English Player-Facing Label | Suggested Key |
|---|---|---|
| Graufurt | Graufurt | graufurt |
| Südtor von Graufurt | Graufurt South Gate | graufurt-south-gate |
| Verbrannte Straße | Burned Road | burned-road |
| Verlassener Wachtposten | Abandoned Watchpost | abandoned-watchpost |
| Aschengrube | Ash Pit | ash-pit |
| Aschenfelder | Ashen Fields | ashen-fields |
Graufurt is treated as a proper place name and remains unchanged for now.
Monsters
| German / Previous Label | English Label | Suggested Key |
|---|---|---|
| Aschenratte | Ash Rat | ash-rat |
| Verwilderter Straßenhund | Feral Road Hound | feral-road-hound |
| Straßenräuber | Road Bandit | road-bandit |
| Verkohlter Plünderer | Charred Raider | charred-raider |
| Plünderer-Späher | Raider Scout | raider-scout |
| Plünderer-Veteran | Raider Veteran | raider-veteran |
| Aschenwühler | Ash Burrower | ash-burrower |
| Verbrannter Jagdhund | Burned Hound | burned-hound |
| Hauptmann der Aschenbande | Captain of the Ashen Band | ashen-band-captain |
Core combat actions
- Attack
- Heavy Strike
- Shield Bash
- Defend
- Potion
- Flee
Navigation
- Map
- Hunt
- Quests
- Inventory
- Character
- Shop
Common UI
- Current Location
- Travel
- Begin Travel
- Begin Hunt
- Search Again
- Attack
- Back
- Loot
- Equip
- Unequip
- Reputation
- World Renown
- Silver
- Required Reputation
- Bag Capacity
Danger labels
- Weak
- Suitable
- Strong
- Very Dangerous
- Deadly
6. Existing item names
At minimum, currently seeded or visible Tier-1 items should use English display names.
Recommended names:
- Worn Shortsword
- Bandit Blade
- Ashen Blade
- Bandit Hood
- Reinforced Leather Jacket
- Plunderer Gloves
- Watchman's Leggings
- Ashen Boots
- Mark of the Border Watch
- Charred Captain's Pendant
Do not rename stable item keys merely to make them prettier. Only display values should be changed unless the old key is clearly temporary and no persisted references depend on it.
7. Combat log language
All newly generated combat events must resolve to English text.
Examples:
Round 2
You use Shield Bash.
Road Bandit takes 12 damage.
Road Bandit's Heavy Strike is interrupted.
Feral Road Hound bites you for 9 damage.
You are Bleeding for 2 rounds.
Combat event persistence should continue to prefer structured event data over storing fully rendered localized strings wherever possible.
8. UI text architecture
Do not build a full translation database in this slice.
For static Angular UI text, it is acceptable to use centralized constants or a lightweight text map where useful.
For persisted game content, keep:
key
name
shortDescription / description
with English values.
A future localization layer may introduce translations without changing the content key.
9. Error messages
Domain error code values remain technical and stable.
Example:
{
"code": "BAG_CAPACITY_EXCEEDED",
"message": "You cannot carry any more hides."
}
The player-facing message is English.
10. Migration / seed behavior
If names and descriptions are stored in PostgreSQL:
- update existing rows by stable
key - do not delete and recreate content rows unnecessarily
- preserve UUIDs
- preserve character inventory references
- keep migrations idempotent where appropriate
If seed files own the content, update both the seed definitions and the existing database through a controlled migration/update step.
11. Tests
Add or update tests so that:
- current location API returns English names
- hunt encounters return English monster names
- combat UI renders English action labels
- combat log contains English player-facing text
- inventory uses English item names
- no existing test expects German display text
A simple development-only grep may be used to identify obvious German UI remnants, but it is not a substitute for actual runtime verification.
12. Acceptance Criteria
This slice is complete when:
- The complete currently playable flow contains no intentional German player-facing text.
- Existing content IDs and player state remain valid.
- Locations, monsters and items use English display names.
- Combat actions and combat log are English.
- Navigation and common system messages are English.
- New stable content keys follow English/language-neutral slug conventions.
- No large localization framework was introduced.
- All existing tests pass.
13. Explicitly Out of Scope
Do not implement yet:
- German/English language switch
- browser language detection
- translation management UI
- translation tables for every content entity
- Crowdin / Phrase / Lokalise integration
- automatic machine translation
The only required runtime language after this slice is English.