diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index bc4db909e2..1f7dece2be 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Drop .md files or folders here to import", "empty": "No notes available yet", "expand": "unfold", + "exportToWord": "Export to Word", "export_failed": "Failed to export to knowledge base", "export_knowledge": "Export notes to knowledge base", "export_success": "Successfully exported to the knowledge base", + "export_to_word_failed": "Failed to export to Word", "folder": "folder", "new_folder": "New Folder", "new_note": "Create a new note", "no_content_to_copy": "No content to copy", + "no_content_to_export": "No content to export", "no_file_selected": "Please select the file to upload", + "no_note_selected": "Please select a note first", "no_valid_files": "No valid file was uploaded", "open_folder": "Open an external folder", "open_outside": "Open from external", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index affea9f135..fe5078e684 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "拖拽 .md 文件或目录到此处导入", "empty": "暂无笔记", "expand": "展开", + "exportToWord": "导出为 Word", "export_failed": "导出到知识库失败", "export_knowledge": "导出笔记到知识库", "export_success": "成功导出到知识库", + "export_to_word_failed": "导出为 Word 失败", "folder": "文件夹", "new_folder": "新建文件夹", "new_note": "新建笔记", "no_content_to_copy": "没有内容可复制", + "no_content_to_export": "没有内容可导出", "no_file_selected": "请选择要上传的文件", + "no_note_selected": "请先选择一个笔记", "no_valid_files": "没有上传有效的文件", "open_folder": "打开外部文件夹", "open_outside": "从外部打开", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 1895012bf4..b6697bca37 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "拖曳 .md 檔案或資料夾到此處匯入", "empty": "暫無筆記", "expand": "展開", + "exportToWord": "匯出為 Word", "export_failed": "匯出至知識庫失敗", "export_knowledge": "匯出筆記至知識庫", "export_success": "成功匯出至知識庫", + "export_to_word_failed": "匯出為 Word 失敗", "folder": "資料夾", "new_folder": "新增資料夾", "new_note": "新增筆記", "no_content_to_copy": "沒有內容可複製", + "no_content_to_export": "沒有內容可匯出", "no_file_selected": "請選擇要上傳的檔案", + "no_note_selected": "請先選擇一個筆記", "no_valid_files": "沒有上傳有效的檔案", "open_folder": "開啟外部資料夾", "open_outside": "從外部開啟", diff --git a/src/renderer/src/i18n/translate/de-de.json b/src/renderer/src/i18n/translate/de-de.json index a83e77355d..98b6ec7d84 100644 --- a/src/renderer/src/i18n/translate/de-de.json +++ b/src/renderer/src/i18n/translate/de-de.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": ".md-Datei oder Verzeichnis hierher ziehen zum Importieren", "empty": "Keine Notizen vorhanden", "expand": "Ausklappen", + "exportToWord": "In Word exportieren", "export_failed": "Export in Wissensdatenbank fehlgeschlagen", "export_knowledge": "Notiz in Wissensdatenbank exportieren", "export_success": "Erfolgreich in Wissensdatenbank exportiert", + "export_to_word_failed": "Export nach Word fehlgeschlagen", "folder": "Ordner", "new_folder": "Neuer Ordner", "new_note": "Neue Notiz", "no_content_to_copy": "Kein Inhalt zum Kopieren", + "no_content_to_export": "Kein Inhalt zum Exportieren", "no_file_selected": "Bitte Datei zum Hochladen auswählen", + "no_note_selected": "Bitte wählen Sie zuerst eine Notiz aus", "no_valid_files": "Keine gültigen Dateien hochgeladen", "open_folder": "Externen Ordner öffnen", "open_outside": "Extern öffnen", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index 59ffacaba5..3add278020 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Σύρετε και αποθέστε αρχεία ή φακέλους .md εδώ για εισαγωγή", "empty": "δεν υπάρχει σημείωση για τώρα", "expand": "να ανοίξει", + "exportToWord": "Εξαγωγή σε Word", "export_failed": "Εξαγωγή στη βάση γνώσης απέτυχε", "export_knowledge": "εξαγωγή σημειώσεων στη βάση γνώσης", "export_success": "Επιτυχής εξαγωγή στην βάση γνώσης", + "export_to_word_failed": "Αποτυχία εξαγωγής στο Word", "folder": "φάκελος", "new_folder": "Νέος φάκελος", "new_note": "Δημιουργία νέας σημείωσης", "no_content_to_copy": "Δεν υπάρχει περιεχόμενο προς αντιγραφή", + "no_content_to_export": "Κανένα περιεχόμενο προς εξαγωγή", "no_file_selected": "Επιλέξτε το αρχείο για μεταφόρτωση", + "no_note_selected": "Παρακαλώ επιλέξτε πρώτα μια σημείωση", "no_valid_files": "Δεν ανέβηκε έγκυρο αρχείο", "open_folder": "Άνοιγμα εξωτερικού φακέλου", "open_outside": "Από το εξωτερικό", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index 5fb108dabe..620e731c9f 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Arrastre y suelte archivos o carpetas de .md aquí para importar", "empty": "Sin notas por el momento", "expand": "expandir", + "exportToWord": "Exportar a Word", "export_failed": "Exportación a la base de conocimientos fallida", "export_knowledge": "exportar notas a la base de conocimientos", "export_success": "Exportado con éxito a la base de conocimientos", + "export_to_word_failed": "Error al exportar a Word", "folder": "carpeta", "new_folder": "Nueva carpeta", "new_note": "Crear nota nueva", "no_content_to_copy": "No hay contenido para copiar", + "no_content_to_export": "Sin contenido para exportar", "no_file_selected": "Por favor, seleccione el archivo a subir", + "no_note_selected": "Por favor, selecciona primero una nota.", "no_valid_files": "No se ha cargado un archivo válido", "open_folder": "abrir carpeta externa", "open_outside": "Abrir desde el exterior", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index edd84c795d..30af8e8d6c 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Déposez ici des fichiers ou dossiers .md pour les importer", "empty": "Aucune note pour le moment", "expand": "développer", + "exportToWord": "Exporter vers Word", "export_failed": "Échec de l'exportation vers la base de connaissances", "export_knowledge": "exporter la note vers la base de connaissances", "export_success": "Exporté avec succès vers la base de connaissances", + "export_to_word_failed": "Échec de l'exportation vers Word", "folder": "dossier", "new_folder": "Nouveau dossier", "new_note": "Nouvelle note", "no_content_to_copy": "Aucun contenu à copier", + "no_content_to_export": "Aucun contenu à exporter", "no_file_selected": "Veuillez sélectionner le fichier à télécharger", + "no_note_selected": "Veuillez d'abord sélectionner une note", "no_valid_files": "Aucun fichier valide n’a été téléversé", "open_folder": "ouvrir le dossier externe", "open_outside": "Ouvrir depuis l'extérieur", diff --git a/src/renderer/src/i18n/translate/ja-jp.json b/src/renderer/src/i18n/translate/ja-jp.json index 4bc41a9750..0c69fb863c 100644 --- a/src/renderer/src/i18n/translate/ja-jp.json +++ b/src/renderer/src/i18n/translate/ja-jp.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": ".md ファイルまたはディレクトリをここにドラッグ&ドロップしてインポートしてください", "empty": "暫無ノート", "expand": "展開", + "exportToWord": "Wordにエクスポート", "export_failed": "知識ベースへのエクスポートに失敗しました", "export_knowledge": "ノートをナレッジベースにエクスポートする", "export_success": "知識ベースへのエクスポートが成功しました", + "export_to_word_failed": "Wordへのエクスポートに失敗しました", "folder": "フォルダー", "new_folder": "新しいフォルダーを作成する", "new_note": "新規ノート作成", "no_content_to_copy": "コピーするコンテンツはありません", + "no_content_to_export": "エクスポートするコンテンツがありません", "no_file_selected": "アップロードするファイルを選択してください", + "no_note_selected": "まずノートを選択してください", "no_valid_files": "有効なファイルがアップロードされていません", "open_folder": "外部フォルダーを開きます", "open_outside": "外部から開く", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 12a7585cb1..94534d9e4d 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Arraste e solte arquivos ou pastas .md aqui para importar", "empty": "Ainda não existem notas", "expand": "expandir", + "exportToWord": "Exportar para Word", "export_failed": "Falha ao exportar para a base de conhecimento", "export_knowledge": "exportar anotações para a base de conhecimento", "export_success": "exportado com sucesso para a base de conhecimento", + "export_to_word_failed": "Falha ao exportar para Word", "folder": "pasta", "new_folder": "Nova pasta", "new_note": "Nova nota", "no_content_to_copy": "Não há conteúdo para copiar", + "no_content_to_export": "Sem conteúdo para exportar", "no_file_selected": "Selecione o arquivo a ser enviado", + "no_note_selected": "Por favor, selecione uma nota primeiro", "no_valid_files": "Nenhum arquivo válido foi carregado", "open_folder": "Abrir pasta externa", "open_outside": "Abrir externamente", diff --git a/src/renderer/src/i18n/translate/ro-ro.json b/src/renderer/src/i18n/translate/ro-ro.json index 16e8d5aa71..329f60469a 100644 --- a/src/renderer/src/i18n/translate/ro-ro.json +++ b/src/renderer/src/i18n/translate/ro-ro.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Trage fișiere sau dosare .md aici pentru a importa", "empty": "Încă nu există notițe disponibile", "expand": "Extinde", + "exportToWord": "Exportă în Word", "export_failed": "Exportul în baza de cunoștințe a eșuat", "export_knowledge": "Exportă notițele în baza de cunoștințe", "export_success": "Exportat cu succes în baza de cunoștințe", + "export_to_word_failed": "Exportul în Word a eșuat", "folder": "Dosar", "new_folder": "Dosar nou", "new_note": "Creează o notiță nouă", "no_content_to_copy": "Niciun conținut de copiat", + "no_content_to_export": "Niciun conținut de exportat", "no_file_selected": "Te rugăm să selectezi fișierul de încărcat", + "no_note_selected": "Te rog selectează mai întâi o notă", "no_valid_files": "Nu a fost încărcat niciun fișier valid", "open_folder": "Deschide un dosar extern", "open_outside": "Deschide extern", diff --git a/src/renderer/src/i18n/translate/ru-ru.json b/src/renderer/src/i18n/translate/ru-ru.json index 2797da9572..519918de1a 100644 --- a/src/renderer/src/i18n/translate/ru-ru.json +++ b/src/renderer/src/i18n/translate/ru-ru.json @@ -2226,14 +2226,18 @@ "drop_markdown_hint": "Перетащите сюда файлы или папки .md для импорта", "empty": "заметок пока нет", "expand": "развернуть", + "exportToWord": "Экспорт в Word", "export_failed": "Экспорт в базу знаний не выполнен", "export_knowledge": "Экспортировать заметки в базу знаний", "export_success": "Успешно экспортировано в базу знаний", + "export_to_word_failed": "Не удалось экспортировать в Word", "folder": "папка", "new_folder": "Новая папка", "new_note": "Создать заметку", "no_content_to_copy": "Нет контента для копирования", + "no_content_to_export": "Нет содержимого для экспорта", "no_file_selected": "Пожалуйста, выберите файл для загрузки", + "no_note_selected": "Пожалуйста, сначала выберите заметку", "no_valid_files": "Не загружен действительный файл", "open_folder": "Откройте внешнюю папку", "open_outside": "открыть снаружи", diff --git a/src/renderer/src/pages/notes/HeaderNavbar.tsx b/src/renderer/src/pages/notes/HeaderNavbar.tsx index 92c66ba98d..d317343db6 100644 --- a/src/renderer/src/pages/notes/HeaderNavbar.tsx +++ b/src/renderer/src/pages/notes/HeaderNavbar.tsx @@ -53,6 +53,25 @@ const HeaderNavbar = ({ notesTree, getCurrentNoteContent, onToggleStar, onExpand } }, [getCurrentNoteContent]) + const handleExportToWord = useCallback(async () => { + try { + const content = getCurrentNoteContent?.() + if (!content) { + window.toast.warning(t('notes.no_content_to_export')) + return + } + if (!activeNode) { + window.toast.warning(t('notes.no_note_selected')) + return + } + const fileName = activeNode.name.replace('.md', '') + await window.api.export.toWord(content, fileName) + } catch (error) { + logger.error('Failed to export to Word:', error as Error) + window.toast.error(t('notes.export_to_word_failed')) + } + }, [getCurrentNoteContent, activeNode]) + const handleShowSettings = useCallback(() => { GeneralPopup.show({ title: t('notes.settings.title'), @@ -142,6 +161,8 @@ const HeaderNavbar = ({ notesTree, getCurrentNoteContent, onToggleStar, onExpand onClick: () => { if (item.copyAction) { handleCopyContent() + } else if (item.exportToWordAction) { + handleExportToWord() } else if (item.showSettingsPopup) { handleShowSettings() } else if (item.action) { diff --git a/src/renderer/src/pages/notes/MenuConfig.tsx b/src/renderer/src/pages/notes/MenuConfig.tsx index c157daa417..22c4c3c0fe 100644 --- a/src/renderer/src/pages/notes/MenuConfig.tsx +++ b/src/renderer/src/pages/notes/MenuConfig.tsx @@ -1,5 +1,5 @@ import type { NotesSettings } from '@renderer/store/note' -import { Copy, MonitorSpeaker, Settings, Type } from 'lucide-react' +import { Copy, FileText, MonitorSpeaker, Settings, Type } from 'lucide-react' import type { ReactNode } from 'react' export interface MenuItem { @@ -12,6 +12,7 @@ export interface MenuItem { isActive?: (settings: NotesSettings) => boolean component?: (settings: NotesSettings, updateSettings: (newSettings: Partial) => void) => ReactNode copyAction?: boolean + exportToWordAction?: boolean showSettingsPopup?: boolean } @@ -22,6 +23,12 @@ export const menuItems: MenuItem[] = [ icon: Copy, copyAction: true }, + { + key: 'export-to-word', + labelKey: 'notes.exportToWord', + icon: FileText, + exportToWordAction: true + }, { key: 'divider0', type: 'divider',