feat(notes): export notes with custom template, closes #1734 (#2989)

This commit is contained in:
Huang Xin
2026-01-18 16:56:32 +01:00
committed by GitHub
parent 36b7386e30
commit fd299a61a7
31 changed files with 1781 additions and 55 deletions
@@ -889,5 +889,44 @@
"Only for TTS:": "فقط لـ TTS:",
"Uploaded": "تم الرفع",
"Downloaded": "تم التنزيل",
"Deleted": "تم الحذف"
"Deleted": "تم الحذف",
"Note:": "ملاحظة:",
"Time:": "الوقت:",
"Format Options": "خيارات التنسيق",
"Export Date": "تاريخ التصدير",
"Chapter Titles": "عناوين الفصول",
"Chapter Separator": "فاصل الفصول",
"Highlights": "التمييزات",
"Note Date": "تاريخ الملاحظة",
"Advanced": "متقدم",
"Hide": "إخفاء",
"Show": "إظهار",
"Use Custom Template": "استخدام قالب مخصص",
"Export Template": "قالب التصدير",
"Template Syntax:": "بناء جملة القالب:",
"Insert value": "إدراج قيمة",
"Format date (locale)": "تنسيق التاريخ (محلي)",
"Format date (custom)": "تنسيق التاريخ (مخصص)",
"Conditional": "شرطي",
"Loop": "حلقة",
"Available Variables:": "المتغيرات المتاحة:",
"Book title": "عنوان الكتاب",
"Book author": "مؤلف الكتاب",
"Export date": "تاريخ التصدير",
"Array of chapters": "مصفوفة الفصول",
"Chapter title": "عنوان الفصل",
"Array of annotations": "مصفوفة التعليقات",
"Highlighted text": "النص المميز",
"Annotation note": "ملاحظة التعليق",
"Update time": "وقت التحديث",
"Date Format Tokens:": "رموز تنسيق التاريخ:",
"Year (4 digits)": "السنة (4 أرقام)",
"Month (01-12)": "الشهر (01-12)",
"Day (01-31)": "اليوم (01-31)",
"Hour (00-23)": "الساعة (00-23)",
"Minute (00-59)": "الدقيقة (00-59)",
"Second (00-59)": "الثانية (00-59)",
"Show Source": "إظهار المصدر",
"No content to preview": "لا يوجد محتوى للمعاينة",
"Export": "تصدير"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "শুধুমাত্র TTS-এর জন্য:",
"Uploaded": "আপলোড হয়েছে",
"Downloaded": "ডাউনলোড হয়েছে",
"Deleted": "মুছে ফেলা হয়েছে"
"Deleted": "মুছে ফেলা হয়েছে",
"Note:": "নোট:",
"Time:": "সময়:",
"Format Options": "বিন্যাস বিকল্প",
"Export Date": "রপ্তানি তারিখ",
"Chapter Titles": "অধ্যায়ের শিরোনাম",
"Chapter Separator": "অধ্যায় বিভাজক",
"Highlights": "হাইলাইট",
"Note Date": "নোট তারিখ",
"Advanced": "উন্নত",
"Hide": "লুকান",
"Show": "দেখান",
"Use Custom Template": "কাস্টম টেমপ্লেট ব্যবহার করুন",
"Export Template": "রপ্তানি টেমপ্লেট",
"Template Syntax:": "টেমপ্লেট সিনট্যাক্স:",
"Insert value": "মান সন্নিবেশ করুন",
"Format date (locale)": "তারিখ বিন্যাস (স্থানীয়)",
"Format date (custom)": "তারিখ বিন্যাস (কাস্টম)",
"Conditional": "শর্তসাপেক্ষ",
"Loop": "লুপ",
"Available Variables:": "উপলব্ধ ভেরিয়েবল:",
"Book title": "বইয়ের শিরোনাম",
"Book author": "বইয়ের লেখক",
"Export date": "রপ্তানি তারিখ",
"Array of chapters": "অধ্যায়ের তালিকা",
"Chapter title": "অধ্যায়ের শিরোনাম",
"Array of annotations": "টীকাগুলির তালিকা",
"Highlighted text": "হাইলাইট করা পাঠ্য",
"Annotation note": "টীকা নোট",
"Update time": "আপডেট সময়",
"Date Format Tokens:": "তারিখ বিন্যাস টোকেন:",
"Year (4 digits)": "বছর (4 সংখ্যা)",
"Month (01-12)": "মাস (01-12)",
"Day (01-31)": "দিন (01-31)",
"Hour (00-23)": "ঘণ্টা (00-23)",
"Minute (00-59)": "মিনিট (00-59)",
"Second (00-59)": "সেকেন্ড (00-59)",
"Show Source": "উৎস দেখান",
"No content to preview": "প্রিভিউ করার জন্য কোনো কন্টেন্ট নেই",
"Export": "রপ্তানি"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "TTS ལ་ཁོ་ན།:",
"Uploaded": "ཡར་སྐྱེལ་བྱས་ཟིན།",
"Downloaded": "མར་ལེན་བྱས་ཟིན།",
"Deleted": "བསུབས་ཟིན།"
"Deleted": "བསུབས་ཟིན།",
"Note:": "གསལ་བཤད།:",
"Time:": "དུས་ཚོད།:",
"Format Options": "རྣམ་གཞག་གདམ་ག",
"Export Date": "ཕྱིར་འདོན་ཚེས་གྲངས།",
"Chapter Titles": "ལེའུའི་མཚན།",
"Chapter Separator": "ལེའུའི་དབར་མཚམས།",
"Highlights": "གཙོ་གནད།",
"Note Date": "གསལ་བཤད་ཚེས་གྲངས།",
"Advanced": "མཐོ་རིམ།",
"Hide": "སྦས་པ།",
"Show": "མངོན་པ།",
"Use Custom Template": "རང་བཟོའི་དཔེ་གཞི་བེད་སྤྱོད།",
"Export Template": "ཕྱིར་འདོན་དཔེ་གཞི།",
"Template Syntax:": "དཔེ་གཞིའི་སྒྲིག་གཞི།:",
"Insert value": "གྲངས་ཐང་བཙུགས་པ།",
"Format date (locale)": "ཚེས་གྲངས་རྣམ་གཞག (ས་གནས།)",
"Format date (custom)": "ཚེས་གྲངས་རྣམ་གཞག (རང་བཟོ།)",
"Conditional": "དམིགས་བསལ།",
"Loop": "འཁོར་ལོ།",
"Available Variables:": "བེད་སྤྱད་རུང་བའི་འགྱུར་ཅན།:",
"Book title": "དེབ་མཚན།",
"Book author": "དེབ་རྩོམ་པ་པོ།",
"Export date": "ཕྱིར་འདོན་ཚེས་གྲངས།",
"Array of chapters": "ལེའུའི་ལེབ་ངོས།",
"Chapter title": "ལེའུའི་མཚན།",
"Array of annotations": "གསལ་བཤད་ལེབ་ངོས།",
"Highlighted text": "གཙོ་གནད་ཡིག་རྐྱང་།",
"Annotation note": "གསལ་བཤད་ཟིན་བྲིས།",
"Update time": "གསར་བཅོས་དུས་ཚོད།",
"Date Format Tokens:": "ཚེས་གྲངས་རྣམ་གཞག་རྟགས།:",
"Year (4 digits)": "ལོ། (གྲངས་ཐང་4)",
"Month (01-12)": "ཟླ། (01-12)",
"Day (01-31)": "ཚེས། (01-31)",
"Hour (00-23)": "ཆུ་ཚོད། (00-23)",
"Minute (00-59)": "སྐར་མ། (00-59)",
"Second (00-59)": "སྐར་ཆ། (00-59)",
"Show Source": "འབྱུང་ཁུངས་མངོན་པ།",
"No content to preview": "སྔོན་ལྟ་བྱེད་པའི་དོན་རྐྱེན་མེད།",
"Export": "ཕྱིར་འདོན།"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "Nur für TTS:",
"Uploaded": "Hochgeladen",
"Downloaded": "Heruntergeladen",
"Deleted": "Gelöscht"
"Deleted": "Gelöscht",
"Note:": "Notiz:",
"Time:": "Zeit:",
"Format Options": "Formatoptionen",
"Export Date": "Exportdatum",
"Chapter Titles": "Kapiteltitel",
"Chapter Separator": "Kapiteltrennzeichen",
"Highlights": "Markierungen",
"Note Date": "Notizdatum",
"Advanced": "Erweitert",
"Hide": "Ausblenden",
"Show": "Anzeigen",
"Use Custom Template": "Benutzerdefinierte Vorlage verwenden",
"Export Template": "Exportvorlage",
"Template Syntax:": "Vorlagensyntax:",
"Insert value": "Wert einfügen",
"Format date (locale)": "Datum formatieren (Gebietsschema)",
"Format date (custom)": "Datum formatieren (benutzerdefiniert)",
"Conditional": "Bedingung",
"Loop": "Schleife",
"Available Variables:": "Verfügbare Variablen:",
"Book title": "Buchtitel",
"Book author": "Buchautor",
"Export date": "Exportdatum",
"Array of chapters": "Array von Kapiteln",
"Chapter title": "Kapiteltitel",
"Array of annotations": "Array von Anmerkungen",
"Highlighted text": "Markierter Text",
"Annotation note": "Anmerkungsnotiz",
"Update time": "Aktualisierungszeit",
"Date Format Tokens:": "Datumsformat-Token:",
"Year (4 digits)": "Jahr (4 Ziffern)",
"Month (01-12)": "Monat (01-12)",
"Day (01-31)": "Tag (01-31)",
"Hour (00-23)": "Stunde (00-23)",
"Minute (00-59)": "Minute (00-59)",
"Second (00-59)": "Sekunde (00-59)",
"Show Source": "Quelle anzeigen",
"No content to preview": "Kein Inhalt zur Vorschau",
"Export": "Exportieren"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "Μόνο για TTS:",
"Uploaded": "Μεταφορτώθηκε",
"Downloaded": "Λήφθηκε",
"Deleted": "Διαγράφηκε"
"Deleted": "Διαγράφηκε",
"Note:": "Σημείωση:",
"Time:": "Ώρα:",
"Format Options": "Επιλογές μορφοποίησης",
"Export Date": "Ημερομηνία εξαγωγής",
"Chapter Titles": "Τίτλοι κεφαλαίων",
"Chapter Separator": "Διαχωριστικό κεφαλαίων",
"Highlights": "Επισημάνσεις",
"Note Date": "Ημερομηνία σημείωσης",
"Advanced": "Για προχωρημένους",
"Hide": "Απόκρυψη",
"Show": "Εμφάνιση",
"Use Custom Template": "Χρήση προσαρμοσμένου προτύπου",
"Export Template": "Πρότυπο εξαγωγής",
"Template Syntax:": "Σύνταξη προτύπου:",
"Insert value": "Εισαγωγή τιμής",
"Format date (locale)": "Μορφοποίηση ημερομηνίας (τοπική)",
"Format date (custom)": "Μορφοποίηση ημερομηνίας (προσαρμοσμένη)",
"Conditional": "Υπό όρους",
"Loop": "Βρόχος",
"Available Variables:": "Διαθέσιμες μεταβλητές:",
"Book title": "Τίτλος βιβλίου",
"Book author": "Συγγραφέας βιβλίου",
"Export date": "Ημερομηνία εξαγωγής",
"Array of chapters": "Πίνακας κεφαλαίων",
"Chapter title": "Τίτλος κεφαλαίου",
"Array of annotations": "Πίνακας σχολιασμών",
"Highlighted text": "Επισημασμένο κείμενο",
"Annotation note": "Σημείωση σχολιασμού",
"Update time": "Ώρα ενημέρωσης",
"Date Format Tokens:": "Σύμβολα μορφοποίησης ημερομηνίας:",
"Year (4 digits)": "Έτος (4 ψηφία)",
"Month (01-12)": "Μήνας (01-12)",
"Day (01-31)": "Ημέρα (01-31)",
"Hour (00-23)": "Ώρα (00-23)",
"Minute (00-59)": "Λεπτό (00-59)",
"Second (00-59)": "Δευτερόλεπτο (00-59)",
"Show Source": "Εμφάνιση πηγής",
"No content to preview": "Δεν υπάρχει περιεχόμενο για προεπισκόπηση",
"Export": "Εξαγωγή"
}
@@ -859,5 +859,44 @@
"Only for TTS:": "Solo para TTS:",
"Uploaded": "Subido",
"Downloaded": "Descargado",
"Deleted": "Eliminado"
"Deleted": "Eliminado",
"Note:": "Nota:",
"Time:": "Hora:",
"Format Options": "Opciones de formato",
"Export Date": "Fecha de exportación",
"Chapter Titles": "Títulos de capítulos",
"Chapter Separator": "Separador de capítulos",
"Highlights": "Resaltados",
"Note Date": "Fecha de nota",
"Advanced": "Avanzado",
"Hide": "Ocultar",
"Show": "Mostrar",
"Use Custom Template": "Usar plantilla personalizada",
"Export Template": "Plantilla de exportación",
"Template Syntax:": "Sintaxis de plantilla:",
"Insert value": "Insertar valor",
"Format date (locale)": "Formatear fecha (regional)",
"Format date (custom)": "Formatear fecha (personalizado)",
"Conditional": "Condicional",
"Loop": "Bucle",
"Available Variables:": "Variables disponibles:",
"Book title": "Título del libro",
"Book author": "Autor del libro",
"Export date": "Fecha de exportación",
"Array of chapters": "Lista de capítulos",
"Chapter title": "Título del capítulo",
"Array of annotations": "Lista de anotaciones",
"Highlighted text": "Texto resaltado",
"Annotation note": "Nota de anotación",
"Update time": "Hora de actualización",
"Date Format Tokens:": "Tokens de formato de fecha:",
"Year (4 digits)": "Año (4 dígitos)",
"Month (01-12)": "Mes (01-12)",
"Day (01-31)": "Día (01-31)",
"Hour (00-23)": "Hora (00-23)",
"Minute (00-59)": "Minuto (00-59)",
"Second (00-59)": "Segundo (00-59)",
"Show Source": "Mostrar fuente",
"No content to preview": "Sin contenido para previsualizar",
"Export": "Exportar"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "فقط برای TTS:",
"Uploaded": "بارگذاری شد",
"Downloaded": "دانلود شد",
"Deleted": "حذف شد"
"Deleted": "حذف شد",
"Note:": "یادداشت:",
"Time:": "زمان:",
"Format Options": "گزینه‌های قالب",
"Export Date": "تاریخ خروجی",
"Chapter Titles": "عناوین فصل",
"Chapter Separator": "جداکننده فصل",
"Highlights": "برجسته‌ها",
"Note Date": "تاریخ یادداشت",
"Advanced": "پیشرفته",
"Hide": "پنهان کردن",
"Show": "نمایش",
"Use Custom Template": "استفاده از الگوی سفارشی",
"Export Template": "الگوی خروجی",
"Template Syntax:": "نحو الگو:",
"Insert value": "درج مقدار",
"Format date (locale)": "قالب‌بندی تاریخ (محلی)",
"Format date (custom)": "قالب‌بندی تاریخ (سفارشی)",
"Conditional": "شرطی",
"Loop": "حلقه",
"Available Variables:": "متغیرهای موجود:",
"Book title": "عنوان کتاب",
"Book author": "نویسنده کتاب",
"Export date": "تاریخ خروجی",
"Array of chapters": "آرایه فصل‌ها",
"Chapter title": "عنوان فصل",
"Array of annotations": "آرایه یادداشت‌ها",
"Highlighted text": "متن برجسته‌شده",
"Annotation note": "یادداشت حاشیه",
"Update time": "زمان به‌روزرسانی",
"Date Format Tokens:": "نشانه‌های قالب تاریخ:",
"Year (4 digits)": "سال (۴ رقم)",
"Month (01-12)": "ماه (۰۱-۱۲)",
"Day (01-31)": "روز (۰۱-۳۱)",
"Hour (00-23)": "ساعت (۰۰-۲۳)",
"Minute (00-59)": "دقیقه (۰۰-۵۹)",
"Second (00-59)": "ثانیه (۰۰-۵۹)",
"Show Source": "نمایش منبع",
"No content to preview": "محتوایی برای پیش‌نمایش وجود ندارد",
"Export": "خروجی"
}
@@ -859,5 +859,44 @@
"Only for TTS:": "Uniquement pour TTS :",
"Uploaded": "Téléversé",
"Downloaded": "Téléchargé",
"Deleted": "Supprimé"
"Deleted": "Supprimé",
"Note:": "Note :",
"Time:": "Heure :",
"Format Options": "Options de format",
"Export Date": "Date d'export",
"Chapter Titles": "Titres de chapitres",
"Chapter Separator": "Séparateur de chapitres",
"Highlights": "Surlignages",
"Note Date": "Date de note",
"Advanced": "Avancé",
"Hide": "Masquer",
"Show": "Afficher",
"Use Custom Template": "Utiliser un modèle personnalisé",
"Export Template": "Modèle d'export",
"Template Syntax:": "Syntaxe du modèle :",
"Insert value": "Insérer une valeur",
"Format date (locale)": "Formater la date (locale)",
"Format date (custom)": "Formater la date (personnalisé)",
"Conditional": "Conditionnel",
"Loop": "Boucle",
"Available Variables:": "Variables disponibles :",
"Book title": "Titre du livre",
"Book author": "Auteur du livre",
"Export date": "Date d'export",
"Array of chapters": "Liste de chapitres",
"Chapter title": "Titre du chapitre",
"Array of annotations": "Liste d'annotations",
"Highlighted text": "Texte surligné",
"Annotation note": "Note d'annotation",
"Update time": "Heure de mise à jour",
"Date Format Tokens:": "Jetons de format de date :",
"Year (4 digits)": "Année (4 chiffres)",
"Month (01-12)": "Mois (01-12)",
"Day (01-31)": "Jour (01-31)",
"Hour (00-23)": "Heure (00-23)",
"Minute (00-59)": "Minute (00-59)",
"Second (00-59)": "Seconde (00-59)",
"Show Source": "Afficher la source",
"No content to preview": "Aucun contenu à prévisualiser",
"Export": "Exporter"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "केवल TTS के लिए:",
"Uploaded": "अपलोड किया गया",
"Downloaded": "डाउनलोड किया गया",
"Deleted": "हटाया गया"
"Deleted": "हटाया गया",
"Note:": "नोट:",
"Time:": "समय:",
"Format Options": "प्रारूप विकल्प",
"Export Date": "निर्यात तिथि",
"Chapter Titles": "अध्याय शीर्षक",
"Chapter Separator": "अध्याय विभाजक",
"Highlights": "हाइलाइट्स",
"Note Date": "नोट तिथि",
"Advanced": "उन्नत",
"Hide": "छिपाएं",
"Show": "दिखाएं",
"Use Custom Template": "कस्टम टेम्पलेट उपयोग करें",
"Export Template": "निर्यात टेम्पलेट",
"Template Syntax:": "टेम्पलेट सिंटैक्स:",
"Insert value": "मान डालें",
"Format date (locale)": "तिथि फ़ॉर्मेट करें (स्थानीय)",
"Format date (custom)": "तिथि फ़ॉर्मेट करें (कस्टम)",
"Conditional": "सशर्त",
"Loop": "लूप",
"Available Variables:": "उपलब्ध चर:",
"Book title": "पुस्तक शीर्षक",
"Book author": "पुस्तक लेखक",
"Export date": "निर्यात तिथि",
"Array of chapters": "अध्यायों की सूची",
"Chapter title": "अध्याय शीर्षक",
"Array of annotations": "एनोटेशन की सूची",
"Highlighted text": "हाइलाइट किया गया पाठ",
"Annotation note": "एनोटेशन नोट",
"Update time": "अपडेट समय",
"Date Format Tokens:": "तिथि प्रारूप टोकन:",
"Year (4 digits)": "वर्ष (4 अंक)",
"Month (01-12)": "माह (01-12)",
"Day (01-31)": "दिन (01-31)",
"Hour (00-23)": "घंटा (00-23)",
"Minute (00-59)": "मिनट (00-59)",
"Second (00-59)": "सेकंड (00-59)",
"Show Source": "स्रोत दिखाएं",
"No content to preview": "पूर्वावलोकन के लिए कोई सामग्री नहीं",
"Export": "निर्यात करें"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "Hanya untuk TTS:",
"Uploaded": "Diunggah",
"Downloaded": "Diunduh",
"Deleted": "Dihapus"
"Deleted": "Dihapus",
"Note:": "Catatan:",
"Time:": "Waktu:",
"Format Options": "Opsi Format",
"Export Date": "Tanggal Ekspor",
"Chapter Titles": "Judul Bab",
"Chapter Separator": "Pemisah Bab",
"Highlights": "Sorotan",
"Note Date": "Tanggal Catatan",
"Advanced": "Lanjutan",
"Hide": "Sembunyikan",
"Show": "Tampilkan",
"Use Custom Template": "Gunakan Template Kustom",
"Export Template": "Template Ekspor",
"Template Syntax:": "Sintaks Template:",
"Insert value": "Masukkan nilai",
"Format date (locale)": "Format tanggal (lokal)",
"Format date (custom)": "Format tanggal (kustom)",
"Conditional": "Kondisional",
"Loop": "Loop",
"Available Variables:": "Variabel yang Tersedia:",
"Book title": "Judul buku",
"Book author": "Penulis buku",
"Export date": "Tanggal ekspor",
"Array of chapters": "Daftar bab",
"Chapter title": "Judul bab",
"Array of annotations": "Daftar anotasi",
"Highlighted text": "Teks yang disorot",
"Annotation note": "Catatan anotasi",
"Update time": "Waktu pembaruan",
"Date Format Tokens:": "Token Format Tanggal:",
"Year (4 digits)": "Tahun (4 digit)",
"Month (01-12)": "Bulan (01-12)",
"Day (01-31)": "Hari (01-31)",
"Hour (00-23)": "Jam (00-23)",
"Minute (00-59)": "Menit (00-59)",
"Second (00-59)": "Detik (00-59)",
"Show Source": "Tampilkan Sumber",
"No content to preview": "Tidak ada konten untuk dipratinjau",
"Export": "Ekspor"
}
@@ -859,5 +859,44 @@
"Only for TTS:": "Solo per TTS:",
"Uploaded": "Caricato",
"Downloaded": "Scaricato",
"Deleted": "Eliminato"
"Deleted": "Eliminato",
"Note:": "Nota:",
"Time:": "Ora:",
"Format Options": "Opzioni formato",
"Export Date": "Data esportazione",
"Chapter Titles": "Titoli capitoli",
"Chapter Separator": "Separatore capitoli",
"Highlights": "Evidenziazioni",
"Note Date": "Data nota",
"Advanced": "Avanzate",
"Hide": "Nascondi",
"Show": "Mostra",
"Use Custom Template": "Usa modello personalizzato",
"Export Template": "Modello esportazione",
"Template Syntax:": "Sintassi modello:",
"Insert value": "Inserisci valore",
"Format date (locale)": "Formatta data (locale)",
"Format date (custom)": "Formatta data (personalizzato)",
"Conditional": "Condizionale",
"Loop": "Ciclo",
"Available Variables:": "Variabili disponibili:",
"Book title": "Titolo libro",
"Book author": "Autore libro",
"Export date": "Data esportazione",
"Array of chapters": "Elenco capitoli",
"Chapter title": "Titolo capitolo",
"Array of annotations": "Elenco annotazioni",
"Highlighted text": "Testo evidenziato",
"Annotation note": "Nota annotazione",
"Update time": "Ora aggiornamento",
"Date Format Tokens:": "Token formato data:",
"Year (4 digits)": "Anno (4 cifre)",
"Month (01-12)": "Mese (01-12)",
"Day (01-31)": "Giorno (01-31)",
"Hour (00-23)": "Ora (00-23)",
"Minute (00-59)": "Minuto (00-59)",
"Second (00-59)": "Secondo (00-59)",
"Show Source": "Mostra sorgente",
"No content to preview": "Nessun contenuto da visualizzare",
"Export": "Esporta"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "TTSのみ:",
"Uploaded": "アップロード済み",
"Downloaded": "ダウンロード済み",
"Deleted": "削除済み"
"Deleted": "削除済み",
"Note:": "ノート:",
"Time:": "時刻:",
"Format Options": "形式オプション",
"Export Date": "エクスポート日",
"Chapter Titles": "章タイトル",
"Chapter Separator": "章区切り",
"Highlights": "ハイライト",
"Note Date": "ノート日付",
"Advanced": "詳細設定",
"Hide": "非表示",
"Show": "表示",
"Use Custom Template": "カスタムテンプレート使用",
"Export Template": "エクスポートテンプレート",
"Template Syntax:": "テンプレート構文:",
"Insert value": "値を挿入",
"Format date (locale)": "日付形式(ロケール)",
"Format date (custom)": "日付形式(カスタム)",
"Conditional": "条件分岐",
"Loop": "ループ",
"Available Variables:": "利用可能な変数:",
"Book title": "本のタイトル",
"Book author": "著者",
"Export date": "エクスポート日",
"Array of chapters": "章の配列",
"Chapter title": "章タイトル",
"Array of annotations": "注釈の配列",
"Highlighted text": "ハイライトテキスト",
"Annotation note": "注釈ノート",
"Update time": "更新時刻",
"Date Format Tokens:": "日付形式トークン:",
"Year (4 digits)": "年(4桁)",
"Month (01-12)": "月(01-12)",
"Day (01-31)": "日(01-31)",
"Hour (00-23)": "時(00-23)",
"Minute (00-59)": "分(00-59)",
"Second (00-59)": "秒(00-59)",
"Show Source": "ソース表示",
"No content to preview": "プレビューするコンテンツがありません",
"Export": "エクスポート"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "TTS 전용:",
"Uploaded": "업로드됨",
"Downloaded": "다운로드됨",
"Deleted": "삭제됨"
"Deleted": "삭제됨",
"Note:": "노트:",
"Time:": "시간:",
"Format Options": "형식 옵션",
"Export Date": "내보내기 날짜",
"Chapter Titles": "챕터 제목",
"Chapter Separator": "챕터 구분 기호",
"Highlights": "하이라이트",
"Note Date": "노트 날짜",
"Advanced": "고급",
"Hide": "숨기기",
"Show": "표시",
"Use Custom Template": "사용자 지정 템플릿 사용",
"Export Template": "내보내기 템플릿",
"Template Syntax:": "템플릿 구문:",
"Insert value": "값 삽입",
"Format date (locale)": "날짜 형식 (로케일)",
"Format date (custom)": "날짜 형식 (사용자 지정)",
"Conditional": "조건부",
"Loop": "반복",
"Available Variables:": "사용 가능한 변수:",
"Book title": "책 제목",
"Book author": "책 저자",
"Export date": "내보내기 날짜",
"Array of chapters": "챕터 배열",
"Chapter title": "챕터 제목",
"Array of annotations": "주석 배열",
"Highlighted text": "하이라이트된 텍스트",
"Annotation note": "주석 노트",
"Update time": "업데이트 시간",
"Date Format Tokens:": "날짜 형식 토큰:",
"Year (4 digits)": "연도 (4자리)",
"Month (01-12)": "월 (01-12)",
"Day (01-31)": "일 (01-31)",
"Hour (00-23)": "시 (00-23)",
"Minute (00-59)": "분 (00-59)",
"Second (00-59)": "초 (00-59)",
"Show Source": "소스 표시",
"No content to preview": "미리 볼 내용 없음",
"Export": "내보내기"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "Hanya untuk TTS:",
"Uploaded": "Dimuat naik",
"Downloaded": "Dimuat turun",
"Deleted": "Dipadam"
"Deleted": "Dipadam",
"Note:": "Nota:",
"Time:": "Masa:",
"Format Options": "Pilihan Format",
"Export Date": "Tarikh Eksport",
"Chapter Titles": "Tajuk Bab",
"Chapter Separator": "Pemisah Bab",
"Highlights": "Serlahan",
"Note Date": "Tarikh Nota",
"Advanced": "Lanjutan",
"Hide": "Sembunyikan",
"Show": "Tunjukkan",
"Use Custom Template": "Gunakan Templat Tersuai",
"Export Template": "Templat Eksport",
"Template Syntax:": "Sintaks Templat:",
"Insert value": "Masukkan nilai",
"Format date (locale)": "Format tarikh (tempatan)",
"Format date (custom)": "Format tarikh (tersuai)",
"Conditional": "Bersyarat",
"Loop": "Gelung",
"Available Variables:": "Pembolehubah Tersedia:",
"Book title": "Tajuk buku",
"Book author": "Pengarang buku",
"Export date": "Tarikh eksport",
"Array of chapters": "Senarai bab",
"Chapter title": "Tajuk bab",
"Array of annotations": "Senarai anotasi",
"Highlighted text": "Teks yang diserlahkan",
"Annotation note": "Nota anotasi",
"Update time": "Masa kemas kini",
"Date Format Tokens:": "Token Format Tarikh:",
"Year (4 digits)": "Tahun (4 digit)",
"Month (01-12)": "Bulan (01-12)",
"Day (01-31)": "Hari (01-31)",
"Hour (00-23)": "Jam (00-23)",
"Minute (00-59)": "Minit (00-59)",
"Second (00-59)": "Saat (00-59)",
"Show Source": "Tunjukkan Sumber",
"No content to preview": "Tiada kandungan untuk pratonton",
"Export": "Eksport"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "Alleen voor TTS:",
"Uploaded": "Geüpload",
"Downloaded": "Gedownload",
"Deleted": "Verwijderd"
"Deleted": "Verwijderd",
"Note:": "Notitie:",
"Time:": "Tijd:",
"Format Options": "Formaatopties",
"Export Date": "Exportdatum",
"Chapter Titles": "Hoofdstuktitels",
"Chapter Separator": "Hoofdstukscheiding",
"Highlights": "Markeringen",
"Note Date": "Notitiedatum",
"Advanced": "Geavanceerd",
"Hide": "Verbergen",
"Show": "Tonen",
"Use Custom Template": "Aangepast sjabloon gebruiken",
"Export Template": "Exportsjabloon",
"Template Syntax:": "Sjabloonsyntaxis:",
"Insert value": "Waarde invoegen",
"Format date (locale)": "Datum opmaken (lokaal)",
"Format date (custom)": "Datum opmaken (aangepast)",
"Conditional": "Voorwaardelijk",
"Loop": "Lus",
"Available Variables:": "Beschikbare variabelen:",
"Book title": "Boektitel",
"Book author": "Boekauteur",
"Export date": "Exportdatum",
"Array of chapters": "Reeks hoofdstukken",
"Chapter title": "Hoofdstuktitel",
"Array of annotations": "Reeks annotaties",
"Highlighted text": "Gemarkeerde tekst",
"Annotation note": "Annotatienotitie",
"Update time": "Updatetijd",
"Date Format Tokens:": "Datumformaattokens:",
"Year (4 digits)": "Jaar (4 cijfers)",
"Month (01-12)": "Maand (01-12)",
"Day (01-31)": "Dag (01-31)",
"Hour (00-23)": "Uur (00-23)",
"Minute (00-59)": "Minuut (00-59)",
"Second (00-59)": "Seconde (00-59)",
"Show Source": "Bron tonen",
"No content to preview": "Geen inhoud om te bekijken",
"Export": "Exporteren"
}
@@ -869,5 +869,44 @@
"Only for TTS:": "Tylko dla TTS:",
"Uploaded": "Przesłano",
"Downloaded": "Pobrano",
"Deleted": "Usunięto"
"Deleted": "Usunięto",
"Note:": "Notatka:",
"Time:": "Czas:",
"Format Options": "Opcje formatu",
"Export Date": "Data eksportu",
"Chapter Titles": "Tytuły rozdziałów",
"Chapter Separator": "Separator rozdziałów",
"Highlights": "Zaznaczenia",
"Note Date": "Data notatki",
"Advanced": "Zaawansowane",
"Hide": "Ukryj",
"Show": "Pokaż",
"Use Custom Template": "Użyj własnego szablonu",
"Export Template": "Szablon eksportu",
"Template Syntax:": "Składnia szablonu:",
"Insert value": "Wstaw wartość",
"Format date (locale)": "Formatuj datę (lokalizacja)",
"Format date (custom)": "Formatuj datę (własny)",
"Conditional": "Warunkowy",
"Loop": "Pętla",
"Available Variables:": "Dostępne zmienne:",
"Book title": "Tytuł książki",
"Book author": "Autor książki",
"Export date": "Data eksportu",
"Array of chapters": "Tablica rozdziałów",
"Chapter title": "Tytuł rozdziału",
"Array of annotations": "Tablica adnotacji",
"Highlighted text": "Zaznaczony tekst",
"Annotation note": "Notatka adnotacji",
"Update time": "Czas aktualizacji",
"Date Format Tokens:": "Tokeny formatu daty:",
"Year (4 digits)": "Rok (4 cyfry)",
"Month (01-12)": "Miesiąc (01-12)",
"Day (01-31)": "Dzień (01-31)",
"Hour (00-23)": "Godzina (00-23)",
"Minute (00-59)": "Minuta (00-59)",
"Second (00-59)": "Sekunda (00-59)",
"Show Source": "Pokaż źródło",
"No content to preview": "Brak treści do podglądu",
"Export": "Eksportuj"
}
@@ -859,5 +859,44 @@
"Only for TTS:": "Apenas para TTS:",
"Uploaded": "Enviado",
"Downloaded": "Baixado",
"Deleted": "Excluído"
"Deleted": "Excluído",
"Note:": "Nota:",
"Time:": "Hora:",
"Format Options": "Opções de formato",
"Export Date": "Data de exportação",
"Chapter Titles": "Títulos dos capítulos",
"Chapter Separator": "Separador de capítulos",
"Highlights": "Destaques",
"Note Date": "Data da nota",
"Advanced": "Avançado",
"Hide": "Ocultar",
"Show": "Mostrar",
"Use Custom Template": "Usar modelo personalizado",
"Export Template": "Modelo de exportação",
"Template Syntax:": "Sintaxe do modelo:",
"Insert value": "Inserir valor",
"Format date (locale)": "Formatar data (local)",
"Format date (custom)": "Formatar data (personalizado)",
"Conditional": "Condicional",
"Loop": "Loop",
"Available Variables:": "Variáveis disponíveis:",
"Book title": "Título do livro",
"Book author": "Autor do livro",
"Export date": "Data de exportação",
"Array of chapters": "Lista de capítulos",
"Chapter title": "Título do capítulo",
"Array of annotations": "Lista de anotações",
"Highlighted text": "Texto destacado",
"Annotation note": "Nota de anotação",
"Update time": "Hora de atualização",
"Date Format Tokens:": "Tokens de formato de data:",
"Year (4 digits)": "Ano (4 dígitos)",
"Month (01-12)": "Mês (01-12)",
"Day (01-31)": "Dia (01-31)",
"Hour (00-23)": "Hora (00-23)",
"Minute (00-59)": "Minuto (00-59)",
"Second (00-59)": "Segundo (00-59)",
"Show Source": "Mostrar fonte",
"No content to preview": "Sem conteúdo para visualizar",
"Export": "Exportar"
}
@@ -869,5 +869,44 @@
"Only for TTS:": "Только для TTS:",
"Uploaded": "Загружено",
"Downloaded": "Скачано",
"Deleted": "Удалено"
"Deleted": "Удалено",
"Note:": "Примечание:",
"Time:": "Время:",
"Format Options": "Параметры формата",
"Export Date": "Дата экспорта",
"Chapter Titles": "Названия глав",
"Chapter Separator": "Разделитель глав",
"Highlights": "Выделения",
"Note Date": "Дата примечания",
"Advanced": "Дополнительно",
"Hide": "Скрыть",
"Show": "Показать",
"Use Custom Template": "Использовать свой шаблон",
"Export Template": "Шаблон экспорта",
"Template Syntax:": "Синтаксис шаблона:",
"Insert value": "Вставить значение",
"Format date (locale)": "Форматировать дату (локаль)",
"Format date (custom)": "Форматировать дату (свой)",
"Conditional": "Условный",
"Loop": "Цикл",
"Available Variables:": "Доступные переменные:",
"Book title": "Название книги",
"Book author": "Автор книги",
"Export date": "Дата экспорта",
"Array of chapters": "Массив глав",
"Chapter title": "Название главы",
"Array of annotations": "Массив примечаний",
"Highlighted text": "Выделенный текст",
"Annotation note": "Примечание аннотации",
"Update time": "Время обновления",
"Date Format Tokens:": "Токены формата даты:",
"Year (4 digits)": "Год (4 цифры)",
"Month (01-12)": "Месяц (01-12)",
"Day (01-31)": "День (01-31)",
"Hour (00-23)": "Час (00-23)",
"Minute (00-59)": "Минута (00-59)",
"Second (00-59)": "Секунда (00-59)",
"Show Source": "Показать источник",
"No content to preview": "Нет содержимого для просмотра",
"Export": "Экспортировать"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "TTS සඳහා පමණක්:",
"Uploaded": "උඩුගත කරන ලදී",
"Downloaded": "බාගත කරන ලදී",
"Deleted": "මකා දමන ලදී"
"Deleted": "මකා දමන ලදී",
"Note:": "සටහන:",
"Time:": "කාලය:",
"Format Options": "ආකෘති විකල්ප",
"Export Date": "අපනයන දිනය",
"Chapter Titles": "කොටස් මාතෘකා",
"Chapter Separator": "කොටස් වෙන්කරු",
"Highlights": "ඉස්මතු කිරීම්",
"Note Date": "සටහන දිනය",
"Advanced": "උසස්",
"Hide": "සඟවන්න",
"Show": "පෙන්වන්න",
"Use Custom Template": "අභිරුචි සැකිල්ල භාවිතා කරන්න",
"Export Template": "අපනයන සැකිල්ල",
"Template Syntax:": "සැකිල්ලේ ව්‍යවස්ථාව:",
"Insert value": "වටිනාකම ඇතුළත් කරන්න",
"Format date (locale)": "දිනය ආකෘතිය (දේශීය)",
"Format date (custom)": "අභිරුචි දිනය ආකෘතිය",
"Conditional": "ශර්තමය",
"Loop": "ලූප්",
"Available Variables:": "ලබා ගත හැකි විචල්‍ය:",
"Book title": "පොත් මාතෘකාව",
"Book author": "පොත් රචකයා",
"Export date": "අපනයන දිනය",
"Array of chapters": "කොටස් අරය",
"Chapter title": "කොටස් මාතෘකාව",
"Array of annotations": "අනුසටහන් අරය",
"Highlighted text": "ඉස්මතු කළ පෙළ",
"Annotation note": "අනුසටහන් සටහන",
"Update time": "යාවත්කාලීන කාලය",
"Date Format Tokens:": "දිනය ආකෘති ටෝකන:",
"Year (4 digits)": "වසර (අංක 4)",
"Month (01-12)": "මාසය (01-12)",
"Day (01-31)": "දින (01-31)",
"Hour (00-23)": "පැය (00-23)",
"Minute (00-59)": "මිනිත්තු (00-59)",
"Second (00-59)": "තත්පර (00-59)",
"Show Source": "මූලාශ්‍රය පෙන්වන්න",
"No content to preview": "පෙරදසුන සඳහා අන්තර්ගතයක් නැත",
"Export": "අපනයනය කරන්න"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "Endast för TTS:",
"Uploaded": "Uppladdad",
"Downloaded": "Nedladdad",
"Deleted": "Borttagen"
"Deleted": "Borttagen",
"Note:": "Anteckning:",
"Time:": "Tid:",
"Format Options": "Formatalternativ",
"Export Date": "Exportdatum",
"Chapter Titles": "Kapiteltitlar",
"Chapter Separator": "Kapitelavgränsare",
"Highlights": "Markeringar",
"Note Date": "Anteckningsdatum",
"Advanced": "Avancerat",
"Hide": "Dölj",
"Show": "Visa",
"Use Custom Template": "Använd anpassad mall",
"Export Template": "Exportmall",
"Template Syntax:": "Mallsyntax:",
"Insert value": "Infoga värde",
"Format date (locale)": "Formatera datum (lokal)",
"Format date (custom)": "Formatera datum (anpassad)",
"Conditional": "Villkorlig",
"Loop": "Loop",
"Available Variables:": "Tillgängliga variabler:",
"Book title": "Boktitel",
"Book author": "Bokförfattare",
"Export date": "Exportdatum",
"Array of chapters": "Lista med kapitel",
"Chapter title": "Kapiteltitel",
"Array of annotations": "Lista med anteckningar",
"Highlighted text": "Markerad text",
"Annotation note": "Anteckningsnotering",
"Update time": "Uppdateringstid",
"Date Format Tokens:": "Datumformattecken:",
"Year (4 digits)": "År (4 siffror)",
"Month (01-12)": "Månad (01-12)",
"Day (01-31)": "Dag (01-31)",
"Hour (00-23)": "Timme (00-23)",
"Minute (00-59)": "Minut (00-59)",
"Second (00-59)": "Sekund (00-59)",
"Show Source": "Visa källa",
"No content to preview": "Inget innehåll att förhandsgranska",
"Export": "Exportera"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "TTS க்கு மட்டும்:",
"Uploaded": "பதிவேற்றப்பட்டது",
"Downloaded": "பதிவிறக்கப்பட்டது",
"Deleted": "நீக்கப்பட்டது"
"Deleted": "நீக்கப்பட்டது",
"Note:": "குறிப்பு:",
"Time:": "நேரம்:",
"Format Options": "வடிவமைப்பு விருப்பங்கள்",
"Export Date": "ஏற்றுமதி தேதி",
"Chapter Titles": "அத்தியாயத் தலைப்புகள்",
"Chapter Separator": "அத்தியாய பிரிப்பான்",
"Highlights": "சிறப்பம்சங்கள்",
"Note Date": "குறிப்பு தேதி",
"Advanced": "மேம்பட்ட",
"Hide": "மறை",
"Show": "காட்டு",
"Use Custom Template": "தனிப்பயன் வார்ப்புரு பயன்படுத்து",
"Export Template": "ஏற்றுமதி வார்ப்புரு",
"Template Syntax:": "வார்ப்புரு தொடரியல்:",
"Insert value": "மதிப்பு செருகு",
"Format date (locale)": "தேதி வடிவமைப்பு (உள்ளூர்)",
"Format date (custom)": "தேதி வடிவமைப்பு (தனிப்பயன்)",
"Conditional": "நிபந்தனை",
"Loop": "சுழற்சி",
"Available Variables:": "கிடைக்கும் மாறிகள்:",
"Book title": "புத்தகத் தலைப்பு",
"Book author": "புத்தக ஆசிரியர்",
"Export date": "ஏற்றுமதி தேதி",
"Array of chapters": "அத்தியாயங்களின் பட்டியல்",
"Chapter title": "அத்தியாய தலைப்பு",
"Array of annotations": "குறிப்புகளின் பட்டியல்",
"Highlighted text": "முன்னிலைப்படுத்தப்பட்ட உரை",
"Annotation note": "குறிப்பு குறிப்பு",
"Update time": "புதுப்பிப்பு நேரம்",
"Date Format Tokens:": "தேதி வடிவமைப்பு டோக்கன்கள்:",
"Year (4 digits)": "ஆண்டு (4 இலக்கங்கள்)",
"Month (01-12)": "மாதம் (01-12)",
"Day (01-31)": "நாள் (01-31)",
"Hour (00-23)": "மணி (00-23)",
"Minute (00-59)": "நிமிடம் (00-59)",
"Second (00-59)": "விநாடி (00-59)",
"Show Source": "மூலத்தைக் காட்டு",
"No content to preview": "முன்னோட்டத்திற்கு உள்ளடக்கம் இல்லை",
"Export": "ஏற்றுமதி"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "สำหรับ TTS เท่านั้น:",
"Uploaded": "อัปโหลดแล้ว",
"Downloaded": "ดาวน์โหลดแล้ว",
"Deleted": "ลบแล้ว"
"Deleted": "ลบแล้ว",
"Note:": "หมายเหตุ:",
"Time:": "เวลา:",
"Format Options": "ตัวเลือกรูปแบบ",
"Export Date": "วันที่ส่งออก",
"Chapter Titles": "ชื่อบท",
"Chapter Separator": "ตัวคั่นบท",
"Highlights": "ไฮไลต์",
"Note Date": "วันที่หมายเหตุ",
"Advanced": "ขั้นสูง",
"Hide": "ซ่อน",
"Show": "แสดง",
"Use Custom Template": "ใช้เทมเพลตที่กำหนดเอง",
"Export Template": "เทมเพลตส่งออก",
"Template Syntax:": "ไวยากรณ์เทมเพลต:",
"Insert value": "แทรกค่า",
"Format date (locale)": "จัดรูปแบบวันที่ (ท้องถิ่น)",
"Format date (custom)": "จัดรูปแบบวันที่ (กำหนดเอง)",
"Conditional": "เงื่อนไข",
"Loop": "ลูป",
"Available Variables:": "ตัวแปรที่พร้อมใช้งาน:",
"Book title": "ชื่อหนังสือ",
"Book author": "ผู้แต่งหนังสือ",
"Export date": "วันที่ส่งออก",
"Array of chapters": "อาร์เรย์ของบท",
"Chapter title": "ชื่อบท",
"Array of annotations": "อาร์เรย์ของคำอธิบาย",
"Highlighted text": "ข้อความที่ไฮไลต์",
"Annotation note": "หมายเหตุคำอธิบาย",
"Update time": "เวลาอัปเดต",
"Date Format Tokens:": "โทเค็นรูปแบบวันที่:",
"Year (4 digits)": "ปี (4 หลัก)",
"Month (01-12)": "เดือน (01-12)",
"Day (01-31)": "วัน (01-31)",
"Hour (00-23)": "ชั่วโมง (00-23)",
"Minute (00-59)": "นาที (00-59)",
"Second (00-59)": "วินาที (00-59)",
"Show Source": "แสดงซอร์ส",
"No content to preview": "ไม่มีเนื้อหาให้แสดงตัวอย่าง",
"Export": "ส่งออก"
}
@@ -849,5 +849,44 @@
"Only for TTS:": "Sadece TTS için:",
"Uploaded": "Yüklendi",
"Downloaded": "İndirildi",
"Deleted": "Silindi"
"Deleted": "Silindi",
"Note:": "Not:",
"Time:": "Saat:",
"Format Options": "Format Seçenekleri",
"Export Date": "Dışa Aktarma Tarihi",
"Chapter Titles": "Bölüm Başlıkları",
"Chapter Separator": "Bölüm Ayracı",
"Highlights": "Vurgular",
"Note Date": "Not Tarihi",
"Advanced": "Gelişmiş",
"Hide": "Gizle",
"Show": "Göster",
"Use Custom Template": "Özel Şablon Kullan",
"Export Template": "Dışa Aktarma Şablonu",
"Template Syntax:": "Şablon Sözdizimi:",
"Insert value": "Değer ekle",
"Format date (locale)": "Tarihi biçimlendir (yerel)",
"Format date (custom)": "Tarihi biçimlendir (özel)",
"Conditional": "Koşullu",
"Loop": "Döngü",
"Available Variables:": "Kullanılabilir Değişkenler:",
"Book title": "Kitap başlığı",
"Book author": "Kitap yazarı",
"Export date": "Dışa aktarma tarihi",
"Array of chapters": "Bölümler dizisi",
"Chapter title": "Bölüm başlığı",
"Array of annotations": "Notlar dizisi",
"Highlighted text": "Vurgulanan metin",
"Annotation note": "Not açıklaması",
"Update time": "Güncelleme zamanı",
"Date Format Tokens:": "Tarih Biçimi Belirteçleri:",
"Year (4 digits)": "Yıl (4 basamak)",
"Month (01-12)": "Ay (01-12)",
"Day (01-31)": "Gün (01-31)",
"Hour (00-23)": "Saat (00-23)",
"Minute (00-59)": "Dakika (00-59)",
"Second (00-59)": "Saniye (00-59)",
"Show Source": "Kaynağı Göster",
"No content to preview": "Önizlenecek içerik yok",
"Export": "Dışa Aktar"
}
@@ -869,5 +869,44 @@
"Only for TTS:": "Тільки для TTS:",
"Uploaded": "Завантажено",
"Downloaded": "Звантажено",
"Deleted": "Видалено"
"Deleted": "Видалено",
"Note:": "Примітка:",
"Time:": "Час:",
"Format Options": "Параметри формату",
"Export Date": "Дата експорту",
"Chapter Titles": "Назви розділів",
"Chapter Separator": "Роздільник розділів",
"Highlights": "Виділення",
"Note Date": "Дата примітки",
"Advanced": "Розширені",
"Hide": "Сховати",
"Show": "Показати",
"Use Custom Template": "Використовувати власний шаблон",
"Export Template": "Шаблон експорту",
"Template Syntax:": "Синтаксис шаблону:",
"Insert value": "Вставити значення",
"Format date (locale)": "Форматувати дату (локаль)",
"Format date (custom)": "Форматувати дату (власний)",
"Conditional": "Умовний",
"Loop": "Цикл",
"Available Variables:": "Доступні змінні:",
"Book title": "Назва книги",
"Book author": "Автор книги",
"Export date": "Дата експорту",
"Array of chapters": "Масив розділів",
"Chapter title": "Назва розділу",
"Array of annotations": "Масив приміток",
"Highlighted text": "Виділений текст",
"Annotation note": "Примітка анотації",
"Update time": "Час оновлення",
"Date Format Tokens:": "Токени формату дати:",
"Year (4 digits)": "Рік (4 цифри)",
"Month (01-12)": "Місяць (01-12)",
"Day (01-31)": "День (01-31)",
"Hour (00-23)": "Година (00-23)",
"Minute (00-59)": "Хвилина (00-59)",
"Second (00-59)": "Секунда (00-59)",
"Show Source": "Показати джерело",
"No content to preview": "Немає вмісту для перегляду",
"Export": "Експортувати"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "Chỉ dành cho TTS:",
"Uploaded": "Đã tải lên",
"Downloaded": "Đã tải xuống",
"Deleted": "Đã xóa"
"Deleted": "Đã xóa",
"Note:": "Ghi chú:",
"Time:": "Thời gian:",
"Format Options": "Tùy chọn định dạng",
"Export Date": "Ngày xuất",
"Chapter Titles": "Tiêu đề chương",
"Chapter Separator": "Dấu phân cách chương",
"Highlights": "Đánh dấu",
"Note Date": "Ngày ghi chú",
"Advanced": "Nâng cao",
"Hide": "Ẩn",
"Show": "Hiển thị",
"Use Custom Template": "Sử dụng mẫu tùy chỉnh",
"Export Template": "Mẫu xuất",
"Template Syntax:": "Cú pháp mẫu:",
"Insert value": "Chèn giá trị",
"Format date (locale)": "Định dạng ngày (địa phương)",
"Format date (custom)": "Định dạng ngày (tùy chỉnh)",
"Conditional": "Điều kiện",
"Loop": "Vòng lặp",
"Available Variables:": "Biến có sẵn:",
"Book title": "Tiêu đề sách",
"Book author": "Tác giả sách",
"Export date": "Ngày xuất",
"Array of chapters": "Danh sách chương",
"Chapter title": "Tiêu đề chương",
"Array of annotations": "Danh sách chú thích",
"Highlighted text": "Văn bản được đánh dấu",
"Annotation note": "Ghi chú chú thích",
"Update time": "Thời gian cập nhật",
"Date Format Tokens:": "Token định dạng ngày:",
"Year (4 digits)": "Năm (4 chữ số)",
"Month (01-12)": "Tháng (01-12)",
"Day (01-31)": "Ngày (01-31)",
"Hour (00-23)": "Giờ (00-23)",
"Minute (00-59)": "Phút (00-59)",
"Second (00-59)": "Giây (00-59)",
"Show Source": "Hiển thị nguồn",
"No content to preview": "Không có nội dung để xem trước",
"Export": "Xuất"
}
@@ -839,5 +839,44 @@
"Date Published": "出版日期",
"Uploaded": "已上传",
"Downloaded": "已下载",
"Deleted": "已删除"
"Deleted": "已删除",
"Note:": "笔记:",
"Time:": "时间:",
"Format Options": "格式选项",
"Export Date": "导出日期",
"Chapter Titles": "章节标题",
"Chapter Separator": "章节分隔符",
"Highlights": "高亮",
"Note Date": "笔记日期",
"Advanced": "高级",
"Hide": "隐藏",
"Show": "显示",
"Use Custom Template": "使用自定义模板",
"Export Template": "导出模板",
"Template Syntax:": "模板语法:",
"Insert value": "插入值",
"Format date (locale)": "格式化日期(区域)",
"Format date (custom)": "格式化日期(自定义)",
"Conditional": "条件",
"Loop": "循环",
"Available Variables:": "可用变量:",
"Book title": "书名",
"Book author": "作者",
"Export date": "导出日期",
"Array of chapters": "章节数组",
"Chapter title": "章节标题",
"Array of annotations": "标注数组",
"Highlighted text": "高亮文本",
"Annotation note": "标注笔记",
"Update time": "更新时间",
"Date Format Tokens:": "日期格式标记:",
"Year (4 digits)": "年(4位)",
"Month (01-12)": "月(01-12",
"Day (01-31)": "日(01-31",
"Hour (00-23)": "时(00-23",
"Minute (00-59)": "分(00-59",
"Second (00-59)": "秒(00-59",
"Show Source": "显示源码",
"No content to preview": "无内容可预览",
"Export": "导出"
}
@@ -839,5 +839,44 @@
"Only for TTS:": "僅用於TTS",
"Uploaded": "已上傳",
"Downloaded": "已下載",
"Deleted": "已刪除"
"Deleted": "已刪除",
"Note:": "筆記:",
"Time:": "時間:",
"Format Options": "格式選項",
"Export Date": "匯出日期",
"Chapter Titles": "章節標題",
"Chapter Separator": "章節分隔符",
"Highlights": "標記",
"Note Date": "筆記日期",
"Advanced": "進階",
"Hide": "隱藏",
"Show": "顯示",
"Use Custom Template": "使用自訂模板",
"Export Template": "匯出模板",
"Template Syntax:": "模板語法:",
"Insert value": "插入值",
"Format date (locale)": "格式化日期(區域)",
"Format date (custom)": "格式化日期(自訂)",
"Conditional": "條件",
"Loop": "迴圈",
"Available Variables:": "可用變數:",
"Book title": "書名",
"Book author": "作者",
"Export date": "匯出日期",
"Array of chapters": "章節陣列",
"Chapter title": "章節標題",
"Array of annotations": "標註陣列",
"Highlighted text": "標記文字",
"Annotation note": "標註筆記",
"Update time": "更新時間",
"Date Format Tokens:": "日期格式標記:",
"Year (4 digits)": "年(4位)",
"Month (01-12)": "月(01-12",
"Day (01-31)": "日(01-31",
"Hour (00-23)": "時(00-23",
"Minute (00-59)": "分(00-59",
"Second (00-59)": "秒(00-59",
"Show Source": "顯示原始碼",
"No content to preview": "無內容可預覽",
"Export": "匯出"
}
@@ -38,6 +38,7 @@ import WikipediaPopup from './WikipediaPopup';
import TranslatorPopup from './TranslatorPopup';
import useShortcuts from '@/hooks/useShortcuts';
import ProofreadPopup from './ProofreadPopup';
import ExportMarkdownDialog from './ExportMarkdownDialog';
const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
const _ = useTranslation();
@@ -76,6 +77,11 @@ const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
const [showAnnotationNotes, setShowAnnotationNotes] = useState(false);
const [annotationNotes, setAnnotationNotes] = useState<BookNote[]>([]);
const [editingAnnotation, setEditingAnnotation] = useState<BookNote | null>(null);
const [showExportDialog, setShowExportDialog] = useState(false);
const [exportData, setExportData] = useState<{
booknotes: BookNote[];
booknoteGroups: { [href: string]: BooknoteGroup };
} | null>(null);
const [selectedStyle, setSelectedStyle] = useState<HighlightStyle>(
settings.globalReadSettings.highlightStyle,
@@ -765,6 +771,8 @@ const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
});
return;
}
// Organize booknotes into groups by chapter
const booknoteGroups: { [href: string]: BooknoteGroup } = {};
for (const booknote of booknotes) {
const tocItem = findTocItemBS(bookDoc.toc ?? [], booknote.cfi);
@@ -783,36 +791,14 @@ const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
});
});
const sortedGroups = Object.values(booknoteGroups).sort((a, b) => {
return a.id - b.id;
});
setExportData({ booknotes, booknoteGroups });
setShowExportDialog(true);
};
const lines: string[] = [];
lines.push(`# ${book.title}`);
lines.push(`**${_('Author')}**: ${book.author || ''}`);
lines.push('');
lines.push(`**${_('Exported from Readest')}**: ${new Date().toISOString().slice(0, 10)}`);
lines.push('');
lines.push('---');
lines.push('');
lines.push(`## ${_('Highlights & Annotations')}`);
lines.push('');
const handleConfirmExport = async (markdownContent: string) => {
const { book } = bookData;
if (!book) return;
for (const group of sortedGroups) {
const chapterTitle = group.label || _('Untitled');
lines.push(`### ${chapterTitle}`);
for (const note of group.booknotes) {
lines.push(`> "${note.text}"`);
if (note.note) {
lines.push(`**${_('Note')}**:: ${note.note}`);
}
lines.push('');
}
lines.push('---');
lines.push('');
}
const markdownContent = lines.join('\n');
setTimeout(() => {
// Delay to ensure it won't be overridden by system clipboard actions
navigator.clipboard?.writeText(markdownContent);
@@ -825,6 +811,14 @@ const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
message: saved ? _('Exported successfully') : _('Copied to clipboard'),
timeout: 2000,
});
setShowExportDialog(false);
setExportData(null);
};
const handleCancelExport = () => {
setShowExportDialog(false);
setExportData(null);
};
const selectionAnnotated = selection?.annotated;
@@ -953,6 +947,18 @@ const Annotator: React.FC<{ bookKey: string }> = ({ bookKey }) => {
onStartEdit={handleStartEditAnnotation}
/>
)}
{showExportDialog && exportData && bookData.book && (
<ExportMarkdownDialog
bookKey={bookKey}
isOpen={showExportDialog}
bookTitle={bookData.book.title}
bookAuthor={bookData.book.author || ''}
booknotes={exportData.booknotes}
booknoteGroups={exportData.booknoteGroups}
onCancel={handleCancelExport}
onExport={handleConfirmExport}
/>
)}
</div>
);
};
@@ -0,0 +1,636 @@
import clsx from 'clsx';
import React, { useState, useMemo, useEffect } from 'react';
import { marked } from 'marked';
import { BookNote, BooknoteGroup, NoteExportConfig } from '@/types/book';
import { useTranslation } from '@/hooks/useTranslation';
import Dialog from '@/components/Dialog';
import { useReaderStore } from '@/store/readerStore';
import { DEFAULT_NOTE_EXPORT_CONFIG } from '@/services/constants';
import { saveViewSettings } from '@/helpers/settings';
import { useEnv } from '@/context/EnvContext';
interface ExportMarkdownDialogProps {
bookKey: string;
isOpen: boolean;
bookTitle: string;
bookAuthor: string;
booknotes: BookNote[];
booknoteGroups: { [href: string]: BooknoteGroup };
onCancel: () => void;
onExport: (markdown: string) => void;
}
type TemplateData = {
title: string;
author: string;
exportDate: string;
chapters: {
title: string;
annotations: {
text: string;
note?: string;
timestamp?: number;
}[];
}[];
};
type TemplateVariable = { [key: string]: number | string | TemplateVariable | TemplateVariable[] };
const renderTemplate = (template: string, data: TemplateData): string => {
const applyFilter = (
value: TemplateVariable,
filter: string,
filterArg?: string,
): TemplateVariable | string => {
if (filter === 'date') {
if (typeof value === 'number') {
const date = new Date(value);
if (filterArg) {
const format = filterArg;
return format
.replace('%Y', date.getFullYear().toString())
.replace('%m', String(date.getMonth() + 1).padStart(2, '0'))
.replace('%d', String(date.getDate()).padStart(2, '0'))
.replace('%H', String(date.getHours()).padStart(2, '0'))
.replace('%M', String(date.getMinutes()).padStart(2, '0'))
.replace('%S', String(date.getSeconds()).padStart(2, '0'));
}
return date.toLocaleString();
}
return value;
}
return value;
};
const getValue = (path: string, context: TemplateData) => {
const keys = path.trim().split('.');
let value = context as TemplateVariable;
for (const key of keys) {
value = value?.[key] as TemplateVariable;
}
return value;
};
let result = template;
// Process {% for %} loops - find first occurrence and recurse
const forMatch = result.match(/\{%\s*for\s+(\w+)\s+in\s+(\w+(?:\.\w+)*)\s*%\}/);
if (forMatch) {
const itemName = forMatch[1]!;
const collectionPath = forMatch[2]!;
// Find matching {% endfor %} by counting nesting
let depth = 0;
let endPos = -1;
const startPos = forMatch.index! + forMatch[0].length;
for (let i = startPos; i < result.length; i++) {
const remaining = result.slice(i);
if (remaining.startsWith('{% for ')) {
depth++;
i += 6; // skip past "{% for"
} else if (remaining.startsWith('{% endfor %}')) {
if (depth === 0) {
endPos = i;
break;
}
depth--;
i += 11; // skip past "{% endfor %}"
}
}
if (endPos !== -1) {
const beforeLoop = result.slice(0, forMatch.index);
const loopContent = result.slice(startPos, endPos);
const afterLoop = result.slice(endPos + 13); // 13 = length of "{% endfor %}"
const collection = getValue(collectionPath, data);
if (Array.isArray(collection)) {
const renderedItems = collection
.map((item) => {
const loopData = { ...data, [itemName]: item };
return renderTemplate(loopContent, loopData);
})
.join('');
result = beforeLoop + renderedItems + afterLoop;
return renderTemplate(result, data);
} else {
// Collection not found or not an array, remove the loop
result = beforeLoop + afterLoop;
return renderTemplate(result, data);
}
}
}
// Process {% if condition %}...{% endif %}
result = result.replace(
/\{%\s*if\s+([^%]+?)\s*%\}([\s\S]*?)\{%\s*endif\s*%\}/g,
(_match, condition, content) => {
const value = getValue(condition, data);
return value ? renderTemplate(content, data) : '';
},
);
// Replace {{ variable }}, {{ variable | filter }}, and {{ variable | filter('arg') }}
result = result.replace(
/\{\{\s*([^}|]+?)(?:\s*\|\s*(\w+)(?:\s*\((['"]?)([^)'"]*)\3\))?)?\s*\}\}/g,
(_match, path, filter, _quote, filterArg) => {
const value = getValue(path, data);
if (value === undefined || value === null) return '';
if (filter) {
return applyFilter(value, filter, filterArg) as string;
}
return String(value);
},
);
return result;
};
const ExportMarkdownDialog: React.FC<ExportMarkdownDialogProps> = ({
bookKey,
isOpen,
bookTitle,
bookAuthor,
booknotes,
booknoteGroups,
onCancel,
onExport,
}) => {
const _ = useTranslation();
const { envConfig } = useEnv();
const { getViewSettings } = useReaderStore();
const viewSettings = getViewSettings(bookKey);
const defaultTemplate = `## {{ title }}
**${_('Author')}**: {{ author }}
**${_('Exported from Readest')}**: {{ exportDate }}
---
### ${_('Highlights & Annotations')}
{% for chapter in chapters %}
#### {{ chapter.title }}
{% for annotation in chapter.annotations %}
> {{ annotation.text }}
{% if annotation.note %}
**${_('Note:')}** {{ annotation.note }}
{% endif %}
*${_('Time:')} {{ annotation.timestamp | date('%Y-%m-%d %H:%M') }}*
{% endfor %}
---
{% endfor %}`;
const [exportConfig, setExportConfig] = useState<NoteExportConfig>(() => {
const noteExportConfig = viewSettings?.noteExportConfig || DEFAULT_NOTE_EXPORT_CONFIG;
if (!noteExportConfig.customTemplate) {
return {
...noteExportConfig,
customTemplate: defaultTemplate,
};
}
return noteExportConfig;
});
const [showSource, setShowSource] = useState(false);
const [showAdvanced, setShowAdvanced] = useState(false);
useEffect(() => {
const customTemplate = exportConfig.customTemplate;
const newExportConfig = {
...exportConfig,
customTemplate: customTemplate === defaultTemplate ? '' : customTemplate,
};
saveViewSettings(envConfig, bookKey, 'noteExportConfig', newExportConfig, false, false);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [exportConfig, envConfig, bookKey]);
// Generate markdown preview based on current format settings
const markdownPreview = useMemo(() => {
if (exportConfig.useCustomTemplate) {
// Prepare data for template rendering
const sortedGroups = Object.values(booknoteGroups).sort((a, b) => a.id - b.id);
const templateData = {
title: bookTitle,
author: bookAuthor,
exportDate: new Date().toISOString().slice(0, 10),
chapters: sortedGroups.map((group) => ({
title: group.label || _('Untitled'),
annotations: group.booknotes.map((note) => ({
text: note.text || '',
note: note.note || '',
style: note.style,
color: note.color,
timestamp: note.updatedAt,
})),
})),
};
return renderTemplate(exportConfig.customTemplate, templateData);
}
// Default formatting (non-template mode)
const sortedGroups = Object.values(booknoteGroups).sort((a, b) => a.id - b.id);
const lines: string[] = [];
// Add title
if (exportConfig.includeTitle) {
lines.push(`# ${bookTitle}`);
}
// Add author
if (exportConfig.includeAuthor && bookAuthor) {
lines.push(`**${_('Author')}**: ${bookAuthor}`);
lines.push('');
}
// Add export date
if (exportConfig.includeDate) {
lines.push(`**${_('Exported from Readest')}**: ${new Date().toISOString().slice(0, 10)}`);
lines.push('');
}
if (exportConfig.includeTitle || exportConfig.includeAuthor || exportConfig.includeDate) {
lines.push('---');
lines.push('');
}
lines.push(`## ${_('Highlights & Annotations')}`);
lines.push('');
for (const group of sortedGroups) {
// Add chapter title
if (exportConfig.includeChapterTitles) {
const chapterTitle = group.label || _('Untitled');
lines.push(`### ${chapterTitle}`);
}
for (const note of group.booknotes) {
// Add quote
if (exportConfig.includeQuotes && note.text) {
lines.push(`> ${note.text}`);
}
// Add note
if (exportConfig.includeNotes && note.note) {
lines.push('');
lines.push(`**${_('Note')}**:: ${note.note}`);
}
// Add timestamp
if (exportConfig.includeTimestamp && note.updatedAt) {
const timestamp = new Date(note.updatedAt).toLocaleString();
lines.push('');
lines.push(`*${_('Time:')} ${timestamp}*`);
}
lines.push(exportConfig.noteSeparator);
}
if (exportConfig.includeChapterSeparator) {
lines.push('---');
lines.push('');
}
}
return lines.join('\n');
}, [exportConfig, booknoteGroups, bookTitle, bookAuthor, _]);
// Convert markdown to HTML for preview
const htmlPreview = useMemo(() => {
if (!markdownPreview) return '';
return marked.parse(markdownPreview);
}, [markdownPreview]);
const handleToggle = (field: keyof NoteExportConfig) => {
setExportConfig((prev) => ({
...prev,
[field]: !prev[field],
}));
};
const handleExport = () => {
onExport(markdownPreview);
};
return (
<Dialog
isOpen={isOpen}
title={_('Export Annotations')}
onClose={onCancel}
boxClassName='sm:!w-[75%] sm:h-auto sm:!max-h-[90vh] sm:!max-w-5xl'
contentClassName='sm:!px-8 sm:!py-2'
>
<div className='flex flex-col gap-4'>
{/* Format Options */}
<div className='space-y-3'>
<h3 className='font-bold'>{_('Format Options')}</h3>
<div
className={clsx(
'grid grid-cols-2 gap-x-6 gap-y-3 sm:grid-cols-3',
exportConfig.useCustomTemplate && 'pointer-events-none opacity-50',
)}
>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeTitle}
onChange={() => handleToggle('includeTitle')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Title')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeAuthor}
onChange={() => handleToggle('includeAuthor')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Author')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeDate}
onChange={() => handleToggle('includeDate')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Export Date')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeChapterTitles}
onChange={() => handleToggle('includeChapterTitles')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Chapter Titles')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeChapterSeparator}
onChange={() => handleToggle('includeChapterSeparator')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Chapter Separator')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeQuotes}
onChange={() => handleToggle('includeQuotes')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Highlights')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeNotes}
onChange={() => handleToggle('includeNotes')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Notes')}</span>
</label>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.includeTimestamp}
onChange={() => handleToggle('includeTimestamp')}
className='checkbox checkbox-sm'
disabled={exportConfig.useCustomTemplate}
/>
<span className='text-sm'>{_('Note Date')}</span>
</label>
</div>
</div>
{/* Advanced Options */}
<div className='space-y-3'>
<div className='flex items-center justify-between'>
<h3 className='font-bold'>{_('Advanced')}</h3>
<button
onClick={() => setShowAdvanced(!showAdvanced)}
className='text-sm text-blue-500 hover:underline'
>
{showAdvanced ? _('Hide') : _('Show')}
</button>
</div>
{showAdvanced && (
<div className='space-y-3'>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={exportConfig.useCustomTemplate}
onChange={() => handleToggle('useCustomTemplate')}
className='checkbox checkbox-sm'
/>
<span className='text-sm font-medium'>{_('Use Custom Template')}</span>
</label>
{exportConfig.useCustomTemplate && (
<>
<div className='space-y-2'>
<label className='text-sm font-medium'>{_('Export Template')}</label>
<textarea
value={exportConfig.customTemplate}
onChange={(e) =>
setExportConfig({ ...exportConfig, customTemplate: e.target.value })
}
className='textarea textarea-bordered w-full font-mono text-xs'
rows={12}
placeholder={defaultTemplate}
/>
</div>
<div className='bg-base-200 space-y-3 rounded-lg p-3 text-xs'>
<div>
<p className='mb-2 font-bold'>{_('Template Syntax:')}</p>
<ul className='space-y-1 font-mono'>
<li>
<code className='bg-base-300 rounded px-1'>{'{{ variable }}'}</code> -{' '}
{_('Insert value')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>
{'{{ variable | date }}'}
</code>{' '}
- {_('Format date (locale)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>
{"{{ variable | date('%Y-%m-%d') }}"}
</code>{' '}
- {_('Format date (custom)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>
{'{% if variable %}...{% endif %}'}
</code>{' '}
- {_('Conditional')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>
{'{% for item in list %}...{% endfor %}'}
</code>{' '}
- {_('Loop')}
</li>
</ul>
</div>
<div>
<p className='mb-2 font-bold'>{_('Available Variables:')}</p>
<ul className='space-y-1'>
<li>
<code className='bg-base-300 rounded px-1'>title</code> -{' '}
{_('Book title')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>author</code> -{' '}
{_('Book author')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>exportDate</code> -{' '}
{_('Export date')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>chapters</code> -{' '}
{_('Array of chapters')}
</li>
<li className='ml-4'>
<code className='bg-base-300 rounded px-1'>chapter.title</code> -{' '}
{_('Chapter title')}
</li>
<li className='ml-4'>
<code className='bg-base-300 rounded px-1'>chapter.annotations</code> -{' '}
{_('Array of annotations')}
</li>
<li className='ml-8'>
<code className='bg-base-300 rounded px-1'>annotation.text</code> -{' '}
{_('Highlighted text')}
</li>
<li className='ml-8'>
<code className='bg-base-300 rounded px-1'>annotation.note</code> -{' '}
{_('Annotation note')}
</li>
<li className='ml-8'>
<code className='bg-base-300 rounded px-1'>annotation.timestamp</code> -{' '}
{_('Update time')}
</li>
</ul>
</div>
<div>
<p className='mb-2 font-bold'>{_('Date Format Tokens:')}</p>
<ul className='space-y-1 font-mono'>
<li>
<code className='bg-base-300 rounded px-1'>%Y</code> -{' '}
{_('Year (4 digits)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>%m</code> -{' '}
{_('Month (01-12)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>%d</code> - {_('Day (01-31)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>%H</code> - {_('Hour (00-23)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>%M</code> -{' '}
{_('Minute (00-59)')}
</li>
<li>
<code className='bg-base-300 rounded px-1'>%S</code> -{' '}
{_('Second (00-59)')}
</li>
</ul>
</div>
</div>
</>
)}
</div>
)}
</div>
{/* Preview */}
<div className='space-y-2'>
<div className='flex items-center justify-between'>
<h3 className='font-bold'>{_('Preview')}</h3>
<label className='flex cursor-pointer items-center gap-2'>
<input
type='checkbox'
checked={showSource}
onChange={() => setShowSource(!showSource)}
className='checkbox checkbox-sm'
/>
<span className='text-sm'>{_('Show Source')}</span>
</label>
</div>
{showSource ? (
<div
className={clsx(
'bg-base-200 max-h-[40vh] overflow-y-auto rounded-lg p-4 font-mono text-xs',
'select-text whitespace-pre-wrap break-words',
)}
>
{markdownPreview || _('No content to preview')}
</div>
) : (
<div
className={clsx(
'bg-base-200 prose prose-sm max-w-none overflow-y-auto rounded-lg p-4',
'max-h-[40vh] select-text break-words',
)}
dangerouslySetInnerHTML={{
__html:
htmlPreview ||
`<p class="text-base-content/50">${_('No content to preview')}</p>`,
}}
/>
)}
</div>
{/* Footer Actions */}
<div className='mt-4 flex justify-end gap-4'>
<button onClick={onCancel} className='btn btn-ghost btn-sm'>
{_('Cancel')}
</button>
<button
onClick={handleExport}
className='btn btn-primary btn-sm'
disabled={booknotes.length === 0}
>
{_('Export')}
</button>
</div>
</div>
</Dialog>
);
};
export default ExportMarkdownDialog;
@@ -6,6 +6,7 @@ import {
BookSearchConfig,
BookStyle,
HighlightColor,
NoteExportConfig,
ScreenConfig,
TranslatorConfig,
TTSConfig,
@@ -254,10 +255,25 @@ export const DEFAULT_TRANSLATOR_CONFIG: TranslatorConfig = {
ttsReadAloudText: 'both',
};
export const DEFAULT_NOTE_EXPORT_CONFIG: NoteExportConfig = {
includeTitle: true,
includeAuthor: true,
includeDate: true,
includeChapterTitles: true,
includeQuotes: true,
includeNotes: true,
includeTimestamp: false,
includeChapterSeparator: false,
noteSeparator: '\n\n',
useCustomTemplate: false,
customTemplate: '',
};
export const DEFAULT_ANNOTATOR_CONFIG: AnnotatorConfig = {
enableAnnotationQuickActions: true,
annotationQuickAction: null,
copyToNotebook: false,
noteExportConfig: DEFAULT_NOTE_EXPORT_CONFIG,
};
export const DEFAULT_SCREEN_CONFIG: ScreenConfig = {
+15
View File
@@ -218,10 +218,25 @@ export interface TranslatorConfig {
ttsReadAloudText: string;
}
export interface NoteExportConfig {
includeTitle: boolean;
includeAuthor: boolean;
includeDate: boolean;
includeChapterTitles: boolean;
includeQuotes: boolean;
includeNotes: boolean;
includeTimestamp: boolean;
includeChapterSeparator: boolean;
noteSeparator: string;
useCustomTemplate: boolean;
customTemplate: string;
}
export interface AnnotatorConfig {
enableAnnotationQuickActions: boolean;
annotationQuickAction: AnnotationToolType | null;
copyToNotebook: boolean;
noteExportConfig: NoteExportConfig;
}
export interface ScreenConfig {