# feat(i18n): Hebrew locale + full RTL support ## Summary This PR adds full Hebrew (he) locale support to the UI, including a complete translation of all user-facing strings and comprehensive RTL layout support across all components. ## What was done ### Hebrew translation - Full translation of all i18n message files for the `he` locale (17 translation files) - Registered the language in the i18n system and the language picker ### RTL support - Automatic direction detection (`dir="rtl"`) when Hebrew is selected - Replaced physical CSS properties (`left`/`right`) with logical equivalents (`inline-start`/`inline-end`) across the project - Fixed resize direction, file path alignment, and textarea padding - Fixed navigation button positioning in textarea for RTL - Fixed scrollbar direction in RTL - Fixed code block direction and selector alignment - Fixed Monaco editor direction in the file viewer - Auto-detect text direction in reasoning block (`dir="auto"` + `unicode-bidi: plaintext`) ### Adapted components - `session-layout` — sidebar and resize handle - `prompt-input` — text direction and buttons - `message-base` — message blocks and reasoning - `message-timeline` — timeline bar - `right-panel` — right side panel - `tool-call` — tool call display - `settings-screen` — settings page - `selector` — selection component - `instance-shell` — main shell ## New files ``` packages/ui/src/lib/i18n/messages/he/ advancedSettings.ts app.ts commands.ts dialogs.ts filesystem.ts folderSelection.ts index.ts instance.ts loadingScreen.ts logs.ts markdown.ts messaging.ts remoteAccess.ts session.ts settings.ts time.ts toolCall.ts ``` ## Suggested testing - Switch language to Hebrew and verify all strings are translated - Verify RTL layout is correct across all screens (session, settings, file viewer) - Verify that English text inside a reasoning block is displayed LTR - Switch back to English and verify everything returns to LTR --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Shantur Rathore <i@shantur.com>
167 lines
10 KiB
TypeScript
167 lines
10 KiB
TypeScript
export const instanceMessages = {
|
||
"instanceTabs.new.title": "מופע חדש (Cmd/Ctrl+N)",
|
||
"instanceTabs.new.ariaLabel": "מופע חדש",
|
||
"instanceTabs.remote.title": "חיבור מרוחק",
|
||
"instanceTabs.remote.ariaLabel": "חיבור מרוחק",
|
||
|
||
"instanceInfo.title": "מידע על המופע",
|
||
"instanceInfo.labels.folder": "תיקייה",
|
||
"instanceInfo.labels.project": "פרויקט",
|
||
"instanceInfo.labels.versionControl": "בקרת גרסאות",
|
||
"instanceInfo.labels.opencodeVersion": "גרסת OpenCode",
|
||
"instanceInfo.labels.binaryPath": "נתיב קובץ בינארי",
|
||
"instanceInfo.labels.environmentVariables": "משתני סביבה ({count})",
|
||
"instanceInfo.loading": "טוען...",
|
||
"instanceInfo.server.title": "שרת",
|
||
"instanceInfo.server.port": "פורט:",
|
||
"instanceInfo.server.pid": "PID:",
|
||
"instanceInfo.server.status": "סטטוס:",
|
||
|
||
"instanceTab.status.permission": "ממתין לאישור",
|
||
"instanceTab.status.compacting": "מסכם",
|
||
"instanceTab.status.working": "עובד",
|
||
"instanceTab.status.idle": "מוכן",
|
||
"instanceTab.status.ariaLabel": "סטטוס מופע: {status}",
|
||
"instanceTab.actions.close.ariaLabel": "סגור מופע",
|
||
|
||
"instanceShell.leftPanel.sessionsTitle": "סשנים",
|
||
"instanceShell.leftPanel.instanceInfo": "מידע על המופע",
|
||
|
||
"instanceShell.leftDrawer.pin": "נעץ מגירה שמאלית",
|
||
"instanceShell.leftDrawer.unpin": "שחרר נעיצת מגירה שמאלית",
|
||
"instanceShell.leftDrawer.toggle.pinned": "המגירה השמאלית נעוצה",
|
||
"instanceShell.leftDrawer.toggle.open": "פתח מגירה שמאלית",
|
||
"instanceShell.leftDrawer.toggle.close": "סגור מגירה שמאלית",
|
||
|
||
"instanceShell.rightDrawer.pin": "נעץ מגירה ימנית",
|
||
"instanceShell.rightDrawer.unpin": "שחרר נעיצת מגירה ימנית",
|
||
"instanceShell.rightDrawer.toggle.pinned": "המגירה הימנית נעוצה",
|
||
"instanceShell.rightDrawer.toggle.open": "פתח מגירה ימנית",
|
||
"instanceShell.rightDrawer.toggle.close": "סגור מגירה ימנית",
|
||
|
||
"instanceShell.fullscreen.enter": "מסך מלא",
|
||
"instanceShell.fullscreen.exit": "יציאה ממסך מלא",
|
||
|
||
"instanceShell.metrics.usedLabel": "בשימוש",
|
||
"instanceShell.metrics.availableLabel": "זמין",
|
||
|
||
"instanceShell.commandPalette.openAriaLabel": "פתח לוח פקודות",
|
||
"instanceShell.commandPalette.button": "לוח פקודות",
|
||
|
||
"instanceShell.connection.ariaLabel": "חיבור {status}",
|
||
"instanceShell.connection.connected": "מחובר",
|
||
"instanceShell.connection.connecting": "מתחבר...",
|
||
"instanceShell.connection.disconnected": "מנותק",
|
||
"instanceShell.connection.unknown": "לא ידוע",
|
||
|
||
"instanceWelcome.shortcuts.newSession": "סשן חדש",
|
||
"instanceWelcome.empty.title": "אין סשנים קודמים",
|
||
"instanceWelcome.empty.description": "צור סשן חדש למטה כדי להתחיל",
|
||
"instanceWelcome.loading.title": "טוען סשנים",
|
||
"instanceWelcome.loading.description": "מאחזר את הסשנים הקודמים שלך...",
|
||
"instanceWelcome.resume.title": "המשך סשן",
|
||
"instanceWelcome.resume.subtitle.one": "סשן אחד זמין",
|
||
"instanceWelcome.resume.subtitle.other": "{count} סשנים זמינים",
|
||
"instanceWelcome.session.untitled": "סשן ללא שם",
|
||
"instanceWelcome.new.title": "התחל סשן חדש",
|
||
"instanceWelcome.new.subtitle": "ישתמש אוטומטית בסוכן/מודל האחרון שלך",
|
||
"instanceWelcome.new.createButton": "צור סשן",
|
||
"instanceWelcome.overlay.close": "סגור",
|
||
"instanceWelcome.actions.viewInstanceInfo": "צפה במידע על המופע",
|
||
"instanceWelcome.actions.renameTitle": "שנה שם סשן",
|
||
"instanceWelcome.actions.deleteTitle": "מחק סשן",
|
||
"instanceWelcome.hints.navigate": "ניווט",
|
||
"instanceWelcome.hints.jump": "קפיצה",
|
||
"instanceWelcome.hints.firstLast": "ראשון/אחרון",
|
||
"instanceWelcome.hints.resume": "המשך",
|
||
"instanceWelcome.hints.delete": "מחיקה",
|
||
"instanceWelcome.toasts.renameError": "לא ניתן לשנות שם הסשן",
|
||
|
||
"instanceDisconnected.title": "המופע התנתק",
|
||
"instanceDisconnected.folderFallback": "סביבת עבודה זו",
|
||
"instanceDisconnected.reasonFallback": "השרת הפסיק להגיב",
|
||
"instanceDisconnected.description": "לא ניתן עוד להגיע ל-{folder}. סגור את הלשונית כדי להמשיך לעבוד.",
|
||
"instanceDisconnected.details.title": "פרטים",
|
||
"instanceDisconnected.details.folderLabel": "תיקייה:",
|
||
"instanceDisconnected.actions.closeInstance": "סגור מופע",
|
||
|
||
"instanceShell.empty.title": "לא נבחר סשן",
|
||
"instanceShell.empty.description": "בחר סשן לצפייה בהודעות",
|
||
|
||
"instanceShell.rightPanel.title": "לוח סטטוס",
|
||
"instanceShell.rightPanel.tabs.changes": "שינויי סשן",
|
||
"instanceShell.rightPanel.tabs.gitChanges": "שינויי Git",
|
||
"instanceShell.rightPanel.tabs.files": "קבצים",
|
||
"instanceShell.rightPanel.tabs.status": "סטטוס",
|
||
"instanceShell.rightPanel.tabs.ariaLabel": "לשוניות לוח ימני",
|
||
"instanceShell.rightPanel.actions.refresh": "רענן",
|
||
"instanceShell.rightPanel.sections.sessionChanges": "שינויי סשן",
|
||
"instanceShell.rightPanel.sections.sessionChanges.tooltip": "קבצים שהשתנו בסשן הנוכחי. מציג הוספות ומחיקות לכל קובץ.",
|
||
"instanceShell.rightPanel.sections.plan": "תוכנית",
|
||
"instanceShell.rightPanel.sections.plan.tooltip": "מפת הדרכים של הסוכן לסשן זה. עוקב אחר משימות, תת-משימות וסטטוס השלמתן.",
|
||
"instanceShell.rightPanel.sections.backgroundProcesses": "מעטפות רקע",
|
||
"instanceShell.rightPanel.sections.backgroundProcesses.tooltip": "תהליכים ממושכים שהופעלו על ידי הסוכן. ניתן לעקוב אחר פלטם, לעצור אותם או לסיים אותם.",
|
||
"instanceShell.rightPanel.sections.mcp": "שרתי MCP",
|
||
"instanceShell.rightPanel.sections.mcp.tooltip": "שרתי Model Context Protocol המרחיבים את יכולות הסוכן עם כלים ושירותים חיצוניים.",
|
||
"instanceShell.rightPanel.sections.lsp": "שרתי LSP",
|
||
"instanceShell.rightPanel.sections.lsp.tooltip": "שרתי Language Server Protocol המספקים בינת קוד, אבחון ותכונות ספציפיות לשפה.",
|
||
"instanceShell.rightPanel.sections.plugins": "תוספים",
|
||
"instanceShell.rightPanel.sections.plugins.tooltip": "תוספים המתאימים אישית את הממשק ואת התנהגות השרת, ומוסיפים תכונות מעבר ל-MCP ו-LSP.",
|
||
|
||
"instanceShell.sessionChanges.noSessionSelected": "בחר סשן לצפייה בשינויים.",
|
||
"instanceShell.sessionChanges.loading": "מאחזר שינויי סשן...",
|
||
"instanceShell.sessionChanges.empty": "אין שינויי סשן עדיין.",
|
||
"instanceShell.sessionChanges.filesChanged": "{count} קבצים שונו",
|
||
"instanceShell.sessionChanges.actions.show": "הצג שינויים",
|
||
|
||
"instanceShell.filesShell.fileListTitle": "רשימת קבצים",
|
||
"instanceShell.filesShell.mobileSelectorLabel": "בחר קובץ",
|
||
"instanceShell.filesShell.mobileSelectorEmpty": "בחר קובץ",
|
||
"instanceShell.filesShell.viewerTitle": "מציג שינויים",
|
||
"instanceShell.filesShell.viewerPlaceholder": "תצוגת שינויים מפורטת תתווסף בשלב הבא.",
|
||
"instanceShell.filesShell.viewerEmpty": "לא נבחר קובץ.",
|
||
"instanceShell.filesShell.hideFiles": "הסתר קבצים",
|
||
"instanceShell.filesShell.showFiles": "הצג קבצים",
|
||
"instanceShell.gitChanges.noSessionSelected": "בחר סשן לצפייה בשינויי Git.",
|
||
"instanceShell.gitChanges.loading": "טוען שינויי Git…",
|
||
"instanceShell.gitChanges.empty": "אין שינויי Git עדיין.",
|
||
"instanceShell.diff.hideUnchanged": "הסתר אזורים ללא שינוי",
|
||
"instanceShell.diff.showFull": "הצג קובץ מלא",
|
||
"instanceShell.diff.switchToSplit": "עבור לתצוגה מפוצלת",
|
||
"instanceShell.diff.switchToUnified": "עבור לתצוגה מאוחדת",
|
||
"instanceShell.diff.enableWordWrap": "הפעל גלישת מילים",
|
||
"instanceShell.diff.disableWordWrap": "כבה גלישת מילים",
|
||
"instanceShell.worktree.create": "+ צור worktree",
|
||
|
||
"instanceShell.plan.noSessionSelected": "בחר סשן לצפייה בתוכנית.",
|
||
"instanceShell.plan.empty": "עדיין לא תוכנן דבר.",
|
||
|
||
"instanceShell.backgroundProcesses.empty": "אין תהליכי רקע.",
|
||
"instanceShell.backgroundProcesses.status": "סטטוס: {status}",
|
||
"instanceShell.backgroundProcesses.output": "פלט: {sizeKb}KB",
|
||
"instanceShell.backgroundProcesses.actions.output": "פלט",
|
||
"instanceShell.backgroundProcesses.actions.stop": "עצור",
|
||
"instanceShell.backgroundProcesses.actions.terminate": "סיים",
|
||
|
||
"versionPill.appWithVersion": "אפליקציה {version}",
|
||
"versionPill.ui": "ממשק",
|
||
"versionPill.uiWithVersion": "ממשק {version}",
|
||
"versionPill.source": " ({source})",
|
||
|
||
"opencodeBinarySelector.title": "קובץ בינארי של OpenCode",
|
||
"opencodeBinarySelector.subtitle": "בחר איזה קובץ הרצה OpenCode ישתמש",
|
||
"opencodeBinarySelector.customPath.placeholder": "הזן נתיב לקובץ בינארי של opencode…",
|
||
"opencodeBinarySelector.actions.add": "הוסף",
|
||
"opencodeBinarySelector.actions.browse": "עיין אחר קובץ בינארי…",
|
||
"opencodeBinarySelector.actions.removeTitle": "הסר קובץ בינארי",
|
||
"opencodeBinarySelector.badge.systemPath": "השתמש בקובץ בינארי מנתיב המערכת",
|
||
"opencodeBinarySelector.status.checkingVersions": "בודק גרסאות…",
|
||
"opencodeBinarySelector.status.checking": "בודק…",
|
||
"opencodeBinarySelector.dialog.title": "בחר קובץ בינארי של OpenCode",
|
||
"opencodeBinarySelector.dialog.description": "עיין בקבצים החשופים על ידי שרת ה-CLI.",
|
||
"opencodeBinarySelector.validation.invalidBinary": "קובץ בינארי לא תקין של OpenCode",
|
||
"opencodeBinarySelector.validation.alreadyValidating": "כבר מאמת",
|
||
"opencodeBinarySelector.display.systemPath": "{name} (נתיב מערכת)",
|
||
"opencodeBinarySelector.versionLabel": "v{version}",
|
||
} as const
|