## Summary - rebuild the public Tenantial homepage around an evidence-first Microsoft tenant governance narrative - replace the old hero visual with a new static dashboard preview and add dedicated Trust Bar and Feature Pillars sections - update the shared public shell, navigation, footer, dark design tokens, assets, and homepage content to match the new brand direction - align website smoke coverage and Spec 400 artifacts with the rebuilt homepage ## Testing - not run in this pass - updated website smoke specs under apps/website/tests/smoke ## Note - `website-dev` was pushed to `origin` so the requested PR base exists remotely - the remote `website-dev` branch is an ancestor of `origin/dev`, so this PR may also show upstream `dev` history relative to that base Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #387
66 lines
3.3 KiB
Markdown
66 lines
3.3 KiB
Markdown
# 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
|
|
|
|
1. Explicit override
|
|
2. User preference
|
|
3. Workspace default
|
|
4. 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
|