A language file maps translation keys to display text. Every visible string โ€” item names, descriptions, dungeon titles, skill names โ€” lives in these files. JSON data files store only the key; the game resolves it to text at runtime.

Files live in: <pack_root>/assets/languages/<locale>.json

Minimum requirement: you must provide at least en_US.json. The game falls back to it if a key is missing in the player's language.

File Format

Language files are structured as sections (top-level keys) containing flat key-value maps:

{
  "items": {
    "items.materials.mypack.ores.iron":      "Iron Ore",
    "items.materials.mypack.ores.iron.desc": "A common ore used in basic forging."
  },
  "skills": {
    "skills.category.mypack.crafting.forging":      "Forging",
    "skills.category.mypack.crafting.forging.desc": "The art of smelting raw ore into metal ingots."
  },
  "dungeons": {
    "dungeons.mypack.pirate.pirates_outpost":      "Pirate Outpost",
    "dungeons.mypack.pirate.pirates_outpost.desc": "A fortified pirate base in the outer belt."
  }
}

Supported Locale Codes

FilenameLanguage
en_US.jsonEnglish (US) โ€” default
fr_FR.jsonFrench
de_DE.jsonGerman
es_ES.jsonSpanish
pt_BR.jsonPortuguese (Brazil)
uk_UA.jsonUkrainian
zh_CN.jsonChinese (Simplified)
ja_JP.jsonJapanese

Key Naming Conventions

Content TypePatternExample
Material nameitems.materials.<pack>.<type>.<id>items.materials.mypack.ores.iron
Material descitems.materials.<pack>.<type>.<id>.descitems.materials.mypack.ores.iron.desc
Equipment nameitems.materials.<pack>.<slot>.<id>items.materials.mypack.suit.reinforced_suit
Skill nameskills.category.<pack>.<category>.<id>skills.category.mypack.crafting.forging
Enemy nameenemies.<pack>.<group>.<id>enemies.mypack.pirate.raider_frigate
Dungeon/Room namedungeons.<pack>.<group>.<id>dungeons.mypack.pirate.pirates_outpost
Quest namequests.<pack>.<id>quests.mypack.my_quest
Shop categoryshop.category.<pack>.<id>shop.category.mypack.materials
Core systems slotcore_systems.category.<pack>.<entity>.<slot>core_systems.category.mypack.ship.hull

Adding a New Language

  1. Create assets/languages/fr_FR.json
  2. Copy all keys from en_US.json
  3. Translate each value โ€” keep all keys identical

Key Harvesting

The Data Helper auto-collects all displayName and description fields from every editor and adds them to the language table. Keys present in data but missing from a translation file are flagged with a pending badge.