43 lines
1.9 KiB
Markdown
43 lines
1.9 KiB
Markdown
---
|
|
epic: 14
|
|
story: 14.5
|
|
title: "Localization Framework"
|
|
status: draft
|
|
---
|
|
|
|
## Epic 14 — Accessibility & Internationalization
|
|
**Goal:** Make CalcPad usable by everyone regardless of ability, language, or locale.
|
|
|
|
### Story 14.5: Localization Framework
|
|
|
|
As a CalcPad user who speaks a language other than English,
|
|
I want the entire UI translated into my language,
|
|
So that I can use CalcPad comfortably in my native language.
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
**Given** the macOS native application
|
|
**When** localization is implemented
|
|
**Then** all user-facing strings are defined in `.strings` and `.stringsdict` files
|
|
**And** pluralization rules use `.stringsdict` for correct plural forms per language
|
|
|
|
**Given** the Windows and web applications
|
|
**When** localization is implemented
|
|
**Then** all user-facing strings are managed through `fluent-rs` (Project Fluent `.ftl` files)
|
|
**And** message references and parameterized strings are used for dynamic content (e.g., "Sheet {$name} saved")
|
|
|
|
**Given** the localization framework is in place
|
|
**When** all strings are translated
|
|
**Then** the following 8 languages are fully supported: English (EN), French (FR), German (DE), Spanish (ES), Italian (IT), Portuguese-Brazil (PT-BR), Chinese Simplified (ZH), Korean (KO)
|
|
**And** each language has 100% string coverage -- no fallback to English for any UI element
|
|
|
|
**Given** the user changes their language preference in CalcPad settings
|
|
**When** the change is applied
|
|
**Then** all menus, labels, tooltips, error messages, onboarding text, and template descriptions switch to the selected language
|
|
**And** the change takes effect immediately without restarting the application
|
|
|
|
**Given** a new language is added in the future
|
|
**When** a developer adds the translation files
|
|
**Then** no code changes are required beyond adding the new `.strings`/`.stringsdict` or `.ftl` file and registering the locale
|
|
**And** the language automatically appears in the language selection dropdown
|