Two bugs from Test 5.1 on FR storefront dashboard:
1. Loyalty + Orders dashboard cards (`StorefrontDashboardCard.title`/
`subtitle`/`value_label`) were hardcoded English. Added `language`
to `WidgetContext`; customer dashboard route passes
`request.state.language` through; loyalty and orders widget
providers now call `translate(..., context.language)` with new
`widget.*` i18n keys × 4 locales each.
2. Customer-module locale JSON has redundant top-level `customers`
wrapper, so after the module-locale loader auto-namespaces under
module code `customers`, the actual key path is
`customers.customers.customer_number` (matches the existing
`loyalty.loyalty.wallet.apple` pattern). My earlier sweep used the
single-prefix path for 8 references — fixed all to double-prefix.
Both bugs were visible end-of-day yesterday after the api container
recreate landed `1bade6e6`.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>