feat(SPA): i18n internationzalization, english and french
This commit is contained in:
1 parent
7f1e8e572d
commit
721311a643
88 files changed
+4438
-1148
No files matched your search
@@ -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 |
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user