Merge remote-tracking branch 'origin/main' into standalone

This commit is contained in:
Elian Doran
2026-04-09 12:57:06 +03:00
40 changed files with 514 additions and 345 deletions

View File

@@ -1,4 +1,4 @@
import { Fragment, h, VNode } from "preact"; import { createContext, Fragment, h, VNode } from "preact";
import * as hooks from "preact/hooks"; import * as hooks from "preact/hooks";
import ActionButton from "../widgets/react/ActionButton"; import ActionButton from "../widgets/react/ActionButton";
@@ -47,6 +47,7 @@ export const preactAPI = Object.freeze({
// Core // Core
h, h,
Fragment, Fragment,
createContext,
/** /**
* Method that must be run for widget scripts that run on Preact, using JSX. The method just returns the same definition, reserved for future typechecking and perhaps validation purposes. * Method that must be run for widget scripts that run on Preact, using JSX. The method just returns the same definition, reserved for future typechecking and perhaps validation purposes.

View File

@@ -1129,9 +1129,7 @@
"spellcheck": { "spellcheck": {
"title": "التدقيق الاملائي", "title": "التدقيق الاملائي",
"enable": "تفعيل التدقيق الاملائي", "enable": "تفعيل التدقيق الاملائي",
"language_code_label": "رمز اللغة او رموز اللغات", "language_code_label": "رمز اللغة او رموز اللغات"
"available_language_codes_label": "رموز اللغات المتاحة:",
"language_code_placeholder": "على سبيل المثال \"en-US\", \"de-AI\""
}, },
"note-map": { "note-map": {
"button-link-map": "خريطة الروابط", "button-link-map": "خريطة الروابط",

View File

@@ -1437,9 +1437,6 @@
"description": "这些选项仅适用于桌面版本,浏览器将使用其原生的拼写检查功能。", "description": "这些选项仅适用于桌面版本,浏览器将使用其原生的拼写检查功能。",
"enable": "启用拼写检查", "enable": "启用拼写检查",
"language_code_label": "语言代码", "language_code_label": "语言代码",
"language_code_placeholder": "例如 \"en-US\", \"de-AT\"",
"multiple_languages_info": "多种语言可以用逗号分隔,例如 \"en-US, de-DE, cs\"。 ",
"available_language_codes_label": "可用的语言代码:",
"restart-required": "拼写检查选项的更改将在应用重启后生效。" "restart-required": "拼写检查选项的更改将在应用重启后生效。"
}, },
"sync_2": { "sync_2": {

View File

@@ -21,7 +21,7 @@
}, },
"bundle-error": { "bundle-error": {
"title": "Načtení uživatelského skriptu selhalo", "title": "Načtení uživatelského skriptu selhalo",
"message": "Uživatelský skript z poznámky s ID \"{{id}}\" a názvem \"{{title}}\" nemohl být spuštěn z důvodu: \n\n{{message}}" "message": "Skript nebylo možné spustit z následujícího důvodu:\n\n{{message}}"
}, },
"widget-list-error": { "widget-list-error": {
"title": "Nepodařilo se získat seznam widgetů ze serveru" "title": "Nepodařilo se získat seznam widgetů ze serveru"
@@ -29,7 +29,7 @@
"widget-render-error": { "widget-render-error": {
"title": "Nepodařilo se vykreslit vlastní React widget" "title": "Nepodařilo se vykreslit vlastní React widget"
}, },
"widget-missing-parent": "Vlastní widget nemá definovanou povinnou vlastnost '{{property}}'.", "widget-missing-parent": "Vlastní widget nemá definovanou povinnou vlastnost {{property}}“.\n\nPokud má být tento skript spuštěn bez prvku uživatelského rozhraní, použijte místo toho „#run=frontendStartup“.",
"open-script-note": "Otevřít poznámku se skriptem", "open-script-note": "Otevřít poznámku se skriptem",
"scripting-error": "Chyba vlastního skriptu: {{title}}" "scripting-error": "Chyba vlastního skriptu: {{title}}"
}, },
@@ -120,9 +120,9 @@
"note_cloned": "Poznámka „{{clonedTitle}}“ bylo naklonována do „{{targetTitle}}“" "note_cloned": "Poznámka „{{clonedTitle}}“ bylo naklonována do „{{targetTitle}}“"
}, },
"zpetne_odkazy": { "zpetne_odkazy": {
"backlink_one": "{{count}} zpětný odkaz", "backlink_one": "{{count}} Zpětný odkaz",
"backlink_few": "{{count}} zpětné odkazy", "backlink_few": "{{count}} Zpětné odkazy",
"backlink_other": "{{count}} zpětných odkazů", "backlink_other": "{{count}} Zpětných odkazů",
"relation": "vazba" "relation": "vazba"
}, },
"help": { "help": {
@@ -183,7 +183,7 @@
"import": { "import": {
"importIntoNote": "Import do poznámky", "importIntoNote": "Import do poznámky",
"chooseImportFile": "Vyberte soubor k importu", "chooseImportFile": "Vyberte soubor k importu",
"importDescription": "Obsah vybraných souborů bude importován jako dceřiné poznámky do {{name}}", "importDescription": "Obsah vybraných souborů bude importován jako dceřiné poznámky do",
"importZipRecommendation": "Při importu ZIP souboru bude hierarchie poznámek odrážet strukturu podadresářů v archivu.", "importZipRecommendation": "Při importu ZIP souboru bude hierarchie poznámek odrážet strukturu podadresářů v archivu.",
"options": "Nastavení", "options": "Nastavení",
"safeImportTooltip": "Exportované soubory Trilium <code>.zip</code> mohou obsahovat spustitelné skripty, které mohou mít škodlivé chování. Bezpečný import deaktivuje automatické spouštění všech importovaných skriptů. Zrušte zaškrtnutí \"Bezpečný import\" pouze v případě, že importovaný archiv má obsahovat spustitelné skripty a plně důvěřujete obsahu importovaného souboru.", "safeImportTooltip": "Exportované soubory Trilium <code>.zip</code> mohou obsahovat spustitelné skripty, které mohou mít škodlivé chování. Bezpečný import deaktivuje automatické spouštění všech importovaných skriptů. Zrušte zaškrtnutí \"Bezpečný import\" pouze v případě, že importovaný archiv má obsahovat spustitelné skripty a plně důvěřujete obsahu importovaného souboru.",
@@ -215,26 +215,26 @@
"box_size_small": "Malý (~ 10 řádků)", "box_size_small": "Malý (~ 10 řádků)",
"box_size_medium": "Střední (~ 30 řádků)", "box_size_medium": "Střední (~ 30 řádků)",
"box_size_full": "Úplný (pole zobrazuje kompletní text)", "box_size_full": "Úplný (pole zobrazuje kompletní text)",
"button_include": "Zahrnout {{note}}" "button_include": "Zahrnout poznámku"
}, },
"info": { "info": {
"modalTitle": "Informační zpráva", "modalTitle": "Informační zpráva",
"closeButton": "Zavřít", "closeButton": "Zavřít",
"okButton": "OK", "okButton": "OK",
"copy_to_clipboard": "Kopírovat do {{clipboard}}" "copy_to_clipboard": "Kopírovat do schránky"
}, },
"jump_to_note": { "jump_to_note": {
"search_placeholder": "Hledat {{note}} podle jména nebo typu > pro příkazy...", "search_placeholder": "Hledat poznámku podle jména nebo typu > pro příkazy...",
"search_button": "Hledat v celém textu" "search_button": "Hledat v celém textu"
}, },
"markdown_import": { "markdown_import": {
"dialog_title": "{{Markdown}} import", "dialog_title": "Markdown import",
"modal_body_text": "Kvůli sandboxu prohlížeče není možné přímo číst z {{clipboard}} z {{JavaScript}}. Vložte prosím {{Markdown}} k importu do textového pole níže a klikněte na tlačítko Import.", "modal_body_text": "Vzhledem k omezením prohlížeče není možné přímo číst obsah schránky z JavaScriptu. Vložte prosím Markdown, který chcete importovat, do textového pole níže a klikněte na tlačítko Importovat",
"import_button": "Import", "import_button": "Import",
"import_success": "{{Markdown}} obsah byl importován do dokumentu." "import_success": "Markdown obsah byl importován do dokumentu."
}, },
"move_to": { "move_to": {
"dialog_title": "Přesunout {{notes}} do ...", "dialog_title": "Přesunout poznámku do ...",
"notes_to_move": "Poznámky k přesunu", "notes_to_move": "Poznámky k přesunu",
"target_parent_note": "Cílová nadřazená poznámka", "target_parent_note": "Cílová nadřazená poznámka",
"search_placeholder": "Hledat poznámku podle názvu", "search_placeholder": "Hledat poznámku podle názvu",
@@ -333,12 +333,12 @@
"attr_detail_title": "Detail Atributu", "attr_detail_title": "Detail Atributu",
"close_button_title": "Zrušit změny a zavřít", "close_button_title": "Zrušit změny a zavřít",
"attr_is_owned_by": "Atribut je vlastněn", "attr_is_owned_by": "Atribut je vlastněn",
"attr_name_title": "Název atributu může obsahovat pouze alfanumerické znaky, dvojtečku a podtržítko.", "attr_name_title": "Název atributu může obsahovat pouze alfanumerické znaky, dvojtečku a podtržítko",
"name": "Název", "name": "Název",
"value": "Hodnota", "value": "Hodnota",
"target_note_title": "Vazba je pojmenované spojení mezi zdrojovou {{note}} a cílovou {{note}}.", "target_note_title": "Vazba je pojmenované spojení mezi zdrojovou poznámkou a cílovou poznámkou.",
"target_note": "Cílová {{note}}", "target_note": "Cílová poznámka",
"promoted_title": "Propagovaný atribut je zobrazen prominentně na {{note}}.", "promoted_title": "Propagovaný atribut je zobrazen prominentně na poznámce.",
"promoted": "Propagováno", "promoted": "Propagováno",
"promoted_alias_title": "Název, který se má zobrazit v uživatelském rozhraní propagovaných atributů.", "promoted_alias_title": "Název, který se má zobrazit v uživatelském rozhraní propagovaných atributů.",
"promoted_alias": "Alias", "promoted_alias": "Alias",
@@ -374,51 +374,51 @@
"disable_versioning": "zakáže automatické verzování. Užitečné například pro velké, ale nepodstatné poznámky - například velké JavaScript knihovny používané pro scripting", "disable_versioning": "zakáže automatické verzování. Užitečné například pro velké, ale nepodstatné poznámky - například velké JavaScript knihovny používané pro scripting",
"calendar_root": "označí poznámku, která by měla být použita jako kořen pro denní poznámky. Pouze jedna by měla být takto označena.", "calendar_root": "označí poznámku, která by měla být použita jako kořen pro denní poznámky. Pouze jedna by měla být takto označena.",
"archived": "Poznámky s tímto štítkem nebudou ve výchozím nastavení viditelné ve výsledcích vyhledávání (také v dialogových oknech Přeskočit na, Přidat odkaz atd.).", "archived": "Poznámky s tímto štítkem nebudou ve výchozím nastavení viditelné ve výsledcích vyhledávání (také v dialogových oknech Přeskočit na, Přidat odkaz atd.).",
"exclude_from_export": "Poznámky (včetně jejich podstromu) nebudou zahrnuty do žádného exportu poznámek.", "exclude_from_export": "Poznámky (včetně jejich podstromu) nebudou zahrnuty do žádného exportu poznámek",
"run": "Definuje, při kterých událostech se má skript spustit. Možné hodnoty jsou: <ul> <li>frontendStartup - když se spustí frontend Trilium (nebo se obnoví), ale ne na mobilních zařízeních.</li> <li>mobileStartup - když se spustí frontend Trilium (nebo se obnoví), na mobilních zařízeních.</li> <li>backendStartup - když se spustí backend Trilium.</li> <li>hourly - spustit jednou za hodinu. Můžete použít další štítek <code>runAtHour</code> pro určení hodiny.</li> <li>daily - spustit jednou denně.</li> </ul>", "run": "Definuje, při kterých událostech se má skript spustit. Možné hodnoty jsou: \n<ul>\n <li>frontendStartup - když se spustí frontend Trilium (nebo se obnoví), ale ne na mobilních zařízeních.</li>\n<li>mobileStartup - když se spustí frontend Trilium (nebo se obnoví), na mobilních zařízeních.</li>\n <li>backendStartup - když se spustí backend Trilium.</li>\n<li>hourly - spustit jednou za hodinu. Můžete použít další štítek <code>runAtHour</code> pro určení hodiny.</li>\n <li>daily - spustit jednou denně.</li>\n </ul>",
"run_on_instance": "Definujte, na které instanci Trilium se má toto spustit. Ve výchozím nastavení na všech instancích.", "run_on_instance": "Definujte, na které instanci Trilium se má toto spustit. Ve výchozím nastavení na všech instancích.",
"run_at_hour": "V kterou hodinu se má toto spustit. Mělo by se používat společně s <code>#run=hourly</code>. Lze definovat vícekrát pro více spuštění během dne.", "run_at_hour": "V kterou hodinu se má toto spustit. Mělo by se používat společně s <code>#run=hourly</code>. Lze definovat vícekrát pro více spuštění během dne.",
"disable_inclusion": "Skripty s tímto štítkem nebudou zahrnuty do spuštění nadřazeného skriptu.", "disable_inclusion": "Skripty s tímto štítkem nebudou zahrnuty do spuštění nadřazeného skriptu.",
"sorted": "Udržuje podřízené poznámky seřazené podle názvu abecedně.", "sorted": "Udržuje podřízené poznámky seřazené podle názvu abecedně",
"sort_direction": "ASC (výchozí) nebo DESC", "sort_direction": "ASC (výchozí) nebo DESC",
"sort_folders_first": "Složky (poznámky s podřízenými položkami) by měly být řazeny nahoře.", "sort_folders_first": "Složky (poznámky s podřízenými položkami) by měly být řazeny nahoře",
"top": "Udržuje danou poznámku nahoře v rámci jejího nadřazeného (platí pouze pro seřazené nadřazené položky).", "top": "Udržuje danou poznámku nahoře v rámci jejího nadřazeného (platí pouze pro seřazené nadřazené položky)",
"hide_promoted_attributes": "Skryje propagované atributy v této poznámce.", "hide_promoted_attributes": "Skryje propagované atributy v této poznámce",
"read_only": "Editor je v režimu pouze pro čtení. Funguje pouze pro textové a kódové poznámky.", "read_only": "Editor je v režimu pouze pro čtení. Funguje pouze pro textové a kódové poznámky.",
"auto_read_only_disabled": "Textové/kódové poznámky se mohou automaticky nastavit do režimu pouze pro čtení, pokud jsou příliš velké. Toto chování můžete zakázat pro každou poznámku přidáním tohoto štítku do poznámky.", "auto_read_only_disabled": "Textové/kódové poznámky se mohou automaticky nastavit do režimu pouze pro čtení, pokud jsou příliš velké. Toto chování můžete zakázat pro každou poznámku přidáním tohoto štítku do poznámky",
"app_css": "Označuje CSS poznámky, které jsou načteny do aplikace Trilium a mohou být tak použity k úpravě vzhledu Trilium.", "app_css": "Označuje CSS poznámky, které jsou načteny do aplikace Trilium a mohou být tak použity k úpravě vzhledu Trilium.",
"app_theme": "Označuje CSS poznámky, které jsou kompletními motivy Trilium a jsou tak dostupné v možnostech Trilium.", "app_theme": "Označuje CSS poznámky, které jsou kompletními motivy Trilium a jsou tak dostupné v možnostech Trilium.",
"app_theme_base": "nastavte na \"next\", \"next-light\" nebo \"next-dark\" pro použití odpovídajícího tématu TriliumNext (auto, světlé nebo tmavé) jako základu pro vlastní téma, namísto staršího.", "app_theme_base": "nastavte na \"next\", \"next-light\" nebo \"next-dark\" pro použití odpovídajícího tématu TriliumNext (auto, světlé nebo tmavé) jako základu pro vlastní téma, namísto staršího.",
"css_class": "hodnota tohoto štítku je poté přidána jako CSS třída k uzlu reprezentujícímu danou {{Poznámka}} ve stromu. To může být užitečné pro pokročilé tématizace. Lze použít v šablonových {{Poznámka}}.", "css_class": "hodnota tohoto štítku je poté přidána jako CSS třída k uzlu reprezentujícímu danou poznámku ve stromu. To může být užitečné pro pokročilé tématizace. Lze použít v šablonových poznámkách.",
"icon_class": "hodnota tohoto štítku je přidána jako CSS třída k ikoně ve stromu, což může pomoci vizuálně odlišit {{Poznámky}} ve stromu. Příkladem může být bx bx-home - ikony jsou převzaty z boxicons. Lze použít v šablonových {{Poznámka}}.", "icon_class": "hodnota tohoto štítku je přidána jako CSS třída k ikoně ve stromu, což může pomoci vizuálně odlišit poznámky ve stromu. Příkladem může být bx bx-home - ikony jsou převzaty z boxicons. Lze použít v šablonových poznámkách.",
"page_size": "počet položek na stránce v seznamu {{Poznámek}}", "page_size": "počet položek na stránce v seznamu poznámek",
"custom_request_handler": "viz <a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">Vlastní zpracovatel požadavků</a>", "custom_request_handler": "viz <a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">Vlastní zpracovatel požadavků</a>",
"custom_resource_provider": "viz <a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">Vlastní zpracovatel požadavků</a>", "custom_resource_provider": "viz <a href=\"javascript:\" data-help-page=\"custom-request-handler.html\">Vlastní zpracovatel požadavků</a>",
"widget": "označí tuto {{Poznámka}} jako vlastní widget, který bude přidán do stromu komponent Trilium", "widget": "označí tuto poznámku jako vlastní widget, který bude přidán do stromu komponent Trilium",
"workspace": "označí tuto {{Poznámka}} jako pracovní prostor, který umožňuje snadné zúžení zobrazení", "workspace": "označí tuto poznámku jako pracovní prostor, který umožňuje snadné zúžení zobrazení",
"workspace_icon_class": "definuje CSS třídu ikony box, která bude použita na {{záložce}} při zúžení zobrazení na tuto {{Poznámka}}", "workspace_icon_class": "definuje CSS třídu ikony box, která bude použita na záložce při zúžení zobrazení na tuto poznámku",
"workspace_tab_background_color": "CSS barva použitá na {{záložce}} při zúžení zobrazení na tuto {{Poznámka}}", "workspace_tab_background_color": "CSS barva použitá na záložce při zúžení zobrazení na tuto poznámku",
"workspace_calendar_root": "Definuje kořenový {{Kalendář}} pro pracovní prostor", "workspace_calendar_root": "Definuje kořenový kalendář pro pracovní prostor",
"workspace_template": "Tato {{Poznámka}} se zobrazí ve výběru dostupných {{šablon}} při vytváření nové {{Poznámky}}, ale pouze pokud je zúžena do pracovního prostoru obsahujícího tuto {{šablonu}}", "workspace_template": "Tato poznámka se zobrazí ve výběru dostupných šablon při vytváření nové poznámky, ale pouze pokud je zúžena do pracovního prostoru obsahujícího tuto šablonu",
"search_home": "nové {{Poznámky}} {{Hledání}} budou vytvořeny jako {{Dceřiné}} této {{Poznámky}}", "search_home": "nové poznámky k vyhledávání budou vytvořeny jako podřízené položky této poznámky",
"workspace_search_home": "nové {{Poznámky}} {{Hledání}} budou vytvořeny jako {{Dceřiné}} této {{Poznámky}} při zúžení zobrazení na některého z předků této {{Poznámky}} pracovního prostoru", "workspace_search_home": "při přesunutí do některé nadřazené poznámky tohoto pracovního prostoru budou vytvořeny nové poznámky k vyhledávání jako podřízené této poznámky",
"inbox": "výchozí složka doručené pošty pro nové {{Poznámky}} - při vytváření {{Poznámky}} pomocí tlačítka \"nová {{Poznámka}}\" na postranním panelu budou {{Poznámky}} vytvořeny jako {{Dceřiné}} {{Poznámky}} označené štítkem <code>#inbox</code>.", "inbox": "výchozí umístění schránky pro nové poznámky pokud vytvoříte poznámku pomocí tlačítka „Nová poznámka“ v postranním panelu, poznámky se uloží jako podřízené poznámky k poznámce označené štítkem <code>#inbox</code>.",
"workspace_inbox": "Výchozí umístění pro nové {{Poznámky}} při přesunutí do některého předka této {{Poznámky}} pracovního prostoru", "workspace_inbox": "výchozí umístění doručené pošty pro nové poznámky při přesunutí do některé nadřazené poznámky tohoto pracovního prostoru",
"sql_console_home": "Výchozí umístění {{Poznámky}} konzole {{SQL}}", "sql_console_home": "výchozí umístění poznámky konzole SQL",
"bookmark_folder": "{{Poznámka}} s tímto {{štítek}} se zobrazí v {{záložkách}} jako složka (umožňuje přístup k jejím podřízeným {{Poznámky}})", "bookmark_folder": "poznámka s tímto štítkem se zobrazí v záložkách jako složka (umožňuje přístup k jejím podřízeným poznámkám)",
"share_hidden_from_tree": "Tato {{Poznámka}} je skrytá z levého navigačního {{stromu}}, ale je stále přístupná pomocí její {{URL}}", "share_hidden_from_tree": "Tato poznámka je skrytá z levého navigačního stromu, ale je stále přístupná pomocí její URL",
"share_external_link": "{{Poznámka}} bude fungovat jako odkaz na externí webovou stránku ve sdíleném {{stromu}}", "share_external_link": "poznámka bude fungovat jako odkaz na externí webovou stránku ve sdíleném stromu",
"share_alias": "Definujte alias, pod kterým bude {{Poznámka}} dostupná na https://your_trilium_host/share/[your_alias]", "share_alias": "definujte alias, pod kterým bude poznámka dostupná na https://your_trilium_host/share/[your_alias]",
"share_omit_default_css": "Výchozí {{CSS}} stránky pro sdílení bude vynechána. Použijte, pokud provedete rozsáhlé změny stylu.", "share_omit_default_css": "výchozí CSS stránky pro sdílení bude vynechána. Použijte, pokud provedete rozsáhlé změny stylu.",
"share_root": "Označuje {{Poznámku}}, která je obsluhována z kořene /share.", "share_root": "Označuje poznámku, která je obsluhována z kořene /share.",
"share_description": "Definujte text, který má být přidán do meta tagu {{HTML}} pro popis", "share_description": "Definujte text, který má být přidán do meta tagu HTML pro popis",
"share_raw": "{{Poznámka}} bude obsluhována v surovém formátu, bez obalu {{HTML}}", "share_raw": "poznámka bude obsluhována v surovém formátu, bez obalu HTML",
"share_disallow_robot_indexing": "Zakáže indexování této {{Poznámky}} roboty pomocí hlavičky <code>X-Robots-Tag: noindex</code>", "share_disallow_robot_indexing": "zakáže indexování této poznámky roboty pomocí hlavičky <code>X-Robots-Tag: noindex</code>",
"share_credentials": "Vyžaduje pověření pro přístup k této sdílené {{Poznámce}}. Hodnota se očekává ve formátu 'username:password'. Nezapomeňte ji učinit dědičnou, aby se použila na podřízené {{Poznámky}}/obrázky.", "share_credentials": "Vyžaduje pověření pro přístup k této sdílené poznámce. Hodnota se očekává ve formátu 'username:password'. Nezapomeňte ji učinit dědičnou, aby se použila na podřízené poznámky/obrázky.",
"share_index": "{{Poznámka}} s tímto {{štítek}} zobrazí všechny kořeny sdílených {{Poznámek}}", "share_index": "poznámka s tímto štítkem zobrazí všechny kořeny sdílených poznámek",
"display_relations": "Seznam jmen {{vazeb}} oddělených čárkami, které se mají zobrazit. Všechny ostatní budou skryté.", "display_relations": "seznam jmen vazeb oddělených čárkami, které se mají zobrazit. Všechny ostatní budou skryté.",
"hide_relations": "Seznam jmen {{vazeb}} oddělených čárkami, které se mají skrýt. Všechny ostatní budou zobrazeny.", "hide_relations": "Seznam jmen vazeb oddělených čárkami, které se mají skrýt. Všechny ostatní budou zobrazeny.",
"title_template": "Výchozí název poznámek vytvořených jako dceřiné této poznámky. Hodnota se vyhodnocuje jako JavaScript řetězec a může být tak obohacena o dynamický obsah pomocí vložených proměnných <code>now</code> a <code>parentNote</code>. Příklady: <ul> <li><code>${parentNote.getLabelValue('authorName')}'s literary works</code></li> <li><code>Log pro ${now.format('YYYY-MM-DD HH:mm:ss')}</code></li> </ul> Viz <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html\">wiki s detaily</a>, API dokumentace pro <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> a <a href=\"https://day.js.org/docs/en/display/format\">now</a> pro detaily.", "title_template": "výchozí název poznámek vytvořených jako podřízené této poznámce. Hodnota je vyhodnocena jako řetězec v JavaScriptu \n a lze ji tedy obohatit o dynamický obsah pomocí vložených proměnných <code>now</code> a <code>parentNote</code>. Příklady:\n \n <ul>\n <li><code>${parentNote.getLabelValue(authorName)}ova literární díla</code></li>\n <li><code>Záznam pro ${now.format(YYYY-MM-DD HH:mm:ss)}</code></li>\n </ul>\n \n Viz <a href=\"https://triliumnext.github.io/Docs/Wiki/default-note-title.html \">wiki s podrobnostmi</a>, dokumentaci API pro <a href=\"https://zadam.github.io/trilium/backend_api/Note.html\">parentNote</a> a <a href=\"https://day.js.org/docs/en/display/format\">now</a> pro podrobnosti.",
"template": "Tato poznámka se zobrazí ve výběru dostupných šablon při vytváření nové poznámky", "template": "Tato poznámka se zobrazí ve výběru dostupných šablon při vytváření nové poznámky",
"toc": "<code>#toc</code> nebo <code>#toc=show</code> vynutí zobrazení Obsahu, <code>#toc=hide</code> vynutí jeho skrytí. Pokud štítek neexistuje, je respektováno globální nastavení", "toc": "<code>#toc</code> nebo <code>#toc=show</code> vynutí zobrazení Obsahu, <code>#toc=hide</code> vynutí jeho skrytí. Pokud štítek neexistuje, je respektováno globální nastavení",
"color": "Definuje barvu poznámky ve stromu poznámek, odkazech atd. Použijte jakoukoli platnou hodnotu CSS barvy, například 'red' nebo #a13d5f", "color": "Definuje barvu poznámky ve stromu poznámek, odkazech atd. Použijte jakoukoli platnou hodnotu CSS barvy, například 'red' nebo #a13d5f",
@@ -429,20 +429,20 @@
"exclude_from_note_map": "Poznámky s tímto štítkem budou skryté v Mapě poznámek", "exclude_from_note_map": "Poznámky s tímto štítkem budou skryté v Mapě poznámek",
"new_notes_on_top": "Nové poznámky budou vytvářeny nahoře nadřazené poznámky, nikoli dole.", "new_notes_on_top": "Nové poznámky budou vytvářeny nahoře nadřazené poznámky, nikoli dole.",
"hide_highlight_widget": "Skrýt Widget Seznam zvýraznění", "hide_highlight_widget": "Skrýt Widget Seznam zvýraznění",
"run_on_note_creation": "Spustí se při vytvoření {{name}} na backendu. Použijte tuto vazbu, pokud chcete spustit skript pro všechny {{name}} vytvořené pod určitým podstromem. V takovém případě ji vytvořte na kořenovém {{name}} podstromu a nastavte ji jako dědičnou. Nově vytvořená {{name}} v podstromu (v jakékoli hloubce) spustí skript.", "run_on_note_creation": "spustí se při vytvoření poznámky na serveru. Tuto relaci použijte, pokud chcete skript spustit pro všechny poznámky vytvořené v rámci konkrétního podstromu. V takovém případě ji vytvořte na kořenové poznámce podstromu a nastavte ji jako dědičnou. Skript se spustí při vytvoření nové poznámky v rámci podstromu (v jakékoli úrovni).",
"run_on_child_note_creation": "Spustí se při vytvoření nové {{name}} pod {{name}}, kde je tato vazba definována.", "run_on_child_note_creation": "provede se, když je pod poznámkou, ve které je tento vztah definován, vytvořena nová poznámka",
"run_on_note_title_change": "Spustí se při změně názvu {{name}} (zahrnuje i vytvoření {{name}}).", "run_on_note_title_change": "spustí se při změně názvu poznámky (včetně vytvoření poznámky)",
"run_on_note_content_change": "Spustí se při změně obsahu {{name}} (zahrnuje i vytvoření {{name}}).", "run_on_note_content_change": "spustí se při změně obsahu poznámky (včetně jejího vytvoření).",
"run_on_note_change": "Spustí se při změně {{name}} (zahrnuje i vytvoření {{name}}). Nezahrnuje změny obsahu.", "run_on_note_change": "spustí se při změně noty (včetně jejího vytvoření). Nezahrnuje změny obsahu",
"run_on_note_deletion": "Spustí se při mazání {{name}}.", "run_on_note_deletion": "spustí se při mazání poznámky",
"run_on_branch_creation": "Spustí se při vytvoření větve. Větev je odkaz mezi nadřazenou {{name}} a dceřinou {{name}} a je vytvořena například při klonování nebo přesouvání {{name}}.", "run_on_branch_creation": "spustí se při vytvoření větve. Větev je propojení mezi nadřazenou a podřízenou poznámkou a vzniká například při klonování nebo přesouvání poznámky.",
"run_on_branch_change": "Spustí se při aktualizaci větve.", "run_on_branch_change": "Spustí se při aktualizaci větve.",
"run_on_branch_deletion": "Spustí se při smazání větve. Větev je odkaz mezi nadřazenou {{name}} a dceřinou {{name}} a je smazána například při přesouvání {{name}} (stará větev/odkaz je smazán).", "run_on_branch_deletion": "spustí se při smazání větve. Větev představuje propojení mezi nadřazenou a podřízenou poznámkou a je smazána např. při přesunu poznámky (původní větev/propojení je smazáno).",
"run_on_attribute_creation": "Spustí se při vytvoření nového atributu pro {{name}}, která definuje tuto vazbu.", "run_on_attribute_creation": "spustí se při vytvoření nového atributu pro poznámku, která definuje tuto vazbu",
"relation_template": "Atributy {{name}} budou zděděny i bez vztahu rodič-dítě, obsah {{name}} a podstrom budou přidány k instančním {{name}}, pokud jsou prázdné. Podrobnosti naleznete v dokumentaci.", "relation_template": "atributy poznámky budou zděděny i bez vztahu rodič-potomek; obsah poznámky a její podstrom budou přidány do instancí poznámek, pokud jsou prázdné. Podrobnosti najdete v dokumentaci.",
"inherit": "Atributy {{name}} budou zděděny i bez vztahu rodič-dítě. Podobný koncept naleznete ve vazbě {{template}}. Viz dědičnost atributů v dokumentaci.", "inherit": "Atributy poznámky budou zděděny i bez vztahu rodičpotomek. Podobný koncept najdete v sekci „Vazby šablon“. Více informací najdete v dokumentaci v části „Dědičnost atributů.",
"render_note": "{{name}} typu \"render HTML note\" budou vykresleny pomocí kódové {{name}} (HTML nebo skript) a je nutné pomocí této vazby určit, která {{name}} má být vykreslena.", "render_note": "Poznámky typu „zobrazit HTML poznámku“ budou zobrazeny pomocí kódové poznámky (HTML nebo skript) a je nutné pomocí této vazby určit, která poznámka se má zobrazit",
"widget_relation": "Cíl této vazby bude spuštěn a vykreslen jako widget na postranním panelu.", "widget_relation": "cíl této vazby bude proveden a zobrazen jako widget v postranním panelu",
"share_css": "CSS poznámka, která bude vložena do sdílené stránky. CSS poznámka musí být také v sdíleném podstromu. Zvažte použití 'share_hidden_from_tree' a 'share_omit_default_css'.", "share_css": "CSS poznámka, která bude vložena do sdílené stránky. CSS poznámka musí být také v sdíleném podstromu. Zvažte použití 'share_hidden_from_tree' a 'share_omit_default_css'.",
"share_js": "JavaScript poznámka, která bude vložena do sdílené stránky. JS poznámka musí být také v sdíleném podstromu. Zvažte použití 'share_hidden_from_tree'.", "share_js": "JavaScript poznámka, která bude vložena do sdílené stránky. JS poznámka musí být také v sdíleném podstromu. Zvažte použití 'share_hidden_from_tree'.",
"share_template": "Vložená JavaScript poznámka, která bude použita jako šablona pro zobrazení sdílené poznámky. Vrací se k výchozí šabloně. Zvažte použití 'share_hidden_from_tree'.", "share_template": "Vložená JavaScript poznámka, která bude použita jako šablona pro zobrazení sdílené poznámky. Vrací se k výchozí šabloně. Zvažte použití 'share_hidden_from_tree'.",
@@ -452,7 +452,8 @@
"and_more": "... a {{count}} dalších.", "and_more": "... a {{count}} dalších.",
"print_landscape": "Při exportu do ⟨PDF⟩ změní orientaci stránky na landscape místo portrait.", "print_landscape": "Při exportu do ⟨PDF⟩ změní orientaci stránky na landscape místo portrait.",
"print_page_size": "Při exportu do ⟨PDF⟩ změní velikost stránky. Podporované hodnoty: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.", "print_page_size": "Při exportu do ⟨PDF⟩ změní velikost stránky. Podporované hodnoty: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.",
"color_type": "Barva" "color_type": "Barva",
"run_on_attribute_change": " spustí se při změně atributu poznámky, která tuto vazbu definuje. Spustí se také při smazání tohoto atributu"
}, },
"attribute_editor": { "attribute_editor": {
"help_text_body1": "Pro přidání štítku stačí zadat např. <code>#rock</code> nebo pokud chcete přidat i hodnotu, např. <code>#year = 2020</code>", "help_text_body1": "Pro přidání štítku stačí zadat např. <code>#rock</code> nebo pokud chcete přidat i hodnotu, např. <code>#year = 2020</code>",
@@ -481,27 +482,27 @@
"label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.", "label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.",
"to_value": "k hodnotě", "to_value": "k hodnotě",
"new_value_placeholder": "nová hodnota", "new_value_placeholder": "nová hodnota",
"help_text": "Na všech odpovídajících {{Note}}:", "help_text": "Na všech odpovídajících poznámkách:",
"help_text_item1": "vytvořit daný {{label}}, pokud {{Note}} jej ještě nemá", "help_text_item1": "vytvořit daný štítek, pokud jej poznámka ještě nemá",
"help_text_item2": "nebo změnit hodnotu existujícího {{label}}", "help_text_item2": "nebo změnit hodnotu existujícího štítku",
"help_text_note": "Můžete také zavolat tuto metodu bez hodnoty, v takovém případě bude {{label}} přiřazen k {{Note}} bez hodnoty." "help_text_note": "Můžete také zavolat tuto metodu bez hodnoty, v takovém případě bude štítek přiřazen k poznámce bez hodnoty."
}, },
"delete_label": { "delete_label": {
"delete_label": "Smazat {{label}}", "delete_label": "Smazat štítek",
"label_name_placeholder": "Název {{label}}", "label_name_placeholder": "název štítku",
"label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka." "label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka."
}, },
"rename_label": { "rename_label": {
"rename_label": "Přejmenovat {{label}}", "rename_label": "Přejmenovat štítek",
"rename_label_from": "Přejmenovat {{label}} z", "rename_label_from": "Přejmenovat štítek z",
"old_name_placeholder": "starý název", "old_name_placeholder": "starý název",
"to": "Na", "to": "Na",
"new_name_placeholder": "nový název", "new_name_placeholder": "nový název",
"name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka." "name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka."
}, },
"update_label_value": { "update_label_value": {
"update_label_value": "Aktualizovat hodnotu {{label}}", "update_label_value": "Aktualizovat hodnotu štítku",
"label_name_placeholder": "Název {{label}}", "label_name_placeholder": "název štítku",
"label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.", "label_name_title": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.",
"to_value": "na hodnotu", "to_value": "na hodnotu",
"new_value_placeholder": "nová hodnota", "new_value_placeholder": "nová hodnota",
@@ -523,29 +524,29 @@
"move_note": "Přesunout poznámku", "move_note": "Přesunout poznámku",
"to": "do", "to": "do",
"target_parent_note": "cílové nadřazené poznámky", "target_parent_note": "cílové nadřazené poznámky",
"on_all_matched_notes": "Na všech odpovídajících {{Poznámka}}", "on_all_matched_notes": "Na všech odpovídajících poznámkách",
"move_note_new_parent": "přesunout {{Poznámka}} do nového nadřazeného, pokud má {{Poznámka}} pouze jednoho nadřazeného (tj. stará větev je odstraněna a nová větev je vytvořena do nového nadřazeného)", "move_note_new_parent": "přesunout poznámku do nové nadřazené složky, pokud má poznámka pouze jednu nadřazenou složku (tj. stará větev je odstraněna a je vytvořena nová větev vedoucí do nové nadřazené složky)",
"clone_note_new_parent": "klonovat {{Poznámka}} do nového nadřazeného, pokud má {{Poznámka}} více klonů/větví (není jasné, kterou větev by mělo odstranit)", "clone_note_new_parent": "klonovat poznámku do novéhé nadřazené složky, pokud má poznámka více klonů/větví (není jasné, kterou větev by mělo odstranit)",
"nothing_will_happen": "nic se nestane, pokud nelze {{Poznámka}} přesunout do cílové {{Poznámka}} (tj. to by vytvořilo cyklus ve stromu)" "nothing_will_happen": "nic se nestane, pokud nelze poznámku přesunout do cílové poznámky (tj. to by vytvořilo cyklus ve stromu)"
}, },
"rename_note": { "rename_note": {
"rename_note": "Přejmenovat {{Poznámka}}", "rename_note": "Přejmenovat poznámku",
"rename_note_title_to": "Přejmenovat název {{Poznámka}} na", "rename_note_title_to": "Přejmenovat název poznámky na",
"new_note_title": "nový název {{Poznámka}}", "new_note_title": "nový název poznámky",
"click_help_icon": "Klikněte na ikonu nápovědy vpravo a zobrazte všechny možnosti", "click_help_icon": "Klikněte na ikonu nápovědy vpravo a zobrazte všechny možnosti",
"evaluated_as_js_string": "Zadaná hodnota je vyhodnocena jako JavaScript řetězec a může být tak obohacena o dynamický obsah pomocí vložené proměnné <code>note</code> (přejmenovaná {{Poznámka}}). Příklady:", "evaluated_as_js_string": "Zadaná hodnota je vyhodnocena jako JavaScript řetězec a může být tak obohacena o dynamický obsah pomocí vložené proměnné <code>note</code> (poznámka bude přejmenována). Příklady:",
"example_note": "<code>Poznámka</code> - všechny odpovídající {{Poznámka}} jsou přejmenovány na 'Poznámka'", "example_note": "<code>Poznámka</code> - všechny odpovídající poznámky jsou přejmenovány na 'Poznámka'",
"example_new_title": "<code>NOVÝ: ${note.title}</code> - názvy odpovídajících {{Poznámka}} jsou předponovány 'NOVÝ: '", "example_new_title": "<code>NOVÝ: ${note.title}</code> - názvy odpovídajících poznámek mají předponu 'NOVÝ: '",
"example_date_prefix": "<code>${note.dateCreatedObj.format('MM-DD:')}: ${note.title}</code> - odpovídající {{Poznámka}} jsou předponovány měsícem a dnem vytvoření", "example_date_prefix": "<code>${note.dateCreatedObj.format('MM-DD:')}: ${note.title}</code> - před názvem nalezených poznámek je uvedeno datum a měsíc jejich vytvoření",
"api_docs": "Pro podrobnosti si přečtěte <a>API dokumentaci</a> pro {{note}} a jeho <a>vlastnosti dateCreatedObj / utcDateCreatedObj</a>." "api_docs": "Podrobnosti najdete v dokumentaci k API v <a href='https://zadam.github.io/trilium/backend_api/Note.html'>poznámce</a> a u jejích vlastností <a href='https://day.js.org/docs/en/display/format'>dateCreatedObj / utcDateCreatedObj</a>."
}, },
"add_relation": { "add_relation": {
"add_relation": "Přidat {{Vazba}}", "add_relation": "Přidat vazbu",
"relation_name": "Název {{Vazba}}", "relation_name": "název vazby",
"allowed_characters": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.", "allowed_characters": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.",
"to": "do", "to": "do",
"target_note": "cílová {{name}}", "target_note": "cílová poznámka",
"create_relation_on_all_matched_notes": "Na všechny nalezené {{name}} vytvořte danou vazbu." "create_relation_on_all_matched_notes": "U všech shodných not vytvoř dannou vazbu."
}, },
"delete_relation": { "delete_relation": {
"delete_relation": "Smazat vazbu", "delete_relation": "Smazat vazbu",
@@ -565,9 +566,9 @@
"relation_name": "název vazby", "relation_name": "název vazby",
"allowed_characters": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.", "allowed_characters": "Povolené znaky jsou alfanumerické znaky, podtržítko a dvojtečka.",
"to": "do", "to": "do",
"target_note": "cílová {{name}}", "target_note": "cílová poznámka",
"on_all_matched_notes": "Na všech odpovídajících {{name}}", "on_all_matched_notes": "Na všech odpovídajících poznámkách",
"change_target_note": "změnit cílovou {{name}} existující vazby", "change_target_note": "změnit cílovou poznámku existující vazby",
"update_relation_target": "Aktualizovat cílovou vazbu" "update_relation_target": "Aktualizovat cílovou vazbu"
}, },
"attachments_actions": { "attachments_actions": {
@@ -578,8 +579,8 @@
"download": "Stáhnout", "download": "Stáhnout",
"rename_attachment": "Přejmenovat přílohu", "rename_attachment": "Přejmenovat přílohu",
"upload_new_revision": "Nahrát novou revizi", "upload_new_revision": "Nahrát novou revizi",
"copy_link_to_clipboard": "Kopírovat odkaz do {{clipboard}}", "copy_link_to_clipboard": "Kopírovat odkaz do schránky",
"convert_attachment_into_note": "Převést přílohu na {{Note}}", "convert_attachment_into_note": "Převést přílohu na poznámku",
"delete_attachment": "Smazat přílohu", "delete_attachment": "Smazat přílohu",
"upload_success": "Nová revize přílohy byla nahrána.", "upload_success": "Nová revize přílohy byla nahrána.",
"upload_failed": "Nahrání nové revize přílohy selhalo.", "upload_failed": "Nahrání nové revize přílohy selhalo.",
@@ -599,8 +600,8 @@
"fri": "Pá", "fri": "Pá",
"sat": "So", "sat": "So",
"sun": "Ne", "sun": "Ne",
"cannot_find_day_note": "Nelze najít denní {{name}}", "cannot_find_day_note": "Nelze najít denní poznámku",
"cannot_find_week_note": "Nelze najít týdenní {{name}}", "cannot_find_week_note": "Nelze najít týdenní poznámku",
"january": "Leden", "january": "Leden",
"february": "Únor", "february": "Únor",
"march": "Březen", "march": "Březen",
@@ -632,7 +633,7 @@
"create_new_split": "Vytvořit nové rozdělení" "create_new_split": "Vytvořit nové rozdělení"
}, },
"edit_button": { "edit_button": {
"edit_this_note": "Upravit tuto {{Note}}" "edit_this_note": "Upravit tuto poznámku"
}, },
"show_toc_widget_button": { "show_toc_widget_button": {
"show_toc": "Zobrazit Obsah" "show_toc": "Zobrazit Obsah"
@@ -718,7 +719,7 @@
"note_map": "Mapa poznámek" "note_map": "Mapa poznámek"
}, },
"onclick_button": { "onclick_button": {
"no_click_handler": "Widget tlačítka '{{componentId}}' nemá definovaný obslužný program kliknutí." "no_click_handler": "Widget tlačítka '{{componentId}}' nemá definovaný obslužný program kliknutí"
}, },
"protected_session_status": { "protected_session_status": {
"active": "Chráněná relace je aktivní. Klikněte pro ukončení chráněné relace.", "active": "Chráněná relace je aktivní. Klikněte pro ukončení chráněné relace.",
@@ -775,8 +776,11 @@
"filter": "Filtr", "filter": "Filtr",
"filter-none": "Všechny ikony", "filter-none": "Všechny ikony",
"filter-default": "Výchozí ikony", "filter-default": "Výchozí ikony",
"icon_tooltip": "{{name}} Balíček ikon: {{iconPack}}", "icon_tooltip": "{{name}}\nBalíček ikon: {{iconPack}}",
"no_results": "Žádné ikony nenalezeny." "no_results": "Žádné ikony nenalezeny.",
"search_placeholder_one": "Najít {{number}} ikonu v {{count}} balíčcích",
"search_placeholder_few": "Najít {{number}} ikony v {{count}} balíčcích",
"search_placeholder_other": "Najít {{number}} ikon v {{count}} balíčcích"
}, },
"basic_properties": { "basic_properties": {
"note_type": "Typ poznámky", "note_type": "Typ poznámky",
@@ -789,14 +793,14 @@
"view_type": "Typ zobrazení", "view_type": "Typ zobrazení",
"grid": "Mřížka", "grid": "Mřížka",
"list": "Seznam", "list": "Seznam",
"collapse_all_notes": "Sbalit všechny {{Note}}s", "collapse_all_notes": "Sbalit všechny poznámky",
"expand_tooltip": "Rozbalí přímé {{Child}} této {{Collection}} (do hloubky jedné úrovně). Pro více možností stiskněte šipku vpravo.", "expand_tooltip": "Rozbalí přímé podprvky této kolekce (do hloubky jedné úrovně). Další možnosti zobrazíte kliknutím na šipku vpravo.",
"collapse": "Sbalit", "collapse": "Sbalit",
"expand": "Rozbalit", "expand": "Rozbalit",
"expand_first_level": "Rozbalit přímé {{Child}}", "expand_first_level": "Rozbalit přímé potomky",
"expand_nth_level": "Rozbalit {{depth}} úrovně", "expand_nth_level": "Rozbalit {{depth}} úrovně",
"expand_all_levels": "Rozbalit všechny úrovně", "expand_all_levels": "Rozbalit všechny úrovně",
"book_properties": "Vlastnosti {{Collection}}", "book_properties": "Vlastnosti kolekce",
"invalid_view_type": "Neplatný typ zobrazení '{{type}}'", "invalid_view_type": "Neplatný typ zobrazení '{{type}}'",
"calendar": "Kalendář", "calendar": "Kalendář",
"table": "Tabulka", "table": "Tabulka",
@@ -829,7 +833,7 @@
"file_size": "Velikost souboru", "file_size": "Velikost souboru",
"download": "Stáhnout", "download": "Stáhnout",
"open": "Otevřít", "open": "Otevřít",
"copy_reference_to_clipboard": "Kopírovat odkaz do {{clipboard}}", "copy_reference_to_clipboard": "Kopírovat referenci do schránky",
"upload_new_revision": "Nahrát novou revizi", "upload_new_revision": "Nahrát novou revizi",
"upload_success": "Nová revize obrázku byla nahrána.", "upload_success": "Nová revize obrázku byla nahrána.",
"upload_failed": "Nahrání nové revize obrázku selhalo: {{message}}", "upload_failed": "Nahrání nové revize obrázku selhalo: {{message}}",
@@ -906,7 +910,7 @@
"limit": "limit", "limit": "limit",
"limit_description": "Omezit počet výsledků", "limit_description": "Omezit počet výsledků",
"debug": "ladění", "debug": "ladění",
"debug_description": "Ladění vypíše do konzole další ladicí informace, které pomohou při ladění složitých dotazů.", "debug_description": "Ladění vypíše do konzole další ladicí informace, které pomohou při ladění složitých dotazů",
"action": "akce", "action": "akce",
"option": "možnost", "option": "možnost",
"search_button": "Hledání", "search_button": "Hledání",
@@ -974,23 +978,23 @@
"search_script": { "search_script": {
"title": "Skript pro hledání:", "title": "Skript pro hledání:",
"placeholder": "hledat Poznámku podle jejího názvu", "placeholder": "hledat Poznámku podle jejího názvu",
"description1": "Skript pro {{search}} umožňuje definovat výsledky {{search}} spuštěním skriptu. To poskytuje maximální flexibilitu, když standardní {{search}} nestačí.", "description1": "Vyhledávací skript umožňuje definovat výsledky vyhledávání spuštěním skriptu. To poskytuje maximální flexibilitu v případech, kdy standardní vyhledávání nestačí.",
"description2": "Skript pro {{search}} musí být typu \"code\" a podtypu \"JavaScript {{backend}}\". Skript musí vrátit pole ID {{Poznámky}} nebo samotných {{Poznámky}}.", "description2": "Vyhledávací skript musí být typu code a podtypu JavaScript backend. Skript musí vracet pole noteIds nebo notes.",
"example_title": "Podívejte se na tento příklad:", "example_title": "Podívejte se na tento příklad:",
"example_code": "// 1. předfiltrování pomocí standardního {{search}} const candidateNotes = api.searchForNotes(\"#journal\"); // 2. použití vlastních kritérií {{search}} const matchedNotes = candidateNotes .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/)); return matchedNotes;", "example_code": "// 1. Předběžné filtrování pomocí standardního vyhledávání\nconst candidateNotes = api.searchForNotes(#journal); \n\n// 2. Použití vlastních vyhledávacích kritérií\nconst matchedNotes = candidateNotes\n .filter(note => note.title.match(/[0-9]{1,2}\\. ?[0-9]{1,2}\\. ?[0-9]{4}/));\n\nreturn matchedNotes;",
"note": "Upozorňujeme, že skript pro {{search}} a {{search}} řetězec nelze kombinovat." "note": "Upozorňujeme, že vyhledávací skript a vyhledávací řetězec nelze vzájemně kombinovat."
}, },
"search_string": { "search_string": {
"title_column": "{{Search}} řetězec:", "title_column": "Vyhledávací řetězec:",
"placeholder": "fulltext klíčová slova, #{{label}} = hodnota...", "placeholder": "fulltext klíčová slova, #tag = hodnota...",
"search_syntax": "Syntaxe {{search}}", "search_syntax": "Syntaxe vyhledávání",
"also_see": "také viz", "also_see": "také viz",
"complete_help": "kompletní nápověda k syntaxi {{search}}", "complete_help": "kompletní nápověda k syntaxi vyhledávání",
"full_text_search": "Stačí zadat jakýkoli text pro fulltextové {{search}}.", "full_text_search": "Stačí zadat jakýkoli text pro fulltextové vyhledávání",
"label_abc": "vrací {{Poznámky}} se {{štítek}} abc", "label_abc": "vrací poznámky se stítkem abc",
"label_year": "odpovídá {{Poznámky}} se {{štítek}} year s hodnotou 2019", "label_year": "vyhledá poznámky, u nichž má štítek roku hodnotu 2019",
"label_rock_pop": "odpovídá {{Poznámky}}, které mají {{štítek}} rock i {{štítek}} pop", "label_rock_pop": "vyhledá poznámky, které mají štítek rock i pop",
"label_rock_or_pop": "stačí, aby byl přítomen jeden z {{štítek}}.", "label_rock_or_pop": "stačí, aby byl přítomen jeden ze štít",
"label_year_comparison": "numerické porovnání (také >, >=, <).", "label_year_comparison": "numerické porovnání (také >, >=, <).",
"label_date_created": "poznámky vytvořené za poslední měsíc", "label_date_created": "poznámky vytvořené za poslední měsíc",
"error": "Chyba vyhledávání: {{error}}", "error": "Chyba vyhledávání: {{error}}",
@@ -1051,12 +1055,12 @@
"exit-picture-in-picture": "Ukončit obraz v obraze", "exit-picture-in-picture": "Ukončit obraz v obraze",
"fullscreen": "Celá obrazovka (F)", "fullscreen": "Celá obrazovka (F)",
"exit-fullscreen": "Ukončit celou obrazovku", "exit-fullscreen": "Ukončit celou obrazovku",
"unsupported-format": "Náhled médií není dostupný pro tento formát souboru: {{mime}}", "unsupported-format": "Náhled médií není dostupný pro tento formát souboru:\n {{mime}}",
"zoom-to-fit": "Přiblížit do šířky", "zoom-to-fit": "Přiblížit do šířky",
"zoom-reset": "Obnovit přiblížení do šířky" "zoom-reset": "Obnovit přiblížení do šířky"
}, },
"protected_session": { "protected_session": {
"enter_password_instruction": "Zobrazení chráněné {{name}} vyžaduje zadání hesla:", "enter_password_instruction": "Zobrazení chráněné poznámky vyžadující zadání hesla:",
"start_session_button": "Spustit chráněnou relaci", "start_session_button": "Spustit chráněnou relaci",
"started": "Chráněná relace byla spuštěna.", "started": "Chráněná relace byla spuštěna.",
"wrong_password": "Nesprávné heslo.", "wrong_password": "Nesprávné heslo.",
@@ -1068,9 +1072,9 @@
"unprotecting-title": "Stav odchrany" "unprotecting-title": "Stav odchrany"
}, },
"relation_map": { "relation_map": {
"remove_note": "Odstranit {{name}}", "remove_note": "Odstranit poznámku",
"edit_title": "Upravit název", "edit_title": "Upravit název",
"rename_note": "Přejmenovat {{name}}", "rename_note": "Přejmenovat poznámku",
"enter_new_title": "Zadejte nový název poznámky:", "enter_new_title": "Zadejte nový název poznámky:",
"remove_relation": "Odstranit vazbu", "remove_relation": "Odstranit vazbu",
"confirm_remove_relation": "Jste si jisti, že chcete odstranit vazbu?", "confirm_remove_relation": "Jste si jisti, že chcete odstranit vazbu?",
@@ -1093,7 +1097,7 @@
"disabled_button_enable": "Povolit poznámku pro vykreslení" "disabled_button_enable": "Povolit poznámku pro vykreslení"
}, },
"web_view_setup": { "web_view_setup": {
"title": "Vytvořte živý pohled na webovou stránku přímo v Trilium.", "title": "Vytvořte živý pohled na webovou stránku přímo v Trilium",
"url_placeholder": "Zadejte nebo vložte webovou adresu, například https://triliumnotes.org", "url_placeholder": "Zadejte nebo vložte webovou adresu, například https://triliumnotes.org",
"create_button": "Vytvořit Webový Pohled", "create_button": "Vytvořit Webový Pohled",
"invalid_url_title": "Neplatná adresa", "invalid_url_title": "Neplatná adresa",
@@ -1116,13 +1120,13 @@
"full_anonymization_description": "Tato akce vytvoří novou kopii databáze a anonymizuje ji (odstraní veškerý obsah poznámek a ponechá pouze strukturu a některá nesenzitivní metadata) pro sdílení online pro účely ladění bez obav z úniku vašich osobních údajů.", "full_anonymization_description": "Tato akce vytvoří novou kopii databáze a anonymizuje ji (odstraní veškerý obsah poznámek a ponechá pouze strukturu a některá nesenzitivní metadata) pro sdílení online pro účely ladění bez obav z úniku vašich osobních údajů.",
"save_fully_anonymized_database": "Uložit plně anonymizovanou databázi", "save_fully_anonymized_database": "Uložit plně anonymizovanou databázi",
"light_anonymization": "Částečná Anonymizace", "light_anonymization": "Částečná Anonymizace",
"light_anonymization_description": "Tato akce vytvoří novou kopii databáze a provede na ní částečnou anonymizaci konkrétně bude odstraněn obsah všech {{Note}}, ale názvy a {{attributes}} zůstanou zachovány. Navíc zůstanou zachovány poznámky s vlastními skripty {{frontend}}/{{backend}} v {{JavaScript}} a vlastní {{widget}}y. To poskytuje více kontextu pro ladění problémů.", "light_anonymization_description": "Tato akce vytvoří novou kopii databáze a provede v ní částečnou anonymizaci konkrétně budou odstraněny pouze obsahy všech poznámek, zatímco názvy a atributy zůstanou zachovány. Zachovány zůstanou také vlastní skripty poznámek v JS pro frontend i backend a vlastní widgety. To poskytuje více kontextu pro ladění problémů.",
"choose_anonymization": "Můžete se sami rozhodnout, zda chcete poskytnout plně nebo částečně anonymizovanou databázi. I plně anonymizovaná databáze je velmi užitečná, ale v některých případech může částečně anonymizovaná databáze urychlit proces identifikace a opravy chyb.", "choose_anonymization": "Můžete se sami rozhodnout, zda chcete poskytnout plně nebo částečně anonymizovanou databázi. I plně anonymizovaná databáze je velmi užitečná, ale v některých případech může částečně anonymizovaná databáze urychlit proces identifikace a opravy chyb.",
"save_lightly_anonymized_database": "Uložit částečně anonymizovanou databázi", "save_lightly_anonymized_database": "Uložit částečně anonymizovanou databázi",
"existing_anonymized_databases": "Existující anonymizované databáze", "existing_anonymized_databases": "Existující anonymizované databáze",
"creating_fully_anonymized_database": "Vytváření plně anonymizované databáze...", "creating_fully_anonymized_database": "Vytváření plně anonymizované databáze...",
"creating_lightly_anonymized_database": "Vytváření částečně anonymizované databáze...", "creating_lightly_anonymized_database": "Vytváření částečně anonymizované databáze...",
"error_creating_anonymized_database": "Nepodařilo se vytvořit anonymizovanou databázi, zkontrolujte protokoly {{backend}} pro podrobnosti", "error_creating_anonymized_database": "Nepodařilo se vytvořit anonymizovanou databázi, podrobnosti najdete v protokolech backendu",
"successfully_created_fully_anonymized_database": "Vytvořena plně anonymizovaná databáze v {{anonymizedFilePath}}", "successfully_created_fully_anonymized_database": "Vytvořena plně anonymizovaná databáze v {{anonymizedFilePath}}",
"successfully_created_lightly_anonymized_database": "Vytvořena částečně anonymizovaná databáze v {{anonymizedFilePath}}", "successfully_created_lightly_anonymized_database": "Vytvořena částečně anonymizovaná databáze v {{anonymizedFilePath}}",
"no_anonymized_database_yet": "Zatím žádná anonymizovaná databáze." "no_anonymized_database_yet": "Zatím žádná anonymizovaná databáze."
@@ -1197,8 +1201,8 @@
}, },
"ribbon": { "ribbon": {
"widgets": "Widgety pásu karet", "widgets": "Widgety pásu karet",
"promoted_attributes_message": "Záložka Propagované atributy na pásu karet se automaticky otevře, pokud jsou na poznámce přítomny propagované atributy.", "promoted_attributes_message": "Záložka Propagované Atributy se automaticky otevře, pokud jsou v poznámce přítomny povýšené atributy",
"edited_notes_message": "Záložka Upravené poznámky na pásu karet se automaticky otevře u denních poznámek." "edited_notes_message": "Záložka Upravené poznámky na pásu karet se automaticky otevře u denních poznámek"
}, },
"theme": { "theme": {
"title": "Vzhled aplikace", "title": "Vzhled aplikace",
@@ -1213,8 +1217,8 @@
"layout": "Rozložení", "layout": "Rozložení",
"layout-vertical-title": "Vertikální", "layout-vertical-title": "Vertikální",
"layout-horizontal-title": "Horizontální", "layout-horizontal-title": "Horizontální",
"layout-vertical-description": "lišta {{launcher}} je vlevo (výchozí)", "layout-vertical-description": "panel spouštěčů je vlevo (výchozí nastavení)",
"layout-horizontal-description": "lišta {{launcher}} je pod záložkou, záložka je nyní celá šířka." "layout-horizontal-description": "panel spouštěčů je pod záložkou, záložka je nyní celá šířka."
}, },
"ui-performance": { "ui-performance": {
"title": "Výkon", "title": "Výkon",
@@ -1269,7 +1273,7 @@
"ocr_min_confidence": "Minimální spolehlivost", "ocr_min_confidence": "Minimální spolehlivost",
"ocr_confidence_description": "Extrahovat pouze text nad touto hranicí spolehlivosti. Nižší hodnoty zahrnují více textu, ale mohou být méně přesné.", "ocr_confidence_description": "Extrahovat pouze text nad touto hranicí spolehlivosti. Nižší hodnoty zahrnují více textu, ale mohou být méně přesné.",
"batch_ocr_title": "Zpracovat existující soubory", "batch_ocr_title": "Zpracovat existující soubory",
"batch_ocr_description": "Extrahovat text ze všech existujících obrázků, PDF a Office dokumentů ve vašich {{Notes}}. To může trvat nějaký čas v závislosti na počtu souborů.", "batch_ocr_description": "Extrahovat text ze všech existujících obrázků, PDF a Office dokumentů ve vašich poznámkách. To může trvat nějaký čas v závislosti na počtu souborů.",
"batch_ocr_start": "Spustit dávkové zpracování", "batch_ocr_start": "Spustit dávkové zpracování",
"batch_ocr_starting": "Spuštění dávkového zpracování...", "batch_ocr_starting": "Spuštění dávkového zpracování...",
"batch_ocr_progress": "Zpracovávám {{processed}} z {{total}} souborů...", "batch_ocr_progress": "Zpracovávám {{processed}} z {{total}} souborů...",
@@ -1277,11 +1281,11 @@
"batch_ocr_error": "Chyba během dávkového zpracování: {{error}}" "batch_ocr_error": "Chyba během dávkového zpracování: {{error}}"
}, },
"attachment_erasure_timeout": { "attachment_erasure_timeout": {
"attachment_erasure_timeout": "Časový limit pro vymazání {{attachments}}", "attachment_erasure_timeout": "Časový limit pro vymazání příloh",
"attachment_auto_deletion_description": "{{Attachments}} jsou automaticky smazány (a vymazány), pokud nejsou po definovaném časovém limitu odkazovány jejich {{Note}}.", "attachment_auto_deletion_description": "Přílohy jsou automaticky smazány (a vymazány), pokud nejsou po definovaném časovém limitu odkazovány jejich poznámkách.",
"erase_attachments_after": "Vymazat nepoužité {{attachments}} po:", "erase_attachments_after": "Vymazat nepoužité přílohy po:",
"manual_erasing_description": "Můžete také spustit vymazání ručně (bez ohledu na výše definovaný časový limit):", "manual_erasing_description": "Můžete také spustit vymazání ručně (bez ohledu na výše definovaný časový limit):",
"erase_unused_attachments_now": "Vymazat nepoužité {{attachments}} nyní", "erase_unused_attachments_now": "Vymazat nepoužité přílohy nyní",
"unused_attachments_erased": "Nepoužívané přílohy byly vymazány." "unused_attachments_erased": "Nepoužívané přílohy byly vymazány."
}, },
"network_connections": { "network_connections": {
@@ -1290,7 +1294,7 @@
}, },
"note_erasure_timeout": { "note_erasure_timeout": {
"note_erasure_timeout_title": "Časový limit pro vymazání Poznámky", "note_erasure_timeout_title": "Časový limit pro vymazání Poznámky",
"note_erasure_description": "SmazaPoznámky (a {{attributes}}, {{revisions}}...) jsou zpočátku pouze označeny jako smazané a lze je obnovit z dialogu Nedávné Poznámky. Po určité době jsou smazaPoznámky \"vymazány\", což znamená, že jejich obsah nelze obnovit. Toto nastavení umožňuje konfigurovat délku doby mezi smazáním a vymazáním Poznámky.", "note_erasure_description": "Odstraněpoznámky (a atributy, revize...) jsou zpočátku pouze označeny jako odstraněné a lze je obnovit v dialogovém okně „Poslední poznámky. Po uplynutí určité doby jsou odstraněpoznámky vymazány, což znamená, že jejich obsah již nelze obnovit. Toto nastavení vám umožňuje určit dobu, která uplyne mezi odstraněním a vymazáním poznámky.",
"erase_notes_after": "Vymazat Poznámky po:", "erase_notes_after": "Vymazat Poznámky po:",
"manual_erasing_description": "Můžete také spustit vymazání ručně (bez ohledu na výše uvedený časový limit):", "manual_erasing_description": "Můžete také spustit vymazání ručně (bez ohledu na výše uvedený časový limit):",
"erase_deleted_notes_now": "Vymazat smazané Poznámky nyní", "erase_deleted_notes_now": "Vymazat smazané Poznámky nyní",
@@ -1311,7 +1315,7 @@
}, },
"search_engine": { "search_engine": {
"title": "Vyhledávač", "title": "Vyhledávač",
"custom_search_engine_info": "Vlastní vyhledávač vyžaduje nastavení jak názvu, tak {{URL}}. Pokud některý z nich není nastaven, bude použit DuckDuckGo jako výchozí vyhledávač.", "custom_search_engine_info": "Vlastní vyhledávač vyžaduje nastavení jak názvu, tak URL. Pokud některý z nich není nastaven, bude použit DuckDuckGo jako výchozí vyhledávač.",
"predefined_templates_label": "Předdefinované šablony vyhledávačů", "predefined_templates_label": "Předdefinované šablony vyhledávačů",
"bing": "Bing", "bing": "Bing",
"baidu": "Baidu", "baidu": "Baidu",
@@ -1319,8 +1323,8 @@
"google": "Google", "google": "Google",
"custom_name_label": "Název vlastního vyhledávače", "custom_name_label": "Název vlastního vyhledávače",
"custom_name_placeholder": "Přizpůsobit název vyhledávače", "custom_name_placeholder": "Přizpůsobit název vyhledávače",
"custom_url_label": "{{URL}} vlastního vyhledávače by měl obsahovat {keyword} jako zástupný symbol pro vyhledávací výraz.", "custom_url_label": "URL vlastního vyhledávače by měl obsahovat {keyword} jako zástupný symbol pro vyhledávací výraz.",
"custom_url_placeholder": "Přizpůsobit {{URL}} vyhledávače", "custom_url_placeholder": "Přizpůsobit URL vyhledávače",
"save_button": "Uložit" "save_button": "Uložit"
}, },
"tray": { "tray": {
@@ -1414,7 +1418,7 @@
"default_token_name": "nový token", "default_token_name": "nový token",
"error_empty_name": "Název tokenu nemůže být prázdný", "error_empty_name": "Název tokenu nemůže být prázdný",
"token_created_title": "ETAPI token vytvořen", "token_created_title": "ETAPI token vytvořen",
"token_created_message": "Zkopírujte vytvořený token do {{clipboard}}. Trilium token ukládá hashovaný a toto je poslední možnost, jak jej uvidíte.", "token_created_message": "Zkopírujte vytvořený token do schránky. Trilium token ukládá hashovaný a toto je poslední možnost, jak jej uvidíte.",
"rename_token": "Přejmenovat tento token", "rename_token": "Přejmenovat tento token",
"delete_token": "Smazat / deaktivovat tento token", "delete_token": "Smazat / deaktivovat tento token",
"rename_token_title": "Přejmenovat token", "rename_token_title": "Přejmenovat token",
@@ -1434,11 +1438,11 @@
"new_password_confirmation": "Potvrzení nového hesla", "new_password_confirmation": "Potvrzení nového hesla",
"change_password": "Změnit heslo", "change_password": "Změnit heslo",
"protected_session_timeout": "Časový limit pro Chráněná relace", "protected_session_timeout": "Časový limit pro Chráněná relace",
"protected_session_timeout_description": "Časový limit chráněné relace je doba, po které se chráněná relace vymaže z paměti prohlížeče. Měří se od poslední interakce s chráněnými {{poznámkami}}. Viz", "protected_session_timeout_description": "Časový limit chráněné relace je doba, po které se chráněná relace vymaže z paměti prohlížeče. Měří se od poslední interakce s chráněnými poznámkami. Viz",
"wiki": "wiki", "wiki": "wiki",
"for_more_info": "pro více informací.", "for_more_info": "pro více informací.",
"protected_session_timeout_label": "Časový limit chráněné relace:", "protected_session_timeout_label": "Časový limit chráněné relace:",
"reset_confirmation": "Resetováním hesla navždy ztratíte přístup ke všem svým existujícím chráněným {{poznámkám}}. Opravdu chcete heslo resetovat?", "reset_confirmation": "Resetováním hesla navždy ztratíte přístup ke všem svým existujícím chráněným poznámkám. Opravdu chcete heslo resetovat?",
"reset_success_message": "Heslo bylo resetováno. Nastavte nové heslo", "reset_success_message": "Heslo bylo resetováno. Nastavte nové heslo",
"change_password_heading": "Změnit heslo", "change_password_heading": "Změnit heslo",
"set_password_heading": "Nastavit heslo", "set_password_heading": "Nastavit heslo",
@@ -1451,17 +1455,17 @@
"description": "Vícefaktorová autentizace (MFA) přidává další vrstvu zabezpečení k vašemu účtu. Místo pouhého zadání hesla pro přihlášení MFA vyžaduje, abyste poskytli jeden nebo více dalších důkazů pro ověření vaší identity. Tímto způsobem, i když se někdo dostane k vašemu heslu, nemůže se k vašemu účtu dostat bez druhého kusu informace. Je to jako přidání dalšího zámku ke dveřím, což ztěžuje vniknutí kohokoli jiného.<br><br>Postupujte podle pokynů níže a povolte MFA. Pokud to nenakonfigurujete správně, přihlášení se vrátí pouze k heslu.", "description": "Vícefaktorová autentizace (MFA) přidává další vrstvu zabezpečení k vašemu účtu. Místo pouhého zadání hesla pro přihlášení MFA vyžaduje, abyste poskytli jeden nebo více dalších důkazů pro ověření vaší identity. Tímto způsobem, i když se někdo dostane k vašemu heslu, nemůže se k vašemu účtu dostat bez druhého kusu informace. Je to jako přidání dalšího zámku ke dveřím, což ztěžuje vniknutí kohokoli jiného.<br><br>Postupujte podle pokynů níže a povolte MFA. Pokud to nenakonfigurujete správně, přihlášení se vrátí pouze k heslu.",
"mfa_enabled": "Povolit vícefaktorovou autentizaci", "mfa_enabled": "Povolit vícefaktorovou autentizaci",
"mfa_method": "Metoda MFA", "mfa_method": "Metoda MFA",
"electron_disabled": "Multifaktorová autentizace není v {{desktop}} verzi aktuálně podporována.", "electron_disabled": "Multifaktorová autentizace není v desktop verzi aktuálně podporována.",
"totp_title": "Časově založený jednorázový heslo ({{TOTP}})", "totp_title": "Časově založené jednorázové heslo (TOTP)",
"totp_description": "{{TOTP}} (Časově založený jednorázový heslo) je bezpečnostní funkce, která generuje jedinečný, dočasný kód, který se mění každých 30 sekund. Tento kód spolu s vaším heslem použijete k přihlášení do svého účtu, což ztěžuje přístup k němu pro kohokoli jiného.", "totp_description": "TOTP (Časově založené jednorázové heslo) je bezpečnostní funkce, která generuje jedinečný, dočasný kód, který se mění každých 30 sekund. Tento kód spolu s vaším heslem použijete k přihlášení do svého účtu, což ztěžuje přístup k němu pro kohokoli jiného.",
"totp_secret_title": "Generovat {{TOTP}} tajný klíč", "totp_secret_title": "Generovat TOTP tajný klíč",
"totp_secret_generate": "Generovat {{TOTP}} tajný klíč", "totp_secret_generate": "Generovat TOTP tajný klíč",
"totp_secret_regenerate": "Regenerovat {{TOTP}} tajný klíč", "totp_secret_regenerate": "Regenerovat TOTP tajný klíč",
"no_totp_secret_warning": "Pro povolení {{TOTP}} je nejprve nutné vygenerovat {{TOTP}} tajný klíč.", "no_totp_secret_warning": "Pro povolení TOTP je nejprve nutné vygenerovat TOTP tajný klíč.",
"totp_secret_description_warning": "Po vygenerování nového {{TOTP}} tajného klíče budete muset znovu přihlásit pomocí nového {{TOTP}} tajného klíče.", "totp_secret_description_warning": "Po vygenerování nového TOTP tajného klíče budete muset znovu přihlásit pomocí nového TOTP tajného klíče.",
"totp_secret_generated": "{{TOTP}} tajný klíč vygenerován", "totp_secret_generated": "TOTP tajný klíč vygenerován",
"totp_secret_warning": "Uložte vygenerovaný tajný klíč na bezpečném místě. Nebude znovu zobrazen.", "totp_secret_warning": "Uložte vygenerovaný tajný klíč na bezpečném místě. Nebude znovu zobrazen.",
"totp_secret_regenerate_confirm": "Jste si jisti, že chcete regenerovat {{TOTP}} tajný klíč? Tím se zneplatní předchozí {{TOTP}} tajný klíč a všechny existující záchranné kódy.", "totp_secret_regenerate_confirm": "Jste si jisti, že chcete regenerovat TOTP tajný klíč? Tím se zneplatní předchozí TOTP tajný klíč a všechny existující záchranné kódy.",
"recovery_keys_title": "Záchranné klíče pro jednotné přihlašování", "recovery_keys_title": "Záchranné klíče pro jednotné přihlašování",
"recovery_keys_description": "Záchranné klíče pro jednotné přihlašování se používají k přihlášení v případě, že nemáte přístup ke svým autentifikačním kódům.", "recovery_keys_description": "Záchranné klíče pro jednotné přihlašování se používají k přihlášení v případě, že nemáte přístup ke svým autentifikačním kódům.",
"recovery_keys_description_warning": "Záchranné klíče nebudou po opuštění stránky znovu zobrazeny, uchovejte je na bezpečném místě. Po použití záchranného klíče jej nelze znovu použít.", "recovery_keys_description_warning": "Záchranné klíče nebudou po opuštění stránky znovu zobrazeny, uchovejte je na bezpečném místě. Po použití záchranného klíče jej nelze znovu použít.",
@@ -1498,9 +1502,6 @@
"description": "Tato nastavení platí pouze pro ⟨desktop⟩ verze, prohlížeče budou používat vlastní nativní kontrolu pravopisu.", "description": "Tato nastavení platí pouze pro ⟨desktop⟩ verze, prohlížeče budou používat vlastní nativní kontrolu pravopisu.",
"enable": "Povolit kontrolu pravopisu", "enable": "Povolit kontrolu pravopisu",
"language_code_label": "Kód jazyka(ů)", "language_code_label": "Kód jazyka(ů)",
"language_code_placeholder": "například \"en-US\", \"de-AT\"",
"multiple_languages_info": "Více jazyků lze oddělit čárkou, např. \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Dostupné jazykové kódy:",
"restart-required": "Změny v nastavení kontroly pravopisu se projeví po restartu aplikace." "restart-required": "Změny v nastavení kontroly pravopisu se projeví po restartu aplikace."
}, },
"sync_2": { "sync_2": {
@@ -1696,7 +1697,10 @@
"options": "Nastavení", "options": "Nastavení",
"modal_title": "Konfigurovat seznam zvýraznění", "modal_title": "Konfigurovat seznam zvýraznění",
"menu_configure": "Konfigurovat seznam zvýraznění...", "menu_configure": "Konfigurovat seznam zvýraznění...",
"no_highlights": "Nebyla nalezena žádná zvýraznění." "no_highlights": "Nebyla nalezena žádná zvýraznění.",
"title_with_count_one": "{{count}} zvýraznění",
"title_with_count_few": "{{count}} zvýraznění",
"title_with_count_other": "{{count}} zvýraznění"
}, },
"quick-search": { "quick-search": {
"placeholder": "Rychlé hledání", "placeholder": "Rychlé hledání",
@@ -1727,7 +1731,10 @@
"shared-indicator-tooltip-with-url": "Tato poznámka je sdílena veřejně na: {{- url}}", "shared-indicator-tooltip-with-url": "Tato poznámka je sdílena veřejně na: {{- url}}",
"subtree-hidden-moved-title": "Přidáno do {{title}}", "subtree-hidden-moved-title": "Přidáno do {{title}}",
"subtree-hidden-moved-description-collection": "Tato kolekce skrývá své dceřiné poznámky ve stromu.", "subtree-hidden-moved-description-collection": "Tato kolekce skrývá své dceřiné poznámky ve stromu.",
"subtree-hidden-moved-description-other": "Dceřiné poznámky jsou pro tuto poznámku skryty ve stromu." "subtree-hidden-moved-description-other": "Dceřiné poznámky jsou pro tuto poznámku skryty ve stromu.",
"subtree-hidden-tooltip_one": "{{count}} podřízená poznámka, která je ve stromu skrytá",
"subtree-hidden-tooltip_few": "{{count}} podřízené poznámky, které jsou ve stromu skryté",
"subtree-hidden-tooltip_other": "{{count}} podřízených poznámek, které jsou ve stromu skryté"
}, },
"title_bar_buttons": { "title_bar_buttons": {
"window-on-top": "Připítnout okno na horní část obrazovky" "window-on-top": "Připítnout okno na horní část obrazovky"
@@ -1740,7 +1747,10 @@
"print_report_error_title": "Tisk se nezdařil", "print_report_error_title": "Tisk se nezdařil",
"print_report_stack_trace": "Stack trace", "print_report_stack_trace": "Stack trace",
"print_report_collection_details_button": "Zobrazit podrobnosti", "print_report_collection_details_button": "Zobrazit podrobnosti",
"print_report_collection_details_ignored_notes": "Ignorované poznámky" "print_report_collection_details_ignored_notes": "Ignorované poznámky",
"print_report_collection_content_one": "{{count}} poznámka ve sbírce nebyla možná vytisknout, protože není podporována nebo je chráněna.",
"print_report_collection_content_few": "{{count}} poznámky ve sbírce nebylo možné vytisknout, protože nejsou podporovány nebo jsou chráněny.",
"print_report_collection_content_other": "{{count}} poznámek ve sbírce nebylo možné vytisknout, protože nejsou podporovány nebo jsou chráněny."
}, },
"note_title": { "note_title": {
"placeholder": "Zde napište název poznámky...", "placeholder": "Zde napište název poznámky...",
@@ -1892,7 +1902,7 @@
"search_online": "Hledat „{{term}}“ pomocí {{searchEngine}}" "search_online": "Hledat „{{term}}“ pomocí {{searchEngine}}"
}, },
"image_context_menu": { "image_context_menu": {
"copy_reference_to_clipboard": "Kopírovat odkaz do schránky", "copy_reference_to_clipboard": "Kopírovat referenci do schránky",
"copy_image_to_clipboard": "Kopírovat obrázek do schránky" "copy_image_to_clipboard": "Kopírovat obrázek do schránky"
}, },
"link_context_menu": { "link_context_menu": {
@@ -2086,7 +2096,10 @@
"processing": "Zpracovávání...", "processing": "Zpracovávání...",
"processing_started": "Zpracování OCR bylo zahájeno. Počkejte chvíli a obnovte stránku.", "processing_started": "Zpracování OCR bylo zahájeno. Počkejte chvíli a obnovte stránku.",
"processing_failed": "Nepodařilo se zahájit zpracování OCR", "processing_failed": "Nepodařilo se zahájit zpracování OCR",
"view_extracted_text": "Zobrazit extraktovaný text (OCR)" "view_extracted_text": "Zobrazit extraktovaný text (OCR)",
"processing_complete": "Zpracování pomocí OCR bylo dokončeno.",
"text_filtered_low_confidence": "OCR rozpoznal text s jistotou {{confidence}} %, ale výsledek byl vyřazen, protože vaše minimální prahová hodnota je {{threshold}} %.",
"open_media_settings": "Otevřít Nastavení"
}, },
"command_palette": { "command_palette": {
"tree-action-name": "Strom: {{name}}", "tree-action-name": "Strom: {{name}}",
@@ -2118,7 +2131,7 @@
"background_effects_message": "Na zařízeních Windows a macOS jsou efekty pozadí nyní stabilní. Efekty pozadí přidávají uživatelskému rozhraní nádech barvy rozostřením pozadí za ním.", "background_effects_message": "Na zařízeních Windows a macOS jsou efekty pozadí nyní stabilní. Efekty pozadí přidávají uživatelskému rozhraní nádech barvy rozostřením pozadí za ním.",
"background_effects_button": "Povolit efekty pozadí", "background_effects_button": "Povolit efekty pozadí",
"new_layout_title": "Nové rozvržení", "new_layout_title": "Nové rozvržení",
"new_layout_message": "Pro Trilium jsme zavedli modernizované rozvržení. Pás karet byl odstraněn a plynule integrovan do hlavního rozhraní, přičemž nové stavové řádky a rozšiřitelné sekce (jako jsou propagované atributy) převzaly klíčové funkce. Nové rozvržení je padrãoně zapnuté a lze jej dočasně vypnout přes Nastavení → Vzhled.", "new_layout_message": "Pro Trilium jsme zavedli modernizované rozvržení. Pás karet byl odstraněn a plynule integrovan do hlavního rozhraní, přičemž nové stavové řádky a rozšiřitelné sekce (jako jsou propagované atributy) převzaly klíčové funkce. \n\nNové rozvržení je padrãoně zapnuté a lze jej dočasně vypnout přes Nastavení → Vzhled.",
"new_layout_button": "Více informací", "new_layout_button": "Více informací",
"dismiss": "Zavřít" "dismiss": "Zavřít"
}, },
@@ -2153,7 +2166,7 @@
}, },
"server": { "server": {
"unknown_http_error_title": "Chyba komunikace se serverem", "unknown_http_error_title": "Chyba komunikace se serverem",
"unknown_http_error_content": "Stavový kód: {{statusCode}} URL: {{method}} {{url}} Zpráva: {{message}}", "unknown_http_error_content": "Stavový kód: {{statusCode}} \nURL: {{method}} {{url}} \nZpráva: {{message}}",
"traefik_blocks_requests": "Pokud používáte reverzní proxy Traefik, došlo k wprowadzeniu zásadní změny, která ovlivňuje komunikaci se serverem." "traefik_blocks_requests": "Pokud používáte reverzní proxy Traefik, došlo k wprowadzeniu zásadní změny, která ovlivňuje komunikaci se serverem."
}, },
"tab_history_navigation_buttons": { "tab_history_navigation_buttons": {
@@ -2170,18 +2183,18 @@
}, },
"breadcrumb_badges": { "breadcrumb_badges": {
"read_only_explicit": "Pouze pro čtení", "read_only_explicit": "Pouze pro čtení",
"read_only_explicit_description": "Tato poznámka byla ručně nastavena jako pouze pro čtení. Kliknutím ji můžete dočasně upravit.", "read_only_explicit_description": "Tato poznámka byla ručně nastavena jako pouze pro čtení.\nKliknutím ji můžete dočasně upravit.",
"read_only_auto": "Automatické pouze pro čtení", "read_only_auto": "Automatické pouze pro čtení",
"read_only_auto_description": "Tato poznámka byla automaticky nastavena do režimu pouze pro čtení z důvodu výkonu. Toto automatické omezení lze upravit v nastavení. Kliknutím ji můžete dočasně upravit.", "read_only_auto_description": "Tato poznámka byla automaticky nastavena do režimu pouze pro čtení z důvodu výkonu. Toto automatické omezení lze upravit v nastavení.\n\nKliknutím ji můžete dočasně upravit.",
"read_only_temporarily_disabled": "Dočasně upravitelné", "read_only_temporarily_disabled": "Dočasně upravitelné",
"read_only_temporarily_disabled_description": "Tato poznámka je nyní upravitelná, ale normálně je pouze pro čtení. Jakmile přejdete na jinou poznámku, vrátí se do režimu pouze pro čtení. Kliknutím znovu aktivujete režim pouze pro čtení.", "read_only_temporarily_disabled_description": "Tato poznámka je nyní upravitelná, ale normálně je pouze pro čtení. Jakmile přejdete na jinou poznámku, vrátí se do režimu pouze pro čtení.\n\nKliknutím znovu aktivujete režim pouze pro čtení.",
"shared_publicly": "Veřejně sdílené", "shared_publicly": "Veřejně sdílené",
"shared_locally": "Lokálně sdílené", "shared_locally": "Lokálně sdílené",
"shared_copy_to_clipboard": "Kopírovat odkaz do schránky", "shared_copy_to_clipboard": "Kopírovat odkaz do schránky",
"shared_open_in_browser": "Otevřít odkaz v prohlížeči", "shared_open_in_browser": "Otevřít odkaz v prohlížeči",
"shared_unshare": "Zrušit sdílení", "shared_unshare": "Zrušit sdílení",
"clipped_note": "Webový výřez", "clipped_note": "Webový výřez",
"clipped_note_description": "Tato poznámka byla původně převzata z {{url}}. Kliknutím přejdete na zdrojovou webovou stránku.", "clipped_note_description": "Tato poznámka byla původně převzata z {{url}}.\n\nKliknutím přejdete na zdrojovou webovou stránku.",
"execute_script": "Spustit skript", "execute_script": "Spustit skript",
"execute_script_description": "Tato poznámka obsahuje skript. Kliknutím jej spustíte.", "execute_script_description": "Tato poznámka obsahuje skript. Kliknutím jej spustíte.",
"execute_sql": "Spustit SQL", "execute_sql": "Spustit SQL",
@@ -2199,7 +2212,25 @@
"note_info_title": "Zobrazit informace o poznámce (např. datum, velikost poznámky)", "note_info_title": "Zobrazit informace o poznámce (např. datum, velikost poznámky)",
"attributes_title": "Vlastní atributy a zděděné atributy", "attributes_title": "Vlastní atributy a zděděné atributy",
"note_paths_title": "Cesty poznámky", "note_paths_title": "Cesty poznámky",
"code_note_switcher": "Změnit režim jazyka" "code_note_switcher": "Změnit režim jazyka",
"backlinks_one": "{{count}} zpětný odkaz",
"backlinks_few": "{{count}} zpětné odkazy",
"backlinks_other": "{{count}} zpětných odkazů",
"backlinks_title_one": "Zobrazit zpětný odkaz",
"backlinks_title_few": "Zobrazit zpětné odkazy",
"backlinks_title_other": "Zobrazení zpětných odkazu",
"attachments_one": "{{count}} příloha",
"attachments_few": "{{count}} přílohy",
"attachments_other": "{{count}} příloh",
"attachments_title_one": "Zobrazit přílohu v nové záložce",
"attachments_title_few": "Zobrazit přílohy v nové záložce",
"attachments_title_other": "Zobrazit přílohy v nové záložce",
"attributes_one": "{{count}} atribut",
"attributes_few": "{{count}} atributy",
"attributes_other": "{{count}} atributů",
"note_paths_one": "{{count}} cesta",
"note_paths_few": "{{count}} cesty",
"note_paths_other": "{{count}} cest"
}, },
"attributes_panel": { "attributes_panel": {
"title": "Atributy poznámky" "title": "Atributy poznámky"
@@ -2212,13 +2243,25 @@
}, },
"pdf": { "pdf": {
"pages_alt": "Strana {{pageNumber}}", "pages_alt": "Strana {{pageNumber}}",
"pages_loading": "Načítání..." "pages_loading": "Načítání...",
"attachments_one": "{{count}} příloha",
"attachments_few": "{{count}} přílohy",
"attachments_other": "{{count}} příloh",
"layers_one": "{{count}} vrstva",
"layers_few": "{{count}} vrstvy",
"layers_other": "{{count}} vrstev",
"pages_one": "{{count}} stránka",
"pages_few": "{{count}} stránky",
"pages_other": "{{count}} stran"
}, },
"platform_indicator": { "platform_indicator": {
"available_on": "Dostupné na {{platform}}" "available_on": "Dostupné na {{platform}}"
}, },
"mobile_tab_switcher": { "mobile_tab_switcher": {
"more_options": "Další nastavení" "more_options": "Další nastavení",
"title_one": "{{count}} záložka",
"title_few": "{{count}} záložky",
"title_other": "{{count}} záložek"
}, },
"bookmark_buttons": { "bookmark_buttons": {
"bookmarks": "Záložky (oblíbené)" "bookmarks": "Záložky (oblíbené)"
@@ -2276,7 +2319,9 @@
"sample_user_journey": "Cesta uživatele", "sample_user_journey": "Cesta uživatele",
"sample_xy": "XY", "sample_xy": "XY",
"sample_venn": "Vennův diagram", "sample_venn": "Vennův diagram",
"sample_ishikawa": "Ishikawa" "sample_ishikawa": "Ishikawa",
"sample_treeview": "Stromové zobrazení",
"sample_wardley": "Wardleyho mapa"
}, },
"mind-map": { "mind-map": {
"addChild": "Přidat dceřiný", "addChild": "Přidat dceřiný",

View File

@@ -1386,9 +1386,6 @@
"description": "Diese Optionen gelten nur für Desktop-Builds. Browser verwenden ihre eigene native Rechtschreibprüfung.", "description": "Diese Optionen gelten nur für Desktop-Builds. Browser verwenden ihre eigene native Rechtschreibprüfung.",
"enable": "Aktiviere die Rechtschreibprüfung", "enable": "Aktiviere die Rechtschreibprüfung",
"language_code_label": "Sprachcode(s)", "language_code_label": "Sprachcode(s)",
"language_code_placeholder": "zum Beispiel \"en-US\", \"de-AT\"",
"multiple_languages_info": "Mehrere Sprachen können mit einem Komma getrennt werden z.B. \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Verfügbare Sprachcodes:",
"restart-required": "Änderungen an den Rechtschreibprüfungsoptionen werden nach dem Neustart der Anwendung wirksam." "restart-required": "Änderungen an den Rechtschreibprüfungsoptionen werden nach dem Neustart der Anwendung wirksam."
}, },
"sync_2": { "sync_2": {

View File

@@ -1074,6 +1074,7 @@
"edit_title": "Edit title", "edit_title": "Edit title",
"rename_note": "Rename note", "rename_note": "Rename note",
"enter_new_title": "Enter new note title:", "enter_new_title": "Enter new note title:",
"rename_relation": "Rename relation",
"remove_relation": "Remove relation", "remove_relation": "Remove relation",
"confirm_remove_relation": "Are you sure you want to remove the relation?", "confirm_remove_relation": "Are you sure you want to remove the relation?",
"specify_new_relation_name": "Specify new relation name (allowed characters: alphanumeric, colon and underscore):", "specify_new_relation_name": "Specify new relation name (allowed characters: alphanumeric, colon and underscore):",

View File

@@ -1432,9 +1432,6 @@
"description": "Estas opciones se aplican sólo para compilaciones de escritorio; los navegadores utilizarán su corrector ortográfico nativo.", "description": "Estas opciones se aplican sólo para compilaciones de escritorio; los navegadores utilizarán su corrector ortográfico nativo.",
"enable": "Habilitar corrector ortográfico", "enable": "Habilitar corrector ortográfico",
"language_code_label": "Código(s) de idioma", "language_code_label": "Código(s) de idioma",
"language_code_placeholder": "por ejemplo \"en-US\", \"de-AT\"",
"multiple_languages_info": "Múltiples idiomas se pueden separar por coma, por ejemplo \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Códigos de idioma disponibles:",
"restart-required": "Los cambios en las opciones de corrección ortográfica entrarán en vigor después del reinicio de la aplicación." "restart-required": "Los cambios en las opciones de corrección ortográfica entrarán en vigor después del reinicio de la aplicación."
}, },
"sync_2": { "sync_2": {

View File

@@ -1391,9 +1391,6 @@
"description": "Ces options s'appliquent uniquement aux versions de bureau, les navigateurs utiliseront leur propre vérification orthographique native.", "description": "Ces options s'appliquent uniquement aux versions de bureau, les navigateurs utiliseront leur propre vérification orthographique native.",
"enable": "Activer la vérification orthographique", "enable": "Activer la vérification orthographique",
"language_code_label": "Code(s) de langue", "language_code_label": "Code(s) de langue",
"language_code_placeholder": "par exemple \"fr-FR\", \"en-US\", \"de-AT\"",
"multiple_languages_info": "Plusieurs langues peuvent être séparées par une virgule, par ex. \"fr-FR, en-US, de-DE, cs\". ",
"available_language_codes_label": "Codes de langue disponibles :",
"restart-required": "Les modifications apportées aux options de vérification orthographique prendront effet après le redémarrage de l'application." "restart-required": "Les modifications apportées aux options de vérification orthographique prendront effet après le redémarrage de l'application."
}, },
"sync_2": { "sync_2": {

View File

@@ -1470,9 +1470,6 @@
"description": "Ní bhaineann na roghanna seo ach le leaganacha deisce, úsáidfidh brabhsálaithe a seiceáil litrithe dúchasach féin.", "description": "Ní bhaineann na roghanna seo ach le leaganacha deisce, úsáidfidh brabhsálaithe a seiceáil litrithe dúchasach féin.",
"enable": "Cumasaigh seiceáil litrithe", "enable": "Cumasaigh seiceáil litrithe",
"language_code_label": "Cód(anna) teanga", "language_code_label": "Cód(anna) teanga",
"language_code_placeholder": "mar shampla \"en-US\", \"de-AT\"",
"multiple_languages_info": "Is féidir camóg a úsáid chun teangacha iolracha a dheighilt óna chéile, m.sh. \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Cóid teanga atá ar fáil:",
"restart-required": "Tiocfaidh athruithe ar na roghanna seiceála litrithe i bhfeidhm tar éis atosú an fheidhmchláir." "restart-required": "Tiocfaidh athruithe ar na roghanna seiceála litrithe i bhfeidhm tar éis atosú an fheidhmchláir."
}, },
"sync_2": { "sync_2": {

View File

@@ -1461,9 +1461,6 @@
"description": "ये विकल्प सिर्फ़ डेस्कटॉप वर्जन के लिए हैं, ब्राउज़र अपना स्पेल चेक इस्तेमाल करेंगे।", "description": "ये विकल्प सिर्फ़ डेस्कटॉप वर्जन के लिए हैं, ब्राउज़र अपना स्पेल चेक इस्तेमाल करेंगे।",
"enable": "स्पेल चेक चालू करें", "enable": "स्पेल चेक चालू करें",
"language_code_label": "भाषा कोड (Language code)", "language_code_label": "भाषा कोड (Language code)",
"language_code_placeholder": "जैसे \"en-US\", \"hi-IN\"",
"multiple_languages_info": "कई भाषाओं को कॉमा से अलग किया जा सकता है, जैसे \"en-US, hi-IN\"। ",
"available_language_codes_label": "उपलब्ध भाषा कोड:",
"restart-required": "स्पेल चेक में बदलाव ऐप रीस्टार्ट करने के बाद ही दिखेंगे।" "restart-required": "स्पेल चेक में बदलाव ऐप रीस्टार्ट करने के बाद ही दिखेंगे।"
}, },
"sync_2": { "sync_2": {

View File

@@ -538,12 +538,12 @@
"new_tab": "Nuova scheda" "new_tab": "Nuova scheda"
}, },
"toc": { "toc": {
"table_of_contents": "Sommario", "table_of_contents": "Tabella dei Contenuti",
"options": "Opzioni", "options": "Opzioni",
"no_headings": "Nessun titolo." "no_headings": "Nessun titolo."
}, },
"table_of_contents": { "table_of_contents": {
"title": "Sommario", "title": "Tabella dei Contenuti",
"description": "L'indice apparirà nelle note di testo quando la nota contiene più di un numero definito di titoli. È possibile personalizzare questo numero:", "description": "L'indice apparirà nelle note di testo quando la nota contiene più di un numero definito di titoli. È possibile personalizzare questo numero:",
"unit": "titoli", "unit": "titoli",
"disable_info": "È anche possibile utilizzare questa opzione per disattivare efficacemente l'indice impostando un numero molto alto.", "disable_info": "È anche possibile utilizzare questa opzione per disattivare efficacemente l'indice impostando un numero molto alto.",
@@ -853,7 +853,7 @@
"archived": "Le note con questa etichetta non saranno visibili per impostazione predefinita nei risultati di ricerca (anche nelle finestre di dialogo Vai a, Aggiungi collegamento ecc.).", "archived": "Le note con questa etichetta non saranno visibili per impostazione predefinita nei risultati di ricerca (anche nelle finestre di dialogo Vai a, Aggiungi collegamento ecc.).",
"run_on_instance": "Definire su quale istanza di Trilium eseguire questa operazione. L'impostazione predefinita è tutte le istanze.", "run_on_instance": "Definire su quale istanza di Trilium eseguire questa operazione. L'impostazione predefinita è tutte le istanze.",
"exclude_from_export": "le note (con la loro sottostruttura) non saranno incluse in nessuna esportazione di note", "exclude_from_export": "le note (con la loro sottostruttura) non saranno incluse in nessuna esportazione di note",
"run": "definisce su quali eventi deve essere eseguito lo script. I valori possibili sono:\n<ul>\n<li>frontendStartup - quando il frontend Trilium viene avviato (o aggiornato), ma non su dispositivi mobili.</li>\n<li>mobileStartup - quando il frontend Trilium viene avviato (o aggiornato) su dispositivi mobili.</li>\n<li>backendStartup - quando viene avviato il backend Trilium</li>\n<li>hourly - eseguire una volta all'ora. È possibile utilizzare l'etichetta aggiuntiva <code>runAtHour</code> per specificare a che ora.</li>\n<li>daily - eseguire una volta al giorno</li>\n</ul>", "run": "definisce su quali eventi deve essere eseguito lo script. I valori possibili sono:\n<ul>\n<li>frontendStartup - quando il frontend Trilium viene avviato (o aggiornato), ma non su dispositivi mobili.</li>\n<li>mobileStartup - quando il frontend Trilium viene avviato (o aggiornato) su dispositivi mobili.</li>\n<li>backendStartup - quando viene avviato il backend Trilium.</li>\n<li>hourly - eseguire una volta all'ora. È possibile utilizzare l'etichetta aggiuntiva <code>runAtHour</code> per specificare a che ora.</li>\n<li>daily - eseguire una volta al giorno.</li>\n</ul>",
"run_at_hour": "A che ora deve essere eseguito. Deve essere utilizzato insieme a <code>#run=hourly</code>. Può essere definito più volte per più esecuzioni durante il giorno.", "run_at_hour": "A che ora deve essere eseguito. Deve essere utilizzato insieme a <code>#run=hourly</code>. Può essere definito più volte per più esecuzioni durante il giorno.",
"disable_inclusion": "gli script con questa etichetta non saranno inclusi nell'esecuzione dello script principale.", "disable_inclusion": "gli script con questa etichetta non saranno inclusi nell'esecuzione dello script principale.",
"sorted": "mantiene le note figlie ordinate alfabeticamente per titolo", "sorted": "mantiene le note figlie ordinate alfabeticamente per titolo",
@@ -1149,7 +1149,8 @@
"export_as_image": "Esporta come immagine", "export_as_image": "Esporta come immagine",
"export_as_image_png": "PNG (raster)", "export_as_image_png": "PNG (raster)",
"export_as_image_svg": "SVG (vector)", "export_as_image_svg": "SVG (vector)",
"note_map": "Mappa" "note_map": "Mappa",
"view_ocr_text": "Visualizza il testo OCR"
}, },
"onclick_button": { "onclick_button": {
"no_click_handler": "Il widget pulsante '{{componentId}}' non ha un gestore di clic definito" "no_click_handler": "Il widget pulsante '{{componentId}}' non ha un gestore di clic definito"
@@ -1541,12 +1542,28 @@
}, },
"images": { "images": {
"images_section_title": "Immagini", "images_section_title": "Immagini",
"download_images_automatically": "Scarica automaticamente le immagini per l'utilizzo offline.", "download_images_automatically": "Scarica automaticamente le immagini",
"download_images_description": "L'HTML incollato può contenere riferimenti a immagini online; Trilium troverà tali riferimenti e scaricherà le immagini in modo che siano disponibili offline.", "download_images_description": "Scarica le immagini online a cui si fa riferimento nel codice HTML incollato, in modo che siano disponibili offline.",
"enable_image_compression": "Abilita la compressione delle immagini", "enable_image_compression": "Compressione delle immagini",
"max_image_dimensions": "Larghezza/altezza massima di un'immagine (l'immagine verrà ridimensionata se supera questa impostazione).", "max_image_dimensions": "Dimensioni massime dell'immagine",
"max_image_dimensions_unit": "pixel", "max_image_dimensions_unit": "pixel",
"jpeg_quality_description": "Qualità JPEG (10 - qualità peggiore, 100 - qualità migliore, 50 - 85 è consigliato)" "jpeg_quality_description": "Il range consigliato è compreso tra 50 e 85. Valori più bassi riducono le dimensioni del file, mentre valori più alti preservano i dettagli.",
"enable_image_compression_description": "Comprimi e ridimensiona le immagini al momento del caricamento o dell'inserimento.",
"max_image_dimensions_description": "Le immagini che superano queste dimensioni verranno ridimensionate automaticamente.",
"jpeg_quality": "Qualità JPEG",
"ocr_section_title": "Estrazione di testo (OCR)",
"ocr_related_content_languages": "Lingue dei contenuti (utilizzate per l'estrazione del testo)",
"ocr_auto_process": "Elaborazione automatica dei nuovi file",
"ocr_auto_process_description": "Estrai automaticamente il testo dai file appena caricati o incollati.",
"ocr_min_confidence": "Livello minimo di confidenza",
"ocr_confidence_description": "Estrai solo il testo che supera questa soglia di affidabilità. Valori inferiori includono più testo, ma potrebbero risultare meno accurati.",
"batch_ocr_title": "Elabora i file esistenti",
"batch_ocr_description": "Estrai il testo da tutte le immagini, i PDF e i documenti Office presenti nei tuoi appunti. L'operazione potrebbe richiedere un po' di tempo a seconda del numero di file.",
"batch_ocr_start": "Avvia l'elaborazione in batch",
"batch_ocr_starting": "Avvio dell'elaborazione in batch...",
"batch_ocr_progress": "Elaborazione di {{processed}} su {{total}} file...",
"batch_ocr_completed": "Elaborazione in batch completata! Sono stati elaborati {{processed}} file.",
"batch_ocr_error": "Errore durante l'elaborazione in batch: {{error}}"
}, },
"attachment_erasure_timeout": { "attachment_erasure_timeout": {
"attachment_erasure_timeout": "Timeout cancellazione allegato", "attachment_erasure_timeout": "Timeout cancellazione allegato",
@@ -1656,9 +1673,6 @@
"description": "Queste opzioni sono valide solo per le versioni desktop; i browser utilizzeranno il proprio controllo ortografico nativo.", "description": "Queste opzioni sono valide solo per le versioni desktop; i browser utilizzeranno il proprio controllo ortografico nativo.",
"enable": "Abilita il controllo ortografico", "enable": "Abilita il controllo ortografico",
"language_code_label": "Codice/i della lingua", "language_code_label": "Codice/i della lingua",
"language_code_placeholder": "ad esempio \"en-US\", \"de-AT\"",
"multiple_languages_info": "È possibile separare più lingue con una virgola, ad esempio \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Codici lingua disponibili:",
"restart-required": "Le modifiche alle opzioni di controllo ortografico avranno effetto dopo il riavvio dell'applicazione." "restart-required": "Le modifiche alle opzioni di controllo ortografico avranno effetto dopo il riavvio dell'applicazione."
}, },
"api_log": { "api_log": {
@@ -1940,7 +1954,7 @@
}, },
"content_language": { "content_language": {
"title": "Lingue dei contenuti", "title": "Lingue dei contenuti",
"description": "Seleziona una o più lingue che desideri visualizzare nella sezione \"Proprietà di base\" di una nota di testo di sola lettura o modificabile. Ciò consentirà funzionalità come il controllo ortografico o il supporto per la scrittura da destra a sinistra." "description": "Seleziona una o più lingue che devono comparire nell'elenco di selezione delle lingue nella sezione \"Proprietà di base\" di una nota di testo in sola lettura o modificabile. Ciò consentirà di utilizzare funzioni quali il controllo ortografico, il supporto per la scrittura da destra a sinistra e l'estrazione del testo (OCR)."
}, },
"switch_layout_button": { "switch_layout_button": {
"title_vertical": "Sposta il riquadro di modifica in basso", "title_vertical": "Sposta il riquadro di modifica in basso",
@@ -2247,7 +2261,9 @@
"sample_user_journey": "Percorso dell'utente", "sample_user_journey": "Percorso dell'utente",
"sample_xy": "XY", "sample_xy": "XY",
"sample_venn": "Venn", "sample_venn": "Venn",
"sample_ishikawa": "Ishikawa" "sample_ishikawa": "Ishikawa",
"sample_treeview": "TreeView",
"sample_wardley": "Mappa di Wardley"
}, },
"llm_chat": { "llm_chat": {
"placeholder": "Scrivi un messaggio...", "placeholder": "Scrivi un messaggio...",
@@ -2278,7 +2294,8 @@
"note_context_enabled": "Clicca qui per disattivare il contesto della nota: {{title}}", "note_context_enabled": "Clicca qui per disattivare il contesto della nota: {{title}}",
"note_context_disabled": "Clicca per includere la nota corrente nel contesto", "note_context_disabled": "Clicca per includere la nota corrente nel contesto",
"no_provider_message": "Non è stato configurato alcun fornitore di IA. Aggiungine uno per iniziare a chattare.", "no_provider_message": "Non è stato configurato alcun fornitore di IA. Aggiungine uno per iniziare a chattare.",
"add_provider": "Aggiungi un fornitore di IA" "add_provider": "Aggiungi un fornitore di IA",
"sources_summary": "{{count}} fonti provenienti da {{sites}} siti"
}, },
"sidebar_chat": { "sidebar_chat": {
"title": "Chat AI", "title": "Chat AI",
@@ -2304,6 +2321,61 @@
"delete_provider_confirmation": "Sei sicuro di voler eliminare il provider \"{{name}}\"?", "delete_provider_confirmation": "Sei sicuro di voler eliminare il provider \"{{name}}\"?",
"api_key": "Chiave API", "api_key": "Chiave API",
"api_key_placeholder": "Inserisci la tua chiave API", "api_key_placeholder": "Inserisci la tua chiave API",
"cancel": "Annulla" "cancel": "Annulla",
"feature_not_enabled": "Abilita la funzione sperimentale LLM in Impostazioni → Avanzate → Funzioni sperimentali per utilizzare le integrazioni basate sull'intelligenza artificiale.",
"mcp_title": "MCP (Model Context Protocol)",
"mcp_enabled": "Server MCP",
"mcp_enabled_description": "Rendi pubblico un endpoint MCP (Model Context Protocol) in modo che gli assistenti di programmazione basati sull'intelligenza artificiale (ad esempio Claude Code, GitHub Copilot) possano leggere e modificare le tue note. L'endpoint è accessibile solo da localhost.",
"mcp_endpoint_title": "URL dell'endpoint",
"mcp_endpoint_description": "Aggiungi questo URL alla configurazione MCP del tuo assistente AI",
"tools": {
"search_notes": "Cerca nelle note",
"get_note": "Prendi nota",
"get_note_content": "Visualizza il contenuto della nota",
"update_note_content": "Aggiorna il contenuto della nota",
"append_to_note": "Aggiungi alla nota",
"create_note": "Crea nota",
"get_attributes": "Recupera gli attributi",
"get_attribute": "Ottieni attributo",
"set_attribute": "Imposta attributo",
"delete_attribute": "Elimina attributo",
"get_child_notes": "Recupera le note relative ai figli",
"get_subtree": "Ottieni sottostruttura",
"load_skill": "Carica skill",
"web_search": "Ricerca sul web",
"note_in_parent": "<Note/> in <Parent/>",
"get_attachment": "Scarica l'allegato",
"get_attachment_content": "Leggi il contenuto dell'allegato"
}
},
"ocr": {
"extracted_text": "Testo estratto (OCR)",
"extracted_text_title": "Testo estratto (OCR)",
"loading_text": "Caricamento del testo OCR in corso...",
"no_text_available": "Non è disponibile alcun testo OCR",
"no_text_explanation": "Questo documento non è stato sottoposto a elaborazione OCR per l'estrazione del testo oppure non è stato trovato alcun testo.",
"failed_to_load": "Impossibile caricare il testo OCR",
"process_now": "Elaborazione OCR",
"processing": "Elaborazione in corso...",
"processing_started": "L'elaborazione OCR è stata avviata. Attendere qualche istante e aggiorna.",
"processing_complete": "Elaborazione OCR completata.",
"processing_failed": "Impossibile avviare l'elaborazione OCR",
"text_filtered_low_confidence": "L'OCR ha rilevato il testo con un livello di affidabilità del {{confidence}}%, ma è stato scartato perché la soglia minima impostata è del {{threshold}}%.",
"open_media_settings": "Apri Impostazioni",
"view_extracted_text": "Visualizza il testo estratto (OCR)"
},
"mind-map": {
"addChild": "Aggiungi figlio",
"addParent": "Aggiungi genitore",
"addSibling": "Aggiungi un fratello o una sorella",
"removeNode": "Rimuovi nodo",
"focus": "Modalità Focus",
"cancelFocus": "Annulla modalità Focus",
"moveUp": "Sposta su",
"moveDown": "Sposta giù",
"link": "Collegamento",
"linkBidirectional": "Collegamento bidirezionale",
"clickTips": "Clicca sul nodo di destinazione",
"summary": "Sommario"
} }
} }

View File

@@ -1029,9 +1029,6 @@
"description": "これらのオプションはデスクトップビルドにのみ適用され、ブラウザはそれぞれのネイティブスペルチェックを使用します。", "description": "これらのオプションはデスクトップビルドにのみ適用され、ブラウザはそれぞれのネイティブスペルチェックを使用します。",
"enable": "スペルチェックを有効", "enable": "スペルチェックを有効",
"language_code_label": "言語コード", "language_code_label": "言語コード",
"language_code_placeholder": "例えば \"en-US\", \"de-AT\"",
"multiple_languages_info": "複数の言語はカンマで区切ることができます。例: \"en-US, de-DE, cs\"。 ",
"available_language_codes_label": "使用可能な言語コード:",
"restart-required": "スペルチェックオプションの変更は、アプリケーションの再起動後に有効になります。" "restart-required": "スペルチェックオプションの変更は、アプリケーションの再起動後に有効になります。"
}, },
"sync_2": { "sync_2": {

View File

@@ -1665,9 +1665,6 @@
"description": "Te opcje dotyczą tylko wersji desktopowych, przeglądarki będą używać własnego natywnego sprawdzania pisowni.", "description": "Te opcje dotyczą tylko wersji desktopowych, przeglądarki będą używać własnego natywnego sprawdzania pisowni.",
"enable": "Włącz sprawdzanie pisowni", "enable": "Włącz sprawdzanie pisowni",
"language_code_label": "Kod(y) języka", "language_code_label": "Kod(y) języka",
"language_code_placeholder": "na przykład \"pl-PL\", \"en-US\"",
"multiple_languages_info": "Wiele języków można oddzielić przecinkiem, np. \"en-US, de-DE, pl\". ",
"available_language_codes_label": "Dostępne kody języków:",
"restart-required": "Zmiany w opcjach sprawdzania pisowni wejdą w życie po ponownym uruchomieniu aplikacji." "restart-required": "Zmiany w opcjach sprawdzania pisowni wejdą w życie po ponownym uruchomieniu aplikacji."
}, },
"sync_2": { "sync_2": {

View File

@@ -1435,9 +1435,6 @@
"description": "Estas opções aplicam-se apenas às versões desktop; os navegadores usarão a sua própria verificação ortográfica nativa.", "description": "Estas opções aplicam-se apenas às versões desktop; os navegadores usarão a sua própria verificação ortográfica nativa.",
"enable": "Ativar verificação ortográfica", "enable": "Ativar verificação ortográfica",
"language_code_label": "Código(s) de idioma", "language_code_label": "Código(s) de idioma",
"language_code_placeholder": "por exemplo \"en-US\", \"de-AT\", \"pt-BR\"",
"multiple_languages_info": "Múltiplos idiomas podem ser separados por vírgula, por exemplo: \"en-US, de-DE, pt-BR, cs\". ",
"available_language_codes_label": "Códigos de idioma disponíveis:",
"restart-required": "As alterações nas opções de verificação ortográfica terão efeito após reiniciar a aplicação." "restart-required": "As alterações nas opções de verificação ortográfica terão efeito após reiniciar a aplicação."
}, },
"sync_2": { "sync_2": {

View File

@@ -1944,9 +1944,6 @@
"description": "Estas opções se aplicam apenas às versões desktop; os navegadores usarão sua própria verificação ortográfica nativa.", "description": "Estas opções se aplicam apenas às versões desktop; os navegadores usarão sua própria verificação ortográfica nativa.",
"enable": "Habilitar verificação ortográfica", "enable": "Habilitar verificação ortográfica",
"language_code_label": "Código(s) de idioma", "language_code_label": "Código(s) de idioma",
"language_code_placeholder": "por exemplo \"en-US\", \"de-AT\", \"pt-BR\"",
"multiple_languages_info": "Múltiplos idiomas podem ser separados por vírgula, por exemplo: \"en-US, de-DE, pt-BR, cs\". ",
"available_language_codes_label": "Códigos de idioma disponíveis:",
"restart-required": "As alterações nas opções de verificação ortográfica terão efeito após reiniciar o aplicativo." "restart-required": "As alterações nas opções de verificação ortográfica terão efeito após reiniciar o aplicativo."
}, },
"sync_2": { "sync_2": {

View File

@@ -1237,12 +1237,9 @@
"title": "titlu" "title": "titlu"
}, },
"spellcheck": { "spellcheck": {
"available_language_codes_label": "Coduri de limbă disponibile:",
"description": "Aceste opțiuni se aplică doar pentru aplicația de desktop, navigatoarele web folosesc propriile corectoare ortografice.", "description": "Aceste opțiuni se aplică doar pentru aplicația de desktop, navigatoarele web folosesc propriile corectoare ortografice.",
"enable": "Activează corectorul ortografic", "enable": "Activează corectorul ortografic",
"language_code_label": "Codurile de limbă", "language_code_label": "Codurile de limbă",
"language_code_placeholder": "de exemplu „en-US”, „de-AT”",
"multiple_languages_info": "Mai multe limbi pot fi separate prin virgulă, e.g. \"en-US, de-DE, cs\". ",
"title": "Corector ortografic", "title": "Corector ortografic",
"restart-required": "Schimbările asupra setărilor corectorului ortografic vor fi aplicate după restartarea aplicației." "restart-required": "Schimbările asupra setărilor corectorului ortografic vor fi aplicate după restartarea aplicației."
}, },

View File

@@ -1679,10 +1679,7 @@
"title": "Проверка орфографии", "title": "Проверка орфографии",
"enable": "Включить проверку орфографии", "enable": "Включить проверку орфографии",
"language_code_label": "Код(ы) языков", "language_code_label": "Код(ы) языков",
"multiple_languages_info": "Несколько языков можно разделять запятой, например, \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Доступные коды языков:",
"restart-required": "Изменения параметров проверки орфографии вступят в силу после перезапуска приложения.", "restart-required": "Изменения параметров проверки орфографии вступят в силу после перезапуска приложения.",
"language_code_placeholder": "например \"en-US\", \"de-AT\"",
"description": "Эти параметры применимы только для десктопных сборок, браузеры будут использовать собственную встроенную проверку орфографии." "description": "Эти параметры применимы только для десктопных сборок, браузеры будут использовать собственную встроенную проверку орфографии."
}, },
"attribute_editor": { "attribute_editor": {

View File

@@ -23,10 +23,33 @@
"close": "Kapat", "close": "Kapat",
"delete_notes_preview": "Not önizlemesini sil", "delete_notes_preview": "Not önizlemesini sil",
"delete_all_clones_description": "Tüm klonları da sil (son değişikliklerden geri alınabilir)", "delete_all_clones_description": "Tüm klonları da sil (son değişikliklerden geri alınabilir)",
"erase_notes_description": "Normal (yazılımsal) silme işlemi, notları yalnızca silinmiş olarak işaretler ve belirli bir süre içinde (son değişiklikler iletişim kutusunda) geri alınabilir. Bu seçeneği işaretlemek, notları hemen siler ve notların geri alınması mümkün olmaz." "erase_notes_description": "Normal (yazılımsal) silme işlemi, notları yalnızca silinmiş olarak işaretler ve belirli bir süre içinde (son değişiklikler iletişim kutusunda) geri alınabilir. Bu seçeneği işaretlemek, notları hemen siler ve notların geri alınması mümkün olmaz.",
"erase_notes_warning": "Notları, tüm kopyaları da dahil olmak üzere kalıcı olarak silin (geri alınamaz). Bu işlem, uygulamanın yeniden yüklenmesine neden olacaktır.",
"notes_to_be_deleted": "Aşağıdaki notlar silinecektir. ({{notesCount}})",
"no_note_to_delete": "Hiçbir not silinmeyecek (sadece kopyaları silinecek).",
"broken_relations_to_be_deleted": "Aşağıdaki ilişkiler koparılacak ve silinecektir ({{ relationCount}})",
"cancel": "İptal",
"ok": "Tamam",
"deleted_relation_text": "{{- note}} (silinecek) notu, {{- source}} kaynağından kaynaklanan {{- relation}} ilişkisi tarafından referans alınmaktadır."
}, },
"export": { "export": {
"close": "Kapat" "close": "Kapat",
"export_note_title": "Notu dışa aktar",
"export_type_subtree": "Bu not ve tüm torunları",
"format_html": "HTML - tüm biçimlendirmeyi koruduğu için önerilir",
"format_html_zip": "ZIP arşivindeki HTML dosyaları - tüm biçimlendirmeyi koruduğu için bu yöntem önerilir.",
"format_markdown": "Markdown - bu, biçimlendirmenin büyük kısmını korur.",
"format_opml": "OPML - yalnızca metin için anahat değişim biçimi. Biçimlendirme, resimler ve dosyalar dahil edilmez.",
"opml_version_1": "OPML v1.0 - yalnızca düz metin",
"opml_version_2": "OPML v2.0 - HTML de destekler",
"export_type_single": "Yalnızca bu not, alt öğeleri olmadan",
"export": "Dışa aktar",
"choose_export_type": "Lütfen önce dışa aktarma türünü seçin",
"export_status": "Dışa aktarma durumu",
"export_in_progress": "Dışa aktarma devam ediyor: {{progressCount}}",
"export_finished_successfully": "Dışa aktarma başarıyla tamamlandı.",
"format_pdf": "PDF - yazdırma veya paylaşım amaçları için.",
"share-format": "Web yayını için HTML - paylaşılan notlarda kullanılan temayı kullanır, ancak statik bir web sitesi olarak yayınlanabilir."
}, },
"import": { "import": {
"chooseImportFile": "İçe aktarım dosyası", "chooseImportFile": "İçe aktarım dosyası",
@@ -58,7 +81,9 @@
"widget-render-error": { "widget-render-error": {
"title": "Özel React widget'ı çizilirken sorun yaşandı" "title": "Özel React widget'ı çizilirken sorun yaşandı"
}, },
"scripting-error": "Kullanıcı tanımlı betik hatası: {{title}}" "scripting-error": "Kullanıcı tanımlı betik hatası: {{title}}",
"widget-missing-parent": "Özel widget'ın zorunlu '{{property}}' özelliği tanımlanmamıştır.\n\nBu komut dosyasının bir kullanıcı arayüzü öğesi olmadan çalıştırılması gerekiyorsa, bunun yerine '#run=frontendStartup' kullanın.",
"open-script-note": "Komut dosyası notunu aç"
}, },
"add_link": { "add_link": {
"add_link": "Bağlantı ekle", "add_link": "Bağlantı ekle",
@@ -103,5 +128,15 @@
"are_you_sure_remove_note": "\"{{title}}\" notunu ilişki haritasından kaldırmak istediğinize emin misiniz?. ", "are_you_sure_remove_note": "\"{{title}}\" notunu ilişki haritasından kaldırmak istediğinize emin misiniz?. ",
"also_delete_note": "Notu da sil", "also_delete_note": "Notu da sil",
"if_you_dont_check": "Bunu işaretlemezseniz, not yalnızca ilişki haritasından kaldırılacaktır." "if_you_dont_check": "Bunu işaretlemezseniz, not yalnızca ilişki haritasından kaldırılacaktır."
},
"help": {
"title": "Özet tablo",
"editShortcuts": "Klavye kısayollarını düzenle",
"noteNavigation": "Not içinde gezinme",
"goUpDown": "Notlar listesinde yukarı/aşağı gitmek",
"collapseExpand": "düğümü daralt/genişlet",
"notSet": "ayarlanmamış",
"goBackForwards": "tarihte geri/ileri git",
"showJumpToNoteDialog": "<a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/note-navigation.html#jump-to-note\">\"Şuraya Git\" iletişim kutusunu göster</a>"
} }
} }

View File

@@ -1398,9 +1398,6 @@
"description": "這些選項僅適用於桌面版,瀏覽器將使用其原生的拼寫檢查功能。", "description": "這些選項僅適用於桌面版,瀏覽器將使用其原生的拼寫檢查功能。",
"enable": "啟用拼寫檢查", "enable": "啟用拼寫檢查",
"language_code_label": "語言代碼", "language_code_label": "語言代碼",
"language_code_placeholder": "例如 \"en-US\", \"de-AT\"",
"multiple_languages_info": "多種語言可以用逗號分隔,例如 \"en-US, de-DE, cs\"。 ",
"available_language_codes_label": "可用的語言代碼:",
"restart-required": "拼寫檢查選項的更改將在應用重啟後生效。" "restart-required": "拼寫檢查選項的更改將在應用重啟後生效。"
}, },
"sync_2": { "sync_2": {

View File

@@ -1744,9 +1744,6 @@
"description": "Ці параметри застосовуються лише для збірок для ПК, браузери використовуватимуть власну вбудовану перевірку орфографії.", "description": "Ці параметри застосовуються лише для збірок для ПК, браузери використовуватимуть власну вбудовану перевірку орфографії.",
"enable": "Увімкнути перевірку орфографії", "enable": "Увімкнути перевірку орфографії",
"language_code_label": "Код(и) мови", "language_code_label": "Код(и) мови",
"language_code_placeholder": "наприклад, \"en-US\", \"de-AT\"",
"multiple_languages_info": "Кілька мов можна розділяти комами, наприклад, \"en-US, de-DE, cs\". ",
"available_language_codes_label": "Доступні коди мови:",
"restart-required": "Зміни в параметрах перевірки орфографії набудуть чинності після перезапуску програми." "restart-required": "Зміни в параметрах перевірки орфографії набудуть чинності після перезапуску програми."
}, },
"sync_2": { "sync_2": {

View File

@@ -1,20 +1,9 @@
:root {
/* Default values to be overridden by themes */
--calendar-coll-event-background-lightness: 95%;
--calendar-coll-event-background-saturation: 80%;
--calendar-coll-event-background-color: var(--accented-background-color);
--calendar-coll-event-text-color: var(--main-text-color);
--calendar-coll-event-hover-filter: none;
--callendar-coll-event-archived-sripe-color: #00000013;
--calendar-coll-today-background-color: var(--more-accented-background-color);
}
.calendar-view { .calendar-view {
--fc-event-border-color: var(--calendar-coll-event-text-color); --fc-event-border-color: var(--calendar-coll-event-text-color, var(--main-text-color));
--fc-event-bg-color: var(--calendar-coll-event-background-color); --fc-event-bg-color: var(--calendar-coll-event-background-color, var(--accented-background-color));
--fc-event-text-color: var(--calendar-coll-event-text-color); --fc-event-text-color: var(--calendar-coll-event-text-color, var(--main-text-color));
--fc-event-selected-overlay-color: transparent; --fc-event-selected-overlay-color: transparent;
--fc-today-bg-color: var(--calendar-coll-today-background-color); --fc-today-bg-color: var(--calendar-coll-today-background-color, var(--more-accented-background-color));
overflow: hidden; overflow: hidden;
position: relative; position: relative;
@@ -123,7 +112,7 @@
z-index: -1; z-index: -1;
--c1: transparent; --c1: transparent;
--c2: var(--callendar-coll-event-archived-sripe-color); --c2: var(--callendar-coll-event-archived-sripe-color, #00000013);
background: repeating-linear-gradient(45deg, var(--c1), var(--c1) 8px, background: repeating-linear-gradient(45deg, var(--c1), var(--c1) 8px,
var(--c2) 8px, var(--c2) 16px); var(--c2) 8px, var(--c2) 16px);
@@ -153,8 +142,8 @@
--fc-event-text-color: var(--custom-color); --fc-event-text-color: var(--custom-color);
--fc-event-bg-color: hsl(var(--custom-color-hue), --fc-event-bg-color: hsl(var(--custom-color-hue),
var(--calendar-coll-event-background-saturation), var(--calendar-coll-event-background-saturation, 80%),
var(--calendar-coll-event-background-lightness)) !important; var(--calendar-coll-event-background-lightness, 95%)) !important;
} }
.calendar-view a.fc-timegrid-event:focus-visible, .calendar-view a.fc-timegrid-event:focus-visible,
@@ -171,7 +160,7 @@
.calendar-view a.fc-timegrid-event:hover, .calendar-view a.fc-timegrid-event:hover,
.calendar-view a.fc-daygrid-event:hover { .calendar-view a.fc-daygrid-event:hover {
filter: var(--calendar-coll-event-hover-filter); filter: var(--calendar-coll-event-hover-filter, none);
border-color: var(--fc-event-text-color); border-color: var(--fc-event-text-color);
text-decoration: none; text-decoration: none;
color: currentColor; color: currentColor;

View File

@@ -1,13 +1,14 @@
import BasicWidget from "./basic_widget.js";
import server from "../services/server.js";
import linkService from "../services/link.js";
import froca from "../services/froca.js";
import utils, { handleRightToLeftPlacement } from "../services/utils.js";
import appContext from "../components/app_context.js";
import shortcutService, { isIMEComposing } from "../services/shortcuts.js";
import { t } from "../services/i18n.js";
import { Dropdown, Tooltip } from "bootstrap"; import { Dropdown, Tooltip } from "bootstrap";
import appContext from "../components/app_context.js";
import froca from "../services/froca.js";
import { t } from "../services/i18n.js";
import linkService from "../services/link.js";
import server from "../services/server.js";
import shortcutService, { isIMEComposing } from "../services/shortcuts.js";
import utils, { handleRightToLeftPlacement } from "../services/utils.js";
import BasicWidget from "./basic_widget.js";
const TPL = /*html*/` const TPL = /*html*/`
<div class="quick-search input-group input-group-sm"> <div class="quick-search input-group input-group-sm">
<style> <style>
@@ -245,7 +246,7 @@ export default class QuickSearchWidget extends BasicWidget {
const { searchResultNoteIds, searchResults, error } = await server.get<QuickSearchResponse>(`quick-search/${encodeURIComponent(searchString)}`); const { searchResultNoteIds, searchResults, error } = await server.get<QuickSearchResponse>(`quick-search/${encodeURIComponent(searchString)}`);
if (error) { if (error) {
let tooltip = new Tooltip(this.$searchString[0], { const tooltip = new Tooltip(this.$searchString[0], {
trigger: "manual", trigger: "manual",
title: `Search error: ${error}`, title: `Search error: ${error}`,
placement: handleRightToLeftPlacement("right") placement: handleRightToLeftPlacement("right")
@@ -289,10 +290,9 @@ export default class QuickSearchWidget extends BasicWidget {
const resultsToDisplay = this.allSearchResults.slice(startIndex, endIndex); const resultsToDisplay = this.allSearchResults.slice(startIndex, endIndex);
for (const result of resultsToDisplay) { for (const result of resultsToDisplay) {
const noteId = result.notePath.split("/").pop(); if (!result.notePath) continue;
if (!noteId) continue;
const $item = $('<a class="dropdown-item" tabindex="0" href="javascript:">'); const $item = $(`<a class="dropdown-item" tabindex="0" href="#${result.notePath}">`);
// Build the display HTML with content snippet below the title // Build the display HTML with content snippet below the title
let itemHtml = `<div class="quick-search-item"> let itemHtml = `<div class="quick-search-item">
@@ -317,23 +317,13 @@ export default class QuickSearchWidget extends BasicWidget {
$item.html(itemHtml); $item.html(itemHtml);
$item.on("click", (e) => { $item.on("click auxclick", () => {
this.dropdown.hide(); this.dropdown.hide();
e.preventDefault();
const activeContext = appContext.tabManager.getActiveContext();
if (activeContext) {
activeContext.setNote(noteId);
}
}); });
shortcutService.bindElShortcut($item, "return", () => { shortcutService.bindElShortcut($item, "return", () => {
this.dropdown.hide(); this.dropdown.hide();
$item[0].click();
const activeContext = appContext.tabManager.getActiveContext();
if (activeContext) {
activeContext.setNote(noteId);
}
}); });
this.$dropdownMenu.append($item); this.$dropdownMenu.append($item);
@@ -350,24 +340,18 @@ export default class QuickSearchWidget extends BasicWidget {
const $link = await linkService.createLink(note.noteId, { showNotePath: true, showNoteIcon: true }); const $link = await linkService.createLink(note.noteId, { showNotePath: true, showNoteIcon: true });
$link.addClass("dropdown-item"); $link.addClass("dropdown-item");
$link.attr("tabIndex", "0"); $link.attr("tabIndex", "0");
$link.on("click", (e) => { $link.on("click auxclick", (e) => {
this.dropdown.hide(); this.dropdown.hide();
if (!e.target || e.target.nodeName !== "A") { if (!e.target || (e.target as HTMLElement).nodeName !== "A") {
// click on the link is handled by link handling, but we want the whole item clickable // click on the <a> is handled by the global goToLink handler,
const activeContext = appContext.tabManager.getActiveContext(); // but we want the whole item clickable
if (activeContext) { $link.find("a")[0]?.dispatchEvent(new MouseEvent(e.type, e.originalEvent as MouseEventInit));
activeContext.setNote(note.noteId);
}
} }
}); });
shortcutService.bindElShortcut($link, "return", () => { shortcutService.bindElShortcut($link, "return", () => {
this.dropdown.hide(); this.dropdown.hide();
$link.find("a")[0]?.click();
const activeContext = appContext.tabManager.getActiveContext();
if (activeContext) {
activeContext.setNote(note.noteId);
}
}); });
this.$dropdownMenu.append($link); this.$dropdownMenu.append($link);

View File

@@ -903,7 +903,7 @@ export default class TabRowWidget extends BasicWidget {
loadResults.isNoteReloaded(noteContext.noteId) || loadResults.isNoteReloaded(noteContext.noteId) ||
loadResults loadResults
.getAttributeRows() .getAttributeRows()
.find((attr) => ["workspace", "workspaceIconClass", "workspaceTabBackgroundColor"].includes(attr.name || "") && attributeService.isAffecting(attr, noteContext.note)) .find((attr) => ["workspace", "iconClass", "workspaceIconClass", "workspaceTabBackgroundColor"].includes(attr.name || "") && attributeService.isAffecting(attr, noteContext.note))
) { ) {
const $tab = this.getTabById(noteContext.ntxId); const $tab = this.getTabById(noteContext.ntxId);

View File

@@ -8,13 +8,11 @@ import { HTMLProps } from "preact/compat";
import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks"; import { useCallback, useEffect, useMemo, useRef, useState } from "preact/hooks";
import FNote from "../../../entities/fnote"; import FNote from "../../../entities/fnote";
import attribute_autocomplete from "../../../services/attribute_autocomplete";
import dialog from "../../../services/dialog"; import dialog from "../../../services/dialog";
import { isExperimentalFeatureEnabled } from "../../../services/experimental_features"; import { isExperimentalFeatureEnabled } from "../../../services/experimental_features";
import { t } from "../../../services/i18n"; import { t } from "../../../services/i18n";
import server from "../../../services/server"; import server from "../../../services/server";
import toast from "../../../services/toast"; import toast from "../../../services/toast";
import utils from "../../../services/utils";
import ActionButton from "../../react/ActionButton"; import ActionButton from "../../react/ActionButton";
import { useEditorSpacedUpdate, useTriliumEvent, useTriliumEvents } from "../../react/hooks"; import { useEditorSpacedUpdate, useTriliumEvent, useTriliumEvents } from "../../react/hooks";
import { TypeWidgetProps } from "../type_widget"; import { TypeWidgetProps } from "../type_widget";
@@ -23,7 +21,7 @@ import { buildRelationContextMenuHandler } from "./context_menu";
import { JsPlumb } from "./jsplumb"; import { JsPlumb } from "./jsplumb";
import { NoteBox } from "./NoteBox"; import { NoteBox } from "./NoteBox";
import setupOverlays, { uniDirectionalOverlays } from "./overlays"; import setupOverlays, { uniDirectionalOverlays } from "./overlays";
import { getMousePosition, getZoom, idToNoteId, noteIdToId } from "./utils"; import { getMousePosition, getZoom, idToNoteId, noteIdToId, promptForRelationName } from "./utils";
const isNewLayout = isExperimentalFeatureEnabled("new-layout"); const isNewLayout = isExperimentalFeatureEnabled("new-layout");
@@ -415,27 +413,7 @@ function useRelationCreation({ mapApiRef, jsPlumbApiRef }: { mapApiRef: RefObjec
// if there's no event, then this has been triggered programmatically // if there's no event, then this has been triggered programmatically
if (!originalEvent || !mapApiRef.current) return; if (!originalEvent || !mapApiRef.current) return;
const name = await dialog.prompt({ const name = await promptForRelationName();
message: t("relation_map.specify_new_relation_name"),
shown: ({ $answer }) => {
if (!$answer) {
return;
}
$answer.on("keyup", () => {
// invalid characters are simply ignored (from user perspective they are not even entered)
const attrName = utils.filterAttributeName($answer.val() as string);
$answer.val(attrName);
});
attribute_autocomplete.initAttributeNameAutocomplete({
$el: $answer,
attributeType: "relation",
open: true
});
}
});
// Delete the newly created connection if the dialog was dismissed. // Delete the newly created connection if the dialog was dismissed.
if (!name || !name.trim()) { if (!name || !name.trim()) {

View File

@@ -75,6 +75,29 @@ export default class RelationMapApi {
this.onDataChange(true); this.onDataChange(true);
} }
async renameRelation(connection: Connection, newName: string) {
newName = utils.filterAttributeName(newName);
const relation = this.relations.find((rel) => rel.attributeId === connection.id);
if (!relation) return false;
// Check if a relation with the new name already exists between these notes.
const exists = this.relations.some(
(rel) => rel.sourceNoteId === relation.sourceNoteId && rel.targetNoteId === relation.targetNoteId && rel.name === newName
);
if (exists) return false;
await server.put(`notes/${relation.sourceNoteId}/relations/${newName}/to/${relation.targetNoteId}`);
await server.remove(`notes/${relation.sourceNoteId}/relations/${relation.name}/to/${relation.targetNoteId}`);
this.onDataChange(true);
return true;
}
getRelationName(connection: Connection): string | undefined {
const relation = this.relations.find((rel) => rel.attributeId === connection.id);
return relation?.name;
}
cleanupOtherNotes(noteIds: string[]) { cleanupOtherNotes(noteIds: string[]) {
const filteredNotes = this.data.notes.filter((note) => noteIds.includes(note.noteId)); const filteredNotes = this.data.notes.filter((note) => noteIds.includes(note.noteId));
if (filteredNotes.length === this.data.notes.length) return; if (filteredNotes.length === this.data.notes.length) return;

View File

@@ -9,6 +9,7 @@ import dialog from "../../../services/dialog";
import { t } from "../../../services/i18n"; import { t } from "../../../services/i18n";
import server from "../../../services/server"; import server from "../../../services/server";
import RelationMapApi from "./api"; import RelationMapApi from "./api";
import { promptForRelationName } from "./utils";
export function buildNoteContextMenuHandler(note: FNote | null | undefined, mapApiRef: RefObject<RelationMapApi>) { export function buildNoteContextMenuHandler(note: FNote | null | undefined, mapApiRef: RefObject<RelationMapApi>) {
return (e: MouseEvent) => { return (e: MouseEvent) => {
@@ -73,9 +74,25 @@ export function buildRelationContextMenuHandler(connection: Connection, mapApiRe
contextMenu.show({ contextMenu.show({
x: event.pageX, x: event.pageX,
y: event.pageY, y: event.pageY,
items: [{ title: t("relation_map.remove_relation"), command: "remove", uiIcon: "bx bx-trash" }], items: [
{ title: t("relation_map.rename_relation"), command: "rename", uiIcon: "bx bx-pencil" },
{ kind: "separator" },
{ title: t("relation_map.remove_relation"), command: "remove", uiIcon: "bx bx-trash" }
],
selectMenuItemHandler: async ({ command }) => { selectMenuItemHandler: async ({ command }) => {
if (command === "remove") { if (command === "rename") {
const currentName = mapApiRef.current?.getRelationName(connection) ?? "";
const newName = await promptForRelationName(currentName);
if (!newName?.trim() || newName === currentName) {
return;
}
const result = await mapApiRef.current?.renameRelation(connection, newName);
if (!result) {
await dialog.info(t("relation_map.connection_exists", { name: newName }));
}
} else if (command === "remove") {
if (!(await dialog.confirm(t("relation_map.confirm_remove_relation")))) { if (!(await dialog.confirm(t("relation_map.confirm_remove_relation")))) {
return; return;
} }

View File

@@ -1,4 +1,7 @@
import attribute_autocomplete from "../../../services/attribute_autocomplete";
import dialog from "../../../services/dialog";
import { t } from "../../../services/i18n"; import { t } from "../../../services/i18n";
import utils from "../../../services/utils";
export function noteIdToId(noteId: string) { export function noteIdToId(noteId: string) {
return `rel-map-note-${noteId}`; return `rel-map-note-${noteId}`;
@@ -32,3 +35,26 @@ export function getMousePosition(evt: MouseEvent, container: HTMLDivElement, zoo
y: ((evt.clientY ?? 0) - rect.top) / zoom y: ((evt.clientY ?? 0) - rect.top) / zoom
}; };
} }
export function promptForRelationName(defaultValue?: string): Promise<string | null> {
return dialog.prompt({
message: t("relation_map.specify_new_relation_name"),
defaultValue,
shown: ({ $answer }) => {
if (!$answer) {
return;
}
$answer.on("keyup", () => {
const attrName = utils.filterAttributeName($answer.val() as string);
$answer.val(attrName);
});
attribute_autocomplete.initAttributeNameAutocomplete({
$el: $answer,
attributeType: "relation",
open: true
});
}
});
}

View File

@@ -10,6 +10,7 @@ import helmet from "helmet";
import { t } from "i18next"; import { t } from "i18next";
import path from "path"; import path from "path";
import favicon from "serve-favicon"; import favicon from "serve-favicon";
import type serveStatic from "serve-static";
import assets from "./routes/assets.js"; import assets from "./routes/assets.js";
import custom from "./routes/custom.js"; import custom from "./routes/custom.js";
@@ -22,6 +23,9 @@ import openID from "./services/open_id.js";
import { RESOURCE_DIR } from "./services/resource_dir.js"; import { RESOURCE_DIR } from "./services/resource_dir.js";
import utils, { getResourceDir, isDev } from "./services/utils.js"; import utils, { getResourceDir, isDev } from "./services/utils.js";
// Allow serving assets even if the installation path contains a hidden (dot-prefixed) directory.
const STATIC_OPTIONS: serveStatic.ServeStaticOptions = { dotfiles: "allow" };
export default async function buildApp() { export default async function buildApp() {
const app = express(); const app = express();
@@ -97,10 +101,10 @@ export default async function buildApp() {
// localhost-only guard and does not require Trilium authentication. // localhost-only guard and does not require Trilium authentication.
mcpRoutes.register(app); mcpRoutes.register(app);
app.use(express.static(path.join(publicDir, "root"))); app.use(express.static(path.join(publicDir, "root"), STATIC_OPTIONS));
app.use(`/manifest.webmanifest`, express.static(path.join(publicAssetsDir, "manifest.webmanifest"))); app.use(`/manifest.webmanifest`, express.static(path.join(publicAssetsDir, "manifest.webmanifest"), STATIC_OPTIONS));
app.use(`/robots.txt`, express.static(path.join(publicAssetsDir, "robots.txt"))); app.use(`/robots.txt`, express.static(path.join(publicAssetsDir, "robots.txt"), STATIC_OPTIONS));
app.use(`/icon.png`, express.static(path.join(publicAssetsDir, "icon.png"))); app.use(`/icon.png`, express.static(path.join(publicAssetsDir, "icon.png"), STATIC_OPTIONS));
const { default: sessionParser, startSessionCleanup } = await import("./routes/session_parser.js"); const { default: sessionParser, startSessionCleanup } = await import("./routes/session_parser.js");
app.use(sessionParser); app.use(sessionParser);

View File

@@ -365,7 +365,10 @@
"last-updated": "Last updated on {{- date}}", "last-updated": "Last updated on {{- date}}",
"subpages": "Subpages:", "subpages": "Subpages:",
"on-this-page": "On This Page", "on-this-page": "On This Page",
"expand": "Expand" "expand": "Expand",
"toggle-navigation": "Toggle Navigation",
"toggle-toc": "Toggle Table of Contents",
"logo-alt": "Logo"
}, },
"hidden_subtree_templates": { "hidden_subtree_templates": {
"text-snippet": "Text Snippet", "text-snippet": "Text Snippet",

View File

@@ -9,6 +9,9 @@ import auth from "../services/auth.js";
import { getResourceDir, isDev } from "../services/utils.js"; import { getResourceDir, isDev } from "../services/utils.js";
import { doubleCsrfProtection as csrfMiddleware } from "./csrf_protection.js"; import { doubleCsrfProtection as csrfMiddleware } from "./csrf_protection.js";
// Allow serving assets even if the installation path contains a hidden (dot-prefixed) directory.
const STATIC_OPTIONS: serveStatic.ServeStaticOptions = { dotfiles: "allow" };
const persistentCacheStatic = (root: string, options?: serveStatic.ServeStaticOptions<express.Response<unknown, Record<string, unknown>>>) => { const persistentCacheStatic = (root: string, options?: serveStatic.ServeStaticOptions<express.Response<unknown, Record<string, unknown>>>) => {
if (!isDev) { if (!isDev) {
options = { options = {
@@ -16,7 +19,7 @@ const persistentCacheStatic = (root: string, options?: serveStatic.ServeStaticOp
...options ...options
}; };
} }
return express.static(root, options); return express.static(root, { ...STATIC_OPTIONS, ...options });
}; };
async function register(app: express.Application) { async function register(app: express.Application) {
@@ -66,7 +69,7 @@ async function register(app: express.Application) {
// broken when closing the browser and coming back in to the page. // broken when closing the browser and coming back in to the page.
// The page is restored from cache, but the API call fail. // The page is restored from cache, but the API call fail.
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
res.sendFile(path.join(publicDir, "index.html")); res.sendFile(path.join(publicDir, "index.html"), STATIC_OPTIONS);
}); });
app.use("/assets", persistentCacheStatic(path.join(publicDir, "assets"))); app.use("/assets", persistentCacheStatic(path.join(publicDir, "assets")));
app.use(`/src`, persistentCacheStatic(path.join(publicDir, "src"))); app.use(`/src`, persistentCacheStatic(path.join(publicDir, "src")));
@@ -76,14 +79,14 @@ async function register(app: express.Application) {
app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations"))); app.use(`/${assetUrlFragment}/translations/`, persistentCacheStatic(path.join(publicDir, "translations")));
app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules"))); app.use(`/node_modules/`, persistentCacheStatic(path.join(publicDir, "node_modules")));
} }
app.use(`/share/assets/fonts/`, express.static(path.join(getClientDir(), "fonts"))); app.use(`/share/assets/fonts/`, express.static(path.join(getClientDir(), "fonts"), STATIC_OPTIONS));
app.use(`/share/assets/`, express.static(getShareThemeAssetDir())); app.use(`/share/assets/`, express.static(getShareThemeAssetDir(), STATIC_OPTIONS));
app.use(`/pdfjs/`, persistentCacheStatic(getPdfjsAssetDir())); app.use(`/pdfjs/`, persistentCacheStatic(getPdfjsAssetDir()));
app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images"))); app.use(`/${assetUrlFragment}/images`, persistentCacheStatic(path.join(resourceDir, "assets", "images")));
app.use(`/${assetUrlFragment}/doc_notes`, persistentCacheStatic(path.join(resourceDir, "assets", "doc_notes"))); app.use(`/${assetUrlFragment}/doc_notes`, persistentCacheStatic(path.join(resourceDir, "assets", "doc_notes")));
app.use(`/assets/vX/fonts`, express.static(path.join(srcRoot, "public/fonts"))); app.use(`/assets/vX/fonts`, express.static(path.join(srcRoot, "public/fonts"), STATIC_OPTIONS));
app.use(`/assets/vX/images`, express.static(path.join(srcRoot, "..", "images"))); app.use(`/assets/vX/images`, express.static(path.join(srcRoot, "..", "images"), STATIC_OPTIONS));
app.use(`/assets/vX/stylesheets`, express.static(path.join(srcRoot, "public/stylesheets"))); app.use(`/assets/vX/stylesheets`, express.static(path.join(srcRoot, "public/stylesheets"), STATIC_OPTIONS));
} }
export function getShareThemeAssetDir() { export function getShareThemeAssetDir() {

View File

@@ -148,8 +148,8 @@ export function renderNoteContent(note: SNote) {
isStatic: false, isStatic: false,
faviconUrl: note.hasRelation("shareFavicon") ? `api/notes/${note.getRelationValue("shareFavicon")}/download` : `../favicon.ico`, faviconUrl: note.hasRelation("shareFavicon") ? `api/notes/${note.getRelationValue("shareFavicon")}/download` : `../favicon.ico`,
iconPackCss: iconPacks.map(p => iconPackService.generateCss(p, p.builtin iconPackCss: iconPacks.map(p => iconPackService.generateCss(p, p.builtin
? `/share/assets/fonts/${p.fontAttachmentId}.${iconPackService.MIME_TO_EXTENSION_MAPPINGS[p.fontMime]}` ? `assets/fonts/${p.fontAttachmentId}.${iconPackService.MIME_TO_EXTENSION_MAPPINGS[p.fontMime]}`
: `/share/api/attachments/${p.fontAttachmentId}/download` : `api/attachments/${p.fontAttachmentId}/download`
)) ))
.filter(Boolean) .filter(Boolean)
.join("\n\n"), .join("\n\n"),

View File

@@ -56,13 +56,20 @@ export default class NodejsZipProvider implements ZipProvider {
processEntry: (entry: ZipEntry, readContent: () => Promise<Uint8Array>) => Promise<void> processEntry: (entry: ZipEntry, readContent: () => Promise<Uint8Array>) => Promise<void>
): Promise<void> { ): Promise<void> {
return new Promise<void>((res, rej) => { return new Promise<void>((res, rej) => {
yauzl.fromBuffer(Buffer.from(buffer), { lazyEntries: true, validateEntrySizes: false }, (err, zipfile) => { yauzl.fromBuffer(Buffer.from(buffer), { lazyEntries: true, validateEntrySizes: false, decodeStrings: false }, (err, zipfile) => {
if (err) { rej(err); return; } if (err) { rej(err); return; }
if (!zipfile) { rej(new Error("Unable to read zip file.")); return; } if (!zipfile) { rej(new Error("Unable to read zip file.")); return; }
zipfile.readEntry(); zipfile.readEntry();
zipfile.on("entry", async (entry: yauzl.Entry) => { zipfile.on("entry", async (entry: yauzl.Entry) => {
try { try {
// yauzl with decodeStrings: false returns fileName as a Buffer.
// We decode as UTF-8 to handle ZIP files that use UTF-8 filenames
// without setting the general purpose bit flag 11 (language encoding flag).
const fileName = Buffer.isBuffer(entry.fileName)
? (entry.fileName as Buffer).toString("utf-8")
: entry.fileName;
const readContent = () => new Promise<Uint8Array>((res, rej) => { const readContent = () => new Promise<Uint8Array>((res, rej) => {
zipfile.openReadStream(entry, (err, readStream) => { zipfile.openReadStream(entry, (err, readStream) => {
if (err) { rej(err); return; } if (err) { rej(err); return; }
@@ -71,7 +78,7 @@ export default class NodejsZipProvider implements ZipProvider {
}); });
}); });
await processEntry({ fileName: entry.fileName }, readContent); await processEntry({ fileName }, readContent);
} catch (e) { } catch (e) {
rej(e); rej(e);
} }

View File

@@ -1,13 +1,13 @@
{ {
"get-started": { "get-started": {
"title": "Začínáme", "title": "Začít",
"desktop_title": "Stažení aplikace pro osobní počítače (v{{version}})", "desktop_title": "Stažení aplikace pro osobní počítače (v{{version}})",
"architecture": "Architektura:", "architecture": "Architektura:",
"older_releases": "Starší vydání", "older_releases": "Starší vydání",
"server_title": "Nastavte server pro přístup z více zařízení" "server_title": "Nastavte server pro přístup z více zařízení"
}, },
"hero_section": { "hero_section": {
"get_started": "Start", "get_started": "Začít",
"github": "GitHub", "github": "GitHub",
"title": "Uspořádejte si myšlenky. Vytvořte si osobní znalostní bázi.", "title": "Uspořádejte si myšlenky. Vytvořte si osobní znalostní bázi.",
"subtitle": "Trilium je open-source řešení pro pořizování poznámek a organizaci osobní znalostní báze. Používejte jej lokálně na svém počítači nebo jej synchronizujte se svým vlastním serverem, abyste měli své poznámky vždy po ruce, ať jste kdekoli.", "subtitle": "Trilium je open-source řešení pro pořizování poznámek a organizaci osobní znalostní báze. Používejte jej lokálně na svém počítači nebo jej synchronizujte se svým vlastním serverem, abyste měli své poznámky vždy po ruce, ať jste kdekoli.",

View File

@@ -47,6 +47,14 @@ document.addEventListener(
if (toggleMenuButton && layout) { if (toggleMenuButton && layout) {
toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu")); toggleMenuButton.addEventListener("click", () => layout.classList.toggle("showMenu"));
} }
// Format <time> elements using the browser's locale.
for (const el of document.querySelectorAll<HTMLTimeElement>("time[datetime]")) {
const date = new Date(el.dateTime);
if (!isNaN(date.getTime())) {
el.textContent = date.toLocaleDateString();
}
}
}, },
false false
); );

View File

@@ -62,6 +62,7 @@ body.type-webView {
#main { #main {
max-width: unset; max-width: unset;
padding: 0; padding: 0;
height: 100%;
} }
#content { #content {

View File

@@ -112,13 +112,13 @@ content = content.replaceAll(headingRe, (...match) => {
<body data-note-id="<%= note.noteId %>" class="type-<%= note.type %>" data-ancestor-note-id="<%= subRoot.note.noteId %>"> <body data-note-id="<%= note.noteId %>" class="type-<%= note.type %>" data-ancestor-note-id="<%= subRoot.note.noteId %>">
<%- renderSnippets("body:start") %> <%- renderSnippets("body:start") %>
<div id="header"> <div id="header">
<button aria-label="Toggle Navigation" id="left-pane-toggle-button" class="header-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg></button> <button aria-label="<%= t("share_theme.toggle-navigation") %>" id="left-pane-toggle-button" class="header-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M4 6h16v2H4zm0 5h16v2H4zm0 5h16v2H4z"></path></svg></button>
<a href="<%= shareRootLink %>" id="header-logo"> <a href="<%= shareRootLink %>" id="header-logo">
<img src="<%= logoUrl %>" width="32" height="<%= mobileLogoHeight %>" alt="Logo" /> <img src="<%= logoUrl %>" width="32" height="<%= mobileLogoHeight %>" alt="<%= t("share_theme.logo-alt") %>" />
<%= subRoot.note.title %> <%= subRoot.note.title %>
</a> </a>
<% if (headingMatches.length > 1) { %> <% if (headingMatches.length > 1) { %>
<button aria-label="Toggle Table of Contents" id="toc-pane-toggle-button" class="header-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10V7h2v2h-2zm0 6h2v-2h-2v2z"></path></svg></button> <button aria-label="<%= t("share_theme.toggle-toc") %>" id="toc-pane-toggle-button" class="header-button"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor"><path d="M3 9h14V7H3v2zm0 4h14v-2H3v2zm0 4h14v-2H3v2zm16 0h2v-2h-2v2zm0-10V7h2v2h-2zm0 6h2v-2h-2v2z"></path></svg></button>
<% } else { %> <% } else { %>
<div class="header-button-placeholder"></div> <div class="header-button-placeholder"></div>
<% } %> <% } %>
@@ -160,7 +160,7 @@ content = content.replaceAll(headingRe, (...match) => {
<%- renderSnippets("content:start") %> <%- renderSnippets("content:start") %>
<h1 id="title"><%= note.title %></h1> <h1 id="title"><%= note.title %></h1>
<% if (isEmpty && (!note.hasVisibleChildren() && note.type !== "book")) { %> <% if (isEmpty && (!note.hasVisibleChildren() && note.type !== "book")) { %>
<p>This note has no content.</p> <p><%= t("share_page.no-content") %></p>
<% } else { %> <% } else { %>
<% <%
content = content.replace(/<img /g, `<img alt="${t("share_theme.image_alt")}" loading="lazy" `); content = content.replace(/<img /g, `<img alt="${t("share_theme.image_alt")}" loading="lazy" `);
@@ -196,7 +196,7 @@ content = content.replaceAll(headingRe, (...match) => {
<% if (!isEmpty && !isStatic) { %> <% if (!isEmpty && !isStatic) { %>
<div class="updated"> <div class="updated">
<% const lastUpdated = new Date(note.utcDateModified); %> <% const lastUpdated = new Date(note.utcDateModified); %>
<%- t("share_theme.last-updated", { date: `<time datetime="${lastUpdated.toISOString()}">${lastUpdated.toLocaleDateString()}</time>`}) %> <%- t("share_theme.last-updated", { date: `<time datetime="${lastUpdated.toISOString()}">${lastUpdated.toLocaleDateString("en-US")}</time>`}) %>
</div> </div>
<% } %> <% } %>

View File

@@ -316,6 +316,18 @@ class BNote extends AbstractBeccaEntity<BNote> {
return null; return null;
} }
/**
* Executes this note as a script. The note must be of type "Code: JS backend".
*
* @returns the return value of the executed script
*/
executeScript() {
// Lazy require to avoid circular dependency (script.ts imports BNote as a type).
// eslint-disable-next-line @typescript-eslint/no-require-imports
const scriptService = require("../../services/script.js").default;
return scriptService.executeNote(this, { originEntity: this });
}
/** /**
* Beware that the method must not create a copy of the array, but actually returns its internal array * Beware that the method must not create a copy of the array, but actually returns its internal array
* (for performance reasons) * (for performance reasons)

View File

@@ -620,7 +620,7 @@ function BackendScriptApi(this: Api, currentNote: BNote, apiParams: ApiParams) {
} }
const parentNoteId = opts.isVisible ? "_lbVisibleLaunchers" : "_lbAvailableLaunchers"; const parentNoteId = opts.isVisible ? "_lbVisibleLaunchers" : "_lbAvailableLaunchers";
const noteId = `al_${ opts.id}`; const noteId = `al_${opts.id}`;
const launcherNote = const launcherNote =
becca.getNote(noteId) || becca.getNote(noteId) ||
@@ -698,7 +698,6 @@ function BackendScriptApi(this: Api, currentNote: BNote, apiParams: ApiParams) {
return `!@#Function: ${p.toString()}`; return `!@#Function: ${p.toString()}`;
} }
return p; return p;
}); });
} }
}; };

View File

@@ -70,6 +70,11 @@ describe("processNoteContent", () => {
expect(content).toContain(`<img src="api/images/${bananaNote!.noteId}/banana.jpeg`); expect(content).toContain(`<img src="api/images/${bananaNote!.noteId}/banana.jpeg`);
}); });
it("can import ZIP with UTF-8 filenames without language encoding flag", async () => {
const { importedNote } = await testImport("utf8-filename.zip");
expect(importedNote.title).toBe("测试");
});
it("can import old geomap notes", async () => { it("can import old geomap notes", async () => {
const { importedNote } = await testImport("geomap.zip"); const { importedNote } = await testImport("geomap.zip");
expect(importedNote.type).toBe("book"); expect(importedNote.type).toBe("book");