mirror of
https://github.com/zadam/trilium.git
synced 2025-10-26 15:56:29 +01:00
Compare commits
106 Commits
feat/rice-
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d534db29c9 | ||
|
|
40edd42740 | ||
|
|
d2c7011735 | ||
|
|
a050d1741b | ||
|
|
18982865da | ||
|
|
3aa810fed7 | ||
|
|
c5ecc22c67 | ||
|
|
252f8ccb1f | ||
|
|
e1bb704383 | ||
|
|
dce0d9400b | ||
|
|
615c783fe3 | ||
|
|
f29411baf7 | ||
|
|
be5e70130c | ||
|
|
9ba1e9d732 | ||
|
|
e1dc4d1433 | ||
|
|
d0d268496c | ||
|
|
8a6950c945 | ||
|
|
477592d176 | ||
|
|
7e5c2ed79d | ||
|
|
bc580f2a88 | ||
|
|
71cd92e0b5 | ||
|
|
a4d92e12be | ||
|
|
c40279b480 | ||
|
|
4c7e7c157c | ||
|
|
c08386450a | ||
|
|
eb93762ecc | ||
|
|
2697f9a25d | ||
|
|
9515e2099b | ||
|
|
966c08da87 | ||
|
|
ea04446e81 | ||
|
|
e4f806ed14 | ||
|
|
49cf7ae1a3 | ||
|
|
1a6f5a027f | ||
|
|
f4796f0f9e | ||
|
|
30480b2c23 | ||
|
|
b7b1d17817 | ||
|
|
c4e5494c14 | ||
|
|
b0f63c02c9 | ||
|
|
2480509811 | ||
|
|
7872193ed0 | ||
|
|
14e06c4555 | ||
|
|
b8e17959ae | ||
|
|
c16a135efc | ||
|
|
cbc756ba06 | ||
|
|
64daeb0826 | ||
|
|
e15839db47 | ||
|
|
dcdffed003 | ||
|
|
48e85fad43 | ||
|
|
189071deb8 | ||
|
|
354f1d65c1 | ||
|
|
b78893b106 | ||
|
|
9310315c6a | ||
|
|
1794f8546d | ||
|
|
b3bc0572e5 | ||
|
|
253ce1f223 | ||
|
|
2f3bf94b47 | ||
|
|
d802caa03b | ||
|
|
e69751a8b3 | ||
|
|
0760ea22fb | ||
|
|
8a8f407e99 | ||
|
|
e030dd96da | ||
|
|
01abfc2528 | ||
|
|
042b929dc5 | ||
|
|
ab1d5e31fb | ||
|
|
d073e4c37f | ||
|
|
d60d965a42 | ||
|
|
1c87cfbbd9 | ||
|
|
fee333512a | ||
|
|
38a3f46506 | ||
|
|
bf7506fcd8 | ||
|
|
6fbba426de | ||
|
|
d5bdec13b5 | ||
|
|
cc1b6eb42d | ||
|
|
8baf496f96 | ||
|
|
23a20c4490 | ||
|
|
c8b98f2db6 | ||
|
|
3f36f515db | ||
|
|
892eb5b95d | ||
|
|
62a69a0da0 | ||
|
|
3588e38543 | ||
|
|
41450ab85a | ||
|
|
0526d99560 | ||
|
|
557d576b85 | ||
|
|
041c961cfa | ||
|
|
dcc35bd507 | ||
|
|
09c3e5b56e | ||
|
|
950793377d | ||
|
|
7dac61dc26 | ||
|
|
42dcb8f141 | ||
|
|
43dc8a4b87 | ||
|
|
35316a4c45 | ||
|
|
1366489f99 | ||
|
|
31ee78b1aa | ||
|
|
808ba75ee0 | ||
|
|
ac1399a139 | ||
|
|
1e4793351a | ||
|
|
f502fe41c7 | ||
|
|
0ec0091357 | ||
|
|
0e2196f872 | ||
|
|
32dee254cd | ||
|
|
d4a6a297f4 | ||
|
|
a64d8cd8e2 | ||
|
|
bf4cfb9c02 | ||
|
|
a99dfecf43 | ||
|
|
1530d96eca | ||
|
|
5dc066f4c6 |
8
.github/workflows/main-docker.yml
vendored
8
.github/workflows/main-docker.yml
vendored
@@ -86,12 +86,12 @@ jobs:
|
||||
|
||||
- name: Upload Playwright trace
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: Playwright trace (${{ matrix.dockerfile }})
|
||||
path: test-output/playwright/output
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
- uses: actions/upload-artifact@v5
|
||||
if: ${{ !cancelled() }}
|
||||
with:
|
||||
name: Playwright report (${{ matrix.dockerfile }})
|
||||
@@ -209,7 +209,7 @@ jobs:
|
||||
touch "/tmp/digests/${digest#sha256:}"
|
||||
|
||||
- name: Upload digest
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: digests-${{ env.PLATFORM_PAIR }}-${{ matrix.dockerfile }}
|
||||
path: /tmp/digests/*
|
||||
@@ -223,7 +223,7 @@ jobs:
|
||||
- build
|
||||
steps:
|
||||
- name: Download digests
|
||||
uses: actions/download-artifact@v5
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
path: /tmp/digests
|
||||
pattern: digests-*
|
||||
|
||||
2
.github/workflows/nightly.yml
vendored
2
.github/workflows/nightly.yml
vendored
@@ -89,7 +89,7 @@ jobs:
|
||||
name: Nightly Build
|
||||
|
||||
- name: Publish artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
if: ${{ github.event_name == 'pull_request' }}
|
||||
with:
|
||||
name: TriliumNotes ${{ matrix.os.name }} ${{ matrix.arch }}
|
||||
|
||||
2
.github/workflows/playwright.yml
vendored
2
.github/workflows/playwright.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
|
||||
- name: Upload test report
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: e2e report
|
||||
path: apps/server-e2e/test-output
|
||||
|
||||
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@@ -73,7 +73,7 @@ jobs:
|
||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
||||
|
||||
- name: Upload the artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: release-desktop-${{ matrix.os.name }}-${{ matrix.arch }}
|
||||
path: apps/desktop/upload/*.*
|
||||
@@ -100,7 +100,7 @@ jobs:
|
||||
arch: ${{ matrix.arch }}
|
||||
|
||||
- name: Upload the artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: release-server-linux-${{ matrix.arch }}
|
||||
path: upload/*.*
|
||||
@@ -120,7 +120,7 @@ jobs:
|
||||
docs/Release Notes
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v5
|
||||
uses: actions/download-artifact@v6
|
||||
with:
|
||||
merge-multiple: true
|
||||
pattern: release-*
|
||||
|
||||
@@ -37,9 +37,9 @@
|
||||
"devDependencies": {
|
||||
"@playwright/test": "1.56.1",
|
||||
"@stylistic/eslint-plugin": "5.5.0",
|
||||
"@types/express": "5.0.3",
|
||||
"@types/express": "5.0.4",
|
||||
"@types/node": "22.18.12",
|
||||
"@types/yargs": "17.0.33",
|
||||
"@types/yargs": "17.0.34",
|
||||
"@vitest/coverage-v8": "3.2.4",
|
||||
"eslint": "9.38.0",
|
||||
"eslint-plugin-simple-import-sort": "12.1.1",
|
||||
|
||||
@@ -55,11 +55,11 @@
|
||||
"mark.js": "8.11.1",
|
||||
"marked": "16.4.1",
|
||||
"mermaid": "11.12.0",
|
||||
"mind-elixir": "5.3.3",
|
||||
"mind-elixir": "5.3.4",
|
||||
"normalize.css": "8.0.1",
|
||||
"panzoom": "9.4.3",
|
||||
"preact": "10.27.2",
|
||||
"react-i18next": "16.1.2",
|
||||
"react-i18next": "16.2.0",
|
||||
"reveal.js": "5.2.1",
|
||||
"svg-pan-zoom": "3.6.2",
|
||||
"tabulator-tables": "6.3.1",
|
||||
@@ -74,9 +74,9 @@
|
||||
"@types/leaflet-gpx": "1.3.8",
|
||||
"@types/mark.js": "8.11.12",
|
||||
"@types/reveal.js": "5.2.1",
|
||||
"@types/tabulator-tables": "6.2.11",
|
||||
"@types/tabulator-tables": "6.3.0",
|
||||
"copy-webpack-plugin": "13.0.1",
|
||||
"happy-dom": "20.0.7",
|
||||
"happy-dom": "20.0.8",
|
||||
"script-loader": "0.7.2",
|
||||
"vite-plugin-static-copy": "3.1.4"
|
||||
}
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
"title": "خطأ فادح"
|
||||
},
|
||||
"widget-error": {
|
||||
"title": "فشل في البدء بعنصر الواجهة"
|
||||
}
|
||||
},
|
||||
"add_link": {
|
||||
@@ -26,7 +29,8 @@
|
||||
"edit_branch_prefix": "تعديل بادئة الفرع",
|
||||
"prefix": "البادئة: ",
|
||||
"save": "حفظ",
|
||||
"help_on_tree_prefix": "مساعدة حول بادئة الشجرة"
|
||||
"help_on_tree_prefix": "مساعدة حول بادئة الشجرة",
|
||||
"branch_prefix_saved": "تم حفظ بادئة الفرع."
|
||||
},
|
||||
"bulk_actions": {
|
||||
"bulk_actions": "اجراءات جماعية",
|
||||
@@ -83,7 +87,8 @@
|
||||
"workspace_calendar_root": "تحديد جذر التقويم لكل مساحة عمل",
|
||||
"hide_highlight_widget": "اخفاء عنصر واجهة قائمة التمييزات",
|
||||
"is_owned_by_note": "تخص الملاحظة",
|
||||
"and_more": "... و {{count}}مرات اكثر."
|
||||
"and_more": "... و {{count}}مرات اكثر.",
|
||||
"related_notes_title": "ملاحظات اخرى بنفس التسمية"
|
||||
},
|
||||
"rename_label": {
|
||||
"to": "الى",
|
||||
@@ -127,7 +132,9 @@
|
||||
"delete_attachment": "حذف المرفق",
|
||||
"upload_new_revision": "رفع مراجعة جديدة",
|
||||
"copy_link_to_clipboard": "نسخ الرابط الى الحافظة",
|
||||
"convert_attachment_into_note": "تحويل المرفق الى ملاحظة"
|
||||
"convert_attachment_into_note": "تحويل المرفق الى ملاحظة",
|
||||
"delete_success": "تم حذف المرفق \"{{title}}\" .",
|
||||
"enter_new_name": "ادخل اسم مرفق جديد"
|
||||
},
|
||||
"calendar": {
|
||||
"week": "أسبوع",
|
||||
@@ -259,7 +266,8 @@
|
||||
"note_paths": {
|
||||
"search": "بحث",
|
||||
"archived": "مؤرشف",
|
||||
"title": "مسارات الملاحظة"
|
||||
"title": "مسارات الملاحظة",
|
||||
"clone_button": "جار نسخ الملاحظة الى مكان جديد..."
|
||||
},
|
||||
"script_executor": {
|
||||
"query": "استعلام",
|
||||
@@ -372,7 +380,8 @@
|
||||
"export_note_title": "تصدير الملاحظة",
|
||||
"export_status": "حالة التصدير",
|
||||
"export_finished_successfully": "اكتمل التصدير بنجاح.",
|
||||
"export_in_progress": "جار التصدير: {{progressCount}}"
|
||||
"export_in_progress": "جار التصدير: {{progressCount}}",
|
||||
"choose_export_type": "اختر نوع التصدير اولا من فضلك"
|
||||
},
|
||||
"help": {
|
||||
"troubleshooting": "أستكشاف الاخطاء واصلاحها",
|
||||
@@ -402,7 +411,10 @@
|
||||
"movingCloningNotes": "نقل/ استنساخ الملاحظات",
|
||||
"deleteNotes": "حذف الملاحظة/ الشجرة الفرعية",
|
||||
"collapseWholeTree": "طي شجرة الملاحظة باكملها",
|
||||
"followLink": "اتبع تلرابط تحت المؤشر"
|
||||
"followLink": "اتبع تلرابط تحت المؤشر",
|
||||
"onlyInDesktop": "في سطح المكتب فقط(Electron build)",
|
||||
"createEditLink": "انشاء/ تحرير رابط خارجي",
|
||||
"quickSearch": "الانتقال الى مربع البحث السريع"
|
||||
},
|
||||
"import": {
|
||||
"options": "خيارات",
|
||||
@@ -465,7 +477,13 @@
|
||||
"delete_all_button": "حذف كل المراجعات",
|
||||
"settings": "اعدادات مراجعة الملاحظة",
|
||||
"diff_not_available": "المقارنة غير متوفرة.",
|
||||
"help_title": "مساعدة حول مراجعات الملاحظة"
|
||||
"help_title": "مساعدة حول مراجعات الملاحظة",
|
||||
"diff_off_hint": "انقر لعرض محتويات الملاحظة",
|
||||
"revisions_deleted": "تم حذف جميع نسخ المراجعات للملاحظة.",
|
||||
"revision_restored": "تم استعادة نسخ المراجعة للملاحظة.",
|
||||
"revision_deleted": "تم حذف مراجعة الملاحظة.",
|
||||
"snapshot_interval": "فاصل زمني لحفظ لقطات اصدارات المراجعة: {{seconds}}",
|
||||
"maximum_revisions": "حد عدد لقطات اصدارات الملاحظة: {{number}}"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"title": "عنوان",
|
||||
@@ -479,13 +497,15 @@
|
||||
"sorting_direction": "اتجاه الترتيب",
|
||||
"natural_sort": "الترتيب الطبيعي",
|
||||
"natural_sort_language": "لغات الترتيب الطبيعي",
|
||||
"sort_children_by": "ترتيب العناصر الفرعية حسب..."
|
||||
"sort_children_by": "ترتيب العناصر الفرعية حسب...",
|
||||
"sort_folders_at_top": "ترتيب المجلدات في الاعلى"
|
||||
},
|
||||
"recent_changes": {
|
||||
"undelete_link": "الغاء الحذف",
|
||||
"title": "التغيرات الاخيرة",
|
||||
"no_changes_message": "لايوجد تغيير لحد الان...",
|
||||
"erase_notes_button": "مسح الملاحظات المحذوفة الان"
|
||||
"erase_notes_button": "مسح الملاحظات المحذوفة الان",
|
||||
"deleted_notes_message": "تم حذف الملاحظات نهائيا."
|
||||
},
|
||||
"edited_notes": {
|
||||
"deleted": "(حذف)",
|
||||
@@ -705,7 +725,9 @@
|
||||
"default_token_name": "رمز جديد",
|
||||
"rename_token_title": "اعادة تسمية الرمز",
|
||||
"rename_token": "اعادة تسمية هذا الرمز",
|
||||
"create_token": "انشاء رمز PEAPI جديد"
|
||||
"create_token": "انشاء رمز PEAPI جديد",
|
||||
"new_token_title": "رمز ETAPI جديد",
|
||||
"token_created_title": "انشاء رمز ETAPI"
|
||||
},
|
||||
"password": {
|
||||
"heading": "كلمة المرور",
|
||||
@@ -811,7 +833,8 @@
|
||||
"help_on_links": "مساعدة حول الارتباطات التشعبية",
|
||||
"notes_to_clone": "ملاحظات للنسخ",
|
||||
"target_parent_note": "الملاحظة الاصلية الهدف",
|
||||
"clone_to_selected_note": "استنساخ الى الملاحظة المحددة"
|
||||
"clone_to_selected_note": "استنساخ الى الملاحظة المحددة",
|
||||
"no_path_to_clone_to": "لايوجد مسار لنسخ المحتوى الية."
|
||||
},
|
||||
"table_of_contents": {
|
||||
"unit": "عناوين",
|
||||
@@ -1029,7 +1052,8 @@
|
||||
},
|
||||
"delete_note": {
|
||||
"delete_note": "حذف الملاحظة",
|
||||
"delete_matched_notes": "حف الملاحظات المطابقة"
|
||||
"delete_matched_notes": "حف الملاحظات المطابقة",
|
||||
"delete_matched_notes_description": "سوف يؤدي هذا الى حذف الملاحظات المطابقة."
|
||||
},
|
||||
"rename_note": {
|
||||
"rename_note": "اعادة تسمية الملاحظة",
|
||||
@@ -1312,7 +1336,8 @@
|
||||
"notes_to_move": "الملاحظات المراد نقلها",
|
||||
"target_parent_note": "ملاحظة الاصل الهدف",
|
||||
"dialog_title": "انقل الملاحظات الى...",
|
||||
"move_button": "نقل الىالملاحظة المحددة"
|
||||
"move_button": "نقل الىالملاحظة المحددة",
|
||||
"error_no_path": "لايوجد مسار لنقل العنصر الية."
|
||||
},
|
||||
"delete_revisions": {
|
||||
"delete_note_revisions": "حذف مراجعات الملاحظة"
|
||||
@@ -1363,7 +1388,8 @@
|
||||
"save_attributes": "حفظ السمات <enter>",
|
||||
"add_a_new_attribute": "اضافة سمة جديدة",
|
||||
"add_new_label_definition": "اضافة تعريف لتسمية جديدة",
|
||||
"add_new_relation_definition": "اضافة تعريف لعلاقة جديدة"
|
||||
"add_new_relation_definition": "اضافة تعريف لعلاقة جديدة",
|
||||
"add_new_relation": "اضافة علاقة جديدة <kbd data-command=\"addNewRelation\">"
|
||||
},
|
||||
"zen_mode": {
|
||||
"button_exit": "الخروج من وضع Zen"
|
||||
@@ -1434,5 +1460,8 @@
|
||||
},
|
||||
"png_export_button": {
|
||||
"button_title": "تصدير المخطط كملف PNG"
|
||||
},
|
||||
"protected_session_status": {
|
||||
"inactive": "انقر للدخول الى جلسة محمية"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -184,7 +184,8 @@
|
||||
},
|
||||
"import-status": "Importstatus",
|
||||
"in-progress": "Import läuft: {{progress}}",
|
||||
"successful": "Import erfolgreich abgeschlossen."
|
||||
"successful": "Import erfolgreich abgeschlossen.",
|
||||
"importZipRecommendation": "Beim Import einer ZIP-Datei wird die Notizhierarchie aus der Ordnerstruktur im Archiv übernommen."
|
||||
},
|
||||
"include_note": {
|
||||
"dialog_title": "Notiz beifügen",
|
||||
@@ -647,7 +648,8 @@
|
||||
"logout": "Abmelden",
|
||||
"show-cheatsheet": "Cheatsheet anzeigen",
|
||||
"toggle-zen-mode": "Zen Modus",
|
||||
"new-version-available": "Neues Update verfügbar"
|
||||
"new-version-available": "Neues Update verfügbar",
|
||||
"download-update": "Version {{latestVersion}} herunterladen"
|
||||
},
|
||||
"sync_status": {
|
||||
"unknown": "<p>Der Synchronisations-Status wird bekannt, sobald der nächste Synchronisierungsversuch gestartet wird.</p><p>Klicke, um eine Synchronisierung jetzt auszulösen.</p>",
|
||||
@@ -1521,7 +1523,9 @@
|
||||
"window-on-top": "Dieses Fenster immer oben halten"
|
||||
},
|
||||
"note_detail": {
|
||||
"could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden"
|
||||
"could_not_find_typewidget": "Konnte typeWidget für Typ ‚{{type}}‘ nicht finden",
|
||||
"printing": "Druckvorgang läuft…",
|
||||
"printing_pdf": "PDF-Export läuft…"
|
||||
},
|
||||
"note_title": {
|
||||
"placeholder": "Titel der Notiz hier eingeben…"
|
||||
@@ -2079,6 +2083,7 @@
|
||||
},
|
||||
"presentation_view": {
|
||||
"edit-slide": "Folie bearbeiten",
|
||||
"start-presentation": "Präsentation starten"
|
||||
"start-presentation": "Präsentation starten",
|
||||
"slide-overview": "Übersicht der Folien ein-/ausblenden"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1,50 @@
|
||||
{}
|
||||
{
|
||||
"about": {
|
||||
"title": "A Trilium Notes-ról",
|
||||
"homepage": "Kezdőlap:",
|
||||
"app_version": "Alkalmazás verziója:",
|
||||
"db_version": "Adatbázis verzió:",
|
||||
"sync_version": "Verzió szinkronizálás :",
|
||||
"build_revision": "Build revízió:",
|
||||
"data_directory": "Adatkönyvtár:",
|
||||
"build_date": "Build dátum:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
"title": "Kritikus hiba",
|
||||
"message": "Kritikus hiba történt, amely megakadályozza a kliensalkalmazás indítását:\n\n{{message}}\n\nEzt valószínűleg egy váratlan szkripthiba okozza. Próbálja meg biztonságos módban elindítani az alkalmazást, és hárítsa el a problémát."
|
||||
},
|
||||
"widget-error": {
|
||||
"title": "Nem sikerült inicializálni egy widgetet",
|
||||
"message-custom": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó egyéni widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}",
|
||||
"message-unknown": "Ismeretlen widget inicializálása sikertelen volt a következő ok miatt:\n\n{{message}}"
|
||||
},
|
||||
"bundle-error": {
|
||||
"title": "Nem sikerült betölteni az egyéni szkriptet",
|
||||
"message": "A(z) \"{{id}}\" azonosítójú, \"{{title}}\" című jegyzetből származó szkript nem hajtható végre a következő ok miatt:\n\n{{message}}"
|
||||
}
|
||||
},
|
||||
"add_link": {
|
||||
"add_link": "Link hozzáadása",
|
||||
"help_on_links": "Segítség a linkekhez",
|
||||
"note": "Jegyzet",
|
||||
"search_note": "név szerinti jegyzetkeresés",
|
||||
"link_title_mirrors": "A link cím tükrözi a jegyzet aktuális címét",
|
||||
"link_title_arbitrary": "link cím önkényesen módosítható",
|
||||
"link_title": "Link cím",
|
||||
"button_add_link": "Link hozzáadása"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"edit_branch_prefix": "Az elágazás előtagjának szerkesztése",
|
||||
"help_on_tree_prefix": "Segítség a fa előtagján",
|
||||
"prefix": "Az előtag: ",
|
||||
"save": "Mentés"
|
||||
},
|
||||
"bulk_actions": {
|
||||
"bulk_actions": "Tömeges akciók",
|
||||
"affected_notes": "Érintett jegyzetek",
|
||||
"labels": "Címkék",
|
||||
"relations": "Kapcsolatok",
|
||||
"notes": "Jegyzetek"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,7 +320,8 @@
|
||||
"explodeArchivesTooltip": "Если этот флажок установлен, Trilium будет читать файлы <code>.zip</code>, <code>.enex</code> и <code>.opml</code> и создавать заметки из файлов внутри этих архивов. Если флажок не установлен, Trilium будет прикреплять сами архивы к заметке.",
|
||||
"explodeArchives": "Прочитать содержимое архивов <code>.zip</code>, <code>.enex</code> и <code>.opml</code>.",
|
||||
"shrinkImagesTooltip": "<p>Если этот параметр включен, Trilium попытается уменьшить размер импортируемых изображений путём масштабирования и оптимизации, что может повлиять на воспринимаемое качество изображения. Если этот параметр не установлен, изображения будут импортированы без изменений.</p><p>Это не относится к импорту файлов <code>.zip</code> с метаданными, поскольку предполагается, что эти файлы уже оптимизированы.</p>",
|
||||
"codeImportedAsCode": "Импортировать распознанные файлы кода (например, <code>.json</code>) в виде заметок типа \"код\", если это неясно из метаданных"
|
||||
"codeImportedAsCode": "Импортировать распознанные файлы кода (например, <code>.json</code>) в виде заметок типа \"код\", если это неясно из метаданных",
|
||||
"importZipRecommendation": "При импорте ZIP файла иерархия заметок будет отражена в структуре папок внутри архива."
|
||||
},
|
||||
"markdown_import": {
|
||||
"dialog_title": "Импорт Markdown",
|
||||
@@ -980,7 +981,8 @@
|
||||
"open_sql_console_history": "Открыть историю консоли SQL",
|
||||
"show_shared_notes_subtree": "Поддерево общедоступных заметок",
|
||||
"switch_to_mobile_version": "Перейти на мобильную версию",
|
||||
"switch_to_desktop_version": "Переключиться на версию для ПК"
|
||||
"switch_to_desktop_version": "Переключиться на версию для ПК",
|
||||
"new-version-available": "Доступно обновление"
|
||||
},
|
||||
"zpetne_odkazy": {
|
||||
"backlink": "{{count}} ссылки",
|
||||
|
||||
@@ -147,6 +147,12 @@ const categories: Category[] = [
|
||||
];
|
||||
|
||||
const icons: Icon[] = [
|
||||
{
|
||||
name: "empty",
|
||||
slug: "empty",
|
||||
category_id: 113,
|
||||
type_of_icon: "REGULAR"
|
||||
},
|
||||
{
|
||||
name: "child",
|
||||
slug: "child-regular",
|
||||
|
||||
@@ -56,4 +56,16 @@
|
||||
|
||||
.note-icon-widget .icon-list span:hover {
|
||||
border: 1px solid var(--main-border-color);
|
||||
}
|
||||
|
||||
.note-icon-widget .icon-list span.bx-empty {
|
||||
width: unset;
|
||||
}
|
||||
|
||||
.note-icon-widget .icon-list span.bx-empty::before {
|
||||
display: inline-block;
|
||||
content: "";
|
||||
border: 1px dashed var(--muted-text-color);
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
}
|
||||
@@ -35,7 +35,7 @@
|
||||
"@triliumnext/commons": "workspace:*",
|
||||
"@triliumnext/server": "workspace:*",
|
||||
"copy-webpack-plugin": "13.0.1",
|
||||
"electron": "38.3.0",
|
||||
"electron": "38.4.0",
|
||||
"@electron-forge/cli": "7.10.2",
|
||||
"@electron-forge/maker-deb": "7.10.2",
|
||||
"@electron-forge/maker-dmg": "7.10.2",
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
"devDependencies": {
|
||||
"@types/better-sqlite3": "7.6.13",
|
||||
"@types/mime-types": "3.0.1",
|
||||
"@types/yargs": "17.0.33"
|
||||
"@types/yargs": "17.0.34"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "tsx src/main.ts",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"@triliumnext/desktop": "workspace:*",
|
||||
"@types/fs-extra": "11.0.4",
|
||||
"copy-webpack-plugin": "13.0.1",
|
||||
"electron": "38.3.0",
|
||||
"electron": "38.4.0",
|
||||
"fs-extra": "11.3.2"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:22.20.0-bullseye-slim AS builder
|
||||
FROM node:22.21.0-bullseye-slim AS builder
|
||||
RUN corepack enable
|
||||
|
||||
# Install native dependencies since we might be building cross-platform.
|
||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||
|
||||
FROM node:22.20.0-bullseye-slim
|
||||
FROM node:22.21.0-bullseye-slim
|
||||
# Install only runtime dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:22.20.0-alpine AS builder
|
||||
FROM node:22.21.0-alpine AS builder
|
||||
RUN corepack enable
|
||||
|
||||
# Install native dependencies since we might be building cross-platform.
|
||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||
|
||||
FROM node:22.20.0-alpine
|
||||
FROM node:22.21.0-alpine
|
||||
# Install runtime dependencies
|
||||
RUN apk add --no-cache su-exec shadow
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:22.20.0-alpine AS builder
|
||||
FROM node:22.21.0-alpine AS builder
|
||||
RUN corepack enable
|
||||
|
||||
# Install native dependencies since we might be building cross-platform.
|
||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||
|
||||
FROM node:22.20.0-alpine
|
||||
FROM node:22.21.0-alpine
|
||||
# Create a non-root user with configurable UID/GID
|
||||
ARG USER=trilium
|
||||
ARG UID=1001
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:22.20.0-bullseye-slim AS builder
|
||||
FROM node:22.21.0-bullseye-slim AS builder
|
||||
RUN corepack enable
|
||||
|
||||
# Install native dependencies since we might be building cross-platform.
|
||||
@@ -7,7 +7,7 @@ COPY ./docker/package.json ./docker/pnpm-workspace.yaml /usr/src/app/
|
||||
# We have to use --no-frozen-lockfile due to CKEditor patches
|
||||
RUN pnpm install --no-frozen-lockfile --prod && pnpm rebuild
|
||||
|
||||
FROM node:22.20.0-bullseye-slim
|
||||
FROM node:22.21.0-bullseye-slim
|
||||
# Create a non-root user with configurable UID/GID
|
||||
ARG USER=trilium
|
||||
ARG UID=1001
|
||||
|
||||
@@ -36,11 +36,11 @@
|
||||
"@triliumnext/commons": "workspace:*",
|
||||
"@triliumnext/express-partial-content": "workspace:*",
|
||||
"@triliumnext/turndown-plugin-gfm": "workspace:*",
|
||||
"@types/archiver": "6.0.3",
|
||||
"@types/archiver": "6.0.4",
|
||||
"@types/better-sqlite3": "7.6.13",
|
||||
"@types/cls-hooked": "4.3.9",
|
||||
"@types/compression": "1.8.1",
|
||||
"@types/cookie-parser": "1.4.9",
|
||||
"@types/cookie-parser": "1.4.10",
|
||||
"@types/debounce": "1.2.4",
|
||||
"@types/ejs": "3.1.5",
|
||||
"@types/escape-html": "1.0.4",
|
||||
@@ -56,8 +56,7 @@
|
||||
"@types/sanitize-html": "2.16.0",
|
||||
"@types/sax": "1.2.7",
|
||||
"@types/serve-favicon": "2.5.7",
|
||||
"@types/serve-static": "1.15.9",
|
||||
"@types/session-file-store": "1.2.5",
|
||||
"@types/serve-static": "1.15.10",
|
||||
"@types/stream-throttle": "0.1.4",
|
||||
"@types/supertest": "6.0.3",
|
||||
"@types/swagger-ui-express": "4.1.8",
|
||||
@@ -81,7 +80,7 @@
|
||||
"debounce": "2.2.0",
|
||||
"debug": "4.4.3",
|
||||
"ejs": "3.1.10",
|
||||
"electron": "38.3.0",
|
||||
"electron": "38.4.0",
|
||||
"electron-debug": "4.1.0",
|
||||
"electron-window-state": "5.0.3",
|
||||
"escape-html": "1.0.3",
|
||||
@@ -100,7 +99,7 @@
|
||||
"i18next": "25.6.0",
|
||||
"i18next-fs-backend": "2.6.0",
|
||||
"image-type": "6.0.0",
|
||||
"ini": "5.0.0",
|
||||
"ini": "6.0.0",
|
||||
"is-animated": "2.0.2",
|
||||
"is-svg": "6.1.0",
|
||||
"jimp": "1.6.0",
|
||||
@@ -110,7 +109,7 @@
|
||||
"multer": "2.0.2",
|
||||
"normalize-strings": "1.1.1",
|
||||
"ollama": "0.6.0",
|
||||
"openai": "6.6.0",
|
||||
"openai": "6.7.0",
|
||||
"rand-token": "1.0.1",
|
||||
"safe-compare": "1.1.4",
|
||||
"sanitize-filename": "1.6.3",
|
||||
@@ -125,9 +124,9 @@
|
||||
"swagger-ui-express": "5.0.1",
|
||||
"time2fa": "1.4.2",
|
||||
"tmp": "0.2.5",
|
||||
"turndown": "7.2.1",
|
||||
"turndown": "7.2.2",
|
||||
"unescape": "1.0.1",
|
||||
"vite": "7.1.11",
|
||||
"vite": "7.1.12",
|
||||
"ws": "8.18.3",
|
||||
"xml2js": "0.6.2",
|
||||
"yauzl": "3.2.0"
|
||||
|
||||
@@ -84,7 +84,9 @@
|
||||
"show-backend-log": "فتح صفحة \"سجل الخلفية\"",
|
||||
"edit-readonly-note": "تعديل ملاحظة القراءة فقط",
|
||||
"attributes-labels-and-relations": "سمات ( تسميات و علاقات)",
|
||||
"render-active-note": "عرض ( اعادة عرض) الملاحظة المؤرشفة"
|
||||
"render-active-note": "عرض ( اعادة عرض) الملاحظة المؤرشفة",
|
||||
"show-help": "فتح دليل التعليمات",
|
||||
"copy-without-formatting": "نسخ النص المحدد بدون تنسيق"
|
||||
},
|
||||
"setup_sync-from-server": {
|
||||
"note": "ملاحظة:",
|
||||
@@ -196,7 +198,8 @@
|
||||
"expand": "توسيع",
|
||||
"site-theme": "المظهر العام للموقع",
|
||||
"image_alt": "صورة المقال",
|
||||
"on-this-page": "في هذه السفحة"
|
||||
"on-this-page": "في هذه السفحة",
|
||||
"last-updated": "اخر تحديث {{- date}}"
|
||||
},
|
||||
"hidden_subtree_templates": {
|
||||
"description": "الوصف",
|
||||
@@ -258,7 +261,8 @@
|
||||
},
|
||||
"share_page": {
|
||||
"parent": "الأصل:",
|
||||
"child-notes": "الملاحظات الفرعية:"
|
||||
"child-notes": "الملاحظات الفرعية:",
|
||||
"no-content": "لاتحتوي هذة الملاحظة على محتوى."
|
||||
},
|
||||
"notes": {
|
||||
"duplicate-note-suffix": "(مكرر)",
|
||||
@@ -339,7 +343,24 @@
|
||||
"toggle-system-tray-icon": "تبديل ايقونة علبة النظام",
|
||||
"switch-to-first-tab": "التبديل الى التبويب الاول",
|
||||
"follow-link-under-cursor": "اتبع الرابط اسفل المؤشر",
|
||||
"paste-markdown-into-text": "لصق نص بتنسبق Markdown"
|
||||
"paste-markdown-into-text": "لصق نص بتنسبق Markdown",
|
||||
"move-note-up-in-hierarchy": "نقل الملاحظة للاعلى في الهيكل",
|
||||
"move-note-down-in-hierarchy": "نقل الملاحظة للاسفل في الهيكل",
|
||||
"select-all-notes-in-parent": "تحديد جميع الملاحظات التابعة للملاحظة الاصل",
|
||||
"add-note-above-to-selection": "اضافة ملاحظة فوق الملاحظة المحددة",
|
||||
"add-note-below-to-selection": "اصافة ملاحظة اسفل الملاحظة المحددة",
|
||||
"add-include-note-to-text": "اضافة الملاحظة الى النص",
|
||||
"toggle-ribbon-tab-image-properties": "اظهار/ اخفاء صورة علامة التبويب في الشريط.",
|
||||
"toggle-ribbon-tab-classic-editor": "عرض/اخفاء تبويب المحور الكلاسيكي",
|
||||
"toggle-ribbon-tab-basic-properties": "عرض/اخفاء تبويب الخصائص الاساسية",
|
||||
"toggle-ribbon-tab-book-properties": "عرض/اخفاء تبويب خصائص الدفتر",
|
||||
"toggle-ribbon-tab-file-properties": "عرض/ادخفاء تبويب خصائص الملف",
|
||||
"toggle-ribbon-tab-owned-attributes": "عرض/اخفاء تبويب المميزات المملوكة",
|
||||
"toggle-ribbon-tab-inherited-attributes": "عرض/اخفاء تبويب السمات الموروثة",
|
||||
"toggle-ribbon-tab-promoted-attributes": "عرض/ اخفاء تبويب السمات المعززة",
|
||||
"toggle-ribbon-tab-note-map": "عرض/اخفاء تبويب خريطة الملاحظات",
|
||||
"toggle-ribbon-tab-similar-notes": "عرض/اخفاء شريط الملاحظات المشابهة",
|
||||
"export-active-note-as-pdf": "تصدير الملاحظة النشطة كملفPDF"
|
||||
},
|
||||
"share_404": {
|
||||
"title": "غير موجود",
|
||||
@@ -348,6 +369,7 @@
|
||||
"weekdayNumber": "الاسبوع{رقم الاسيوع}",
|
||||
"quarterNumber": "الربع {رقم الربع}",
|
||||
"pdf": {
|
||||
"export_filter": "مستند PDF (.pdf)"
|
||||
"export_filter": "مستند PDF (.pdf)",
|
||||
"unable-to-export-title": "تعذر التصدير كملف PDF"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -274,7 +274,8 @@
|
||||
"export_filter": "PDF Dokument (*.pdf)",
|
||||
"unable-to-export-message": "Die aktuelle Notiz konnte nicht als PDF exportiert werden.",
|
||||
"unable-to-export-title": "Export als PDF fehlgeschlagen",
|
||||
"unable-to-save-message": "Die ausgewählte Datei konnte nicht beschrieben werden. Erneut versuchen oder ein anderes Ziel auswählen."
|
||||
"unable-to-save-message": "Die ausgewählte Datei konnte nicht beschrieben werden. Erneut versuchen oder ein anderes Ziel auswählen.",
|
||||
"unable-to-print": "Notiz kann nicht gedruckt werden"
|
||||
},
|
||||
"tray": {
|
||||
"tooltip": "Trilium Notes",
|
||||
|
||||
@@ -23,6 +23,14 @@
|
||||
"edit-note-title": "Ugrás fáról a jegyzet részleteihez és a cím szerkesztése",
|
||||
"edit-branch-prefix": "\"Ág címjelzésének szerkesztése\" ablak mutatása",
|
||||
"clone-notes-to": "Kijelölt jegyzetek másolása",
|
||||
"move-notes-to": "Kijelölt jegyzetek elhelyzése"
|
||||
"move-notes-to": "Kijelölt jegyzetek elhelyzése",
|
||||
"note-clipboard": "Megjegyzés vágólap",
|
||||
"copy-notes-to-clipboard": "Másolja a kiválasztott jegyzeteket a vágólapra",
|
||||
"paste-notes-from-clipboard": "A vágólapról szóló jegyzetek beillesztése aktív jegyzetbe",
|
||||
"cut-notes-to-clipboard": "A kiválasztott jegyzetek kivágása a vágólapra",
|
||||
"select-all-notes-in-parent": "Válassza ki az összes jegyzetet az aktuális jegyzetszintről",
|
||||
"activate-next-tab": "Aktiválja a jobb oldali fület",
|
||||
"activate-previous-tab": "Aktiválja a lapot a bal oldalon",
|
||||
"open-new-window": "Nyiss új üres ablakot"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build",
|
||||
"test": "vitest",
|
||||
"preview": "pnpm build && vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -12,8 +13,8 @@
|
||||
"i18next-http-backend": "3.0.2",
|
||||
"preact": "10.27.2",
|
||||
"preact-iso": "2.11.0",
|
||||
"preact-render-to-string": "6.6.2",
|
||||
"react-i18next": "16.1.2"
|
||||
"preact-render-to-string": "6.6.3",
|
||||
"react-i18next": "16.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@preact/preset-vite": "2.10.2",
|
||||
@@ -21,7 +22,7 @@
|
||||
"eslint-config-preact": "2.0.0",
|
||||
"typescript": "5.9.3",
|
||||
"user-agent-data-types": "0.4.2",
|
||||
"vite": "7.1.11"
|
||||
"vite": "7.1.12"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "preact"
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
},
|
||||
"download_helper_server_hosted": {
|
||||
"title": "استضافة مدفوعة",
|
||||
"download_triliumcc": "بدلا من ذلك، راجع trillum. cc"
|
||||
"download_triliumcc": "بدلا من ذلك، راجع trillum. cc",
|
||||
"download_pikapod": "اعدلد على PikaPods"
|
||||
},
|
||||
"get-started": {
|
||||
"architecture": "المعمارية:",
|
||||
@@ -22,7 +23,8 @@
|
||||
"organization_benefits": {
|
||||
"title": "تنظيم",
|
||||
"note_structure_title": "هيكيلية الملاحظة",
|
||||
"hoisting_title": "مساحات العمل والتركيز على الملاحظة"
|
||||
"hoisting_title": "مساحات العمل والتركيز على الملاحظة",
|
||||
"attributes_title": "العلاقات وجداول الملاحظة"
|
||||
},
|
||||
"productivity_benefits": {
|
||||
"sync_title": "المزامنة",
|
||||
@@ -30,7 +32,8 @@
|
||||
"protected_notes_title": "الملاحظات المحمية",
|
||||
"search_title": "البحث القوي",
|
||||
"web_clipper_title": "اداة قص الويب",
|
||||
"title": "الانتاجية والسلامة"
|
||||
"title": "الانتاجية والسلامة",
|
||||
"jump_to_title": "الاوامر والبحث السريع"
|
||||
},
|
||||
"note_types": {
|
||||
"canvas_title": "مساحة العمل",
|
||||
@@ -66,14 +69,16 @@
|
||||
"paypal": "PayPal",
|
||||
"title": "ادعمنا",
|
||||
"financial_donations_title": "التبرعات المالية",
|
||||
"github_sponsors": "الرعاة على GitHub"
|
||||
"github_sponsors": "الرعاة على GitHub",
|
||||
"buy_me_a_coffee": "Buy Me A Coffee"
|
||||
},
|
||||
"download_helper_desktop_windows": {
|
||||
"download_scoop": "Scoop",
|
||||
"download_exe": "تحميل ملف التثبيت (exe.)",
|
||||
"title_x64": "ويندوز 64 بت",
|
||||
"download_zip": "النسخة المحمولة بصيغة zip",
|
||||
"title_arm64": "نظام ويندوز عاى ARM"
|
||||
"title_arm64": "نظام ويندوز عاى ARM",
|
||||
"quick_start": "للتثبيت باستخدام Winget:"
|
||||
},
|
||||
"download_helper_desktop_linux": {
|
||||
"download_deb": ".deb",
|
||||
@@ -112,6 +117,11 @@
|
||||
"download_dmg": "تحميل ملف التثبيت (dmg.)",
|
||||
"download_homebrew_cask": "Homebrew Cask",
|
||||
"download_zip": "النسخة المحمولة بصيغة zip",
|
||||
"title_x64": "نظام macOS لاصدار intel"
|
||||
"title_x64": "نظام macOS لاصدار intel",
|
||||
"title_arm64": "نظام macOS لمعالجة اجهزة Apple Silicon",
|
||||
"quick_start": "للتثبيت بواسطة Homebrew:"
|
||||
},
|
||||
"contribute": {
|
||||
"title": "طرق اخرى للمساهمة"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,44 @@
|
||||
"title": "Loslegen",
|
||||
"desktop_title": "Die Desktop-App herunterladen (v{{version}})",
|
||||
"architecture": "Architektur:",
|
||||
"older_releases": "Ältere Releases anzeigen"
|
||||
"older_releases": "Ältere Releases anzeigen",
|
||||
"server_title": "Richte einen Server für den Zugriff auf mehreren Geräten ein"
|
||||
},
|
||||
"hero_section": {
|
||||
"github": "GitHub",
|
||||
"get_started": "Loslegen",
|
||||
"dockerhub": "Docker Hub",
|
||||
"title": "Organisieren Sie Ihre Gedanken. Bauen Sie Ihre persönliche Wissensdatenbank auf.",
|
||||
"subtitle": "Trilium ist eine Open-Source-Lösung zum Erstellen von Notizen und Organisieren einer persönlichen Wissensdatenbank. Sie kann lokal auf dem Desktop verwendet oder mit einem selbst gehosteten Server synchronisieren werden, um erstellte Notizen überall verfügbar zu haben.",
|
||||
"screenshot_alt": "Screenshot der Desktop-Anwendung Trilium Notes"
|
||||
},
|
||||
"organization_benefits": {
|
||||
"title": "Organisation",
|
||||
"note_structure_title": "Notizstruktur",
|
||||
"attributes_title": "Notiz Labels und Beziehungen"
|
||||
},
|
||||
"productivity_benefits": {
|
||||
"revisions_title": "Notizrevisionen",
|
||||
"title": "Produktivität und Sicherheit",
|
||||
"sync_title": "Synchronisation",
|
||||
"protected_notes_title": "Geschützte Notizen",
|
||||
"jump_to_title": "Schnellsuche und Kommandos",
|
||||
"search_title": "Leistungsstarke Suche",
|
||||
"web_clipper_title": "Web clipper"
|
||||
},
|
||||
"note_types": {
|
||||
"text_title": "Text Notizen",
|
||||
"code_title": "Code Notizen",
|
||||
"canvas_title": "Canvas",
|
||||
"mermaid_title": "Mermaid Diagramm",
|
||||
"mindmap_title": "Mind Map"
|
||||
},
|
||||
"extensibility_benefits": {
|
||||
"import_export_title": "Import/Export",
|
||||
"scripting_title": "Erweitertes Scripting",
|
||||
"api_title": "REST API"
|
||||
},
|
||||
"collections": {
|
||||
"calendar_title": "Kalender"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
"web_clipper_content": "Grab web pages (or screenshots) and place them directly into Trilium using the web clipper browser extension."
|
||||
},
|
||||
"note_types": {
|
||||
"title": "Multiple ways to represent your information",
|
||||
"text_title": "Text notes",
|
||||
"text_description": "The notes are edited using a visual (WYSIWYG) editor, with support for tables, images, math expressions, code blocks with syntax highlighting. Quickly format the text using Markdown-like syntax or using slash commands.",
|
||||
"code_title": "Code notes",
|
||||
@@ -65,6 +66,7 @@
|
||||
"api_description": "Interact with Trilium programatically using its builtin REST API."
|
||||
},
|
||||
"collections": {
|
||||
"title": "Collections",
|
||||
"calendar_title": "Calendar",
|
||||
"calendar_description": "Organize your personal or professional events using a calendar, with support for all-day and multi-day events. See your events at a glance with the week, month and year views. Easy interaction to add or drag events.",
|
||||
"table_title": "Table",
|
||||
@@ -106,6 +108,11 @@
|
||||
"linux_small": "for Linux",
|
||||
"more_platforms": "More platforms & server setup"
|
||||
},
|
||||
"header": {
|
||||
"get-started": "Get started",
|
||||
"documentation": "Documentation",
|
||||
"support-us": "Support us"
|
||||
},
|
||||
"footer": {
|
||||
"copyright_and_the": " and the ",
|
||||
"copyright_community": "community"
|
||||
@@ -163,7 +170,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS for Intel",
|
||||
"title_arm64": "macOS for Apple Silicon",
|
||||
"description_x64": "For Intel-based Macs running macOS Big Sur or later.",
|
||||
"description_x64": "For Intel-based Macs running macOS Monterey or later.",
|
||||
"description_arm64": "For Apple Silicon Macs such as those with M1 and M2 chips.",
|
||||
"quick_start": "To install via Homebrew:",
|
||||
"download_dmg": "Download Installer (.dmg)",
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS para Intel",
|
||||
"title_arm64": "macOS para Apple Silicon",
|
||||
"description_x64": "Para Macs con procesador Intel que ejecuten macOS Big Sur o posterior.",
|
||||
"description_x64": "Para Macs con procesador Intel que ejecuten macOS Monterey o posterior.",
|
||||
"description_arm64": "Para Macs con Apple Silicon, como los que tienen chips M1 y M2.",
|
||||
"quick_start": "Para instalar mediante Homebrew:",
|
||||
"download_dmg": "Descargar instalador (.dmg)",
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS pour Intel",
|
||||
"title_arm64": "macOS pour Apple Silicon",
|
||||
"description_x64": "Pour les Mac basés sur Intel exécutant macOS Big Sur ou une version ultérieure.",
|
||||
"description_x64": "Pour les Mac basés sur Intel exécutant macOS Monterey ou une version ultérieure.",
|
||||
"description_arm64": "Pour les Mac Apple Silicon tels que ceux équipés de puces M1 et M2.",
|
||||
"quick_start": "Pour installer via Homebrew :",
|
||||
"download_dmg": "Télécharger le programme d'installation (.dmg)",
|
||||
|
||||
@@ -1 +1,44 @@
|
||||
{}
|
||||
{
|
||||
"get-started": {
|
||||
"title": "Kezdés",
|
||||
"desktop_title": "Töltsd le az asztali alkalmazást (v{{version}})",
|
||||
"architecture": "Szerkezet:",
|
||||
"older_releases": "Régebbi kiadások megtekintése",
|
||||
"server_title": "Szerver beállítása több eszközről történő hozzáféréshez"
|
||||
},
|
||||
"hero_section": {
|
||||
"title": "Rendszerezd a gondolataidat. Építsd fel a személyes tudásbázisodat.",
|
||||
"subtitle": "A Trilium egy nyílt forráskódú megoldás jegyzeteléshez és személyes tudásbázis rendszerezéséhez. Használd helyben az asztali gépeden, vagy szinkronizáld a saját szervereddel, hogy jegyzeteid mindenhol elérhetőek legyenek.",
|
||||
"get_started": "Kezdés",
|
||||
"github": "GitHub",
|
||||
"dockerhub": "Docker Hub",
|
||||
"screenshot_alt": "A Trilium Notes asztali alkalmazás képernyőképe"
|
||||
},
|
||||
"organization_benefits": {
|
||||
"title": "Szervezet",
|
||||
"note_structure_title": "Jegyzet szerkezet",
|
||||
"note_structure_description": "A jegyzetek hierarchikusan rendezhetők. Nincs szükség mappákra, mivel minden jegyzet tartalmazhat aljegyzeteket. Egyetlen jegyzet több helyre is hozzáadható a hierarchiában.",
|
||||
"attributes_title": "Jegyzetcímkék és kapcsolatok",
|
||||
"attributes_description": "Használjon kapcsolatokat a jegyzetek között, vagy adjon hozzá címkéket az egyszerű kategorizálás érdekében. Használjon kiemelt attribútumokat strukturált információk beviteléhez, amelyek táblázatokban és táblákon használhatók.",
|
||||
"hoisting_title": "Munkaterületek és kiemelés",
|
||||
"hoisting_description": "Könnyedén különítse el a személyes és munkahelyi jegyzeteit úgy, hogy csoportosítja őket egy munkaterület alatt, amely a jegyzetfát csak egy adott jegyzetkészlet megjelenítésére összpontosítja."
|
||||
},
|
||||
"productivity_benefits": {
|
||||
"title": "Termelékenység és biztonság",
|
||||
"revisions_title": "Megjegyzés felülvizsgálatai",
|
||||
"revisions_content": "A jegyzetek rendszeresen tárolódnak a háttérben, és a revíziók felhasználhatók felülvizsgálatra vagy véletlen változások visszavonására. A revíziók igény szerint is létrehozhatók.",
|
||||
"sync_title": "Szinkronizálás",
|
||||
"sync_content": "Használjon saját maga által üzemeltetett vagy felhő alapu példányt, hogy könnyen szinkronizálja a jegyzeteket több eszközön keresztül, és hozzáférjen a mobiltelefonjáról egy PWA segítségével.",
|
||||
"protected_notes_title": "Védett jegyzetek",
|
||||
"protected_notes_content": "Védje az érzékeny személyes adatokat a jegyzetek titkosításával és a jelszóval védett munkamenet mögötti zárolással.",
|
||||
"jump_to_title": "Gyors keresés és parancsok",
|
||||
"jump_to_content": "Ugorj gyorsan a jegyzetekhez vagy a felhasználói felület parancsaihoz a hierarchia területén, keresve a címüket, a fuzzy illesztéssel, hogy megmagyarázza az elírásokat vagy az enyhe különbségeket.",
|
||||
"search_title": "Erőteljes keresés",
|
||||
"search_content": "Vagy keressen szöveget a jegyzetekben, és szűkítse le a keresést a szülői jegyzet szűrésével vagy mélységével."
|
||||
},
|
||||
"note_types": {
|
||||
"file_description": "Beágyazott multimédiás fájlokat, például PDF-eket, képeket, videókat, alkalmazáson belüli előnézettel.",
|
||||
"canvas_title": "Vászon",
|
||||
"canvas_description": "Rendezzen formákat, képeket és szöveget egy végtelen vászonra, ugyanazzal a technológiával mint ami excalidraw.com mögött van. Ideális diagramokhoz, vázlatokhoz és vizuális tervezéshez."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS per Intel",
|
||||
"title_arm64": "macOS per Apple Silicon",
|
||||
"description_x64": "Per Mac basati su Intel con macOS Big Sur o versioni successive.",
|
||||
"description_x64": "Per Mac basati su Intel con macOS Monterey o versioni successive.",
|
||||
"description_arm64": "Per i Mac Apple Silicon, come quelli con chip M1 e M2.",
|
||||
"quick_start": "Per installare tramite Homebrew:",
|
||||
"download_dmg": "Scarica il programma di installazione (.dmg)",
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "Intel 向け macOS",
|
||||
"title_arm64": "Apple Silicon 向け macOS",
|
||||
"description_x64": "macOS Big Sur 以降を実行している Intel ベースの Mac 向け。",
|
||||
"description_x64": "macOS Monterey 以降を実行している Intel ベースの Mac 向け。",
|
||||
"description_arm64": "M1 および M2 チップを搭載した Apple Silicon Mac 向け。",
|
||||
"quick_start": "Homebrew 経由でインストールするには:",
|
||||
"download_dmg": "インストーラーをダウンロード (.dmg)",
|
||||
|
||||
@@ -106,6 +106,11 @@
|
||||
"linux_small": "pentru Linux",
|
||||
"more_platforms": "Mai multe platforme și instalarea server-ului"
|
||||
},
|
||||
"header": {
|
||||
"get-started": "Primii pași",
|
||||
"documentation": "Documentație",
|
||||
"support-us": "Sprijină-ne"
|
||||
},
|
||||
"footer": {
|
||||
"copyright_and_the": " și ",
|
||||
"copyright_community": "comunitatea"
|
||||
@@ -157,7 +162,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS pentru Intel",
|
||||
"title_arm64": "macOS pentru Apple Silicon",
|
||||
"description_x64": "Pentru Mac-uri bazate pe Intel ce rulează macOS Big Sur sau mai nou.",
|
||||
"description_x64": "Pentru Mac-uri bazate pe Intel ce rulează macOS Monterey sau mai nou.",
|
||||
"description_arm64": "Pentru Mac-uri bazate pe Apple Silicon, precum cele cu chip-uri M1, M2.",
|
||||
"quick_start": "Instalați prin Homebrew:",
|
||||
"download_dmg": "Descarcă instalatorul (.dmg)",
|
||||
|
||||
@@ -163,7 +163,7 @@
|
||||
"download_helper_desktop_macos": {
|
||||
"title_x64": "macOS 適用於 Intel",
|
||||
"title_arm64": "macOS 適用於 Apple Silicon",
|
||||
"description_x64": "適用於搭載 Intel 處理器的 Mac,並運行 macOS Big Sur 或更新版本。",
|
||||
"description_x64": "適用於搭載 Intel 處理器的 Mac,並運行 macOS Monterey 或更新版本。",
|
||||
"description_arm64": "適用於搭載 Apple Silicon 的 Mac,例如配備 M1 和 M2 晶片的機型。",
|
||||
"quick_start": "透過 Homebrew 安裝:",
|
||||
"download_dmg": "下載安裝程式 (.dmg)",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ComponentChildren, HTMLAttributes } from "preact";
|
||||
import { Link } from "./Button.js";
|
||||
import Icon from "./Icon.js";
|
||||
import { t } from "../i18n.js";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
||||
title: ComponentChildren;
|
||||
@@ -13,6 +13,8 @@ interface CardProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
|
||||
}
|
||||
|
||||
export default function Card({ title, children, imageUrl, iconSvg, className, moreInfoUrl, ...restProps }: CardProps) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className={`card ${className}`} {...restProps}>
|
||||
{imageUrl && <img class="image" src={imageUrl} loading="lazy" />}
|
||||
|
||||
@@ -3,18 +3,21 @@ import "./DownloadButton.css";
|
||||
import Button from "./Button.js";
|
||||
import downloadIcon from "../assets/boxicons/bx-arrow-in-down-square-half.svg?raw";
|
||||
import packageJson from "../../../../package.json" with { type: "json" };
|
||||
import { useEffect, useState } from "preact/hooks";
|
||||
import { t } from "../i18n.js";
|
||||
import { useContext, useEffect, useState } from "preact/hooks";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { LocaleContext } from "../index.js";
|
||||
|
||||
interface DownloadButtonProps {
|
||||
big?: boolean;
|
||||
}
|
||||
|
||||
export default function DownloadButton({ big }: DownloadButtonProps) {
|
||||
const locale = useContext(LocaleContext);
|
||||
const { t } = useTranslation();
|
||||
const [ recommendedDownload, setRecommendedDownload ] = useState<RecommendedDownload | null>();
|
||||
useEffect(() => {
|
||||
getRecommendedDownload()?.then(setRecommendedDownload);
|
||||
}, []);
|
||||
getRecommendedDownload(t)?.then(setRecommendedDownload);
|
||||
}, [ t ]);
|
||||
|
||||
return (recommendedDownload &&
|
||||
<>
|
||||
@@ -35,7 +38,7 @@ export default function DownloadButton({ big }: DownloadButtonProps) {
|
||||
) : (
|
||||
<Button
|
||||
className={`download-button desktop-only ${big ? "big" : ""}`}
|
||||
href="/get-started/"
|
||||
href={`/${locale}/get-started/`}
|
||||
iconSvg={downloadIcon}
|
||||
text={<>
|
||||
{t("download_now.text")}
|
||||
|
||||
@@ -5,17 +5,26 @@ footer {
|
||||
color: var(--muted-color);
|
||||
font-size: 0.8em;
|
||||
|
||||
.content-wrapper {
|
||||
.row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
flex-direction: column-reverse;
|
||||
gap: 2em;
|
||||
margin-bottom: 1em;
|
||||
|
||||
@media (min-width: 720px) {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
nav.languages {
|
||||
flex-grow: 1;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
display: flex;
|
||||
gap: 0.5em 1em;
|
||||
}
|
||||
}
|
||||
|
||||
.social-buttons {
|
||||
|
||||
@@ -5,24 +5,46 @@ import githubDiscussionsIcon from "../assets/boxicons/bx-discussion.svg?raw";
|
||||
import matrixIcon from "../assets/boxicons/bx-message-dots.svg?raw";
|
||||
import redditIcon from "../assets/boxicons/bx-reddit.svg?raw";
|
||||
import { Link } from "./Button.js";
|
||||
import { t } from "../i18n";
|
||||
import { LOCALES, swapLocaleInUrl } from "../i18n";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useLocation } from "preact-iso";
|
||||
import { useContext } from "preact/hooks";
|
||||
import { LocaleContext } from "..";
|
||||
|
||||
export default function Footer() {
|
||||
const { t } = useTranslation();
|
||||
const { url } = useLocation();
|
||||
const currentLocale = useContext(LocaleContext);
|
||||
|
||||
return (
|
||||
<footer>
|
||||
<div class="content-wrapper">
|
||||
<div class="footer-text">
|
||||
© 2024-2025 <Link href="https://github.com/eliandoran" openExternally>Elian Doran</Link>{t("footer.copyright_and_the")}<Link href="https://github.com/TriliumNext/Trilium/graphs/contributors" openExternally>{t("footer.copyright_community")}</Link>.<br />
|
||||
© 2017-2024 <Link href="https://github.com/zadam" openExternally>zadam</Link>.
|
||||
<div class="row">
|
||||
<div class="footer-text">
|
||||
© 2024-2025 <Link href="https://github.com/eliandoran" openExternally>Elian Doran</Link>{t("footer.copyright_and_the")}<Link href="https://github.com/TriliumNext/Trilium/graphs/contributors" openExternally>{t("footer.copyright_community")}</Link>.<br />
|
||||
© 2017-2024 <Link href="https://github.com/zadam" openExternally>zadam</Link>.
|
||||
</div>
|
||||
|
||||
<SocialButtons />
|
||||
</div>
|
||||
|
||||
<SocialButtons />
|
||||
<div class="row">
|
||||
<nav class="languages">
|
||||
{LOCALES.map(locale => (
|
||||
locale.id !== currentLocale
|
||||
? <Link href={swapLocaleInUrl(url, locale.id)}>{locale.name}</Link>
|
||||
: <span className="active">{locale.name}</span>
|
||||
))}
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
|
||||
export function SocialButtons({ className, withText }: { className?: string, withText?: boolean }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className={`social-buttons ${className}`}>
|
||||
<SocialButton
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
import "./Header.css";
|
||||
import { Link } from "./Button.js";
|
||||
import { SocialButtons, SocialButton } from "./Footer.js";
|
||||
import { useEffect, useMemo, useState } from "preact/hooks";
|
||||
import { useContext, useEffect, useMemo, useState } from "preact/hooks";
|
||||
import { useLocation } from 'preact-iso';
|
||||
import DownloadButton from './DownloadButton.js';
|
||||
import githubIcon from "../assets/boxicons/bx-github.svg?raw";
|
||||
import Icon from "./Icon.js";
|
||||
import logoPath from "../assets/icon-color.svg";
|
||||
import menuIcon from "../assets/boxicons/bx-menu.svg?raw";
|
||||
import { LocaleContext } from "..";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { swapLocaleInUrl } from "../i18n";
|
||||
|
||||
interface HeaderLink {
|
||||
url: string;
|
||||
@@ -15,21 +18,26 @@ interface HeaderLink {
|
||||
external?: boolean;
|
||||
}
|
||||
|
||||
const HEADER_LINKS: HeaderLink[] = [
|
||||
{ url: "/get-started/", text: "Get started" },
|
||||
{ url: "https://docs.triliumnotes.org/", text: "Documentation", external: true },
|
||||
{ url: "/support-us/", text: "Support us" }
|
||||
]
|
||||
|
||||
export function Header(props: {repoStargazersCount: number}) {
|
||||
const { url } = useLocation();
|
||||
const { t } = useTranslation();
|
||||
const locale = useContext(LocaleContext);
|
||||
const [ mobileMenuShown, setMobileMenuShown ] = useState(false);
|
||||
|
||||
const [ headerLinks, setHeaderLinks ] = useState<HeaderLink[]>([]);
|
||||
useEffect(() => {
|
||||
setHeaderLinks([
|
||||
{ url: "/get-started", text: t("header.get-started") },
|
||||
{ url: "https://docs.triliumnotes.org/", text: t("header.documentation"), external: true },
|
||||
{ url: "/support-us", text: t("header.support-us") }
|
||||
]);
|
||||
}, [ locale, t ]);
|
||||
|
||||
return (
|
||||
<header>
|
||||
<div class="content-wrapper">
|
||||
<div class="first-row">
|
||||
<a class="banner" href="/">
|
||||
<a class="banner" href={`/${locale}/`}>
|
||||
<img src={logoPath} width="300" height="300" alt="Trilium Notes logo" /> <span>Trilium Notes</span>
|
||||
</a>
|
||||
|
||||
@@ -46,16 +54,17 @@ export function Header(props: {repoStargazersCount: number}) {
|
||||
</div>
|
||||
|
||||
<nav className={`${mobileMenuShown ? "mobile-shown" : ""}`}>
|
||||
{HEADER_LINKS.map(link => (
|
||||
<Link
|
||||
href={link.url}
|
||||
className={url === link.url ? "active" : ""}
|
||||
{headerLinks.map(link => {
|
||||
const linkHref = link.external ? link.url : swapLocaleInUrl(link.url, locale);
|
||||
return (<Link
|
||||
href={linkHref}
|
||||
className={url === linkHref ? "active" : ""}
|
||||
openExternally={link.external}
|
||||
onClick={() => {
|
||||
setMobileMenuShown(false);
|
||||
}}
|
||||
>{link.text}</Link>
|
||||
))}
|
||||
>{link.text}</Link>)
|
||||
})}
|
||||
|
||||
<SocialButtons className="mobile-only" withText />
|
||||
</nav>
|
||||
@@ -74,4 +83,4 @@ export function Header(props: {repoStargazersCount: number}) {
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { TFunction } from 'i18next';
|
||||
import rootPackageJson from '../../../package.json' with { type: "json" };
|
||||
import { t } from './i18n';
|
||||
|
||||
export type App = "desktop" | "server";
|
||||
|
||||
@@ -34,151 +34,155 @@ export interface RecommendedDownload {
|
||||
type DownloadMatrix = Record<App, { [ P in Platform ]?: DownloadMatrixEntry }>;
|
||||
|
||||
// Keep compatibility info inline with https://github.com/electron/electron/blob/main/README.md#platform-support.
|
||||
export const downloadMatrix: DownloadMatrix = {
|
||||
desktop: {
|
||||
windows: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_windows.title_x64"),
|
||||
arm64: t("download_helper_desktop_windows.title_arm64")
|
||||
},
|
||||
description: {
|
||||
x64: t("download_helper_desktop_windows.description_x64"),
|
||||
arm64: t("download_helper_desktop_windows.description_arm64"),
|
||||
},
|
||||
quickStartTitle: t("download_helper_desktop_windows.quick_start"),
|
||||
quickStartCode: "winget install TriliumNext.Notes",
|
||||
downloads: {
|
||||
exe: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_windows.download_exe")
|
||||
export function getDownloadMatrix(t: TFunction<"translation", undefined>): DownloadMatrix {
|
||||
return {
|
||||
desktop: {
|
||||
windows: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_windows.title_x64"),
|
||||
arm64: t("download_helper_desktop_windows.title_arm64")
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_windows.download_zip")
|
||||
description: {
|
||||
x64: t("download_helper_desktop_windows.description_x64"),
|
||||
arm64: t("download_helper_desktop_windows.description_arm64"),
|
||||
},
|
||||
scoop: {
|
||||
name: t("download_helper_desktop_windows.download_scoop"),
|
||||
url: "https://scoop.sh/#/apps?q=trilium&id=7c08bc3c105b9ee5c00dd4245efdea0f091b8a5c"
|
||||
quickStartTitle: t("download_helper_desktop_windows.quick_start"),
|
||||
quickStartCode: "winget install TriliumNext.Notes",
|
||||
downloads: {
|
||||
exe: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_windows.download_exe")
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_windows.download_zip")
|
||||
},
|
||||
scoop: {
|
||||
name: t("download_helper_desktop_windows.download_scoop"),
|
||||
url: "https://scoop.sh/#/apps?q=trilium&id=7c08bc3c105b9ee5c00dd4245efdea0f091b8a5c"
|
||||
}
|
||||
}
|
||||
},
|
||||
linux: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_linux.title_x64"),
|
||||
arm64: t("download_helper_desktop_linux.title_arm64")
|
||||
},
|
||||
description: {
|
||||
x64: t("download_helper_desktop_linux.description_x64"),
|
||||
arm64: t("download_helper_desktop_linux.description_arm64"),
|
||||
},
|
||||
quickStartTitle: t("download_helper_desktop_linux.quick_start"),
|
||||
downloads: {
|
||||
deb: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_linux.download_deb")
|
||||
},
|
||||
rpm: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_linux.download_rpm")
|
||||
},
|
||||
flatpak: {
|
||||
name: t("download_helper_desktop_linux.download_flatpak")
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_linux.download_zip")
|
||||
},
|
||||
nixpkgs: {
|
||||
name: t("download_helper_desktop_linux.download_nixpkgs"),
|
||||
url: "https://search.nixos.org/packages?query=trilium-next"
|
||||
},
|
||||
aur: {
|
||||
name: t("download_helper_desktop_linux.download_aur"),
|
||||
url: "https://aur.archlinux.org/packages/triliumnext-bin"
|
||||
}
|
||||
}
|
||||
},
|
||||
macos: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_macos.title_x64"),
|
||||
arm64: t("download_helper_desktop_macos.title_arm64")
|
||||
},
|
||||
description: {
|
||||
x64: t("download_helper_desktop_macos.description_x64"),
|
||||
arm64: t("download_helper_desktop_macos.description_arm64"),
|
||||
},
|
||||
quickStartTitle: t("download_helper_desktop_macos.quick_start"),
|
||||
quickStartCode: "brew install --cask trilium-notes",
|
||||
downloads: {
|
||||
dmg: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_macos.download_dmg")
|
||||
},
|
||||
homebrew: {
|
||||
name: t("download_helper_desktop_macos.download_homebrew_cask"),
|
||||
url: "https://formulae.brew.sh/cask/trilium-notes#default"
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_macos.download_zip")
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
linux: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_linux.title_x64"),
|
||||
arm64: t("download_helper_desktop_linux.title_arm64")
|
||||
},
|
||||
description: {
|
||||
x64: t("download_helper_desktop_linux.description_x64"),
|
||||
arm64: t("download_helper_desktop_linux.description_arm64"),
|
||||
},
|
||||
quickStartTitle: t("download_helper_desktop_linux.quick_start"),
|
||||
downloads: {
|
||||
deb: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_linux.download_deb")
|
||||
},
|
||||
rpm: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_linux.download_rpm")
|
||||
},
|
||||
flatpak: {
|
||||
name: t("download_helper_desktop_linux.download_flatpak")
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_linux.download_zip")
|
||||
},
|
||||
nixpkgs: {
|
||||
name: t("download_helper_desktop_linux.download_nixpkgs"),
|
||||
url: "https://search.nixos.org/packages?query=trilium-next"
|
||||
},
|
||||
aur: {
|
||||
name: t("download_helper_desktop_linux.download_aur"),
|
||||
url: "https://aur.archlinux.org/packages/triliumnext-bin"
|
||||
server: {
|
||||
docker: {
|
||||
title: t("download_helper_server_docker.title"),
|
||||
description: t("download_helper_server_docker.description"),
|
||||
helpUrl: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.html",
|
||||
quickStartCode: "docker pull triliumnext/trilium\ndocker run -p 8080:8080 -d -v ./data:/home/node/trilium-data triliumnext/trilium",
|
||||
downloads: {
|
||||
dockerhub: {
|
||||
name: t("download_helper_server_docker.download_dockerhub"),
|
||||
url: "https://hub.docker.com/r/triliumnext/trilium"
|
||||
},
|
||||
ghcr: {
|
||||
name: t("download_helper_server_docker.download_ghcr"),
|
||||
url: "https://github.com/TriliumNext/Trilium/pkgs/container/trilium"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
macos: {
|
||||
title: {
|
||||
x64: t("download_helper_desktop_macos.title_x64"),
|
||||
arm64: t("download_helper_desktop_macos.title_arm64")
|
||||
},
|
||||
description: {
|
||||
x64: t("download_helper_desktop_macos.description_x64"),
|
||||
arm64: t("download_helper_desktop_macos.description_arm64"),
|
||||
linux: {
|
||||
title: t("download_helper_server_linux.title"),
|
||||
description: t("download_helper_server_linux.description"),
|
||||
helpUrl: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/1.%20Installing%20the%20server/Packaged%20version%20for%20Linux.html",
|
||||
downloads: {
|
||||
tarX64: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_linux.download_tar_x64"),
|
||||
url: `https://github.com/TriliumNext/Trilium/releases/download/v${version}/TriliumNotes-Server-v${version}-linux-x64.tar.xz`,
|
||||
},
|
||||
tarArm64: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_linux.download_tar_arm64"),
|
||||
url: `https://github.com/TriliumNext/Trilium/releases/download/v${version}/TriliumNotes-Server-v${version}-linux-arm64.tar.xz`
|
||||
},
|
||||
nixos: {
|
||||
name: t("download_helper_server_linux.download_nixos"),
|
||||
url: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/On%20NixOS"
|
||||
}
|
||||
}
|
||||
},
|
||||
quickStartTitle: t("download_helper_desktop_macos.quick_start"),
|
||||
quickStartCode: "brew install --cask trilium-notes",
|
||||
downloads: {
|
||||
dmg: {
|
||||
recommended: true,
|
||||
name: t("download_helper_desktop_macos.download_dmg")
|
||||
},
|
||||
homebrew: {
|
||||
name: t("download_helper_desktop_macos.download_homebrew_cask"),
|
||||
url: "https://formulae.brew.sh/cask/trilium-notes#default"
|
||||
},
|
||||
zip: {
|
||||
name: t("download_helper_desktop_macos.download_zip")
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
server: {
|
||||
docker: {
|
||||
title: t("download_helper_server_docker.title"),
|
||||
description: t("download_helper_server_docker.description"),
|
||||
helpUrl: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.html",
|
||||
quickStartCode: "docker pull triliumnext/trilium\ndocker run -p 8080:8080 -d -v ./data:/home/node/trilium-data triliumnext/trilium",
|
||||
downloads: {
|
||||
dockerhub: {
|
||||
name: t("download_helper_server_docker.download_dockerhub"),
|
||||
url: "https://hub.docker.com/r/triliumnext/trilium"
|
||||
},
|
||||
ghcr: {
|
||||
name: t("download_helper_server_docker.download_ghcr"),
|
||||
url: "https://github.com/TriliumNext/Trilium/pkgs/container/trilium"
|
||||
}
|
||||
}
|
||||
},
|
||||
linux: {
|
||||
title: t("download_helper_server_linux.title"),
|
||||
description: t("download_helper_server_linux.description"),
|
||||
helpUrl: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/1.%20Installing%20the%20server/Packaged%20version%20for%20Linux.html",
|
||||
downloads: {
|
||||
tarX64: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_linux.download_tar_x64"),
|
||||
url: `https://github.com/TriliumNext/Trilium/releases/download/v${version}/TriliumNotes-Server-v${version}-linux-x64.tar.xz`,
|
||||
},
|
||||
tarArm64: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_linux.download_tar_arm64"),
|
||||
url: `https://github.com/TriliumNext/Trilium/releases/download/v${version}/TriliumNotes-Server-v${version}-linux-arm64.tar.xz`
|
||||
},
|
||||
nixos: {
|
||||
name: t("download_helper_server_linux.download_nixos"),
|
||||
url: "https://docs.triliumnotes.org/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/On%20NixOS"
|
||||
}
|
||||
}
|
||||
},
|
||||
pikapod: {
|
||||
title: t("download_helper_server_hosted.title"),
|
||||
description: t("download_helper_server_hosted.description"),
|
||||
downloads: {
|
||||
pikapod: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_hosted.download_pikapod"),
|
||||
url: "https://www.pikapods.com/pods?run=trilium-next"
|
||||
},
|
||||
triliumcc: {
|
||||
name: t("download_helper_server_hosted.download_triliumcc"),
|
||||
url: "https://trilium.cc/"
|
||||
pikapod: {
|
||||
title: t("download_helper_server_hosted.title"),
|
||||
description: t("download_helper_server_hosted.description"),
|
||||
downloads: {
|
||||
pikapod: {
|
||||
recommended: true,
|
||||
name: t("download_helper_server_hosted.download_pikapod"),
|
||||
url: "https://www.pikapods.com/pods?run=trilium-next"
|
||||
},
|
||||
triliumcc: {
|
||||
name: t("download_helper_server_hosted.download_triliumcc"),
|
||||
url: "https://trilium.cc/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export function buildDownloadUrl(app: App, platform: Platform, format: string, architecture: Architecture): string {
|
||||
export function buildDownloadUrl(t: TFunction<"translation", undefined>, app: App, platform: Platform, format: string, architecture: Architecture): string {
|
||||
const downloadMatrix = getDownloadMatrix(t);
|
||||
|
||||
if (app === "desktop") {
|
||||
return downloadMatrix.desktop[platform]?.downloads[format].url ??
|
||||
`https://github.com/TriliumNext/Trilium/releases/download/v${version}/TriliumNotes-v${version}-${platform}-${architecture}.${format}`;
|
||||
@@ -218,8 +222,9 @@ export function getPlatform(): Platform | null {
|
||||
}
|
||||
}
|
||||
|
||||
export async function getRecommendedDownload(): Promise<RecommendedDownload | null> {
|
||||
export async function getRecommendedDownload(t: TFunction<"translation", undefined>): Promise<RecommendedDownload | null> {
|
||||
if (typeof window === "undefined") return null;
|
||||
const downloadMatrix = getDownloadMatrix(t);
|
||||
|
||||
const architecture = await getArchitecture();
|
||||
const platform = getPlatform();
|
||||
@@ -233,7 +238,7 @@ export async function getRecommendedDownload(): Promise<RecommendedDownload | nu
|
||||
if (!recommendedDownload) return null;
|
||||
|
||||
const format = recommendedDownload[0];
|
||||
const url = buildDownloadUrl("desktop", platform, format || 'zip', architecture);
|
||||
const url = buildDownloadUrl(t, "desktop", platform, format || 'zip', architecture);
|
||||
|
||||
const platformTitle = platformInfo.title;
|
||||
const name = typeof platformTitle === "string" ? platformTitle : platformTitle[architecture] as string;
|
||||
|
||||
31
apps/website/src/i18n.spec.ts
Normal file
31
apps/website/src/i18n.spec.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { extractLocaleFromUrl, mapLocale, swapLocaleInUrl } from "./i18n";
|
||||
|
||||
describe("mapLocale", () => {
|
||||
it("maps Chinese", () => {
|
||||
expect(mapLocale("zh-TW")).toStrictEqual("zh-Hant");
|
||||
expect(mapLocale("zh-CN")).toStrictEqual("zh-Hans");
|
||||
});
|
||||
|
||||
it("maps languages without countries", () => {
|
||||
expect(mapLocale("ro-RO")).toStrictEqual("ro");
|
||||
expect(mapLocale("ro")).toStrictEqual("ro");
|
||||
});
|
||||
});
|
||||
|
||||
describe("swapLocale", () => {
|
||||
it("swap locale in URL", () => {
|
||||
expect(swapLocaleInUrl("/get-started", "ro")).toStrictEqual("/ro/get-started");
|
||||
expect(swapLocaleInUrl("/ro/get-started", "ro")).toStrictEqual("/ro/get-started");
|
||||
expect(swapLocaleInUrl("/en/get-started", "ro")).toStrictEqual("/ro/get-started");
|
||||
expect(swapLocaleInUrl("/ro/", "en")).toStrictEqual("/en/");
|
||||
});
|
||||
});
|
||||
|
||||
describe("extractLocaleFromUrl", () => {
|
||||
it("properly extracts locale", () => {
|
||||
expect(extractLocaleFromUrl("/en/get-started")).toStrictEqual("en");
|
||||
expect(extractLocaleFromUrl("/get-started")).toStrictEqual(undefined);
|
||||
expect(extractLocaleFromUrl("/")).toStrictEqual(undefined);
|
||||
});
|
||||
});
|
||||
@@ -1,19 +1,50 @@
|
||||
import { default as i18next } from "i18next";
|
||||
import HttpApi from 'i18next-http-backend';
|
||||
import { initReactI18next } from "react-i18next";
|
||||
interface Locale {
|
||||
id: string;
|
||||
name: string;
|
||||
rtl?: boolean;
|
||||
}
|
||||
|
||||
i18next
|
||||
.use(HttpApi)
|
||||
.use(initReactI18next);
|
||||
export const LOCALES: Locale[] = [
|
||||
{ id: "en", name: "English" },
|
||||
{ id: "ro", name: "Română" },
|
||||
{ id: "zh-Hans", name: "简体中文" },
|
||||
{ id: "zh-Hant", name: "繁體中文" },
|
||||
{ id: "fr", name: "Français" },
|
||||
{ id: "it", name: "Italiano" },
|
||||
{ id: "ja", name: "日本語" },
|
||||
{ id: "pl", name: "Polski" },
|
||||
{ id: "es", name: "Español" },
|
||||
{ id: "ar", name: "اَلْعَرَبِيَّةُ", rtl: true },
|
||||
].toSorted((a, b) => a.name.localeCompare(b.name));
|
||||
|
||||
await i18next.init({
|
||||
debug: true,
|
||||
lng: "en",
|
||||
fallbackLng: "en",
|
||||
backend: {
|
||||
loadPath: "/translations/{{lng}}/{{ns}}.json",
|
||||
},
|
||||
returnEmptyString: false
|
||||
});
|
||||
export function mapLocale(locale: string) {
|
||||
if (!locale) return 'en';
|
||||
const lower = locale.toLowerCase();
|
||||
|
||||
export const t = i18next.t;
|
||||
if (lower.startsWith('zh')) {
|
||||
if (lower.includes('tw') || lower.includes('hk') || lower.includes('mo') || lower.includes('hant')) {
|
||||
return 'zh-Hant';
|
||||
}
|
||||
return 'zh-Hans';
|
||||
}
|
||||
|
||||
// Default for everything else
|
||||
return locale.split('-')[0]; // e.g. "en-US" -> "en"
|
||||
}
|
||||
|
||||
export function swapLocaleInUrl(url: string, newLocale: string) {
|
||||
const components = url.split("/");
|
||||
if (components.length === 2) {
|
||||
return `/${newLocale}${url}`;
|
||||
} else {
|
||||
components[1] = newLocale;
|
||||
return components.join("/");
|
||||
}
|
||||
}
|
||||
|
||||
export function extractLocaleFromUrl(url: string) {
|
||||
const localeId = url.split('/')[1];
|
||||
const correspondingLocale = LOCALES.find(l => l.id === localeId);
|
||||
if (!correspondingLocale) return undefined;
|
||||
return localeId;
|
||||
}
|
||||
|
||||
@@ -2,29 +2,78 @@ import './style.css';
|
||||
import { FALLBACK_STARGAZERS_COUNT, getRepoStargazersCount } from './github-utils.js';
|
||||
import { Header } from './components/Header.jsx';
|
||||
import { Home } from './pages/Home/index.jsx';
|
||||
import { LocationProvider, Router, Route, hydrate, prerender as ssr } from 'preact-iso';
|
||||
import { LocationProvider, Router, Route, hydrate, prerender as ssr, useLocation } from 'preact-iso';
|
||||
import { NotFound } from './pages/_404.jsx';
|
||||
import Footer from './components/Footer.js';
|
||||
import GetStarted from './pages/GetStarted/get-started.js';
|
||||
import SupportUs from './pages/SupportUs/SupportUs.js';
|
||||
import { createContext } from 'preact';
|
||||
import { useLayoutEffect, useState } from 'preact/hooks';
|
||||
import { default as i18next, changeLanguage } from 'i18next';
|
||||
import { extractLocaleFromUrl, LOCALES, mapLocale } from './i18n';
|
||||
import HttpApi from 'i18next-http-backend';
|
||||
import { initReactI18next } from "react-i18next";
|
||||
|
||||
export const LocaleContext = createContext('en');
|
||||
|
||||
export function App(props: {repoStargazersCount: number}) {
|
||||
return (
|
||||
<LocationProvider>
|
||||
<Header repoStargazersCount={props.repoStargazersCount} />
|
||||
<main>
|
||||
<Router>
|
||||
<Route path="/" component={Home} />
|
||||
<Route default component={NotFound} />
|
||||
<Route path="/get-started" component={GetStarted} />
|
||||
<Route path="/support-us" component={SupportUs} />
|
||||
</Router>
|
||||
</main>
|
||||
<Footer />
|
||||
<LocaleProvider>
|
||||
<Header repoStargazersCount={props.repoStargazersCount} />
|
||||
<main>
|
||||
<Router>
|
||||
<Route path="/" component={Home} />
|
||||
<Route path="/get-started" component={GetStarted} />
|
||||
<Route path="/support-us" component={SupportUs} />
|
||||
|
||||
<Route path="/:locale:/" component={Home} />
|
||||
<Route path="/:locale:/get-started" component={GetStarted} />
|
||||
<Route path="/:locale:/support-us" component={SupportUs} />
|
||||
|
||||
<Route default component={NotFound} />
|
||||
</Router>
|
||||
</main>
|
||||
<Footer />
|
||||
</LocaleProvider>
|
||||
</LocationProvider>
|
||||
);
|
||||
}
|
||||
|
||||
export function LocaleProvider({ children }) {
|
||||
const { path } = useLocation();
|
||||
const localeId = mapLocale(extractLocaleFromUrl(path) || navigator.language);
|
||||
const [ loaded, setLoaded ] = useState(false);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
i18next
|
||||
.use(HttpApi)
|
||||
.use(initReactI18next);
|
||||
i18next.init({
|
||||
lng: localeId,
|
||||
fallbackLng: "en",
|
||||
backend: {
|
||||
loadPath: "/translations/{{lng}}/{{ns}}.json",
|
||||
},
|
||||
returnEmptyString: false
|
||||
}).then(() => setLoaded(true))
|
||||
}, []);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
if (!loaded) return;
|
||||
changeLanguage(localeId);
|
||||
const correspondingLocale = LOCALES.find(l => l.id === localeId);
|
||||
document.documentElement.lang = localeId;
|
||||
document.documentElement.dir = correspondingLocale?.rtl ? "rtl" : "ltr";
|
||||
}, [ loaded, localeId ]);
|
||||
|
||||
return (
|
||||
<LocaleContext.Provider value={localeId}>
|
||||
{loaded && children}
|
||||
</LocaleContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
hydrate(<App repoStargazersCount={FALLBACK_STARGAZERS_COUNT} />, document.getElementById('app')!);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,20 @@
|
||||
import { useLayoutEffect, useState } from "preact/hooks";
|
||||
import Card from "../../components/Card.js";
|
||||
import Section from "../../components/Section.js";
|
||||
import { App, Architecture, buildDownloadUrl, downloadMatrix, DownloadMatrixEntry, getArchitecture, getPlatform, Platform } from "../../download-helper.js";
|
||||
import { App, Architecture, buildDownloadUrl, DownloadMatrixEntry, getArchitecture, getDownloadMatrix, getPlatform, Platform } from "../../download-helper.js";
|
||||
import { usePageTitle } from "../../hooks.js";
|
||||
import Button, { Link } from "../../components/Button.js";
|
||||
import Icon from "../../components/Icon.js";
|
||||
import helpIcon from "../../assets/boxicons/bx-help-circle.svg?raw";
|
||||
import "./get-started.css";
|
||||
import packageJson from "../../../../../package.json" with { type: "json" };
|
||||
import { t } from "../../i18n.js";
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
export default function DownloadPage() {
|
||||
const { t } = useTranslation();
|
||||
const [ currentArch, setCurrentArch ] = useState<Architecture>("x64");
|
||||
const [ userPlatform, setUserPlatform ] = useState<Platform>();
|
||||
const downloadMatrix = getDownloadMatrix(t);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
getArchitecture().then((arch) => setCurrentArch(arch ?? "x64"));
|
||||
@@ -71,6 +73,7 @@ export function DownloadCard({ app, arch, entry: [ platform, entry ], isRecommen
|
||||
return (typeof text === "string" ? text : text[arch]);
|
||||
}
|
||||
|
||||
const { t } = useTranslation();
|
||||
const allDownloads = Object.entries(entry.downloads);
|
||||
const recommendedDownloads = allDownloads.filter(download => download[1].recommended);
|
||||
const restDownloads = allDownloads.filter(download => !download[1].recommended);
|
||||
@@ -107,7 +110,7 @@ export function DownloadCard({ app, arch, entry: [ platform, entry ], isRecommen
|
||||
{recommendedDownloads.map(recommendedDownload => (
|
||||
<Button
|
||||
className="recommended"
|
||||
href={buildDownloadUrl(app, platform as Platform, recommendedDownload[0], arch)}
|
||||
href={buildDownloadUrl(t, app, platform as Platform, recommendedDownload[0], arch)}
|
||||
text={recommendedDownload[1].name}
|
||||
openExternally={!!recommendedDownload[1].url}
|
||||
/>
|
||||
@@ -117,7 +120,7 @@ export function DownloadCard({ app, arch, entry: [ platform, entry ], isRecommen
|
||||
<div class="other-options">
|
||||
{restDownloads.map(download => (
|
||||
<Link
|
||||
href={buildDownloadUrl(app, platform as Platform, download[0], arch)}
|
||||
href={buildDownloadUrl(t, app, platform as Platform, download[0], arch)}
|
||||
openExternally={!!download[1].url}
|
||||
>
|
||||
{download[1].name}
|
||||
|
||||
@@ -57,6 +57,8 @@ section.hero-section {
|
||||
color: transparent;
|
||||
line-height: 1.1;
|
||||
font-weight: 400;
|
||||
font-size: 2em;
|
||||
margin-block: 0.65em;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@ import boardIcon from "../../assets/boxicons/bx-columns-3.svg?raw";
|
||||
import geomapIcon from "../../assets/boxicons/bx-map.svg?raw";
|
||||
import { getPlatform } from '../../download-helper.js';
|
||||
import { useEffect, useState } from 'preact/hooks';
|
||||
import { t } from '../../i18n.js';
|
||||
import { Trans } from 'react-i18next';
|
||||
import { Trans, useTranslation } from 'react-i18next';
|
||||
|
||||
export function Home() {
|
||||
usePageTitle("");
|
||||
@@ -52,6 +51,7 @@ export function Home() {
|
||||
}
|
||||
|
||||
function HeroSection() {
|
||||
const { t } = useTranslation();
|
||||
const platform = getPlatform();
|
||||
const colorScheme = useColorScheme();
|
||||
const [ screenshotUrl, setScreenshotUrl ] = useState<string>();
|
||||
@@ -96,6 +96,7 @@ function HeroSection() {
|
||||
}
|
||||
|
||||
function OrganizationBenefitsSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<>
|
||||
<Section className="benefits" title={t("organization_benefits.title")}>
|
||||
@@ -110,6 +111,7 @@ function OrganizationBenefitsSection() {
|
||||
}
|
||||
|
||||
function ProductivityBenefitsSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<>
|
||||
<Section className="benefits accented" title={t("productivity_benefits.title")}>
|
||||
@@ -127,8 +129,9 @@ function ProductivityBenefitsSection() {
|
||||
}
|
||||
|
||||
function NoteTypesSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Section className="note-types" title="Multiple ways to represent your information">
|
||||
<Section className="note-types" title={t("note_types.title")}>
|
||||
<ListWithScreenshot horizontal items={[
|
||||
{
|
||||
title: t("note_types.text_title"),
|
||||
@@ -190,6 +193,7 @@ function NoteTypesSection() {
|
||||
}
|
||||
|
||||
function ExtensibilityBenefitsSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<>
|
||||
<Section className="benefits accented" title={t("extensibility_benefits.title")}>
|
||||
@@ -205,8 +209,9 @@ function ExtensibilityBenefitsSection() {
|
||||
}
|
||||
|
||||
function CollectionsSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Section className="collections" title="Collections">
|
||||
<Section className="collections" title={t("collections.title")}>
|
||||
<ListWithScreenshot items={[
|
||||
{
|
||||
title: t("collections.calendar_title"),
|
||||
@@ -247,6 +252,7 @@ function ListWithScreenshot({ items, horizontal, cardExtra }: {
|
||||
cardExtra?: ComponentChildren;
|
||||
}) {
|
||||
const [ selectedItem, setSelectedItem ] = useState(items[0]);
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<div className={`list-with-screenshot ${horizontal ? "horizontal" : ""}`}>
|
||||
@@ -278,6 +284,7 @@ function ListWithScreenshot({ items, horizontal, cardExtra }: {
|
||||
}
|
||||
|
||||
function FaqSection() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Section className="faq" title={t("faq.title")}>
|
||||
<div class="grid-2-cols">
|
||||
@@ -301,6 +308,7 @@ function FaqItem({ question, children }: { question: string; children: Component
|
||||
}
|
||||
|
||||
function FinalCta() {
|
||||
const { t } = useTranslation();
|
||||
return (
|
||||
<Section className="final-cta accented" title={t("final_cta.title")}>
|
||||
<p>{t("final_cta.description")}</p>
|
||||
|
||||
@@ -6,10 +6,10 @@ import buyMeACoffeeIcon from "../../assets/boxicons/bx-buy-me-a-coffee.svg?raw";
|
||||
import Button, { Link } from "../../components/Button.js";
|
||||
import Card from "../../components/Card.js";
|
||||
import { usePageTitle } from "../../hooks.js";
|
||||
import { t } from "../../i18n.js";
|
||||
import { Trans } from "react-i18next";
|
||||
import { Trans, useTranslation } from "react-i18next";
|
||||
|
||||
export default function Donate() {
|
||||
const { t } = useTranslation();
|
||||
usePageTitle(t("support_us.title"));
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import Section from "../components/Section.js";
|
||||
import { usePageTitle } from "../hooks.js";
|
||||
import { t } from "../i18n.js";
|
||||
import "./_404.css";
|
||||
|
||||
export function NotFound() {
|
||||
const { t } = useTranslation();
|
||||
usePageTitle(t("404.title"));
|
||||
|
||||
return (
|
||||
|
||||
@@ -31,7 +31,13 @@ html,
|
||||
body {
|
||||
margin: 0;
|
||||
line-height: 1.5;
|
||||
font-family: Inter, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
|
||||
font-family: Inter,
|
||||
system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial,
|
||||
"Noto Sans", "Noto Sans CJK SC",
|
||||
"Hiragino Sans", "Hiragino Kaku Gothic ProN",
|
||||
"Microsoft YaHei", "Meiryo", "Malgun Gothic",
|
||||
"PingFang SC", "Source Han Sans SC",
|
||||
"Source Han Sans JP", "Source Han Sans KR";
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
|
||||
@@ -14,4 +14,7 @@ export default defineConfig({
|
||||
},
|
||||
}),
|
||||
],
|
||||
test: {
|
||||
environment: "happy-dom"
|
||||
}
|
||||
});
|
||||
|
||||
6
docs/README-ar.md
vendored
6
docs/README-ar.md
vendored
@@ -61,8 +61,8 @@ quick overview:
|
||||
Docker](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||
- [ترقية تريليوم
|
||||
للملاحظات](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
||||
- [Basic Concepts and
|
||||
Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
||||
- [مفاهيم ومميزات
|
||||
اساسية](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
||||
- [Patterns of Personal Knowledge
|
||||
Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
|
||||
|
||||
@@ -110,7 +110,7 @@ quick overview:
|
||||
location pins and GPX tracks
|
||||
* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
|
||||
showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
|
||||
* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
|
||||
* [واجهة REST API](https://triliumnext.github.io/Docs/Wiki/etapi) للأتمتة
|
||||
* Scales well in both usability and performance upwards of 100 000 notes
|
||||
* Touch optimized [mobile
|
||||
frontend](https://triliumnext.github.io/Docs/Wiki/mobile-frontend) for
|
||||
|
||||
2
docs/README-de.md
vendored
2
docs/README-de.md
vendored
@@ -58,7 +58,7 @@ Unsere Dokumentation ist verfügbar in mehreren Formaten:
|
||||
- [Erste Schritte](https://docs.triliumnotes.org/)
|
||||
- [Installationsanleitung](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
||||
- [Docker
|
||||
Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||
Einrichten](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||
- [TriliumNext
|
||||
aktualisieren](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
||||
- [Grundkonzepte und
|
||||
|
||||
135
docs/README-hu.md
vendored
135
docs/README-hu.md
vendored
@@ -9,85 +9,85 @@
|
||||
|
||||
<hr />
|
||||
|
||||
# Trilium Notes
|
||||
# Trilium Jegyzetek
|
||||
|
||||

|
||||
\
|
||||

|
||||
\
|
||||

|
||||
\
|
||||

|
||||
\
|
||||
[](https://app.relative-ci.com/projects/Di5q7dz9daNDZ9UXi0Bp)
|
||||
[](https://hosted.weblate.org/engage/trilium/)
|
||||
[](https://hosted.weblate.org/engage/trilium/)
|
||||
|
||||
[English](./README.md) | [Chinese (Simplified)](./docs/README-ZH_CN.md) |
|
||||
[Chinese (Traditional)](./docs/README-ZH_TW.md) | [Russian](./docs/README-ru.md)
|
||||
| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
|
||||
[Spanish](./docs/README-es.md)
|
||||
[angol](./README.md) | [egyszerűsített kínai](./docs/README-ZH_CN.md) |
|
||||
[hagyományos kínai](./docs/README-ZH_TW.md) | [orosz](./docs/README-ru.md) |
|
||||
[japán](./docs/README-ja.md) | [olasz](./docs/README-it.md) |
|
||||
[spanyol](./docs/README-es.md)
|
||||
|
||||
Trilium Notes is a free and open-source, cross-platform hierarchical note taking
|
||||
application with focus on building large personal knowledge bases.
|
||||
A Trilium Notes egy ingyenes és nyílt forráskódú, platformfüggetlen hierarchikus
|
||||
jegyzetelő alkalmazás, amely nagy személyes tudásbázisok építésére összpontosít.
|
||||
|
||||
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
|
||||
quick overview:
|
||||
A gyors áttekintésért lásd a
|
||||
[képernyőképeket](https://triliumnext.github.io/Docs/Wiki/screenshot-tour):
|
||||
|
||||
<a href="https://triliumnext.github.io/Docs/Wiki/screenshot-tour"><img src="./docs/app.png" alt="Trilium Screenshot" width="1000"></a>
|
||||
|
||||
## ⏬ Download
|
||||
- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) –
|
||||
stable version, recommended for most users.
|
||||
## ⏬ Letöltés
|
||||
- [Legújabb kiadás](https://github.com/TriliumNext/Trilium/releases/latest) –
|
||||
stabil verzió, a legtöbb felhasználó számára ajánlott.
|
||||
- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) –
|
||||
unstable development version, updated daily with the latest features and
|
||||
fixes.
|
||||
instabil fejlesztői verzió, naponta frissül a legújabb funkciókkal és
|
||||
javításokkal.
|
||||
|
||||
## 📚 Documentation
|
||||
## 📚 Dokumentáció
|
||||
|
||||
**Visit our comprehensive documentation at
|
||||
[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
|
||||
**Tekintse meg átfogó dokumentációnkat a [docs.triliumnotes.org]
|
||||
címen(https://docs.triliumnotes.org/)**
|
||||
|
||||
Our documentation is available in multiple formats:
|
||||
- **Online Documentation**: Browse the full documentation at
|
||||
[docs.triliumnotes.org](https://docs.triliumnotes.org/)
|
||||
- **In-App Help**: Press `F1` within Trilium to access the same documentation
|
||||
directly in the application
|
||||
- **GitHub**: Navigate through the [User
|
||||
Guide](./docs/User%20Guide/User%20Guide/) in this repository
|
||||
Dokumentációink többféle formátumban is elérhetők:
|
||||
- **Online dokumentáció**: Böngéssze a teljes dokumentációt a
|
||||
[docs.triliumnotes.org](https://docs.triliumnotes.org/) címen.
|
||||
- **Alkalmazáson belüli súgó**: Nyomja meg az `F1` billentyűt a Triliumon belül,
|
||||
hogy ugyanazt a dokumentációt közvetlenül az alkalmazásban is elérje.
|
||||
- **GitHub**: Navigálj a [Felhasználói
|
||||
útmutatóban](./docs/User%20Guide/User%20Guide/) ebben a repository-ban
|
||||
|
||||
### Quick Links
|
||||
- [Getting Started Guide](https://docs.triliumnotes.org/)
|
||||
- [Installation
|
||||
Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
||||
### Gyorslinkek
|
||||
- [Kezdő lépések útmutatója](https://docs.triliumnotes.org/)
|
||||
- [Telepítési
|
||||
utasítások](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
|
||||
- [Docker
|
||||
Setup](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||
- [Upgrading
|
||||
TriliumNext](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
||||
- [Basic Concepts and
|
||||
Features](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
||||
- [Patterns of Personal Knowledge
|
||||
Base](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
|
||||
beállítás](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation/1.%20Installing%20the%20server/Using%20Docker.md)
|
||||
- [TriliumNext
|
||||
Frissítése](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Upgrading%20TriliumNext.md)
|
||||
- [Alapfogalmak és
|
||||
jellemzők](./docs/User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/Notes.md)
|
||||
- [A személyes tudásbázis
|
||||
mintái](https://triliumnext.github.io/Docs/Wiki/patterns-of-personal-knowledge)
|
||||
|
||||
## 🎁 Features
|
||||
## 🎁 Jellemzők
|
||||
|
||||
* Notes can be arranged into arbitrarily deep tree. Single note can be placed
|
||||
into multiple places in the tree (see
|
||||
[cloning](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
|
||||
* Rich WYSIWYG note editor including e.g. tables, images and
|
||||
[math](https://triliumnext.github.io/Docs/Wiki/text-notes) with markdown
|
||||
* A jegyzetek önkényesen mély fába rendezhetők. Egyetlen jegyzetet lehet
|
||||
elhelyezni a többi fába (lásd
|
||||
[klónozás](https://triliumnext.github.io/Docs/Wiki/cloning-notes))
|
||||
* Gazdag WYSIWYG jegyzetszerkesztő, beleértve például az asztalokat, képeket és
|
||||
[math](https://triliumnext.github.io/Docs/Wiki/text-notes) markdownt
|
||||
[autoformat](https://triliumnext.github.io/Docs/Wiki/text-notes#autoformat)
|
||||
* Support for editing [notes with source
|
||||
code](https://triliumnext.github.io/Docs/Wiki/code-notes), including syntax
|
||||
highlighting
|
||||
* Fast and easy [navigation between
|
||||
notes](https://triliumnext.github.io/Docs/Wiki/note-navigation), full text
|
||||
search and [note
|
||||
hoisting](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
|
||||
* Seamless [note
|
||||
versioning](https://triliumnext.github.io/Docs/Wiki/note-revisions)
|
||||
* Note [attributes](https://triliumnext.github.io/Docs/Wiki/attributes) can be
|
||||
used for note organization, querying and advanced
|
||||
[scripting](https://triliumnext.github.io/Docs/Wiki/scripts)
|
||||
* UI available in English, German, Spanish, French, Romanian, and Chinese
|
||||
(simplified and traditional)
|
||||
* Szerkesztés támogatása [jegyzetek
|
||||
forráskóddal](https://triliumnext.github.io/Docs/Wiki/code-notes), beleértve a
|
||||
szintaxis kiemelését
|
||||
* Gyors és egyszerű [navigáció a jegyzetek
|
||||
között](https://triliumnext.github.io/Docs/Wiki/note-navigation), teljes
|
||||
szöveges keresés és
|
||||
[megjegyzés](https://triliumnext.github.io/Docs/Wiki/note-hoisting)
|
||||
* Zökkenőmentes
|
||||
[jegyzetváltozat](https://triliumnext.github.io/Docs/Wiki/note-revisions)
|
||||
* Megjegyzés [attribútumok](https://triliumnext.github.io/Docs/Wiki/attributes)
|
||||
használható jegyzetszervezéshez, lekérdezéshez és speciális
|
||||
[szkriptelés](https://triliumnext.github.io/Docs/Wiki/scripts)
|
||||
* UI elérhető angol, német, spanyol, francia, román és kínai (egyszerűsített és
|
||||
hagyományos)
|
||||
* Direct [OpenID and TOTP
|
||||
integration](./docs/User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation/Multi-Factor%20Authentication.md)
|
||||
for more secure login
|
||||
@@ -105,11 +105,12 @@ Our documentation is available in multiple formats:
|
||||
* [Relation maps](https://triliumnext.github.io/Docs/Wiki/relation-map) and
|
||||
[link maps](https://triliumnext.github.io/Docs/Wiki/link-map) for visualizing
|
||||
notes and their relations
|
||||
* Mind maps, based on [Mind Elixir](https://docs.mind-elixir.com/)
|
||||
* [Geo maps](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md) with
|
||||
location pins and GPX tracks
|
||||
* [Scripting](https://triliumnext.github.io/Docs/Wiki/scripts) - see [Advanced
|
||||
showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
|
||||
* Elmetérképek, [Mind Elixir](https://docs.mind-elixir.com/) alapján
|
||||
* [Geo térképek](./docs/User%20Guide/User%20Guide/Note%20Types/Geo%20Map.md)
|
||||
helymeghatározó tűkkel és GPX nyomokkal
|
||||
* [Szkriptelés](https://triliumnext.github.io/Docs/Wiki/scripts) - lásd:
|
||||
[Speciális
|
||||
bemutatók](https://triliumnext.github.io/Docs/Wiki/advanced-showcases)
|
||||
* [REST API](https://triliumnext.github.io/Docs/Wiki/etapi) for automation
|
||||
* Scales well in both usability and performance upwards of 100 000 notes
|
||||
* Touch optimized [mobile
|
||||
|
||||
11
package.json
11
package.json
@@ -17,6 +17,7 @@
|
||||
"desktop:start": "pnpm run --filter desktop dev",
|
||||
"desktop:build": "pnpm run --filter desktop build",
|
||||
"desktop:start-prod": "pnpm run --filter desktop start-prod",
|
||||
"website:start": "pnpm run --filter website dev",
|
||||
"website:build": "pnpm run --filter website build",
|
||||
"electron:build": "pnpm desktop:build",
|
||||
"electron:start": "pnpm desktop:start",
|
||||
@@ -40,7 +41,7 @@
|
||||
"@fast-csv/parse": "5.0.5",
|
||||
"@playwright/test": "1.56.1",
|
||||
"@triliumnext/server": "workspace:*",
|
||||
"@types/express": "5.0.3",
|
||||
"@types/express": "5.0.4",
|
||||
"@types/node": "22.18.12",
|
||||
"@vitest/coverage-v8": "3.2.4",
|
||||
"@vitest/ui": "3.2.4",
|
||||
@@ -51,7 +52,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-prettier": "10.1.8",
|
||||
"eslint-plugin-playwright": "2.2.2",
|
||||
"eslint-plugin-react-hooks": "7.0.0",
|
||||
"eslint-plugin-react-hooks": "7.0.1",
|
||||
"happy-dom": "~20.0.0",
|
||||
"jiti": "2.6.1",
|
||||
"jsonc-eslint-parser": "2.4.1",
|
||||
@@ -62,7 +63,7 @@
|
||||
"typescript": "~5.9.0",
|
||||
"typescript-eslint": "8.46.2",
|
||||
"upath": "2.0.1",
|
||||
"vite": "7.1.11",
|
||||
"vite": "7.1.12",
|
||||
"vite-plugin-dts": "~4.5.0",
|
||||
"vitest": "3.2.4"
|
||||
},
|
||||
@@ -80,7 +81,7 @@
|
||||
"url": "https://github.com/TriliumNext/Trilium/issues"
|
||||
},
|
||||
"homepage": "https://triliumnotes.org",
|
||||
"packageManager": "pnpm@10.18.3",
|
||||
"packageManager": "pnpm@10.19.0",
|
||||
"pnpm": {
|
||||
"patchedDependencies": {
|
||||
"@ckeditor/ckeditor5-mention": "patches/@ckeditor__ckeditor5-mention.patch",
|
||||
@@ -103,7 +104,7 @@
|
||||
"on-headers@<1.1.0": ">=1.1.0",
|
||||
"form-data@>=4.0.0 <4.0.4": ">=4.0.4",
|
||||
"form-data@>=3.0.0 <3.0.4": ">=3.0.4",
|
||||
"node-abi": "4.14.0"
|
||||
"node-abi": "4.15.0"
|
||||
},
|
||||
"ignoredBuiltDependencies": [
|
||||
"sqlite3"
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-ckeditor5": ">=9.1.0",
|
||||
"http-server": "14.1.1",
|
||||
"lint-staged": "16.2.5",
|
||||
"lint-staged": "16.2.6",
|
||||
"stylelint": "16.25.0",
|
||||
"stylelint-config-ckeditor5": ">=9.1.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-ckeditor5": ">=9.1.0",
|
||||
"http-server": "14.1.1",
|
||||
"lint-staged": "16.2.5",
|
||||
"lint-staged": "16.2.6",
|
||||
"stylelint": "16.25.0",
|
||||
"stylelint-config-ckeditor5": ">=9.1.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-ckeditor5": ">=9.1.0",
|
||||
"http-server": "14.1.1",
|
||||
"lint-staged": "16.2.5",
|
||||
"lint-staged": "16.2.6",
|
||||
"stylelint": "16.25.0",
|
||||
"stylelint-config-ckeditor5": ">=9.1.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-ckeditor5": ">=9.1.0",
|
||||
"http-server": "14.1.1",
|
||||
"lint-staged": "16.2.5",
|
||||
"lint-staged": "16.2.6",
|
||||
"stylelint": "16.25.0",
|
||||
"stylelint-config-ckeditor5": ">=9.1.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
"eslint": "9.38.0",
|
||||
"eslint-config-ckeditor5": ">=9.1.0",
|
||||
"http-server": "14.1.1",
|
||||
"lint-staged": "16.2.5",
|
||||
"lint-staged": "16.2.6",
|
||||
"stylelint": "16.25.0",
|
||||
"stylelint-config-ckeditor5": ">=9.1.0",
|
||||
"ts-node": "10.9.2",
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"ckeditor5-premium-features": "47.1.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@smithy/middleware-retry": "4.4.4",
|
||||
"@smithy/middleware-retry": "4.4.5",
|
||||
"@types/jquery": "3.5.33"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
"type": "module",
|
||||
"main": "./src/index.ts",
|
||||
"dependencies": {
|
||||
"@codemirror/commands": "6.9.0",
|
||||
"@codemirror/commands": "6.10.0",
|
||||
"@codemirror/lang-css": "6.3.1",
|
||||
"@codemirror/lang-html": "6.4.11",
|
||||
"@codemirror/lang-javascript": "6.2.4",
|
||||
"@codemirror/lang-json": "6.0.2",
|
||||
"@codemirror/lang-markdown": "6.4.0",
|
||||
"@codemirror/lang-markdown": "6.5.0",
|
||||
"@codemirror/lang-php": "6.0.2",
|
||||
"@codemirror/lang-vue": "0.1.3",
|
||||
"@codemirror/lang-xml": "6.1.0",
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
"gfm"
|
||||
],
|
||||
"devDependencies": {
|
||||
"turndown": "7.2.1",
|
||||
"turndown": "7.2.2",
|
||||
"turndown-attendant": "0.0.3"
|
||||
}
|
||||
}
|
||||
|
||||
944
pnpm-lock.yaml
generated
944
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ import { getElectronPath, isNixOS } from "./utils.mjs";
|
||||
|
||||
const LD_LIBRARY_PATH = isNixOS() && execSync("nix eval --raw nixpkgs#gcc.cc.lib").toString("utf-8") + "/lib";
|
||||
|
||||
execSync(`${getElectronPath()} ${process.argv[2]}`, {
|
||||
execSync(`${getElectronPath()} ${process.argv[2]} --no-sandbox`, {
|
||||
stdio: "inherit",
|
||||
env: {
|
||||
...process.env,
|
||||
|
||||
Reference in New Issue
Block a user