feat(electrobun): i18n system — @formatjs/intl + Svelte 5 runes + 3 locales

- i18n.svelte.ts: store with $state locale + createIntl(), t() function,
  formatDate/Number/RelativeTime, getDir() for RTL, async setLocale()
- i18n.types.ts: TranslationKey union (codegen from en.json)
- locales/en.json: 200+ strings in ICU MessageFormat
- locales/pl.json: full Polish translation
- locales/ar.json: partial Arabic (validates 6-form plural + RTL)
- scripts/i18n-types.ts: codegen script for type-safe keys
- 6 components wired: StatusBar, AgentPane, CommandPalette,
  SettingsDrawer, SplashScreen, ChatInput
- Language selector in AppearanceSettings
- App.svelte: document.dir reactive for RTL
- CONTRIBUTING_I18N.md: guide for adding languages

Note: currently Electrobun-only. Will extract to @agor/i18n shared
package for both Tauri and Electrobun.
This commit is contained in:
Hibryda 2026-03-22 10:28:13 +01:00
parent eee65070a8
commit aae86a4001
16 changed files with 947 additions and 64 deletions

View file

@ -7,6 +7,7 @@
provider?: string;
contextPct?: number;
disabled?: boolean;
placeholder?: string;
onSend?: () => void;
onInput?: (v: string) => void;
}
@ -17,6 +18,7 @@
provider = 'claude',
contextPct = 78,
disabled = false,
placeholder = 'Ask Claude anything...',
onSend,
onInput,
}: Props = $props();
@ -94,7 +96,7 @@
<textarea
bind:this={textareaEl}
class="chat-textarea"
placeholder="Ask Claude anything..."
{placeholder}
rows="1"
{value}
oninput={handleInput}