diff --git a/src/shared/i18n/index.test.ts b/src/shared/i18n/index.test.ts index 2f8d5d80d..c320d1b7f 100644 --- a/src/shared/i18n/index.test.ts +++ b/src/shared/i18n/index.test.ts @@ -1,5 +1,14 @@ import { describe, expect, it } from "vitest"; -import { t, getLocaleDirection } from "./index"; +import { t, getLocaleDirection, resources } from "./index"; + +function flattenKeys(obj: Record, prefix = ""): string[] { + return Object.entries(obj).flatMap(([key, value]) => { + const path = prefix ? `${prefix}.${key}` : key; + return value && typeof value === "object" + ? flattenKeys(value as Record, path) + : [path]; + }); +} describe("shared i18n", () => { it("returns English text by default", () => { @@ -39,6 +48,16 @@ describe("shared i18n", () => { expect(getLocaleDirection("en")).toBe("ltr"); }); + it("keeps the he locale at full key parity with en", () => { + const enKeys = flattenKeys( + resources.en.translation as Record, + ); + const heKeys = new Set( + flattenKeys(resources.he.translation as Record), + ); + expect(enKeys.filter((key) => !heKeys.has(key))).toEqual([]); + }); + it("falls back to en when zh-CN key is missing", () => { expect(t("nonExistent.fallbackKey", "zh-CN")).toBe( "nonExistent.fallbackKey", diff --git a/src/shared/i18n/locales/he/agents.ts b/src/shared/i18n/locales/he/agents.ts index 35ba29152..ad9418255 100644 --- a/src/shared/i18n/locales/he/agents.ts +++ b/src/shared/i18n/locales/he/agents.ts @@ -24,4 +24,18 @@ export default { manageProfiles: "ניהול פרופילים", switchProfile: "החלפת פרופיל", defaultTag: "ברירת מחדל", + editAppearance: "עריכת פרופיל", + editAppearanceFor: "עריכת {{name}}", + color: "צבע", + dangerZone: "אזור מסוכן", + deleteProfile: "מחיקת פרופיל", + deleteProfileInfo: + "מחיקת פרופיל זה מסירה לצמיתות את ההגדרות, הזיכרון, סשני הצ'אט, המיומנויות ומפתחות ה-API שלו. לא ניתן לבטל פעולה זו.", + deleteProfileConfirm: + "למחוק פרופיל זה לצמיתות? לא ניתן לבטל פעולה זו.", + edit: "עריכה", + uploadImage: "העלאת תמונה", + removeImage: "הסרת תמונה", + uploadImageFailed: "לא ניתן היה להגדיר את תמונת הפרופיל", + appearanceFailed: "לא ניתן היה לעדכן את מראה הפרופיל", } as const; diff --git a/src/shared/i18n/locales/he/chat.ts b/src/shared/i18n/locales/he/chat.ts index e7ac89496..95e047cf5 100644 --- a/src/shared/i18n/locales/he/chat.ts +++ b/src/shared/i18n/locales/he/chat.ts @@ -8,6 +8,7 @@ export default { quickAskTitle: "שאלה מהירה (/btw) - שאלה צדדית שלא תשפיע על הקשר השיחה", send: "שליחה", + searchModels: "חיפוש מודלים...", custom: "מותאם אישית", typeModelName: "הקלידו שם מודל...", reasoningEffort: { @@ -38,6 +39,14 @@ export default { suggestionAnalyze: "ניתוח נתונים", approve: "אישור", deny: "דחייה", + clarify: { + defaultQuestion: "‏Hermes זקוק לקלט שלכם.", + placeholder: "הקלידו את תשובתכם… (Ctrl+Enter לשליחה)", + send: "שליחה", + skip: "דילוג - תנו ל-Hermes להחליט", + skipped: "דולג - Hermes החליט", + error: "לא ניתן היה למסור את תשובתכם - ייתכן שהתור הסתיים. נסו שוב.", + }, thinking: "חושב…", thought: "מחשבה", toolCall: "קריאה לכלי", @@ -120,6 +129,9 @@ export default { version: "הצגת גרסת Hermes", }, queued: "{{count}} הודעות בתור - יישלחו בסיום עבודת הסוכן", + queuedCount: "{{count}} בתור", + queuedAttachment: "{{count}} צירופים", + queuedCancel: "הסרה מהתור", worktree: { loading: "טוען", empty: "התיקייה ריקה", diff --git a/src/shared/i18n/locales/he/common.ts b/src/shared/i18n/locales/he/common.ts index 20b248fd1..a5e1963e8 100644 --- a/src/shared/i18n/locales/he/common.ts +++ b/src/shared/i18n/locales/he/common.ts @@ -1,5 +1,5 @@ export default { - appName: "Hermes Agent", + appName: "Hermes One", continue: "המשך", cancel: "ביטול", retry: "נסה שוב", @@ -7,6 +7,8 @@ export default { loadingShort: "טוען", saved: "נשמר", save: "שמירה", + done: "סיום", + edit: "עריכה", search: "חיפוש", searchPlaceholder: "חיפוש...", show: "הצג", diff --git a/src/shared/i18n/locales/he/constants.ts b/src/shared/i18n/locales/he/constants.ts index 5cd2da988..d4ddd4247 100644 --- a/src/shared/i18n/locales/he/constants.ts +++ b/src/shared/i18n/locales/he/constants.ts @@ -5,6 +5,8 @@ export default { openrouterName: "OpenRouter", openrouterDesc: "יותר מ-200 מודלים", openrouterTag: "", + aimlapiName: "AIML API", + aimlapiDesc: "שער רב-מודלים תואם OpenAI", anthropicName: "Anthropic", anthropicDesc: "מודלים של Claude", openaiName: "OpenAI", @@ -33,10 +35,12 @@ export default { vllm: "vLLM", llamacpp: "llama.cpp", groq: "Groq", + aimlapi: "AIML API", deepseek: "DeepSeek", together: "Together AI", fireworks: "Fireworks", cerebras: "Cerebras", + atlascloud: "AtlasCloud", mistral: "Mistral", // Theme themeSystem: "מערכת", @@ -49,6 +53,8 @@ export default { sectionVoiceStt: "קול ו-STT", sectionResearchTraining: "מחקר ואימון", // Settings field labels + aimlapiApiKey: "מפתח API של AIML", + aimlapiHint: "מפתח API עבור AIML", openrouterApiKey: "מפתח API של OpenRouter", openrouterHint: "יותר מ-200 מודלים דרך OpenRouter (מומלץ)", openaiApiKey: "מפתח API של OpenAI", @@ -83,6 +89,8 @@ export default { fireworksHint: "היסק מהיר למודלים פתוחים", cerebrasApiKey: "מפתח API של Cerebras", cerebrasHint: "היסק מהיר במיוחד על חומרת Cerebras", + atlascloudApiKey: "מפתח API של AtlasCloud", + atlascloudHint: "מודלים של Claude, GPT ומודלים פתוחים דרך AtlasCloud", mistralApiKey: "מפתח API של Mistral", mistralHint: "מודלים של Mistral ו-Codestral", perplexityApiKey: "מפתח API של Perplexity", @@ -119,6 +127,39 @@ export default { tinkerHint: "שירות אימון RL", wandbKey: "מפתח Weights & Biases", wandbHint: "מעקב אחר ניסויים ומדדים", + // Auxiliary tasks + auxiliaryTitle: "משימות עזר", + auxiliaryDescription: + "משימות עזר מטפלות במשימות צד כמו ראייה, דחיסה וחילוץ מהאינטרנט. \"אוטומטי\" משמעו \"שימוש במודל הראשי\". עקפו לכל משימה כאשר תרצו מודל זול/מהיר למשימה מסוימת.", + auxiliaryResetAll: "איפוס הכול לאוטומטי", + auxiliaryVision: "ראייה", + auxiliaryVisionHint: "ניתוח תמונות/צילומי מסך", + auxiliaryWebExtract: "חילוץ מהאינטרנט", + auxiliaryWebExtractHint: "סיכום דפי אינטרנט", + auxiliaryCompression: "דחיסה", + auxiliaryCompressionHint: "סיכום הקשר", + auxiliarySkillsHub: "מרכז מיומנויות", + auxiliarySkillsHubHint: "חיפוש/התקנת מיומנויות", + auxiliaryApproval: "אישור", + auxiliaryApprovalHint: "אישור פקודות חכם", + auxiliaryMcp: "MCP", + auxiliaryMcpHint: "חשיבת כלי MCP", + auxiliaryTitleGeneration: "יצירת כותרות", + auxiliaryTitleGenerationHint: "כותרות סשנים", + auxiliaryTriageSpecifier: "מפרט מיון", + auxiliaryTriageSpecifierHint: "השלמת מפרט קנבן", + auxiliaryKanbanDecomposer: "מפרק קנבן", + auxiliaryKanbanDecomposerHint: "פירוק משימות", + auxiliaryProfileDescriber: "מתאר פרופילים", + auxiliaryProfileDescriberHint: "תיאורי פרופיל אוטומטיים", + auxiliaryCurator: "אוצר", + auxiliaryCuratorHint: "מעבר סקירת שימוש במיומנויות", + auxiliaryAuto: "אוטומטי", + auxiliaryProviderLabel: "ספק", + auxiliaryModelLabel: "מודל", + auxiliaryBaseUrlLabel: "כתובת URL בסיסית", + auxiliarySaved: "משימת העזר נשמרה", + auxiliaryResetSuccess: "כל משימות העזר אופסו לאוטומטי", // Gateway section titles gatewayMessagingPlatforms: "פלטפורמות מסרים", // Gateway field labels diff --git a/src/shared/i18n/locales/he/gateway.ts b/src/shared/i18n/locales/he/gateway.ts index 67c7c8f3d..0e612e4b7 100644 --- a/src/shared/i18n/locales/he/gateway.ts +++ b/src/shared/i18n/locales/he/gateway.ts @@ -43,6 +43,7 @@ export default { disable: "השבתה", enable: "הפעלה", enablePlatform: "הפעלת הפלטפורמה", + setupFirst: "הגדירו פרטי התחברות לפני הפעלת פלטפורמה זו", strongWarning: "אזהרה חמורה", riskDesc: "‏{{name}} מאפשרת לפלטפורמת מסרים זו להפעיל כלים מקומיים רגישים. הפעילו אותה רק עבור ערוצים פרטיים ומהימנים ומשתמשים מוכרים.", diff --git a/src/shared/i18n/locales/he/models.ts b/src/shared/i18n/locales/he/models.ts index bcebf5b83..a26aa32c8 100644 --- a/src/shared/i18n/locales/he/models.ts +++ b/src/shared/i18n/locales/he/models.ts @@ -25,4 +25,13 @@ export default { apiKeyLabel: "מפתח API", apiKeyHint: "נשמר כמשתנה סביבה. בוחר את מפתח הסביבה התואם לפי הכתובת, או CUSTOM_API_KEY אחרת.", + allProviders: "הכול", + browseRegistry: "עיון במודלים", + registryTitle: "מאגר מודלים", + registrySearchPlaceholder: "חיפוש ספקים ומודלים...", + registryAddButton: "הוספה", + registryAddedLabel: "נוסף", + registryCustomBadge: "דרך כתובת URL בסיסית", + registryAdded: "‏{{name}} נוסף למודלים שלכם", + registryLoadError: "טעינת מאגר המודלים נכשלה", } as const; diff --git a/src/shared/i18n/locales/he/navigation.ts b/src/shared/i18n/locales/he/navigation.ts index 345920e8a..5ef77257f 100644 --- a/src/shared/i18n/locales/he/navigation.ts +++ b/src/shared/i18n/locales/he/navigation.ts @@ -16,4 +16,6 @@ export default { settings: "הגדרות", collapseSidebar: "כווץ סרגל צד", expandSidebar: "הרחב סרגל צד", + showRecentSessions: "הצג סשנים אחרונים", + hideRecentSessions: "הסתר סשנים אחרונים", } as const; diff --git a/src/shared/i18n/locales/he/sessions.ts b/src/shared/i18n/locales/he/sessions.ts index ebb9cbc04..31d74798b 100644 --- a/src/shared/i18n/locales/he/sessions.ts +++ b/src/shared/i18n/locales/he/sessions.ts @@ -6,6 +6,7 @@ export default { empty: "אין סשנים עדיין", newConversation: "שיחה חדשה", newChat: "צ'אט חדש", + closeTab: "סגירת לשונית", today: "היום", yesterday: "אתמול", thisWeek: "השבוע", diff --git a/src/shared/i18n/locales/he/setup.ts b/src/shared/i18n/locales/he/setup.ts index 3b2879d68..63b59c77a 100644 --- a/src/shared/i18n/locales/he/setup.ts +++ b/src/shared/i18n/locales/he/setup.ts @@ -22,6 +22,7 @@ export default { together: "Together AI", fireworks: "Fireworks", cerebras: "Cerebras", + atlascloud: "AtlasCloud", mistral: "Mistral", }, serverPreset: "תבנית שרת",