Data Model: Platform Localization v1 (DE/EN)
Supported Locale Set
| Value |
Meaning |
Notes |
en |
English |
System default and controlled fallback in v1 |
de |
German |
First additional supported locale |
Locale Sources
| Source |
Ownership |
Persistence |
Allowed Values |
Notes |
tenantpilot.locale_override |
request or session scoped |
transient |
en, de |
Explicit temporary choice for the current browsing context |
users.preferred_locale |
user-owned |
persisted on users |
en, de, null |
Personal preference; null means inherit |
localization.default_locale |
workspace-owned |
existing workspace settings infrastructure |
en, de, null |
Workspace default for users without a personal preference |
config('app.locale') |
system-owned |
config |
en initially |
Final fallback anchor |
Precedence Rule
- Explicit override
- User preference
- Workspace default
- System default
If the chosen source is missing, malformed, or unsupported, resolution falls back to the next valid source until a supported locale is found. The final controlled fallback is English.
Plane-Specific Resolution
- Admin and tenant panels: use the full precedence rule above.
- System panel: uses
explicit override -> system default only in v1 because system actors authenticate as PlatformUser and do not get a persisted locale preference or workspace-default inheritance in this slice.
Derived Resolved Locale Context
| Field |
Type |
Meaning |
locale |
string |
Effective locale for the current request (en or de) |
source |
string |
One of explicit_override, user_preference, workspace_default, system_default |
fallback_locale |
string |
Controlled fallback locale, en in v1 |
workspace_default_locale |
string or null |
Current workspace default when a workspace context exists |
user_preference_locale |
string or null |
Persisted personal locale preference for workspace-bound users; null on the system plane |
Persistence Shape
- User preference: add one nullable locale preference field to the current workspace-bound user-owned surface.
- Workspace default: add one workspace setting definition under a localization-specific domain using the existing settings infrastructure.
- No new table: the first slice does not create a generic preferences or translation state table, and it does not add a second locale-preference store for
PlatformUser.
Translation Catalog Ownership
| Catalog Family |
Ownership |
Notes |
lang/en/*.php |
canonical English source |
Existing findings.php and baseline-compare.php remain authoritative English catalogs |
lang/de/*.php |
German translation mirror |
Added only for the selected first-wave surface families |
| generic shell or settings catalogs |
platform runtime |
Used for shell/auth/context-bar and shared operator text that does not belong to one domain file |
Invariance Boundaries
The following stay non-localized in v1:
- raw JSON and provider payloads
- audit entries and machine-readable audit values
- stored report payloads and exported artifact data
- identifiers, slugs, route parameters, and query semantics
- global-search scope, authorization outcomes, and tenant/workspace context selection