diff --git a/packages/shared/IpcChannel.ts b/packages/shared/IpcChannel.ts index be037f6669..2931015117 100644 --- a/packages/shared/IpcChannel.ts +++ b/packages/shared/IpcChannel.ts @@ -138,6 +138,7 @@ export enum IpcChannel { Windows_Close = 'window:close', Windows_IsMaximized = 'window:is-maximized', Windows_MaximizedChanged = 'window:maximized-changed', + Windows_NavigateToAbout = 'window:navigate-to-about', KnowledgeBase_Create = 'knowledge-base:create', KnowledgeBase_Reset = 'knowledge-base:reset', diff --git a/src/main/index.ts b/src/main/index.ts index fa83dc72b8..d9554e1652 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -17,6 +17,7 @@ import process from 'node:process' import { registerIpc } from './ipc' import { agentService } from './services/agents' import { apiServerService } from './services/ApiServerService' +import { appMenuService } from './services/AppMenuService' import { configManager } from './services/ConfigManager' import mcpService from './services/MCPService' import { nodeTraceService } from './services/NodeTraceService' @@ -122,6 +123,9 @@ if (!app.requestSingleInstanceLock()) { const mainWindow = windowService.createMainWindow() new TrayService() + // Setup macOS application menu + appMenuService?.setupApplicationMenu() + nodeTraceService.init() app.on('activate', function () { diff --git a/src/main/services/AppMenuService.ts b/src/main/services/AppMenuService.ts new file mode 100644 index 0000000000..0e6cdf27ea --- /dev/null +++ b/src/main/services/AppMenuService.ts @@ -0,0 +1,51 @@ +import { isMac } from '@main/constant' +import { windowService } from '@main/services/WindowService' +import { locales } from '@main/utils/locales' +import { IpcChannel } from '@shared/IpcChannel' +import { app, Menu, MenuItemConstructorOptions } from 'electron' + +import { configManager } from './ConfigManager' +export class AppMenuService { + public setupApplicationMenu(): void { + const locale = locales[configManager.getLanguage()] + const { common } = locale.translation + + const template: MenuItemConstructorOptions[] = [ + { + label: app.name, + submenu: [ + { + label: common.about + ' ' + app.name, + click: () => { + // Emit event to navigate to About page + const mainWindow = windowService.getMainWindow() + if (mainWindow && !mainWindow.isDestroyed()) { + mainWindow.webContents.send(IpcChannel.Windows_NavigateToAbout) + windowService.showMainWindow() + } + } + }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideOthers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }, + { + role: 'editMenu' + }, + { + role: 'windowMenu' + } + ] + + const menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) + } +} + +export const appMenuService = isMac ? new AppMenuService() : null diff --git a/src/renderer/src/handler/NavigationHandler.tsx b/src/renderer/src/handler/NavigationHandler.tsx index 0bdef5c992..5e1ef56113 100644 --- a/src/renderer/src/handler/NavigationHandler.tsx +++ b/src/renderer/src/handler/NavigationHandler.tsx @@ -1,4 +1,6 @@ import { useAppSelector } from '@renderer/store' +import { IpcChannel } from '@shared/IpcChannel' +import { useEffect } from 'react' import { useHotkeys } from 'react-hotkeys-hook' import { useLocation, useNavigate } from 'react-router-dom' @@ -25,6 +27,19 @@ const NavigationHandler: React.FC = () => { } ) + // Listen for navigate to About page event from macOS menu + useEffect(() => { + const handleNavigateToAbout = () => { + navigate('/settings/about') + } + + const removeListener = window.electron.ipcRenderer.on(IpcChannel.Windows_NavigateToAbout, handleNavigateToAbout) + + return () => { + removeListener() + } + }, [navigate]) + return null } diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index e49eb7fa72..ab3bedef6a 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -952,6 +952,7 @@ } }, "common": { + "about": "About", "add": "Add", "add_success": "Added successfully", "advanced_settings": "Advanced Settings", @@ -4230,7 +4231,7 @@ "system": "System Proxy", "title": "Proxy Mode" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "Supports wildcard matching (*.test.com, 192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Click the tray icon to start", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index e63264127e..b477e075c6 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -952,6 +952,7 @@ } }, "common": { + "about": "关于", "add": "添加", "add_success": "添加成功", "advanced_settings": "高级设置", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 074b935b34..243d8dc7ef 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -538,7 +538,7 @@ "context": "清除上下文 {{Command}}" }, "new_topic": "新話題 {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "貼到輸入框?", "pause": "暫停", "placeholder": "在此輸入您的訊息,按 {{key}} 傳送 - @ 選擇模型,/ 包含工具", "placeholder_without_triggers": "在此輸入您的訊息,按 {{key}} 傳送", @@ -952,6 +952,7 @@ } }, "common": { + "about": "關於", "add": "新增", "add_success": "新增成功", "advanced_settings": "進階設定", @@ -4230,7 +4231,7 @@ "system": "系統代理伺服器", "title": "代理伺服器模式" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "支援模糊匹配(*.test.com,192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "點選工具列圖示啟動", diff --git a/src/renderer/src/i18n/translate/de-de.json b/src/renderer/src/i18n/translate/de-de.json index e4c07b1b07..a7585b34fe 100644 --- a/src/renderer/src/i18n/translate/de-de.json +++ b/src/renderer/src/i18n/translate/de-de.json @@ -22,7 +22,8 @@ }, "get": { "error": { - "failed": "Agent abrufen fehlgeschlagen" + "failed": "Agent abrufen fehlgeschlagen", + "null_id": "智能体 ID 为空。" } }, "list": { @@ -30,6 +31,11 @@ "failed": "Agent-Liste abrufen fehlgeschlagen" } }, + "server": { + "error": { + "not_running": "API server is enabled but not running properly." + } + }, "session": { "accessible_paths": { "add": "Verzeichnis hinzufügen", @@ -68,7 +74,8 @@ }, "get": { "error": { - "failed": "Sitzung abrufen fehlgeschlagen" + "failed": "Sitzung abrufen fehlgeschlagen", + "null_id": "会话 ID 为空" } }, "label_one": "Sitzung", @@ -237,6 +244,7 @@ "messages": { "apiKeyCopied": "API-Schlüssel in die Zwischenablage kopiert", "apiKeyRegenerated": "API-Schlüssel wurde neu generiert", + "notEnabled": "API server is not enabled.", "operationFailed": "API-Server-Operation fehlgeschlagen:", "restartError": "API-Server-Neustart fehlgeschlagen:", "restartFailed": "API-Server-Neustart fehlgeschlagen:", @@ -530,6 +538,7 @@ "context": "Kontext löschen {{Command}}" }, "new_topic": "Neues Thema {{Command}}", + "paste_text_file_confirm": "粘贴到输入框?", "pause": "Pause", "placeholder": "Geben Sie hier eine Nachricht ein, drücken Sie {{key}} zum Senden - @ für Modellauswahl, / für Tools", "placeholder_without_triggers": "Geben Sie hier eine Nachricht ein, drücken Sie {{key}} zum Senden", @@ -943,6 +952,7 @@ } }, "common": { + "about": "About", "add": "Hinzufügen", "add_success": "Erfolgreich hinzugefügt", "advanced_settings": "Erweiterte Einstellungen", @@ -1795,6 +1805,7 @@ "title": "Mini-Apps" }, "minapps": { + "ant-ling": "Ant Ling", "baichuan": "Baixiaoying", "baidu-ai-search": "Baidu AI Suche", "chatglm": "ChatGLM", @@ -1951,6 +1962,14 @@ "rename": "Umbenennen", "rename_changed": "Aus Sicherheitsgründen wurde der Dateiname von {{original}} zu {{final}} geändert", "save": "In Notizen speichern", + "search": { + "both": "名称+内容", + "content": "内容", + "found_results": "找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", + "more_matches": "个匹配", + "searching": "Searching...", + "show_less": "收起" + }, "settings": { "data": { "apply": "Anwenden", @@ -2035,6 +2054,7 @@ "provider": { "cannot_remove_builtin": "Eingebauter Anbieter kann nicht entfernt werden", "existing": "Anbieter existiert bereits", + "get_providers": "Failed to obtain available providers", "not_found": "OCR-Anbieter nicht gefunden", "update_failed": "Konfiguration aktualisieren fehlgeschlagen" }, @@ -2098,6 +2118,8 @@ "install_code_103": "OVMS Runtime herunterladen fehlgeschlagen", "install_code_104": "OVMS Runtime entpacken fehlgeschlagen", "install_code_105": "OVMS Runtime bereinigen fehlgeschlagen", + "install_code_106": "Failed to create run.bat", + "install_code_110": "Failed to clean up old OVMS runtime", "run": "OVMS ausführen fehlgeschlagen:", "stop": "OVMS stoppen fehlgeschlagen:" }, @@ -2656,11 +2678,11 @@ "go_to_settings": "Zu Einstellungen", "open_accessibility_settings": "Bedienungshilfen-Einstellungen öffnen" }, - "description": [ - "Der Textauswahl-Assistent benötigt Bedienungshilfen-Berechtigungen, um ordnungsgemäß zu funktionieren.", - "Klicken Sie auf Zu Einstellungen und anschließend im Berechtigungsdialog auf Systemeinstellungen öffnen. Suchen Sie danach in der App-Liste Cherry Studio und aktivieren Sie den Schalter.", - "Nach Abschluss der Einrichtung Textauswahl-Assistent erneut aktivieren." - ], + "description": { + "0": "Der Textauswahl-Assistent benötigt Bedienungshilfen-Berechtigungen, um ordnungsgemäß zu funktionieren.", + "1": "Klicken Sie auf Zu Einstellungen und anschließend im Berechtigungsdialog auf Systemeinstellungen öffnen. Suchen Sie danach in der App-Liste Cherry Studio und aktivieren Sie den Schalter.", + "2": "Nach Abschluss der Einrichtung Textauswahl-Assistent erneut aktivieren." + }, "title": "Bedienungshilfen-Berechtigung" }, "title": "Aktivieren" @@ -3568,6 +3590,7 @@ "builtinServers": "Integrierter Server", "builtinServersDescriptions": { "brave_search": "MCP-Server-Implementierung mit Brave-Search-API, die sowohl Web- als auch lokale Suchfunktionen bietet. BRAVE_API_KEY-Umgebungsvariable muss konfiguriert werden", + "didi_mcp": "An integrated Didi MCP server implementation that provides ride-hailing services including map search, price estimation, order management, and driver tracking. Only available in mainland China. Requires the DIDI_API_KEY environment variable to be configured.", "dify_knowledge": "MCP-Server-Implementierung von Dify, die einen einfachen API-Zugriff auf Dify bietet. Dify Key muss konfiguriert werden", "fetch": "MCP-Server zum Abrufen von Webseiteninhalten", "filesystem": "MCP-Server für Dateisystemoperationen (Node.js), der den Zugriff auf bestimmte Verzeichnisse ermöglicht", @@ -4207,7 +4230,8 @@ "none": "Keinen Proxy verwenden", "system": "System-Proxy", "title": "Proxy-Modus" - } + }, + "tip": "支持模糊匹配(*.test.com,192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Klicken auf Tray-Symbol zum Starten", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 569820776c..a6e17df779 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -538,7 +538,7 @@ "context": "Καθαρισμός ενδιάμεσων {{Command}}" }, "new_topic": "Νέο θέμα {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "Επικόλληση στο πλαίσιο εισαγωγής;", "pause": "Παύση", "placeholder": "Εισάγετε μήνυμα εδώ...", "placeholder_without_triggers": "Γράψτε το μήνυμά σας εδώ, πατήστε {{key}} για αποστολή", @@ -952,6 +952,7 @@ } }, "common": { + "about": "σχετικά με", "add": "Προσθέστε", "add_success": "Η προσθήκη ήταν επιτυχής", "advanced_settings": "Προχωρημένες ρυθμίσεις", @@ -1962,12 +1963,12 @@ "rename_changed": "Λόγω πολιτικής ασφάλειας, το όνομα του αρχείου έχει αλλάξει από {{original}} σε {{final}}", "save": "αποθήκευση στις σημειώσεις", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "όνομα + περιεχόμενο", + "content": "περιεχόμενο", + "found_results": "Βρέθηκαν {{count}} αποτελέσματα (όνομα: {{nameCount}}, περιεχόμενο: {{contentCount}})", + "more_matches": "ένας αγώνας", + "searching": "Αναζήτηση...", + "show_less": "κλείσιμο" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "Η λήψη του OVMS runtime απέτυχε", "install_code_104": "Η αποσυμπίεση του OVMS runtime απέτυχε", "install_code_105": "Ο καθαρισμός του OVMS runtime απέτυχε", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "Η δημιουργία του run.bat απέτυχε", + "install_code_110": "Η διαγραφή του παλιού χρόνου εκτέλεσης OVMS απέτυχε", "run": "Η εκτέλεση του OVMS απέτυχε:", "stop": "Η διακοπή του OVMS απέτυχε:" }, @@ -4230,7 +4231,7 @@ "system": "συστηματική προξενική", "title": "κλίμακα προξενικής" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "υποστηρίζει ασαφή αντιστοίχιση (*.test.com,192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Επιλέξτε την εικόνα στο πίνακα για να ενεργοποιήσετε", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index 96fdbf5127..c57f027c28 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -538,7 +538,7 @@ "context": "Limpiar contexto {{Command}}" }, "new_topic": "Nuevo tema {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "¿Pegar en el cuadro de entrada?", "pause": "Pausar", "placeholder": "Escribe aquí tu mensaje...", "placeholder_without_triggers": "Escribe tu mensaje aquí, presiona {{key}} para enviar", @@ -952,6 +952,7 @@ } }, "common": { + "about": "Acerca de", "add": "Agregar", "add_success": "Añadido con éxito", "advanced_settings": "Configuración avanzada", @@ -1962,12 +1963,12 @@ "rename_changed": "Debido a políticas de seguridad, el nombre del archivo ha cambiado de {{original}} a {{final}}", "save": "Guardar en notas", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "Nombre + contenido", + "content": "contenido", + "found_results": "Encontrados {{count}} resultados (nombre: {{nameCount}}, contenido: {{contentCount}})", + "more_matches": "una coincidencia", + "searching": "Buscando...", + "show_less": "Recoger" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "Error al descargar el tiempo de ejecución de OVMS", "install_code_104": "Error al descomprimir el tiempo de ejecución de OVMS", "install_code_105": "Error al limpiar el tiempo de ejecución de OVMS", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "Error al crear run.bat", + "install_code_110": "Error al limpiar el antiguo runtime de OVMS", "run": "Error al ejecutar OVMS:", "stop": "Error al detener OVMS:" }, @@ -4230,7 +4231,7 @@ "system": "Proxy del sistema", "title": "Modo de proxy" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "Soporta coincidencia difusa (*.test.com, 192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Haz clic en el icono de la bandeja para iniciar", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index add50fb202..a21fa5e3fd 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -538,7 +538,7 @@ "context": "Effacer le contexte {{Command}}" }, "new_topic": "Nouveau sujet {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "Coller dans la zone de saisie ?", "pause": "Pause", "placeholder": "Entrez votre message ici...", "placeholder_without_triggers": "Tapez votre message ici, appuyez sur {{key}} pour envoyer", @@ -952,6 +952,7 @@ } }, "common": { + "about": "à propos", "add": "Ajouter", "add_success": "Ajout réussi", "advanced_settings": "Paramètres avancés", @@ -1962,12 +1963,12 @@ "rename_changed": "En raison de la politique de sécurité, le nom du fichier a été changé de {{original}} à {{final}}", "save": "sauvegarder dans les notes", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "Nom+contenu", + "content": "suivre l’instruction du système", + "found_results": "{{count}} résultats trouvés (nom : {{nameCount}}, contenu : {{contentCount}})", + "more_matches": "une correspondance", + "searching": "Recherche en cours...", + "show_less": "Replier" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "Échec du téléchargement du runtime OVMS", "install_code_104": "Échec de la décompression du runtime OVMS", "install_code_105": "Échec du nettoyage du runtime OVMS", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "Échec de la création de run.bat", + "install_code_110": "Échec du nettoyage de l'ancien runtime OVMS", "run": "Échec de l'exécution d'OVMS :", "stop": "Échec de l'arrêt d'OVMS :" }, @@ -4230,7 +4231,7 @@ "system": "Proxy système", "title": "Mode de proxy" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "Prise en charge de la correspondance floue (*.test.com, 192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Cliquez sur l'icône dans la barre d'état système pour démarrer", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index 154a69edf5..311c3664cb 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -538,7 +538,7 @@ "context": "コンテキストをクリア {{Command}}" }, "new_topic": "新しいトピック {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "入力ボックスに貼り付けますか?", "pause": "一時停止", "placeholder": "ここにメッセージを入力し、{{key}} を押して送信...", "placeholder_without_triggers": "ここにメッセージを入力し、{{key}} を押して送信...", @@ -952,6 +952,7 @@ } }, "common": { + "about": "について", "add": "追加", "add_success": "追加成功", "advanced_settings": "詳細設定", @@ -1962,12 +1963,12 @@ "rename_changed": "セキュリティポリシーにより、ファイル名は{{original}}から{{final}}に変更されました", "save": "メモに保存する", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "名称+内容", + "content": "内容", + "found_results": "{{count}} 件の結果が見つかりました(名称: {{nameCount}}、内容: {{contentCount}})", + "more_matches": "個マッチ", + "searching": "検索中...", + "show_less": "\n折りたたむ\n" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "OVMSランタイムのダウンロードに失敗しました", "install_code_104": "OVMSランタイムの解凍に失敗しました", "install_code_105": "OVMSランタイムのクリーンアップに失敗しました", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "run.bat の作成に失敗しました", + "install_code_110": "古いOVMSランタイムのクリーンアップに失敗しました", "run": "OVMSの実行に失敗しました:", "stop": "OVMSの停止に失敗しました:" }, @@ -4230,7 +4231,7 @@ "system": "システムプロキシ", "title": "プロキシモード" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "ワイルドカード一致をサポート (*.test.com, 192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "トレイアイコンをクリックして起動", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 75faafe889..1d6deee2ea 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -538,7 +538,7 @@ "context": "Limpar contexto {{Command}}" }, "new_topic": "Novo tópico {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "Colar na caixa de entrada?", "pause": "Pausar", "placeholder": "Digite sua mensagem aqui...", "placeholder_without_triggers": "Escreve a tua mensagem aqui, pressiona {{key}} para enviar", @@ -952,6 +952,7 @@ } }, "common": { + "about": "Sobre", "add": "Adicionar", "add_success": "Adicionado com sucesso", "advanced_settings": "Configurações Avançadas", @@ -1962,12 +1963,12 @@ "rename_changed": "Devido às políticas de segurança, o nome do arquivo foi alterado de {{original}} para {{final}}", "save": "salvar em notas", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "nome+conteúdo", + "content": "\n[to be translated]:内容\n\nconteúdo", + "found_results": "找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", + "more_matches": "uma correspondência", + "searching": "Procurando...", + "show_less": "Recolher" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "Falha ao baixar o tempo de execução do OVMS", "install_code_104": "Falha ao descompactar o tempo de execução do OVMS", "install_code_105": "Falha ao limpar o tempo de execução do OVMS", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "Falha ao criar run.bat", + "install_code_110": "Falha ao limpar o runtime antigo do OVMS", "run": "Falha ao executar o OVMS:", "stop": "Falha ao parar o OVMS:" }, @@ -4230,7 +4231,7 @@ "system": "Proxy do Sistema", "title": "Modo de Proxy" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "Suporta correspondência difusa (*.test.com,192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Clique no ícone da bandeja para iniciar", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index 4b56b7b0da..9055102d66 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -538,7 +538,7 @@ "context": "Очистить контекст {{Command}}" }, "new_topic": "Новый топик {{Command}}", - "paste_text_file_confirm": "[to be translated]:粘贴到输入框?", + "paste_text_file_confirm": "Вставить в поле ввода?", "pause": "Остановить", "placeholder": "Введите ваше сообщение здесь, нажмите {{key}} для отправки...", "placeholder_without_triggers": "Напишите сообщение здесь, нажмите {{key}} для отправки", @@ -952,6 +952,7 @@ } }, "common": { + "about": "о", "add": "Добавить", "add_success": "Успешно добавлено", "advanced_settings": "Дополнительные настройки", @@ -1962,12 +1963,12 @@ "rename_changed": "В связи с политикой безопасности имя файла было изменено с {{Original}} на {{final}}", "save": "Сохранить в заметки", "search": { - "both": "[to be translated]:名称+内容", - "content": "[to be translated]:内容", - "found_results": "[to be translated]:找到 {{count}} 个结果 (名称: {{nameCount}}, 内容: {{contentCount}})", - "more_matches": "[to be translated]:个匹配", - "searching": "[to be translated]:搜索中...", - "show_less": "[to be translated]:收起" + "both": "Название+содержание", + "content": "содержание", + "found_results": "Найдено результатов: {{count}} (название: {{nameCount}}, содержание: {{contentCount}})", + "more_matches": "совпадение", + "searching": "Поиск...", + "show_less": "Свернуть" }, "settings": { "data": { @@ -2117,8 +2118,8 @@ "install_code_103": "Ошибка загрузки среды выполнения OVMS", "install_code_104": "Ошибка распаковки среды выполнения OVMS", "install_code_105": "Ошибка очистки среды выполнения OVMS", - "install_code_106": "[to be translated]:创建 run.bat 失败", - "install_code_110": "[to be translated]:清理旧 OVMS runtime 失败", + "install_code_106": "Не удалось создать run.bat", + "install_code_110": "Ошибка очистки старой среды выполнения OVMS", "run": "Ошибка запуска OVMS:", "stop": "Ошибка остановки OVMS:" }, @@ -4230,7 +4231,7 @@ "system": "Системный прокси", "title": "Режим прокси" }, - "tip": "[to be translated]:支持模糊匹配(*.test.com,192.168.0.0/16)" + "tip": "Поддержка нечеткого соответствия (*.test.com, 192.168.0.0/16)" }, "quickAssistant": { "click_tray_to_show": "Нажмите на иконку трея для запуска",