v0.7.71 — Multilingual UI · 中文 · العربية + RTL
What's new
Full UI translation to Chinese (中文) and Arabic (العربية) with right-to-left support for Arabic. Click the new 🌐 button on the topbar to cycle EN → 中 → ع.
What gets translated
- Welcome screen, starter chips, quick-start templates
- Sidebar (new session, search, recent, account)
- Topbar buttons + ⋯ menu (memory, routines, keys, local models, etc)
- Workspace bar (folder picker, all 4 permission modes, plan mode)
- Per-message action bar (Pin / Save / Copy / Branch)
- Composer placeholder + attach tooltip
- Plan-mode banner + ask-popup
- All major modals: Memory Lens, API Keys, Local Models, Routines, Snippets, Compare, What's-in, Heatmap, Digest, Feedback Journal, Model Performance, Task Board, UX Insights
- Login screen (first-run + Add Account flows)
- Find-bar, command palette, global search
- Onboarding profile flow
- Tag suggestions
Provider names (OpenAI, Anthropic, etc) and model identifiers stay literal — they're brand/proper-noun heavy.
RTL (Arabic) layout
Right-to-left reading flow handled across the whole UI:
- Sidebar moves to the right; floating chrome (peek strip, resize handle, scroll-to-bottom) flips to the appropriate edge
- Topbar layout cleared from macOS traffic-lights (84px buffer)
- Modal close × floats in the top-end corner (logical inset-inline-end)
- Sidebar resize drag direction inverted — drag-left grows, drag-right shrinks
- Bidi-safe message header (LTR forced for tech metadata so badges + timestamps render in human order)
- Session-item titles use unicode-bidi: plaintext so English-typed titles don't bleed in an Arabic chrome
Bonus fixes (not RTL-specific)
- Topbar model display now syncs with the dropdown's actual selection at boot (was hardcoded "GPT-4o" until you manually picked a model)
- Sidebar search input now accepts typing — was missing the macOS drag-region opt-out so clicks were registering as window-drag gestures
Persistence
Language choice saved to localStorage (alaude:lang:v1) and survives restart. First-install detection sniffs navigator.language (zh-* → zh, ar-* → ar, else en) — explicit picker overrides forever after.
🤖 Generated with Claude Code