Merge pull request #419 from plebbit/development

Development
This commit is contained in:
Tom (plebeius.eth)
2024-06-26 22:44:04 +02:00
committed by GitHub
45 changed files with 368 additions and 108 deletions
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "عرض لوحات NSFW فقط",
"use_catalog": "استخدام الكتالوج",
"show_worksafe_boards_only": "عرض لوحات آمنة للعمل فقط",
"show_all_content": "عرض جميع المحتويات"
"show_all_content": "عرض جميع المحتويات",
"link_type": "نوع الرابط",
"comment_edited_at_timestamp": "تم تحرير التعليق في {{timestamp}}.",
"reason_reason": "السبب: \"{{reason}}\".",
"click_here_to_show_original": "<1>انقر هنا</1> لعرض الأصل.",
"click_here_to_hide_original": "<1>انقر هنا</1> لإخفاء الأصل.",
"loading": "جار التحميل"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "শুধুমাত্র NSFW বোর্ড দেখান",
"use_catalog": "ক্যাটালগ ব্যবহার",
"show_worksafe_boards_only": "শুধুমাত্র কাজ-সম্পূর্ণ বোর্ড দেখান",
"show_all_content": "সমস্ত কন্টেন্ট দেখান"
"show_all_content": "সমস্ত কন্টেন্ট দেখান",
"link_type": "লিংক প্রকার",
"comment_edited_at_timestamp": "মন্তব্য সম্পাদনা করা হয়েছে {{timestamp}} তারিখে।",
"reason_reason": "কারণ: \"{{reason}}\".",
"click_here_to_show_original": "<1>এখানে ক্লিক করুন</1> অসল দেখানোর জন্য।",
"click_here_to_hide_original": "<1>এখানে ক্লিক করুন</1> অসল লুকাতে।",
"loading": "লোড হচ্ছে"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Zobrazit pouze NSFW desky",
"use_catalog": "použít katalog",
"show_worksafe_boards_only": "Zobrazit pouze bezpečné pracovní desky",
"show_all_content": "Zobrazit veškerý obsah"
"show_all_content": "Zobrazit veškerý obsah",
"link_type": "Typ odkazu",
"comment_edited_at_timestamp": "Komentář byl upraven dne {{timestamp}}.",
"reason_reason": "Důvod: \"{{reason}}\".",
"click_here_to_show_original": "Klikněte <1>zde</1> pro zobrazení původního.",
"click_here_to_hide_original": "Klikněte <1>zde</1> pro skrytí původního.",
"loading": "Načítání"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Vis kun NSFW boards",
"use_catalog": "brug katalog",
"show_worksafe_boards_only": "Vis kun Worksafe boards",
"show_all_content": "Vis alt indhold"
"show_all_content": "Vis alt indhold",
"link_type": "Link type",
"comment_edited_at_timestamp": "Kommentaren blev redigeret den {{timestamp}}.",
"reason_reason": "Grund: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik her</1> for at vise originalen.",
"click_here_to_hide_original": "<1>Klik her</1> for at skjule originalen.",
"loading": "Indlæser"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Nur NSFW-Boards anzeigen",
"use_catalog": "Benutze Katalog",
"show_worksafe_boards_only": "Nur sichere Boards anzeigen",
"show_all_content": "Alle Inhalte anzeigen"
"show_all_content": "Alle Inhalte anzeigen",
"link_type": "Linktyp",
"comment_edited_at_timestamp": "Kommentar bearbeitet am {{timestamp}}.",
"reason_reason": "Grund: \"{{reason}}\".",
"click_here_to_show_original": "<1>Hier klicken</1>, um das Original anzuzeigen.",
"click_here_to_hide_original": "<1>Hier klicken</1>, um das Original zu verstecken.",
"loading": "Laden"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Εμφάνιση μόνο NSFW πινάκων",
"use_catalog": "χρησιμοποίηση καταλόγου",
"show_worksafe_boards_only": "Εμφάνιση μόνο ασφαλών πινάκων εργασίας",
"show_all_content": "Εμφάνιση όλων των περιεχομένων"
"show_all_content": "Εμφάνιση όλων των περιεχομένων",
"link_type": "Τύπος συνδέσμου",
"comment_edited_at_timestamp": "Επεξεργασία σχολίου στις {{timestamp}}.",
"reason_reason": "Λόγος: \"{{reason}}\".",
"click_here_to_show_original": "<1>Κάντε κλικ εδώ</1> για να εμφανιστεί το αρχικό.",
"click_here_to_hide_original": "<1>Κάντε κλικ εδώ</1> για να κρύψετε το αρχικό.",
"loading": "Φόρτωση"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Show NSFW Boards Only",
"use_catalog": "use catalog",
"show_worksafe_boards_only": "Show Worksafe Boards Only",
"show_all_content": "Show All Content"
"show_all_content": "Show All Content",
"link_type": "Link type",
"comment_edited_at_timestamp": "Comment edited at {{timestamp}}.",
"reason_reason": "Reason: \"{{reason}}\".",
"click_here_to_show_original": "<1>Click here</1> to show the original.",
"click_here_to_hide_original": "<1>Click here</1> to hide the original.",
"loading": "Loading"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Mostrar solo tableros NSFW",
"use_catalog": "usar catálogo",
"show_worksafe_boards_only": "Mostrar solo tableros seguros para el trabajo",
"show_all_content": "Mostrar todo el contenido"
"show_all_content": "Mostrar todo el contenido",
"link_type": "Tipo de enlace",
"comment_edited_at_timestamp": "Comentario editado en {{timestamp}}.",
"reason_reason": "Motivo: \"{{reason}}\".",
"click_here_to_show_original": "<1>Haga clic aquí</1> para mostrar el original.",
"click_here_to_hide_original": "<1>Haga clic aquí</1> para ocultar el original.",
"loading": "Cargando"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "نمایش تنها بوردهای NSFW",
"use_catalog": "استفاده از کاتالوگ",
"show_worksafe_boards_only": "نمایش تنها بوردهای ایمن برای کار",
"show_all_content": "نمایش تمام محتوا"
"show_all_content": "نمایش تمام محتوا",
"link_type": "نوع پیوند",
"comment_edited_at_timestamp": "ویرایش نظر در {{timestamp}}.",
"reason_reason": "دلیل: \"{{reason}}\".",
"click_here_to_show_original": "<1>برای نمایش اصلی اینجا کلیک کنید</1>.",
"click_here_to_hide_original": "<1>برای پنهان کردن اصل اینجا کلیک کنید</1>.",
"loading": "در حال بارگذاری"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Näytä vain NSFW-laudat",
"use_catalog": "käytä luetteloa",
"show_worksafe_boards_only": "Näytä vain työturvalliset hallit",
"show_all_content": "Näytä kaikki sisällöt"
"show_all_content": "Näytä kaikki sisällöt",
"link_type": "Linkin tyyppi",
"comment_edited_at_timestamp": "Kommentti muokattu {{timestamp}}.",
"reason_reason": "Syy: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klikkaa tästä</1> näyttääksesi alkuperäisen.",
"click_here_to_hide_original": "<1>Klikkaa tästä</1> piilottaaksesi alkuperäisen.",
"loading": "Lataa"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Ipakita lamang ang NSFW na boards",
"use_catalog": "gamitin ang catalog",
"show_worksafe_boards_only": "Ipakita lamang ang mga Worksafe boards",
"show_all_content": "Ipakita lahat ng nilalaman"
"show_all_content": "Ipakita lahat ng nilalaman",
"link_type": "Uri ng Link",
"comment_edited_at_timestamp": "Inedit na komento sa {{timestamp}}.",
"reason_reason": "Dahilan: \"{{reason}}\".",
"click_here_to_show_original": "<1>I-click dito</1> upang ipakita ang orihinal.",
"click_here_to_hide_original": "<1>I-click dito</1> upang itago ang orihinal.",
"loading": "Naglo-load"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Afficher uniquement les boards NSFW",
"use_catalog": "utiliser le catalogue",
"show_worksafe_boards_only": "Afficher uniquement les tableaux Worksafe",
"show_all_content": "Afficher tout le contenu"
"show_all_content": "Afficher tout le contenu",
"link_type": "Type de lien",
"comment_edited_at_timestamp": "Commentaire modifié à {{timestamp}}.",
"reason_reason": "Raison: \"{{reason}}\".",
"click_here_to_show_original": "<1>Cliquez ici</1> pour afficher l'original.",
"click_here_to_hide_original": "<1>Cliquez ici</1> pour masquer l'original.",
"loading": "Chargement"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "הצג רק לוחות NSFW",
"use_catalog": "השתמש בקטלוג",
"show_worksafe_boards_only": "הצג לוחות עבודה בטוחים בלבד",
"show_all_content": "הצג את כל התוכן"
"show_all_content": "הצג את כל התוכן",
"link_type": "סוג קישור",
"comment_edited_at_timestamp": "התגובה עודכנה ב {{timestamp}}.",
"reason_reason": "סיבה: \"{{reason}}\".",
"click_here_to_show_original": "<1>לחץ כאן</1> כדי להציג את המקור.",
"click_here_to_hide_original": "<1>לחץ כאן</1> כדי להסתיר את המקור.",
"loading": "טוען"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "केवल NSFW बोर्ड्स दिखाएं",
"use_catalog": "कैटलॉग का उपयोग करें",
"show_worksafe_boards_only": "केवल कामसुरक्षित बोर्ड्स दिखाएं",
"show_all_content": "सभी सामग्री दिखाएं"
"show_all_content": "सभी सामग्री दिखाएं",
"link_type": "लिंक प्रकार",
"comment_edited_at_timestamp": "टिप्पणी {{timestamp}} पर संपादित की गई।",
"reason_reason": "कारण: \"{{reason}}\".",
"click_here_to_show_original": "<1>यहां क्लिक करें</1> मूल दिखाने के लिए।",
"click_here_to_hide_original": "<1>यहां क्लिक करें</1> मूल छुपाने के लिए।",
"loading": "लोड हो रहा है"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Csak NSFW táblák mutatása",
"use_catalog": "használja a katalógust",
"show_worksafe_boards_only": "Csak munkabiztos táblák mutatása",
"show_all_content": "Mutasd az összes tartalmat"
"show_all_content": "Mutasd az összes tartalmat",
"link_type": "Link típusa",
"comment_edited_at_timestamp": "Hozzászólás szerkesztve itt: {{timestamp}}.",
"reason_reason": "Ok: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kattints ide</1> az eredeti megjelenítéséhez.",
"click_here_to_hide_original": "<1>Kattints ide</1> az eredeti elrejtéséhez.",
"loading": "Betöltés"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Tampilkan Hanya Board NSFW",
"use_catalog": "gunakan katalog",
"show_worksafe_boards_only": "Tampilkan Hanya Board Worksafe",
"show_all_content": "Tampilkan Semua Konten"
"show_all_content": "Tampilkan Semua Konten",
"link_type": "Tipe tautan",
"comment_edited_at_timestamp": "Komentar diedit pada {{timestamp}}.",
"reason_reason": "Alasan: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik di sini</1> untuk menampilkan aslinya.",
"click_here_to_hide_original": "<1>Klik di sini</1> untuk menyembunyikan aslinya.",
"loading": "Memuat"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Mostra solo le board NSFW",
"use_catalog": "usa catalogo",
"show_worksafe_boards_only": "Mostra solo le board Worksafe",
"show_all_content": "Mostra tutti i contenuti"
"show_all_content": "Mostra tutti i contenuti",
"link_type": "Tipo di link",
"comment_edited_at_timestamp": "Commento modificato il {{timestamp}}.",
"reason_reason": "Motivo: \"{{reason}}\".",
"click_here_to_show_original": "<1>Clicca qui</1> per mostrare l'originale.",
"click_here_to_hide_original": "<1>Clicca qui</1> per nascondere l'originale.",
"loading": "Caricamento"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "NSFWボードのみ表示",
"use_catalog": "カタログを使用する",
"show_worksafe_boards_only": "Worksafeボードのみ表示",
"show_all_content": "すべてのコンテンツを表示"
"show_all_content": "すべてのコンテンツを表示",
"link_type": "リンクの種類",
"comment_edited_at_timestamp": "コメントは{{timestamp}}に編集されました。",
"reason_reason": "理由: \"{{reason}}\".",
"click_here_to_show_original": "<1>ここをクリック</1> して元の表示。",
"click_here_to_hide_original": "<1>ここをクリック</1> して元を非表示にする。",
"loading": "読み込み中"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "NSFW 보드만 표시",
"use_catalog": "카탈로그 사용",
"show_worksafe_boards_only": "작업 안전 보드만 표시",
"show_all_content": "모든 콘텐츠 보기"
"show_all_content": "모든 콘텐츠 보기",
"link_type": "링크 유형",
"comment_edited_at_timestamp": "댓글 편집 날짜: {{timestamp}}",
"reason_reason": "이유: \"{{reason}}\".",
"click_here_to_show_original": "<1>여기를 클릭</1> 하여 원본 표시.",
"click_here_to_hide_original": "<1>여기를 클릭</1> 하여 원본 숨기기.",
"loading": "로딩 중"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "केवळ NSFW बोर्ड्स दाखवा",
"use_catalog": "कॅटलॉग वापरा",
"show_worksafe_boards_only": "केवळ कामसुरक्षित बोर्ड्स दाखवा",
"show_all_content": "सर्व सामग्री दाखवा"
"show_all_content": "सर्व सामग्री दाखवा",
"link_type": "लिंक प्रकार",
"comment_edited_at_timestamp": "टिप्पणी {{timestamp}} वर संपादित केली आहे.",
"reason_reason": "कारण: \"{{reason}}\".",
"click_here_to_show_original": "<1>येथे क्लिक करा</1> मूळ पाहण्यासाठी।",
"click_here_to_hide_original": "<1>येथे क्लिक करा</1> मूळ लपविण्यासाठी।",
"loading": "लोड होत आहे"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Toon alleen NSFW boards",
"use_catalog": "gebruik catalogus",
"show_worksafe_boards_only": "Toon alleen Worksafe boards",
"show_all_content": "Toon alle inhoud"
"show_all_content": "Toon alle inhoud",
"link_type": "Link type",
"comment_edited_at_timestamp": "Reactie bewerkt op {{timestamp}}.",
"reason_reason": "Reden: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klik hier</1> om de originele te tonen.",
"click_here_to_hide_original": "<1>Klik hier</1> om de originele te verbergen.",
"loading": "Laden"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Vis kun NSFW boards",
"use_catalog": "bruk katalog",
"show_worksafe_boards_only": "Vis kun Worksafe boards",
"show_all_content": "Vis allt innhold"
"show_all_content": "Vis allt innhold",
"link_type": "Lenketype",
"comment_edited_at_timestamp": "Kommentaren ble redigert på {{timestamp}}.",
"reason_reason": "Årsak: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klikk her</1> for å vise originalen.",
"click_here_to_hide_original": "<1>Klikk her</1> for å skjule originalen.",
"loading": "Laster"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Pokaż tylko tablice NSFW",
"use_catalog": "użyj katalogu",
"show_worksafe_boards_only": "Pokaż tylko bezpieczne tablice",
"show_all_content": "Pokaż całą zawartość"
"show_all_content": "Pokaż całą zawartość",
"link_type": "Typ łącza",
"comment_edited_at_timestamp": "Komentarz edytowany o {{timestamp}}.",
"reason_reason": "Powód: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kliknij tutaj</1>, aby pokazać oryginał.",
"click_here_to_hide_original": "<1>Kliknij tutaj</1>, aby ukryć oryginał.",
"loading": "Ładowanie"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Mostrar apenas boards NSFW",
"use_catalog": "usar catálogo",
"show_worksafe_boards_only": "Mostrar apenas boards Worksafe",
"show_all_content": "Mostrar Todo o Conteúdo"
"show_all_content": "Mostrar Todo o Conteúdo",
"link_type": "Tipo de link",
"comment_edited_at_timestamp": "Comentário editado em {{timestamp}}.",
"reason_reason": "Razão: \"{{reason}}\".",
"click_here_to_show_original": "<1>Clique aqui</1> para mostrar o original.",
"click_here_to_hide_original": "<1>Clique aqui</1> para ocultar o original.",
"loading": "Carregando"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Afișați doar tablourile NSFW",
"use_catalog": "folosește catalogul",
"show_worksafe_boards_only": "Afișați doar tablourile Worksafe",
"show_all_content": "Afișați tot conținutul"
"show_all_content": "Afișați tot conținutul",
"link_type": "Tipul linkului",
"comment_edited_at_timestamp": "Comentariu editat la {{timestamp}}.",
"reason_reason": "Motiv: \"{{reason}}\".",
"click_here_to_show_original": "<1>Click aici</1> pentru a arăta originalul.",
"click_here_to_hide_original": "<1>Click aici</1> pentru a ascunde originalul.",
"loading": "Încărcare"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Показывать только NSFW доски",
"use_catalog": "использовать каталог",
"show_worksafe_boards_only": "Показывать только безопасные доски",
"show_all_content": "Показать весь контент"
"show_all_content": "Показать весь контент",
"link_type": "Тип ссылки",
"comment_edited_at_timestamp": "Комментарий изменён {{timestamp}}.",
"reason_reason": "Причина: \"{{reason}}\".",
"click_here_to_show_original": "<1>Нажмите здесь</1> для отображения оригинала.",
"click_here_to_hide_original": "<1>Нажмите здесь</1> чтобы скрыть оригинал.",
"loading": "Загрузка"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Shfaq vetëm taulat NSFW",
"use_catalog": "përdor katalogun",
"show_worksafe_boards_only": "Shfaq vetëm taulat e sigurta të punës",
"show_all_content": "Shfaq të gjitha përmbajtjet"
"show_all_content": "Shfaq të gjitha përmbajtjet",
"link_type": "Lloji i lidhjes",
"comment_edited_at_timestamp": "Komenti është ndryshuar në {{timestamp}}.",
"reason_reason": "Arsye: \"{{reason}}\".",
"click_here_to_show_original": "<1>Kliko këtu</1> për të treguar origjinalin.",
"click_here_to_hide_original": "<1>Kliko këtu</1> për të fshehur origjinalin.",
"loading": "Ngarkimi"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Visa endast NSFW-styrelser",
"use_catalog": "använd katalog",
"show_worksafe_boards_only": "Visa endast Worksafe-styrelser",
"show_all_content": "Visa allt innehåll"
"show_all_content": "Visa allt innehåll",
"link_type": "Länktyp",
"comment_edited_at_timestamp": "Kommentaren redigerades den {{timestamp}}.",
"reason_reason": "Anledning: \"{{reason}}\".",
"click_here_to_show_original": "<1>Klicka här</1> för att visa original.",
"click_here_to_hide_original": "<1>Klicka här</1> för att dölja original.",
"loading": "Laddar"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "పనిమాడు బోర్డులను మాత్రమే చూపించు",
"use_catalog": "కాటలాగ్ ఉపయోగించు",
"show_worksafe_boards_only": "పనిమాడు భద్రపరిచిన బోర్డులను మాత్రమే చూపించు",
"show_all_content": "అన్ని కాంటెంట్ చూపించు"
"show_all_content": "అన్ని కాంటెంట్ చూపించు",
"link_type": "లింక్ రకం",
"comment_edited_at_timestamp": "వ్యాఖ్యను {{timestamp}} లో సవరించబడింది.",
"reason_reason": "కారణం: \"{{reason}}\".",
"click_here_to_show_original": "<1>ఇక్కడ క్లిక్ చేయండి</1> అసలు చూపించడానికి.",
"click_here_to_hide_original": "<1>ఇక్కడ క్లిక్ చేయండి</1> అసలు దాచడానికి.",
"loading": "లోడ్ అవుతోంది"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "แสดงบอร์ด NSFW เท่านั้น",
"use_catalog": "ใช้แคตตาล็อก",
"show_worksafe_boards_only": "แสดงบอร์ด Worksafe เท่านั้น",
"show_all_content": "แสดงเนื้อหาทั้งหมด"
"show_all_content": "แสดงเนื้อหาทั้งหมด",
"link_type": "ประเภทลิงก์",
"comment_edited_at_timestamp": "แก้ไขความคิดเห็นที่ {{timestamp}}",
"reason_reason": "เหตุผล: \"{{reason}}\".",
"click_here_to_show_original": "<1>คลิกที่นี่</1> เพื่อแสดงข้อมูลต้นฉบับ",
"click_here_to_hide_original": "<1>คลิกที่นี่</1> เพื่อซ่อนข้อมูลต้นฉบับ",
"loading": "กำลังโหลด"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Sadece NSFW Panoları Göster",
"use_catalog": "katalog kullan",
"show_worksafe_boards_only": "Sadece Worksafe Panoları Göster",
"show_all_content": "Tüm İçeriği Göster"
"show_all_content": "Tüm İçeriği Göster",
"link_type": "Bağlantı türü",
"comment_edited_at_timestamp": "Yorum {{timestamp}} tarihinde düzenlendi.",
"reason_reason": "Sebep: \"{{reason}}\".",
"click_here_to_show_original": "<1>Buraya tıklayın</1> orijinali göstermek için.",
"click_here_to_hide_original": "<1>Buraya tıklayın</1> orijinali gizlemek için.",
"loading": "Yükleniyor"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Показувати лише NSFW дошки",
"use_catalog": "використовуйте каталог",
"show_worksafe_boards_only": "Показувати лише безпечні дошки",
"show_all_content": "Показати весь вміст"
"show_all_content": "Показати весь вміст",
"link_type": "Тип посилання",
"comment_edited_at_timestamp": "Коментар було відредаговано {{timestamp}}.",
"reason_reason": "Причина: \"{{reason}}\".",
"click_here_to_show_original": "<1>Натисніть тут</1> для відображення оригіналу.",
"click_here_to_hide_original": "<1>Натисніть тут</1> для приховання оригіналу.",
"loading": "Завантаження"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "صرف NSFW بورڈز دکھائیں",
"use_catalog": "استعمال کیٹالوگ",
"show_worksafe_boards_only": "صرف کام سے بچائے گئے بورڈز دکھائیں",
"show_all_content": "تمام مواد دکھائیں"
"show_all_content": "تمام مواد دکھائیں",
"link_type": "لنک کی قسم",
"comment_edited_at_timestamp": "تبدیل کی گئی تبدیلی کا {{timestamp}}۔",
"reason_reason": "وجہ: \"{{reason}}\".",
"click_here_to_show_original": "<1>یہاں کلک کریں</1> تاکہ اصل دکھائی دے۔",
"click_here_to_hide_original": "<1>یہاں کلک کریں</1> تاکہ اصل چھپ جائے۔",
"loading": "لوڈ ہو رہا ہے"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "Chỉ hiển thị bảng NSFW",
"use_catalog": "sử dụng danh mục",
"show_worksafe_boards_only": "Chỉ hiển thị bảng Worksafe",
"show_all_content": "Hiển thị tất cả nội dung"
"show_all_content": "Hiển thị tất cả nội dung",
"link_type": "Loại liên kết",
"comment_edited_at_timestamp": "Bình luận được chỉnh sửa lúc {{timestamp}}.",
"reason_reason": "Lý do: \"{{reason}}\".",
"click_here_to_show_original": "<1>Nhấp vào đây</1> để hiển thị nguyên bản.",
"click_here_to_hide_original": "<1>Nhấp vào đây</1> để ẩn nguyên bản.",
"loading": "Đang tải"
}
+7 -1
View File
@@ -193,5 +193,11 @@
"show_nsfw_boards_only": "仅显示NSFW板块",
"use_catalog": "使用目录",
"show_worksafe_boards_only": "仅显示安全工作板",
"show_all_content": "显示所有内容"
"show_all_content": "显示所有内容",
"link_type": "链接类型",
"comment_edited_at_timestamp": "评论于{{timestamp}}进行了编辑。",
"reason_reason": "原因: \"{{reason}}\".",
"click_here_to_show_original": "<1>点击这里</1> 显示原文。",
"click_here_to_hide_original": "<1>点击这里</1> 隐藏原文。",
"loading": "加载中"
}
@@ -151,7 +151,7 @@ const CommentMedia = ({ commentMediaInfo, isFloatingEmbed, post, showThumbnail,
<span className={styles.content}>
<span className={`${showThumbnail ? styles.show : styles.hide} ${styles.thumbnail}`}>
{url && <Thumbnail commentMediaInfo={commentMediaInfo} isFloatingEmbed={isFloatingEmbed} post={post} setShowThumbnail={setShowThumbnail} />}
{isMobile && type && <div className={styles.fileInfo}>{`${post?.spoiler && `${t('spoiler')} - `} ${getDisplayMediaInfoType(type, t)}`}</div>}
{isMobile && type && <div className={styles.fileInfo}>{`${post?.spoiler ? `${t('spoiler')} - ` : ''} ${getDisplayMediaInfoType(type, t)}`}</div>}
</span>
{!showThumbnail && <Media commentMediaInfo={commentMediaInfo} isReply={post?.parentCid} setShowThumbnail={setShowThumbnail} />}
</span>
@@ -90,11 +90,8 @@
@media (max-width: 640px) {
.checkbox {
padding-top: 0;
padding-left: 0;
padding-bottom: 0;
}
.replyCheckbox {
padding-top: 0;
}
}
+16 -6
View File
@@ -78,7 +78,7 @@ const PostInfo = ({ openReplyModal, post, roles, isHidden }: PostProps) => {
{!cid ? (
<span className={styles.pendingCid}>{state === 'failed' || stateString === 'Failed' ? 'Failed' : 'Pending'}</span>
) : (
<span className={styles.replyToPost} title={t('reply_to_post')} onClick={() => openReplyModal && openReplyModal(cid)}>
<span className={styles.replyToPost} title={t('reply_to_post')} onMouseDown={() => openReplyModal && openReplyModal(cid)}>
{shortCid}
</span>
)}
@@ -197,11 +197,21 @@ const PostMessage = ({ post }: PostProps) => {
<span className={styles.editedInfo}>
{showOriginal && <Markdown content={original?.content} />}
<br />
(Edited at {getFormattedDate(edit?.timestamp)},{' '}
<span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)}>
{showOriginal ? 'hide original' : 'show original'}
</span>
)
{t('comment_edited_at_timestamp', { timestamp: getFormattedDate(edit?.timestamp), interpolation: { escapeValue: false } })}{' '}
{reason && <>{t('reason_reason', { reason: reason, interpolation: { escapeValue: false } })} </>}
{showOriginal ? (
<Trans
i18nKey={'click_here_to_hide_original'}
shouldUnescape={true}
components={{ 1: <span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)} /> }}
/>
) : (
<Trans
i18nKey={'click_here_to_show_original'}
shouldUnescape={true}
components={{ 1: <span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)} /> }}
/>
)}
</span>
)}
</>
+16 -6
View File
@@ -89,7 +89,7 @@ const PostInfoAndMedia = ({ openReplyModal, post, roles }: PostProps) => {
{!cid ? (
<span className={styles.pendingCid}>{state === 'failed' || stateString === 'Failed' ? 'Failed' : 'Pending'}</span>
) : (
<span className={styles.replyToPost} title={t('reply_to_post')} onClick={() => openReplyModal && openReplyModal(cid)}>
<span className={styles.replyToPost} title={t('reply_to_post')} onMouseDown={() => openReplyModal && openReplyModal(cid)}>
{shortCid}
</span>
)}
@@ -154,11 +154,21 @@ const PostMessageMobile = ({ post }: PostProps) => {
<span className={styles.editedInfo}>
{showOriginal && <Markdown content={original?.content} />}
<br />
(Edited at {getFormattedDate(edit?.timestamp)},{' '}
<span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)}>
{showOriginal ? 'hide original' : 'show original'}
</span>
)
{t('comment_edited_at_timestamp', { timestamp: getFormattedDate(edit?.timestamp), interpolation: { escapeValue: false } })}{' '}
{reason && <>{t('reason_reason', { reason: reason, interpolation: { escapeValue: false } })} </>}
{showOriginal ? (
<Trans
i18nKey={'click_here_to_hide_original'}
shouldUnescape={true}
components={{ 1: <span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)} /> }}
/>
) : (
<Trans
i18nKey={'click_here_to_show_original'}
shouldUnescape={true}
components={{ 1: <span className={styles.showOriginal} onClick={() => setShowOriginal(!showOriginal)} /> }}
/>
)}
</span>
)}
</>
@@ -62,7 +62,6 @@
.content textarea {
vertical-align: top;
padding-top: 18px;
}
.footer button {
@@ -81,14 +80,9 @@
padding-top: 2px;
}
.parentCid {
color: var(--post-form-field-input-color);
position: absolute;
width: auto;
background-color: var(--post-form-field-input-background-color, white);
padding: 2px;
left: 1px;
top: 1px;
.publishButton {
width: 75px;
filter: var(--filter80)
}
.offlineBoard {
+41 -24
View File
@@ -7,6 +7,7 @@ import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js';
import { getFormattedTimeAgo } from '../../lib/utils/time-utils';
import { isValidURL } from '../../lib/utils/url-utils';
import { isAllView, isSubscriptionsView } from '../../lib/utils/view-utils';
import useSelectedTextStore from '../../stores/use-selected-text-store';
import useReply from '../../hooks/use-reply';
import useIsMobile from '../../hooks/use-is-mobile';
import styles from './reply-modal.module.css';
@@ -22,15 +23,13 @@ interface ReplyModalProps {
const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
const { t } = useTranslation();
const { subplebbitAddress } = useParams() as { subplebbitAddress: string };
const { setContent, resetContent, replyIndex, publishReply } = useReply({ cid: parentCid, subplebbitAddress });
const { setContent, publishReply } = useReply({ cid: parentCid, subplebbitAddress });
const account = useAccount();
const { displayName } = account?.author || {};
const [url, setUrl] = useState('');
const textRef = useRef<HTMLTextAreaElement>(null);
const textRef = useRef<HTMLTextAreaElement | null>(null);
const urlRef = useRef<HTMLInputElement>(null);
const { selectedText } = useSelectedTextStore();
const onPublishReply = () => {
const currentContent = textRef.current?.value || '';
@@ -46,15 +45,9 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
return;
}
publishReply();
closeModal();
};
useEffect(() => {
if (typeof replyIndex === 'number') {
closeModal();
resetContent();
}
}, [replyIndex, resetContent, closeModal]);
const nodeRef = useRef<HTMLDivElement>(null);
const isMobile = useIsMobile();
@@ -89,6 +82,32 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
)
: `The subplebbit might be offline and publishing might fail.`;
const setTextRef = (ref: HTMLTextAreaElement | null) => {
if (ref) {
textRef.current = ref;
!isMobile && ref.focus();
const len = ref.value.length;
ref.setSelectionRange(len, len);
}
};
const contentPrefix = `c/${parentCid && Plebbit.getShortCid(parentCid)}\n`;
const handleContentInput = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
const { value } = e.target;
if (!value.startsWith(contentPrefix)) {
e.target.value = contentPrefix + value.slice(contentPrefix.length);
}
};
const handleContentChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
// remove the prefix from the content to publish, and also add newlines for markdown
const contentWithoutPrefix = e.target.value.slice(contentPrefix.length).replace(/\n/g, '\n\n');
if (textRef.current && textRef.current.value !== contentWithoutPrefix) {
setContent.content(contentWithoutPrefix);
}
};
const modalContent = (
<div className={styles.container} ref={nodeRef}>
<div className={`replyModalHandle ${styles.title}`}>
@@ -123,19 +142,15 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
/>
</div>
<div className={styles.content}>
<span className={styles.parentCid} ref={parentCidRef}>
{`c/${parentCid && Plebbit.getShortCid(parentCid)}`}
</span>
<textarea
cols={48}
rows={3}
rows={4}
wrap='soft'
ref={textRef}
onChange={(e) => {
const content = e.target.value.replace(/\n/g, '\n\n');
setContent.content(content);
}}
autoFocus={!isMobile} // autofocus causes auto scroll to top on mobile
ref={setTextRef}
spellCheck={false}
defaultValue={contentPrefix + selectedText}
onInput={handleContentInput}
onChange={handleContentChange}
/>
</div>
{!(isInAllView || isInSubscriptionsView) && offlineAlert}
@@ -143,7 +158,7 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
<div className={styles.footer}>
{url && (
<>
{t('file_type')}: <LinkTypePreviewer link={url} />{' '}
{t('link_type')}: <LinkTypePreviewer link={url} />{' '}
</>
)}
<span className={styles.spoilerButton}>
@@ -154,7 +169,9 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
</label>
]
</span>
<button onClick={onPublishReply}>{t('reply')}</button>
<button className={styles.publishButton} onClick={onPublishReply}>
{t('post')}
</button>
</div>
</div>
</div>
+26 -19
View File
@@ -1,34 +1,41 @@
import { useState, useCallback } from 'react';
import { useState } from 'react';
import useIsMobile from './use-is-mobile';
import useSelectedTextStore from '../stores/use-selected-text-store';
const useReplyModal = () => {
const [showReplyModal, setShowReplyModal] = useState(false);
const [activeCid, setActiveCid] = useState<string | null>(null);
const { resetSelectedText, setSelectedText } = useSelectedTextStore();
// on mobile, the position is absolute instead of fixed, so we need to calculate the top position
// on mobile, the css position is absolute instead of fixed, so we need to calculate the top position
const isMobile = useIsMobile();
const [scrollY, setScrollY] = useState<number>(0);
const closeModal = useCallback(() => {
const closeModal = () => {
resetSelectedText();
setActiveCid(null);
setShowReplyModal(false);
}, []);
};
const openReplyModal = useCallback(
(cid: string) => {
if (isMobile) {
const currentScrollY = window.scrollY;
setScrollY(currentScrollY);
}
if (activeCid && activeCid !== cid) {
return;
} else if (!activeCid) {
setActiveCid(cid);
setShowReplyModal(true);
}
},
[activeCid, isMobile],
);
const getSelectedText = () => {
let text = document.getSelection()?.toString();
text && setSelectedText(`>${text}\n`);
};
const openReplyModal = (cid: string) => {
getSelectedText();
if (isMobile) {
const currentScrollY = window.scrollY;
setScrollY(currentScrollY);
}
if (activeCid && activeCid !== cid) {
return;
}
setActiveCid(cid);
setShowReplyModal(true);
};
return { activeCid, closeModal, openReplyModal, scrollY, showReplyModal };
};
+15
View File
@@ -0,0 +1,15 @@
import { create } from 'zustand';
interface SelectedTextState {
selectedText: string;
setSelectedText: (text: string) => void;
resetSelectedText: () => void;
}
const useSelectedTextStore = create<SelectedTextState>((set) => ({
selectedText: '',
setSelectedText: (text) => set({ selectedText: text }),
resetSelectedText: () => set({ selectedText: '' }),
}));
export default useSelectedTextStore;
+1 -1
View File
@@ -808,7 +808,7 @@
--challenge-modal-background-color: #282a2e;
--challenge-modal-border: 1px solid #111;
--challenge-modal-title-background-color: #282a2e;
--challenge-modal-title-text-color: #b0cab9;
--challenge-modal-title-text-color: #c5c8c6;
--challenge-modal-title-border: unset;
--challenge-modal-title-font-size: 10pt;
--challenge-modal-title-font-weight: 700;
@@ -24,7 +24,7 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => {
<div className={styles.filters}>
{isInCatalogView && (
<label className={`${styles.paddingBottom} capitalize`}>
<input type='checkbox' checked={showTextOnlyThreads} onChange={(e) => setShowTextOnlyThreads(e.target.checked)} />
<input type='checkbox' checked={!showTextOnlyThreads} onChange={(e) => setShowTextOnlyThreads(!e.target.checked)} />
{t('hide_threads_without_images')}
</label>
)}
@@ -32,11 +32,11 @@ const FiltersModal = ({ closeModal }: { closeModal: () => void }) => {
<div className={styles.nsfwLabels}>
<div className={styles.categoryTitle}>NSFW Boards</div>
<label>
<input type='checkbox' checked={showGoreBoards} onChange={(e) => setShowGoreBoards(e.target.checked)} />
<input type='checkbox' checked={!showGoreBoards} onChange={(e) => setShowGoreBoards(!e.target.checked)} />
Hide Gore Boards
</label>
<label>
<input type='checkbox' checked={showAdultBoards} onChange={(e) => setShowAdultBoards(e.target.checked)} />
<input type='checkbox' checked={!showAdultBoards} onChange={(e) => setShowAdultBoards(!e.target.checked)} />
Hide Adult Boards
</label>
</div>