diff --git a/_regroup/package.json b/_regroup/package.json index db2a72d9c..641527916 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -35,13 +35,13 @@ "chore:generate-openapi": "tsx bin/generate-openapi.js" }, "devDependencies": { - "@playwright/test": "1.56.0", - "@stylistic/eslint-plugin": "5.4.0", + "@playwright/test": "1.56.1", + "@stylistic/eslint-plugin": "5.5.0", "@types/express": "5.0.3", - "@types/node": "22.18.10", + "@types/node": "22.18.11", "@types/yargs": "17.0.33", "@vitest/coverage-v8": "3.2.4", - "eslint": "9.37.0", + "eslint": "9.38.0", "eslint-plugin-simple-import-sort": "12.1.1", "esm": "3.2.25", "jsdoc": "4.0.5", diff --git a/_regroup/spec/support/etapi.ts b/_regroup/spec/support/etapi.ts index 307868d7d..b32ba38e7 100644 --- a/_regroup/spec/support/etapi.ts +++ b/_regroup/spec/support/etapi.ts @@ -1,4 +1,3 @@ -import type child_process from "child_process"; import { describe, beforeAll, afterAll } from "vitest"; let etapiAuthToken: string | undefined; @@ -12,8 +11,6 @@ type SpecDefinitionsFunc = () => void; function describeEtapi(description: string, specDefinitions: SpecDefinitionsFunc): void { describe(description, () => { - let appProcess: ReturnType; - beforeAll(async () => {}); afterAll(() => {}); diff --git a/apps/client/package.json b/apps/client/package.json index dceb6e8b8..074f98a75 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -1,6 +1,6 @@ { "name": "@triliumnext/client", - "version": "0.99.1", + "version": "0.99.2", "description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)", "private": true, "license": "AGPL-3.0-only", @@ -15,7 +15,7 @@ "circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular" }, "dependencies": { - "@eslint/js": "9.37.0", + "@eslint/js": "9.38.0", "@excalidraw/excalidraw": "0.18.0", "@fullcalendar/core": "6.1.19", "@fullcalendar/daygrid": "6.1.19", @@ -52,13 +52,13 @@ "leaflet": "1.9.4", "leaflet-gpx": "2.2.0", "mark.js": "8.11.1", - "marked": "16.4.0", + "marked": "16.4.1", "mermaid": "11.12.0", - "mind-elixir": "5.3.2", + "mind-elixir": "5.3.3", "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", - "react-i18next": "16.0.1", + "react-i18next": "16.1.0", "reveal.js": "5.2.1", "split.js": "1.6.5", "svg-pan-zoom": "3.6.2", @@ -76,7 +76,7 @@ "@types/reveal.js": "5.2.1", "@types/tabulator-tables": "6.2.11", "copy-webpack-plugin": "13.0.1", - "happy-dom": "20.0.4", + "happy-dom": "20.0.7", "script-loader": "0.7.2", "vite-plugin-static-copy": "3.1.4" } diff --git a/apps/client/src/components/note_context.ts b/apps/client/src/components/note_context.ts index 79d1e148b..d4bcb1fa6 100644 --- a/apps/client/src/components/note_context.ts +++ b/apps/client/src/components/note_context.ts @@ -326,9 +326,11 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded"> } // Collections must always display a note list, even if no children. - const viewType = note.getLabelValue("viewType") ?? "grid"; - if (!["list", "grid"].includes(viewType)) { - return true; + if (note.type === "book") { + const viewType = note.getLabelValue("viewType") ?? "grid"; + if (!["list", "grid"].includes(viewType)) { + return true; + } } if (!note.hasChildren()) { diff --git a/apps/client/src/entities/fnote.ts b/apps/client/src/entities/fnote.ts index dcb768dd7..bcb6c408e 100644 --- a/apps/client/src/entities/fnote.ts +++ b/apps/client/src/entities/fnote.ts @@ -1,6 +1,5 @@ import server from "../services/server.js"; import noteAttributeCache from "../services/note_attribute_cache.js"; -import ws from "../services/ws.js"; import protectedSessionHolder from "../services/protected_session_holder.js"; import cssClassManager from "../services/css_class_manager.js"; import type { Froca } from "../services/froca-interface.js"; @@ -586,7 +585,7 @@ export default class FNote { let childBranches = this.getChildBranches(); if (!childBranches) { - ws.logError(`No children for '${this.noteId}'. This shouldn't happen.`); + console.error(`No children for '${this.noteId}'. This shouldn't happen.`); return []; } diff --git a/apps/client/src/layouts/desktop_layout.tsx b/apps/client/src/layouts/desktop_layout.tsx index 9dc4b76ee..3f9416584 100644 --- a/apps/client/src/layouts/desktop_layout.tsx +++ b/apps/client/src/layouts/desktop_layout.tsx @@ -138,7 +138,7 @@ export default class DesktopLayout { .child(new PromotedAttributesWidget()) .child() .child(new NoteDetailWidget()) - .child() + .child() .child() .child() .child() diff --git a/apps/client/src/layouts/layout_commons.tsx b/apps/client/src/layouts/layout_commons.tsx index 292006011..610f31dda 100644 --- a/apps/client/src/layouts/layout_commons.tsx +++ b/apps/client/src/layouts/layout_commons.tsx @@ -66,6 +66,6 @@ export function applyModals(rootContainer: RootContainer) { .child() .child(new PromotedAttributesWidget()) .child(new NoteDetailWidget()) - .child()) + .child()) .child(); } diff --git a/apps/client/src/layouts/mobile_layout.tsx b/apps/client/src/layouts/mobile_layout.tsx index 3d21b9405..b952c2d0b 100644 --- a/apps/client/src/layouts/mobile_layout.tsx +++ b/apps/client/src/layouts/mobile_layout.tsx @@ -154,7 +154,7 @@ export default class MobileLayout { .filling() .contentSized() .child(new NoteDetailWidget()) - .child() + .child() .child() ) .child() diff --git a/apps/client/src/print.css b/apps/client/src/print.css new file mode 100644 index 000000000..9ccf54362 --- /dev/null +++ b/apps/client/src/print.css @@ -0,0 +1,155 @@ +:root { + --print-font-size: 11pt; + --ck-content-color-image-caption-background: transparent !important; +} + +html, +body { + width: 100%; + height: 100%; + color: black; +} + +@page { + margin: 2cm; +} + +.note-list-widget.full-height, +.note-list-widget.full-height .note-list-widget-content { + height: unset !important; +} + +.component { + contain: none !important; +} + +body[data-note-type="text"] .ck-content { + font-size: var(--print-font-size); + text-align: justify; +} + +.ck-content figcaption { + font-style: italic; +} + +.ck-content a { + text-decoration: none; +} + +.ck-content a:not([href^="#root/"]) { + text-decoration: underline; + color: #374a75; +} + +.ck-content .todo-list__label * { + -webkit-print-color-adjust: exact; + print-color-adjust: exact; +} + +@supports selector(.todo-list__label__description:has(*)) and (height: 1lh) { + .ck-content .todo-list__label__description { + /* The percentage of the line height that the check box occupies */ + --box-ratio: 0.75; + /* The size of the gap between the check box and the caption */ + --box-text-gap: 0.25em; + + --box-size: calc(1lh * var(--box-ratio)); + --box-vert-offset: calc((1lh - var(--box-size)) / 2); + + display: inline-block; + padding-inline-start: calc(var(--box-size) + var(--box-text-gap)); + /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-blank-outline/ */ + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5C3.89%2c3 3%2c3.89 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5C21%2c3.89 20.1%2c3 19%2c3M19%2c5V19H5V5H19Z' /%3e%3c/svg%3e"); + background-position: 0 var(--box-vert-offset); + background-size: var(--box-size); + background-repeat: no-repeat; + } + + .ck-content .todo-list__label:has(input[type="checkbox"]:checked) .todo-list__label__description { + /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-outline/ */ + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5A2%2c2 0 0%2c0 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5A2%2c2 0 0%2c0 19%2c3M19%2c5V19H5V5H19M10%2c17L6%2c13L7.41%2c11.58L10%2c14.17L16.59%2c7.58L18%2c9' /%3e%3c/svg%3e"); + } + + .ck-content .todo-list__label input[type="checkbox"] { + display: none !important; + } +} + +/* #region Footnotes */ +.footnote-reference a, +.footnote-back-link a { + text-decoration: none !important; +} + +li.footnote-item { + position: relative; + width: fit-content; +} + +.ck-content .footnote-back-link { + margin-right: 0.25em; +} + +.ck-content .footnote-content { + display: inline-block; + width: unset; +} +/* #endregion */ + +/* #region Widows and orphans */ +p, +blockquote { + widows: 4; + orphans: 4; +} + +pre > code { + widows: 6; + orphans: 6; + overflow: auto; + white-space: pre-wrap !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + page-break-after: avoid; + break-after: avoid; +} +/* #endregion */ + +/* #region Tables */ +.table thead th, +.table td, +.table th { + /* Fix center vertical alignment of table cells */ + vertical-align: middle; +} + +pre { + box-shadow: unset !important; + border: 0.75pt solid gray !important; + border-radius: 2pt !important; +} + +th, +span[style] { + print-color-adjust: exact; + -webkit-print-color-adjust: exact; +} +/* #endregion */ + +/* #region Page breaks */ +.page-break { + page-break-after: always; + break-after: always; +} + +.page-break > *, +.page-break::after { + display: none !important; +} +/* #endregion */ \ No newline at end of file diff --git a/apps/client/src/print.tsx b/apps/client/src/print.tsx new file mode 100644 index 000000000..de11d581a --- /dev/null +++ b/apps/client/src/print.tsx @@ -0,0 +1,92 @@ +import FNote from "./entities/fnote"; +import { render } from "preact"; +import { CustomNoteList } from "./widgets/collections/NoteList"; +import { useCallback, useLayoutEffect, useRef } from "preact/hooks"; +import content_renderer from "./services/content_renderer"; + +interface RendererProps { + note: FNote; + onReady: () => void; +} + +async function main() { + const notePath = window.location.hash.substring(1); + const noteId = notePath.split("/").at(-1); + if (!noteId) return; + + await import("./print.css"); + const froca = (await import("./services/froca")).default; + const note = await froca.getNote(noteId); + + render(, document.body); +} + +function App({ note, noteId }: { note: FNote | null | undefined, noteId: string }) { + const sentReadyEvent = useRef(false); + const onReady = useCallback(() => { + if (sentReadyEvent.current) return; + window.dispatchEvent(new Event("note-ready")); + window._noteReady = true; + sentReadyEvent.current = true; + }, []); + const props: RendererProps | undefined | null = note && { note, onReady }; + + if (!note || !props) return + + useLayoutEffect(() => { + document.body.dataset.noteType = note.type; + }, [ note ]); + + return ( + <> + {note.type === "book" + ? + : + } + + ); +} + +function SingleNoteRenderer({ note, onReady }: RendererProps) { + const containerRef = useRef(null); + + useLayoutEffect(() => { + async function load() { + if (note.type === "text") { + await import("@triliumnext/ckeditor5/src/theme/ck-content.css"); + } + const { $renderedContent } = await content_renderer.getRenderedContent(note, { noChildrenList: true }); + containerRef.current?.replaceChildren(...$renderedContent); + } + + load().then(() => requestAnimationFrame(onReady)) + }, [ note ]); + + return <> +

{note.title}

+
+ ; +} + +function CollectionRenderer({ note, onReady }: RendererProps) { + return ; +} + +function Error404({ noteId }: { noteId: string }) { + return ( +
+

The note you are trying to print could not be found.

+ {noteId} +
+ ) +} + +main(); diff --git a/apps/client/src/services/froca.ts b/apps/client/src/services/froca.ts index 6bbc3a50d..a1529db72 100644 --- a/apps/client/src/services/froca.ts +++ b/apps/client/src/services/froca.ts @@ -40,20 +40,23 @@ class FrocaImpl implements Froca { constructor() { this.initializedPromise = this.loadInitialTree(); + this.#clear(); } async loadInitialTree() { const resp = await server.get("tree"); // clear the cache only directly before adding new content which is important for e.g., switching to protected session + this.#clear(); + this.addResp(resp); + } + #clear() { this.notes = {}; this.branches = {}; this.attributes = {}; this.attachments = {}; this.blobPromises = {}; - - this.addResp(resp); } async loadSubTree(subTreeNoteId: string) { diff --git a/apps/client/src/services/syntax_highlight.ts b/apps/client/src/services/syntax_highlight.ts index 9b5592a6b..89dc7c94e 100644 --- a/apps/client/src/services/syntax_highlight.ts +++ b/apps/client/src/services/syntax_highlight.ts @@ -61,7 +61,11 @@ export async function applySingleBlockSyntaxHighlight($codeBlock: JQuery { + if (glob.device === "print") return; + ws = connectWebSocket(); lastPingTs = Date.now(); diff --git a/apps/client/src/stylesheets/print.css b/apps/client/src/stylesheets/print.css deleted file mode 100644 index 842570bde..000000000 --- a/apps/client/src/stylesheets/print.css +++ /dev/null @@ -1,322 +0,0 @@ -:root { - --main-background-color: white; - --root-background: var(--main-background-color); - --launcher-pane-background-color: var(--main-background-color); - --main-text-color: black; - --input-text-color: var(--main-text-color); - - --print-font-size: 11pt; -} - -@page { - margin: 2cm; -} - -.ck-content { - font-size: var(--print-font-size); - text-align: justify; -} - -.note-detail-readonly-text { - padding: 0 !important; -} - -.no-print, -.no-print *, -.tab-row-container, -.tab-row-widget, -.title-bar-buttons, -#launcher-pane, -#left-pane, -#center-pane > *:not(.split-note-container-widget), -#right-pane, -.title-row .note-icon-widget, -.title-row .icon-action, -.ribbon-container, -.promoted-attributes-widget, -.scroll-padding-widget, -.note-list-widget, -.spacer { - display: none !important; -} - -body.mobile #mobile-sidebar-wrapper, -body.mobile .classic-toolbar-widget, -body.mobile .action-button { - display: none !important; -} - -body.mobile #detail-container { - max-height: unset; -} - -body.mobile .note-title-widget { - padding: 0 !important; -} - -body, -#root-widget, -#rest-pane > div.component:first-child, -.note-detail-printable, -.note-detail-editable-text-editor { - height: unset !important; - overflow: auto; -} - -.ck.ck-editor__editable_inline { - overflow: hidden !important; -} - -.note-title-widget input, -.note-detail-editable-text, -.note-detail-editable-text-editor { - padding: 0 !important; -} - -html, -body { - width: unset !important; - height: unset !important; - overflow: visible; - position: unset; - /* https://github.com/zadam/trilium/issues/3202 */ - color: black; -} - -#root-widget, -#horizontal-main-container, -#rest-pane, -#vertical-main-container, -#center-pane, -.split-note-container-widget, -.note-split:not(.hidden-ext), -body.mobile #mobile-rest-container { - display: block !important; - overflow: auto; - border-radius: 0 !important; -} - -#center-pane, -#rest-pane, -.note-split, -body.mobile #detail-container { - width: unset !important; - max-width: unset !important; -} - -.component { - contain: none !important; -} - -/* Respect page breaks */ -.page-break { - page-break-after: always; - break-after: always; -} - -.page-break > * { - display: none !important; -} - -.relation-map-wrapper { - height: 100vh !important; -} - -.table thead th, -.table td, -.table th { - /* Fix center vertical alignment of table cells */ - vertical-align: middle; -} - -pre { - box-shadow: unset !important; - border: 0.75pt solid gray !important; - border-radius: 2pt !important; -} - -th, -span[style] { - print-color-adjust: exact; - -webkit-print-color-adjust: exact; -} - -/* - * Text note specific fixes - */ -.ck-widget { - outline: none !important; -} - -.ck-placeholder, -.ck-widget__type-around, -.ck-widget__selection-handle { - display: none !important; -} - -.ck-widget.table td.ck-editor__nested-editable.ck-editor__nested-editable_focused, -.ck-widget.table td.ck-editor__nested-editable:focus, -.ck-widget.table th.ck-editor__nested-editable.ck-editor__nested-editable_focused, -.ck-widget.table th.ck-editor__nested-editable:focus { - background: unset !important; - outline: unset !important; -} - -.include-note .include-note-content { - max-height: unset !important; - overflow: unset !important; -} - -/* TODO: This will break once we translate the language */ -.ck-content pre[data-language="Auto-detected"]:after { - display: none !important; -} - -/* - * Code note specific fixes. - */ -.note-detail-code pre { - border: unset !important; - border-radius: unset !important; -} - -/* - * Links - */ - -.note-detail-printable a { - text-decoration: none; -} - -.note-detail-printable a:not([href^="#root/"]) { - text-decoration: underline; - color: #374a75; -} - -.note-detail-printable a::after { - /* Hide the external link trailing arrow */ - display: none !important; -} - -/* - * TODO list check boxes - */ - -.note-detail-printable .todo-list__label * { - -webkit-print-color-adjust: exact; - print-color-adjust: exact; -} - -@supports selector(.todo-list__label__description:has(*)) and (height: 1lh) { - .note-detail-printable .todo-list__label__description { - /* The percentage of the line height that the check box occupies */ - --box-ratio: 0.75; - /* The size of the gap between the check box and the caption */ - --box-text-gap: 0.25em; - - --box-size: calc(1lh * var(--box-ratio)); - --box-vert-offset: calc((1lh - var(--box-size)) / 2); - - display: inline-block; - padding-inline-start: calc(var(--box-size) + var(--box-text-gap)); - /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-blank-outline/ */ - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5C3.89%2c3 3%2c3.89 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5C21%2c3.89 20.1%2c3 19%2c3M19%2c5V19H5V5H19Z' /%3e%3c/svg%3e"); - background-position: 0 var(--box-vert-offset); - background-size: var(--box-size); - background-repeat: no-repeat; - } - - .note-detail-printable .todo-list__label:has(input[type="checkbox"]:checked) .todo-list__label__description { - /* Source: https://pictogrammers.com/library/mdi/icon/checkbox-outline/ */ - background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='currentColor'%3e%3cpath d='M19%2c3H5A2%2c2 0 0%2c0 3%2c5V19A2%2c2 0 0%2c0 5%2c21H19A2%2c2 0 0%2c0 21%2c19V5A2%2c2 0 0%2c0 19%2c3M19%2c5V19H5V5H19M10%2c17L6%2c13L7.41%2c11.58L10%2c14.17L16.59%2c7.58L18%2c9' /%3e%3c/svg%3e"); - } - - .note-detail-printable .todo-list__label input[type="checkbox"] { - display: none !important; - } -} - -/* - * Blockquotes - */ - -.note-detail-printable blockquote { - box-shadow: unset; -} - -/* - * Figures - */ - -.note-detail-printable figcaption { - --accented-background-color: transparent; - - font-style: italic; -} - -/* - * Footnotes - */ - -.note-detail-printable .footnote-reference a, -.footnote-back-link a { - text-decoration: none; -} - -/* Make the "^" link cover the whole area of the footnote item */ - -.footnote-section { - clear: both; -} - -.note-detail-printable li.footnote-item { - position: relative; - width: fit-content; -} - -.note-detail-printable .footnote-back-link, -.note-detail-printable .footnote-back-link *, -.note-detail-printable .footnote-back-link a { - display: block; - position: absolute; - - top: 0; - inset-inline-start: 0; - width: 100%; - height: 100%; -} - -.note-detail-printable .footnote-back-link a { - color: transparent; -} - -.note-detail-printable .footnote-content { - display: inline-block; - width: unset; -} - -/* - * Widows and orphans - */ -p, -blockquote { - widows: 4; - orphans: 4; -} - -pre > code { - widows: 6; - orphans: 6; - overflow: auto; - white-space: pre-wrap !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - page-break-after: avoid; - break-after: avoid; -} diff --git a/apps/client/src/stylesheets/style.css b/apps/client/src/stylesheets/style.css index 03d1bd8ff..fd8383130 100644 --- a/apps/client/src/stylesheets/style.css +++ b/apps/client/src/stylesheets/style.css @@ -2422,4 +2422,14 @@ footer.webview-footer button { .revision-diff-removed { background: rgba(255, 100, 100, 0.5); text-decoration: line-through; +} + +iframe.print-iframe { + position: absolute; + top: 0; + left: -600px; + right: -600px; + bottom: 0; + width: 0; + height: 0; } \ No newline at end of file diff --git a/apps/client/src/translations/ar/translation.json b/apps/client/src/translations/ar/translation.json index 3db20936c..8e9140ca7 100644 --- a/apps/client/src/translations/ar/translation.json +++ b/apps/client/src/translations/ar/translation.json @@ -25,7 +25,8 @@ "branch_prefix": { "edit_branch_prefix": "تعديل بادئة الفرع", "prefix": "البادئة: ", - "save": "حفظ" + "save": "حفظ", + "help_on_tree_prefix": "مساعدة حول بادئة الشجرة" }, "bulk_actions": { "bulk_actions": "اجراءات جماعية", @@ -44,7 +45,8 @@ "options": "خيارات", "upload": "تحميل", "choose_files": "اختر الملفات", - "shrink_images": "تصغير الصور" + "shrink_images": "تصغير الصور", + "upload_attachments_to_note": "تحميل المرفقات الى الملاحظة" }, "attribute_detail": { "name": "الاسم", @@ -74,7 +76,14 @@ "date_time": "التاريخ والوقت", "label_definition": "تفاصيل تعريف التصنيف", "relation_definition": "تفاصيل تعريف العلاقة", - "attr_detail_title": "عنوان تفاصيل السمة" + "attr_detail_title": "عنوان تفاصيل السمة", + "close_button_title": "الغاء التغييرات و اغلاق", + "attr_is_owned_by": "السمة مملوكة ل", + "save_and_close": "حفظ ونسخ Ctrl+Enter", + "workspace_calendar_root": "‎تحديد جذر التقويم لكل مساحة عمل", + "hide_highlight_widget": "اخفاء عنصر واجهة قائمة التمييزات", + "is_owned_by_note": "تخص الملاحظة", + "and_more": "... و {{count}}مرات اكثر." }, "rename_label": { "to": "الى", @@ -86,7 +95,8 @@ "move_note": { "to": "الى", "move_note": "نقل الملاحظة", - "target_parent_note": "ملاحظة الاصل الهدف" + "target_parent_note": "ملاحظة الاصل الهدف", + "on_all_matched_notes": "على كل الملاحظات المطابقة" }, "add_relation": { "to": "الى", @@ -106,7 +116,8 @@ "update_relation": "تحديث العلاقة", "relation_name": "اسم العلاقة", "target_note": "الملاحظة الهدف", - "update_relation_target": "تحدث علاقة الهدف" + "update_relation_target": "تحدث علاقة الهدف", + "on_all_matched_notes": "على كل الملاحظات المطابقة" }, "attachments_actions": { "download": "تنزيل", @@ -114,7 +125,9 @@ "open_custom": "فتح مخصص", "rename_attachment": "اعادة تسمية المرفق", "delete_attachment": "حذف المرفق", - "upload_new_revision": "رفع مراجعة جديدة" + "upload_new_revision": "رفع مراجعة جديدة", + "copy_link_to_clipboard": "نسخ الرابط الى الحافظة", + "convert_attachment_into_note": "تحويل المرفق الى ملاحظة" }, "calendar": { "week": "أسبوع", @@ -146,7 +159,9 @@ "month_previous": "الشهر السابق", "month_next": "الشهر التالي", "year_previous": "السنة السابقة", - "year_next": "السنة التالية" + "year_next": "السنة التالية", + "cannot_find_day_note": "لا يمكن ايجاد ملاحظة اليوم", + "cannot_find_week_note": "لايمكن ايجاد ملاحظة الاسبوع" }, "global_menu": { "menu": "القائمة", @@ -171,7 +186,11 @@ "open_dev_tools": "فتح ادوات المطور", "show_backend_log": "اظهار سجل الخلفية", "new-version-available": "متوفر تحديث جديد", - "download-update": "احصل على الاصدار{{latestVersion}}" + "download-update": "احصل على الاصدار{{latestVersion}}", + "switch_to_mobile_version": "التبديل الى اصدار الهاتف المحمول", + "switch_to_desktop_version": "التبديل الى اصدار سطح المكتب", + "show_shared_notes_subtree": "عرض شجرة الملاحظات المشتركة", + "open_sql_console_history": "فتح سجل لوحة تحكم SQL" }, "zpetne_odkazy": { "relation": "العلاقة", @@ -181,7 +200,8 @@ "note_icon": { "category": "الفئة:", "search": "بحث:", - "change_note_icon": "تغيير ايقونة الملاحظة" + "change_note_icon": "تغيير ايقونة الملاحظة", + "reset-default": "اعادة تعيين الى الايقونة الافتراضية" }, "basic_properties": { "language": "اللغة", @@ -204,7 +224,8 @@ "collapse_all_notes": "طي كل الملاحظات", "include_archived_notes": "عرض الملاحظات المؤرشفة", "expand_all_children": "توسيع جميع العناصر الفرعية", - "presentation": "عرض تقديمي" + "presentation": "عرض تقديمي", + "invalid_view_type": "نوع العرض {{type}} غير صالح" }, "file_properties": { "download": "تنزيل", @@ -223,7 +244,8 @@ "file_type": "نوع الملف", "file_size": "حجم الملف", "original_file_name": "اسم الملف الاصلي", - "upload_new_revision": "رفع مراجعة جديدة" + "upload_new_revision": "رفع مراجعة جديدة", + "copy_reference_to_clipboard": "نسخ المرجع الى الحافظة" }, "note_info_widget": { "created": "انشاء", @@ -258,14 +280,20 @@ "order_by": "ترتيب حسب", "search_parameters": "معايير البحث", "add_search_option": "اضافة خيار البحث:", - "save_to_note": "حفظ في تلملاحظة" + "save_to_note": "حفظ في تلملاحظة", + "limit_description": "تحديد عدد النتائج", + "search_execute": "البحث وتنفيذ الأجراءات", + "unknown_search_option": "خيار بحث غير معروف {{searchOptionName}}", + "actions_executed": "اجراءات تم تنفيذها." }, "ancestor": { "label": "السلف", "depth_label": "العمق", "depth_doesnt_matter": "لايهم", "direct_children": "العقد الفرعية المباشرة", - "depth_eq": "يساوي تماما {{count}}" + "depth_eq": "يساوي تماما {{count}}", + "depth_gt": "هو اكبر من {{count}}", + "depth_lt": "هو اصغر من {{count}}" }, "limit": { "limit": "الحد الاقصى" @@ -285,7 +313,9 @@ "revision_count": "عدد المراجعات", "parent_count": "عدد النسخ", "owned_label_count": "عدد التسميات", - "owned_relation_count": "عدد العلاقات" + "owned_relation_count": "عدد العلاقات", + "date_modified": "تاريخ اخر تعديل", + "children_count": "عدد الملاحظات الفرعية" }, "search_string": { "search_prefix": "بحث:", @@ -299,7 +329,10 @@ "force_full_sync_button": "فرض مزامنة كاملة", "finished-successfully": "تم انتهاء المزامنة بنجاح.", "full_sync_triggered": "تم تشغيل المزامنة الكاملة", - "failed": "فشل في المزامنة: {{message}}" + "failed": "فشل في المزامنة: {{message}}", + "fill_entity_changes_button": "ملء سجلات تغييرات الكيانات", + "filling_entity_changes": "جار ملء صفوف تغييرات الكيانات", + "sync_rows_filled_successfully": "تمة تعبئة بيانات المزامنة بنجاح" }, "fonts": { "fonts": "خطوط", @@ -338,7 +371,8 @@ "export": "تصدير", "export_note_title": "تصدير الملاحظة", "export_status": "حالة التصدير", - "export_finished_successfully": "اكتمل التصدير بنجاح." + "export_finished_successfully": "اكتمل التصدير بنجاح.", + "export_in_progress": "جار التصدير: {{progressCount}}" }, "help": { "troubleshooting": "أستكشاف الاخطاء واصلاحها", @@ -366,7 +400,9 @@ "scrollToActiveNote": "مدتمرير الى الملاحظة النشطة", "jumpToParentNote": "الانتقال الى الملاحظة الاصل", "movingCloningNotes": "نقل/ استنساخ الملاحظات", - "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية" + "deleteNotes": "حذف الملاحظة/ الشجرة الفرعية", + "collapseWholeTree": "طي شجرة الملاحظة باكملها", + "followLink": "اتبع تلرابط تحت المؤشر" }, "import": { "options": "خيارات", @@ -378,14 +414,18 @@ "chooseImportFile": "اختر ملف الاستيراد", "failed": "فشل الاستيراد: {{messege}}.", "html_import_tags": { - "title": "علامات استيراد HTML" + "title": "علامات استيراد HTML", + "reset_button": "اعادة التعيين الى القائمة الافتراضية" }, - "successful": "اكتمل الاستيراد بنجاح." + "successful": "اكتمل الاستيراد بنجاح.", + "in-progress": "جار الاستيراد: {{progress}}" }, "include_note": { "label_note": "ملاحظة", "dialog_title": "تضمين ملاحظة", - "button_include": "تضمين ملاحظة" + "button_include": "تضمين ملاحظة", + "box_size_small": "صغير (10 سطور تقريبا)", + "box_size_medium": "متوسط ( 30 سطر تقريبا)" }, "info": { "closeButton": "أغلاق", @@ -409,7 +449,8 @@ "protected_session_password": { "close_label": "أغلاق", "modal_title": "جلسة محمية", - "start_button": "بدء جلسة محمية" + "start_button": "بدء جلسة محمية", + "help_title": "مساعدة حول الملاحظات المحمية" }, "revisions": { "delete_button": "حذف", @@ -423,7 +464,8 @@ "mime": "MIME: ", "delete_all_button": "حذف كل المراجعات", "settings": "اعدادات مراجعة الملاحظة", - "diff_not_available": "المقارنة غير متوفرة." + "diff_not_available": "المقارنة غير متوفرة.", + "help_title": "مساعدة حول مراجعات الملاحظة" }, "sort_child_notes": { "title": "عنوان", @@ -442,7 +484,8 @@ "recent_changes": { "undelete_link": "الغاء الحذف", "title": "التغيرات الاخيرة", - "no_changes_message": "لايوجد تغيير لحد الان..." + "no_changes_message": "لايوجد تغيير لحد الان...", + "erase_notes_button": "مسح الملاحظات المحذوفة الان" }, "edited_notes": { "deleted": "(حذف)", @@ -458,7 +501,8 @@ "max_width_unit": "بكسل", "title": "عرض المحتوى", "reload_button": "اعادة تحميل الواجهة", - "max_width_label": "اقصى عرض للمحتوى" + "max_width_label": "اقصى عرض للمحتوى", + "reload_description": "تغييرات من خيارات المظهر" }, "native_title_bar": { "enabled": "مفعل", @@ -479,7 +523,8 @@ "ui-performance": { "title": "أداء", "enable-shadows": "تفعيل الضلال", - "enable-smooth-scroll": "تمكين التمرير السلس" + "enable-smooth-scroll": "تمكين التمرير السلس", + "enable-motion": "تمكين الانتقالات والرسوم المتحركة" }, "ai_llm": { "progress": "تقدم", @@ -543,7 +588,8 @@ "start_indexing": "بدء الفهرسة", "chat": { "root_note_title": "دردشات AI", - "new_chat_title": "دردشة جديدة" + "new_chat_title": "دردشة جديدة", + "create_new_ai_chat": "انشاء دردشة AI جديدة" }, "selected_provider": "المزود المحدد", "select_model": "اختر النموذج...", @@ -571,7 +617,21 @@ "enable_ai": "تمكين خصائص AI/LLM", "reprocess_index": "اعادة بناء فهرس البحث", "index_rebuilding": "جار تحسين الفهرس {{percentage}}", - "voyage_configuration": "اعدادت Voyage AI" + "voyage_configuration": "اعدادت Voyage AI", + "openai_model_description": "الامثلة: gpt-4o, gpt-4-turbo, gpt-3.5-turbo", + "partial": "{{ percentage }} % مكتمل", + "retry_queued": "تم جدولة الملاحظة لاعادة المحاولة", + "max_notes_per_llm_query": "اكبر عدد للملاحظات لكل استعلام", + "remove_provider": "احذف المزود من البحث", + "restore_provider": "استعادة المزود الى البحث", + "reprocess_index_error": "حدث خطأ اثناء اعادة بناء فهرس البحث", + "auto_refresh_notice": "تحديث تلقائي كل {{seconds}} ثانية", + "note_queued_for_retry": "الملاحظة جاهزة لاعادة المحاولة لاحقا", + "failed_to_retry_note": "‎فشل في اعادة محاولة معالجة المحاولة", + "failed_to_retry_all": "فشل في اعادة محاولة معالجة الملاحظة", + "error_generating_response": "‌فشل في توليد استجابة من ال AI", + "create_new_ai_chat": "انشاء دردشة AI جديدة", + "error_fetching": "فشل في استرجاع النماذج: {{error}}" }, "code_auto_read_only_size": { "unit": "حروف", @@ -586,7 +646,8 @@ "enable_image_compression": "تمكين ضغط الصورة" }, "revisions_snapshot_limit": { - "snapshot_number_limit_unit": "لقطات" + "snapshot_number_limit_unit": "لقطات", + "note_revisions_snapshot_limit_title": "الحد الاقصى لنسخ الملاحظات الاحتياطية" }, "search_engine": { "bing": "Bing", @@ -874,7 +935,10 @@ "unset-field-placeholder": "غير محدد", "open_external_link": "فتح رابط خارجي", "add_new_attribute": "اضافة سمة جديدة", - "remove_this_attribute": "حذف هذه السمة" + "remove_this_attribute": "حذف هذه السمة", + "unknown_label_type": "نوع التسمية {{type}} غير معروف", + "unknown_attribute_type": "نوع السمة {{type}} غير معروف", + "remove_color": "حذف لون التسمية" }, "duration": { "seconds": "ثواني", @@ -885,7 +949,8 @@ "editorfeatures": { "title": "مميزات", "note_completion_enabled": "تمكين الاكمال التلقائي للملاحظة", - "emoji_completion_enabled": "تفعيل الاكمال التلقائي للرموز التعبيرية" + "emoji_completion_enabled": "تفعيل الاكمال التلقائي للرموز التعبيرية", + "slash_commands_enabled": "تفعيل اوامر Slash" }, "book_properties_config": { "raster": "نقطي", @@ -921,7 +986,8 @@ "add_label": "اضافة تسمية", "to_value": "الى القيمة", "new_value_placeholder": "قيمة جديدة", - "label_name_placeholder": "اسم التسمية" + "label_name_placeholder": "اسم التسمية", + "help_text": "عل كل الملاحظات المطابقة:" }, "delete_label": { "delete_label": "حذف التسمية", @@ -939,7 +1005,8 @@ }, "rename_note": { "rename_note": "اعادة تسمية الملاحظة", - "new_note_title": "عنوان ملاحظة جديد" + "new_note_title": "عنوان ملاحظة جديد", + "rename_note_title_to": "اعادة تسمية عنوان الملاحظة الى" }, "delete_relation": { "delete_relation": "حذف العلاقة", @@ -966,7 +1033,8 @@ "search_in_note": "بحث في الملاحظة", "open_note_externally": "فتح الملاحظة خارجيا", "open_note_custom": "فتح ملاحظة مخصص", - "print_pdf": "تصدير كملف PDF..." + "print_pdf": "تصدير كملف PDF...", + "convert_into_attachment_failed": "فشل تحويل الملاحظة {{title}}." }, "update_available": { "update_available": "تحديث متوفر" @@ -974,7 +1042,8 @@ "code_buttons": { "execute_button_title": "تنفيذ السكريبت", "save_to_note_button_title": "حفظ في الملاحظا", - "opening_api_docs_message": "جاري فتح مستدات API..." + "opening_api_docs_message": "جاري فتح مستدات API...", + "trilium_api_docs_button_title": "فتح مستندات API لتريليوم" }, "hide_floating_buttons_button": { "button_title": "اخفاء الازرار" @@ -994,13 +1063,15 @@ "title": "خريطة الملاحظة", "fix-nodes": "اصلاح العقد", "link-distance": "مسافة الرابط", - "open_full": "توسيع للعرض الكامل" + "open_full": "توسيع للعرض الكامل", + "collapse": "طي الى الحجم الطبيعي" }, "owned_attribute_list": { "owned_attributes": "السمات المملوكة" }, "similar_notes": { - "title": "ملاحظات مشابهة" + "title": "ملاحظات مشابهة", + "no_similar_notes_found": "لاتوجد ملاحظة مشابهة." }, "fast_search": { "fast_search": "بحث سريع" @@ -1010,7 +1081,8 @@ "example_title": "انظر هذا المثال:" }, "attachment_detail": { - "owning_note": "الملاحظة المالكة: " + "owning_note": "الملاحظة المالكة: ", + "list_of_all_attachments": "قائمة بكل المرفقات" }, "attachment_list": { "owning_note": "الملاحظة المالكة: ", @@ -1021,14 +1093,21 @@ "protecting-title": "الحالة المحمية", "unprotecting-title": "الحالة الغير محمية", "protecting-finished-successfully": "تم الحماية بنجاح.", - "unprotecting-finished-successfully": "تم ازالة الحماية بنجاح." + "unprotecting-finished-successfully": "تم ازالة الحماية بنجاح.", + "start_session_button": "البدء بالجلسة المحمية enter", + "protecting-in-progress": "جار الحماية: {{count}}", + "unprotecting-in-progress-count": "‏جار الغاء الحماية: {{count}}" }, "relation_map": { "remove_note": "حذف الملاحظة", "edit_title": "تعديل العنوان", "rename_note": "اعادة تسمية الملاحظة", "remove_relation": "حذف العلاقة", - "default_new_note_title": "ملاحظة جديدة" + "default_new_note_title": "ملاحظة جديدة", + "open_in_new_tab": "فتح في تبويب جديد", + "enter_new_title": "ادخل عنوان ملاحظة جديدة:", + "note_not_found": "الملاحظة {{noteId}} غير موجودة!", + "cannot_match_transform": "تعذر مطابقة التحويل: {{transform}}" }, "web_view": { "web_view": "عرض الويب" @@ -1045,7 +1124,8 @@ "vacuum_database": { "title": "تحرير مساحة قاعدة البيانات", "button_text": "تحرير مساحة قاعدة البيانات", - "vacuuming_database": "جار تحرير مساحة قاعدة الييانات..." + "vacuuming_database": "جار تحرير مساحة قاعدة الييانات...", + "database_vacuumed": "تم تنظيف قاعدة البيانات" }, "ribbon": { "widgets": "ادوات الشريط" @@ -1054,7 +1134,8 @@ "use_vim_keybindings_in_code_notes": "اختصارات لوحة المفاتيح باسلوب Vim" }, "network_connections": { - "network_connections_title": "اتصالات الشبكة" + "network_connections_title": "اتصالات الشبكة", + "check_for_updates": "‪التحقق من وجود تحديثات تلقائية" }, "tray": { "title": "شريط النظام" @@ -1189,7 +1270,9 @@ }, "move_to": { "notes_to_move": "الملاحظات المراد نقلها", - "target_parent_note": "ملاحظة الاصل الهدف" + "target_parent_note": "ملاحظة الاصل الهدف", + "dialog_title": "انقل الملاحظات الى...", + "move_button": "نقل الىالملاحظة المحددة" }, "delete_revisions": { "delete_note_revisions": "حذف مراجعات الملاحظة" @@ -1236,7 +1319,10 @@ "enter_workspace": "ادخل مساحة العمل {{title}}" }, "attribute_editor": { - "save_attributes": "حفظ السمات " + "save_attributes": "حفظ السمات ", + "add_a_new_attribute": "اضافة سمة جديدة", + "add_new_label_definition": "اضافة تعريف لتسمية جديدة", + "add_new_relation_definition": "اضافة تعريف لعلاقة جديدة" }, "zen_mode": { "button_exit": "الخروج من وضع Zen" @@ -1246,7 +1332,8 @@ }, "note_erasure_timeout": { "note_erasure_timeout_title": "مهلة مسح الملاحظة", - "erase_notes_after": "مسح الملاحظات بعد:" + "erase_notes_after": "مسح الملاحظات بعد:", + "erase_deleted_notes_now": "مسح الملاحظات المحذوفة الان" }, "ws": { "sync-check-failed": "فشل التحقق من المزامنة!" @@ -1257,5 +1344,27 @@ "presentation_view": { "start-presentation": "بدء العرض التقديمي", "edit-slide": "تعديل هذه الشريحة" + }, + "jump_to_note": { + "search_button": "البحث في النص الكامل" + }, + "password_not_set": { + "title": "لم يتم تعيين كلمة المرور", + "go_to_password_options": "اذهب الى خيارات كلمة المرور" + }, + "abstract_bulk_action": { + "remove_this_search_action": "حذف اجراء البحث هذا" + }, + "show_toc_widget_button": { + "show_toc": "عرض جدول المحتويات" + }, + "svg_export_button": { + "button_title": "تصدير المخطط ك SVG" + }, + "abstract_search_option": { + "remove_this_search_option": "حذف خيار البحث هذا" + }, + "revisions_snapshot_interval": { + "note_revisions_snapshot_interval_title": "الفاصل الزمني لنسخ الملاحظات الاحتياطية" } } diff --git a/apps/client/src/translations/cs/translation.json b/apps/client/src/translations/cs/translation.json index aedf9519f..6cdb3321b 100644 --- a/apps/client/src/translations/cs/translation.json +++ b/apps/client/src/translations/cs/translation.json @@ -4,7 +4,7 @@ "homepage": "Domovská stránka:", "app_version": "Verze aplikace:", "db_version": "Verze DB:", - "sync_version": "Verze sync:", + "sync_version": "Verze synchronizace:", "build_date": "Datum sestavení:", "build_revision": "Revize sestavení:", "data_directory": "Datový adresář:" @@ -36,6 +36,29 @@ "add_link": "Přidat odkaz", "help_on_links": "Nápověda k odkazům", "note": "Poznámka", - "search_note": "hledat poznámku podle názvu" + "search_note": "hledat poznámku podle názvu", + "link_title": "Název odkazu", + "button_add_link": "Přidat odkaz" + }, + "branch_prefix": { + "prefix": "Prefix: ", + "save": "Uložit" + }, + "bulk_actions": { + "bulk_actions": "Hromadné akce", + "affected_notes": "Ovlivněné poznámky", + "notes": "Poznámky" + }, + "confirm": { + "cancel": "Zrušit", + "ok": "OK" + }, + "delete_notes": { + "cancel": "Zrušit", + "ok": "OK", + "close": "Zavřít" + }, + "export": { + "close": "Zavřít" } } diff --git a/apps/client/src/translations/de/translation.json b/apps/client/src/translations/de/translation.json index 69fc3f518..b47b03435 100644 --- a/apps/client/src/translations/de/translation.json +++ b/apps/client/src/translations/de/translation.json @@ -646,7 +646,8 @@ "about": "Über Trilium Notes", "logout": "Abmelden", "show-cheatsheet": "Cheatsheet anzeigen", - "toggle-zen-mode": "Zen Modus" + "toggle-zen-mode": "Zen Modus", + "new-version-available": "Neues Update verfügbar" }, "sync_status": { "unknown": "

Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.

Klicke, um eine Synchronisierung jetzt auszulösen.

", @@ -763,7 +764,8 @@ "table": "Tabelle", "geo-map": "Weltkarte", "board": "Tafel", - "include_archived_notes": "Zeige archivierte Notizen" + "include_archived_notes": "Zeige archivierte Notizen", + "presentation": "Präsentation" }, "edited_notes": { "no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...", @@ -2074,5 +2076,9 @@ }, "collections": { "rendering_error": "Aufgrund eines Fehlers können keine Inhalte angezeigt werden." + }, + "presentation_view": { + "edit-slide": "Diese Folie bearbeiten", + "start-presentation": "Präsentation starten" } } diff --git a/apps/client/src/translations/en/translation.json b/apps/client/src/translations/en/translation.json index a6858c7d6..1949d3357 100644 --- a/apps/client/src/translations/en/translation.json +++ b/apps/client/src/translations/en/translation.json @@ -164,6 +164,7 @@ "importIntoNote": "Import into note", "chooseImportFile": "Choose import file", "importDescription": "Content of the selected file(s) will be imported as child note(s) into", + "importZipRecommendation": "When importing a ZIP file, the note hierarchy will reflect the subdirectory structure within the archive.", "options": "Options", "safeImportTooltip": "Trilium .zip export files can contain executable scripts which may contain harmful behavior. Safe import will deactivate automatic execution of all imported scripts. Uncheck \"Safe import\" only if the imported archive is supposed to contain executable scripts and you completely trust the contents of the import file.", "safeImport": "Safe import", @@ -1722,7 +1723,9 @@ "window-on-top": "Keep Window on Top" }, "note_detail": { - "could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'" + "could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'", + "printing": "Printing in progress...", + "printing_pdf": "Exporting to PDF in progress..." }, "note_title": { "placeholder": "type note's title here..." diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index f9cbeb6eb..53ee0b767 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -692,6 +692,14 @@ "help_text_body3": "In alternativa, è possibile aggiungere etichette e relazioni utilizzando il pulsante + sul lato destro.", "save_attributes": "Salva attributi ", "add_a_new_attribute": "Aggiungi un nuovo attributo", - "add_new_label": "Aggiungi nuova etichetta " + "add_new_label": "Aggiungi nuova etichetta ", + "add_new_relation": "Aggiungi nuova relazione ", + "add_new_relation_definition": "Aggiungi una nuova definizione di relazione", + "placeholder": "Digitare qui le etichette e le relazioni" + }, + "execute_script": { + "execute_script": "Esegui script", + "help_text": "È possibile eseguire semplici script sulle note abbinate.", + "example_1": "Ad esempio, per aggiungere una stringa al titolo di una nota, utilizzare questo piccolo script:" } } diff --git a/apps/client/src/translations/ja/translation.json b/apps/client/src/translations/ja/translation.json index 8131fa7f8..c7b80c272 100644 --- a/apps/client/src/translations/ja/translation.json +++ b/apps/client/src/translations/ja/translation.json @@ -282,8 +282,8 @@ "selectAllNotes": "現在のレベルのノートをすべて選択", "selectNote": "ノートを選択", "copyNotes": "アクティブなノート(または現在の選択範囲)をクリップボードにコピーする(クローンに使用)", - "cutNotes": "アクティブなノート(または現在の選択範囲)をクリップボードにカットする(ノートの移動に使用)", - "pasteNotes": "ノートをサブノートとしてアクティブノートに貼り付ける(コピーされたかカットされたかに よって、移動またはクローンになる)", + "cutNotes": "アクティブなノート(または現在の選択範囲)をクリップボードに切り取り(ノートの移動に使用)", + "pasteNotes": "ノートをサブノートとしてアクティブノートに貼り付ける(コピーされたか切り取りされたかに よって、移動またはクローンになる)", "deleteNotes": "ノート/サブツリーを削除", "editingNotes": "ノート編集", "editNoteTitle": "押下するとツリーペインからタイトルの編集に移ります。タイトルの編集からEnterキーを押すと、本文の編集に移動します。Ctrl+. で本文の編集からツリーペインに戻ります。", @@ -302,7 +302,7 @@ "showDevTools": "開発者ツールを表示", "showSQLConsole": "SQLコンソールを表示", "other": "その他", - "quickSearch": "クイックサーチにフォーカス", + "quickSearch": "クイック検索にフォーカス", "inPageSearch": "ページ内検索", "showJumpToNoteDialog": "「ジャンプ先」ダイアログを表示", "moveNoteUpDown": "ノートリストでノートを上/下に移動", @@ -405,7 +405,7 @@ "unprotect-subtree": "サブツリーの保護を解除", "copy-clone": "コピー/クローン", "clone-to": "クローン先...", - "cut": "カット", + "cut": "切り取り", "move-to": "移動先...", "paste-into": "貼り付け", "paste-after": "後ろに貼り付け", @@ -1189,7 +1189,7 @@ "options": "オプション" }, "quick-search": { - "placeholder": "クイックサーチ", + "placeholder": "クイック検索", "searching": "検索中...", "no-results": "結果は見つかりませんでした", "more-results": "... および {{number}} 件の他の結果。", @@ -1245,7 +1245,7 @@ "duplicated": "ノート \"{{title}}\" は複製されました。" }, "clipboard": { - "cut": "ノートはクリップボードにカットされました。", + "cut": "ノートはクリップボードに切り取りとられました。", "copied": "ノートはクリップボードにコピーされました。", "copy_failed": "権限の問題で、クリップボードにコピーできません。", "copy_success": "クリップボードにコピーしました。" @@ -1296,7 +1296,7 @@ }, "electron_context_menu": { "add-term-to-dictionary": "辞書に \"{{term}}\" を追加", - "cut": "カット", + "cut": "切り取り", "copy": "コピー", "copy-link": "リンクをコピー", "paste": "貼り付け", @@ -1882,7 +1882,9 @@ "window-on-top": "ウィンドウを最前面に維持" }, "note_detail": { - "could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした" + "could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした", + "printing": "印刷中です...", + "printing_pdf": "PDF へのエクスポート中です..." }, "watched_file_update_status": { "ignore_this_change": "この変更を無視する", diff --git a/apps/client/src/translations/pl/translation.json b/apps/client/src/translations/pl/translation.json index 09f4225df..6e4c7a516 100644 --- a/apps/client/src/translations/pl/translation.json +++ b/apps/client/src/translations/pl/translation.json @@ -1,12 +1,12 @@ { "about": { - "title": "O notatkach Trilium", + "title": "O Trilium Notes", "homepage": "Strona główna:", "app_version": "Wersja aplikacji:", "db_version": "Wersja bazy danych:", "sync_version": "Wersja synchronizacji:", - "build_date": "Zbudowano:", - "build_revision": "Rewizja zbudowania:", + "build_date": "Data kompilacji:", + "build_revision": "Wersja:", "data_directory": "Katalog z danymi:" }, "toast": { @@ -161,7 +161,21 @@ "inPageSearch": "wyszukiwanie wewnątrz strony" }, "book_properties": { - "list": "Lista" + "list": "Lista", + "view_type": "Typ widoku", + "grid": "Siatka", + "collapse_all_notes": "Zwiń wszystkie notatki", + "expand_all_children": "Rozwiń wszystkie dzieci", + "collapse": "Zwiń", + "expand": "Rozwiń", + "book_properties": "Właściwości kolekcji", + "invalid_view_type": "Nieprawidłowy typ widoku '{{type}}'", + "calendar": "Kalendarz", + "table": "Tabela", + "geo-map": "Mapa geograficzna", + "board": "Tablica", + "presentation": "Prezentacja", + "include_archived_notes": "Pokaż zarchiwizowane notatki" }, "board_view": { "move-to": "Przenieś do", @@ -208,7 +222,8 @@ "next_theme_button": "Spróbuj nowego motywu", "background_effects_title": "Efekty w tle są już stabilne", "dismiss": "Odrzuć", - "background_effects_button": "Włącz efekty w tle" + "background_effects_button": "Włącz efekty w tle", + "background_effects_message": "Na urządzeniach z systemem Windows efekty tła są teraz w pełni stabilne. Efekty tła dodają odrobinę koloru do interfejsu użytkownika, rozmywając tło za nim. Ta technika jest również stosowana w innych aplikacjach, takich jak Eksplorator Windows." }, "settings": { "related_settings": "Powiązane ustawienia" @@ -234,7 +249,9 @@ "to_value": "do wartości", "new_value_placeholder": "nowa wartość", "help_text": "We wszystkich dopasowanych notatkach:", - "help_text_item2": "albo zmień wartość istniejącej etykiety" + "help_text_item2": "albo zmień wartość istniejącej etykiety", + "help_text_item1": "utwórz daną etykietę, jeśli notatka jeszcze jej nie ma", + "help_text_note": "Możesz również wywołać tę metodę bez wartości, w takim przypadku etykieta zostanie przypisana do notatki bez wartości." }, "attribute_detail": { "delete": "Usuń", @@ -248,7 +265,118 @@ "precision": "Prezycja", "digits": "znaki", "inverse_relation_title": "Opcjonalne ustawienie definiujące, do której relacji jest ta relacja przeciwna. Przykład: Główna - podnotatka są relacjami odwrotnymi do siebie.", - "inverse_relation": "Odwrócone powiązanie" + "inverse_relation": "Odwrócone powiązanie", + "attr_detail_title": "Tytuł szczegółów atrybutu", + "close_button_title": "Anuluj zmiany i zamknij", + "attr_is_owned_by": "Atrybut jest własnością", + "attr_name_title": "Nazwa atrybutu może składać się tylko ze znaków alfanumerycznych, dwukropka i podkreślenia", + "name": "Nazwa", + "value": "Wartość", + "target_note_title": "Relacja to nazwane połączenie między notatką źródłową a docelową.", + "target_note": "Notatka docelowa", + "promoted_title": "Promowany atrybut jest wyraźnie wyświetlany w notatce.", + "promoted": "Promowany", + "promoted_alias_title": "Nazwa, która ma być wyświetlana w interfejsie promowanych atrybutów.", + "promoted_alias": "Alias", + "multiplicity_title": "Krotność definiuje, ile atrybutów o tej samej nazwie można utworzyć - maksymalnie 1 lub więcej niż 1.", + "multiplicity": "Krotność", + "single_value": "Pojedyncza wartość", + "multi_value": "Wiele wartości", + "label_type_title": "Typ etykiety pomoże Trilium wybrać odpowiedni interfejs do wprowadzenia wartości etykiety.", + "label_type": "Typ", + "text": "Tekst", + "number": "Liczba", + "boolean": "Wartość logiczna", + "date": "Data", + "date_time": "Data i czas", + "time": "Czas", + "url": "URL", + "precision_title": "Jaka liczba cyfr po przecinku powinna być dostępna w interfejsie ustawiania wartości.", + "inheritable_title": "Dziedziczny atrybut będzie dziedziczony przez wszystkich potomków w tym drzewie.", + "inheritable": "Dziedziczny", + "save_and_close": "Zapisz i zamknij Ctrl+Enter", + "calendar_root": "oznacza notatkę, która powinna być używana jako korzeń dla notatek dziennych. Tylko jedna powinna być tak oznaczona.", + "archived": "notatki z tą etykietą nie będą domyślnie widoczne w wynikach wyszukiwania (również w dialogach Przejdź do, Dodaj link itp.).", + "exclude_from_export": "notatki (wraz z ich poddrzewem) nie będą uwzględniane w żadnym eksporcie notatek", + "run": "definiuje, przy jakich zdarzeniach skrypt powinien być uruchamiany. Możliwe wartości to:\n
    \n
  • frontendStartup - gdy frontend Trilium się uruchamia (lub jest odświeżany), ale nie na urządzeniach mobilnych.
  • \n
  • mobileStartup - gdy frontend Trilium się uruchamia (lub jest odświeżany), na urządzeniach mobilnych.
  • \n
  • backendStartup - gdy backend Trilium się uruchamia
  • \n
  • hourly - uruchamiaj raz na godzinę. Możesz użyć dodatkowej etykiety runAtHour, aby określić, o której godzinie.
  • \n
  • daily - uruchamiaj raz dziennie
  • \n
", + "run_on_instance": "Zdefiniuj, która instancja Trilium ma to uruchomić. Domyślnie wszystkie instancje.", + "run_at_hour": "O której godzinie ma to być uruchomione. Powinno być używane razem z #run=hourly. Można zdefiniować wielokrotnie dla większej liczby uruchomień w ciągu dnia.", + "disable_inclusion": "skrypty z tą etykietą nie będą uwzględniane w wykonaniu skryptu nadrzędnego.", + "sorted": "utrzymuje notatki podrzędne posortowane alfabetycznie według tytułu", + "sort_direction": "ASC (domyślnie) lub DESC", + "sort_folders_first": "Foldery (notatki z dziećmi) powinny być sortowane na górze", + "top": "utrzymuj daną notatkę na górze w jej rodzicu (dotyczy tylko posortowanych rodziców)", + "hide_promoted_attributes": "Ukryj promowane atrybuty w tej notatce", + "read_only": "edytor jest w trybie tylko do odczytu. Działa tylko dla notatek tekstowych i kodowych.", + "auto_read_only_disabled": "notatki tekstowe/kodowe mogą być automatycznie ustawiane w tryb tylko do odczytu, gdy są zbyt duże. Możesz wyłączyć to zachowanie dla poszczególnych notatek, dodając tę etykietę do notatki", + "app_css": "oznacza notatki CSS, które są ładowane do aplikacji Trilium i mogą być używane do modyfikacji wyglądu Trilium.", + "app_theme": "oznacza notatki CSS, które są pełnymi motywami Trilium i są dostępne w opcjach Trilium.", + "app_theme_base": "ustaw na \"next\", \"next-light\" lub \"next-dark\", aby użyć odpowiedniego motywu TriliumNext (auto, jasny lub ciemny) jako podstawy dla niestandardowego motywu, zamiast starszego.", + "css_class": "wartość tej etykiety jest dodawana jako klasa CSS do węzła reprezentującego daną notatkę w drzewie. Może to być przydatne do zaawansowanego motywowania. Może być używane w notatkach-szablonach.", + "icon_class": "wartość tej etykiety jest dodawana jako klasa CSS do ikony w drzewie, co może pomóc wizualnie odróżnić notatki w drzewie. Przykładem może być bx bx-home - ikony pochodzą z boxicons. Może być używane w notatkach-szablonach.", + "page_size": "liczba elementów na stronie w liście notatek", + "custom_request_handler": "zobacz Niestandardowy obsługujący żądania", + "custom_resource_provider": "zobacz Niestandardowy obsługujący żądania", + "widget": "oznacza tę notatkę jako niestandardowy widżet, który zostanie dodany do drzewa komponentów Trilium", + "workspace": "oznacza tę notatkę jako obszar roboczy, co pozwala na łatwe podnoszenie", + "workspace_icon_class": "definiuje klasę CSS ikony box, która będzie używana w karcie po podniesieniu do tej notatki", + "workspace_tab_background_color": "Kolor CSS używany w karcie notatki po podniesieniu do tej notatki", + "workspace_calendar_root": "Definiuje korzeń kalendarza dla obszaru roboczego", + "workspace_template": "Ta notatka pojawi się w wyborze dostępnych szablonów podczas tworzenia nowej notatki, ale tylko po podniesieniu do obszaru roboczego zawierającego ten szablon", + "search_home": "nowe notatki wyszukiwania będą tworzone jako dzieci tej notatki", + "workspace_search_home": "nowe notatki wyszukiwania będą tworzone jako dzieci tej notatki po podniesieniu do jakiegoś przodka tej notatki obszaru roboczego", + "inbox": "domyślna lokalizacja skrzynki odbiorczej dla nowych notatek - gdy tworzysz notatkę za pomocą przycisku \"nowa notatka\" na pasku bocznym, notatki będą tworzone jako notatki podrzędne w notatce oznaczonej etykietą #inbox.", + "workspace_inbox": "domyślna lokalizacja skrzynki odbiorczej dla nowych notatek po podniesieniu do jakiegoś przodka tej notatki obszaru roboczego", + "sql_console_home": "domyślna lokalizacja notatek konsoli SQL", + "bookmark_folder": "notatka z tą etykietą pojawi się w zakładkach jako folder (umożliwiając dostęp do jej dzieci)", + "share_hidden_from_tree": "ta notatka jest ukryta w lewym drzewie nawigacyjnym, ale nadal dostępna pod swoim adresem URL", + "share_external_link": "notatka będzie działać jako link do zewnętrznej strony internetowej w drzewie udostępniania", + "share_alias": "zdefiniuj alias, za pomocą którego notatka będzie dostępna pod adresem https://your_trilium_host/share/[your_alias]", + "share_omit_default_css": "domyślny CSS strony udostępniania zostanie pominięty. Użyj, gdy wprowadzasz obszerne zmiany w stylizacji.", + "share_root": "oznacza notatkę, która jest serwowana w katalogu głównym /share.", + "share_description": "zdefiniuj tekst, który ma być dodany do metatagu HTML dla opisu", + "share_raw": "notatka będzie serwowana w surowym formacie, bez opakowania HTML", + "share_disallow_robot_indexing": "zabroni robotom indeksowania tej notatki za pomocą nagłówka X-Robots-Tag: noindex", + "share_credentials": "wymagaj poświadczeń, aby uzyskać dostęp do tej udostępnionej notatki. Oczekuje się, że wartość będzie w formacie 'nazwa_użytkownika:hasło'. Nie zapomnij uczynić tego dziedzicznym, aby zastosować do notatek podrzędnych/obrazów.", + "share_index": "notatka z tą etykietą będzie zawierać listę wszystkich korzeni udostępnionych notatek", + "display_relations": "rozdzielone przecinkami nazwy relacji, które powinny być wyświetlane. Wszystkie inne będą ukryte.", + "hide_relations": "rozdzielone przecinkami nazwy relacji, które powinny być ukryte. Wszystkie inne będą wyświetlane.", + "title_template": "domyślny tytuł notatek tworzonych jako dzieci tej notatki. Wartość jest oceniana jako ciąg znaków JavaScript\n i dlatego może być wzbogacona o dynamiczną treść za pomocą wstrzykniętych zmiennych now i parentNote. Przykłady:\n \n
    \n
  • ${parentNote.getLabelValue('authorName')}'s literary works
  • \n
  • Log for ${now.format('YYYY-MM-DD HH:mm:ss')}
  • \n
\n \n Zobacz wiki ze szczegółami, dokumentację API dla parentNote i now, aby uzyskać szczegółowe informacje.", + "template": "Ta notatka pojawi się w wyborze dostępnych szablonów podczas tworzenia nowej notatki", + "toc": "#toc lub #toc=show wymusi wyświetlenie spisu treści, #toc=hide wymusi jego ukrycie. Jeśli etykieta nie istnieje, obserwowane jest ustawienie globalne", + "color": "definiuje kolor notatki w drzewie notatek, linkach itp. Użyj dowolnej prawidłowej wartości koloru CSS, np. 'red' lub #a13d5f", + "keyboard_shortcut": "Definiuje skrót klawiaturowy, który natychmiast przejdzie do tej notatki. Przykład: 'ctrl+alt+e'. Wymaga ponownego załadowania frontendu, aby zmiana zaczęła obowiązywać.", + "keep_current_hoisting": "Otwarcie tego linku nie zmieni podniesienia, nawet jeśli notatka nie jest wyświetlana w bieżącym podniesionym poddrzewie.", + "execute_button": "Tytuł przycisku, który wykona bieżącą notatkę kodu", + "execute_description": "Dłuższy opis bieżącej notatki kodu wyświetlany razem z przyciskiem wykonania", + "exclude_from_note_map": "Notatki z tą etykietą będą ukryte na Mapie Notatek", + "new_notes_on_top": "Nowe notatki będą tworzone na górze notatki nadrzędnej, a nie na dole.", + "hide_highlight_widget": "Ukryj widżet listy wyróżnień", + "run_on_note_creation": "wykonuje się, gdy notatka jest tworzona na backendzie. Użyj tej relacji, jeśli chcesz uruchomić skrypt dla wszystkich notatek utworzonych w określonym poddrzewie. W takim przypadku utwórz ją w korzeniu poddrzewa i uczyń dziedziczną. Nowa notatka utworzona w poddrzewie (na dowolnej głębokości) uruchomi skrypt.", + "run_on_child_note_creation": "wykonuje się, gdy nowa notatka jest tworzona pod notatką, w której zdefiniowano tę relację", + "run_on_note_title_change": "wykonuje się, gdy tytuł notatki jest zmieniany (obejmuje również tworzenie notatki)", + "run_on_note_content_change": "wykonuje się, gdy zawartość notatki jest zmieniana (obejmuje również tworzenie notatki).", + "run_on_note_change": "wykonuje się, gdy notatka jest zmieniana (obejmuje również tworzenie notatki). Nie obejmuje zmian w zawartości", + "run_on_note_deletion": "wykonuje się, gdy notatka jest usuwana", + "run_on_branch_creation": "wykonuje się, gdy tworzona jest gałąź. Gałąź to połączenie między notatką nadrzędną a podrzędną i jest tworzona np. podczas klonowania lub przenoszenia notatki.", + "run_on_branch_change": "wykonuje się, gdy gałąź jest aktualizowana.", + "run_on_branch_deletion": "wykonuje się, gdy gałąź jest usuwana. Gałąź to połączenie między notatką nadrzędną a podrzędną i jest usuwana np. podczas przenoszenia notatki (stara gałąź/link jest usuwana).", + "run_on_attribute_creation": "wykonuje się, gdy tworzony jest nowy atrybut dla notatki, która definiuje tę relację", + "run_on_attribute_change": " wykonuje się, gdy atrybut jest zmieniany w notatce, która definiuje tę relację. Jest to również wyzwalane, gdy atrybut jest usuwany", + "relation_template": "atrybuty notatki będą dziedziczone nawet bez relacji rodzic-dziecko, zawartość i poddrzewo notatki zostaną dodane do notatek instancji, jeśli są puste. Zobacz dokumentację, aby uzyskać szczegółowe informacje.", + "inherit": "atrybuty notatki będą dziedziczone nawet bez relacji rodzic-dziecko. Zobacz relację szablonu dla podobnego konceptu. Zobacz dziedziczenie atrybutów w dokumentacji.", + "render_note": "notatki typu \"renderuj notatkę HTML\" będą renderowane za pomocą notatki kodu (HTML lub skrypt) i konieczne jest wskazanie za pomocą tej relacji, która notatka ma być renderowana", + "widget_relation": "cel tej relacji zostanie wykonany i wyrenderowany jako widżet na pasku bocznym", + "share_css": "Notatka CSS, która zostanie wstrzyknięta na stronę udostępniania. Notatka CSS musi również znajdować się w udostępnionym poddrzewie. Rozważ również użycie 'share_hidden_from_tree' i 'share_omit_default_css'.", + "share_js": "Notatka JavaScript, która zostanie wstrzyknięta na stronę udostępniania. Notatka JS musi również znajdować się w udostępnionym poddrzewie. Rozważ użycie 'share_hidden_from_tree'.", + "share_template": "Wbudowana notatka JavaScript, która będzie używana jako szablon do wyświetlania udostępnionej notatki. W razie niepowodzenia używany jest domyślny szablon. Rozważ użycie 'share_hidden_from_tree'.", + "share_favicon": "Notatka favicon do ustawienia na udostępnionej stronie. Zazwyczaj chcesz ustawić ją w katalogu głównym udostępniania i uczynić ją dziedziczną. Notatka favicon musi również znajdować się w udostępnionym poddrzewie. Rozważ użycie 'share_hidden_from_tree'.", + "is_owned_by_note": "jest własnością notatki", + "other_notes_with_name": "Inne notatki z nazwą {{attributeType}} \"{{attributeName}}\"", + "and_more": "... i {{count}} więcej.", + "print_landscape": "Podczas eksportowania do formatu PDF zmienia orientację strony na poziomą zamiast pionowej.", + "print_page_size": "Podczas eksportowania do formatu PDF zmienia rozmiar strony. Obsługiwane wartości: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.", + "color_type": "Kolor" }, "import": { "importIntoNote": "Importuj do notatki", @@ -268,7 +396,13 @@ "description": "Skonfiguruj, które tagi HTML mają zostać zachowane podczas importowania notatek. Tagi spoza tej listy zostaną usunięte podczas importu. Niektóre tagi (np. „script”) są zawsze usuwane ze względów bezpieczeństwa.", "placeholder": "Wpisz tagi HTML, jedna na linijkę", "reset_button": "Zresetuj do domyślnej listy" - } + }, + "explodeArchivesTooltip": "Jeśli ta opcja jest zaznaczona, Trilium odczyta pliki .zip, .enex i .opml i utworzy notatki z plików wewnątrz tych archiwów. Jeśli opcja nie jest zaznaczona, Trilium dołączy same archiwa do notatki.", + "explodeArchives": "Czytaj zawartość archiwów .zip, .enex i .opml.", + "shrinkImagesTooltip": "

Jeśli zaznaczysz tę opcję, Trilium spróbuje zmniejszyć importowane obrazy poprzez skalowanie i optymalizację, co może wpłynąć na postrzeganą jakość obrazu. Jeśli opcja nie jest zaznaczona, obrazy zostaną zaimportowane bez zmian.

Nie dotyczy to importów .zip z metadanymi, ponieważ zakłada się, że te pliki są już zoptymalizowane.

", + "textImportedAsText": "Importuj HTML, Markdown i TXT jako notatki tekstowe, jeśli nie jest to jasne z metadanych", + "codeImportedAsCode": "Importuj rozpoznane pliki kodu (np. .json) jako notatki kodu, jeśli nie jest to jasne z metadanych", + "replaceUnderscoresWithSpaces": "Zastąp podkreślenia spacjami w nazwach importowanych notatek" }, "image_properties": { "title": "Obraz", @@ -353,7 +487,12 @@ "search_parameters": "Parametry wyszukiwania", "unknown_search_option": "Nieznana opcja wyszukiwania {{searchOptionName}}", "search_note_saved": "Wyszukiwana notatka została zapisana do {{- notePathTitle}}", - "actions_executed": "Akcja została wykonana." + "actions_executed": "Akcja została wykonana.", + "debug": "debugowanie", + "debug_description": "Debugowanie wydrukuje dodatkowe informacje debugowania w konsoli, aby pomóc w debugowaniu złożonych zapytań", + "action": "akcja", + "search_button": "Szukaj", + "search_execute": "Szukaj i wykonaj akcje" }, "similar_notes": { "title": "Podobne notatki", @@ -375,10 +514,12 @@ }, "debug": { "debug": "Debuguj", - "debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań." + "debug_info": "Debugowanie wyświetli dodatkowe informacje debugowania w konsoli, aby ułatwić debugowanie złożonych zapytań.", + "access_info": "Aby uzyskać dostęp do informacji debugowania, wykonaj zapytanie i kliknij \"Pokaż logi backendu\" w lewym górnym rogu." }, "fast_search": { - "fast_search": "Szybkie wyszukiwanie" + "fast_search": "Szybkie wyszukiwanie", + "description": "Opcja szybkiego wyszukiwania wyłącza pełnotekstowe przeszukiwanie zawartości notatek, co może przyspieszyć wyszukiwanie w dużych bazach danych." }, "file_properties": { "download": "Pobierz", @@ -386,13 +527,21 @@ "upload_new_revision": "Wgraj nową wersję", "upload_success": "Nowa wersja pliku nie została wysłana.", "upload_failed": "Wysyłanie nowej wersji pliku się nie udało.", - "title": "Plik" + "title": "Plik", + "note_id": "ID notatki", + "original_file_name": "Oryginalna nazwa pliku", + "file_type": "Typ pliku", + "file_size": "Rozmiar pliku" }, "include_note": { "label_note": "Notatka", "placeholder_search": "szukaj notatki po jej nazwie", "dialog_title": "Dołącz notatkę", - "button_include": "Dołącz notatkę" + "button_include": "Dołącz notatkę", + "box_size_prompt": "Rozmiar okna dołączonej notatki:", + "box_size_small": "mały (~ 10 linii)", + "box_size_medium": "średni (~ 30 linii)", + "box_size_full": "pełny (okno pokazuje cały tekst)" }, "info": { "closeButton": "Zamknij", @@ -406,10 +555,12 @@ "markdown_import": { "dialog_title": "Zaimportuj Markdown", "import_button": "Import", - "import_success": "Treść Markdown została zaimportowana do dokumentu." + "import_success": "Treść Markdown została zaimportowana do dokumentu.", + "modal_body_text": "Ze względu na piaskownicę przeglądarki nie jest możliwe bezpośrednie odczytanie schowka z JavaScript. Wklej Markdown do importu do poniższego pola tekstowego i kliknij przycisk Importuj" }, "limit": { - "limit": "Limit" + "limit": "Limit", + "take_first_x_results": "Weź tylko pierwsze X określonych wyników." }, "link_context_menu": { "open_note_in_popup": "Szybka edycja", @@ -418,7 +569,13 @@ "open_note_in_new_window": "Otwórz notatkę w nowym oknie" }, "electron_integration": { - "desktop-application": "Aplikacja desktopowa" + "desktop-application": "Aplikacja desktopowa", + "native-title-bar": "Natywny pasek tytułu", + "native-title-bar-description": "Dla systemów Windows i macOS wyłączenie natywnego paska tytułu sprawia, że aplikacja wygląda bardziej kompaktowo. W systemie Linux włączenie natywnego paska tytułu lepiej integruje się z resztą systemu.", + "background-effects": "Włącz efekty tła (tylko Windows 11)", + "background-effects-description": "Efekt Mica dodaje rozmyte, stylowe tło do okien aplikacji, tworząc głębię i nowoczesny wygląd. \"Natywny pasek tytułu\" musi być wyłączony.", + "restart-app-button": "Uruchom ponownie aplikację, aby zobaczyć zmiany", + "zoom-factor": "Współczynnik powiększenia" }, "electron_context_menu": { "cut": "Wytnij", @@ -426,7 +583,8 @@ "copy-link": "Kopiuj link", "paste": "Wklej", "paste-as-plain-text": "Wklej jako plain text", - "search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}" + "search_online": "Szukaj \"{{term}}\" za pomocą {{searchEngine}}", + "add-term-to-dictionary": "Dodaj \"{{term}}\" do słownika" }, "image_context_menu": { "copy_reference_to_clipboard": "Skopiuj odnośnik do schowka", @@ -435,7 +593,10 @@ "note_autocomplete": { "clear-text-field": "Wyczyść pole tekstowe", "show-recent-notes": "Pokaż ostatnie notatki", - "full-text-search": "Wyszukiwanie pełnotekstowe" + "full-text-search": "Wyszukiwanie pełnotekstowe", + "search-for": "Szukaj \"{{term}}\"", + "create-note": "Utwórz i połącz notatkę podrzędną \"{{term}}\"", + "insert-external-link": "Wstaw link zewnętrzny do \"{{term}}\"" }, "note_tooltip": { "note-has-been-deleted": "Notatka została usunięta.", @@ -448,7 +609,15 @@ "days": "dni" }, "share": { - "title": "Ustawienia udostępniania" + "title": "Ustawienia udostępniania", + "redirect_bare_domain": "Przekieruj gołą domenę na stronę udostępniania", + "redirect_bare_domain_description": "Przekieruj anonimowych użytkowników na stronę udostępniania zamiast pokazywać stronę logowania", + "show_login_link": "Pokaż link logowania w motywie udostępniania", + "show_login_link_description": "Dodaj link logowania do stopki strony udostępniania", + "check_share_root": "Sprawdź status korzenia udostępniania", + "share_root_found": "Notatka korzenia udostępniania '{{noteTitle}}' jest gotowa", + "share_root_not_found": "Nie znaleziono notatki z etykietą #shareRoot", + "share_root_not_shared": "Notatka '{{noteTitle}}' ma etykietę #shareRoot, ale nie jest udostępniona" }, "tasks": { "due": { @@ -499,7 +668,11 @@ "editorfeatures": { "title": "Cechy", "emoji_completion_enabled": "Włącz autouzupełnianie Emoji", - "note_completion_enabled": "Włącz autouzupełnianie notatki" + "note_completion_enabled": "Włącz autouzupełnianie notatki", + "emoji_completion_description": "Jeśli włączone, emoji można łatwo wstawiać do tekstu, wpisując `:`, a następnie nazwę emoji.", + "note_completion_description": "Jeśli włączone, linki do notatek można tworzyć, wpisując `@`, a następnie tytuł notatki.", + "slash_commands_enabled": "Włącz polecenia z ukośnikiem", + "slash_commands_description": "Jeśli włączone, polecenia edycji, takie jak wstawianie podziałów wierszy lub nagłówków, można przełączać, wpisując `/`." }, "table_view": { "new-row": "Nowy wiersz", @@ -536,23 +709,34 @@ }, "move_to": { "dialog_title": "Przenieś notatki do ...", - "notes_to_move": "Notatki do przeniesienia" + "notes_to_move": "Notatki do przeniesienia", + "target_parent_note": "Docelowa notatka nadrzędna", + "search_placeholder": "szukaj notatki po jej nazwie", + "move_button": "Przenieś do wybranej notatki", + "error_no_path": "Brak ścieżki do przeniesienia.", + "move_success_message": "Wybrane notatki zostały przeniesione do " }, "note_type_chooser": { "modal_title": "Wybierz typ notatki", "modal_body": "Wybierz typ / szablon notatki dla nowej notatki:", "templates": "Szablony", - "builtin_templates": "Wbudowane szablony" + "builtin_templates": "Wbudowane szablony", + "change_path_prompt": "Zmień, gdzie utworzyć nową notatkę:", + "search_placeholder": "wyszukaj ścieżkę po nazwie (domyślna, jeśli pusta)" }, "password_not_set": { - "title": "Hasło nie zostało ustawione" + "title": "Hasło nie zostało ustawione", + "body1": "Chronione notatki są szyfrowane hasłem użytkownika, ale hasło nie zostało jeszcze ustawione.", + "body2": "Aby móc chronić notatki, kliknij poniższy przycisk, aby otworzyć okno dialogowe Opcje i ustawić hasło.", + "go_to_password_options": "Przejdź do opcji hasła" }, "add_relation": { "add_relation": "Dodaj powiązanie", "relation_name": "nazwa powiązania", "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", "to": "do", - "target_note": "docelowa notatka" + "target_note": "docelowa notatka", + "create_relation_on_all_matched_notes": "We wszystkich dopasowanych notatkach utwórz daną relację." }, "ai_llm": { "actions": "Akcje", @@ -629,6 +813,1276 @@ "disabled_providers": "Wyłączeni dostawcy", "remove_provider": "Usuń dostawcę z wyszukiwania", "restore_provider": "Przywróć dostawcę do wyszukiwania", - "similarity_threshold": "Próg podobieństwa" + "similarity_threshold": "Próg podobieństwa", + "not_started": "Nie rozpoczęto", + "title": "Ustawienia AI", + "processed_notes": "Przetworzone notatki", + "total_notes": "Wszystkie notatki", + "progress": "Postęp", + "similarity_threshold_description": "Minimalny wynik podobieństwa (0-1) dla notatek, które mają być uwzględnione w kontekście zapytań LLM", + "reprocess_index": "Odbuduj indeks wyszukiwania", + "reprocessing_index": "Odbudowywanie...", + "reprocess_index_started": "Optymalizacja indeksu wyszukiwania rozpoczęta w tle", + "reprocess_index_error": "Błąd odbudowywania indeksu wyszukiwania", + "index_rebuild_progress": "Postęp odbudowy indeksu", + "index_rebuilding": "Optymalizowanie indeksu ({{percentage}}%)", + "index_rebuild_complete": "Optymalizacja indeksu zakończona", + "index_rebuild_status_error": "Błąd sprawdzania statusu odbudowy indeksu", + "never": "Nigdy", + "processing": "Przetwarzanie ({{percentage}}%)", + "incomplete": "Niekompletne ({{percentage}}%)", + "complete": "Ukończono (100%)", + "refreshing": "Odświeżanie...", + "auto_refresh_notice": "Automatyczne odświeżanie co {{seconds}} sekund", + "note_queued_for_retry": "Notatka zakolejkowana do ponownej próby", + "failed_to_retry_note": "Nie udało się ponowić próby dla notatki", + "all_notes_queued_for_retry": "Wszystkie nieudane notatki zakolejkowane do ponownej próby", + "failed_to_retry_all": "Nie udało się ponowić próby dla notatek", + "ai_settings": "Ustawienia AI", + "api_key_tooltip": "Klucz API do uzyskiwania dostępu do usługi", + "empty_key_warning": { + "anthropic": "Klucz API Anthropic jest pusty. Wprowadź prawidłowy klucz API.", + "openai": "Klucz API OpenAI jest pusty. Wprowadź prawidłowy klucz API.", + "voyage": "Klucz API Voyage jest pusty. Wprowadź prawidłowy klucz API.", + "ollama": "Klucz API Ollama jest pusty. Wprowadź prawidłowy klucz API." + }, + "agent": { + "processing": "Przetwarzanie...", + "thinking": "Myślenie...", + "loading": "Ładowanie...", + "generating": "Generowanie..." + }, + "name": "AI", + "openai": "OpenAI", + "use_enhanced_context": "Użyj rozszerzonego kontekstu", + "enhanced_context_description": "Dostarcza AI więcej kontekstu z notatki i jej powiązanych notatek dla lepszych odpowiedzi", + "show_thinking": "Pokaż proces myślowy", + "show_thinking_description": "Pokaż proces myślowy AI", + "enter_message": "Wpisz swoją wiadomość...", + "error_contacting_provider": "Błąd kontaktu z dostawcą AI. Sprawdź ustawienia i połączenie internetowe.", + "error_generating_response": "Błąd generowania odpowiedzi AI", + "notes_indexed_0": "{{ count }} notatka zaindeksowana", + "notes_indexed_1": "{{ count }} notatek zaindeksowanych", + "notes_indexed_2": "", + "sources": "Źródła", + "start_indexing": "Rozpocznij indeksowanie", + "use_advanced_context": "Użyj zaawansowanego kontekstu", + "ollama_no_url": "Ollama nie jest skonfigurowana. Wprowadź prawidłowy URL.", + "chat": { + "root_note_title": "Czaty AI", + "root_note_content": "Ta notatka zawiera zapisane rozmowy na czacie AI.", + "new_chat_title": "Nowy czat", + "create_new_ai_chat": "Utwórz nowy czat AI" + }, + "create_new_ai_chat": "Utwórz nowy czat AI", + "configuration_warnings": "Występują problemy z konfiguracją AI. Sprawdź ustawienia.", + "experimental_warning": "Funkcja LLM jest obecnie eksperymentalna - zostałeś ostrzeżony.", + "selected_provider": "Wybrany dostawca", + "selected_provider_description": "Wybierz dostawcę AI dla funkcji czatu i uzupełniania", + "select_model": "Wybierz model...", + "select_provider": "Wybierz dostawcę...", + "ai_enabled": "Funkcje AI włączone", + "ai_disabled": "Funkcje AI wyłączone", + "no_models_found_online": "Nie znaleziono modeli. Sprawdź swój klucz API i ustawienia.", + "no_models_found_ollama": "Nie znaleziono modeli Ollama. Sprawdź, czy Ollama jest uruchomiona.", + "error_fetching": "Błąd pobierania modeli: {{error}}" + }, + "prompt": { + "title": "Monit", + "ok": "OK", + "defaultTitle": "Monit" + }, + "protected_session_password": { + "modal_title": "Sesja chroniona", + "help_title": "Pomoc dotycząca notatek chronionych", + "close_label": "Zamknij", + "form_label": "Aby kontynuować żądaną akcję, musisz rozpocząć sesję chronioną, wprowadzając hasło:", + "start_button": "Rozpocznij sesję chronioną" + }, + "recent_changes": { + "title": "Ostatnie zmiany", + "erase_notes_button": "Wymaż teraz usunięte notatki", + "deleted_notes_message": "Usunięte notatki zostały wymazane.", + "no_changes_message": "Brak zmian...", + "undelete_link": "przywróć", + "confirm_undelete": "Czy chcesz przywrócić tę notatkę i jej podnotatki?" + }, + "revisions": { + "note_revisions": "Wersje notatki", + "delete_all_revisions": "Usuń wszystkie wersje tej notatki", + "delete_all_button": "Usuń wszystkie wersje", + "help_title": "Pomoc dotycząca wersji notatki", + "revision_last_edited": "Ta wersja była ostatnio edytowana {{date}}", + "confirm_delete_all": "Czy chcesz usunąć wszystkie wersje tej notatki?", + "no_revisions": "Brak wersji dla tej notatki...", + "restore_button": "Przywróć", + "diff_on": "Pokaż różnice", + "diff_off": "Pokaż zawartość", + "diff_on_hint": "Kliknij, aby pokazać różnice w źródle notatki", + "diff_off_hint": "Kliknij, aby pokazać zawartość notatki", + "diff_not_available": "Różnice nie są dostępne.", + "confirm_restore": "Czy chcesz przywrócić tę wersję? Spowoduje to nadpisanie bieżącego tytułu i zawartości notatki tą wersją.", + "delete_button": "Usuń", + "confirm_delete": "Czy chcesz usunąć tę wersję?", + "revisions_deleted": "Wersje notatki zostały usunięte.", + "revision_restored": "Wersja notatki została przywrócona.", + "revision_deleted": "Wersja notatki została usunięta.", + "snapshot_interval": "Interwał migawki wersji notatki: {{seconds}}s.", + "maximum_revisions": "Limit migawek wersji notatki: {{number}}.", + "settings": "Ustawienia wersji notatki", + "download_button": "Pobierz", + "mime": "MIME: ", + "file_size": "Rozmiar pliku:", + "preview": "Podgląd:", + "preview_not_available": "Podgląd nie jest dostępny dla tego typu notatki." + }, + "sort_child_notes": { + "sort_children_by": "Sortuj elementy podrzędne według...", + "sorting_criteria": "Kryteria sortowania", + "title": "tytuł", + "date_created": "data utworzenia", + "date_modified": "data modyfikacji", + "sorting_direction": "Kierunek sortowania", + "ascending": "rosnąco", + "descending": "malejąco", + "folders": "Foldery", + "sort_folders_at_top": "sortuj foldery na górze", + "natural_sort": "Sortowanie naturalne", + "sort_with_respect_to_different_character_sorting": "sortuj z uwzględnieniem różnych zasad sortowania znaków i zestawień w różnych językach lub regionach.", + "natural_sort_language": "Język sortowania naturalnego", + "the_language_code_for_natural_sort": "Kod języka dla sortowania naturalnego, np. \"zh-CN\" dla chińskiego.", + "sort": "Sortuj" + }, + "upload_attachments": { + "upload_attachments_to_note": "Prześlij załączniki do notatki", + "choose_files": "Wybierz pliki", + "files_will_be_uploaded": "Pliki zostaną przesłane jako załączniki do {{noteTitle}}", + "options": "Opcje", + "shrink_images": "Zmniejsz obrazy", + "upload": "Prześlij", + "tooltip": "Jeśli zaznaczysz tę opcję, Trilium spróbuje zmniejszyć przesyłane obrazy poprzez skalowanie i optymalizację, co może wpłynąć na postrzeganą jakość obrazu. Jeśli opcja nie jest zaznaczona, obrazy zostaną przesłane bez zmian." + }, + "attribute_editor": { + "help_text_body1": "Aby dodać etykietę, po prostu wpisz np. #rock lub jeśli chcesz dodać również wartość, to np. #year = 2020", + "help_text_body2": "Dla relacji wpisz ~author = @, co powinno wywołać autouzupełnianie, w którym możesz wyszukać żądaną notatkę.", + "help_text_body3": "Alternatywnie możesz dodać etykietę i relację za pomocą przycisku + po prawej stronie.", + "save_attributes": "Zapisz atrybuty ", + "add_a_new_attribute": "Dodaj nowy atrybut", + "add_new_label": "Dodaj nową etykietę ", + "add_new_relation": "Dodaj nową relację ", + "add_new_label_definition": "Dodaj nową definicję etykiety", + "add_new_relation_definition": "Dodaj nową definicję relacji", + "placeholder": "Wpisz tutaj etykiety i relacje" + }, + "abstract_bulk_action": { + "remove_this_search_action": "Usuń tę akcję wyszukiwania" + }, + "execute_script": { + "execute_script": "Wykonaj skrypt", + "help_text": "Możesz wykonywać proste skrypty na dopasowanych notatkach.", + "example_1": "Na przykład, aby dołączyć ciąg znaków do tytułu notatki, użyj tego małego skryptu:", + "example_2": "Bardziej złożonym przykładem byłoby usunięcie wszystkich atrybutów dopasowanej notatki:" + }, + "delete_label": { + "delete_label": "Usuń etykietę", + "label_name_placeholder": "nazwa etykiety", + "label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "rename_label": { + "rename_label": "Zmień nazwę etykiety", + "rename_label_from": "Zmień nazwę etykiety z", + "old_name_placeholder": "stara nazwa", + "to": "Na", + "new_name_placeholder": "nowa nazwa", + "name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "update_label_value": { + "update_label_value": "Zaktualizuj wartość etykiety", + "label_name_placeholder": "nazwa etykiety", + "label_name_title": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", + "to_value": "do wartości", + "new_value_placeholder": "nowa wartość", + "help_text": "We wszystkich dopasowanych notatkach zmień wartość istniejącej etykiety.", + "help_text_note": "Możesz również wywołać tę metodę bez wartości, w takim przypadku etykieta zostanie przypisana do notatki bez wartości." + }, + "delete_note": { + "delete_note": "Usuń notatkę", + "delete_matched_notes": "Usuń dopasowane notatki", + "delete_matched_notes_description": "Spowoduje to usunięcie dopasowanych notatek.", + "undelete_notes_instruction": "Po usunięciu można je przywrócić z okna dialogowego Ostatnie zmiany.", + "erase_notes_instruction": "Aby trwale usunąć notatki, możesz po usunięciu przejść do Opcje -> Inne i kliknąć przycisk \"Wymaż teraz usunięte notatki\"." + }, + "delete_revisions": { + "delete_note_revisions": "Usuń wersje notatek", + "all_past_note_revisions": "Wszystkie przeszłe wersje dopasowanych notatek zostaną usunięte. Sama notatka zostanie w pełni zachowana. Innymi słowy, historia notatki zostanie usunięta." + }, + "move_note": { + "move_note": "Przenieś notatkę", + "to": "do", + "target_parent_note": "docelowa notatka nadrzędna", + "on_all_matched_notes": "We wszystkich dopasowanych notatkach", + "move_note_new_parent": "przenieś notatkę do nowego rodzica, jeśli notatka ma tylko jednego rodzica (tj. stara gałąź jest usuwana, a nowa gałąź do nowego rodzica jest tworzona)", + "clone_note_new_parent": "sklonuj notatkę do nowego rodzica, jeśli notatka ma wiele klonów/gałęzi (nie jest jasne, która gałąź powinna zostać usunięta)", + "nothing_will_happen": "nic się nie stanie, jeśli notatka nie może być przeniesiona do notatki docelowej (tj. spowodowałoby to cykl w drzewie)" + }, + "rename_note": { + "rename_note": "Zmień nazwę notatki", + "rename_note_title_to": "Zmień tytuł notatki na", + "new_note_title": "nowy tytuł notatki", + "click_help_icon": "Kliknij ikonę pomocy po prawej stronie, aby zobaczyć wszystkie opcje", + "evaluated_as_js_string": "Podana wartość jest oceniana jako ciąg znaków JavaScript i dlatego może być wzbogacona o dynamiczną treść za pomocą wstrzykniętej zmiennej note (notatka, której nazwa jest zmieniana). Przykłady:", + "example_note": "Notatka - wszystkie dopasowane notatki mają zmienioną nazwę na 'Notatka'", + "example_new_title": "NOWY: ${note.title} - tytuły dopasowanych notatek są poprzedzone prefiksem 'NOWY: '", + "example_date_prefix": "${note.dateCreatedObj.format('MM-DD:')}: ${note.title} - dopasowane notatki są poprzedzone prefiksem miesiąc-dzień utworzenia notatki", + "api_docs": "Zobacz dokumentację API dla note i jej właściwości dateCreatedObj / utcDateCreatedObj, aby uzyskać szczegółowe informacje." + }, + "delete_relation": { + "delete_relation": "Usuń relację", + "relation_name": "nazwa relacji", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "rename_relation": { + "rename_relation": "Zmień nazwę relacji", + "rename_relation_from": "Zmień nazwę relacji z", + "old_name": "stara nazwa", + "to": "Na", + "new_name": "nowa nazwa", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek." + }, + "update_relation_target": { + "update_relation": "Zaktualizuj relację", + "relation_name": "nazwa relacji", + "allowed_characters": "Dozwolone są znaki alfanumeryczne, podkreślenie i dwukropek.", + "to": "do", + "target_note": "notatka docelowa", + "on_all_matched_notes": "We wszystkich dopasowanych notatkach", + "change_target_note": "zmień notatkę docelową istniejącej relacji", + "update_relation_target": "Zaktualizuj cel relacji" + }, + "attachments_actions": { + "open_externally": "Otwórz zewnętrznie", + "open_externally_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "open_custom": "Otwórz niestandardowo", + "open_custom_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "download": "Pobierz", + "rename_attachment": "Zmień nazwę załącznika", + "upload_new_revision": "Prześlij nową wersję", + "copy_link_to_clipboard": "Kopiuj link do schowka", + "convert_attachment_into_note": "Konwertuj załącznik na notatkę", + "delete_attachment": "Usuń załącznik", + "upload_success": "Nowa wersja załącznika została przesłana.", + "upload_failed": "Przesyłanie nowej wersji załącznika nie powiodło się.", + "open_externally_detail_page": "Otwieranie załącznika zewnętrznie jest dostępne tylko ze strony szczegółów, najpierw kliknij szczegóły załącznika i powtórz akcję.", + "open_custom_client_only": "Niestandardowe otwieranie załączników można wykonać tylko z klienta stacjonarnego.", + "delete_confirm": "Czy na pewno chcesz usunąć załącznik '{{title}}'?", + "delete_success": "Załącznik '{{title}}' został usunięty.", + "convert_confirm": "Czy na pewno chcesz przekonwertować załącznik '{{title}}' na osobną notatkę?", + "convert_success": "Załącznik '{{title}}' został przekonwertowany na notatkę.", + "enter_new_name": "Wprowadź nową nazwę załącznika" + }, + "calendar": { + "mon": "Pon", + "tue": "Wt", + "wed": "Śr", + "thu": "Czw", + "fri": "Pt", + "sat": "Sob", + "sun": "Niedz", + "cannot_find_day_note": "Nie można znaleźć notatki dziennej", + "cannot_find_week_note": "Nie można znaleźć notatki tygodniowej", + "january": "Styczeń", + "february": "Luty", + "march": "Marzec", + "april": "Kwiecień", + "may": "Maj", + "june": "Czerwiec", + "july": "Lipiec", + "august": "Sierpień", + "september": "Wrzesień", + "october": "Październik", + "november": "Listopad", + "december": "Grudzień", + "week": "Tydzień", + "week_previous": "Poprzedni tydzień", + "week_next": "Następny tydzień", + "month": "Miesiąc", + "month_previous": "Poprzedni miesiąc", + "month_next": "Następny miesiąc", + "year": "Rok", + "year_previous": "Poprzedni rok", + "year_next": "Następny rok", + "list": "Lista", + "today": "Dzisiaj" + }, + "close_pane_button": { + "close_this_pane": "Zamknij ten panel" + }, + "create_pane_button": { + "create_new_split": "Utwórz nowy podział" + }, + "edit_button": { + "edit_this_note": "Edytuj tę notatkę" + }, + "show_toc_widget_button": { + "show_toc": "Pokaż spis treści" + }, + "show_highlights_list_widget_button": { + "show_highlights_list": "Pokaż listę wyróżnień" + }, + "global_menu": { + "menu": "Menu", + "options": "Opcje", + "open_new_window": "Otwórz nowe okno", + "switch_to_mobile_version": "Przełącz na wersję mobilną", + "switch_to_desktop_version": "Przełącz na wersję stacjonarną", + "zoom": "Powiększenie", + "toggle_fullscreen": "Przełącz pełny ekran", + "zoom_out": "Pomniejsz", + "reset_zoom_level": "Zresetuj poziom powiększenia", + "zoom_in": "Powiększ", + "configure_launchbar": "Skonfiguruj pasek uruchamiania", + "show_shared_notes_subtree": "Pokaż poddrzewo udostępnionych notatek", + "advanced": "Zaawansowane", + "open_dev_tools": "Otwórz narzędzia deweloperskie", + "open_sql_console": "Otwórz konsolę SQL", + "open_sql_console_history": "Otwórz historię konsoli SQL", + "open_search_history": "Otwórz historię wyszukiwania", + "show_backend_log": "Pokaż logi backendu", + "reload_hint": "Przeładowanie może pomóc w niektórych problemach wizualnych bez ponownego uruchamiania całej aplikacji.", + "reload_frontend": "Przeładuj frontend", + "show_hidden_subtree": "Pokaż ukryte poddrzewo", + "show_help": "Pokaż pomoc", + "about": "O notatkach Trilium", + "logout": "Wyloguj", + "show-cheatsheet": "Pokaż ściągawkę", + "toggle-zen-mode": "Tryb Zen", + "new-version-available": "Dostępna nowa aktualizacja", + "download-update": "Pobierz wersję {{latestVersion}}" + }, + "zen_mode": { + "button_exit": "Wyjdź z trybu Zen" + }, + "sync_status": { + "unknown": "

Status synchronizacji będzie znany po rozpoczęciu następnej próby synchronizacji.

Kliknij, aby wywołać synchronizację teraz.

", + "connected_with_changes": "

Połączono z serwerem synchronizacji.
Istnieją pewne oczekujące zmiany, które należy zsynchronizować.

Kliknij, aby wywołać synchronizację.

", + "connected_no_changes": "

Połączono z serwerem synchronizacji.
Wszystkie zmiany zostały już zsynchronizowane.

Kliknij, aby wywołać synchronizację.

", + "disconnected_with_changes": "

Nawiązanie połączenia z serwerem synchronizacji nie powiodło się.
Istnieją pewne oczekujące zmiany, które należy zsynchronizować.

Kliknij, aby wywołać synchronizację.

", + "disconnected_no_changes": "

Nawiązanie połączenia z serwerem synchronizacji nie powiodło się.
Wszystkie znane zmiany zostały zsynchronizowane.

Kliknij, aby wywołać synchronizację.

", + "in_progress": "Synchronizacja z serwerem jest w toku." + }, + "left_pane_toggle": { + "show_panel": "Pokaż panel", + "hide_panel": "Ukryj panel" + }, + "move_pane_button": { + "move_left": "Przesuń w lewo", + "move_right": "Przesuń w prawo" + }, + "note_actions": { + "convert_into_attachment": "Konwertuj na załącznik", + "re_render_note": "Wyrenderuj ponownie notatkę", + "search_in_note": "Szukaj w notatce", + "note_source": "Źródło notatki", + "note_attachments": "Załączniki notatki", + "open_note_externally": "Otwórz notatkę zewnętrznie", + "open_note_externally_title": "Plik zostanie otwarty w zewnętrznej aplikacji i będzie obserwowany pod kątem zmian. Następnie będziesz mógł przesłać zmodyfikowaną wersję z powrotem do Trilium.", + "open_note_custom": "Otwórz notatkę niestandardowo", + "import_files": "Importuj pliki", + "export_note": "Eksportuj notatkę", + "delete_note": "Usuń notatkę", + "print_note": "Drukuj notatkę", + "save_revision": "Zapisz wersję", + "convert_into_attachment_failed": "Konwersja notatki '{{title}}' nie powiodła się.", + "convert_into_attachment_successful": "Notatka '{{title}}' została przekonwertowana na załącznik.", + "convert_into_attachment_prompt": "Czy na pewno chcesz przekonwertować notatkę '{{title}}' na załącznik notatki nadrzędnej?", + "print_pdf": "Eksportuj jako PDF..." + }, + "onclick_button": { + "no_click_handler": "Widżet przycisku '{{componentId}}' nie ma zdefiniowanego obsługi kliknięcia" + }, + "protected_session_status": { + "active": "Sesja chroniona jest aktywna. Kliknij, aby opuścić sesję chronioną.", + "inactive": "Kliknij, aby wejść w sesję chronioną" + }, + "revisions_button": { + "note_revisions": "Wersje notatki" + }, + "update_available": { + "update_available": "Dostępna aktualizacja" + }, + "note_launcher": { + "this_launcher_doesnt_define_target_note": "Ten program uruchamiający nie definiuje notatki docelowej." + }, + "code_buttons": { + "execute_button_title": "Wykonaj skrypt", + "trilium_api_docs_button_title": "Otwórz dokumentację API Trilium", + "save_to_note_button_title": "Zapisz do notatki", + "opening_api_docs_message": "Otwieranie dokumentacji API...", + "sql_console_saved_message": "Notatka konsoli SQL została zapisana w {{note_path}}" + }, + "copy_image_reference_button": { + "button_title": "Kopiuj odniesienie do obrazu do schowka, można je wkleić do notatki tekstowej." + }, + "hide_floating_buttons_button": { + "button_title": "Ukryj przyciski" + }, + "show_floating_buttons_button": { + "button_title": "Pokaż przyciski" + }, + "svg_export_button": { + "button_title": "Eksportuj diagram jako SVG" + }, + "relation_map_buttons": { + "create_child_note_title": "Utwórz nową notatkę podrzędną i dodaj ją do tej mapy relacji", + "reset_pan_zoom_title": "Zresetuj przesuwanie i powiększanie do początkowych współrzędnych i powiększenia", + "zoom_in_title": "Powiększ", + "zoom_out_title": "Pomniejsz" + }, + "zpetne_odkazy": { + "backlink": "{{count}} Backlink", + "backlinks": "{{count}} Backlinków", + "relation": "relacja" + }, + "mobile_detail_menu": { + "insert_child_note": "Wstaw notatkę podrzędną", + "delete_this_note": "Usuń tę notatkę", + "note_revisions": "Wersje notatki", + "error_cannot_get_branch_id": "Nie można uzyskać branchId dla notePath '{{notePath}}'", + "error_unrecognized_command": "Nierozpoznane polecenie {{command}}" + }, + "note_icon": { + "change_note_icon": "Zmień ikonę notatki", + "category": "Kategoria:", + "search": "Szukaj:", + "reset-default": "Zresetuj do domyślnej ikony" + }, + "basic_properties": { + "note_type": "Typ notatki", + "editable": "Edytowalny", + "basic_properties": "Podstawowe właściwości", + "language": "Język", + "configure_code_notes": "Skonfiguruj notatki kodowe..." + }, + "edited_notes": { + "no_edited_notes_found": "Brak edytowanych notatek tego dnia...", + "title": "Edytowane notatki", + "deleted": "(usunięto)" + }, + "include_archived_notes": { + "include_archived_notes": "Uwzględnij zarchiwizowane notatki" + }, + "order_by": { + "order_by": "Sortuj według", + "relevancy": "Trafność (domyślnie)", + "title": "Tytuł", + "date_created": "Data utworzenia", + "date_modified": "Data ostatniej modyfikacji", + "content_size": "Rozmiar zawartości notatki", + "content_and_attachments_size": "Rozmiar zawartości notatki wraz z załącznikami", + "content_and_attachments_and_revisions_size": "Rozmiar zawartości notatki wraz z załącznikami i wersjami", + "revision_count": "Liczba wersji", + "children_count": "Liczba notatek podrzędnych", + "parent_count": "Liczba klonów", + "owned_label_count": "Liczba etykiet", + "owned_relation_count": "Liczba relacji", + "target_relation_count": "Liczba relacji wskazujących na notatkę", + "random": "Kolejność losowa", + "asc": "Rosnąco (domyślnie)", + "desc": "Malejąco" + }, + "search_script": { + "title": "Skrypt wyszukiwania:", + "placeholder": "szukaj notatki po jej nazwie", + "description1": "Skrypt wyszukiwania pozwala zdefiniować wyniki wyszukiwania poprzez uruchomienie skryptu. Zapewnia to maksymalną elastyczność, gdy standardowe wyszukiwanie nie wystarcza.", + "description2": "Skrypt wyszukiwania musi być typu \"kod\" i podtypu \"JavaScript backend\". Skrypt musi zwrócić tablicę noteIds lub notatek.", + "example_title": "Zobacz ten przykład:", + "example_code": "// 1. wstępne filtrowanie za pomocą standardowego wyszukiwania\nconst candidateNotes = api.searchForNotes(\"#journal\"); \n\n// 2. zastosowanie niestandardowych kryteriów wyszukiwania\nconst matchedNotes = candidateNotes\n .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;", + "note": "Pamiętaj, że skrypt wyszukiwania i ciąg wyszukiwania nie mogą być łączone ze sobą." + }, + "search_string": { + "title_column": "Ciąg wyszukiwania:", + "placeholder": "słowa kluczowe pełnotekstowe, #tag = wartość...", + "search_syntax": "Składnia wyszukiwania", + "also_see": "zobacz również", + "complete_help": "pełna pomoc dotycząca składni wyszukiwania", + "full_text_search": "Wpisz dowolny tekst do wyszukiwania pełnotekstowego", + "label_abc": "zwraca notatki z etykietą abc", + "label_year": "dopasowuje notatki z etykietą rok o wartości 2019", + "label_rock_pop": "dopasowuje notatki, które mają zarówno etykiety rock, jak i pop", + "label_rock_or_pop": "musi być obecna tylko jedna z etykiet", + "label_year_comparison": "porównanie numeryczne (również >, >=, <).", + "label_date_created": "notatki utworzone w ostatnim miesiącu", + "error": "Błąd wyszukiwania: {{error}}", + "search_prefix": "Szukaj:" + }, + "attachment_detail": { + "open_help_page": "Otwórz stronę pomocy dotyczącą załączników", + "owning_note": "Notatka nadrzędna: ", + "you_can_also_open": ", możesz również otworzyć ", + "list_of_all_attachments": "Listę wszystkich załączników", + "attachment_deleted": "Ten załącznik został usunięty." + }, + "attachment_list": { + "open_help_page": "Otwórz stronę pomocy dotyczącą załączników", + "owning_note": "Notatka nadrzędna: ", + "upload_attachments": "Prześlij załączniki", + "no_attachments": "Ta notatka nie ma załączników." + }, + "book": { + "no_children_help": "Ta kolekcja nie ma żadnych notatek podrzędnych, więc nie ma nic do wyświetlenia. Zobacz wiki, aby uzyskać szczegółowe informacje.", + "drag_locked_title": "Zablokowano do edycji", + "drag_locked_message": "Przeciąganie niedozwolone, ponieważ kolekcja jest zablokowana do edycji." + }, + "editable_code": { + "placeholder": "Wpisz tutaj treść swojej notatki kodowej..." + }, + "editable_text": { + "placeholder": "Wpisz tutaj treść swojej notatki..." + }, + "empty": { + "open_note_instruction": "Otwórz notatkę, wpisując jej tytuł w poniższe pole lub wybierz notatkę z drzewa.", + "search_placeholder": "szukaj notatki po jej nazwie", + "enter_workspace": "Wejdź do obszaru roboczego {{title}}" + }, + "file": { + "file_preview_not_available": "Podgląd pliku nie jest dostępny dla tego formatu.", + "too_big": "Podgląd pokazuje tylko pierwsze {{maxNumChars}} znaków pliku ze względów wydajnościowych. Pobierz plik i otwórz go zewnętrznie, aby zobaczyć całą zawartość." + }, + "protected_session": { + "enter_password_instruction": "Wyświetlenie chronionej notatki wymaga wprowadzenia hasła:", + "start_session_button": "Rozpocznij sesję chronioną enter", + "started": "Sesja chroniona została rozpoczęta.", + "wrong_password": "Nieprawidłowe hasło.", + "protecting-finished-successfully": "Ochrona zakończona pomyślnie.", + "unprotecting-finished-successfully": "Odblokowywanie zakończone pomyślnie.", + "protecting-in-progress": "Ochrona w toku: {{count}}", + "unprotecting-in-progress-count": "Odblokowywanie w toku: {{count}}", + "protecting-title": "Status ochrony", + "unprotecting-title": "Status odblokowywania" + }, + "relation_map": { + "open_in_new_tab": "Otwórz w nowej karcie", + "remove_note": "Usuń notatkę", + "edit_title": "Edytuj tytuł", + "rename_note": "Zmień nazwę notatki", + "enter_new_title": "Wprowadź nowy tytuł notatki:", + "remove_relation": "Usuń relację", + "confirm_remove_relation": "Czy na pewno chcesz usunąć tę relację?", + "specify_new_relation_name": "Określ nową nazwę relacji (dozwolone znaki: alfanumeryczne, dwukropek i podkreślenie):", + "connection_exists": "Połączenie '{{name}}' między tymi notatkami już istnieje.", + "start_dragging_relations": "Zacznij przeciągać stąd relacje i upuść je na inną notatkę.", + "note_not_found": "Nie znaleziono notatki {{noteId}}!", + "cannot_match_transform": "Nie można dopasować transformacji: {{transform}}", + "note_already_in_diagram": "Notatka \"{{title}}\" jest już na diagramie.", + "enter_title_of_new_note": "Wprowadź tytuł nowej notatki", + "default_new_note_title": "nowa notatka", + "click_on_canvas_to_place_new_note": "Kliknij na płótno, aby umieścić nową notatkę" + }, + "render": { + "note_detail_render_help_1": "Ta notatka pomocy jest wyświetlana, ponieważ ta notatka typu Renderuj HTML nie ma wymaganej relacji do prawidłowego działania.", + "note_detail_render_help_2": "Typ notatki Renderuj HTML jest używany do skryptowania. W skrócie, masz notatkę kodu HTML (opcjonalnie z pewnym JavaScriptem), a ta notatka ją wyrenderuje. Aby to zadziałało, musisz zdefiniować relację o nazwie \"renderNote\" wskazującą na notatkę HTML do wyrenderowania." + }, + "web_view": { + "web_view": "Widok sieciowy", + "embed_websites": "Notatka typu Widok sieciowy pozwala na osadzanie stron internetowych w Trilium.", + "create_label": "Aby rozpocząć, utwórz etykietę z adresem URL, który chcesz osadzić, np. #webViewSrc=\"https://www.google.com\"" + }, + "backend_log": { + "refresh": "Odśwież" + }, + "consistency_checks": { + "title": "Sprawdzanie spójności", + "find_and_fix_button": "Znajdź i napraw problemy ze spójnością", + "finding_and_fixing_message": "Znajdowanie i naprawianie problemów ze spójnością...", + "issues_fixed_message": "Wszelkie problemy ze spójnością, które mogły zostać znalezione, są teraz naprawione." + }, + "database_anonymization": { + "title": "Anonimizacja bazy danych", + "full_anonymization": "Pełna anonimizacja", + "full_anonymization_description": "Ta akcja utworzy nową kopię bazy danych i zanonimizuje ją (usunie całą zawartość notatek, pozostawiając tylko strukturę i niektóre niewrażliwe metadane) w celu udostępnienia online do celów debugowania bez obawy o wyciek danych osobowych.", + "save_fully_anonymized_database": "Zapisz w pełni zanonimizowaną bazę danych", + "light_anonymization": "Lekka anonimizacja", + "light_anonymization_description": "Ta akcja utworzy nową kopię bazy danych i przeprowadzi na niej lekką anonimizację — w szczególności usunięta zostanie tylko zawartość wszystkich notatek, ale tytuły i atrybuty pozostaną. Dodatkowo niestandardowe notatki skryptów JS frontend/backend oraz niestandardowe widżety pozostaną. Zapewnia to więcej kontekstu do debugowania problemów.", + "choose_anonymization": "Możesz sam zdecydować, czy chcesz udostępnić w pełni, czy lekko zanonimizowaną bazę danych. Nawet w pełni zanonimizowana baza danych jest bardzo przydatna, jednak w niektórych przypadkach lekko zanonimizowana baza danych może przyspieszyć proces identyfikacji i naprawy błędów.", + "save_lightly_anonymized_database": "Zapisz lekko zanonimizowaną bazę danych", + "existing_anonymized_databases": "Istniejące zanonimizowane bazy danych", + "creating_fully_anonymized_database": "Tworzenie w pełni zanonimizowanej bazy danych...", + "creating_lightly_anonymized_database": "Tworzenie lekko zanonimizowanej bazy danych...", + "error_creating_anonymized_database": "Nie można utworzyć zanonimizowanej bazy danych, sprawdź logi backendu, aby uzyskać szczegółowe informacje", + "successfully_created_fully_anonymized_database": "Utworzono w pełni zanonimizowaną bazę danych w {{anonymizedFilePath}}", + "successfully_created_lightly_anonymized_database": "Utworzono lekko zanonimizowaną bazę danych w {{anonymizedFilePath}}", + "no_anonymized_database_yet": "Brak jeszcze zanonimizowanej bazy danych." + }, + "database_integrity_check": { + "title": "Sprawdzanie integralności bazy danych", + "description": "Sprawdzi to, czy baza danych nie jest uszkodzona na poziomie SQLite. Może to zająć trochę czasu, w zależności od rozmiaru bazy danych.", + "check_button": "Sprawdź integralność bazy danych", + "checking_integrity": "Sprawdzanie integralności bazy danych...", + "integrity_check_succeeded": "Sprawdzanie integralności zakończyło się pomyślnie - nie znaleziono żadnych problemów.", + "integrity_check_failed": "Sprawdzanie integralności nie powiodło się: {{results}}" + }, + "sync": { + "title": "Synchronizacja", + "force_full_sync_button": "Wymuś pełną synchronizację", + "fill_entity_changes_button": "Wypełnij rekordy zmian encji", + "full_sync_triggered": "Wywołano pełną synchronizację", + "filling_entity_changes": "Wypełnianie wierszy zmian encji...", + "sync_rows_filled_successfully": "Wiersze synchronizacji wypełnione pomyślnie", + "finished-successfully": "Synchronizacja zakończona pomyślnie.", + "failed": "Synchronizacja nie powiodła się: {{message}}" + }, + "vacuum_database": { + "title": "Odkurzanie bazy danych", + "description": "Spowoduje to przebudowanie bazy danych, co zazwyczaj skutkuje mniejszym plikiem bazy danych. Żadne dane nie zostaną faktycznie zmienione.", + "button_text": "Odkurz bazę danych", + "vacuuming_database": "Odkurzanie bazy danych...", + "database_vacuumed": "Baza danych została odkurzona" + }, + "fonts": { + "theme_defined": "Zdefiniowane przez motyw", + "fonts": "Czcionki", + "main_font": "Główna czcionka", + "font_family": "Rodzina czcionek", + "size": "Rozmiar", + "note_tree_font": "Czcionka drzewa notatek", + "note_detail_font": "Czcionka szczegółów notatki", + "monospace_font": "Czcionka monospaced (kod)", + "note_tree_and_detail_font_sizing": "Pamiętaj, że rozmiar czcionki drzewa i szczegółów jest względny w stosunku do ustawienia rozmiaru czcionki głównej.", + "not_all_fonts_available": "Nie wszystkie wymienione czcionki mogą być dostępne w Twoim systemie.", + "apply_font_changes": "Aby zastosować zmiany czcionki, kliknij na", + "reload_frontend": "przeładuj frontend", + "generic-fonts": "Czcionki generyczne", + "sans-serif-system-fonts": "Czcionki systemowe bezszeryfowe", + "serif-system-fonts": "Czcionki systemowe szeryfowe", + "monospace-system-fonts": "Czcionki systemowe monospaced", + "handwriting-system-fonts": "Czcionki systemowe odręczne", + "serif": "Szeryfowa", + "sans-serif": "Bezszeryfowa", + "monospace": "Monospaced", + "system-default": "Domyślna systemowa" + }, + "max_content_width": { + "title": "Szerokość zawartości", + "default_description": "Trilium domyślnie ogranicza maksymalną szerokość zawartości, aby poprawić czytelność na zmaksymalizowanych ekranach o dużej szerokości.", + "max_width_label": "Maksymalna szerokość zawartości", + "max_width_unit": "piksele", + "apply_changes_description": "Aby zastosować zmiany szerokości zawartości, kliknij na", + "reload_button": "przeładuj frontend", + "reload_description": "zmiany z opcji wyglądu" + }, + "native_title_bar": { + "title": "Natywny pasek tytułu (wymaga ponownego uruchomienia aplikacji)", + "enabled": "włączony", + "disabled": "wyłączony" + }, + "ribbon": { + "widgets": "Widżety wstążki", + "promoted_attributes_message": "Karta wstążki Promowane atrybuty otworzy się automatycznie, jeśli na notatce znajdują się promowane atrybuty", + "edited_notes_message": "Karta wstążki Edytowane notatki otworzy się automatycznie w notatkach dziennych" + }, + "theme": { + "title": "Motyw aplikacji", + "theme_label": "Motyw", + "override_theme_fonts_label": "Nadpisz czcionki motywu", + "auto_theme": "Starszy (Dostosuj do schematu kolorów systemu)", + "light_theme": "Starszy (Jasny)", + "dark_theme": "Starszy (Ciemny)", + "triliumnext": "Trilium (Dostosuj do schematu kolorów systemu)", + "triliumnext-light": "Trilium (Jasny)", + "triliumnext-dark": "Trilium (Ciemny)", + "layout": "Układ", + "layout-vertical-title": "Pionowy", + "layout-horizontal-title": "Poziomy", + "layout-vertical-description": "pasek uruchamiania znajduje się po lewej stronie (domyślnie)", + "layout-horizontal-description": "pasek uruchamiania znajduje się pod paskiem kart, pasek kart ma teraz pełną szerokość." + }, + "ui-performance": { + "title": "Wydajność", + "enable-motion": "Włącz przejścia i animacje", + "enable-shadows": "Włącz cienie", + "enable-backdrop-effects": "Włącz efekty tła dla menu, wyskakujących okien i paneli", + "enable-smooth-scroll": "Włącz płynne przewijanie", + "app-restart-required": "(ponowne uruchomienie aplikacji jest wymagane, aby zmiana zaczęła obowiązywać)" + }, + "zoom_factor": { + "title": "Współczynnik powiększenia (tylko w wersji stacjonarnej)", + "description": "Powiększanie można również kontrolować za pomocą skrótów CTRL+- i CTRL+=" + }, + "code_auto_read_only_size": { + "title": "Automatyczny rozmiar tylko do odczytu", + "description": "Automatyczny rozmiar notatki tylko do odczytu to rozmiar, po którym notatki będą wyświetlane w trybie tylko do odczytu (ze względów wydajnościowych).", + "label": "Automatyczny rozmiar tylko do odczytu (notatki kodowe)", + "unit": "znaki" + }, + "code-editor-options": { + "title": "Edytor" + }, + "code_mime_types": { + "title": "Dostępne typy MIME w rozwijanym menu" + }, + "vim_key_bindings": { + "use_vim_keybindings_in_code_notes": "Skróty klawiszowe Vim", + "enable_vim_keybindings": "Włącz skróty klawiszowe Vim w notatkach kodowych (bez trybu ex)" + }, + "wrap_lines": { + "wrap_lines_in_code_notes": "Zawijaj wiersze w notatkach kodowych", + "enable_line_wrap": "Włącz zawijanie wierszy (zmiana może wymagać ponownego załadowania frontendu, aby zaczęła obowiązywać)" + }, + "images": { + "images_section_title": "Obrazy", + "download_images_automatically": "Pobieraj obrazy automatycznie do użytku offline.", + "download_images_description": "Wklejony HTML może zawierać odniesienia do obrazów online, Trilium znajdzie te odniesienia i pobierze obrazy, aby były dostępne offline.", + "enable_image_compression": "Włącz kompresję obrazów", + "max_image_dimensions": "Maksymalna szerokość / wysokość obrazu (obraz zostanie przeskalowany, jeśli przekroczy to ustawienie).", + "max_image_dimensions_unit": "piksele", + "jpeg_quality_description": "Jakość JPEG (10 - najgorsza jakość, 100 - najlepsza jakość, 50 - 85 jest zalecane)" + }, + "attachment_erasure_timeout": { + "attachment_erasure_timeout": "Limit czasu usuwania załączników", + "attachment_auto_deletion_description": "Załączniki są automatycznie usuwane (i wymazywane), jeśli nie są już powiązane z ich notatką po określonym czasie.", + "erase_attachments_after": "Wymaż nieużywane załączniki po:", + "manual_erasing_description": "Możesz również wywołać wymazywanie ręcznie (bez uwzględniania powyższego limitu czasu):", + "erase_unused_attachments_now": "Wymaż teraz nieużywane załączniki", + "unused_attachments_erased": "Nieużywane załączniki zostały wymazane." + }, + "network_connections": { + "network_connections_title": "Połączenia sieciowe", + "check_for_updates": "Sprawdzaj aktualizacje automatycznie" + }, + "note_erasure_timeout": { + "note_erasure_timeout_title": "Limit czasu usuwania notatek", + "note_erasure_description": "Usunięte notatki (i atrybuty, wersje...) są na początku tylko oznaczane jako usunięte i można je odzyskać z okna dialogowego Ostatnie notatki. Po pewnym czasie usunięte notatki są \"wymazywane\", co oznacza, że ich zawartość nie jest już możliwa do odzyskania. To ustawienie pozwala skonfigurować długość okresu między usunięciem a wymazaniem notatki.", + "erase_notes_after": "Wymaż notatki po:", + "manual_erasing_description": "Możesz również wywołać wymazywanie ręcznie (bez uwzględniania powyższego limitu czasu):", + "erase_deleted_notes_now": "Wymaż teraz usunięte notatki", + "deleted_notes_erased": "Usunięte notatki zostały wymazane." + }, + "revisions_snapshot_interval": { + "note_revisions_snapshot_interval_title": "Interwał migawki wersji notatki", + "note_revisions_snapshot_description": "Interwał migawki wersji notatki to czas, po którym dla notatki zostanie utworzona nowa wersja. Zobacz wiki, aby uzyskać więcej informacji.", + "snapshot_time_interval_label": "Interwał czasowy migawki wersji notatki:" + }, + "revisions_snapshot_limit": { + "note_revisions_snapshot_limit_title": "Limit migawek wersji notatki", + "note_revisions_snapshot_limit_description": "Limit liczby migawek wersji notatki odnosi się do maksymalnej liczby wersji, które można zapisać dla każdej notatki. Gdzie -1 oznacza brak limitu, 0 oznacza usunięcie wszystkich wersji. Możesz ustawić maksymalną liczbę wersji dla pojedynczej notatki za pomocą etykiety #versioningLimit.", + "snapshot_number_limit_label": "Limit liczby migawek wersji notatki:", + "snapshot_number_limit_unit": "migawki", + "erase_excess_revision_snapshots": "Wymaż teraz nadmiarowe migawki wersji", + "erase_excess_revision_snapshots_prompt": "Nadmiarowe migawki wersji zostały wymazane." + }, + "search_engine": { + "title": "Wyszukiwarka", + "custom_search_engine_info": "Niestandardowa wyszukiwarka wymaga ustawienia zarówno nazwy, jak i adresu URL. Jeśli którykolwiek z nich nie jest ustawiony, domyślną wyszukiwarką będzie DuckDuckGo.", + "predefined_templates_label": "Predefiniowane szablony wyszukiwarek", + "bing": "Bing", + "baidu": "Baidu", + "duckduckgo": "DuckDuckGo", + "google": "Google", + "custom_name_label": "Niestandardowa nazwa wyszukiwarki", + "custom_name_placeholder": "Dostosuj nazwę wyszukiwarki", + "custom_url_label": "Niestandardowy adres URL wyszukiwarki powinien zawierać {keyword} jako symbol zastępczy dla wyszukiwanego terminu.", + "custom_url_placeholder": "Dostosuj adres URL wyszukiwarki", + "save_button": "Zapisz" + }, + "tray": { + "title": "Zasobnik systemowy", + "enable_tray": "Włącz zasobnik (zmiana ta wymaga ponownego uruchomienia Trilium, aby zaczęła obowiązywać)" + }, + "heading_style": { + "title": "Styl nagłówka", + "plain": "Zwykły", + "underline": "Podkreślenie", + "markdown": "Styl Markdown" + }, + "highlights_list": { + "title": "Lista wyróżnień", + "description": "Możesz dostosować listę wyróżnień wyświetlaną w prawym panelu:", + "bold": "Pogrubiony tekst", + "italic": "Kursywa", + "underline": "Podkreślony tekst", + "color": "Kolorowy tekst", + "bg_color": "Tekst z kolorem tła", + "visibility_title": "Widoczność listy wyróżnień", + "visibility_description": "Możesz ukryć widżet wyróżnień dla poszczególnych notatek, dodając etykietę #hideHighlightWidget.", + "shortcut_info": "Możesz skonfigurować skrót klawiaturowy do szybkiego przełączania prawego panelu (w tym wyróżnień) w Opcje -> Skróty (nazwa 'toggleRightPane')." + }, + "table_of_contents": { + "title": "Spis treści", + "description": "Spis treści pojawi się w notatkach tekstowych, gdy notatka ma więcej niż zdefiniowaną liczbę nagłówków. Możesz dostosować tę liczbę:", + "unit": "nagłówki", + "disable_info": "Możesz również użyć tej opcji, aby skutecznie wyłączyć spis treści, ustawiając bardzo wysoką liczbę.", + "shortcut_info": "Możesz skonfigurować skrót klawiaturowy do szybkiego przełączania prawego panelu (w tym spisu treści) w Opcje -> Skróty (nazwa 'toggleRightPane')." + }, + "text_auto_read_only_size": { + "title": "Automatyczny rozmiar tylko do odczytu", + "description": "Automatyczny rozmiar notatki tylko do odczytu to rozmiar, po którym notatki będą wyświetlane w trybie tylko do odczytu (ze względów wydajnościowych).", + "label": "Automatyczny rozmiar tylko do odczytu (notatki tekstowe)", + "unit": "znaki" + }, + "custom_date_time_format": { + "title": "Niestandardowy format daty/czasu", + "description": "Dostosuj format daty i czasu wstawianego za pomocą lub paska narzędzi. Zobacz dokumentację Day.js dla dostępnych tokenów formatu.", + "format_string": "Ciąg formatujący:", + "formatted_time": "Sformatowana data/czas:" + }, + "i18n": { + "title": "Lokalizacja", + "language": "Język", + "first-day-of-the-week": "Pierwszy dzień tygodnia", + "monday": "Poniedziałek", + "tuesday": "Wtorek", + "wednesday": "Środa", + "thursday": "Czwartek", + "friday": "Piątek", + "saturday": "Sobota", + "sunday": "Niedziela", + "first-week-of-the-year": "Pierwszy tydzień roku", + "first-week-contains-first-day": "Pierwszy tydzień zawiera pierwszy dzień roku", + "first-week-contains-first-thursday": "Pierwszy tydzień zawiera pierwszy czwartek roku", + "first-week-has-minimum-days": "Pierwszy tydzień ma minimalną liczbę dni", + "min-days-in-first-week": "Minimalna liczba dni w pierwszym tygodniu", + "first-week-info": "Pierwszy tydzień zawiera pierwszy czwartek roku jest oparty na standardzie ISO 8601.", + "first-week-warning": "Zmiana opcji pierwszego tygodnia może powodować duplikaty z istniejącymi notatkami tygodniowymi, a istniejące notatki tygodniowe nie zostaną odpowiednio zaktualizowane.", + "formatting-locale": "Format daty i liczb", + "formatting-locale-auto": "Na podstawie języka aplikacji" + }, + "backup": { + "automatic_backup": "Automatyczna kopia zapasowa", + "automatic_backup_description": "Trilium może automatycznie tworzyć kopie zapasowe bazy danych:", + "enable_daily_backup": "Włącz codzienną kopię zapasową", + "enable_weekly_backup": "Włącz tygodniową kopię zapasową", + "enable_monthly_backup": "Włącz miesięczną kopię zapasową", + "backup_recommendation": "Zaleca się włączenie kopii zapasowej, ale może to spowolnić uruchamianie aplikacji przy dużych bazach danych i/lub wolnych urządzeniach pamięci masowej.", + "backup_now": "Utwórz kopię zapasową teraz", + "backup_database_now": "Utwórz kopię zapasową bazy danych teraz", + "existing_backups": "Istniejące kopie zapasowe", + "date-and-time": "Data i godzina", + "path": "Ścieżka", + "database_backed_up_to": "Baza danych została zarchiwizowana do {{backupFilePath}}", + "no_backup_yet": "brak jeszcze kopii zapasowej" + }, + "etapi": { + "title": "ETAPI", + "description": "ETAPI to interfejs API REST używany do programowego dostępu do instancji Trilium, bez interfejsu użytkownika.", + "see_more": "Zobacz więcej szczegółów w {{- link_to_wiki}} oraz w {{- link_to_openapi_spec}} lub {{- link_to_swagger_ui }}.", + "wiki": "wiki", + "openapi_spec": "specyfikacja ETAPI OpenAPI", + "swagger_ui": "ETAPI Swagger UI", + "create_token": "Utwórz nowy token ETAPI", + "existing_tokens": "Istniejące tokeny", + "no_tokens_yet": "Nie ma jeszcze żadnych tokenów. Kliknij przycisk powyżej, aby utworzyć jeden.", + "token_name": "Nazwa tokenu", + "created": "Utworzono", + "actions": "Akcje", + "new_token_title": "Nowy token ETAPI", + "new_token_message": "Wprowadź nazwę nowego tokenu", + "default_token_name": "nowy token", + "error_empty_name": "Nazwa tokenu nie może być pusta", + "token_created_title": "Utworzono token ETAPI", + "token_created_message": "Skopiuj utworzony token do schowka. Trilium przechowuje token w postaci zaszyfrowanej i jest to ostatni raz, kiedy go widzisz.", + "rename_token": "Zmień nazwę tego tokenu", + "delete_token": "Usuń / dezaktywuj ten token", + "rename_token_title": "Zmień nazwę tokenu", + "rename_token_message": "Wprowadź nową nazwę tokenu", + "delete_token_confirmation": "Czy na pewno chcesz usunąć token ETAPI \"{{name}}\"?" + }, + "options_widget": { + "options_status": "Status opcji", + "options_change_saved": "Zmiany w opcjach zostały zapisane." + }, + "password": { + "heading": "Hasło", + "alert_message": "Pamiętaj o zapamiętaniu nowego hasła. Hasło jest używane do logowania się do interfejsu internetowego i szyfrowania chronionych notatek. Jeśli zapomnisz hasła, wszystkie Twoje chronione notatki zostaną utracone na zawsze.", + "reset_link": "Kliknij tutaj, aby je zresetować.", + "old_password": "Stare hasło", + "new_password": "Nowe hasło", + "new_password_confirmation": "Potwierdzenie nowego hasła", + "change_password": "Zmień hasło", + "protected_session_timeout": "Limit czasu sesji chronionej", + "protected_session_timeout_description": "Limit czasu sesji chronionej to okres, po którym sesja chroniona jest usuwana z pamięci przeglądarki. Mierzy się go od ostatniej interakcji z chronionymi notatkami. Zobacz", + "wiki": "wiki", + "for_more_info": "aby uzyskać więcej informacji.", + "protected_session_timeout_label": "Limit czasu sesji chronionej:", + "reset_confirmation": "Resetując hasło, na zawsze utracisz dostęp do wszystkich istniejących chronionych notatek. Czy na pewno chcesz zresetować hasło?", + "reset_success_message": "Hasło zostało zresetowane. Ustaw nowe hasło", + "change_password_heading": "Zmień hasło", + "set_password_heading": "Ustaw hasło", + "set_password": "Ustaw hasło", + "password_mismatch": "Nowe hasła nie są takie same.", + "password_changed_success": "Hasło zostało zmienione. Trilium zostanie przeładowane po naciśnięciu OK." + }, + "multi_factor_authentication": { + "title": "Uwierzytelnianie wieloskładnikowe", + "description": "Uwierzytelnianie wieloskładnikowe (MFA) dodaje dodatkową warstwę zabezpieczeń do Twojego konta. Zamiast wpisywać tylko hasło, aby się zalogować, MFA wymaga podania jednego lub więcej dodatkowych dowodów weryfikujących Twoją tożsamość. W ten sposób, nawet jeśli ktoś zdobędzie Twoje hasło, nadal nie będzie mógł uzyskać dostępu do Twojego konta bez drugiego elementu informacji. To jak dodanie dodatkowego zamka do drzwi, co znacznie utrudnia włamanie.

Postępuj zgodnie z poniższymi instrukcjami, aby włączyć MFA. Jeśli nie skonfigurujesz go poprawnie, logowanie powróci do samego hasła.", + "mfa_enabled": "Włącz uwierzytelnianie wieloskładnikowe", + "mfa_method": "Metoda MFA", + "electron_disabled": "Uwierzytelnianie wieloskładnikowe nie jest obecnie obsługiwane w wersji stacjonarnej.", + "totp_title": "Jednorazowe hasło czasowe (TOTP)", + "totp_description": "TOTP (Time-Based One-Time Password) to funkcja bezpieczeństwa, która generuje unikalny, tymczasowy kod, który zmienia się co 30 sekund. Używasz tego kodu wraz z hasłem do logowania się na swoje konto, co znacznie utrudnia dostęp do niego innym osobom.", + "totp_secret_title": "Wygeneruj sekret TOTP", + "totp_secret_generate": "Wygeneruj sekret TOTP", + "totp_secret_regenerate": "Wygeneruj ponownie sekret TOTP", + "no_totp_secret_warning": "Aby włączyć TOTP, musisz najpierw wygenerować sekret TOTP.", + "totp_secret_description_warning": "Po wygenerowaniu nowego sekretu TOTP będziesz musiał ponownie zalogować się przy użyciu nowego sekretu TOTP.", + "totp_secret_generated": "Wygenerowano sekret TOTP", + "totp_secret_warning": "Zapisz wygenerowany sekret w bezpiecznym miejscu. Nie zostanie on ponownie pokazany.", + "totp_secret_regenerate_confirm": "Czy na pewno chcesz wygenerować ponownie sekret TOTP? Spowoduje to unieważnienie poprzedniego sekretu TOTP i wszystkich istniejących kodów odzyskiwania.", + "recovery_keys_title": "Klucze odzyskiwania jednorazowego logowania", + "recovery_keys_description": "Klucze odzyskiwania jednorazowego logowania są używane do logowania w przypadku, gdy nie możesz uzyskać dostępu do swoich kodów Authenticator.", + "recovery_keys_description_warning": "Klucze odzyskiwania nie zostaną ponownie pokazane po opuszczeniu strony, przechowuj je w bezpiecznym miejscu.
Po użyciu klucza odzyskiwania nie można go użyć ponownie.", + "recovery_keys_error": "Błąd generowania kodów odzyskiwania", + "recovery_keys_no_key_set": "Nie ustawiono kodów odzyskiwania", + "recovery_keys_generate": "Wygeneruj kody odzyskiwania", + "recovery_keys_regenerate": "Wygeneruj ponownie kody odzyskiwania", + "recovery_keys_used": "Użyto: {{date}}", + "recovery_keys_unused": "Kod odzyskiwania {{index}} jest nieużywany", + "oauth_title": "OAuth/OpenID", + "oauth_description": "OpenID to standaryzowany sposób logowania się na strony internetowe przy użyciu konta z innej usługi, takiej jak Google, w celu zweryfikowania Twojej tożsamości. Domyślnym dostawcą jest Google, ale możesz zmienić go na dowolnego innego dostawcę OpenID. Sprawdź tutaj, aby uzyskać więcej informacji. Postępuj zgodnie z tymi instrukcjami, aby skonfigurować usługę OpenID za pośrednictwem Google.", + "oauth_description_warning": "Aby włączyć OAuth/OpenID, musisz ustawić podstawowy adres URL OAuth/OpenID, identyfikator klienta i sekret klienta w pliku config.ini i ponownie uruchomić aplikację. Jeśli chcesz ustawić je ze zmiennych środowiskowych, ustaw TRILIUM_OAUTH_BASE_URL, TRILIUM_OAUTH_CLIENT_ID i TRILIUM_OAUTH_CLIENT_SECRET.", + "oauth_missing_vars": "Brakujące ustawienia: {{-variables}}", + "oauth_user_account": "Konto użytkownika: ", + "oauth_user_email": "E-mail użytkownika: ", + "oauth_user_not_logged_in": "Niezalogowany!" + }, + "shortcuts": { + "keyboard_shortcuts": "Skróty klawiaturowe", + "multiple_shortcuts": "Wiele skrótów dla tej samej akcji można oddzielić przecinkiem.", + "electron_documentation": "Zobacz dokumentację Electron dla dostępnych modyfikatorów i kodów klawiszy.", + "type_text_to_filter": "Wpisz tekst, aby filtrować skróty...", + "action_name": "Nazwa akcji", + "shortcuts": "Skróty", + "default_shortcuts": "Domyślne skróty", + "description": "Opis", + "reload_app": "Przeładuj aplikację, aby zastosować zmiany", + "set_all_to_default": "Ustaw wszystkie skróty na domyślne", + "confirm_reset": "Czy na pewno chcesz zresetować wszystkie skróty klawiaturowe do domyślnych?" + }, + "spellcheck": { + "title": "Sprawdzanie pisowni", + "description": "Te opcje dotyczą tylko wersji stacjonarnych, przeglądarki będą używać własnego natywnego sprawdzania pisowni.", + "enable": "Włącz sprawdzanie pisowni", + "language_code_label": "Kod(y) języka", + "language_code_placeholder": "na przykład \"en-US\", \"de-AT\"", + "multiple_languages_info": "Wiele języków można oddzielić przecinkiem, np. \"en-US, de-DE, cs\". ", + "available_language_codes_label": "Dostępne kody języków:", + "restart-required": "Zmiany w opcjach sprawdzania pisowni zaczną obowiązywać po ponownym uruchomieniu aplikacji." + }, + "sync_2": { + "config_title": "Konfiguracja synchronizacji", + "server_address": "Adres instancji serwera", + "timeout": "Limit czasu synchronizacji", + "timeout_unit": "milisekundy", + "proxy_label": "Serwer proxy synchronizacji (opcjonalnie)", + "note": "Notatka", + "note_description": "Jeśli pozostawisz ustawienie proxy puste, zostanie użyty systemowy serwer proxy (dotyczy tylko wersji stacjonarnej/electron).", + "special_value_description": "Inną specjalną wartością jest noproxy, która wymusza ignorowanie nawet systemowego serwera proxy i respektuje NODE_TLS_REJECT_UNAUTHORIZED.", + "save": "Zapisz", + "help": "Pomoc", + "test_title": "Test synchronizacji", + "test_description": "Sprawdzi to połączenie i uzgadnianie z serwerem synchronizacji. Jeśli serwer synchronizacji nie jest zainicjowany, spowoduje to jego skonfigurowanie do synchronizacji z lokalnym dokumentem.", + "test_button": "Testuj synchronizację", + "handshake_failed": "Uzgadnianie serwera synchronizacji nie powiodło się, błąd: {{message}}" + }, + "api_log": { + "close": "Zamknij" + }, + "attachment_detail_2": { + "will_be_deleted_in": "Ten załącznik zostanie automatycznie usunięty za {{time}}", + "will_be_deleted_soon": "Ten załącznik zostanie wkrótce automatycznie usunięty", + "deletion_reason": ", ponieważ załącznik nie jest powiązany z treścią notatki. Aby zapobiec usunięciu, dodaj link do załącznika z powrotem do treści lub przekonwertuj załącznik na notatkę.", + "role_and_size": "Rola: {{role}}, Rozmiar: {{size}}", + "link_copied": "Link do załącznika skopiowany do schowka.", + "unrecognized_role": "Nierozpoznana rola załącznika '{{role}}'." + }, + "bookmark_switch": { + "bookmark": "Zakładka", + "bookmark_this_note": "Dodaj tę notatkę do zakładek w lewym panelu bocznym", + "remove_bookmark": "Usuń zakładkę" + }, + "editability_select": { + "auto": "Auto", + "read_only": "Tylko do odczytu", + "always_editable": "Zawsze edytowalny", + "note_is_editable": "Notatka jest edytowalna, jeśli nie jest zbyt długa.", + "note_is_read_only": "Notatka jest tylko do odczytu, ale można ją edytować po kliknięciu przycisku.", + "note_is_always_editable": "Notatka jest zawsze edytowalna, niezależnie od jej długości." + }, + "note-map": { + "button-link-map": "Mapa linków", + "button-tree-map": "Mapa drzewa" + }, + "tree-context-menu": { + "open-in-a-new-tab": "Otwórz w nowej karcie", + "open-in-a-new-split": "Otwórz w nowym podziale", + "insert-note-after": "Wstaw notatkę po", + "insert-child-note": "Wstaw notatkę podrzędną", + "archive": "Archiwizuj", + "unarchive": "Przywróć z archiwum", + "delete": "Usuń", + "search-in-subtree": "Szukaj w poddrzewie", + "hoist-note": "Podnieś notatkę", + "unhoist-note": "Opuść notatkę", + "edit-branch-prefix": "Edytuj prefiks gałęzi", + "advanced": "Zaawansowane", + "expand-subtree": "Rozwiń poddrzewo", + "collapse-subtree": "Zwiń poddrzewo", + "sort-by": "Sortuj według...", + "recent-changes-in-subtree": "Ostatnie zmiany w poddrzewie", + "convert-to-attachment": "Konwertuj na załącznik", + "copy-note-path-to-clipboard": "Kopiuj ścieżkę notatki do schowka", + "protect-subtree": "Chroń poddrzewo", + "unprotect-subtree": "Odblokuj poddrzewo", + "copy-clone": "Kopiuj / klonuj", + "clone-to": "Klonuj do...", + "cut": "Wytnij", + "move-to": "Przenieś do...", + "paste-into": "Wklej do", + "paste-after": "Wklej po", + "duplicate": "Duplikuj", + "export": "Eksportuj", + "import-into-note": "Importuj do notatki", + "apply-bulk-actions": "Zastosuj akcje zbiorcze", + "converted-to-attachments": "{{count}} notatek zostało przekonwertowanych na załączniki.", + "convert-to-attachment-confirm": "Czy na pewno chcesz przekonwertować wybrane notatki na załączniki ich notatek nadrzędnych?", + "open-in-popup": "Szybka edycja" + }, + "shared_info": { + "shared_publicly": "Ta notatka jest udostępniona publicznie na {{- link}}.", + "shared_locally": "Ta notatka jest udostępniona lokalnie na {{- link}}.", + "help_link": "Aby uzyskać pomoc, odwiedź wiki." + }, + "note_types": { + "text": "Tekst", + "code": "Kod", + "saved-search": "Zapisane wyszukiwanie", + "relation-map": "Mapa relacji", + "note-map": "Mapa notatek", + "render-note": "Renderuj notatkę", + "book": "Kolekcja", + "mermaid-diagram": "Diagram Mermaid", + "canvas": "Płótno", + "web-view": "Widok sieciowy", + "mind-map": "Mapa myśli", + "file": "Plik", + "image": "Obraz", + "launcher": "Program uruchamiający", + "doc": "Dokument", + "widget": "Widżet", + "confirm-change": "Nie zaleca się zmiany typu notatki, gdy zawartość notatki nie jest pusta. Czy chcesz kontynuować mimo to?", + "geo-map": "Mapa geograficzna", + "beta-feature": "Beta", + "ai-chat": "Czat AI", + "task-list": "Lista zadań", + "new-feature": "Nowość", + "collections": "Kolekcje" + }, + "protect_note": { + "toggle-on": "Chroń notatkę", + "toggle-off": "Odblokuj notatkę", + "toggle-on-hint": "Notatka nie jest chroniona, kliknij, aby ją chronić", + "toggle-off-hint": "Notatka jest chroniona, kliknij, aby ją odblokować" + }, + "shared_switch": { + "shared": "Udostępnione", + "toggle-on-title": "Udostępnij notatkę", + "toggle-off-title": "Przestań udostępniać notatkę", + "shared-branch": "Ta notatka istnieje tylko jako notatka udostępniona, zaprzestanie udostępniania spowoduje jej usunięcie. Czy chcesz kontynuować i tym samym usunąć tę notatkę?", + "inherited": "Notatka nie może być tutaj nieudostępniona, ponieważ jest udostępniana poprzez dziedziczenie od przodka." + }, + "template_switch": { + "template": "Szablon", + "toggle-on-hint": "Uczyń notatkę szablonem", + "toggle-off-hint": "Usuń notatkę jako szablon" + }, + "open-help-page": "Otwórz stronę pomocy", + "find": { + "case_sensitive": "Uwzględniaj wielkość liter", + "match_words": "Dopasuj słowa", + "find_placeholder": "Znajdź w tekście...", + "replace_placeholder": "Zastąp...", + "replace": "Zastąp", + "replace_all": "Zastąp wszystko" + }, + "highlights_list_2": { + "title": "Lista wyróżnień", + "options": "Opcje" + }, + "quick-search": { + "placeholder": "Szybkie wyszukiwanie", + "searching": "Wyszukiwanie...", + "no-results": "Nie znaleziono wyników", + "more-results": "... i {{number}} więcej wyników.", + "show-in-full-search": "Pokaż w pełnym wyszukiwaniu" + }, + "note_tree": { + "collapse-title": "Zwiń drzewo notatek", + "scroll-active-title": "Przewiń do aktywnej notatki", + "tree-settings-title": "Ustawienia drzewa", + "hide-archived-notes": "Ukryj zarchiwizowane notatki", + "automatically-collapse-notes": "Automatycznie zwijaj notatki", + "automatically-collapse-notes-title": "Notatki zostaną zwinięte po okresie bezczynności, aby uporządkować drzewo.", + "save-changes": "Zapisz i zastosuj zmiany", + "auto-collapsing-notes-after-inactivity": "Automatyczne zwijanie notatek po bezczynności...", + "saved-search-note-refreshed": "Odświeżono zapisaną notatkę wyszukiwania.", + "hoist-this-note-workspace": "Podnieś tę notatkę (obszar roboczy)", + "refresh-saved-search-results": "Odśwież zapisane wyniki wyszukiwania", + "create-child-note": "Utwórz notatkę podrzędną", + "unhoist": "Opuść", + "toggle-sidebar": "Przełącz pasek boczny" + }, + "title_bar_buttons": { + "window-on-top": "Trzymaj okno na wierzchu" + }, + "note_detail": { + "could_not_find_typewidget": "Nie można znaleźć typeWidget dla typu '{{type}}'" + }, + "note_title": { + "placeholder": "wpisz tutaj tytuł notatki..." + }, + "search_result": { + "no_notes_found": "Nie znaleziono żadnych notatek dla podanych parametrów wyszukiwania.", + "search_not_executed": "Wyszukiwanie nie zostało jeszcze wykonane. Kliknij przycisk \"Szukaj\" powyżej, aby zobaczyć wyniki." + }, + "spacer": { + "configure_launchbar": "Skonfiguruj pasek uruchamiania" + }, + "sql_result": { + "no_rows": "Nie zwrócono żadnych wierszy dla tego zapytania" + }, + "sql_table_schemas": { + "tables": "Tabele" + }, + "tab_row": { + "close_tab": "Zamknij kartę", + "add_new_tab": "Dodaj nową kartę", + "close": "Zamknij", + "close_other_tabs": "Zamknij inne karty", + "close_right_tabs": "Zamknij karty po prawej", + "close_all_tabs": "Zamknij wszystkie karty", + "reopen_last_tab": "Otwórz ponownie ostatnią zamkniętą kartę", + "move_tab_to_new_window": "Przenieś tę kartę do nowego okna", + "copy_tab_to_new_window": "Skopiuj tę kartę do nowego okna", + "new_tab": "Nowa karta" + }, + "toc": { + "table_of_contents": "Spis treści", + "options": "Opcje" + }, + "watched_file_update_status": { + "file_last_modified": "Plik został ostatnio zmodyfikowany .", + "upload_modified_file": "Prześlij zmodyfikowany plik", + "ignore_this_change": "Ignoruj tę zmianę" + }, + "app_context": { + "please_wait_for_save": "Poczekaj kilka sekund na zakończenie zapisywania, a następnie spróbuj ponownie." + }, + "note_create": { + "duplicated": "Notatka \"{{title}}\" została zduplikowana." + }, + "image": { + "copied-to-clipboard": "Odniesienie do obrazu zostało skopiowane do schowka. Można je wkleić w dowolnej notatce tekstowej.", + "cannot-copy": "Nie można skopiować odniesienia do obrazu do schowka." + }, + "clipboard": { + "cut": "Notatka(i) została(y) wycięta(e) do schowka.", + "copied": "Notatka(i) została(y) skopiowana(e) do schowka.", + "copy_failed": "Nie można skopiować do schowka z powodu problemów z uprawnieniami.", + "copy_success": "Skopiowano do schowka." + }, + "entrypoints": { + "note-revision-created": "Utworzono wersję notatki.", + "note-executed": "Notatka wykonana.", + "sql-error": "Wystąpił błąd podczas wykonywania zapytania SQL: {{message}}" + }, + "branches": { + "cannot-move-notes-here": "Nie można przenieść tutaj notatek.", + "delete-status": "Status usuwania", + "delete-notes-in-progress": "Usuwanie notatek w toku: {{count}}", + "delete-finished-successfully": "Usuwanie zakończone pomyślnie.", + "undeleting-notes-in-progress": "Przywracanie notatek w toku: {{count}}", + "undeleting-notes-finished-successfully": "Przywracanie notatek zakończone pomyślnie." + }, + "frontend_script_api": { + "async_warning": "Przekazujesz funkcję asynchroniczną do `api.runOnBackend()`, co prawdopodobnie nie zadziała zgodnie z zamierzeniami.\\nAlbo uczyń funkcję synchroniczną (usuwając słowo kluczowe `async`), albo użyj `api.runAsyncOnBackendWithManualTransactionHandling()`.", + "sync_warning": "Przekazujesz funkcję synchroniczną do `api.runAsyncOnBackendWithManualTransactionHandling()`,\\npodczas gdy prawdopodobnie powinieneś użyć `api.runOnBackend()`." + }, + "ws": { + "sync-check-failed": "Sprawdzanie synchronizacji nie powiodło się!", + "consistency-checks-failed": "Sprawdzanie spójności nie powiodło się! Zobacz logi, aby uzyskać szczegółowe informacje.", + "encountered-error": "Napotkano błąd \"{{message}}\", sprawdź konsolę.", + "lost-websocket-connection-title": "Utracono połączenie z serwerem", + "lost-websocket-connection-message": "Sprawdź konfigurację swojego odwrotnego serwera proxy (np. nginx lub Apache), aby upewnić się, że połączenia WebSocket są prawidłowo dozwolone i nie są blokowane." + }, + "hoisted_note": { + "confirm_unhoisting": "Żądana notatka '{{requestedNote}}' znajduje się poza poddrzewem podniesionej notatki '{{hoistedNote}}' i musisz ją opuścić, aby uzyskać do niej dostęp. Czy chcesz kontynuować opuszczanie?" + }, + "launcher_context_menu": { + "reset_launcher_confirm": "Czy na pewno chcesz zresetować \"{{title}}\"? Wszystkie dane / ustawienia w tej notatce (i jej dzieciach) zostaną utracone, a program uruchamiający zostanie przywrócony do pierwotnej lokalizacji.", + "add-note-launcher": "Dodaj program uruchamiający notatkę", + "add-script-launcher": "Dodaj program uruchamiający skrypt", + "add-custom-widget": "Dodaj niestandardowy widżet", + "add-spacer": "Dodaj odstęp", + "delete": "Usuń ", + "reset": "Resetuj", + "move-to-visible-launchers": "Przenieś do widocznych programów uruchamiających", + "move-to-available-launchers": "Przenieś do dostępnych programów uruchamiających", + "duplicate-launcher": "Duplikuj program uruchamiający " + }, + "editable-text": { + "auto-detect-language": "Wykryto automatycznie" + }, + "highlighting": { + "title": "Bloki kodu", + "description": "Kontroluje podświetlanie składni dla bloków kodu w notatkach tekstowych, notatki kodowe nie będą miały wpływu.", + "color-scheme": "Schemat kolorów" + }, + "code_block": { + "word_wrapping": "Zawijanie słów", + "theme_none": "Brak podświetlania składni", + "theme_group_light": "Jasne motywy", + "theme_group_dark": "Ciemne motywy", + "copy_title": "Kopiuj do schowka" + }, + "classic_editor_toolbar": { + "title": "Formatowanie" + }, + "editor": { + "title": "Edytor" + }, + "editing": { + "editor_type": { + "label": "Pasek narzędzi formatowania", + "floating": { + "title": "Pływający", + "description": "narzędzia do edycji pojawiają się w pobliżu kursora;" + }, + "fixed": { + "title": "Stały", + "description": "narzędzia do edycji pojawiają się na karcie wstążki \"Formatowanie\"." + }, + "multiline-toolbar": "Wyświetlaj pasek narzędzi w wielu wierszach, jeśli się nie mieści." + } + }, + "geo-map": { + "create-child-note-title": "Utwórz nową notatkę podrzędną i dodaj ją do mapy", + "create-child-note-instruction": "Kliknij na mapę, aby utworzyć nową notatkę w tej lokalizacji, lub naciśnij Escape, aby anulować.", + "unable-to-load-map": "Nie można załadować mapy." + }, + "geo-map-context": { + "open-location": "Otwórz lokalizację", + "remove-from-map": "Usuń z mapy", + "add-note": "Dodaj znacznik w tej lokalizacji" + }, + "help-button": { + "title": "Otwórz odpowiednią stronę pomocy" + }, + "time_selector": { + "invalid_input": "Wprowadzona wartość czasu nie jest prawidłową liczbą.", + "minimum_input": "Wprowadzona wartość czasu musi wynosić co najmniej {{minimumSeconds}} sekund." + }, + "presentation_view": { + "edit-slide": "Edytuj ten slajd", + "start-presentation": "Rozpocznij prezentację", + "slide-overview": "Przełącz podgląd slajdów" } } diff --git a/apps/client/src/translations/tw/translation.json b/apps/client/src/translations/tw/translation.json index db5096aa2..8fdd79540 100644 --- a/apps/client/src/translations/tw/translation.json +++ b/apps/client/src/translations/tw/translation.json @@ -765,7 +765,8 @@ "table": "表格", "geo-map": "地理地圖", "board": "看板", - "include_archived_notes": "顯示已封存筆記" + "include_archived_notes": "顯示已封存筆記", + "presentation": "簡報" }, "edited_notes": { "no_edited_notes_found": "今天還沒有編輯過的筆記...", @@ -1516,7 +1517,9 @@ "window-on-top": "保持此視窗置頂" }, "note_detail": { - "could_not_find_typewidget": "找不到類型為 '{{type}}' 的 typeWidget" + "could_not_find_typewidget": "找不到類型為 '{{type}}' 的 typeWidget", + "printing": "正在列印…", + "printing_pdf": "正在匯出為 PDF…" }, "note_title": { "placeholder": "請輸入筆記標題..." @@ -2074,5 +2077,10 @@ }, "collections": { "rendering_error": "發現錯誤,無法顯示內容。" + }, + "presentation_view": { + "edit-slide": "編輯此投影片", + "start-presentation": "開始簡報", + "slide-overview": "切換投影片概覽" } } diff --git a/apps/client/src/types.d.ts b/apps/client/src/types.d.ts index 36b56b9a6..c5a93bd0a 100644 --- a/apps/client/src/types.d.ts +++ b/apps/client/src/types.d.ts @@ -16,7 +16,7 @@ interface ElectronProcess { interface CustomGlobals { isDesktop: typeof utils.isDesktop; isMobile: typeof utils.isMobile; - device: "mobile" | "desktop"; + device: "mobile" | "desktop" | "print"; getComponentByEl: typeof appContext.getComponentByEl; getHeaders: typeof server.getHeaders; getReferenceLinkTitle: (href: string) => Promise; @@ -59,6 +59,9 @@ declare global { process?: ElectronProcess; glob?: CustomGlobals; + /** On the printing endpoint, set to true when the note has fully loaded and is ready to be printed/exported as PDF. */ + _noteReady?: boolean; + EXCALIDRAW_ASSET_PATH?: string; } diff --git a/apps/client/src/widgets/collections/NoteList.tsx b/apps/client/src/widgets/collections/NoteList.tsx index cb43ab1be..c39b4e7e8 100644 --- a/apps/client/src/widgets/collections/NoteList.tsx +++ b/apps/client/src/widgets/collections/NoteList.tsx @@ -1,4 +1,4 @@ -import { allViewTypes, ViewModeProps, ViewTypeOptions } from "./interface"; +import { allViewTypes, ViewModeMedia, ViewModeProps, ViewTypeOptions } from "./interface"; import { useNoteContext, useNoteLabel, useNoteLabelBoolean, useTriliumEvent } from "../react/hooks"; import FNote from "../../entities/fnote"; import "./NoteList.css"; @@ -22,9 +22,11 @@ interface NoteListProps { displayOnlyCollections?: boolean; isEnabled: boolean; ntxId: string | null | undefined; + media: ViewModeMedia; + onReady?: () => void; } -export default function NoteList(props: Pick) { +export default function NoteList(props: Pick) { const { note, noteContext, notePath, ntxId } = useNoteContext(); const isEnabled = noteContext?.hasNoteList(); return @@ -34,10 +36,10 @@ export function SearchNoteList(props: Omit } -function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId }: NoteListProps) { +export function CustomNoteList({ note, isEnabled: shouldEnable, notePath, highlightedTokens, displayOnlyCollections, ntxId, onReady, ...restProps }: NoteListProps) { const widgetRef = useRef(null); const viewType = useNoteViewType(note); - const noteIds = useNoteIds(note, viewType, ntxId); + const noteIds = useNoteIds(shouldEnable ? note : null, viewType, ntxId); const isFullHeight = (viewType && viewType !== "list" && viewType !== "grid"); const [ isIntersecting, setIsIntersecting ] = useState(false); const shouldRender = (isFullHeight || isIntersecting || note?.type === "book"); @@ -76,12 +78,14 @@ function CustomNoteList({ note, isEnabled: shouldEnable, noteP note, noteIds, notePath, highlightedTokens, viewConfig: viewModeConfig[0], - saveConfig: viewModeConfig[1] + saveConfig: viewModeConfig[1], + onReady: onReady ?? (() => {}), + ...restProps } } return ( -
+
{props && isEnabled && (
{getComponentByViewType(viewType, props)} @@ -123,7 +127,7 @@ function useNoteViewType(note?: FNote | null): ViewTypeOptions | undefined { } } -function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined, ntxId: string | null | undefined) { +export function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined, ntxId: string | null | undefined) { const [ noteIds, setNoteIds ] = useState([]); const [ includeArchived ] = useNoteLabelBoolean(note, "includeArchived"); @@ -136,7 +140,7 @@ function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | } async function getNoteIds(note: FNote) { - if (viewType === "list" || viewType === "grid") { + if (viewType === "list" || viewType === "grid" || viewType === "table" || note.type === "search") { return note.getChildNoteIds(); } else { return await note.getSubtreeNoteIds(includeArchived); @@ -187,7 +191,7 @@ function useNoteIds(note: FNote | null | undefined, viewType: ViewTypeOptions | return noteIds; } -function useViewModeConfig(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined) { +export function useViewModeConfig(note: FNote | null | undefined, viewType: ViewTypeOptions | undefined) { const [ viewConfig, setViewConfig ] = useState<[T | undefined, (data: T) => void]>(); useEffect(() => { diff --git a/apps/client/src/widgets/collections/board/data.ts b/apps/client/src/widgets/collections/board/data.ts index 273ca3c91..db315564a 100644 --- a/apps/client/src/widgets/collections/board/data.ts +++ b/apps/client/src/widgets/collections/board/data.ts @@ -66,7 +66,7 @@ async function recursiveGroupBy(branches: FBranch[], byColumn: ColumnMap, groupB const note = await branch.getNote(); if (!note || (!includeArchived && note.isArchived)) continue; - if (note.hasChildren()) { + if (note.type !== "search" && note.hasChildren()) { await recursiveGroupBy(note.getChildBranches(), byColumn, groupByColumn, includeArchived); } diff --git a/apps/client/src/widgets/collections/interface.ts b/apps/client/src/widgets/collections/interface.ts index 91b9f301b..7bec23a64 100644 --- a/apps/client/src/widgets/collections/interface.ts +++ b/apps/client/src/widgets/collections/interface.ts @@ -3,6 +3,8 @@ import FNote from "../../entities/fnote"; export const allViewTypes = ["list", "grid", "calendar", "table", "geoMap", "board", "presentation"] as const; export type ViewTypeOptions = typeof allViewTypes[number]; +export type ViewModeMedia = "screen" | "print"; + export interface ViewModeProps { note: FNote; notePath: string; @@ -13,4 +15,6 @@ export interface ViewModeProps { highlightedTokens: string[] | null | undefined; viewConfig: T | undefined; saveConfig(newConfig: T): void; + media: ViewModeMedia; + onReady(): void; } diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.css b/apps/client/src/widgets/collections/legacy/ListOrGridView.css index 3a62b85b3..60afe8954 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.css +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.css @@ -106,6 +106,12 @@ text-align: center; } +.note-list.list-view .note-path { + margin-left: 0.5em; + vertical-align: middle; + opacity: 0.5; +} + /* #region Grid view */ .note-list.grid-view .note-list-container { display: flex; diff --git a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx index db087e840..d29d7e275 100644 --- a/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx +++ b/apps/client/src/widgets/collections/legacy/ListOrGridView.tsx @@ -74,7 +74,7 @@ function ListNoteCard({ note, parentNote, expand, highlightedTokens }: { note: F /> - + diff --git a/apps/client/src/widgets/collections/presentation/index.tsx b/apps/client/src/widgets/collections/presentation/index.tsx index 6ed58c796..dfa4574e0 100644 --- a/apps/client/src/widgets/collections/presentation/index.tsx +++ b/apps/client/src/widgets/collections/presentation/index.tsx @@ -1,4 +1,4 @@ -import { ViewModeProps } from "../interface"; +import { ViewModeMedia, ViewModeProps } from "../interface"; import { useEffect, useLayoutEffect, useRef, useState } from "preact/hooks"; import Reveal from "reveal.js"; import slideBaseStylesheet from "reveal.js/dist/reveal.css?raw"; @@ -14,11 +14,11 @@ import { t } from "../../../services/i18n"; import { DEFAULT_THEME, loadPresentationTheme } from "./themes"; import FNote from "../../../entities/fnote"; -export default function PresentationView({ note, noteIds }: ViewModeProps<{}>) { +export default function PresentationView({ note, noteIds, media, onReady }: ViewModeProps<{}>) { const [ presentation, setPresentation ] = useState(); const containerRef = useRef(null); const [ api, setApi ] = useState(); - const stylesheets = usePresentationStylesheets(note); + const stylesheets = usePresentationStylesheets(note, media); function refresh() { buildPresentationModel(note).then(setPresentation); @@ -33,31 +33,59 @@ export default function PresentationView({ note, noteIds }: ViewModeProps<{}>) { useLayoutEffect(refresh, [ note, noteIds ]); - return presentation && stylesheets && ( + useEffect(() => { + // We need to wait for Reveal.js to initialize (by setting api) and for the presentation to become available. + if (api && presentation) { + // Timeout is necessary because it otherwise can cause flakiness by rendering only the first slide. + setTimeout(onReady, 200); + } + }, [ api, presentation ]); + + if (!presentation || !stylesheets) return; + const content = ( <> - - {stylesheets.map(stylesheet => )} - - - + {stylesheets.map(stylesheet => )} + - ) + ); + + if (media === "screen") { + return ( + <> + {content} + + + ) + } else if (media === "print") { + // Printing needs a query parameter that is read by Reveal.js. + const url = new URL(window.location.href); + url.searchParams.set("print-pdf", ""); + window.history.replaceState({}, '', url); + + // Shadow DOM doesn't work well with Reveal.js's PDF printing mechanism. + return content; + } } -function usePresentationStylesheets(note: FNote) { +function usePresentationStylesheets(note: FNote, media: ViewModeMedia) { const [ themeName ] = useNoteLabelWithDefault(note, "presentation:theme", DEFAULT_THEME); const [ stylesheets, setStylesheets ] = useState(); useLayoutEffect(() => { loadPresentationTheme(themeName).then((themeStylesheet) => { - setStylesheets([ + let stylesheets = [ slideBaseStylesheet, themeStylesheet, slideCustomStylesheet - ].map(stylesheet => stylesheet.replace(/:root/g, ":host"))); + ]; + if (media === "screen") { + // We are rendering in the shadow DOM, so the global variables are not set correctly. + stylesheets = stylesheets.map(stylesheet => stylesheet.replace(/:root/g, ":host")); + } + setStylesheets(stylesheets); }); }, [ themeName ]); @@ -128,6 +156,7 @@ function Presentation({ presentation, setApi } : { presentation: PresentationMod const api = new Reveal(containerRef.current, { transition: "slide", embedded: true, + pdfMaxPagesPerSlide: 1, keyboardCondition(event) { // Full-screen requests sometimes fail, we rely on the UI button instead. if (event.key === "f") { diff --git a/apps/client/src/widgets/collections/presentation/model.ts b/apps/client/src/widgets/collections/presentation/model.ts index 21711b8a0..92b7ffe76 100644 --- a/apps/client/src/widgets/collections/presentation/model.ts +++ b/apps/client/src/widgets/collections/presentation/model.ts @@ -26,7 +26,7 @@ export async function buildPresentationModel(note: FNote): Promise ({ ...(await buildSlideModel(slideNote)), - verticalSlides: await buildVerticalSlides(slideNote) + verticalSlides: note.type !== "search" ? await buildVerticalSlides(slideNote) : undefined }))); postProcessSlides(slides); diff --git a/apps/client/src/widgets/collections/table/index.tsx b/apps/client/src/widgets/collections/table/index.tsx index 2a40c594c..f6ae82009 100644 --- a/apps/client/src/widgets/collections/table/index.tsx +++ b/apps/client/src/widgets/collections/table/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useContext, useEffect, useMemo, useRef, useState } from "p import { ViewModeProps } from "../interface"; import { buildColumnDefinitions } from "./columns"; import getAttributeDefinitionInformation, { buildRowDefinitions, TableData } from "./rows"; -import { useLegacyWidget, useNoteLabelBoolean, useNoteLabelInt, useSpacedUpdate, useTriliumEvent } from "../../react/hooks"; +import { useLegacyWidget, useNoteLabelBoolean, useNoteLabelInt, useTriliumEvent } from "../../react/hooks"; import Tabulator from "./tabulator"; import { Tabulator as VanillaTabulator, SortModule, FormatModule, InteractionModule, EditModule, ResizeColumnsModule, FrozenColumnsModule, PersistenceModule, MoveColumnsModule, MoveRowsModule, ColumnDefinition, DataTreeModule, Options, RowComponent} from 'tabulator-tables'; import { useContextMenu } from "./context_menu"; @@ -17,6 +17,7 @@ import AttributeDetailWidget from "../../attribute_widgets/attribute_detail"; import attributes from "../../../services/attributes"; import { RefObject } from "preact"; import SpacedUpdate from "../../../services/spaced_update"; +import froca from "../../../services/froca"; interface TableConfig { tableData: { @@ -132,25 +133,27 @@ function useData(note: FNote, noteIds: string[], viewConfig: TableConfig | undef const [ isSorted ] = useNoteLabelBoolean(note, "sorted"); const [ movableRows, setMovableRows ] = useState(false); - function refresh() { + async function refresh() { const info = getAttributeDefinitionInformation(note); - buildRowDefinitions(note, info, includeArchived, maxDepth).then(({ definitions: rowData, hasSubtree: hasChildren, rowNumber }) => { - const columnDefs = buildColumnDefinitions({ - info, - movableRows, - existingColumnData: viewConfig?.tableData?.columns, - rowNumberHint: rowNumber, - position: newAttributePosition.current ?? undefined - }); - setColumnDefs(columnDefs); - setRowData(rowData); - setHasChildren(hasChildren); - resetNewAttributePosition(); + // Ensure all note IDs are loaded. + await froca.getNotes(noteIds); + + const { definitions: rowData, hasSubtree: hasChildren, rowNumber } = await buildRowDefinitions(note, info, includeArchived, maxDepth); + const columnDefs = buildColumnDefinitions({ + info, + movableRows, + existingColumnData: viewConfig?.tableData?.columns, + rowNumberHint: rowNumber, + position: newAttributePosition.current ?? undefined }); + setColumnDefs(columnDefs); + setRowData(rowData); + setHasChildren(hasChildren); + resetNewAttributePosition(); } - useEffect(refresh, [ note, noteIds, maxDepth, movableRows ]); + useEffect(() => { refresh() }, [ note, noteIds, maxDepth, movableRows ]); useTriliumEvent("entitiesReloaded", ({ loadResults}) => { // React to column changes. diff --git a/apps/client/src/widgets/collections/table/rows.ts b/apps/client/src/widgets/collections/table/rows.ts index 84b4c5882..e1b0a765e 100644 --- a/apps/client/src/widgets/collections/table/rows.ts +++ b/apps/client/src/widgets/collections/table/rows.ts @@ -20,6 +20,10 @@ export async function buildRowDefinitions(parentNote: FNote, infos: AttributeDef let hasSubtree = false; let rowNumber = childBranches.length; + if (parentNote.type === "search") { + maxDepth = 0; + } + for (const branch of childBranches) { const note = await branch.getNote(); if (!note || (!includeArchived && note.isArchived)) { diff --git a/apps/client/src/widgets/dialogs/import.tsx b/apps/client/src/widgets/dialogs/import.tsx index a54a01573..46db5b8cd 100644 --- a/apps/client/src/widgets/dialogs/import.tsx +++ b/apps/client/src/widgets/dialogs/import.tsx @@ -37,7 +37,7 @@ export default function ImportDialog() { onSubmit={async () => { if (!files || !parentNoteId) { return; - } + } const options: UploadFilesOptions = { safeImport: boolToString(safeImport), @@ -51,11 +51,19 @@ export default function ImportDialog() { setShown(false); await importService.uploadFiles("notes", parentNoteId, Array.from(files), options); }} - onHidden={() => setShown(false)} + onHidden={() => { + setShown(false); + setFiles(null); + }} footer={