diff --git a/apps/client/package.json b/apps/client/package.json index 97e0839a3..eb6b7cf3a 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -36,7 +36,7 @@ "draggabilly": "3.0.0", "force-graph": "1.50.1", "globals": "16.3.0", - "i18next": "25.4.1", + "i18next": "25.4.2", "i18next-http-backend": "3.0.2", "jquery": "3.7.1", "jquery.fancytree": "2.38.5", diff --git a/apps/client/src/services/note_autocomplete.ts b/apps/client/src/services/note_autocomplete.ts index 1138b191e..66031f482 100644 --- a/apps/client/src/services/note_autocomplete.ts +++ b/apps/client/src/services/note_autocomplete.ts @@ -36,6 +36,8 @@ export interface Suggestion { commandId?: string; commandDescription?: string; commandShortcut?: string; + attributeSnippet?: string; + highlightedAttributeSnippet?: string; } export interface Options { @@ -323,7 +325,33 @@ function initNoteAutocomplete($el: JQuery, options?: Options) { html += ''; return html; } - return ` ${suggestion.highlightedNotePathTitle}`; + // Add special class for search-notes action + const actionClass = suggestion.action === "search-notes" ? "search-notes-action" : ""; + + // Choose appropriate icon based on action + let iconClass = suggestion.icon ?? "bx bx-note"; + if (suggestion.action === "search-notes") { + iconClass = "bx bx-search"; + } else if (suggestion.action === "create-note") { + iconClass = "bx bx-plus"; + } else if (suggestion.action === "external-link") { + iconClass = "bx bx-link-external"; + } + + // Simplified HTML structure without nested divs + let html = `
`; + html += ``; + html += ``; + html += `${suggestion.highlightedNotePathTitle}`; + + // Add attribute snippet inline if available + if (suggestion.highlightedAttributeSnippet) { + html += `${suggestion.highlightedAttributeSnippet}`; + } + + html += ``; + html += `
`; + return html; } }, // we can't cache identical searches because notes can be created / renamed, new recent notes can be added diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 46ad3559d..290240b84 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -1795,20 +1795,69 @@ textarea { font-size: 1em; } +.jump-to-note-dialog .modal-dialog { + max-width: 900px; + width: 90%; +} + .jump-to-note-dialog .modal-header { align-items: center; } .jump-to-note-dialog .modal-body { padding: 0; + min-height: 200px; } .jump-to-note-results .aa-dropdown-menu { - max-height: 40vh; + max-height: calc(80vh - 200px); + width: 100%; + max-width: none; + overflow-y: auto; + overflow-x: hidden; + text-overflow: ellipsis; + box-shadow: none; +} + +.jump-to-note-results { + width: 100%; } .jump-to-note-results .aa-suggestions { - padding: 1rem; + padding: 0; + width: 100%; +} + +.jump-to-note-results .aa-dropdown-menu .aa-suggestion { + white-space: normal; + padding: 2px 12px !important; + line-height: 1.1; + position: relative; + border-radius: 0; + margin: 0 !important; +} + +.jump-to-note-results .note-suggestion { + margin: 0; + padding: 0; + line-height: 1; +} + +.jump-to-note-results .aa-suggestion:not(:last-child)::after { + display: none; /* Remove dividers for more compact look */ +} + +.jump-to-note-results .aa-suggestion:last-child::after { + display: none; +} + +.jump-to-note-results .aa-suggestion.disabled::after { + display: none; +} + +.jump-to-note-results .aa-dropdown-menu .aa-suggestion:hover, +.jump-to-note-results .aa-dropdown-menu .aa-cursor { + background-color: var(--hover-item-background-color, #f8f9fa); } /* Command palette styling */ @@ -1826,8 +1875,24 @@ textarea { .jump-to-note-dialog .aa-cursor .command-suggestion, .jump-to-note-dialog .aa-suggestion:hover .command-suggestion { - border-left-color: var(--link-color); - background-color: var(--hover-background-color); + background-color: transparent; +} + +.jump-to-note-dialog .show-in-full-search, +.jump-to-note-results .show-in-full-search { + border-top: 1px solid var(--main-border-color); + padding-top: 12px; + margin-top: 12px; +} + +.jump-to-note-results .aa-suggestion .search-notes-action { + border-top: 1px solid var(--main-border-color); + margin-top: 8px; + padding-top: 8px; +} + +.jump-to-note-results .aa-suggestion:has(.search-notes-action)::after { + display: none; } .jump-to-note-dialog .command-icon { @@ -2284,7 +2349,8 @@ footer.webview-footer button { /* Search result highlighting */ .search-result-title b, -.search-result-content b { +.search-result-content b, +.search-result-attributes b { font-weight: 900; color: var(--admonition-warning-accent-color); } diff --git a/apps/client/src/stylesheets/theme-next/base.css b/apps/client/src/stylesheets/theme-next/base.css index 27fbf3557..6ab16a456 100644 --- a/apps/client/src/stylesheets/theme-next/base.css +++ b/apps/client/src/stylesheets/theme-next/base.css @@ -538,8 +538,8 @@ body.mobile .dropdown-menu .dropdown-item.submenu-open .dropdown-toggle::after { /* List item */ .jump-to-note-dialog .aa-suggestions div, .note-detail-empty .aa-suggestions div { - border-radius: 6px; - padding: 6px 12px; + border-radius: 0; + padding: 12px 16px; color: var(--menu-text-color); cursor: default; } diff --git a/apps/client/src/translations/cn/translation.json b/apps/client/src/translations/cn/translation.json index 0f6800793..e9be1e285 100644 --- a/apps/client/src/translations/cn/translation.json +++ b/apps/client/src/translations/cn/translation.json @@ -2014,5 +2014,11 @@ }, "units": { "percentage": "%" + }, + "ui-performance": { + "title": "性能", + "enable-motion": "启用过渡和动画", + "enable-shadows": "启用阴影", + "enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果" } } diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 0d2c74206..4a5c58fd5 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -202,7 +202,8 @@ "okButton": "OK" }, "jump_to_note": { - "search_button": "Suche im Volltext" + "search_button": "Suche im Volltext", + "search_placeholder": "Suche nach Notiz anhand ihres Titels oder gib > ein für Kommandos..." }, "markdown_import": { "dialog_title": "Markdown-Import", @@ -217,21 +218,26 @@ "search_placeholder": "Suche nach einer Notiz anhand ihres Namens", "move_button": "Zur ausgewählten Notiz wechseln", "error_no_path": "Kein Weg, auf den man sich bewegen kann.", - "move_success_message": "Ausgewählte Notizen wurden verschoben" + "move_success_message": "Ausgewählte Notizen wurden verschoben in " }, "note_type_chooser": { "modal_title": "Wähle den Notiztyp aus", "modal_body": "Wähle den Notiztyp / die Vorlage der neuen Notiz:", - "templates": "Vorlagen" + "templates": "Vorlagen", + "change_path_prompt": "Ändern wo die neue Notiz erzeugt wird:", + "search_placeholder": "Durchsuche Pfad nach Namen (Standard falls leer)", + "builtin_templates": "Eingebaute Vorlage" }, "password_not_set": { "title": "Das Passwort ist nicht festgelegt", - "body1": "Geschützte Notizen werden mit einem Benutzerpasswort verschlüsselt, es wurde jedoch noch kein Passwort festgelegt." + "body1": "Geschützte Notizen werden mit einem Benutzerpasswort verschlüsselt, es wurde jedoch noch kein Passwort festgelegt.", + "body2": "Um Notizen zu schützen, klicke den unteren Button um den Optionsdialog zu öffnen und dein Passwort festzulegen.", + "go_to_password_options": "Gehe zu Passwortoptionen" }, "prompt": { - "title": "Prompt", + "title": "Eingabeaufforderung", "ok": "OK", - "defaultTitle": "Prompt" + "defaultTitle": "Eingabeaufforderung" }, "protected_session_password": { "modal_title": "Geschützte Sitzung", @@ -265,10 +271,12 @@ "maximum_revisions": "Maximale Revisionen für aktuelle Notiz: {{number}}.", "settings": "Einstellungen für Notizrevisionen", "download_button": "Herunterladen", - "mime": "MIME:", + "mime": "MIME: ", "file_size": "Dateigröße:", "preview": "Vorschau:", - "preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar." + "preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.", + "restore_button": "Wiederherstellen", + "delete_button": "Löschen" }, "sort_child_notes": { "sort_children_by": "Unternotizen sortieren nach...", @@ -374,7 +382,7 @@ "bookmark_folder": "Notizen mit dieser Bezeichnung werden in den Lesezeichen als Ordner angezeigt (und ermöglichen den Zugriff auf ihre untergeordneten Ordner).", "share_hidden_from_tree": "Diese Notiz ist im linken Navigationsbaum ausgeblendet, kann aber weiterhin über ihre URL aufgerufen werden", "share_external_link": "Die Notiz dient als Link zu einer externen Website im Freigabebaum", - "share_alias": "Lege einen Alias fest, unter dem die Notiz unter https://your_trilium_host/share/[dein_alias] verfügbar sein wird.", + "share_alias": "Lege einen Alias fest, mit dem die Notiz unter https://your_trilium_host/share/[dein_alias] verfügbar sein wird.", "share_omit_default_css": "Das Standard-CSS für die Freigabeseite wird weggelassen. Verwende es, wenn du umfangreiche Stylingänderungen vornimmst.", "share_root": "Markiert eine Notiz, die im /share-Root bereitgestellt wird.", "share_description": "Definiere Text, der dem HTML-Meta-Tag zur Beschreibung hinzugefügt werden soll", @@ -390,7 +398,7 @@ "color": "Definiert die Farbe der Notiz im Notizbaum, in Links usw. Verwende einen beliebigen gültigen CSS-Farbwert wie „rot“ oder #a13d5f", "keyboard_shortcut": "Definiert eine Tastenkombination, die sofort zu dieser Notiz springt. Beispiel: „Strg+Alt+E“. Erfordert ein Neuladen des Frontends, damit die Änderung wirksam wird.", "keep_current_hoisting": "Das Öffnen dieses Links ändert das Hochziehen nicht, selbst wenn die Notiz im aktuell hochgezogenen Unterbaum nicht angezeigt werden kann.", - "execute_button": "Titel der Schaltfläche, die die aktuelle Codenotiz ausführt", + "execute_button": "Titel der Schaltfläche, welche die aktuelle Codenotiz ausführt", "execute_description": "Längere Beschreibung der aktuellen Codenotiz, die zusammen mit der Schaltfläche „Ausführen“ angezeigt wird", "exclude_from_note_map": "Notizen mit dieser Bezeichnung werden in der Notizenkarte ausgeblendet", "new_notes_on_top": "Neue Notizen werden oben in der übergeordneten Notiz erstellt, nicht unten.", @@ -405,7 +413,7 @@ "run_on_branch_change": "wird ausgeführt, wenn ein Zweig aktualisiert wird.", "run_on_branch_deletion": "wird ausgeführt, wenn ein Zweig gelöscht wird. Der Zweig ist eine Verknüpfung zwischen der übergeordneten Notiz und der untergeordneten Notiz und wird z. B. gelöscht. beim Verschieben der Notiz (alter Zweig/Link wird gelöscht).", "run_on_attribute_creation": "wird ausgeführt, wenn für die Notiz ein neues Attribut erstellt wird, das diese Beziehung definiert", - "run_on_attribute_change": "wird ausgeführt, wenn das Attribut einer Notiz geändert wird, die diese Beziehung definiert. Dies wird auch ausgelöst, wenn das Attribut gelöscht wird", + "run_on_attribute_change": " wird ausgeführt, wenn das Attribut einer Notiz geändert wird, die diese Beziehung definiert. Dies wird auch ausgelöst, wenn das Attribut gelöscht wird", "relation_template": "Die Attribute der Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Der Inhalt und der Unterbaum der Notiz werden den Instanznotizen hinzugefügt, wenn sie leer sind. Einzelheiten findest du in der Dokumentation.", "inherit": "Die Attribute einer Notiz werden auch ohne eine Eltern-Kind-Beziehung vererbt. Ein ähnliches Konzept findest du unter Vorlagenbeziehung. Siehe Attributvererbung in der Dokumentation.", "render_note": "Notizen vom Typ \"HTML-Notiz rendern\" werden mit einer Code-Notiz (HTML oder Skript) gerendert, und es ist notwendig, über diese Beziehung anzugeben, welche Notiz gerendert werden soll.", @@ -418,7 +426,8 @@ "other_notes_with_name": "Other notes with {{attributeType}} name \"{{attributeName}}\"", "and_more": "... und {{count}} mehr.", "print_landscape": "Beim Export als PDF, wird die Seitenausrichtung Querformat anstatt Hochformat verwendet.", - "print_page_size": "Beim Export als PDF, wird die Größe der Seite angepasst. Unterstützte Größen: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger." + "print_page_size": "Beim Export als PDF, wird die Größe der Seite angepasst. Unterstützte Größen: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.", + "color_type": "Farbe" }, "attribute_editor": { "help_text_body1": "Um ein Label hinzuzufügen, gebe einfach z.B. ein. #rock oder wenn du auch einen Wert hinzufügen möchten, dann z.B. #year = 2024", @@ -492,7 +501,7 @@ "on_all_matched_notes": "Auf allen übereinstimmenden Notizen", "move_note_new_parent": "Verschiebe die Notiz in die neue übergeordnete Notiz, wenn die Notiz nur eine übergeordnete Notiz hat (d. h. der alte Zweig wird entfernt und ein neuer Zweig in die neue übergeordnete Notiz erstellt).", "clone_note_new_parent": "Notiz auf die neue übergeordnete Notiz klonen, wenn die Notiz mehrere Klone/Zweige hat (es ist nicht klar, welcher Zweig entfernt werden soll)", - "nothing_will_happen": "Es passiert nichts, wenn die Notiz nicht zur Zielnotiz verschoben werden kann (d. h. dies würde einen Baumzyklus erzeugen)." + "nothing_will_happen": "Es passiert nichts, wenn die Notiz nicht zur Zielnotiz verschoben werden kann (z.B. wenn dies einen Kreislauf in der Baumstruktur erzeugen würde)." }, "rename_note": { "rename_note": "Notiz umbenennen", @@ -503,7 +512,7 @@ "example_note": "Notiz – alle übereinstimmenden Notizen werden in „Notiz“ umbenannt.", "example_new_title": "NEU: ${note.title} – Übereinstimmende Notiztitel erhalten das Präfix „NEU:“", "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} – übereinstimmende Notizen werden mit dem Erstellungsmonat und -datum der Notiz vorangestellt", - "api_docs": "Siehe API-Dokumente für Notiz und seinen dateCreatedObj / utcDateCreatedObj-Eigenschaften für Details." + "api_docs": "Siehe API-Dokumente für Notiz und seinen dateCreatedObj / utcDateCreatedObj properties für Details." }, "add_relation": { "add_relation": "Beziehung hinzufügen", @@ -577,7 +586,8 @@ "september": "September", "october": "Oktober", "november": "November", - "december": "Dezember" + "december": "Dezember", + "cannot_find_week_note": "Wochennotiz kann nicht gefunden werden" }, "close_pane_button": { "close_this_pane": "Schließe diesen Bereich" @@ -699,8 +709,8 @@ "zoom_out_title": "Herauszoomen" }, "zpetne_odkazy": { - "backlink": "{{count}} Backlink", - "backlinks": "{{count}} Backlinks", + "backlink": "{{count}} Rückverlinkung", + "backlinks": "{{count}} Rückverlinkungen", "relation": "Beziehung" }, "mobile_detail_menu": { @@ -718,7 +728,8 @@ "basic_properties": { "note_type": "Notiztyp", "editable": "Bearbeitbar", - "basic_properties": "Grundlegende Eigenschaften" + "basic_properties": "Grundlegende Eigenschaften", + "language": "Sprache" }, "book_properties": { "view_type": "Ansichtstyp", @@ -729,7 +740,11 @@ "collapse": "Einklappen", "expand": "Ausklappen", "invalid_view_type": "Ungültiger Ansichtstyp „{{type}}“", - "calendar": "Kalender" + "calendar": "Kalender", + "book_properties": "Sammlungseigenschaften", + "table": "Tabelle", + "geo-map": "Weltkarte", + "board": "Tafel" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -805,7 +820,9 @@ "unknown_label_type": "Unbekannter Labeltyp „{{type}}“", "unknown_attribute_type": "Unbekannter Attributtyp „{{type}}“", "add_new_attribute": "Neues Attribut hinzufügen", - "remove_this_attribute": "Entferne dieses Attribut" + "remove_this_attribute": "Entferne dieses Attribut", + "unset-field-placeholder": "nicht gesetzt", + "remove_color": "Entferne Farblabel" }, "script_executor": { "query": "Abfrage", @@ -917,7 +934,7 @@ "attachment_detail": { "open_help_page": "Hilfeseite zu Anhängen öffnen", "owning_note": "Eigentümernotiz: ", - "you_can_also_open": ", Du kannst auch das öffnen", + "you_can_also_open": ", Du kannst auch das öffnen ", "list_of_all_attachments": "Liste aller Anhänge", "attachment_deleted": "Dieser Anhang wurde gelöscht." }, @@ -942,7 +959,8 @@ "enter_workspace": "Betrete den Arbeitsbereich {{title}}" }, "file": { - "file_preview_not_available": "Für dieses Dateiformat ist keine Dateivorschau verfügbar." + "file_preview_not_available": "Für dieses Dateiformat ist keine Dateivorschau verfügbar.", + "too_big": "Die Vorschau zeigt aus Effizienzgründen nur die ersten {{maxNumChars}} Zeichen der Datei an. Lade die Datei herunter und öffne sie extern um den gesamten Inhalt zu sehen." }, "protected_session": { "enter_password_instruction": "Um die geschützte Notiz anzuzeigen, musst du dein Passwort eingeben:", @@ -981,7 +999,7 @@ "web_view": { "web_view": "Webansicht", "embed_websites": "Notiz vom Typ Web View ermöglicht das Einbetten von Websites in Trilium.", - "create_label": "To start, please create a label with a URL address you want to embed, e.g. #webViewSrc=\"https://www.google.com\"" + "create_label": "Um zu beginnen, erstelle bitte ein Label mit einer URL-Adresse, die eingebettet werden soll, z. B. #webViewSrc=\"https://www.google.com\"" }, "backend_log": { "refresh": "Aktualisieren" @@ -1007,7 +1025,7 @@ "error_creating_anonymized_database": "Die anonymisierte Datenbank konnte nicht erstellt werden. Überprüfe die Backend-Protokolle auf Details", "successfully_created_fully_anonymized_database": "Vollständig anonymisierte Datenbank in {{anonymizedFilePath}} erstellt", "successfully_created_lightly_anonymized_database": "Leicht anonymisierte Datenbank in {{anonymizedFilePath}} erstellt", - "no_anonymized_database_yet": "Noch keine anonymisierte Datenbank" + "no_anonymized_database_yet": "Noch keine anonymisierte Datenbank." }, "database_integrity_check": { "title": "Datenbankintegritätsprüfung", @@ -1063,7 +1081,8 @@ "max_width_label": "Maximale Inhaltsbreite in Pixel", "apply_changes_description": "Um Änderungen an der Inhaltsbreite anzuwenden, klicke auf", "reload_button": "Frontend neu laden", - "reload_description": "Änderungen an den Darstellungsoptionen" + "reload_description": "Änderungen an den Darstellungsoptionen", + "max_width_unit": "Pixel" }, "native_title_bar": { "title": "Native Titelleiste (App-Neustart erforderlich)", @@ -1086,7 +1105,10 @@ "layout-vertical-title": "Vertikal", "layout-horizontal-title": "Horizontal", "layout-vertical-description": "Startleiste ist auf der linken Seite (standard)", - "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert." + "layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert.", + "auto_theme": "Alt (Folge dem Farbschema des Systems)", + "light_theme": "Alt (Hell)", + "dark_theme": "Alt (Dunkel)" }, "zoom_factor": { "title": "Zoomfaktor (nur Desktop-Build)", @@ -1119,7 +1141,7 @@ "attachment_erasure_timeout": { "attachment_erasure_timeout": "Zeitüberschreitung beim Löschen von Anhängen", "attachment_auto_deletion_description": "Anhänge werden automatisch gelöscht (und gelöscht), wenn sie nach einer definierten Zeitspanne nicht mehr in ihrer Notiz referenziert werden.", - "erase_attachments_after": "Erase unused attachments after:", + "erase_attachments_after": "Nicht verwendete Anhänge löschen nach:", "manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):", "erase_unused_attachments_now": "Lösche jetzt nicht verwendete Anhangnotizen", "unused_attachments_erased": "Nicht verwendete Anhänge wurden gelöscht." @@ -1130,7 +1152,7 @@ }, "note_erasure_timeout": { "note_erasure_timeout_title": "Beachte das Zeitlimit für die Löschung", - "note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.", + "note_erasure_description": "Gelöschte Notizen (und Attribute, Notizrevisionen...) werden zunächst nur als gelöscht markiert und können über den Dialog „Zuletzt verwendete Notizen” wiederhergestellt werden. Nach einer bestimmten Zeit werden gelöschte Notizen „gelöscht”, was bedeutet, dass ihr Inhalt nicht mehr wiederhergestellt werden kann. Mit dieser Einstellung können Sie die Zeitspanne zwischen dem Löschen und dem endgültigen Löschen der Notiz festlegen.", "erase_notes_after": "Notizen löschen nach:", "manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):", "erase_deleted_notes_now": "Jetzt gelöschte Notizen löschen", @@ -1361,7 +1383,7 @@ "duplicate": "Duplizieren", "export": "Exportieren", "import-into-note": "In Notiz importieren", - "apply-bulk-actions": "Massenaktionen ausführen", + "apply-bulk-actions": "Massenaktionen anwenden", "converted-to-attachments": "{{count}} Notizen wurden als Anhang konvertiert.", "convert-to-attachment-confirm": "Bist du sicher, dass du die ausgewählten Notizen in Anhänge ihrer übergeordneten Notizen umwandeln möchtest?" }, @@ -1377,7 +1399,7 @@ "relation-map": "Beziehungskarte", "note-map": "Notizkarte", "render-note": "Render Notiz", - "mermaid-diagram": "Mermaid Diagram", + "mermaid-diagram": "Mermaid Diagramm", "canvas": "Canvas", "web-view": "Webansicht", "mind-map": "Mind Map", @@ -1387,7 +1409,7 @@ "doc": "Dokument", "widget": "Widget", "confirm-change": "Es is nicht empfehlenswert den Notiz-Typ zu ändern, wenn der Inhalt der Notiz nicht leer ist. Möchtest du dennoch fortfahren?", - "geo-map": "Geo Map", + "geo-map": "Geo-Karte", "beta-feature": "Beta" }, "protect_note": { @@ -1561,11 +1583,11 @@ "label": "Format Toolbar", "floating": { "title": "Schwebend", - "description": "Werkzeuge erscheinen in Cursornähe" + "description": "Werkzeuge erscheinen in Cursornähe;" }, "fixed": { "title": "Fixiert", - "description": "Werkzeuge erscheinen im \"Format\" Tab" + "description": "Werkzeuge erscheinen im \"Format\" Tab." }, "multiline-toolbar": "Toolbar wenn nötig in mehreren Zeilen darstellen." } @@ -1631,5 +1653,49 @@ }, "modal": { "close": "Schließen" + }, + "ai_llm": { + "n_notes_queued": "{{ count }} Notiz zur Indizierung vorgemerkt", + "n_notes_queued_plural": "{{ count }} Notizen zur Indizierung vorgemerkt", + "notes_indexed": "{{ count }} Notiz indiziert", + "notes_indexed_plural": "{{ count }} Notizen indiziert", + "not_started": "Nicht gestartet", + "title": "KI Einstellungen", + "processed_notes": "Verarbeitete Notizen", + "total_notes": "Gesamt Notizen", + "progress": "Fortschritt", + "queued_notes": "Eingereihte Notizen", + "failed_notes": "Fehlgeschlagenen Notizen", + "last_processed": "Zuletzt verarbeitet", + "refresh_stats": "Statistiken neu laden", + "enable_ai_features": "Aktiviere KI/LLM Funktionen", + "enable_ai_description": "Aktiviere KI-Funktionen wie Notizzusammenfassungen, Inhaltserzeugung und andere LLM-Funktionen", + "openai_tab": "OpenAI", + "anthropic_tab": "Anthropic", + "voyage_tab": "Voyage AI", + "ollama_tab": "Ollama", + "enable_ai": "Aktiviere KI/LLM Funktionen", + "enable_ai_desc": "Aktiviere KI-Funktionen wie Notizzusammenfassungen, Inhaltserzeugung und andere LLM-Funktionen", + "provider_configuration": "KI-Anbieterkonfiguration", + "provider_precedence": "Anbieter Priorität", + "provider_precedence_description": "Komma-getrennte Liste von Anbieter in der Reihenfolge ihrer Priorität (z.B. 'openai, anthropic,ollama')", + "temperature": "Temperatur", + "temperature_description": "Regelt die Zufälligkeit in Antworten (0 = deterministisch, 2 = maximale Zufälligkeit)", + "system_prompt": "Systemaufforderung", + "system_prompt_description": "Standard Systemaufforderung für alle KI-Interaktionen", + "openai_configuration": "OpenAI Konfiguration", + "openai_settings": "OpenAI Einstellungen", + "api_key": "API Schlüssel", + "url": "Basis-URL", + "model": "Modell" + }, + "zen_mode": { + "button_exit": "Verlasse Zen Modus" + }, + "ui-performance": { + "title": "Leistung", + "enable-motion": "Aktiviere Übergänge und Animationen", + "enable-shadows": "Aktiviere Schatten", + "enable-backdrop-effects": "Aktiviere Hintergrundeffekte für Menüs, Pop-up Fenster und Panele" } } diff --git a/apps/client/src/translations/fr/translation.json b/apps/client/src/translations/fr/translation.json index 37cd2e061..e085e10e8 100644 --- a/apps/client/src/translations/fr/translation.json +++ b/apps/client/src/translations/fr/translation.json @@ -1680,6 +1680,16 @@ "n_notes_queued_2": "", "notes_indexed_0": "{{ count }} note indexée", "notes_indexed_1": "{{ count }} notes indexées", - "notes_indexed_2": "" + "notes_indexed_2": "", + "anthropic_url_description": "URL de base pour l'API Anthropic (par défaut : https ://api.anthropic.com)", + "anthropic_model_description": "Modèles Anthropic Claude pour la complétion", + "voyage_settings": "Réglages d'IA Voyage", + "ollama_settings": "Réglages Ollama", + "ollama_url_description": "URL pour l'API Ollama (par défaut: http://localhost:11434)", + "ollama_model_description": "Model Ollama utilisé pour la complétion", + "anthropic_configuration": "Configuration Anthropic", + "voyage_configuration": "Configuration IA Voyage", + "voyage_url_description": "Défaut: https://api.voyageai.com/v1", + "ollama_configuration": "Configuration Ollama" } } diff --git a/apps/client/src/translations/ko/translation.json b/apps/client/src/translations/ko/translation.json index 0967ef424..3a7608169 100644 --- a/apps/client/src/translations/ko/translation.json +++ b/apps/client/src/translations/ko/translation.json @@ -1 +1,29 @@ -{} +{ + "about": { + "title": "Trilium Notes에 대해서", + "homepage": "홈페이지:", + "app_version": "앱 버전:", + "db_version": "DB 버전:", + "sync_version": "동기화 버전:", + "build_date": "빌드 날짜:", + "build_revision": "빌드 리비전:", + "data_directory": "데이터 경로:" + }, + "toast": { + "critical-error": { + "title": "심각한 오류", + "message": "클라이언트 애플리케이션 시작 도중 심각한 오류가 발생했습니다:\n\n{{message}}\n\n이는 스크립트가 예기치 않게 실패하면서 발생한 것일 수 있습니다. 애플리케이션을 안전 모드로 시작한 뒤 문제를 해결해 보세요." + }, + "widget-error": { + "title": "위젯 초기화 실패" + } + }, + "add_link": { + "add_link": "링크 추가", + "note": "노트", + "search_note": "이름으로 노트 검색하기" + }, + "branch_prefix": { + "save": "저장" + } +} diff --git a/apps/client/src/translations/nl/translation.json b/apps/client/src/translations/nl/translation.json new file mode 100644 index 000000000..14e853dd6 --- /dev/null +++ b/apps/client/src/translations/nl/translation.json @@ -0,0 +1,9 @@ +{ + "about": { + "title": "Over Trilium Notes", + "homepage": "Homepagina:", + "app_version": "App versie:", + "db_version": "DB Versie:", + "sync_version": "Sync Versie:" + } +} diff --git a/apps/client/src/translations/ru/translation.json b/apps/client/src/translations/ru/translation.json index 967634d2a..480c12b2b 100644 --- a/apps/client/src/translations/ru/translation.json +++ b/apps/client/src/translations/ru/translation.json @@ -2018,5 +2018,11 @@ }, "book": { "no_children_help": "В этой коллекции нет дочерних заметок, поэтому отображать нечего. Подробности см. на wiki." + }, + "ui-performance": { + "title": "Производительность", + "enable-motion": "Включить визуальные эффекты и анимации", + "enable-shadows": "Включить тени", + "enable-backdrop-effects": "Включить эффекты размытия фона меню, всплывающих окон и панелей" } } diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index 6dbde5a3e..4b11d9e6a 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -1643,13 +1643,13 @@ "failed_notes": "失敗筆記", "last_processed": "最後處理時間", "refresh_stats": "更新統計資料", - "enable_ai_features": "啟用 AI / LLM 功能", + "enable_ai_features": "啟用 AI/LLM 功能", "enable_ai_description": "啟用筆記摘要、內容生成等 AI 功能及其他 LLM 能力", "openai_tab": "OpenAI", "anthropic_tab": "Anthropic", "voyage_tab": "Voyage AI", "ollama_tab": "Ollama", - "enable_ai": "啟用 AI / LLM 功能", + "enable_ai": "啟用 AI/LLM 功能", "enable_ai_desc": "啟用筆記摘要、內容生成等 AI 功能及其他 LLM 能力", "provider_configuration": "AI 提供者設定", "provider_precedence": "提供者優先級", @@ -2014,5 +2014,11 @@ }, "units": { "percentage": "%" + }, + "ui-performance": { + "title": "效能", + "enable-motion": "啟用轉場與動畫", + "enable-shadows": "啟用陰影", + "enable-backdrop-effects": "啟用選單、彈出視窗和面板的背景特效" } } diff --git a/apps/client/src/widgets/dialogs/jump_to_note.tsx b/apps/client/src/widgets/dialogs/jump_to_note.tsx index cb13e078e..0b4306bfe 100644 --- a/apps/client/src/widgets/dialogs/jump_to_note.tsx +++ b/apps/client/src/widgets/dialogs/jump_to_note.tsx @@ -8,6 +8,7 @@ import appContext from "../../components/app_context"; import commandRegistry from "../../services/command_registry"; import { refToJQuerySelector } from "../react/react_utils"; import { useTriliumEvent } from "../react/hooks"; +import shortcutService from "../../services/shortcuts"; const KEEP_LAST_SEARCH_FOR_X_SECONDS = 120; @@ -82,6 +83,27 @@ export default function JumpToNoteDialogComponent() { $autoComplete .trigger("focus") .trigger("select"); + + // Add keyboard shortcut for full search + shortcutService.bindElShortcut($autoComplete, "ctrl+return", () => { + if (!isCommandMode) { + showInFullSearch(); + } + }); + } + + async function showInFullSearch() { + try { + setShown(false); + const searchString = actualText.current?.trim(); + if (searchString && !searchString.startsWith(">")) { + await appContext.triggerCommand("searchNotes", { + searchString + }); + } + } catch (error) { + console.error("Failed to trigger full search:", error); + } } return ( @@ -107,7 +129,12 @@ export default function JumpToNoteDialogComponent() { />} onShown={onShown} onHidden={() => setShown(false)} - footer={!isCommandMode &&