Internationalization & Localization Specification: Game Time System - wwestlake/Steamforge GitHub Wiki
Internationalization & Localization Specification: Game Time System
Purpose
This specification defines how the Steamforge Time System supports internationalization (i18n) and localization through a clean separation of server-side time authority and client-side representation.
Core Design Philosophy
"Server defines the world’s logic. Clients express it in their own voice."
Time in Steamforge is authoritative, deterministic, and language-neutral on the server. Clients are fully empowered to represent time in a localized and culturally appropriate way.
System Summary
✅ Server Responsibilities
- Maintains a single authoritative value:
ElapsedRealSeconds
- Updates and replicates this value to all clients
- Controls all time-based logic (event triggering, scheduling, farming, day/night cycles)
- Does not format or represent time in human-readable ways
✅ Client Responsibilities
- Receives
ElapsedRealSeconds
from server - Converts into
FGameDateTime
usingTimeScale
and shared calendar rules - Loads localized calendar labels and lore descriptions from DataTables
- Displays time using appropriate format and cultural styling
Localization Targets
📅 Time Labels (from DataTables)
- Day of Week (e.g., Sparkday → 火花日 / Funken-tag)
- Month Names (e.g., Kindlemoon → 点火月 / Kindle-Monat)
- Seasons (e.g., Forgewake → 炼醒 / Forge-Awaken)
- Special Lore Days or Rituals
🧾 Display Format
- 24-hour vs 12-hour clock format
- Ordering (e.g., MM/DD/YYYY vs YYYY年MM月DD日)
- Calendar UI variations
- Text direction, font rendering, and glyph support
Technical Details
Replication
ElapsedRealSeconds
is a replicated float from server- Clients are forbidden from modifying or accelerating this value
Blueprint Access
- Clients may use Blueprint logic to:
- Convert to
FGameDateTime
- Lookup names via localized DataTables
- Display formatted time using helper nodes or utility library
- Convert to
Example Flow (Client-Side)
- Receive updated
ElapsedRealSeconds
- Convert to
FGameDateTime
via formula - Use
FGameDateTime.DayOfWeek
as index intoLocalizedDayNameTable
- Format string with localized format (e.g., "Sparkday, Kindlemoon 12, Year 731")
Benefits
- Supports fully localized experiences without code changes
- Enables community-built language packs
- Protects core simulation logic from tampering or desync
- Cleanly separates logic (server) from expression (client)
Future Expansion
- Player-configurable calendar UIs
- Ritual tracking per locale
- Voice-over or text-to-speech per language
Author: Steamforge Systems Team
Version: 1.0
Last Updated: 2025-03-28