Compare commits

...

19 Commits

Author SHA1 Message Date
Zexin Yuan
f902fcd997
Merge c372ba03ddd169622c8be17ccbe78643db51bc8f into 3360b2935487dd33b736f83f7b791ec38c2e82f3 2026-02-06 10:32:20 +02:00
Elian Doran
3360b29354
Translations update from Hosted Weblate (#8599)
Some checks are pending
Checks / main (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Documentation / Build and Deploy Documentation (push) Waiting to run
Dev / Test development (push) Waiting to run
Dev / Build Docker image (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile) (push) Blocked by required conditions
Dev / Check Docker build (Dockerfile.alpine) (push) Blocked by required conditions
/ Check Docker build (Dockerfile) (push) Waiting to run
/ Check Docker build (Dockerfile.alpine) (push) Waiting to run
/ Build Docker images (Dockerfile, ubuntu-24.04-arm, linux/arm64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.alpine, ubuntu-latest, linux/amd64) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v7) (push) Blocked by required conditions
/ Build Docker images (Dockerfile.legacy, ubuntu-24.04-arm, linux/arm/v8) (push) Blocked by required conditions
/ Merge manifest lists (push) Blocked by required conditions
playwright / E2E tests on linux-arm64 (push) Waiting to run
playwright / E2E tests on linux-x64 (push) Waiting to run
Deploy website / Build & deploy website (push) Waiting to run
2026-02-06 10:32:09 +02:00
aloeaqua
646d281759
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2026-02-05 21:44:58 +00:00
aloeaqua
e268d92d52
Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (389 of 389 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/
2026-02-05 21:44:57 +00:00
Aindriú Mac Giolla Eoin
fa81db2f03
Translated using Weblate (Irish)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-05 21:44:56 +00:00
Marcel
830199ba3a
Translated using Weblate (German)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2026-02-05 21:44:56 +00:00
Ulices
ea8dc506d3
Translated using Weblate (Spanish)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2026-02-05 21:44:55 +00:00
ibs-allaow
c95483ed94
Translated using Weblate (Arabic)
Currently translated at 49.1% (57 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-02-05 21:44:54 +00:00
ibs-allaow
d9cb4480b2
Translated using Weblate (Arabic)
Currently translated at 59.8% (1058 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:53 +00:00
ibs-allaow
c69afd6074
Translated using Weblate (Arabic)
Currently translated at 64.4% (98 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-05 21:44:53 +00:00
ibs-allaow
f541790ab4
Translated using Weblate (Arabic)
Currently translated at 48.2% (56 of 116 strings)

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/ar/
2026-02-05 21:44:52 +00:00
green
707ac4ec36
Translated using Weblate (Japanese)
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2026-02-05 21:44:51 +00:00
noobhjy
cd55133e96
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1768 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2026-02-05 21:44:50 +00:00
ibs-allaow
37a91f8529
Translated using Weblate (Arabic)
Currently translated at 59.7% (1057 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:49 +00:00
Aindriú Mac Giolla Eoin
0ed0fa37a1
Translated using Weblate (Irish)
Currently translated at 55.4% (981 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ga/
2026-02-05 21:44:48 +00:00
ibs-allaow
26728b79b2
Translated using Weblate (Arabic)
Currently translated at 59.7% (1056 of 1768 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ar/
2026-02-05 21:44:47 +00:00
ibs-allaow
f7c8723539
Translated using Weblate (Arabic)
Currently translated at 63.1% (96 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/ar/
2026-02-05 21:44:47 +00:00
Hosted Weblate
c313916771
Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2026-02-05 21:44:46 +00:00
Zexin Yuan
c372ba03dd
feat(dialog/export): export to clipboard 2025-12-10 18:12:11 +08:00
13 changed files with 2437 additions and 43 deletions

View File

@ -48,7 +48,10 @@
"prefix": "البادئة: ",
"save": "حفظ",
"help_on_tree_prefix": "مساعدة حول بادئة الشجرة",
"branch_prefix_saved": "تم حفظ بادئة الفرع."
"branch_prefix_saved": "تم حفظ بادئة الفرع.",
"edit_branch_prefix_multiple": "تعديل البادئة لـ {{count}} من تفرعات الملاحظات",
"branch_prefix_saved_multiple": "تم حفظ بادئة التفرع لـ {{count}} من التفرعات.",
"affected_branches": "الفروع المتأثرة ({{count}}):"
},
"bulk_actions": {
"bulk_actions": "اجراءات جماعية",

View File

@ -745,7 +745,7 @@
"button_title": "导出SVG格式图片"
},
"relation_map_buttons": {
"create_child_note_title": "创建新的子笔记并添加到关系图",
"create_child_note_title": "创建子笔记并添加到图",
"reset_pan_zoom_title": "重置平移和缩放到初始坐标和放大倍率",
"zoom_in_title": "放大",
"zoom_out_title": "缩小"
@ -759,7 +759,8 @@
"delete_this_note": "删除此笔记",
"error_cannot_get_branch_id": "无法获取 notePath '{{notePath}}' 的 branchId",
"error_unrecognized_command": "无法识别的命令 {{command}}",
"note_revisions": "笔记历史版本"
"note_revisions": "笔记历史版本",
"backlinks": "反链"
},
"note_icon": {
"change_note_icon": "更改笔记图标",

View File

@ -742,7 +742,7 @@
"button_title": "Diagramm als SVG exportieren"
},
"relation_map_buttons": {
"create_child_note_title": "Erstelle eine neue untergeordnete Notiz und füge sie dieser Beziehungskarte hinzu",
"create_child_note_title": "Erstelle eine untergeordnete Notiz und füge sie dieser Karte hinzu",
"reset_pan_zoom_title": "Schwenken und Zoomen auf die ursprünglichen Koordinaten und Vergrößerung zurücksetzen",
"zoom_in_title": "Hineinzoom",
"zoom_out_title": "Herauszoomen"
@ -757,7 +757,8 @@
"delete_this_note": "Diese Notiz löschen",
"error_cannot_get_branch_id": "BranchId für notePath „{{notePath}}“ kann nicht abgerufen werden",
"error_unrecognized_command": "Unbekannter Befehl {{command}}",
"note_revisions": "Notiz Revisionen"
"note_revisions": "Notiz Revisionen",
"backlinks": "Rücklinks"
},
"note_icon": {
"change_note_icon": "Notiz-Icon ändern",

View File

@ -111,6 +111,9 @@
"opml_version_1": "OPML v1.0 - plain text only",
"opml_version_2": "OPML v2.0 - allows also HTML",
"export_type_single": "Only this note without its descendants",
"export_to_clipboard": "Export to clipboard",
"export_to_clipboard_on_tooltip": "Export the note content to clipboard.",
"export_to_clipboard_off_tooltip": "Download the note as a file.",
"export": "Export",
"choose_export_type": "Choose export type first please",
"export_status": "Export status",

View File

@ -745,7 +745,7 @@
"button_title": "Exportar diagrama como SVG"
},
"relation_map_buttons": {
"create_child_note_title": "Crear una nueva subnota y agregarla a este mapa de relaciones",
"create_child_note_title": "Crear una subnota y agregarla al mapa",
"reset_pan_zoom_title": "Restablecer la panorámica y el zoom a las coordenadas y ampliación iniciales",
"zoom_in_title": "Acercar",
"zoom_out_title": "Alejar"
@ -754,14 +754,15 @@
"relation": "relación",
"backlink_one": "{{count}} Vínculo de retroceso",
"backlink_many": "{{count}} Vínculos de retroceso",
"backlink_other": "{{count}} vínculos de retroceso"
"backlink_other": "{{count}} Vínculos de retroceso"
},
"mobile_detail_menu": {
"insert_child_note": "Insertar subnota",
"delete_this_note": "Eliminar esta nota",
"error_cannot_get_branch_id": "No se puede obtener el branchID del notePath '{{notePath}}'",
"error_unrecognized_command": "Comando no reconocido {{command}}",
"note_revisions": "Revisiones de notas"
"note_revisions": "Revisiones de notas",
"backlinks": "Vínculos de retroceso"
},
"note_icon": {
"change_note_icon": "Cambiar icono de nota",

File diff suppressed because it is too large Load Diff

View File

@ -407,7 +407,7 @@
"relation_map_buttons": {
"zoom_out_title": "ズームアウト",
"zoom_in_title": "ズームイン",
"create_child_note_title": "新しい子ノートを作成し、関連マップに追加",
"create_child_note_title": "子ノートを作成し、マップに追加",
"reset_pan_zoom_title": "パンとズームを初期座標と倍率にリセット"
},
"tree-context-menu": {
@ -1648,7 +1648,8 @@
"error_unrecognized_command": "認識されないコマンド {{command}}",
"insert_child_note": "子ノートを挿入",
"error_cannot_get_branch_id": "ノートパス 「{{notePath}} のbranchIdを取得できません",
"note_revisions": "ノートの変更履歴"
"note_revisions": "ノートの変更履歴",
"backlinks": "バックリンク"
},
"inherited_attribute_list": {
"title": "継承属性",

View File

@ -757,7 +757,8 @@
"delete_this_note": "刪除此筆記",
"error_cannot_get_branch_id": "無法獲取 notePath '{{notePath}}' 的 branchId",
"error_unrecognized_command": "無法識別的命令 {{command}}",
"note_revisions": "筆記歷史版本"
"note_revisions": "筆記歷史版本",
"backlinks": "反向連結"
},
"note_icon": {
"change_note_icon": "更改筆記圖標",
@ -1939,8 +1940,8 @@
"desktop-application": "桌面版應用程式",
"native-title-bar": "原生標題列",
"native-title-bar-description": "對於 Windows 和 macOS關閉原生標題列會讓應用程式看起來更緊湊。在 Linux 上,開啟原生標題列可以與系統的其他部分整合得更好。",
"background-effects": "啟用背景效果(僅適用於 Windows 11",
"background-effects-description": "Mica 效果為程式視窗新增模糊且時尚的背景,營造出深度感和現代化外觀。「原生標題列」必須被禁用。",
"background-effects": "啟用背景效果",
"background-effects-description": "為程式視窗新增模糊且時尚的背景,營造立體感和現代化外觀。「原生標題列」必須被禁用。",
"restart-app-button": "重新啟動應用程式以查看更改",
"zoom-factor": "縮放係數"
},
@ -1959,7 +1960,8 @@
"geo-map": {
"create-child-note-title": "建立一個新的子筆記並將其加至地圖中",
"create-child-note-instruction": "點擊地圖以在該位置建立新筆記,或按 Escape 以取消。",
"unable-to-load-map": "無法載入地圖。"
"unable-to-load-map": "無法載入地圖。",
"create-child-note-text": "新增地圖標記"
},
"geo-map-context": {
"open-location": "打開位置",
@ -2122,7 +2124,7 @@
},
"call_to_action": {
"background_effects_title": "背景特效已推出穩定版本",
"background_effects_message": "在 Windows 裝置上,背景特效現在已完全穩定。背景特效透過模糊背後的背景,為使用者介面增添一抹色彩。此技術也用於其他應用程式,例如 Windows 檔案總管。",
"background_effects_message": "在 Windows 和macOS裝置上,背景特效現在已穩定。背景特效透過模糊背後的背景,為使用者介面增添一抹色彩。",
"background_effects_button": "啟用背景特效",
"next_theme_title": "試用新 Trilium 主題",
"next_theme_message": "您正在使用舊版主題,要試用新主題嗎?",
@ -2267,5 +2269,12 @@
"pages_other": "",
"pages_alt": "第 {{pageNumber}} 頁",
"pages_loading": "正在載入…"
},
"mobile_tab_switcher": {
"more_options": "更多選項",
"title_one": "{{count}} 個分頁"
},
"platform_indicator": {
"available_on": "可於 {{platform}} 使用"
}
}

View File

@ -13,4 +13,8 @@
.export-dialog form .form-check-label {
padding: 2px;
}
}
.export-dialog form .export-single-formats .switch-widget {
margin-top: 10px;
}

View File

@ -1,8 +1,10 @@
import { useState } from "preact/hooks";
import { t } from "../../services/i18n";
import tree from "../../services/tree";
import { copyTextWithToast } from "../../services/clipboard_ext.js";
import Button from "../react/Button";
import FormRadioGroup from "../react/FormRadioGroup";
import FormToggle from "../react/FormToggle";
import Modal from "../react/Modal";
import "./export.css";
import ws from "../../services/ws";
@ -21,10 +23,12 @@ interface ExportDialogProps {
export default function ExportDialog() {
const [ opts, setOpts ] = useState<ExportDialogProps>();
const [ exportType, setExportType ] = useState<string>(opts?.defaultType ?? "subtree");
const [ exportToClipboard, setExportToClipboard ] = useState(false);
const [ subtreeFormat, setSubtreeFormat ] = useState("html");
const [ singleFormat, setSingleFormat ] = useState("html");
const [ opmlVersion, setOpmlVersion ] = useState("2.0");
const [ shown, setShown ] = useState(false);
const [ exporting, setExporting ] = useState(false);
useTriliumEvent("showExportDialog", async ({ notePath, defaultType }) => {
const { noteId, parentNoteId } = tree.getNoteIdAndParentIdFromUrl(notePath);
@ -47,18 +51,20 @@ export default function ExportDialog() {
className="export-dialog"
title={`${t("export.export_note_title")} ${opts?.noteTitle ?? ""}`}
size="lg"
onSubmit={() => {
onSubmit={async () => {
if (!opts || !opts.branchId) {
return;
}
const format = (exportType === "subtree" ? subtreeFormat : singleFormat);
const version = (format === "opml" ? opmlVersion : "1.0");
exportBranch(opts.branchId, exportType, format, version);
setExporting(true);
await exportBranch(opts.branchId, exportType, format, version, exportToClipboard);
setExporting(false);
setShown(false);
}}
onHidden={() => setShown(false)}
footer={<Button className="export-button" text={t("export.export")} primary />}
footer={<Button className="export-button" text={t("export.export")} primary disabled={exporting} />}
show={shown}
>
@ -118,6 +124,12 @@ export default function ExportDialog() {
{ value: "markdown", label: t("export.format_markdown") }
]}
/>
<FormToggle
switchOnName={t("export.export_to_clipboard")} switchOnTooltip={t("export.export_to_clipboard_on_tooltip")}
switchOffName={t("export.export_to_clipboard")} switchOffTooltip={t("export.export_to_clipboard_off_tooltip")}
currentValue={exportToClipboard} onChange={setExportToClipboard}
/>
</div>
}
@ -125,10 +137,37 @@ export default function ExportDialog() {
);
}
function exportBranch(branchId: string, type: string, format: string, version: string) {
async function exportBranch(branchId: string, type: string, format: string, version: string, exportToClipboard: boolean) {
const taskId = utils.randomString(10);
const url = open.getUrlForDownload(`api/branches/${branchId}/export/${type}/${format}/${version}/${taskId}`);
open.download(url);
if (type === "single" && exportToClipboard) {
await exportSingleToClipboard(url);
} else {
open.download(url);
}
}
async function exportSingleToClipboard(url: string) {
try {
const res = await fetch(url);
if (!res.ok) {
throw new Error(`${res.status} ${res.statusText}`);
}
const blob = await res.blob();
// Try reading as text (HTML/Markdown are text); if that fails, fall back to ArrayBuffer->UTF-8
let text: string;
try {
text = await blob.text();
} catch {
const ab = await blob.arrayBuffer();
text = new TextDecoder("utf-8").decode(new Uint8Array(ab));
}
await copyTextWithToast(text);
} catch (error) {
console.error("Failed to copy exported note to clipboard:", error);
}
}
ws.subscribeToMessages(async (message) => {

View File

@ -356,7 +356,8 @@
"localization": "語言和區域",
"inbox-title": "收件匣",
"command-palette": "打開命令面板",
"zen-mode": "禪模式"
"zen-mode": "禪模式",
"tab-switcher-title": "切換分頁"
},
"notes": {
"new-note": "新增筆記",

View File

@ -46,7 +46,8 @@
"sync_content": "استخدم نسخة مستضافة ذاتيًا أو نسخة سحابية لمزامنة ملاحظاتك بسهولة عبر أجهزة متعددة، وللوصول إليها من هاتفك المحمول باستخدام تطبيق ويب تقدمي (PWA).",
"protected_notes_content": "احمِ معلوماتك الشخصية الحساسة عبر تشفير الملاحظات وقفلها خلف جلسة محمية بكلمة مرور.",
"jump_to_content": "انتقل بسرعة إلى الملاحظات أو أوامر واجهة المستخدم عبر التسلسل الهرمي من خلال البحث عن عناوينها، مع ميزة المطابقة التقريبية لتجاوز الأخطاء الإملائية أو الاختلافات البسيطة.",
"search_content": "أو ابحث عن نص داخل الملاحظات وضيّق نطاق البحث عبر التصفية حسب الملاحظة الرئيسية، أو حسب مستوى التفرع."
"search_content": "أو ابحث عن نص داخل الملاحظات وضيّق نطاق البحث عبر التصفية حسب الملاحظة الرئيسية، أو حسب مستوى التفرع.",
"web_clipper_content": "اقتبس صفحات الويب (أو لقطات الشاشة) وضعها مباشرة في Trilium باستخدام إضافة المتصفح مقص الشبكة (Web Clipper)."
},
"note_types": {
"canvas_title": "مساحة العمل",
@ -54,7 +55,11 @@
"text_title": "ملاحظات النص",
"code_title": "ملاحظات الكود",
"file_title": "ملاحظات الملف",
"mermaid_title": "مخططات Mermaid"
"mermaid_title": "مخططات Mermaid",
"title": "طرق متعددة لعرض معلوماتك",
"text_description": "يتم تحرير الملاحظات باستخدام محرر مرئي (WYSIWYG)، مع دعم للجداول، والصور، والعبارات الرياضية، وكتل التعليمات البرمجية مع تمييز بناء الجملة. يمكنك تنسيق النص بسرعة باستخدام قواعد \"Markdown\" أو عبر أوامر الشرطة المائلة (slash commands).",
"code_description": "تستخدم العينات الكبيرة من التعليمات البرمجية أو النصوص البرمجية (Scripts) محررًا مخصصًا، مع تمييز الصيغة للعديد من لغات البرمجة وبسمات ألوان متنوعة.",
"file_description": "تضمين ملفات الوسائط المتعددة مثل ملفات PDF والصور ومقاطع الفيديو مع ميزة المعاينة داخل التطبيق."
},
"extensibility_benefits": {
"import_export_title": "استيراد/تصدير",

41
docs/README-ar.md vendored
View File

@ -93,24 +93,29 @@ script)](./README-ZH_TW.md) | [English](../README.md) | [French](./README-fr.md)
أكثر أماناً
* [المزامنة](https://docs.triliumnotes.org/user-guide/setup/synchronization) مع
خادم مزامنة مُستضاف ذاتيًا
* there are [3rd party services for hosting synchronisation
server](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting)
* [Sharing](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing)
(publishing) notes to public internet
* Strong [note
encryption](https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes)
with per-note granularity
* Sketching diagrams, based on [Excalidraw](https://excalidraw.com/) (note type
"canvas")
* [Relation
maps](https://docs.triliumnotes.org/user-guide/note-types/relation-map) and
[note/link maps](https://docs.triliumnotes.org/user-guide/note-types/note-map)
for visualizing notes and their relations
* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
* [Geo maps](https://docs.triliumnotes.org/user-guide/collections/geomap) with
location pins and GPX tracks
* [Scripting](https://docs.triliumnotes.org/user-guide/scripts) - see [Advanced
showcases](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases)
* توجد [خدمات خارجية لاستضافة خادم
المزامنة](https://docs.triliumnotes.org/user-guide/setup/server/cloud-hosting)
* [مشاركة](https://docs.triliumnotes.org/user-guide/advanced-usage/sharing)
الملاحظات (نشرها) على شبكة الإنترنت العامة
* [تشفير الملاحظات]
(https://docs.triliumnotes.org/user-guide/concepts/notes/protected-notes)
تشفير قوي مع إمكانية التحكم بكل ملاحظة على حدة
* رسم المخططات، بالاعتماد على إكسكاليدرا [Excalidraw](https://excalidraw.com/)
(نوع الملاحظة "لوحة رسم")
* [خرائط
العلاقات](https://docs.triliumnotes.org/user-guide/note-types/relation-map)
و[خرائط الملاحظات
والروابط](https://docs.triliumnotes.org/user-guide/note-types/note-map) لتصور
الملاحظات وارتباطاتها بصرياً
* الخرائط الذهنية، بالاعتماد على مايند إليكسر [Mind
Elixir](https://docs.mind-elixir.com/)
* "[الخرائط
الجغرافية](https://docs.triliumnotes.org/user-guide/collections/geomap) مع
دبابيس الموقع ومسارات GPX (GPX = تنسيق تبادل بيانات نظام تحديد المواقع
العالمي)
* [البرمجة النصية](https://docs.triliumnotes.org/user-guide/scripts) - راجع
[نماذج العرض
المتقدمة](https://docs.triliumnotes.org/user-guide/advanced-usage/advanced-showcases)
* [واجهة REST
API](https://docs.triliumnotes.org/user-guide/advanced-usage/etapi) للأتمتة
* Scales well in both usability and performance upwards of 100 000 notes