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": "Нажмите на иконку трея для запуска",