diff --git a/public/assets/plebchan-husbando.jpg b/public/assets/not-found/not-found-1.jpg similarity index 100% rename from public/assets/plebchan-husbando.jpg rename to public/assets/not-found/not-found-1.jpg diff --git a/public/assets/not-found/not-found-2.jpg b/public/assets/not-found/not-found-2.jpg new file mode 100644 index 00000000..043bf030 Binary files /dev/null and b/public/assets/not-found/not-found-2.jpg differ diff --git a/public/assets/plebchan-psycho.png b/public/assets/plebchan-psycho.png deleted file mode 100644 index 803354ce..00000000 Binary files a/public/assets/plebchan-psycho.png and /dev/null differ diff --git a/public/assets/plebchan-thumbdown.png b/public/assets/plebchan-thumbdown.png deleted file mode 100644 index 04116fff..00000000 Binary files a/public/assets/plebchan-thumbdown.png and /dev/null differ diff --git a/public/translations/ar/default.json b/public/translations/ar/default.json index 6067cb13..7a53b264 100644 --- a/public/translations/ar/default.json +++ b/public/translations/ar/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "الرد على {{cid}}", "submit": "إرسال", "gif": "جي آي إف", - "moderating": "تدير" + "moderating": "تدير", + "not_moderating": "لست تدير أي منتدى", + "not_subscribed": "لست مشتركًا في أي منتدى", + "total_posts": "إجمالي المشاركات:", + "current_users": "المستخدمون الحاليون:", + "boards_tracked": "المنتديات المتابعة:", + "interests": "اهتمامات", + "random": "عشوائي", + "international": "دولية", + "projects": "مشاريع" } \ No newline at end of file diff --git a/public/translations/bn/default.json b/public/translations/bn/default.json index d98e04c3..ab94bcbc 100644 --- a/public/translations/bn/default.json +++ b/public/translations/bn/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}}-এ উত্তর দিন", "submit": "জমা দিন", "gif": "জিআইএফ", - "moderating": "মডারেটিং" + "moderating": "মডারেটিং", + "not_moderating": "কোনো বোর্ডসমূহ মডারেট করছেন না", + "not_subscribed": "কোনো বোর্ডসমূহে সাবস্ক্রাইব করা হয়নি", + "total_posts": "মোট পোস্টসমূহ:", + "current_users": "বর্তমান ব্যবহারকারীরা:", + "boards_tracked": "ট্র্যাক করা বোর্ডসমূহ:", + "interests": "আগ্রহসমূহ", + "random": "এলোমেলো", + "international": "আন্তর্জাতিক", + "projects": "প্রকল্পসমূহ" } \ No newline at end of file diff --git a/public/translations/cs/default.json b/public/translations/cs/default.json index b2c0a195..ff5945af 100644 --- a/public/translations/cs/default.json +++ b/public/translations/cs/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Odpovědět na {{cid}}", "submit": "Odeslat", "gif": "GIF", - "moderating": "moderování" + "moderating": "moderování", + "not_moderating": "Nemoderujete žádné nástěnky", + "not_subscribed": "Nejste přihlášeni k odběru žádných nástěnek", + "total_posts": "Celkem příspěvků:", + "current_users": "současní uživatelé:", + "boards_tracked": "sledované nástěnky:", + "interests": "zájmy", + "random": "náhodný", + "international": "mezinárodní", + "projects": "projekty" } \ No newline at end of file diff --git a/public/translations/da/default.json b/public/translations/da/default.json index 141362f6..34d267b5 100644 --- a/public/translations/da/default.json +++ b/public/translations/da/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Svar til {{cid}}", "submit": "Indsend", "gif": "GIF", - "moderating": "modererer" + "moderating": "modererer", + "not_moderating": "Du modererer ikke nogen opslagstavler", + "not_subscribed": "Ikke abonneret på nogen opslagstavler", + "total_posts": "Samlede opslag:", + "current_users": "nuværende brugere:", + "boards_tracked": "sporede opslagstavler:", + "interests": "interesser", + "random": "tilfældig", + "international": "internationale", + "projects": "projekter" } \ No newline at end of file diff --git a/public/translations/de/default.json b/public/translations/de/default.json index adaf123c..5f548b59 100644 --- a/public/translations/de/default.json +++ b/public/translations/de/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Antwort an {{cid}}", "submit": "Einreichen", "gif": "GIF", - "moderating": "moderieren" + "moderating": "moderieren", + "not_moderating": "Du moderierst keine Foren", + "not_subscribed": "Kein Abonnement für irgendwelche Foren", + "total_posts": "Gesamtanzahl der Beiträge:", + "current_users": "aktuelle Benutzer:", + "boards_tracked": "verfolgte Boards:", + "interests": "Interessen", + "random": "zufällig", + "international": "internationale", + "projects": "Projekte" } \ No newline at end of file diff --git a/public/translations/el/default.json b/public/translations/el/default.json index 486d3d54..d77b3dc0 100644 --- a/public/translations/el/default.json +++ b/public/translations/el/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Απάντηση σε {{cid}}", "submit": "Υποβολή", "gif": "GIF", - "moderating": "διαχειρίζεστε" + "moderating": "διαχειρίζεστε", + "not_moderating": "Δεν διαχειρίζεστε καμία διαδικτυακή πινακίδα", + "not_subscribed": "Δεν έχετε εγγραφεί σε καμία διαδικτυακή πινακίδα", + "total_posts": "Συνολικές Δημοσιεύσεις:", + "current_users": "τρέχοντες χρήστες:", + "boards_tracked": "πίνακες που παρακολουθούνται:", + "interests": "ενδιαφέροντα", + "random": "τυχαίος", + "international": "διεθνείς", + "projects": "έργα" } \ No newline at end of file diff --git a/public/translations/en/default.json b/public/translations/en/default.json index 03d752c0..c7ac71ba 100644 --- a/public/translations/en/default.json +++ b/public/translations/en/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Reply to {{cid}}", "submit": "Submit", "gif": "GIF", - "moderating": "moderating" + "moderating": "moderating", + "not_moderating": "Not moderating any boards", + "not_subscribed": "Not subscribed to any boards", + "total_posts": "Total Posts:", + "current_users": "current users:", + "boards_tracked": "boards tracked:", + "interests": "interests", + "random": "random", + "international": "international", + "projects": "projects" } \ No newline at end of file diff --git a/public/translations/es/default.json b/public/translations/es/default.json index 2dfab55b..6fb3afa9 100644 --- a/public/translations/es/default.json +++ b/public/translations/es/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Responder a {{cid}}", "submit": "Enviar", "gif": "GIF", - "moderating": "moderando" + "moderating": "moderando", + "not_moderating": "No estás moderando ningún foro", + "not_subscribed": "No suscrito a ningún foro", + "total_posts": "Total de publicaciones:", + "current_users": "usuarios actuales:", + "boards_tracked": "foros seguidos:", + "interests": "intereses", + "random": "aleatorio", + "international": "internacionales", + "projects": "proyectos" } \ No newline at end of file diff --git a/public/translations/fa/default.json b/public/translations/fa/default.json index 43f61f9b..868c0f79 100644 --- a/public/translations/fa/default.json +++ b/public/translations/fa/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "پاسخ به {{cid}}", "submit": "ارسال", "gif": "گیف", - "moderating": "مدیریت" + "moderating": "مدیریت", + "not_moderating": "هیچ تالار پیامی را مدیریت نمی‌کنید", + "not_subscribed": "به هیچ تالار پیامی اشتراک ندارید", + "total_posts": "کل پست‌ها:", + "current_users": "کاربران فعلی:", + "boards_tracked": "تالارهای پیگیری شده:", + "interests": "علایق", + "random": "تصادفی", + "international": "بین‌المللی", + "projects": "پروژه‌ها" } \ No newline at end of file diff --git a/public/translations/fi/default.json b/public/translations/fi/default.json index 2271349d..8f0c9bc6 100644 --- a/public/translations/fi/default.json +++ b/public/translations/fi/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Vastaa {{cid}}", "submit": "Lähetä", "gif": "GIF", - "moderating": "moderoit" + "moderating": "moderoit", + "not_moderating": "Et moderoi mitään foorumeita", + "not_subscribed": "Et ole tilaajana missään foorumeissa", + "total_posts": "Viestejä yhteensä:", + "current_users": "nykyiset käyttäjät:", + "boards_tracked": "seuratut foorumit:", + "interests": "kiinnostuksen kohteet", + "random": "satunnainen", + "international": "kansainväliset", + "projects": "projektit" } \ No newline at end of file diff --git a/public/translations/fil/default.json b/public/translations/fil/default.json index 11f4b987..01bbb983 100644 --- a/public/translations/fil/default.json +++ b/public/translations/fil/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Tumugon sa {{cid}}", "submit": "Isumite", "gif": "GIF", - "moderating": "namamahala" + "moderating": "namamahala", + "not_moderating": "Hindi namamahala ng anumang mga board", + "not_subscribed": "Hindi nakasubscribe sa anumang mga board", + "total_posts": "Kabuuang Posts:", + "current_users": "kasalukuyang mga gumagamit:", + "boards_tracked": "mga board na sinusubaybayan:", + "interests": "mga interes", + "random": "random", + "international": "internasyonal", + "projects": "mga proyekto" } \ No newline at end of file diff --git a/public/translations/fr/default.json b/public/translations/fr/default.json index 9c68f0ba..2d1ee80a 100644 --- a/public/translations/fr/default.json +++ b/public/translations/fr/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Répondre à {{cid}}", "submit": "Soumettre", "gif": "GIF", - "moderating": "modération" + "moderating": "modération", + "not_moderating": "Vous ne modérez aucun forum", + "not_subscribed": "Non abonné à aucun forum", + "total_posts": "Total des publications:", + "current_users": "utilisateurs actuels:", + "boards_tracked": "forums suivis:", + "interests": "intérêts", + "random": "aléatoire", + "international": "internationaux", + "projects": "projets" } \ No newline at end of file diff --git a/public/translations/he/default.json b/public/translations/he/default.json index 9b9039f6..c5298a88 100644 --- a/public/translations/he/default.json +++ b/public/translations/he/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "תגובה ל{{cid}}", "submit": "שלח", "gif": "גיף", - "moderating": "מנהל" + "moderating": "מנהל", + "not_moderating": "אינך מנהל פורומים", + "not_subscribed": "לא רשום כמנוי לפורומים", + "total_posts": "סה\"כ פוסטים:", + "current_users": "משתמשים נוכחיים:", + "boards_tracked": "פורומים שנמצאים במעקב:", + "interests": "עניינים", + "random": "אקראי", + "international": "בינלאומיים", + "projects": "פרויקטים" } \ No newline at end of file diff --git a/public/translations/hi/default.json b/public/translations/hi/default.json index aa0f39c8..4ae7c70c 100644 --- a/public/translations/hi/default.json +++ b/public/translations/hi/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}} का उत्तर दें", "submit": "जमा करें", "gif": "जीआईएफ", - "moderating": "मॉडरेटिंग" + "moderating": "मॉडरेटिंग", + "not_moderating": "किसी भी मंच का मॉडरेशन नहीं कर रहे हैं", + "not_subscribed": "किसी भी मंच की सदस्यता नहीं ली है", + "total_posts": "कुल पोस्ट:", + "current_users": "वर्तमान उपयोगकर्ता:", + "boards_tracked": "ट्रैक किए गए बोर्ड:", + "interests": "रुचियाँ", + "random": "यादृच्छिक", + "international": "अंतरराष्ट्रीय", + "projects": "परियोजनाएं" } \ No newline at end of file diff --git a/public/translations/hu/default.json b/public/translations/hu/default.json index a2aded7c..6d8bc944 100644 --- a/public/translations/hu/default.json +++ b/public/translations/hu/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Válasz erre: {{cid}}", "submit": "Beküldés", "gif": "GIF", - "moderating": "moderálás" + "moderating": "moderálás", + "not_moderating": "Nem moderál semmilyen fórumot", + "not_subscribed": "Nem vagy feliratkozva semmilyen fórumra", + "total_posts": "Összes bejegyzés:", + "current_users": "jelenlegi felhasználók:", + "boards_tracked": "követett fórumok:", + "interests": "érdeklődési körök", + "random": "véletlenszerű", + "international": "nemzetközi", + "projects": "projektek" } \ No newline at end of file diff --git a/public/translations/id/default.json b/public/translations/id/default.json index 96c9e043..bf5a314d 100644 --- a/public/translations/id/default.json +++ b/public/translations/id/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Balas ke {{cid}}", "submit": "Kirim", "gif": "GIF", - "moderating": "memoderasi" + "moderating": "memoderasi", + "not_moderating": "Tidak memoderasi papan pesan apa pun", + "not_subscribed": "Tidak berlangganan papan pesan apa pun", + "total_posts": "Total Posting:", + "current_users": "pengguna saat ini:", + "boards_tracked": "papan yang dilacak:", + "interests": "minat", + "random": "acak", + "international": "internasional", + "projects": "proyek" } \ No newline at end of file diff --git a/public/translations/it/default.json b/public/translations/it/default.json index dfda2da7..82d1ab86 100644 --- a/public/translations/it/default.json +++ b/public/translations/it/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Rispondi a {{cid}}", "submit": "Invia", "gif": "GIF", - "moderating": "stai moderando" + "moderating": "stai moderando", + "not_moderating": "Non stai moderando nessun forum", + "not_subscribed": "Non iscritto a nessun forum", + "total_posts": "Post totali:", + "current_users": "utenti attuali:", + "boards_tracked": "forum tracciati:", + "interests": "interessi", + "random": "casuale", + "international": "internazionali", + "projects": "progetti" } \ No newline at end of file diff --git a/public/translations/ja/default.json b/public/translations/ja/default.json index 184e370d..e941e377 100644 --- a/public/translations/ja/default.json +++ b/public/translations/ja/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}}に返信", "submit": "送信", "gif": "GIF", - "moderating": "モデレート中" + "moderating": "モデレート中", + "not_moderating": "掲示板をモデレートしていません", + "not_subscribed": "どの掲示板にも購読していません", + "total_posts": "総投稿数:", + "current_users": "現在のユーザー:", + "boards_tracked": "追跡されたボード:", + "interests": "興味", + "random": "ランダム", + "international": "国際的な", + "projects": "プロジェクト" } \ No newline at end of file diff --git a/public/translations/ko/default.json b/public/translations/ko/default.json index c782d9ae..d97bee07 100644 --- a/public/translations/ko/default.json +++ b/public/translations/ko/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}}에 답변", "submit": "제출", "gif": "GIF", - "moderating": "중재 중" + "moderating": "중재 중", + "not_moderating": "어떤 게시판도 중재하고 있지 않습니다", + "not_subscribed": "어떤 게시판에도 구독하지 않았습니다", + "total_posts": "총 게시물:", + "current_users": "현재 사용자:", + "boards_tracked": "추적된 게시판:", + "interests": "관심사", + "random": "랜덤", + "international": "국제적인", + "projects": "프로젝트" } \ No newline at end of file diff --git a/public/translations/mr/default.json b/public/translations/mr/default.json index 78372f09..fdf80ef7 100644 --- a/public/translations/mr/default.json +++ b/public/translations/mr/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}} ला उत्तर द्या", "submit": "सबमिट करा", "gif": "जीआईएफ", - "moderating": "मॉडरेट करीत आहे" + "moderating": "मॉडरेट करीत आहे", + "not_moderating": "कोणत्याही संदेश फलकाचे मॉडरेशन करीत नाही आहात", + "not_subscribed": "कोणत्याही संदेश फलकावर सदस्यता घेतलेली नाही", + "total_posts": "एकूण पोस्ट:", + "current_users": "सध्याचे वापरकर्ते:", + "boards_tracked": "ट्रॅक केलेले बोर्ड:", + "interests": "आवडी", + "random": "यादृच्छ", + "international": "आंतरराष्ट्रीय", + "projects": "प्रकल्प" } \ No newline at end of file diff --git a/public/translations/nl/default.json b/public/translations/nl/default.json index 7ccf7585..5271ad27 100644 --- a/public/translations/nl/default.json +++ b/public/translations/nl/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Reageren op {{cid}}", "submit": "Verzenden", "gif": "GIF", - "moderating": "modereren" + "moderating": "modereren", + "not_moderating": "Je modereert geen forums", + "not_subscribed": "Niet geabonneerd op forums", + "total_posts": "Totaal aantal berichten:", + "current_users": "huidige gebruikers:", + "boards_tracked": "gevolgde borden:", + "interests": "interesses", + "random": "willekeurig", + "international": "internationale", + "projects": "projecten" } \ No newline at end of file diff --git a/public/translations/no/default.json b/public/translations/no/default.json index f45b3a8c..aa238531 100644 --- a/public/translations/no/default.json +++ b/public/translations/no/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Svar til {{cid}}", "submit": "Send inn", "gif": "GIF", - "moderating": "modererer" + "moderating": "modererer", + "not_moderating": "Modererer ingen fora", + "not_subscribed": "Ikke abonnert på noen fora", + "total_posts": "Totalt antall innlegg:", + "current_users": "nåværende brukere:", + "boards_tracked": "sporede fora:", + "interests": "interesser", + "random": "tilfeldig", + "international": "internasjonale", + "projects": "prosjekter" } \ No newline at end of file diff --git a/public/translations/pl/default.json b/public/translations/pl/default.json index e32bbb46..93125ac4 100644 --- a/public/translations/pl/default.json +++ b/public/translations/pl/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Odpowiedz na {{cid}}", "submit": "Zatwierdź", "gif": "GIF", - "moderating": "moderujesz" + "moderating": "moderujesz", + "not_moderating": "Nie moderujesz żadnych for", + "not_subscribed": "Nie subskrybujesz żadnych for", + "total_posts": "Łączna liczba postów:", + "current_users": "obecni użytkownicy:", + "boards_tracked": "śledzone fora:", + "interests": "zainteresowania", + "random": "losowy", + "international": "międzynarodowe", + "projects": "projekty" } \ No newline at end of file diff --git a/public/translations/pt/default.json b/public/translations/pt/default.json index 97b5ab78..8a7c9f00 100644 --- a/public/translations/pt/default.json +++ b/public/translations/pt/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Responder a {{cid}}", "submit": "Enviar", "gif": "GIF", - "moderating": "moderando" + "moderating": "moderando", + "not_moderating": "Não está moderando nenhum fórum", + "not_subscribed": "Não inscrito em nenhum fórum", + "total_posts": "Total de postagens:", + "current_users": "usuários atuais:", + "boards_tracked": "fóruns rastreados:", + "interests": "interesses", + "random": "aleatório", + "international": "internacionais", + "projects": "projetos" } \ No newline at end of file diff --git a/public/translations/ro/default.json b/public/translations/ro/default.json index 8cd35c2e..f55be867 100644 --- a/public/translations/ro/default.json +++ b/public/translations/ro/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Răspundeți la {{cid}}", "submit": "Trimite", "gif": "GIF", - "moderating": "moderează" + "moderating": "moderează", + "not_moderating": "Nu moderezi niciun forum", + "not_subscribed": "Nu sunteți abonat la niciun forum", + "total_posts": "Total postări:", + "current_users": "utilizatori actuali:", + "boards_tracked": "forumuri urmărite:", + "interests": "interese", + "random": "aleator", + "international": "internaționale", + "projects": "proiecte" } \ No newline at end of file diff --git a/public/translations/ru/default.json b/public/translations/ru/default.json index 107779b8..c5a3e800 100644 --- a/public/translations/ru/default.json +++ b/public/translations/ru/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Ответить на {{cid}}", "submit": "Отправить", "gif": "ГИФ", - "moderating": "модерируете" + "moderating": "модерируете", + "not_moderating": "Вы не модерируете ни один форум", + "not_subscribed": "Вы не подписаны ни на один форум", + "total_posts": "Всего сообщений:", + "current_users": "текущие пользователи:", + "boards_tracked": "отслеживаемые форумы:", + "interests": "интересы", + "random": "случайный", + "international": "международные", + "projects": "проекты" } \ No newline at end of file diff --git a/public/translations/sq/default.json b/public/translations/sq/default.json index 42b83c08..1cc1ed01 100644 --- a/public/translations/sq/default.json +++ b/public/translations/sq/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Përgjigju në {{cid}}", "submit": "Dorëzo", "gif": "GIF", - "moderating": "moderimi" + "moderating": "moderimi", + "not_moderating": "Nuk jeni duke moderuar ndonjë forum", + "not_subscribed": "Nuk jeni abonuar në ndonjë forum", + "total_posts": "Postime totale:", + "current_users": "përdoruesit aktualë:", + "boards_tracked": "forume të gjurmueshme:", + "interests": "interesat", + "random": "i rastësishëm", + "international": "ndërkombëtare", + "projects": "projekte" } \ No newline at end of file diff --git a/public/translations/sv/default.json b/public/translations/sv/default.json index 4fc80fc8..35cb5552 100644 --- a/public/translations/sv/default.json +++ b/public/translations/sv/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Svara på {{cid}}", "submit": "Skicka in", "gif": "GIF", - "moderating": "modererar" + "moderating": "modererar", + "not_moderating": "Modererar inga forum", + "not_subscribed": "Inte prenumererar på några forum", + "total_posts": "Totalt antal inlägg:", + "current_users": "aktuella användare:", + "boards_tracked": "spårade forum:", + "interests": "intressen", + "random": "slumpmässig", + "international": "internationella", + "projects": "projekt" } \ No newline at end of file diff --git a/public/translations/te/default.json b/public/translations/te/default.json index 3d5ab114..7925028d 100644 --- a/public/translations/te/default.json +++ b/public/translations/te/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}}కి స్పందించండి", "submit": "సమర్పించు", "gif": "జీఐఎఫ్", - "moderating": "మాడరేటింగ్" + "moderating": "మాడరేటింగ్", + "not_moderating": "మీరు ఏ సందేశ బోర్డులను మాడరేట్ చేయడం లేదు", + "not_subscribed": "ఏ సందేశ బోర్డులకు సబ్‌స్క్రైబ్ చేయలేదు", + "total_posts": "మొత్తం పోస్ట్‌లు:", + "current_users": "ప్రస్తుత వాడుకరులు:", + "boards_tracked": "ట్రాక్ చేయబడిన బోర్డులు:", + "interests": "ఆసక్తులు", + "random": "యాదృచ్ఛిక", + "international": "అంతర్జాతీయ", + "projects": "ప్రాజెక్టులు" } \ No newline at end of file diff --git a/public/translations/th/default.json b/public/translations/th/default.json index 5caa3d15..7ed717cf 100644 --- a/public/translations/th/default.json +++ b/public/translations/th/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "ตอบกลับ {{cid}}", "submit": "ส่ง", "gif": "จีไอเอฟ", - "moderating": "กำลังดูแล" + "moderating": "กำลังดูแล", + "not_moderating": "ไม่ได้ดูแลกระดานข่าวใด ๆ", + "not_subscribed": "ไม่ได้สมัครสมาชิกกระดานข่าวใด ๆ", + "total_posts": "โพสต์ทั้งหมด:", + "current_users": "ผู้ใช้งานปัจจุบัน:", + "boards_tracked": "บอร์ดที่ติดตาม:", + "interests": "ความสนใจ", + "random": "สุ่ม", + "international": "นานาชาติ", + "projects": "โครงการ" } \ No newline at end of file diff --git a/public/translations/tr/default.json b/public/translations/tr/default.json index c7a39447..6e0b557a 100644 --- a/public/translations/tr/default.json +++ b/public/translations/tr/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}}’ye yanıt ver", "submit": "Gönder", "gif": "GIF", - "moderating": "moderatörlük yapıyorsun" + "moderating": "moderatörlük yapıyorsun", + "not_moderating": "Hiçbir forumu moderatörlük yapmıyorsun", + "not_subscribed": "Hiçbir foruma abone değilsiniz", + "total_posts": "Toplam Gönderi:", + "current_users": "mevcut kullanıcılar:", + "boards_tracked": "takip edilen panolar:", + "interests": "ilgi alanları", + "random": "rastgele", + "international": "uluslararası", + "projects": "projeler" } \ No newline at end of file diff --git a/public/translations/uk/default.json b/public/translations/uk/default.json index 36279e0a..27d0e1ad 100644 --- a/public/translations/uk/default.json +++ b/public/translations/uk/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Відповісти на {{cid}}", "submit": "Надіслати", "gif": "ГІФ", - "moderating": "модеруєте" + "moderating": "модеруєте", + "not_moderating": "Ви не модеруєте жодного форуму", + "not_subscribed": "Ви не підписані на жоден форум", + "total_posts": "Всього повідомлень:", + "current_users": "поточні користувачі:", + "boards_tracked": "відстежувані форуми:", + "interests": "інтереси", + "random": "випадковий", + "international": "міжнародні", + "projects": "проекти" } \ No newline at end of file diff --git a/public/translations/ur/default.json b/public/translations/ur/default.json index 73f4da61..a830d99b 100644 --- a/public/translations/ur/default.json +++ b/public/translations/ur/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "{{cid}} کا جواب دیں", "submit": "جمع کرائیں", "gif": "جی آئی ایف", - "moderating": "منتظم کر رہے ہیں" + "moderating": "منتظم کر رہے ہیں", + "not_moderating": "آپ کسی پیغام بورڈ کا انتظام نہیں کر رہے", + "not_subscribed": "آپ کسی پیغام بورڈ کی سبسکرپشن نہیں لے رہے", + "total_posts": "کل پوسٹس:", + "current_users": "موجودہ صارفین:", + "boards_tracked": "ٹریک کیے گئے بورڈز:", + "interests": "دلچسپیاں", + "random": "بے ترتیب", + "international": "بین الاقوامی", + "projects": "منصوبے" } \ No newline at end of file diff --git a/public/translations/vi/default.json b/public/translations/vi/default.json index a3f87187..da3a6a0e 100644 --- a/public/translations/vi/default.json +++ b/public/translations/vi/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "Trả lời {{cid}}", "submit": "Gửi", "gif": "GIF", - "moderating": "đang điều hành" + "moderating": "đang điều hành", + "not_moderating": "Không điều hành diễn đàn nào", + "not_subscribed": "Không đăng ký bất kỳ diễn đàn nào", + "total_posts": "Tổng số bài viết:", + "current_users": "người dùng hiện tại:", + "boards_tracked": "bảng được theo dõi:", + "interests": "sở thích", + "random": "ngẫu nhiên", + "international": "quốc tế", + "projects": "dự án" } \ No newline at end of file diff --git a/public/translations/zh/default.json b/public/translations/zh/default.json index 4913a841..8a6a207c 100644 --- a/public/translations/zh/default.json +++ b/public/translations/zh/default.json @@ -63,5 +63,14 @@ "reply_to_cid": "回复{{cid}}", "submit": "提交", "gif": "GIF", - "moderating": "正在管理" + "moderating": "正在管理", + "not_moderating": "你没有管理任何论坛", + "not_subscribed": "你没有订阅任何论坛", + "total_posts": "总帖数:", + "current_users": "当前用户:", + "boards_tracked": "跟踪的板块:", + "interests": "兴趣", + "random": "随机", + "international": "国际的", + "projects": "项目" } \ No newline at end of file diff --git a/src/app.tsx b/src/app.tsx index 60cb0ef9..872a9576 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,11 +1,12 @@ import { useEffect } from 'react'; import { Outlet, Route, Routes, useLocation, useParams } from 'react-router-dom'; -import { isHomeView } from './lib/utils/view-utils'; +import { isHomeView, isNotFoundView } from './lib/utils/view-utils'; import useTheme from './hooks/use-theme'; import styles from './app.module.css'; import Board from './views/board'; import Catalog from './views/catalog'; import Home from './views/home'; +import NotFound from './views/not-found'; import PendingPost from './views/pending-post'; import PostPage from './views/post-page'; import Settings from './views/settings'; @@ -17,9 +18,17 @@ import SubplebbitStats from './components/subplebbit-stats'; import PostForm from './components/post-form'; const BoardLayout = () => { - const { subplebbitAddress } = useParams(); + const { accountCommentIndex, commentCid, subplebbitAddress } = useParams(); const location = useLocation(); + const isValidAccountCommentIndex = !accountCommentIndex || (!isNaN(parseInt(accountCommentIndex)) && parseInt(accountCommentIndex) >= 0); + const isValidCommentCid = !commentCid || /^Qm[a-zA-Z0-9]{44}$/.test(commentCid); + const isValidSubplebbitAddress = !subplebbitAddress || subplebbitAddress.includes('.') || /^12D3K[a-zA-Z0-9]{44}$/.test(subplebbitAddress); + + if (!isValidAccountCommentIndex || !isValidCommentCid || !isValidSubplebbitAddress) { + return ; + } + // force rerender of post form when navigating between pages const key = `${subplebbitAddress}-${location.pathname}`; @@ -38,14 +47,16 @@ const BoardLayout = () => { const App = () => { const location = useLocation(); + const params = useParams(); const isInHomeView = isHomeView(location.pathname); + const isInNotFoundPage = isNotFoundView(location.pathname, params); const [theme] = useTheme(); useEffect(() => { document.body.classList.forEach((className) => document.body.classList.remove(className)); - const classToAdd = isInHomeView ? 'yotsuba' : theme; + const classToAdd = isInHomeView || isInNotFoundPage ? 'yotsuba' : theme; document.body.classList.add(classToAdd); - }, [theme, isInHomeView]); + }, [theme, isInHomeView, isInNotFoundPage]); const globalLayout = ( <> @@ -71,6 +82,8 @@ const App = () => { } /> } /> + + } /> diff --git a/src/components/board-banner/board-banner.tsx b/src/components/board-banner/board-banner.tsx index 8b522ac3..b6c90cdb 100644 --- a/src/components/board-banner/board-banner.tsx +++ b/src/components/board-banner/board-banner.tsx @@ -8,7 +8,8 @@ const totalBanners = 57; const ImageBanner = () => { const [imagePath] = useState(() => { const randomBannerIndex = Math.floor(Math.random() * totalBanners) + 1; - return `assets/banners/banner-${randomBannerIndex}.jpg`; + const cacheBuster = new Date().getTime(); + return `assets/banners/banner-${randomBannerIndex}.jpg?cacheBuster=${cacheBuster}`; }); return ; diff --git a/src/components/challenge-modal/challenge-modal.tsx b/src/components/challenge-modal/challenge-modal.tsx index 09461170..c9a57908 100644 --- a/src/components/challenge-modal/challenge-modal.tsx +++ b/src/components/challenge-modal/challenge-modal.tsx @@ -96,9 +96,7 @@ const Challenge = ({ challenge, closeModal }: ChallengeProps) => { />
{isTextChallenge &&
{challenges[currentChallengeIndex]?.challenge}
} - {isImageChallenge && ( - {t('loading')} - )} + {isImageChallenge && }
diff --git a/src/components/post/post.module.css b/src/components/post/post.module.css index 0ff6cc29..60adcd93 100644 --- a/src/components/post/post.module.css +++ b/src/components/post/post.module.css @@ -191,6 +191,10 @@ color: var(--post-mobile-abbr-text-color); } +.stateString { + color: var(--post-mobile-abbr-text-color); +} + .postDesktop .summary .expandButtonWrapper { position: absolute; top: 8px; diff --git a/src/components/post/post.tsx b/src/components/post/post.tsx index 8fb371c9..7762c7fa 100644 --- a/src/components/post/post.tsx +++ b/src/components/post/post.tsx @@ -61,6 +61,11 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies }: PostProps) const account = useAccount(); const accountShortAddress = account?.author?.shortAddress; + const stateString = useStateString(post); + const loadingString = stateString && ( +
{stateString !== 'Failed' ? : stateString}
+ ); + return (
@@ -154,9 +159,11 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies }: PostProps) )} - - [{t('reply')}] - + {!isInPostPage && ( + + [{t('reply')}] + + )} }} /> )} + {!cid && state === 'pending' && ( + <> +
+ {loadingString} + + )} )} - {(replies.length > 5 || (pinned && replies.length > 0)) && !isInPostPage && ( + {!isDescription && !isRules && (replies.length > 5 || (pinned && replies.length > 0)) && !isInPostPage && ( @@ -199,6 +212,8 @@ const PostDesktop = ({ openReplyModal, post, roles, showAllReplies }: PostProps) )} {!(pinned && !isInPostPage) && + !isDescription && + !isRules && replies && (showAllReplies ? replies : replies.slice(-5)).map((reply, index) => (
@@ -373,6 +388,11 @@ const PostMobile = ({ openReplyModal, post, roles, showAllReplies }: PostProps) const account = useAccount(); const accountShortAddress = account?.author?.shortAddress; + const stateString = useStateString(post); + const loadingString = stateString && ( +
{stateString !== 'Failed' ? : stateString}
+ ); + return (
@@ -446,6 +466,12 @@ const PostMobile = ({ openReplyModal, post, roles, showAllReplies }: PostProps) }} /> )} + {!cid && state === 'pending' && ( + <> +
+ {loadingString} + + )} )}
@@ -462,6 +488,8 @@ const PostMobile = ({ openReplyModal, post, roles, showAllReplies }: PostProps) )}
{!(pinned && !isInPostPage) && + !isDescription && + !isRules && replies && (showAllReplies ? replies : replies.slice(-5)).map((reply, index) => (
diff --git a/src/lib/utils/time-utils.ts b/src/lib/utils/time-utils.ts index 64bbb893..05ca793b 100644 --- a/src/lib/utils/time-utils.ts +++ b/src/lib/utils/time-utils.ts @@ -1,8 +1,10 @@ +import i18next from 'i18next'; + export const getFormattedDate = (commentTimestamp: number) => { if (commentTimestamp === undefined || isNaN(commentTimestamp)) { return ''; } - const locale = Intl.DateTimeFormat().resolvedOptions().locale; + const locale = i18next.language || 'en'; const string = new Intl.DateTimeFormat(locale, { hour12: false, year: '2-digit', diff --git a/src/lib/utils/view-utils.ts b/src/lib/utils/view-utils.ts index 38909d21..230e81e5 100644 --- a/src/lib/utils/view-utils.ts +++ b/src/lib/utils/view-utils.ts @@ -34,3 +34,14 @@ export const isCatalogView = (pathname: string, params: ParamsType): boolean => export const isPendingPostView = (pathname: string, params: ParamsType): boolean => { return pathname === `/profile/${params.accountCommentIndex}`; }; + +export const isNotFoundView = (pathname: string, params: ParamsType): boolean => { + return ( + !isHomeView(pathname) && + !isDescriptionView(pathname, params) && + !isRulesView(pathname, params) && + !isPostPageView(pathname, params) && + !isCatalogView(pathname, params) && + !isPendingPostView(pathname, params) + ); +}; diff --git a/src/views/home/home.module.css b/src/views/home/home.module.css index b67a9550..2c49ea45 100644 --- a/src/views/home/home.module.css +++ b/src/views/home/home.module.css @@ -32,6 +32,7 @@ .boxBar, .infoboxBar { padding-left: 0.5em; line-height: 2em; + text-transform: capitalize; } .infoboxBar { @@ -253,6 +254,7 @@ .stats .stat { display: inline-block; width: 33%; + text-transform: capitalize; } @media (max-width: 640px) { diff --git a/src/views/home/home.tsx b/src/views/home/home.tsx index 90a38175..417078a4 100644 --- a/src/views/home/home.tsx +++ b/src/views/home/home.tsx @@ -76,12 +76,13 @@ const InfoBox = () => { const Board = ({ isOffline, subplebbit }: { isOffline: boolean; subplebbit: Subplebbit }) => { const { t } = useTranslation(); const { address, title, tags } = subplebbit; - const isSubNsfw = tags.includes('porn') || tags.includes('gore') || tags.includes('violence') || tags.includes('vulgar'); + const nsfwTags = ['adult', 'gore']; + const nsfwTag = tags.find((tag: string) => nsfwTags.includes(tag)); return (
{title || address} - {isSubNsfw && ({t('nsfw')})} + {nsfwTag && ({t(nsfwTag)})} {isOffline && }
); @@ -104,7 +105,7 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits const isSubOffline = (address: string) => { const subplebbit = subplebbits && subplebbits.find((sub: Subplebbit) => sub?.address === address); - const isOffline = subplebbit?.updatedAt && subplebbit.updatedAt < Date.now() / 1000 - 60 * 30; + const isOffline = subplebbit?.updatedAt && subplebbit.updatedAt < Date.now() / 1000 - 60 * 60; return isOffline; }; @@ -122,7 +123,7 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits ))}
-

Projects

+

{t('projects')}

{projectsSubs.map((sub) => ( @@ -130,7 +131,7 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits
-

Interests

+

{t('interests')}

{interestsSubs.map((sub) => ( @@ -138,13 +139,13 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits
-

Random

+

{t('random')}

{randomSubs.map((sub) => ( ))}
-

International

+

{t('international')}

{internationalSubs.map((sub) => ( @@ -157,10 +158,10 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits {subscriptions.length > 0 ? subscriptions.map((address: string, index: number) => (
- p/{address} + {address}
)) - : 'Not subscribed to any board.'} + : t('not_subscribed')}

{t('moderating')}

@@ -170,7 +171,7 @@ const Boards = ({ multisub, subplebbits }: { multisub: Subplebbit[]; subplebbits p/{address}
)) - : 'Not moderating any board.'} + : t('not_moderating')}
@@ -366,13 +367,13 @@ const Stats = ({ multisub, subplebbitAddresses }: { multisub: any; subplebbitAdd {enoughStats ? ( <>
- Total Posts: {totalPosts} + {t('total_posts')} {totalPosts}
- Current Users: {currentUsers} + {t('current_users')} {currentUsers}
- Boards Tracked: {boardsTracked} + {t('boards_tracked')} {boardsTracked}
) : ( @@ -471,6 +472,16 @@ const Footer = () => { ); }; +export const HomeLogo = () => { + return ( + +
+ +
+ + ); +}; + const Home = () => { const defaultSubplebbits = useDefaultSubplebbits(); const subplebbitAddresses = useDefaultSubplebbitAddresses(); @@ -478,11 +489,7 @@ const Home = () => { return (
- -
- -
- + diff --git a/src/views/home/index.ts b/src/views/home/index.ts index 2fdb1475..1b862780 100644 --- a/src/views/home/index.ts +++ b/src/views/home/index.ts @@ -1 +1 @@ -export { default } from './home'; +export { HomeLogo, default } from './home'; diff --git a/src/views/not-found/index.ts b/src/views/not-found/index.ts new file mode 100644 index 00000000..9bcb7ca7 --- /dev/null +++ b/src/views/not-found/index.ts @@ -0,0 +1 @@ +export { default } from './not-found'; diff --git a/src/views/not-found/not-found.module.css b/src/views/not-found/not-found.module.css new file mode 100644 index 00000000..df9c1f1a --- /dev/null +++ b/src/views/not-found/not-found.module.css @@ -0,0 +1,68 @@ +.content { + margin: auto; + text-align: left; + width: 57.69em; + min-width: 750px; +} + +.boxOuter { + background: #fff; + border: 1px solid; + zoom: 100%; + margin-bottom: .5em; + padding-bottom: .5em; +} + +.boxBar { + background: #fca; + color: #800; + position: relative; + zoom: 100%; + padding-left: .5em; + line-height: 2em; +} + +.boxBar h2 { + text-align: center; + font-size: 131%; + font-weight: 700; +} + +.boxContent { + margin-top: 10px; + color: #000; + line-height: 1.5em; + font-size: 93%; + padding: .5em; + padding-top: .25em; + padding-bottom: 0; +} + +.boxContent img { + display: block; + margin: auto; +} + +.backToBoard { + text-align: center; + font-size: 12pt !important; + margin: 0 20px 10px 20px; + color: #800; + font-weight: bold; +} + +.backToBoard a { + color: blue; +} + +@media (max-width: 640px) { + .content { + min-width: 0; + width: auto; + padding: 10px; + } + + .boxContent img { + width: 100%; + } +} \ No newline at end of file diff --git a/src/views/not-found/not-found.tsx b/src/views/not-found/not-found.tsx new file mode 100644 index 00000000..0e2be030 --- /dev/null +++ b/src/views/not-found/not-found.tsx @@ -0,0 +1,47 @@ +import { useState } from 'react'; +import { Link, useParams } from 'react-router-dom'; +import { HomeLogo } from '../home'; +import styles from './not-found.module.css'; +import Plebbit from '@plebbit/plebbit-js/dist/browser/index.js'; + +const totalNotFoundImages = 2; + +const NotFoundImage = () => { + const [imagePath] = useState(() => { + const randomBannerIndex = Math.floor(Math.random() * totalNotFoundImages) + 1; + const cacheBuster = new Date().getTime(); + return `assets/not-found/not-found-${randomBannerIndex}.jpg?cacheBuster=${cacheBuster}`; + }); + + return ; +}; + +const NotFound = () => { + const { subplebbitAddress } = useParams(); + + return ( +
+ +
+
+
+

404 Not Found

+
+
+ + {subplebbitAddress && ( + <> +
+
+ [Back to p/{Plebbit.getShortAddress(subplebbitAddress)}] +
+ + )} +
+
+
+
+ ); +}; + +export default NotFound; diff --git a/src/views/pending-post/pending-post.module.css b/src/views/pending-post/pending-post.module.css deleted file mode 100644 index 76b18b4d..00000000 --- a/src/views/pending-post/pending-post.module.css +++ /dev/null @@ -1,16 +0,0 @@ -.stateString { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - width: calc(100vw - 28px); - width: 100vw; - margin-top: 10px; - margin-left: 40px; -} - -@media (max-width: 640px) { - .stateString { - margin-top: 0px; - margin-left: 10px; - } -} \ No newline at end of file diff --git a/src/views/pending-post/pending-post.tsx b/src/views/pending-post/pending-post.tsx index c8724c39..0aab5e3b 100644 --- a/src/views/pending-post/pending-post.tsx +++ b/src/views/pending-post/pending-post.tsx @@ -1,17 +1,13 @@ import { useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useAccountComment } from '@plebbit/plebbit-react-hooks'; -import styles from './pending-post.module.css'; import Post from '../../components/post'; -import useStateString from '../../hooks/use-state-string'; -import LoadingEllipsis from '../../components/loading-ellipsis'; const PendingPost = () => { const { accountCommentIndex } = useParams<{ accountCommentIndex?: string }>(); const commentIndex = accountCommentIndex ? parseInt(accountCommentIndex) : undefined; const post = useAccountComment({ commentIndex }); const navigate = useNavigate(); - const stateString = useStateString(post); useEffect(() => window.scrollTo(0, 0), []); @@ -21,16 +17,7 @@ const PendingPost = () => { } }, [post, navigate]); - const loadingString = stateString && ( -
{stateString !== 'Failed' ? : stateString}
- ); - - return ( -
- - {loadingString} -
- ); + return ; }; export default PendingPost;