feat(i18n): Hebrew locale + full RTL support (#243)
# 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>
This commit is contained in:
142
packages/ui/src/lib/i18n/messages/he/settings.ts
Normal file
142
packages/ui/src/lib/i18n/messages/he/settings.ts
Normal file
@@ -0,0 +1,142 @@
|
||||
export const settingsMessages = {
|
||||
"instanceServiceStatus.sections.lsp": "שרתי LSP",
|
||||
"instanceServiceStatus.sections.mcp": "שרתי MCP",
|
||||
"instanceServiceStatus.sections.plugins": "תוספים",
|
||||
"instanceServiceStatus.lsp.loading": "טוען שרתי LSP...",
|
||||
"instanceServiceStatus.lsp.empty": "לא זוהו שרתי LSP.",
|
||||
"instanceServiceStatus.lsp.status.connected": "מחובר",
|
||||
"instanceServiceStatus.lsp.status.error": "שגיאה",
|
||||
"instanceServiceStatus.mcp.loading": "טוען שרתי MCP...",
|
||||
"instanceServiceStatus.mcp.empty": "לא זוהו שרתי MCP.",
|
||||
"instanceServiceStatus.mcp.toggleAriaLabel": "הפעל/כבה שרת MCP {name}",
|
||||
"instanceServiceStatus.plugins.loading": "טוען תוספים...",
|
||||
"instanceServiceStatus.plugins.empty": "לא הוגדרו תוספים.",
|
||||
|
||||
"permissionBanner.pendingRequests.one": "בקשה אחת ממתינה",
|
||||
"permissionBanner.pendingRequests.other": "{count} בקשות ממתינות",
|
||||
"permissionBanner.detail.permission.one": "אישור אחד",
|
||||
"permissionBanner.detail.permission.other": "{count} אישורים",
|
||||
"permissionBanner.detail.question.one": "שאלה אחת",
|
||||
"permissionBanner.detail.question.other": "{count} שאלות",
|
||||
"permissionBanner.detail.wrapper": " ({detail})",
|
||||
|
||||
"agentSelector.placeholder": "בחר סוכן...",
|
||||
"agentSelector.badge.subagent": "תת-סוכן",
|
||||
"agentSelector.none": "ללא",
|
||||
"agentSelector.trigger.primary": "סוכן: {agent}",
|
||||
|
||||
"modelSelector.placeholder.search": "חפש מודלים...",
|
||||
"modelSelector.none": "ללא",
|
||||
"modelSelector.trigger.primary": "מודל: {model}",
|
||||
"modelSelector.favoritesOnly.toggle.ariaLabel": "הצג מועדפים בלבד",
|
||||
"modelSelector.favoritesOnly.showAll": "הצג את כל המודלים",
|
||||
"modelSelector.favorite.add": "הוסף למועדפים",
|
||||
"modelSelector.favorite.remove": "הסר ממועדפים",
|
||||
|
||||
"thinkingSelector.variant.default": "ברירת מחדל",
|
||||
"thinkingSelector.label": "חשיבה: {variant}",
|
||||
|
||||
"envEditor.title": "משתני סביבה",
|
||||
"envEditor.count.one": "(משתנה אחד)",
|
||||
"envEditor.count.other": "({count} משתנים)",
|
||||
"envEditor.fields.name.placeholder": "שם משתנה",
|
||||
"envEditor.fields.name.readOnlyTitle": "שם משתנה (לקריאה בלבד)",
|
||||
"envEditor.fields.value.placeholder": "ערך משתנה",
|
||||
"envEditor.actions.remove.title": "הסר משתנה",
|
||||
"envEditor.actions.add.title": "הוסף משתנה",
|
||||
"envEditor.empty": "לא הוגדרו משתני סביבה. הוסף משתנים למעלה להתאמת סביבת OpenCode.",
|
||||
"envEditor.help": "משתנים אלו יהיו זמינים בסביבת OpenCode בעת הפעלת מופעים.",
|
||||
|
||||
"contextUsagePanel.headings.tokens": "טוקנים",
|
||||
"contextUsagePanel.headings.context": "הקשר",
|
||||
"contextUsagePanel.labels.input": "קלט",
|
||||
"contextUsagePanel.labels.output": "פלט",
|
||||
"contextUsagePanel.labels.cost": "עלות",
|
||||
"contextUsagePanel.labels.used": "בשימוש",
|
||||
"contextUsagePanel.labels.available": "זמין",
|
||||
"contextUsagePanel.unavailable": "--",
|
||||
|
||||
"settings.title": "הגדרות",
|
||||
"settings.navigationAriaLabel": "קטגוריות הגדרות",
|
||||
"settings.close": "סגור הגדרות",
|
||||
"settings.content.eyebrow": "העדפות סביבת עבודה",
|
||||
"settings.open.title": "פתח הגדרות",
|
||||
"settings.open.ariaLabel": "פתח הגדרות",
|
||||
"settings.nav.appearance": "מראה",
|
||||
"settings.nav.notifications": "התראות",
|
||||
"settings.nav.remote": "גישה מרוחקת",
|
||||
"settings.nav.opencode": "OpenCode",
|
||||
"settings.scope.device": "מכשיר זה",
|
||||
"settings.scope.server": "הגדרת שרת",
|
||||
"settings.common.enabled": "מופעל",
|
||||
"settings.common.disabled": "מושבת",
|
||||
"settings.section.appearance.title": "מראה",
|
||||
"settings.section.appearance.subtitle": "שנה כיצד האפליקציה נראית במכשיר זה.",
|
||||
"settings.appearance.theme.title": "ערכת נושא",
|
||||
"settings.appearance.theme.subtitle": "בחר את מצב הצבע שישמש בכל האפליקציה.",
|
||||
"settings.appearance.theme.option.system": "התאם להגדרת מערכת ההפעלה",
|
||||
"settings.appearance.theme.option.light": "השתמש במראה בהיר",
|
||||
"settings.appearance.theme.option.dark": "השתמש במראה כהה",
|
||||
"settings.section.notifications.title": "התראות",
|
||||
"settings.section.notifications.subtitle": "שלוט בהתראות ברמת מערכת ההפעלה עבור פעילות סשן.",
|
||||
"settings.notifications.permission.granted": "ניתן",
|
||||
"settings.notifications.permission.denied": "נדחה",
|
||||
"settings.notifications.permission.default": "לא ניתן",
|
||||
"settings.notifications.permission.unsupported": "לא נתמך",
|
||||
"settings.notifications.messages.unsupportedEnvironment": "התראות מערכת ההפעלה אינן נתמכות בסביבה זו.",
|
||||
"settings.notifications.messages.permissionDenied": "הרשאת התראות נדחתה. הפעל התראות בהגדרות המערכת או הדפדפן.",
|
||||
"settings.notifications.messages.permissionNotGranted": "הרשאת התראות לא ניתנה.",
|
||||
"settings.notifications.messages.unsupportedGeneral": "התראות אינן נתמכות בסביבה זו.",
|
||||
"settings.notifications.messages.permissionGranted": "ההרשאה ניתנה. כעת ניתן להפעיל התראות.",
|
||||
"settings.notifications.messages.permissionRequestDenied": "ההרשאה נדחתה. ייתכן שתצטרך להפעיל התראות בהגדרות המערכת או הדפדפן.",
|
||||
"settings.notifications.sessionStatus.title": "התראות סטטוס סשן",
|
||||
"settings.notifications.sessionStatus.subtitle": "קבל התראות כאשר סשנים דורשים את תשומת לבך.",
|
||||
"settings.notifications.enable.title": "הפעל התראות",
|
||||
"settings.notifications.enable.permission": "הרשאה: {permission}",
|
||||
"settings.notifications.requestPermission.title": "בקש הרשאה",
|
||||
"settings.notifications.requestPermission.subtitle": "אפשר לאפליקציה לשלוח התראות במכשיר זה.",
|
||||
"settings.notifications.requestPermission.action": "בקש",
|
||||
"settings.notifications.allowVisible.title": "התרע כאשר האפליקציה ממוקדת",
|
||||
"settings.notifications.allowVisible.subtitle": "שמור על התראות פעילות גם כאשר חלון זה גלוי.",
|
||||
"settings.notifications.unsupportedNote": "התראות אינן נתמכות בסביבה זו. פקד ההתראות נשאר מושבת.",
|
||||
"settings.notifications.events.title": "התרע אותי כאשר",
|
||||
"settings.notifications.events.subtitle": "בחר אילו אירועי סשן ישלחו התראות.",
|
||||
"settings.notifications.events.needsInput": "הסשן דורש קלט",
|
||||
"settings.notifications.events.idle": "הסשן עובר למצב סרלה",
|
||||
"settings.notifications.status.enabled": "התראות מופעלות",
|
||||
"settings.notifications.status.disabled": "התראות מושבתות",
|
||||
"settings.notifications.status.unsupported": "התראות לא נתמכות",
|
||||
"settings.section.remote.title": "גישה מרוחקת",
|
||||
"settings.section.remote.subtitle": "בדוק כיצד שרת זה חשוף ברשת שלך ואבטח אישורי גישה.",
|
||||
"settings.section.opencode.title": "OpenCode",
|
||||
"settings.section.opencode.subtitle": "בחר את הקובץ הבינארי של OpenCode והסביבה לשימוש במופעים חדשים.",
|
||||
"settings.opencode.runtime.title": "סביבת ריצה",
|
||||
"settings.opencode.runtime.subtitle": "הגדר עם איזה קובץ בינארי של OpenCode מופעים חדשים יופעלו.",
|
||||
|
||||
"settings.appearance.behavior.title": "אינטראקציה",
|
||||
"settings.appearance.behavior.subtitle": "ברירות מחדל להודעות, diff וקלט.",
|
||||
"settings.behavior.keyboardHints.title": "רמזי קיצורי מקלדת",
|
||||
"settings.behavior.keyboardHints.subtitle": "הצג רמזי קיצורי מקלדת בכל הממשק.",
|
||||
"settings.behavior.thinking.title": "קטעי חשיבה",
|
||||
"settings.behavior.thinking.subtitle": "הצג או הסתר קטעי חשיבה של ה-AI בהודעות.",
|
||||
"settings.behavior.thinkingDefault.title": "ברירת מחדל לחשיבה",
|
||||
"settings.behavior.thinkingDefault.subtitle": "בחר האם קטעי חשיבה מתחילים פרוסים או מכווצים.",
|
||||
"settings.behavior.timelineTools.title": "קריאות כלי בציר הזמן",
|
||||
"settings.behavior.timelineTools.subtitle": "הצג או הסתר קריאות כלי בציר הודעות.",
|
||||
"settings.behavior.diffView.title": "תצוגת diff",
|
||||
"settings.behavior.diffView.subtitle": "בחר כיצד מוצגים diff של קריאות כלי.",
|
||||
"settings.behavior.diffView.option.split": "מפוצל",
|
||||
"settings.behavior.diffView.option.unified": "מאוחד",
|
||||
"settings.behavior.toolOutputsDefault.title": "ברירת מחדל לפלטי כלים",
|
||||
"settings.behavior.toolOutputsDefault.subtitle": "בחר האם פלטי כלים מתחילים פרוסים או מכווצים.",
|
||||
"settings.behavior.diagnosticsDefault.title": "ברירת מחדל לאבחון",
|
||||
"settings.behavior.diagnosticsDefault.subtitle": "בחר האם פלט אבחון מתחיל פרוס או מכווץ.",
|
||||
"settings.behavior.toolInputsVisibility.title": "נראות קלטי כלים",
|
||||
"settings.behavior.toolInputsVisibility.subtitle": "הגדר נראות ברירת מחדל לארגומנטים של קריאות כלי.",
|
||||
"settings.behavior.usageMetrics.title": "מדדי שימוש בטוקנים",
|
||||
"settings.behavior.usageMetrics.subtitle": "הצג או הסתר נתוני טוקנים ועלות להודעות הסוכן.",
|
||||
"settings.behavior.autoCleanup.title": "ניקוי אוטומטי של סשנים ריקים",
|
||||
"settings.behavior.autoCleanup.subtitle": "נקה אוטומטית סשנים ריקים בעת יצירת סשנים חדשים.",
|
||||
"settings.behavior.promptSubmit.title": "Enter לשליחה",
|
||||
"settings.behavior.promptSubmit.subtitle": "השתמש ב-Enter לשליחת פקודות; Cmd/Ctrl+Enter מוסיף שורה חדשה.",
|
||||
} as const
|
||||
Reference in New Issue
Block a user