Files
calctext/_bmad-output/implementation-artifacts/14-5-localization-framework.md
2026-03-16 19:54:53 -04:00

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