-
-
Notifications
You must be signed in to change notification settings - Fork 39
Localization
Scarf 2.1 added full UI translations on top of English. Seven languages ship in the box and more can be contributed via a plain GitHub PR — no translation-management tool, no account to create.
ScarfGo (iOS) is English-only in v2.5. The iOS strings are extracted but no translations are contributed yet. Localizing the iOS app is on the ScarfGo Roadmap — most of the strings already exist in
Localizable.xcstrings, so contributing iOS translations would lean on the same workflow described below.
| Locale | Name | Status |
|---|---|---|
en |
English | Source |
zh-Hans |
Simplified Chinese | AI-translated, native-speaker review welcome |
de |
German | AI-translated, native-speaker review welcome |
fr |
French | AI-translated, native-speaker review welcome |
es |
Spanish | AI-translated, native-speaker review welcome |
ja |
Japanese | AI-translated, native-speaker review welcome |
pt-BR |
Brazilian Portuguese | AI-translated, native-speaker review welcome |
Canadian French users are served by base fr — fr-CA will be added only if a concrete Québec-specific punctuation/terminology bug surfaces.
Scarf respects the macOS system language by default. To override per-app:
System Settings → General → Language & Region → Applications → + → select Scarf + pick a preferred language.
The override takes effect on next app launch.
The catalog has 644 source strings. Of those, 583 are translated per locale. The remaining ~60 deliberately fall through to English at runtime:
- Brand / proper nouns — Scarf, Hermes, Anthropic, Claude, Sparkle, OAuth, SSH, MCP, HTTP, URL, API, Docker, Daytona, Singularity, BlueBubbles, Discord, Slack, Telegram, WhatsApp, Signal, Matrix, Feishu, Mattermost, iMessage, Home Assistant.
-
Format-only tokens —
%lld,%@,·,•,%@ → %@,••••••••••(masked-value placeholder). -
Config-literal placeholders —
my_server,new-name,npx,sk-…,hermes profile show,~/.hermes/…. - User / Hermes data passthroughs — session titles, memory contents, log lines, shell commands shown in UI, file paths.
The rule is: if translating would be wrong (brand names) or meaningless (data passthroughs), the site stays verbatim. Everything else gets localized.
The full step-by-step is in the main repo's CONTRIBUTING.md → Adding a Language. Summary:
- Fork the repo and create a branch.
-
Add the locale to
knownRegionsinscarf/scarf.xcodeproj/project.pbxproj(e.g. additafter"pt-BR"). -
Drop a new JSON file at
tools/translations/<locale>.json— copy an existing one (saytools/translations/es.json) as a starting point. Each entry maps the English source string to your translation. Keys you omit fall back to English at runtime — do that for proper nouns and for anything technical that shouldn't translate. -
Preserve format specifiers exactly:
%@,%lld,%d, positional%1$@/%2$lld, etc. If word order needs to change in your language, use the positional forms. -
Add your locale to
tools/merge-translations.py'sLOCALESlist and runpython3 tools/merge-translations.py— this writes your translations intoscarf/scarf/Localizable.xcstrings. -
Translate
scarf/scarf/InfoPlist.xcstrings(the macOS microphone-permission prompt) for your locale. Add a newstringUnitunderlocalizations. -
Build (
xcodebuild -project scarf/scarf.xcodeproj -scheme scarf build) and sanity-check in Xcode: Scheme → Run → App Language → your locale. Walk the main views (Dashboard, Chat, Settings) and look for clipping or obvious leaks. - Open a PR including the new JSON, the updated catalog, and the pbxproj / script changes. Mention which routes you spot-checked.
AI translation is fine for a first pass — it's how the initial six locales landed. Native-speaker review improves quality and is always welcome, either as a follow-up PR or as review comments on the initial one.
Found a weird or wrong translation? Easiest path:
- Open
tools/translations/<locale>.jsonon GitHub. - Click the pencil icon to edit in the browser.
- Change the offending entry.
- Submit as a PR. No build needed — the
merge-translations.pyscript runs as part of the PR-validation flow.
One-liner fixes are welcome. Please don't feel you need to review the whole file before sending a PR for a single weird string.
Scarf uses Apple's modern String Catalog (.xcstrings) — unified plural / format / variation support in a single file, exportable to XLIFF if a translator wants to work in their favorite TMS. The source catalog lives at scarf/scarf/Localizable.xcstrings; Info.plist keys live at scarf/scarf/InfoPlist.xcstrings.
Per-locale JSON under tools/translations/ is the canonical source of truth for translations. The merge script is idempotent — translators iterate on the JSON and re-merge without worrying about catalog internals.
Deeper dev-facing notes on which SwiftUI patterns silently bypass localization (and how to avoid them when adding new UI) are in scarf/docs/I18N.md.
Last updated: 2026-04-25 — Scarf v2.5.0 (added iOS English-only note + ScarfGo Roadmap link)
Wiki edited via the local .wiki-worktree/ clone. See Wiki Maintenance for the workflow. Last sync: 2026-04-20.
Getting Started
ScarfGo (iOS)
User Guide
- Dashboard
- Insights & Activity
- Chat
- Slash Commands
- Memory & Skills
- Projects & Profiles
- Project Templates
- Template Catalog
- Template Ideas
- Platforms / Personalities / Quick Commands
- Servers & Remote
- MCP, Plugins, Webhooks, Tools
- Gateway / Cron / Health / Logs
Architecture
- Overview
- Core Services
- Design System
- Data Model
- Transport Layer
- ScarfCore Package
- Sidebar & Navigation
- ACP Subprocess
Developer Guide
Reference
Troubleshooting
Contributing
- Contributing
- Wiki Maintenance
- ScarfGo Roadmap (dev reference)
Release History
Legal & Support