feat(SPA): i18n internationzalization, english and french

This commit is contained in:
fsylvain committed 2026-10-03 01:53:49 +02:00
1 parent 7f1e8e572d
commit 721311a643
88 files changed
+4438 -1148

No files matched your search

+79
View File
@@ -0,0 +1,79 @@
Feature: English and French throughout the SPA
Background:
Given all existing SPA interface text supports English and French
And English preserves existing copy and French provides equivalent meaning
And user content, API data and transactional emails remain unchanged
And visual checks are waived by the user for this slice
And the language control uses existing design tokens
Scenario Outline: Resolve the language before rendering
Given the browser-local stored language is <stored>
When the SPA starts
Then the interface language and document lang are <locale>
And browser language does not override the choice
Examples:
| stored | locale |
| absent | en |
| en | en |
| fr | fr |
| unsupported | en |
| unreadable | en |
Scenario Outline: Open the language picker in the profile submenu
Given the user opens the <menu>
When they activate the localized Language control
Then a compact scrollable picker offers English and Français
And the selected language is visibly and accessibly identified
And the picker uses Nuxt UI and existing design tokens
Examples:
| menu |
| desktop UserMenu |
| mobile AccountMenuSheet |
Scenario: Switch language without losing work
Given the user is editing an unsaved display name on /profile
When they select Français
Then all SPA interface text immediately uses French
And the document lang is fr
And the route, session, theme and unsaved work remain unchanged
And no reload, navigation or API request is caused by switching
When they select English
Then the interface immediately restores English with the same preserved state
Scenario: Remember language on this browser
Given the user selected Français
When they navigate, reload, log out or return on this browser
Then French remains selected including on public authentication screens
And no language preference is sent to the server
Scenario: Storage failure does not prevent switching
Given preference storage cannot be written
When the user selects Français
Then French is used for the current session without an error
And a fresh load without a readable preference defaults to English
Scenario: Translate the entire interface
Given French is selected
When an existing SPA screen or shared component renders
Then navigation, forms, validation, notifications, dialogs and accessibility labels use French
And counts, human-readable dates and numbers use the selected locale
And Nuxt UI controls use the selected locale
And English and French catalogs have matching keys and interpolation parameters
And an unavailable French message falls back to English
And user content, account details, filenames, URLs, API data and emails remain unchanged
Scenario Outline: Operate the picker accessibly
Given the picker is open in the <menu>
When the user navigates its options with the keyboard and confirms a choice
Then the language changes and the picker closes
And focus returns to its language control
When they reopen it and press Escape or click outside
Then the picker closes without changing language
Examples:
| menu |
| desktop UserMenu |
| mobile AccountMenuSheet |
+21
View File
@@ -0,0 +1,21 @@
# SPA internationalization QA
Accepted by the user on 2026-10-03 together with the slice specification.
## Automated
1. Verify absent, English, French, unsupported and unreadable stored preferences; English defaults independently of browser language and document lang follows selection.
2. Verify desktop UserMenu and mobile AccountMenuSheet offer a localized language entry and a compact bounded scrollable picker with English and Français, selected-state semantics, selection, dismissal and focus return. Preserve profile, theme and logout behavior.
3. Switch both ways while editing an unsaved profile display name. Verify translated UI and unchanged draft, route, session and theme without additional API requests.
4. Verify browser-local persistence across reload initialization, navigation and logout/public authentication. Verify storage write failure allows switching for the current session.
5. Preserve existing English tests and add French checks for login, validation, profile save failure, integration copy feedback, not-found, representative dialogs and notifications.
6. Audit every existing view, shared component, composable and library producing interface text, including editor, media, users, invitations, settings and updates. Verify Nuxt UI controls use the active locale.
7. Assert catalog key/interpolation parity, nonempty translations, pluralization, English fallback and locale-sensitive formatting. Use fixed input dates without freezing system time. Verify displayed alerts and dialogs react to language changes.
8. Verify user content, account details, filenames, URLs, API fields, integration protocol examples, server release notes and transactional emails remain unchanged.
9. Run task test:web, frontend type checks, applicable lint and final build checks. Inspect introduced comments and ensure application changes are SPA-only.
## Visual and manual
Visual checks are SKIPPED by explicit user waiver for this slice because the designer is unavailable. The user authorized a coherent language control using existing design tokens. Do not edit design sources or claim pixel parity.
Manual checklist: desktop/mobile and light/dark coherence, viewport containment, constrained scrolling, French text readability, touch and mouse selection, keyboard movement and confirmation, Escape/outside dismissal, focus return and visible focus. Confirm language retention after reload and logout. Do not freeze dates or investigate clock-sensitive states.