| name | mosaic-localization |
| description | Localization rules and audit workflow for mosaic UI strings, settings rows, menus, shortcuts, schema/config text, docs, command/help text, alerts, tooltips, and web messages. Use whenever changing user-facing text. |
mosaic Localization
Use this skill for any user-facing string change.
Hard rules
- All user-facing strings must be localized.
- Use
String(localized: "key.name", defaultValue: "English text") for Swift/AppKit/SwiftUI strings.
- Keys go in
Resources/Localizable.xcstrings; English is currently the only supported language.
- Never use bare string literals in SwiftUI
Text(), Button(), alert titles, tooltips, menus, or dialogs.
- Localization audit is required for every user-facing change.
defaultValue, English fallback text, schema descriptions, or copied English strings do not count as localization.
- For web/docs content, update the English message catalog, currently
web/messages/en.json, plus any data structures carrying user-facing text.
Audit checklist
Before finishing a task that changes UI, Settings rows, menus, shortcut metadata, schema/config text, docs, command/help text, alerts, or tooltips:
- Enumerate the changed user-facing surfaces.
- Verify each surface has English entries in the appropriate catalog or message file.
- Parse touched localization files.
- Verify changed message keys exist in the English catalog.
- Use
rg over changed Swift/TS/TSX/docs files for newly introduced bare English.
- State the localization audit in the final handoff, or explicitly say what could not be verified.
Related shortcut rule
Every new mosaic-owned keyboard shortcut must be added to KeyboardShortcutSettings, visible/editable in Settings, supported in ~/.config/mosaic/mosaic.json, and documented in the keyboard shortcut and configuration docs.
Detailed reference