Merge pull request #362 from plebbit/development

Development
This commit is contained in:
Tom (plebeius.eth)
2024-05-15 22:16:31 +02:00
committed by GitHub
52 changed files with 1742 additions and 381 deletions
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "الأسلوب",
"interface_language": "لغة الواجهة",
"delete_confirm": "هل أنت متأكد أنك تريد حذف {{value}}؟",
"double_confirm": "هل أنت متأكد حقًا؟ هذا الإجراء لا يمكن التراجع عنه."
"double_confirm": "هل أنت متأكد حقًا؟ هذا الإجراء لا يمكن التراجع عنه.",
"save": "حفظ",
"show": "اظهر",
"saved": "تم الحفظ",
"paste_signature": "لصق التوقيع",
"chain_ticker": "تذييل سلسلة",
"wallet_address": "عنوان المحفظة",
"copy": "نسخ",
"copied": "تم النسخ",
"wallet": "محفظة",
"add_wallet": "<1>إضافة</1> محفظة رقمية",
"crypto_address_verification": "إذا تم حل عنوان العملة الرقمية عبر الند للند",
"crypto_address_not_yours": "عنوان العملة الرقمية ينتمي إلى حساب آخر.",
"enter_crypto_address": "الرجاء إدخال عنوان كريبتو صالح.",
"crypto_address_not_resolved": "لم يتم حل عنوان العملة الرقمية بعد.",
"copy_message_etherscan": "<1>{{copy}}</1> رسالة للتوقيع على <2>etherscan</2>",
"account": "حساب",
"crypto_address": "عنوان العملة الرقمية",
"crypto_wallets": "محافظ العملات الرقمية",
"plebbit_options": "خيارات plebbit",
"reset": "إعادة",
"import": "استيراد",
"export": "تصدير",
"full_account_data": "بيانات الحساب الكاملة",
"this_account": "هذا الحساب",
"delete": "حذف"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "প্রকল্পসমূহ",
"challenge_counter": "{{index}} থেকে {{total}}",
"embed": "এম্বেড",
"remove": "অপসারণ",
"remove": "মুছে ফেলুন",
"download_latest_desktop": "সর্বশেষ ডেস্কটপ সংস্করণ এখানে ডাউনলোড করুন: {{link}}",
"new_stable_version": "নতুন স্থিতিশীল সংস্করণ উপলব্ধ, plebchan v{{newVersion}}। আপনি plebchan v{{oldVersion}} ব্যবহার করছেন।",
"refresh_to_update": "আপডেট করতে পৃষ্ঠাটি রিফ্রেশ করুন",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>যাচাই</1> করুন আপডেট",
"latest_development_version": "আপনি সর্বশেষ ডেভেলপমেন্ট সংস্করণে আছেন, কমিট {{commit}}। স্থিতিশীল সংস্করণ ব্যবহার করতে, {{link}} যান।",
"latest_stable_version": "আপনি সর্বশেষ স্থিতিশীল সংস্করণে আছেন, plebchan v{{version}}।",
"check": "পরীক্ষা করুন",
"check": "চেক",
"update": "আপডেট",
"style": "স্টাইল",
"interface_language": "ইন্টারফেস ভাষা",
"delete_confirm": "আপনি কি নিশ্চিত যে আপনি {{value}} মুছতে চান?",
"double_confirm": "আপনি কি সত্যিই নিশ্চিত? এই অ্যাকশন বিপর্যস্ত করা যাবে না।"
"double_confirm": "আপনি কি সত্যিই নিশ্চিত? এই অ্যাকশন বিপর্যস্ত করা যাবে না।",
"save": "সংরক্ষণ",
"show": "দেখান",
"saved": "সংরক্ষিত",
"paste_signature": "স্বাক্ষর পেস্ট করুন",
"chain_ticker": "শৃঙ্খলা টিকার",
"wallet_address": "ওয়ালেট ঠিকানা",
"copy": "কপি",
"copied": "নকল হয়েছে",
"wallet": "ওয়ালেট",
"add_wallet": "<1>যোগ</1> একটি ক্রিপ্টো ওয়ালেট",
"crypto_address_verification": "যদি ক্রিপ্টো ঠিকানা পি2প দ্বারা সমাধান হয়",
"crypto_address_not_yours": "ক্রিপ্টো ঠিকানা অন্য একটি অ্যাকাউন্টের অংশ।",
"enter_crypto_address": "দয়া করে একটি বৈধ ক্রিপ্টো ঠিকানা দিন।",
"crypto_address_not_resolved": "ক্রিপ্টো ঠিকানা এখনো সমাধান করা হয়নি।",
"copy_message_etherscan": "<1>{{copy}}</1> বার্তা সাইন করতে <2>etherscan</2> এ",
"account": "অ্যাকাউন্ট",
"crypto_address": "ক্রিপ্টো ঠিকানা",
"crypto_wallets": "ক্রিপ্টো ওয়ালেট",
"plebbit_options": "প্লেবিট বিকল্প",
"reset": "রিসেট",
"import": "আমদানি",
"export": "রপ্তানি",
"full_account_data": "সম্পূর্ণ অ্যাকাউন্ট ডেটা",
"this_account": "এই অ্যাকাউন্ট",
"delete": "মুছে ফেলা"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "projekty",
"challenge_counter": "{{index}} z {{total}}",
"embed": "vložit",
"remove": "odstranit",
"remove": "Odebrat",
"download_latest_desktop": "Stáhněte si nejnovější verzi pro stolní počítače zde: {{link}}",
"new_stable_version": "Nová stabilní verze k dispozici, plebchan v{{newVersion}}. Používáte plebchan v{{oldVersion}}.",
"refresh_to_update": "Obnovte stránku pro aktualizaci",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Zkontrolujte</1> aktualizace",
"latest_development_version": "Jste na nejnovější vývojové verzi, commit {{commit}}. Chcete-li použít stabilní verzi, přejděte na {{link}}.",
"latest_stable_version": "Jste na nejnovější stabilní verzi, plebchan v{{version}}.",
"check": "zkontroluj",
"check": "kontrolovat",
"update": "Aktualizovat",
"style": "Styl",
"interface_language": "jazyk rozhraní",
"delete_confirm": "Opravdu chcete smazat {{value}}?",
"double_confirm": "Opravdu jste si jisti? Tato akce je nevratná."
"double_confirm": "Opravdu jste si jisti? Tato akce je nevratná.",
"save": "Uložit",
"show": "ukázat",
"saved": "uloženo",
"paste_signature": "Vložit podpis",
"chain_ticker": "Řetězový ticker",
"wallet_address": "Adresa peněženky",
"copy": "kopírovat",
"copied": "zkopírováno",
"wallet": "Peněženka",
"add_wallet": "<1>Přidat</1> kryptoměnovou peněženku",
"crypto_address_verification": "pokud je kryptoměna vyřešena p2p",
"crypto_address_not_yours": "Adresa kryptoměny patří k jinému účtu.",
"enter_crypto_address": "Zadejte prosím platnou kryptoadresu.",
"crypto_address_not_resolved": "Adresa kryptoměny ještě není vyřešena.",
"copy_message_etherscan": "<1>{{copy}}</1> zpráva k podpisu na <2>etherscan</2>",
"account": "účet",
"crypto_address": "adresa kryptoměny",
"crypto_wallets": "Kryptoměny",
"plebbit_options": "plebbit možnosti",
"reset": "obnovit",
"import": "import",
"export": "export",
"full_account_data": "plná účetní data",
"this_account": "tento účet",
"delete": "smazat"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "projekter",
"challenge_counter": "{{index}} af {{total}}",
"embed": "integrer",
"remove": "fjern",
"remove": "Fjern",
"download_latest_desktop": "Download den seneste version til skrivebordet her: {{link}}",
"new_stable_version": "Ny stabil version tilgængelig, plebchan v{{newVersion}}. Du bruger plebchan v{{oldVersion}}.",
"refresh_to_update": "Opdater siden for at opdatere",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Tjek</1> for opdateringer",
"latest_development_version": "Du er på den nyeste udviklingsversion, commit {{commit}}. For at bruge den stabile version, gå til {{link}}.",
"latest_stable_version": "Du er på den seneste stabile version, plebchan v{{version}}.",
"check": "tjek",
"check": "check",
"update": "Opdater",
"style": "Stil",
"interface_language": "grænsefladesprog",
"delete_confirm": "Er du sikker på, at du vil slette {{value}}?",
"double_confirm": "Er du virkelig sikker? Denne handling er uigenkaldelig."
"double_confirm": "Er du virkelig sikker? Denne handling er uigenkaldelig.",
"save": "Gem",
"show": "vise",
"saved": "gemt",
"paste_signature": "Indsæt underskrift",
"chain_ticker": "Kæde ticker",
"wallet_address": "Walletadresse",
"copy": "kopier",
"copied": "kopieret",
"wallet": "Wallet",
"add_wallet": "<1>Tilføj</1> en crypto-wallet",
"crypto_address_verification": "hvis kryptoadressen er løst p2p",
"crypto_address_not_yours": "Crypto-adresse tilhører en anden konto.",
"enter_crypto_address": "Indtast venligst en gyldig krypto adresse.",
"crypto_address_not_resolved": "Crypto-adresse er endnu ikke løst.",
"copy_message_etherscan": "<1>{{copy}}</1> besked at underskrive på <2>etherscan</2>",
"account": "konto",
"crypto_address": "kryptoadresse",
"crypto_wallets": "Crypto Wallets",
"plebbit_options": "plebbit indstillinger",
"reset": "nulstil",
"import": "importer",
"export": "eksportér",
"full_account_data": "fulde kontodata",
"this_account": "denne konto",
"delete": "slet"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "App herunterladen",
"start_new_thread": "Starte einen neuen Thread",
"show_stats": "Statistiken anzeigen",
"hide": "Verstecken",
"hide": "Ausblenden",
"board_stats_hour": "In der letzten Stunde haben <1>{{userCount}}</1> Benutzer <1>{{postCount}}</1> Beiträge veröffentlicht",
"board_stats_day": "Im letzten Tag haben <1>{{userCount}}</1> Benutzer <1>{{postCount}}</1> Beiträge veröffentlicht",
"board_stats_week": "In der letzten Woche haben <1>{{userCount}}</1> Benutzer <1>{{postCount}}</1> Beiträge veröffentlicht",
@@ -75,7 +75,7 @@
"projects": "Projekte",
"challenge_counter": "{{index}} von {{total}}",
"embed": "einbetten",
"remove": "entfernen",
"remove": "Entfernen",
"download_latest_desktop": "Laden Sie hier die neueste Desktop-Version herunter: {{link}}",
"new_stable_version": "Neue stabile Version verfügbar, plebchan v{{newVersion}}. Du verwendest plebchan v{{oldVersion}}.",
"refresh_to_update": "Aktualisieren Sie die Seite, um zu aktualisieren",
@@ -88,5 +88,30 @@
"style": "Stil",
"interface_language": "Sprache der Benutzeroberfläche",
"delete_confirm": "Möchten Sie {{value}} wirklich löschen?",
"double_confirm": "Sind Sie wirklich sicher? Diese Aktion ist nicht rückgängig zu machen."
"double_confirm": "Sind Sie wirklich sicher? Diese Aktion ist nicht rückgängig zu machen.",
"save": "Speichern",
"show": "zeigen",
"saved": "gespeichert",
"paste_signature": "Unterschrift einfügen",
"chain_ticker": "Blockchain-Ticker",
"wallet_address": "Wallet-Adresse",
"copy": "kopieren",
"copied": "kopiert",
"wallet": "Wallet",
"add_wallet": "<1>Hinzufügen</1> einer Krypto-Brieftasche",
"crypto_address_verification": "wenn die Krypto-Adresse p2p aufgelöst ist",
"crypto_address_not_yours": "Krypto-Adresse gehört zu einem anderen Konto.",
"enter_crypto_address": "Bitte geben Sie eine gültige Krypto-Adresse ein.",
"crypto_address_not_resolved": "Krypto-Adresse ist noch nicht aufgelöst.",
"copy_message_etherscan": "<1>{{copy}}</1> Nachricht zum Signieren auf <2>etherscan</2>",
"account": "Konto",
"crypto_address": "Krypto-Adresse",
"crypto_wallets": "Krypto-Wallets",
"plebbit_options": "plebbit optionen",
"reset": "zurücksetzen",
"import": "importiere",
"export": "exportiere",
"full_account_data": "vollständige Kontodaten",
"this_account": "dieses Konto",
"delete": "löschen"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "έργα",
"challenge_counter": "{{index}} από {{total}}",
"embed": "ενσωμάτωση",
"remove": "αφαίρεση",
"remove": "Αφαίρεση",
"download_latest_desktop": "Κατεβάστε την πιο πρόσφατη έκδοση για επιτραπέζιο υπολογιστή εδώ: {{link}}",
"new_stable_version": "Νέα σταθερή έκδοση διαθέσιμη, plebchan v{{newVersion}}. Χρησιμοποιείτε plebchan v{{oldVersion}}.",
"refresh_to_update": "Ανανεώστε τη σελίδα για να ενημερωθεί",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Ελέγξτε</1> για ενημερώσεις",
"latest_development_version": "Βρίσκεστε στην πιο πρόσφατη έκδοση ανάπτυξης, commit {{commit}}. Για να χρησιμοποιήσετε την σταθερή έκδοση, πηγαίνετε στη διεύθυνση {{link}}.",
"latest_stable_version": "Βρίσκεστε στην πιο πρόσφατη σταθερή έκδοση, plebchan v{{version}}.",
"check": "έλεγχος",
"check": "ελέγξτε",
"update": "Ενημέρωση",
"style": "Στυλ",
"interface_language": "γλώσσα διεπαφής",
"delete_confirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε το {{value}};",
"double_confirm": "Είστε σίγουροι; Αυτή η ενέργεια είναι αναίρεση."
"double_confirm": "Είστε σίγουροι; Αυτή η ενέργεια είναι αναίρεση.",
"save": "Αποθήκευση",
"show": "εμφάνιση",
"saved": "αποθηκευμένο",
"paste_signature": "Επικόλληση υπογραφής",
"chain_ticker": "Αλυσιδωτό ticker",
"wallet_address": "Διεύθυνση πορτοφολιού",
"copy": "αντιγραφή",
"copied": "αντιγράφηκε",
"wallet": "Πορτοφόλι",
"add_wallet": "<1>Προσθήκη</1> ενός κρυπτονομισματικού πορτοφολιού",
"crypto_address_verification": "εάν η διεύθυνση κρυπτονομίσματος είναι αναγνωρισμένη p2p",
"crypto_address_not_yours": "Η διεύθυνση κρυπτονομίσματος ανήκει σε άλλο λογαριασμό.",
"enter_crypto_address": "Παρακαλώ εισαγάγετε μια έγκυρη διεύθυνση κρυπτονομίσματος.",
"crypto_address_not_resolved": "Η διεύθυνση κρυπτονομίσματος δεν έχει ακόμη επιλυθεί.",
"copy_message_etherscan": "<1>{{copy}}</1> μήνυμα για υπογραφή στο <2>etherscan</2>",
"account": "λογαριασμός",
"crypto_address": "διεύθυνση κρυπτονομίσματος",
"crypto_wallets": "Πορτοφόλια κρυπτονομισμάτων",
"plebbit_options": "επιλογές plebbit",
"reset": "επαναφορά",
"import": "εισαγωγή",
"export": "εξαγωγή",
"full_account_data": "πλήρα δεδομένα λογαριασμού",
"this_account": "αυτός ο λογαριασμός",
"delete": "διαγραφή"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "Download app",
"start_new_thread": "Start a New Thread",
"show_stats": "Show Stats",
"hide": "Hide",
"hide": "hide",
"board_stats_hour": "In the past hour, <1>{{userCount}}</1> users made <1>{{postCount}}</1> posts",
"board_stats_day": "In the past day, <1>{{userCount}}</1> users made <1>{{postCount}}</1> posts",
"board_stats_week": "In the past week, <1>{{userCount}}</1> users made <1>{{postCount}}</1> posts",
@@ -75,7 +75,7 @@
"projects": "projects",
"challenge_counter": "{{index}} of {{total}}",
"embed": "embed",
"remove": "remove",
"remove": "Remove",
"download_latest_desktop": "Download the latest desktop version here: {{link}}",
"new_stable_version": "New stable version available, plebchan v{{newVersion}}. You are using plebchan v{{oldVersion}}.",
"refresh_to_update": "Refresh the page to update",
@@ -88,5 +88,30 @@
"style": "Style",
"interface_language": "interface language",
"delete_confirm": "Are you sure you want to delete {{value}}?",
"double_confirm": "Are you really sure? This action is irreversible."
"double_confirm": "Are you really sure? This action is irreversible.",
"save": "save",
"show": "show",
"saved": "saved",
"paste_signature": "paste signature",
"chain_ticker": "Chain ticker",
"wallet_address": "Wallet address",
"copy": "copy",
"copied": "copied",
"wallet": "Wallet",
"add_wallet": "<1>Add</1> a crypto wallet",
"crypto_address_verification": "if the crypto address is resolved p2p",
"crypto_address_not_yours": "Crypto address belongs to another account.",
"enter_crypto_address": "Please enter a valid crypto address.",
"crypto_address_not_resolved": "Crypto address is not resolved yet.",
"copy_message_etherscan": "<1>{{copy}}</1> message to sign on <2>etherscan</2>",
"account": "account",
"crypto_address": "crypto address",
"crypto_wallets": "Crypto Wallets",
"plebbit_options": "plebbit options",
"reset": "reset",
"import": "import",
"export": "export",
"full_account_data": "full account data",
"this_account": "this account",
"delete": "delete"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "Descargar la aplicación",
"start_new_thread": "Iniciar un Nuevo Hilo",
"show_stats": "Mostrar Estadísticas",
"hide": "Ocultar",
"hide": "ocultar",
"board_stats_hour": "En la última hora, <1>{{userCount}}</1> usuarios han enviado <1>{{postCount}}</1> publicaciones",
"board_stats_day": "En el último día, <1>{{userCount}}</1> usuarios han enviado <1>{{postCount}}</1> publicaciones",
"board_stats_week": "En la última semana, <1>{{userCount}}</1> usuarios han enviado <1>{{postCount}}</1> publicaciones",
@@ -75,7 +75,7 @@
"projects": "proyectos",
"challenge_counter": "{{index}} de {{total}}",
"embed": "incrustar",
"remove": "eliminar",
"remove": "Eliminar",
"download_latest_desktop": "Descarga la última versión de escritorio aquí: {{link}}",
"new_stable_version": "Nueva versión estable disponible, plebchan v{{newVersion}}. Estás usando plebchan v{{oldVersion}}.",
"refresh_to_update": "Actualiza la página para actualizar",
@@ -88,5 +88,30 @@
"style": "Estilo",
"interface_language": "idioma de la interfaz",
"delete_confirm": "¿Estás seguro de que quieres eliminar {{value}}?",
"double_confirm": "¿Estás realmente seguro? Esta acción es irreversible."
"double_confirm": "¿Estás realmente seguro? Esta acción es irreversible.",
"save": "guardar",
"show": "mostrar",
"saved": "guardado",
"paste_signature": "pegar firma",
"chain_ticker": "Ticker de blockchain",
"wallet_address": "Dirección de la billetera",
"copy": "copiar",
"copied": "copiado",
"wallet": "Cartera",
"add_wallet": "<1>Agregar</1> una billetera cripto",
"crypto_address_verification": "si la dirección de cripto se resuelve p2p",
"crypto_address_not_yours": "La dirección de criptomoneda pertenece a otra cuenta.",
"enter_crypto_address": "Por favor, introduzca una dirección de cripto válida.",
"crypto_address_not_resolved": "La dirección de criptomoneda aún no está resuelta.",
"copy_message_etherscan": "<1>{{copy}}</1> mensaje para firmar en <2>etherscan</2>",
"account": "cuenta",
"crypto_address": "dirección de cripto",
"crypto_wallets": "Billeteras cripto",
"plebbit_options": "opciones plebbit",
"reset": "restablecer",
"import": "importar",
"export": "exportar",
"full_account_data": "datos completos de la cuenta",
"this_account": "esta cuenta",
"delete": "eliminar"
}
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "سبک",
"interface_language": "زبان رابط",
"delete_confirm": "آیا مطمئن هستید که می‌خواهید {{value}} را حذف کنید؟",
"double_confirm": "آیا مطمئن هستید؟ این عمل غیرقابل برگشت است."
"double_confirm": "آیا مطمئن هستید؟ این عمل غیرقابل برگشت است.",
"save": "ذخیره",
"show": "نمایش",
"saved": "ذخیره شده",
"paste_signature": "چسباندن امضا",
"chain_ticker": "نماد زنجیره",
"wallet_address": "آدرس کیف پول",
"copy": "کپی",
"copied": "کپی شد",
"wallet": "کیف پول",
"add_wallet": "<1>افزودن</1> یک کیف پول رمز ارز",
"crypto_address_verification": "اگر آدرس رمزارز به صورت p2p حل شود",
"crypto_address_not_yours": "آدرس رمزارز به حساب دیگری تعلق دارد.",
"enter_crypto_address": "لطفاً یک آدرس کریپتو صحیح وارد کنید.",
"crypto_address_not_resolved": "آدرس رمزارز هنوز حل نشده است.",
"copy_message_etherscan": "<1>{{copy}}</1> پیامی برای امضا در <2>etherscan</2>",
"account": "حساب",
"crypto_address": "آدرس رمزارز",
"crypto_wallets": "کیف پول رمز ارز",
"plebbit_options": "گزینه های plebbit",
"reset": "بازنشانی",
"import": "وارد کردن",
"export": "صدور",
"full_account_data": "داده حساب کامل",
"this_account": "این حساب",
"delete": "حذف کنید"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projektit",
"challenge_counter": "{{index}} / {{total}}",
"embed": "upota",
"remove": "poista",
"remove": "Poista",
"download_latest_desktop": "Lataa uusin työpöytäversio täältä: {{link}}",
"new_stable_version": "Uusi vakaa versio saatavilla, plebchan v{{newVersion}}. Käytät plebchan v{{oldVersion}}.",
"refresh_to_update": "Päivitä sivu päivittääksesi",
@@ -88,5 +88,30 @@
"style": "Tyyli",
"interface_language": "käyttöliittymän kieli",
"delete_confirm": "Haluatko varmasti poistaa {{value}}?",
"double_confirm": "Oletko varma? Tämä toiminto on peruuttamaton."
"double_confirm": "Oletko varma? Tämä toiminto on peruuttamaton.",
"save": "Tallenna",
"show": "näyttää",
"saved": "tallennettu",
"paste_signature": "Liitä allekirjoitus",
"chain_ticker": "Ketjuticker",
"wallet_address": "Lompakon osoite",
"copy": "kopioi",
"copied": "kopioitu",
"wallet": "Lompakko",
"add_wallet": "<1>Lisää</1> krypto-lompakko",
"crypto_address_verification": "jos krypto-osoite on ratkaistu p2p",
"crypto_address_not_yours": "Krypto-osoite kuuluu toiseen tiliin.",
"enter_crypto_address": "Syötä voimassa oleva krypto-osoite.",
"crypto_address_not_resolved": "Krypto-osoitetta ei ole vielä ratkaistu.",
"copy_message_etherscan": "<1>{{copy}}</1> viesti allekirjoitettavaksi <2>etherscan</2>:ssa",
"account": "tili",
"crypto_address": "krypto-osoite",
"crypto_wallets": "Krypto-lompakot",
"plebbit_options": "plebbit-vaihtoehdot",
"reset": "nollaa",
"import": "tuo",
"export": "vie",
"full_account_data": "täydelliset tilitiedot",
"this_account": "tämä tili",
"delete": "poista"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "mga proyekto",
"challenge_counter": "{{index}} ng {{total}}",
"embed": "i-embed",
"remove": "alisin",
"remove": "Alisin",
"download_latest_desktop": "I-download ang pinakabagong bersyon ng desktop dito: {{link}}",
"new_stable_version": "Bagong stable na bersyon na magagamit, plebchan v{{newVersion}}. Ginagamit mo ang plebchan v{{oldVersion}}.",
"refresh_to_update": "I-refresh ang pahina upang i-update",
@@ -88,5 +88,30 @@
"style": "Estilo",
"interface_language": "wika ng interface",
"delete_confirm": "Sigurado ka bang nais mong burahin ang {{value}}?",
"double_confirm": "Sigurado ka ba talaga? Ang aksyon na ito ay hindi mababawi."
"double_confirm": "Sigurado ka ba talaga? Ang aksyon na ito ay hindi mababawi.",
"save": "I-save",
"show": "ipakita",
"saved": "itinago",
"paste_signature": "I-paste ang lagda",
"chain_ticker": "Ticker ng chain",
"wallet_address": "Address ng wallet",
"copy": "kopya",
"copied": "nakopya",
"wallet": "Wallet",
"add_wallet": "<1>Magdagdag</1> ng isang crypto wallet",
"crypto_address_verification": "kung nairesolba ang crypto address p2p",
"crypto_address_not_yours": "Ang crypto address ay nauugnay sa ibang account.",
"enter_crypto_address": "Mangyaring magpasok ng wastong crypto address.",
"crypto_address_not_resolved": "Hindi pa naresolba ang crypto address.",
"copy_message_etherscan": "<1>{{copy}}</1> mensahe na pipirmahan sa <2>etherscan</2>",
"account": "account",
"crypto_address": "crypto address",
"crypto_wallets": "Mga Wallet ng Crypto",
"plebbit_options": "mga pagpipilian ng plebbit",
"reset": "i-reset",
"import": "i-import",
"export": "i-export",
"full_account_data": "buong account data",
"this_account": "ang account na ito",
"delete": "burahin"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "Télécharger l'application",
"start_new_thread": "Démarrer un nouveau fil",
"show_stats": "Afficher les statistiques",
"hide": "Masquer",
"hide": "masquer",
"board_stats_hour": "Au cours de la dernière heure, <1>{{userCount}}</1> utilisateurs ont publié <1>{{postCount}}</1> messages",
"board_stats_day": "Au cours de la dernière journée, <1>{{userCount}}</1> utilisateurs ont publié <1>{{postCount}}</1> messages",
"board_stats_week": "Au cours de la dernière semaine, <1>{{userCount}}</1> utilisateurs ont publié <1>{{postCount}}</1> messages",
@@ -75,7 +75,7 @@
"projects": "projets",
"challenge_counter": "{{index}} sur {{total}}",
"embed": "intégrer",
"remove": "supprimer",
"remove": "Retirer",
"download_latest_desktop": "Téléchargez la dernière version de bureau ici : {{link}}",
"new_stable_version": "Nouvelle version stable disponible, plebchan v{{newVersion}}. Vous utilisez plebchan v{{oldVersion}}.",
"refresh_to_update": "Actualisez la page pour mettre à jour",
@@ -88,5 +88,30 @@
"style": "Style",
"interface_language": "langue de l’interface",
"delete_confirm": "Êtes-vous sûr de vouloir supprimer {{value}}?",
"double_confirm": "Êtes-vous vraiment sûr? Cette action est irréversible."
"double_confirm": "Êtes-vous vraiment sûr? Cette action est irréversible.",
"save": "enregistrer",
"show": "montrer",
"saved": "enregistré",
"paste_signature": "Coller la signature",
"chain_ticker": "Ticker de blockchain",
"wallet_address": "Adresse de portefeuille",
"copy": "copier",
"copied": "copié",
"wallet": "Portefeuille",
"add_wallet": "<1>Ajouter</1> un portefeuille crypto",
"crypto_address_verification": "si l’adresse crypto est résolue en p2p",
"crypto_address_not_yours": "L'adresse crypto appartient à un autre compte.",
"enter_crypto_address": "Veuillez entrer une adresse crypto valide.",
"crypto_address_not_resolved": "L'adresse crypto n'est pas encore résolue.",
"copy_message_etherscan": "<1>{{copy}}</1> message à signer sur <2>etherscan</2>",
"account": "compte",
"crypto_address": "adresse crypto",
"crypto_wallets": "Portefeuilles de crypto",
"plebbit_options": "options plebbit",
"reset": "réinitialiser",
"import": "importer",
"export": "exporter",
"full_account_data": "données complètes du compte",
"this_account": "ce compte",
"delete": "supprimer"
}
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "סגנון",
"interface_language": "שפת ממשק",
"delete_confirm": "האם אתה בטוח שברצונך למחוק את {{value}}?",
"double_confirm": "האם אתה באמת בטוח? הפעולה הזו היא לא הפיכה."
"double_confirm": "האם אתה באמת בטוח? הפעולה הזו היא לא הפיכה.",
"save": "שמור",
"show": "תצוגה",
"saved": "נשמר",
"paste_signature": "הדבק חתימה",
"chain_ticker": "ציון בלוקצ'יין",
"wallet_address": "כתובת הארנק",
"copy": "העתק",
"copied": "הועתק",
"wallet": "ארנק",
"add_wallet": "<1>הוסף</1> ארנק קריפטו",
"crypto_address_verification": "אם כתובת הקריפטו פתרה p2p",
"crypto_address_not_yours": "כתובת המטבע הקריפטוגרפי שייכת לחשבון אחר.",
"enter_crypto_address": "אנא הזן כתובת קריפטו תקף.",
"crypto_address_not_resolved": "כתובת המטבע הקריפטוגרפית עדיין לא נפתרה.",
"copy_message_etherscan": "<1>{{copy}}</1> הודעה לחתימה ב-<2>etherscan</2>",
"account": "חשבון",
"crypto_address": "כתובת קריפטו",
"crypto_wallets": "ארנק קריפטו",
"plebbit_options": "אפשרויות plebbit",
"reset": "איפוס",
"import": "יבא",
"export": "יצוא",
"full_account_data": "נתוני החשבון המלאים",
"this_account": "החשבון הזה",
"delete": "מחק"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "ऐप डाउनलोड करें",
"start_new_thread": "नया थ्रेड शुरू करें",
"show_stats": "आँकड़े दिखाएं",
"hide": "छुपाएँ",
"hide": "छिपाएं",
"board_stats_hour": "पिछले घंटे में, <1>{{userCount}}</1> उपयोगकर्ता <1>{{postCount}}</1> पोस्ट की",
"board_stats_day": "पिछले दिन, <1>{{userCount}}</1> उपयोगकर्ता <1>{{postCount}}</1> पोस्ट की",
"board_stats_week": "पिछले सप्ताह, <1>{{userCount}}</1> उपयोगकर्ता <1>{{postCount}}</1> पोस्ट की",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>जाँचें</1> अपडेट के लिए",
"latest_development_version": "आप नवीनतम विकास संस्करण पर हैं, कमिट {{commit}}। स्थिर संस्करण का उपयोग करने के लिए, {{link}} पर जाएं।",
"latest_stable_version": "आप नवीनतम स्थिर संस्करण पर हैं, plebchan v{{version}}।",
"check": "जांचें",
"check": "जाँच करें",
"update": "अपडेट करें",
"style": "शैली",
"interface_language": "इंटरफ़ेस भाषा",
"delete_confirm": "क्या आप निश्चित हैं कि आप {{value}} को हटाना चाहते हैं?",
"double_confirm": "क्या आप वास्तव में सुनिश्चित हैं? यह क्रिया अपरिवर्तनीय है।"
"double_confirm": "क्या आप वास्तव में सुनिश्चित हैं? यह क्रिया अपरिवर्तनीय है।",
"save": "सहेजें",
"show": "दिखाएँ",
"saved": "सहेजा गया",
"paste_signature": "हस्ताक्षर पेस्ट करें",
"chain_ticker": "श्रृंखला टिकर",
"wallet_address": "वॉलेट पता",
"copy": "कॉपी",
"copied": "कॉपी किया गया",
"wallet": "वॉलेट",
"add_wallet": "<1>को जोड़ें</1> एक क्रिप्टो वॉलेट",
"crypto_address_verification": "यदि क्रिप्टो पता p2p द्वारा हल किया गया है",
"crypto_address_not_yours": "क्रिप्टो पता दूसरे खाते से संबंधित है।",
"enter_crypto_address": "कृपया एक मान्य क्रिप्टो पता दर्ज करें।",
"crypto_address_not_resolved": "क्रिप्टो पता अभी तक हल नहीं किया गया है।",
"copy_message_etherscan": "<1>{{copy}}</1> संदेश को <2>etherscan</2> पर हस्ताक्षर करें",
"account": "खाता",
"crypto_address": "क्रिप्टो पता",
"crypto_wallets": "क्रिप्टो वॉलेट्स",
"plebbit_options": "plebbit विकल्प",
"reset": "रीसेट करें",
"import": "आयात",
"export": "निर्यात",
"full_account_data": "पूरे खाते का डेटा",
"this_account": "इस खाता",
"delete": "हटाएँ"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projektek",
"challenge_counter": "{{index}} a(z) {{total}}-ból/ből",
"embed": "beágyaz",
"remove": "eltávolít",
"remove": "Eltávolítás",
"download_latest_desktop": "Töltsd le a legújabb asztali verziót itt: {{link}}",
"new_stable_version": "Új stabil verzió elérhető, plebchan v{{newVersion}}. A plebchan v{{oldVersion}}-t használod.",
"refresh_to_update": "Frissítse az oldalt az frissítéshez",
@@ -88,5 +88,30 @@
"style": "Stílus",
"interface_language": "felület nyelve",
"delete_confirm": "Biztosan törölni szeretné {{value}}?",
"double_confirm": "Biztos vagy benne? Ez a művelet visszafordíthatatlan."
"double_confirm": "Biztos vagy benne? Ez a művelet visszafordíthatatlan.",
"save": "Mentés",
"show": "mutat",
"saved": "elmentve",
"paste_signature": "Aláírás beillesztése",
"chain_ticker": "Lánc ticker",
"wallet_address": "Pénztárca címe",
"copy": "másolás",
"copied": "másolva",
"wallet": "Pénztárca",
"add_wallet": "<1>Kriptopénztárca</1> hozzáadása",
"crypto_address_verification": "ha a kriptocím p2p felbontású",
"crypto_address_not_yours": "A kripto-cím egy másik fiókhoz tartozik.",
"enter_crypto_address": "Kérjük, adjon meg egy érvényes kripto címet.",
"crypto_address_not_resolved": "A kripto cím még nem oldódott meg.",
"copy_message_etherscan": "<1>{{copy}}</1> üzenet aláírásához az <2>etherscan</2>-en",
"account": "fiók",
"crypto_address": "kriptovaluta cím",
"crypto_wallets": "Kriptopénztárcák",
"plebbit_options": "plebbit lehetőségek",
"reset": "alaphelyzetbe állít",
"import": "importálás",
"export": "exportálás",
"full_account_data": "teljes fiókadata",
"this_account": "ez a fiók",
"delete": "töröl"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "proyek",
"challenge_counter": "{{index}} dari {{total}}",
"embed": "sematkan",
"remove": "hapus",
"remove": "Hapus",
"download_latest_desktop": "Unduh versi desktop terbaru di sini: {{link}}",
"new_stable_version": "Versi stabil baru tersedia, plebchan v{{newVersion}}. Anda menggunakan plebchan v{{oldVersion}}.",
"refresh_to_update": "Segarkan halaman untuk memperbarui",
@@ -88,5 +88,30 @@
"style": "Gaya",
"interface_language": "bahasa antarmuka",
"delete_confirm": "Apakah Anda yakin ingin menghapus {{value}}?",
"double_confirm": "Apakah Anda benar-benar yakin? Tindakan ini tidak dapat diurungkan."
"double_confirm": "Apakah Anda benar-benar yakin? Tindakan ini tidak dapat diurungkan.",
"save": "Simpan",
"show": "menunjukkan",
"saved": "tersimpan",
"paste_signature": "Tempelkan tanda tangan",
"chain_ticker": "Ticker blockchain",
"wallet_address": "Alamat dompet",
"copy": "salin",
"copied": "disalin",
"wallet": "Dompet",
"add_wallet": "<1>Tambahkan</1> dompet kripto",
"crypto_address_verification": "jika alamat kripto diselesaikan p2p",
"crypto_address_not_yours": "Alamat kripto milik akun lain.",
"enter_crypto_address": "Harap masukkan alamat kripto yang valid.",
"crypto_address_not_resolved": "Alamat kripto belum terpecahkan.",
"copy_message_etherscan": "<1>{{copy}}</1> pesan untuk ditandatangani di <2>etherscan</2>",
"account": "akun",
"crypto_address": "alamat kripto",
"crypto_wallets": "Dompet Crypto",
"plebbit_options": "opsi plebbit",
"reset": "ulang",
"import": "impor",
"export": "ekspor",
"full_account_data": "data akun lengkap",
"this_account": "akun ini",
"delete": "hapus"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "Scarica app",
"start_new_thread": "Invia un Nuovo Thread",
"show_stats": "Mostra Statistiche",
"hide": "Nascondi",
"hide": "nascondi",
"board_stats_hour": "Nell'ultima ora, <1>{{userCount}}</1> utenti hanno inviato <1>{{postCount}}</1> post",
"board_stats_day": "Nell'ultimo giorno, <1>{{userCount}}</1> utenti hanno inviato <1>{{postCount}}</1> post",
"board_stats_week": "Nell'ultima settimana, <1>{{userCount}}</1> utenti hanno inviato <1>{{postCount}}</1> post",
@@ -75,7 +75,7 @@
"projects": "progetti",
"challenge_counter": "{{index}} di {{total}}",
"embed": "incorpora",
"remove": "rimuovi",
"remove": "Rimuovi",
"download_latest_desktop": "Scarica l'ultima versione desktop qui: {{link}}",
"new_stable_version": "Nuova versione stabile disponibile, plebchan v{{newVersion}}. Stai utilizzando plebchan v{{oldVersion}}.",
"refresh_to_update": "Ricarica la pagina per aggiornare",
@@ -88,5 +88,30 @@
"style": "Stile",
"interface_language": "lingua interfaccia",
"delete_confirm": "Confermi di voler cancellare {{value}}?",
"double_confirm": "Sei davvero sicuro? Questa azione è irreversibile."
"double_confirm": "Sei davvero sicuro? Questa azione è irreversibile.",
"save": "salva",
"show": "mostra",
"saved": "salvato",
"paste_signature": "incolla firma",
"chain_ticker": "Ticker blockchain",
"wallet_address": "Indirizzo wallet",
"copy": "copia",
"copied": "copiato",
"wallet": "Wallet",
"add_wallet": "<1>Aggiungi</1> un wallet crypto",
"crypto_address_verification": "se l'indirizzo cripto è risolto p2p",
"crypto_address_not_yours": "L'indirizzo cripto appartiene a un altro account.",
"enter_crypto_address": "Inserisci un indirizzo cripto valido.",
"crypto_address_not_resolved": "L'indirizzo cripto non è ancora risolto.",
"copy_message_etherscan": "<1>{{copy}}</1> messaggio da firmare su <2>etherscan</2>",
"account": "account",
"crypto_address": "indirizzo crypto",
"crypto_wallets": "Wallet crypto",
"plebbit_options": "opzioni plebbit",
"reset": "ripristina",
"import": "importa",
"export": "esporta",
"full_account_data": "i dati completi dell'account",
"this_account": "questo account",
"delete": "elimina"
}
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "スタイル",
"interface_language": "インターフェース言語",
"delete_confirm": "{{value}} を削除してもよろしいですか?",
"double_confirm": "本当によろしいですか?このアクションは取り消せません。"
"double_confirm": "本当によろしいですか?このアクションは取り消せません。",
"save": "保存",
"show": "表示",
"saved": "保存済み",
"paste_signature": "署名を貼り付ける",
"chain_ticker": "チェーンティッカー",
"wallet_address": "ウォレットアドレス",
"copy": "コピー",
"copied": "コピー済み",
"wallet": "ウォレット",
"add_wallet": "<1>追加</1> クリプトウォレット",
"crypto_address_verification": "暗号通貨アドレスがp2pで解決されている場合",
"crypto_address_not_yours": "暗号通貨アドレスは別のアカウントに属しています。",
"enter_crypto_address": "有効な暗号通貨アドレスを入力してください。",
"crypto_address_not_resolved": "暗号通貨アドレスはまだ解決されていません。",
"copy_message_etherscan": "<1>{{copy}}</1> メッセージを<2>etherscan</2>でサイン",
"account": "アカウント",
"crypto_address": "暗号通貨アドレス",
"crypto_wallets": "暗号通貨ウォレット",
"plebbit_options": "plebbitのオプション",
"reset": "リセット",
"import": "インポート",
"export": "エクスポート",
"full_account_data": "フルアカウントデータ",
"this_account": "このアカウント",
"delete": "削除"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "프로젝트",
"challenge_counter": "{{index}} 중 {{total}}",
"embed": "임베드",
"remove": "제거",
"remove": "삭제",
"download_latest_desktop": "최신 데스크톱 버전을 여기에서 다운로드하세요: {{link}}",
"new_stable_version": "새로운 안정 버전이 사용 가능합니다, plebchan v{{newVersion}}. plebchan v{{oldVersion}}을(를) 사용 중입니다.",
"refresh_to_update": "업데이트를 위해 페이지를 새로 고칩니다",
@@ -88,5 +88,30 @@
"style": "스타일",
"interface_language": "인터페이스 언어",
"delete_confirm": "{{value}}를 삭제하시겠습니까?",
"double_confirm": "정말로 확실합니까? 이 작업은 되돌릴 수 없습니다."
"double_confirm": "정말로 확실합니까? 이 작업은 되돌릴 수 없습니다.",
"save": "저장",
"show": "보여주다",
"saved": "저장됨",
"paste_signature": "서명 붙여넣기",
"chain_ticker": "블록체인 티커",
"wallet_address": "지갑 주소",
"copy": "복사",
"copied": "복사됨",
"wallet": "지갑",
"add_wallet": "<1>추가</1> 암호 화폐 지갑",
"crypto_address_verification": "암호 화폐 주소가 p2p로 해결되었을 때",
"crypto_address_not_yours": "암호 주소는 다른 계정에 속합니다.",
"enter_crypto_address": "유효한 암호 주소를 입력하세요.",
"crypto_address_not_resolved": "암호 주소가 아직 해결되지 않았습니다.",
"copy_message_etherscan": "<1>{{copy}}</1> 메시지를 <2>etherscan</2>에서 서명",
"account": "계정",
"crypto_address": "암호 화폐 주소",
"crypto_wallets": "암호 화폐 지갑",
"plebbit_options": "plebbit 옵션",
"reset": "재설정",
"import": "가져오기",
"export": "내보내기",
"full_account_data": "전체 계정 데이터",
"this_account": "이 계정",
"delete": "삭제"
}
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "शैली",
"interface_language": "इंटरफेस भाषा",
"delete_confirm": "तुम्हाला खात्री आहे का की तुम्ही {{value}} काढून टाकणार आहात?",
"double_confirm": "खात्री आहात का? हा क्रियेचा परत न लागणारा आहे."
"double_confirm": "खात्री आहात का? हा क्रियेचा परत न लागणारा आहे.",
"save": "जतन करा",
"show": "दाखवा",
"saved": "साचला",
"paste_signature": "हस्ताक्षर पेस्ट करा",
"chain_ticker": "श्रृंखला टिकर",
"wallet_address": "बटव्या पत्ता",
"copy": "कॉपी",
"copied": "कॉपी केली",
"wallet": "बटवा",
"add_wallet": "<1>जोडा</1> एक क्रिप्टो बटवा",
"crypto_address_verification": "क्रिप्टो पत्ता p2p द्वारे सोडला आहे कि नाही",
"crypto_address_not_yours": "क्रिप्टो पत्ता इतर खात्याशी संबंधित आहे.",
"enter_crypto_address": "कृपया मान्य क्रिप्टो पत्ता प्रविष्ट करा.",
"crypto_address_not_resolved": "क्रिप्टो पत्ता अजून सोपवला नाही.",
"copy_message_etherscan": "<1>{{copy}}</1> संदेश <2>etherscan</2> वर हस्ताक्षर करण्यासाठी",
"account": "खाता",
"crypto_address": "क्रिप्टो पत्ता",
"crypto_wallets": "क्रिप्टो बटव्या",
"plebbit_options": "प्लेबिट पर्याय",
"reset": "रीसेट करा",
"import": "आयात करा",
"export": "निर्यात करा",
"full_account_data": "पूर्ण खाते डेटा",
"this_account": "हे खाते",
"delete": "काढा"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projecten",
"challenge_counter": "{{index}} van {{total}}",
"embed": "insluiten",
"remove": "verwijderen",
"remove": "Verwijderen",
"download_latest_desktop": "Download de nieuwste desktopversie hier: {{link}}",
"new_stable_version": "Nieuwe stabiele versie beschikbaar, plebchan v{{newVersion}}. Je gebruikt plebchan v{{oldVersion}}.",
"refresh_to_update": "Vernieuw de pagina om bij te werken",
@@ -88,5 +88,30 @@
"style": "Stijl",
"interface_language": "interface taal",
"delete_confirm": "Weet je zeker dat je {{value}} wilt verwijderen?",
"double_confirm": "Weet u het zeker? Deze actie is onomkeerbaar."
"double_confirm": "Weet u het zeker? Deze actie is onomkeerbaar.",
"save": "Opslaan",
"show": "tonen",
"saved": "opgeslagen",
"paste_signature": "Plak handtekening",
"chain_ticker": "Blockchain ticker",
"wallet_address": "Wallet adres",
"copy": "kopiëren",
"copied": "gekopieerd",
"wallet": "Wallet",
"add_wallet": "<1>Voeg toe</1> een cryptoportemonnee toe",
"crypto_address_verification": "als het crypto adres p2p is opgelost",
"crypto_address_not_yours": "Crypto-adres behoort tot een andere account.",
"enter_crypto_address": "Voer alstublieft een geldig crypto-adres in.",
"crypto_address_not_resolved": "Crypto-adres is nog niet opgelost.",
"copy_message_etherscan": "<1>{{copy}}</1> bericht om te ondertekenen op <2>etherscan</2>",
"account": "account",
"crypto_address": "crypto adres",
"crypto_wallets": "Crypto-portefeuilles",
"plebbit_options": "plebbit-opties",
"reset": "resetten",
"import": "importeer",
"export": "exporteer",
"full_account_data": "volledige accountgegevens",
"this_account": "dit account",
"delete": "verwijderen"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "prosjekter",
"challenge_counter": "{{index}} av {{total}}",
"embed": "bygg inn",
"remove": "fjern",
"remove": "Fjern",
"download_latest_desktop": "Last ned den nyeste skrivebordsversjonen her: {{link}}",
"new_stable_version": "Ny stabil versjon tilgjengelig, plebchan v{{newVersion}}. Du bruker plebchan v{{oldVersion}}.",
"refresh_to_update": "Oppdater siden for å oppdatere",
@@ -88,5 +88,30 @@
"style": "Stil",
"interface_language": "grensesnittspråk",
"delete_confirm": "Er du sikker på at du vil slette {{value}}?",
"double_confirm": "Er du virkelig sikker? Denne handlingen er ugjenkallelig."
"double_confirm": "Er du virkelig sikker? Denne handlingen er ugjenkallelig.",
"save": "Lagre",
"show": "vise",
"saved": "lagret",
"paste_signature": "Lim signatur",
"chain_ticker": "Blockchain-ticker",
"wallet_address": "Lommebokadresse",
"copy": "kopier",
"copied": "kopiert",
"wallet": "Lommebok",
"add_wallet": "<1>Legg til</1> en crypto-lommebok",
"crypto_address_verification": "hvis kryptoadressen er løst p2p",
"crypto_address_not_yours": "Crypto-adressen tilhører en annen konto.",
"enter_crypto_address": "Vennligst skriv inn en gyldig kryptoadresse.",
"crypto_address_not_resolved": "Crypto-adresse er ikke løst ennå.",
"copy_message_etherscan": "<1>{{copy}}</1> melding å signere på <2>etherscan</2>",
"account": "konto",
"crypto_address": "kryptoadresse",
"crypto_wallets": "Crypto-lommebøker",
"plebbit_options": "plebbit alternativer",
"reset": "nullstill",
"import": "importer",
"export": "eksporter",
"full_account_data": "full kontodata",
"this_account": "denne kontoen",
"delete": "slett"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projekty",
"challenge_counter": "{{index}} z {{total}}",
"embed": "osadź",
"remove": "usuń",
"remove": "Usuń",
"download_latest_desktop": "Pobierz najnowszą wersję na pulpit tutaj: {{link}}",
"new_stable_version": "Nowa stabilna wersja dostępna, plebchan v{{newVersion}}. Używasz plebchan v{{oldVersion}}.",
"refresh_to_update": "Odśwież stronę, aby zaktualizować",
@@ -88,5 +88,30 @@
"style": "Styl",
"interface_language": "język interfejsu",
"delete_confirm": "Czy na pewno chcesz usunąć {{value}}?",
"double_confirm": "Jesteś naprawdę pewien? Ta akcja jest nieodwracalna."
"double_confirm": "Jesteś naprawdę pewien? Ta akcja jest nieodwracalna.",
"save": "Zapisz",
"show": "pokazać",
"saved": "zapisane",
"paste_signature": "Wklej podpis",
"chain_ticker": "Ticker blockchain",
"wallet_address": "Adres portfela",
"copy": "kopiuj",
"copied": "skopiowano",
"wallet": "Portfel",
"add_wallet": "<1>Dodaj</1> portfel kryptowalutowy",
"crypto_address_verification": "jeśli adres kryptowalutowy jest rozwiązany p2p",
"crypto_address_not_yours": "Adres kryptowaluty należy do innego konta.",
"enter_crypto_address": "Proszę podać prawidłowy adres kryptowalutowy.",
"crypto_address_not_resolved": "Adres kryptowaluty nie jest jeszcze rozwiązany.",
"copy_message_etherscan": "<1>{{copy}}</1> wiadomość do podpisania na <2>etherscan</2>",
"account": "konto",
"crypto_address": "adres kryptowalutowy",
"crypto_wallets": "Portfele kryptowalut",
"plebbit_options": "opcje plebbit",
"reset": "zresetuj",
"import": "importuj",
"export": "eksportuj",
"full_account_data": "pełne dane konta",
"this_account": "ten rachunek",
"delete": "usuń"
}
+28 -3
View File
@@ -14,7 +14,7 @@
"download_app": "Baixar aplicativo",
"start_new_thread": "Iniciar um Novo Tópico",
"show_stats": "Mostrar Estatísticas",
"hide": "Esconder",
"hide": "ocultar",
"board_stats_hour": "Nas últimas horas, <1>{{userCount}}</1> usuários fizeram <1>{{postCount}}</1> postagens",
"board_stats_day": "Nas últimas horas, <1>{{userCount}}</1> usuários fizeram <1>{{postCount}}</1> postagens",
"board_stats_week": "Na última semana, <1>{{userCount}}</1> usuários fizeram <1>{{postCount}}</1> postagens",
@@ -75,7 +75,7 @@
"projects": "projetos",
"challenge_counter": "{{index}} de {{total}}",
"embed": "embutir",
"remove": "remover",
"remove": "Remover",
"download_latest_desktop": "Baixe a versão mais recente para desktop aqui: {{link}}",
"new_stable_version": "Nova versão estável disponível, plebchan v{{newVersion}}. Você está usando plebchan v{{oldVersion}}.",
"refresh_to_update": "Atualize a página para atualizar",
@@ -88,5 +88,30 @@
"style": "Estilo",
"interface_language": "idioma da interface",
"delete_confirm": "Tem certeza de que deseja excluir {{value}}?",
"double_confirm": "Tem certeza? Esta ação é irreversível."
"double_confirm": "Tem certeza? Esta ação é irreversível.",
"save": "salvar",
"show": "mostrar",
"saved": "salvo",
"paste_signature": "Colar assinatura",
"chain_ticker": "Ticker de blockchain",
"wallet_address": "Endereço da carteira",
"copy": "copiar",
"copied": "copiado",
"wallet": "Carteira",
"add_wallet": "<1>Adicionar</1> uma carteira cripto",
"crypto_address_verification": "se o endereço de cripto for resolvido p2p",
"crypto_address_not_yours": "O endereço de criptomoeda pertence a outra conta.",
"enter_crypto_address": "Por favor, insira um endereço de cripto válido.",
"crypto_address_not_resolved": "O endereço de criptomoeda ainda não foi resolvido.",
"copy_message_etherscan": "<1>{{copy}}</1> mensagem para assinar no <2>etherscan</2>",
"account": "conta",
"crypto_address": "endereço de cripto",
"crypto_wallets": "Carteiras cripto",
"plebbit_options": "opções plebbit",
"reset": "redefinir",
"import": "importar",
"export": "exportar",
"full_account_data": "dados completos da conta",
"this_account": "esta conta",
"delete": "apagar"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "proiecte",
"challenge_counter": "{{index}} din {{total}}",
"embed": "încorpora",
"remove": "elimina",
"remove": "Elimină",
"download_latest_desktop": "Descărcați cea mai recentă versiune de desktop aici: {{link}}",
"new_stable_version": "Noua versiune stabilă disponibilă, plebchan v{{newVersion}}. Folosiți plebchan v{{oldVersion}}.",
"refresh_to_update": "Actualizați pagina pentru a actualiza",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Verifică</1> pentru actualizări",
"latest_development_version": "Ești pe cea mai recentă versiune de dezvoltare, commit {{commit}}. Pentru a folosi versiunea stabilă, mergi la {{link}}.",
"latest_stable_version": "Ești pe cea mai recentă versiune stabilă, plebchan v{{version}}.",
"check": "verifică",
"check": "verificați",
"update": "Actualizează",
"style": "Stil",
"interface_language": "limba interfeței",
"delete_confirm": "Sunteți sigur că doriți să ștergeți {{value}}?",
"double_confirm": "Sunteți sigur? Această acțiune este ireversibilă."
"double_confirm": "Sunteți sigur? Această acțiune este ireversibilă.",
"save": "Salvează",
"show": "arată",
"saved": "salvat",
"paste_signature": "Lipește semnătura",
"chain_ticker": "Ticker blockchain",
"wallet_address": "Adresa portofelului",
"copy": "copiere",
"copied": "copiat",
"wallet": "Portofel",
"add_wallet": "<1>Adăugați</1> un portofel cripto",
"crypto_address_verification": "dacă adresa cripto este rezolvată p2p",
"crypto_address_not_yours": "Adresa crypto aparține unui alt cont.",
"enter_crypto_address": "Vă rugăm să introduceți o adresă crypto validă.",
"crypto_address_not_resolved": "Adresa crypto nu este încă rezolvată.",
"copy_message_etherscan": "<1>{{copy}}</1> mesaj de semnat pe <2>etherscan</2>",
"account": "cont",
"crypto_address": "adresa cripto",
"crypto_wallets": "Portofele crypto",
"plebbit_options": "opțiuni plebbit",
"reset": "resetează",
"import": "importați",
"export": "exportați",
"full_account_data": "date complete ale contului",
"this_account": "acest cont",
"delete": "ștergeți"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "проекты",
"challenge_counter": "{{index}} из {{total}}",
"embed": "встроить",
"remove": "удалить",
"remove": "Удалить",
"download_latest_desktop": "Скачать последнюю версию для рабочего стола здесь: {{link}}",
"new_stable_version": "Доступна новая стабильная версия, plebchan v{{newVersion}}. Вы используете plebchan v{{oldVersion}}.",
"refresh_to_update": "Обновите страницу, чтобы обновить",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Проверить</1> наличие обновлений",
"latest_development_version": "Вы используете последнюю версию разработки, коммит {{commit}}. Чтобы использовать стабильную версию, перейдите по ссылке {{link}}.",
"latest_stable_version": "Вы используете последнюю стабильную версию, plebchan v{{version}}.",
"check": "проверить",
"check": "проверьте",
"update": "Обновить",
"style": "Стиль",
"interface_language": "язык интерфейса",
"delete_confirm": "Вы уверены, что хотите удалить {{value}}?",
"double_confirm": "Вы действительно уверены? Это действие необратимо."
"double_confirm": "Вы действительно уверены? Это действие необратимо.",
"save": "Сохранить",
"show": "показать",
"saved": "сохранено",
"paste_signature": "Вставить подпись",
"chain_ticker": "Блокчейн тикер",
"wallet_address": "Адрес кошелька",
"copy": "копировать",
"copied": "скопировано",
"wallet": "Кошелек",
"add_wallet": "<1>Добавить</1> криптокошелек",
"crypto_address_verification": "если адрес криптовалюты решается p2p",
"crypto_address_not_yours": "Адрес криптовалюты принадлежит другому аккаунту.",
"enter_crypto_address": "Пожалуйста, введите действительный криптовалютный адрес.",
"crypto_address_not_resolved": "Адрес криптовалюты еще не решен.",
"copy_message_etherscan": "<1>{{copy}}</1> сообщение для подписи на <2>etherscan</2>",
"account": "аккаунт",
"crypto_address": "адрес криптовалюты",
"crypto_wallets": "Криптокошельки",
"plebbit_options": "опции plebbit",
"reset": "сбросить",
"import": "импортировать",
"export": "экспортировать",
"full_account_data": "полные данные аккаунта",
"this_account": "этот аккаунт",
"delete": "удалить"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projekte",
"challenge_counter": "{{index}} nga {{total}}",
"embed": "integro",
"remove": "hiq",
"remove": "Hiqni",
"download_latest_desktop": "Shkarko versionin më të ri të desktopit këtu: {{link}}",
"new_stable_version": "Version i ri i qëndrueshëm është në dispozicion, plebchan v{{newVersion}}. Ju po përdorni plebchan v{{oldVersion}}.",
"refresh_to_update": "Rifresko faqen për të rifreskuar",
@@ -88,5 +88,30 @@
"style": "Stil",
"interface_language": "gjuha e ndërfaqes",
"delete_confirm": "A jeni të sigurt se dëshironi të fshini {{value}}?",
"double_confirm": "A jeni të sigurtë? Ky veprim është i papërkthyeshëm."
"double_confirm": "A jeni të sigurtë? Ky veprim është i papërkthyeshëm.",
"save": "Ruaj",
"show": "shfaq",
"saved": "i ruajtur",
"paste_signature": "Ngjit nënshkrimin",
"chain_ticker": "Ticker blockchain",
"wallet_address": "Adresa e wallet",
"copy": "kopjo",
"copied": "kopjuar",
"wallet": "Wallet",
"add_wallet": "<1>Shto</1> një xhepë crypto",
"crypto_address_verification": "nëse adresa e kripto shpërblyhet p2p",
"crypto_address_not_yours": "Adresa e kriptovalutës i përket një llogarie tjetër.",
"enter_crypto_address": "Ju lutemi vendosni një adresë kripto të vlefshme.",
"crypto_address_not_resolved": "Adresa e kriptovalutës nuk është ende e zgjidhur.",
"copy_message_etherscan": "<1>{{copy}}</1> mesazh për nënshkrim në <2>etherscan</2>",
"account": "llogari",
"crypto_address": "adresa e kripto",
"crypto_wallets": "Portofolitë e cryptos",
"plebbit_options": "opsione plebbit",
"reset": "rithqas",
"import": "importo",
"export": "eksport",
"full_account_data": "të dhënat e plotë të llogarisë",
"this_account": "kjo llogaria",
"delete": "fshij"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "projekt",
"challenge_counter": "{{index}} av {{total}}",
"embed": "bädda in",
"remove": "ta bort",
"remove": "Ta bort",
"download_latest_desktop": "Ladda ner den senaste skrivbordsversionen här: {{link}}",
"new_stable_version": "Ny stabil version tillgänglig, plebchan v{{newVersion}}. Du använder plebchan v{{oldVersion}}.",
"refresh_to_update": "Uppdatera sidan för att uppdatera",
@@ -88,5 +88,30 @@
"style": "Stil",
"interface_language": "gränssnittsspråk",
"delete_confirm": "Är du säker på att du vill ta bort {{value}}?",
"double_confirm": "Är du verkligen säker? Denna åtgärd är oåterkallelig."
"double_confirm": "Är du verkligen säker? Denna åtgärd är oåterkallelig.",
"save": "Spara",
"show": "visa",
"saved": "sparad",
"paste_signature": "Klistra in signatur",
"chain_ticker": "Blockchain ticker",
"wallet_address": "Plånboksadress",
"copy": "kopiera",
"copied": "kopierad",
"wallet": "Plånbok",
"add_wallet": "<1>Lägg till</1> en krypto-plånbok",
"crypto_address_verification": "om kryptoadressen är löst p2p",
"crypto_address_not_yours": "Crypto-adress tillhör ett annat konto.",
"enter_crypto_address": "Ange en giltig kryptoadress.",
"crypto_address_not_resolved": "Crypto-adressen är ännu inte löst.",
"copy_message_etherscan": "<1>{{copy}}</1> meddelande att signera på <2>etherscan</2>",
"account": "konto",
"crypto_address": "kryptoadress",
"crypto_wallets": "Crypto-plånböcker",
"plebbit_options": "plebbit-alternativ",
"reset": "återställ",
"import": "importera",
"export": "exportera",
"full_account_data": "fullständig kontodata",
"this_account": "detta konto",
"delete": "ta bort"
}
+27 -2
View File
@@ -83,10 +83,35 @@
"check_for_updates": "<1>తనిఖీ</1> అప్డేట్లను",
"latest_development_version": "మీరు తొలగించే త్వరిత అప్డేటు, కమిట్ {{commit}} పరిపాలన ముగింది స్థిర అప్డేటు కోసం {{link}}.",
"latest_stable_version": "మీరు తొలగించిన తొలగిన సంస్కరణం, plebchan v{{version}} నందు.",
"check": "తనిఖీ చేయండి",
"check": "తనిఖీ",
"update": "నవీకరణ",
"style": "శైలి",
"interface_language": "ఇంటర్ఫేస్ భాష",
"delete_confirm": "మీరు {{value}} ను తొలగించడానికి ఖచ్చితంగా ఉన్నారా?",
"double_confirm": "మీరు నిజంగా ఖచ్చితముగా ఉన్నారా? ఈ చర్య రద్దు చేయలేదు."
"double_confirm": "మీరు నిజంగా ఖచ్చితముగా ఉన్నారా? ఈ చర్య రద్దు చేయలేదు.",
"save": "సేవ్",
"show": "చూపించు",
"saved": "భద్రపరచబడినది",
"paste_signature": "సహిమస్తు పేస్ట్ చేయండి",
"chain_ticker": "బ్లాక్ చేన్ టిక్కర్",
"wallet_address": "వాలెట్ చిరునామా",
"copy": "నకలు",
"copied": "నకలు చేయబడింది",
"wallet": "వాలెట్",
"add_wallet": "<1>జోడించు</1> ఒక క్రిప్టో వాలెట్",
"crypto_address_verification": "క్రిప్టో చిరునామా p2p ద్వారా మొదల్గయింది",
"crypto_address_not_yours": "క్రిప్టో చిరునామా మరొక ఖాతాకు చేరుకుంది.",
"enter_crypto_address": "దయచేసి చేసిన క్రిప్టో చిరునామాను నమోదు చేయండి.",
"crypto_address_not_resolved": "క్రిప్టో చిరునామా ఇంకా పరిష్కరించబడలేదు.",
"copy_message_etherscan": "<1>{{copy}}</1> సందేశం సాఇన్ చేయడానికి <2>etherscan</2> మీద",
"account": "ఖాతా",
"crypto_address": "క్రిప్టో చిరునామా",
"crypto_wallets": "క్రిప్టో వాలెట్‌లు",
"plebbit_options": "plebbit ఎంపికలు",
"reset": "రీసెట్",
"import": "దిగుమతి",
"export": "ఎగుమతి",
"full_account_data": "పూర్తి ఖాతా డేటా",
"this_account": "ఈ ఖాతా",
"delete": "తొలగించండి"
}
+26 -1
View File
@@ -88,5 +88,30 @@
"style": "สไตล์",
"interface_language": "ภาษาอินเทอร์เฟซ",
"delete_confirm": "คุณแน่ใจหรือไม่ว่าต้องการลบ {{value}}?",
"double_confirm": "คุณแน่ใจหรือไม่? การดำเนินการนี้ไม่สามารถย้อนกลับได้"
"double_confirm": "คุณแน่ใจหรือไม่? การดำเนินการนี้ไม่สามารถย้อนกลับได้",
"save": "บันทึก",
"show": "แสดง",
"saved": "บันทึกแล้ว",
"paste_signature": "วางลายเซ็น",
"chain_ticker": "เครือข่ายตัวชี้วัด",
"wallet_address": "ที่อยู่กระเป๋าเงิน",
"copy": "คัดลอก",
"copied": "คัดลอกแล้ว",
"wallet": "กระเป๋าเงิน",
"add_wallet": "<1>เพิ่ม</1> กระเป๋าเงินดิจิทัล",
"crypto_address_verification": "หากที่อยู่คริปโตได้รับการแก้ไข p2p",
"crypto_address_not_yours": "ที่อยู่คริปโตเป็นของบัญชีอื่น",
"enter_crypto_address": "โปรดป้อนที่อยู่คริปโตที่ถูกต้อง",
"crypto_address_not_resolved": "ที่อยู่คริปโตยังไม่ได้รับการแก้ไข",
"copy_message_etherscan": "<1>{{copy}}</1> ข้อความเพื่อเซ็นบน <2>etherscan</2>",
"account": "บัญชี",
"crypto_address": "ที่อยู่คริปโต",
"crypto_wallets": "กระเป๋าเงินดิจิทัล",
"plebbit_options": "ตัวเลือก plebbit",
"reset": "รีเซ็ต",
"import": "นำเข้า",
"export": "ส่งออก",
"full_account_data": "ข้อมูลบัญชีเต็มรูปแบบ",
"this_account": "บัญชีนี้",
"delete": "ลบ"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "projeler",
"challenge_counter": "{{index}} / {{total}}",
"embed": "göm",
"remove": "kaldır",
"remove": "Kaldır",
"download_latest_desktop": "Son masaüstü sürümünü buradan indirin: {{link}}",
"new_stable_version": "Yeni stabil sürüm kullanılabilir, plebchan v{{newVersion}}. plebchan v{{oldVersion}} kullanıyorsunuz.",
"refresh_to_update": "Güncellemek için sayfayı yenileyin",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Güncellemeleri</1> kontrol et",
"latest_development_version": "En son geliştirme sürümündesiniz, commit {{commit}}. Kararlı sürümü kullanmak için {{link}} gidin.",
"latest_stable_version": "En son kararlı sürümünde, plebchan v{{version}}s.",
"check": "kontrol et",
"check": "kontrol etmek",
"update": "Güncelle",
"style": "Stil",
"interface_language": "arayüz dili",
"delete_confirm": "{{value}}'yi silmek istediğinizden emin misiniz?",
"double_confirm": "Gerçekten emin misiniz? Bu eylem geri alınamaz."
"double_confirm": "Gerçekten emin misiniz? Bu eylem geri alınamaz.",
"save": "Kaydet",
"show": "göstermek",
"saved": "kaydedildi",
"paste_signature": "İmza yapıştır",
"chain_ticker": "Blockchain ticker",
"wallet_address": "Cüzdan adresi",
"copy": "kopyala",
"copied": "kopyalandı",
"wallet": "Cüzdan",
"add_wallet": "<1>Kripto cüzdan</1> ekle",
"crypto_address_verification": "eğer kripto adresi p2p ile çözüldüyse",
"crypto_address_not_yours": "Kripto adres başka bir hesaba aittir.",
"enter_crypto_address": "Lütfen geçerli bir kripto adresi girin.",
"crypto_address_not_resolved": "Kripto adres henüz çözülmedi.",
"copy_message_etherscan": "<1>{{copy}}</1> <2>etherscan</2> üzerinde imzalanacak mesaj",
"account": "hesap",
"crypto_address": "kripto adres",
"crypto_wallets": "Kripto Cüzdanlar",
"plebbit_options": "plebbit seçenekleri",
"reset": "sıfırla",
"import": "ithal et",
"export": "dışa aktar",
"full_account_data": "tam hesap verisi",
"this_account": "bu hesap",
"delete": "sil"
}
+28 -3
View File
@@ -75,7 +75,7 @@
"projects": "проекти",
"challenge_counter": "{{index}} з {{total}}",
"embed": "вбудувати",
"remove": "видалити",
"remove": "Видалити",
"download_latest_desktop": "Завантажте останню версію для робочого столу тут: {{link}}",
"new_stable_version": "Нова стабільна версія доступна, plebchan v{{newVersion}}. Ви використовуєте plebchan v{{oldVersion}}.",
"refresh_to_update": "Оновіть сторінку, щоб оновити",
@@ -83,10 +83,35 @@
"check_for_updates": "<1>Перевірити</1> оновлення",
"latest_development_version": "Ви використовуєте останню версію розробки, коміт {{commit}}. Щоб використовувати стабільну версію, перейдіть за посиланням {{link}}.",
"latest_stable_version": "Ви використовуєте останню стабільну версію, plebchan v{{version}}.",
"check": "перевірте",
"check": "перевірити",
"update": "Оновити",
"style": "Стиль",
"interface_language": "мова інтерфейсу",
"delete_confirm": "Ви впевнені, що хочете видалити {{value}}?",
"double_confirm": "Ви впевнені? Ця дія незворотня."
"double_confirm": "Ви впевнені? Ця дія незворотня.",
"save": "Зберегти",
"show": "показати",
"saved": "збережено",
"paste_signature": "Вставте підпис",
"chain_ticker": "Блокчейн тікер",
"wallet_address": "Адреса гаманця",
"copy": "копіювати",
"copied": "скопійовано",
"wallet": "Гаманець",
"add_wallet": "<1>Додати</1> криптокошелек",
"crypto_address_verification": "якщо адреса криптовалюти розглядається p2p",
"crypto_address_not_yours": "Адреса криптовалюти належить до іншого облікового запису.",
"enter_crypto_address": "Будь ласка, введіть дійсну криптовалютну адресу.",
"crypto_address_not_resolved": "Адреса криптовалюти ще не вирішена.",
"copy_message_etherscan": "<1>{{copy}}</1> повідомлення для підпису на <2>etherscan</2>",
"account": "рахунок",
"crypto_address": "адреса криптовалюти",
"crypto_wallets": "Криптокошельки",
"plebbit_options": "плебіт варіанти",
"reset": "скинути",
"import": "імпортувати",
"export": "експортувати",
"full_account_data": "повні дані аккаунта",
"this_account": "цей аккаунт",
"delete": "видалити"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "منصوبے",
"challenge_counter": "{{index}} میں سے {{total}}",
"embed": "ایمبیڈ",
"remove": "ہٹائیں",
"remove": "ہٹا دو",
"download_latest_desktop": "یہاں سب سے تازہ ڈیسک ٹاپ ورژن ڈاؤن لوڈ کریں: {{link}}",
"new_stable_version": "نیو مستقر ورژن دستیاب ہے, plebchan v{{newVersion}}۔ آپ plebchan v{{oldVersion}} استعمال کر رہے ہیں۔",
"refresh_to_update": "اپ ڈیٹ کرنے کے لئے صفحہ تازہ کریں",
@@ -88,5 +88,30 @@
"style": "اسٹائل",
"interface_language": "انٹرفیس زبان",
"delete_confirm": "کیا آپ واقعی {{value}} کو حذف کرنا چاہتے ہیں؟",
"double_confirm": "کیا آپ واقعی میں یقینی ہیں؟ یہ کارروائی بے واپس ہے۔"
"double_confirm": "کیا آپ واقعی میں یقینی ہیں؟ یہ کارروائی بے واپس ہے۔",
"save": "محفوظ کریں",
"show": "دکھائیں",
"saved": "محفوظ",
"paste_signature": "سرنی چسپاں کریں",
"chain_ticker": "بلاک چین ٹکر",
"wallet_address": "والیٹ کا پتہ",
"copy": "کاپی",
"copied": "کاپی کی گئی",
"wallet": "والیٹ",
"add_wallet": "<1>شامل کریں</1> ایک کرپٹو والیٹ",
"crypto_address_verification": "اگر کرپٹو پتا p2p کے ذریعے حل ہوتا ہے",
"crypto_address_not_yours": "کرپٹو پتا دوسرے اکاؤنٹ کا حصہ ہے۔",
"enter_crypto_address": "براہ کرم ایک معتبر کرپٹو پتہ داخل کریں۔",
"crypto_address_not_resolved": "کرپٹو پتا ابھی تک حل نہیں ہوا ہے۔",
"copy_message_etherscan": "<1>{{copy}}</1> پیغام <2>etherscan</2> پر دستخط کریں",
"account": "اکاؤنٹ",
"crypto_address": "کرپٹو پتہ",
"crypto_wallets": "کرپٹو والٹس",
"plebbit_options": "پلیبٹ اختیارات",
"reset": "ری سیٹ کریں",
"import": "درآمد کریں",
"export": "برآمد کریں",
"full_account_data": "مکمل اکاؤنٹ ڈیٹا",
"this_account": "یہ اکاؤنٹ",
"delete": "حذف کریں"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "dự án",
"challenge_counter": "{{index}} trong {{total}}",
"embed": "nhúng",
"remove": "xóa",
"remove": "Xóa bỏ",
"download_latest_desktop": "Tải xuống phiên bản máy tính để bàn mới nhất tại đây: {{link}}",
"new_stable_version": "Phiên bản ổn định mới có sẵn, plebchan v{{newVersion}}. Bạn đang sử dụng plebchan v{{oldVersion}}.",
"refresh_to_update": "Làm mới trang để cập nhật",
@@ -88,5 +88,30 @@
"style": "Phong cách",
"interface_language": "ngôn ngữ giao diện",
"delete_confirm": "Bạn có chắc chắn muốn xóa {{value}} không?",
"double_confirm": "Bạn có chắc chắn không? Hành động này không thể hoàn tác."
"double_confirm": "Bạn có chắc chắn không? Hành động này không thể hoàn tác.",
"save": "Lưu",
"show": "hiển thị",
"saved": "đã lưu",
"paste_signature": "Dán chữ ký",
"chain_ticker": "Ticker chuỗi khối",
"wallet_address": "Địa chỉ ví",
"copy": "sao chép",
"copied": "đã sao chép",
"wallet": "Ví",
"add_wallet": "<1>Thêm</1> một ví tiền điện tử",
"crypto_address_verification": "nếu địa chỉ tiền điện tử được giải quyết p2p",
"crypto_address_not_yours": "Địa chỉ tiền điện tử thuộc về một tài khoản khác.",
"enter_crypto_address": "Vui lòng nhập địa chỉ tiền điện tử hợp lệ.",
"crypto_address_not_resolved": "Địa chỉ tiền điện tử vẫn chưa được giải quyết.",
"copy_message_etherscan": "<1>{{copy}}</1> tin nhắn để ký trên <2>etherscan</2>",
"account": "tài khoản",
"crypto_address": "địa chỉ tiền điện tử",
"crypto_wallets": "Ví tiền điện tử",
"plebbit_options": "tùy chọn plebbit",
"reset": "đặt lại",
"import": "nhập",
"export": "xuất",
"full_account_data": "dữ liệu tài khoản đầy đủ",
"this_account": "tài khoản này",
"delete": "xóa"
}
+27 -2
View File
@@ -75,7 +75,7 @@
"projects": "项目",
"challenge_counter": "{{index}} / {{total}}",
"embed": "嵌入",
"remove": "移除",
"remove": "删除",
"download_latest_desktop": "在这里下载最新的桌面版本: {{link}}",
"new_stable_version": "新的稳定版可用,plebchan v{{newVersion}}。您正在使用plebchan v{{oldVersion}}。",
"refresh_to_update": "刷新页面以更新",
@@ -88,5 +88,30 @@
"style": "风格",
"interface_language": "界面语言",
"delete_confirm": "您确定要删除 {{value}} 吗?",
"double_confirm": "您真的确定吗?此操作不可逆转。"
"double_confirm": "您真的确定吗?此操作不可逆转。",
"save": "保存",
"show": "显示",
"saved": "已保存",
"paste_signature": "粘贴签名",
"chain_ticker": "区块链标记",
"wallet_address": "钱包地址",
"copy": "复制",
"copied": "已复制",
"wallet": "钱包",
"add_wallet": "<1>添加</1>一个加密货币钱包",
"crypto_address_verification": "如果加密地址是p2p解决的",
"crypto_address_not_yours": "加密地址属于另一个帐户。",
"enter_crypto_address": "请输入有效的加密货币地址。",
"crypto_address_not_resolved": "加密地址尚未解析。",
"copy_message_etherscan": "<1>{{copy}}</1> 在<2>etherscan</2>上签名的消息",
"account": "帐户",
"crypto_address": "加密地址",
"crypto_wallets": "加密货币钱包",
"plebbit_options": "plebbit选项",
"reset": "重置",
"import": "导入",
"export": "导出",
"full_account_data": "完整帐户数据",
"this_account": "此帐户",
"delete": "删除"
}
+3
View File
@@ -133,6 +133,7 @@
.postMenuBtnWrapper {
position: relative;
display: inline-block;
padding-left: 5px;
}
@@ -148,6 +149,8 @@
color: var(--post-menu-button-color);
transition: transform 0.1s;
position: absolute;
opacity: var(--post-menu-btn-opacity);
bottom: -4px;
}
.replyDesktop .postMenuBtn {
@@ -62,7 +62,7 @@
.content textarea {
vertical-align: top;
padding-top: 2em;
padding-top: 18px;
}
.footer button {
@@ -71,20 +71,14 @@
cursor: pointer;
}
.parentCidWrapper {
position: absolute;
background-color: var(--post-form-field-input-background-color, white);
width: 105px;
height: 15px;
left: 1px;
top: 1px;
padding: 5px;
}
.parentCid {
color: var(--post-form-field-input-color);
position: absolute;
text-decoration: underline;
width: auto;
background-color: var(--post-form-field-input-background-color, white);
padding: 2px;
left: 1px;
top: 1px;
}
@media (max-width: 640px) {
+3 -7
View File
@@ -64,7 +64,6 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
}, [isMobile, scrollY]);
const parentCidRef = useRef<HTMLSpanElement>(null);
const parentCidWrapperRef = useRef<HTMLDivElement>(null);
useEffect(() => {
if (parentCidRef.current && parentCidRef.current) {
@@ -99,17 +98,14 @@ const ReplyModal = ({ closeModal, parentCid, scrollY }: ReplyModalProps) => {
<input type='text' ref={urlRef} placeholder={_.capitalize(t('link'))} onChange={(e) => setContent.link(e.target.value)} />
</div>
<div className={styles.content}>
<span className={styles.parentCidWrapper} ref={parentCidWrapperRef}>
<span className={styles.parentCid} ref={parentCidRef}>
{`c/${parentCid && Plebbit.getShortCid(parentCid)}`}
</span>
<span className={styles.parentCid} ref={parentCidRef}>
{`c/${parentCid && Plebbit.getShortCid(parentCid)}`}
</span>
<textarea
cols={48}
rows={4}
rows={3}
wrap='soft'
ref={textRef}
placeholder={_.capitalize(t('comment'))}
onChange={(e) => {
const content = e.target.value.replace(/\n/g, '\n\n');
setContent.content(content);
@@ -0,0 +1,43 @@
.setting {
margin-left: 10px;
}
.setting textarea {
display: block;
font-family: dejavu sans mono, consolas, andale mono, lucida console, monospace;
outline: none;
border: 1px solid #aaa;
font-size: 11px;
margin: 0 2px 0 0;
padding: 2px 4px 3px;
min-height: 150px;
width: 95%;
}
.setting textarea:focus {
border-color: 1px solid #98e;
}
.setting button {
cursor: pointer;
}
.saveResetAccount {
margin-top: 15px;
}
.setting textarea {
margin-bottom: 5px;
}
.setting div {
margin-top: 5px;
}
.deleteAccount, .deleteAccount button {
color: red;
}
.setting .createAccount {
margin-left: 5px;
}
@@ -0,0 +1,183 @@
import { useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { createAccount, deleteAccount, exportAccount, importAccount, setAccount, setActiveAccount, useAccount, useAccounts } from '@plebbit/plebbit-react-hooks';
import stringify from 'json-stringify-pretty-compact';
import styles from './account-settings.module.css';
const AccountSettings = () => {
const { t } = useTranslation();
const account = useAccount();
const { accounts } = useAccounts();
const [text, setText] = useState('');
const [switchToLastAccount, setSwitchToLastAccount] = useState(false);
const accountJson = useMemo(
() => stringify({ account: { ...account, plebbit: undefined, karma: undefined, plebbitReactOptions: undefined, unreadNotificationCount: undefined } }),
[account],
);
useEffect(() => {
setText(accountJson);
}, [accountJson]);
useEffect(() => {
if (switchToLastAccount && accounts.length > 0) {
const lastAccount = accounts[accounts.length - 1];
setActiveAccount(lastAccount.name);
setSwitchToLastAccount(false);
}
}, [accounts, switchToLastAccount]);
const _createAccount = async () => {
try {
await createAccount();
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
setSwitchToLastAccount(true);
};
const _deleteAccount = (accountName: string) => {
if (!accountName) {
return;
} else if (window.confirm(t('delete_confirm', { value: accountName, interpolation: { escapeValue: false } }))) {
if (window.confirm(t('double_confirm'))) {
deleteAccount(accountName);
}
} else {
return;
}
};
const saveAccount = async () => {
try {
const newAccount = JSON.parse(text).account;
// force keeping the same id, makes it easier to copy paste
await setAccount({ ...newAccount, id: account?.id });
alert(`Saved ${newAccount.name}`);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
const _exportAccount = async () => {
try {
const accountString = await exportAccount();
const accountObject = JSON.parse(accountString);
const formattedAccountJson = JSON.stringify(accountObject, null, 2);
// Create a Blob from the JSON string
const blob = new Blob([formattedAccountJson], { type: 'application/json' });
// Create a URL for the Blob
const fileUrl = URL.createObjectURL(blob);
// Create a temporary download link
const link = document.createElement('a');
link.href = fileUrl;
link.download = `${account.name}.json`;
// Append the link, trigger the download, then remove the link
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// Release the Blob URL
URL.revokeObjectURL(fileUrl);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
const _importAccount = async () => {
// Create a file input element
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.json';
// Handle file selection
fileInput.onchange = async (event) => {
try {
const files = (event.target as HTMLInputElement).files;
if (!files || files.length === 0) {
throw new Error('No file selected.');
}
const file = files[0];
// Read the file content
const reader = new FileReader();
reader.onload = async (e) => {
const fileContent = e.target!.result; // Non-null assertion
if (typeof fileContent !== 'string') {
throw new Error('File content is not a string.');
}
const newAccount = JSON.parse(fileContent);
await importAccount(fileContent);
setSwitchToLastAccount(true);
alert(`Imported ${newAccount.account?.name}`);
};
reader.readAsText(file);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
// Trigger file selection dialog
fileInput.click();
};
const accountsOptions = accounts.map((account) => (
<option key={account?.id} value={account?.name}>
u/{account?.author?.shortAddress}
</option>
));
return (
<div className={styles.setting}>
<div>
<select value={account?.name} onChange={(e) => setActiveAccount(e.target.value)}>
{accountsOptions}
</select>
<button className={styles.createAccount} onClick={_createAccount}>
+
</button>
</div>
<div></div>
<textarea value={text} onChange={(e) => setText(e.target.value)} autoCorrect='off' autoComplete='off' spellCheck='false' />
<div>
<button onClick={saveAccount}>{t('save')}</button> <button onClick={() => setText(accountJson)}>{t('reset')}</button>
</div>
<div>
<button onClick={_importAccount}>{t('import')}</button> {t('full_account_data')}
</div>
<div>
<button onClick={_exportAccount}>{t('export')}</button> {t('full_account_data')}
</div>
<div className={styles.deleteAccount}>
<button onClick={() => _deleteAccount(account?.name)}>{t('delete')}</button> {t('this_account')}
</div>
</div>
);
};
export default AccountSettings;
@@ -0,0 +1 @@
export { default } from './account-settings';
@@ -0,0 +1,42 @@
.setting {
margin-left: 10px;
}
.setting button {
cursor: pointer;
text-transform: capitalize;
}
.cryptoAddressInput input[type="text"] {
padding: 2px 0;
margin-bottom: 5px;
}
.infoButton {
padding: 0 5px;
}
.cryptoAddressInfo {
word-break: break-word;
}
.cryptoAddressInfo ol {
padding-bottom: 10px;
padding-left: 15px;
}
.saveButton {
margin: 0 5px;
}
.red {
color: red;
}
.yellow {
color: yellow;
}
.green {
color: green;
}
@@ -0,0 +1,161 @@
import { useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useAccount, setAccount, useResolvedAuthorAddress } from '@plebbit/plebbit-react-hooks';
import styles from './crypto-address-setting.module.css';
const CryptoAddressSetting = () => {
const { t } = useTranslation();
const account = useAccount();
const [cryptoState, setCryptoState] = useState({
cryptoAddress: '',
checkingCryptoAddress: false,
showResolvingMessage: false,
resolveString: t('crypto_address_verification'),
resolveClass: '',
});
const [savedCryptoAddress, setSavedCryptoAddress] = useState(false);
const author = { ...account?.author, address: cryptoState.cryptoAddress };
const { resolvedAddress, state, error, chainProvider } = useResolvedAuthorAddress({ author, cache: false });
const checkCryptoAddress = () => {
if (!cryptoState.cryptoAddress || !cryptoState.cryptoAddress.includes('.')) {
alert(t('enter_crypto_address'));
return;
}
let resolveString = '';
let resolveClass = '';
if (state === 'failed') {
resolveString = error instanceof Error ? `failed to resolve crypto address, error: ${error.message}` : 'cannot resolve crypto address, unknown error';
resolveClass = styles.red;
} else if (state === 'resolving') {
resolveString = `resolving from ${chainProvider?.urls}`;
resolveClass = styles.yellow;
} else if (resolvedAddress && resolvedAddress === account?.signer?.address) {
resolveString = t('crypto_address_yours');
resolveClass = styles.green;
} else if (resolvedAddress && resolvedAddress !== account?.signer?.address) {
resolveString = t('crypto_address_not_yours');
resolveClass = styles.red;
} else {
resolveString = t('crypto_address_verification');
resolveClass = '';
}
setCryptoState((prevState) => ({
...prevState,
showResolvingMessage: true,
resolveString,
resolveClass,
}));
};
const saveCryptoAddress = async () => {
if (!cryptoState.cryptoAddress || !cryptoState.cryptoAddress.includes('.')) {
alert(t('enter_crypto_address'));
return;
} else if (resolvedAddress && resolvedAddress !== account?.signer?.address) {
alert(t('crypto_address_not_yours'));
return;
} else if (cryptoState.cryptoAddress && !resolvedAddress) {
alert(t('crypto_address_not_resolved'));
return;
} else if (resolvedAddress && resolvedAddress === account?.signer?.address) {
try {
await setAccount({ ...account, author: { ...account?.author, address: cryptoState.cryptoAddress } });
setSavedCryptoAddress(true);
setTimeout(() => {
setSavedCryptoAddress(false);
}, 2000);
setCryptoState((prevState) => ({
...prevState,
savedCryptoAddress: true,
cryptoAddress: '',
checkingCryptoAddress: false,
}));
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
setSavedCryptoAddress(true);
setCryptoState((prevState) => ({
...prevState,
checkingCryptoAddress: false,
showResolvingMessage: false,
resolveString: t('crypto_address_verification'),
resolveClass: '',
}));
}
};
const [showCryptoAddressInfo, setShowCryptoAddressInfo] = useState(false);
return (
<div className={styles.setting}>
<div className={styles.cryptoAddressInput}>
<input
type='text'
placeholder='address.eth/.sol'
defaultValue={cryptoState.cryptoAddress || (account?.author?.shortAddress.includes('.') ? account.author.shortAddress : '')}
onChange={(e) => setCryptoState((prevState) => ({ ...prevState, cryptoAddress: e.target.value }))}
/>
<button className={styles.saveButton} onClick={saveCryptoAddress}>
{t('save')}
</button>
<button className={styles.infoButton} onClick={() => setShowCryptoAddressInfo(!showCryptoAddressInfo)}>
{showCryptoAddressInfo ? 'x' : '?'}
</button>
{showCryptoAddressInfo && (
<div className={styles.cryptoAddressInfo}>
steps to set a .eth user address:
<br />
<ol>
<li>
go to{' '}
<a href='https://app.ens.domains/' target='_blank' rel='noopener noreferrer'>
app.ens.domains
</a>{' '}
and search the address
</li>
<li>once you own the address, go to its page, click on "records", then "edit records"</li>
<li>add a new text record with name "plebbit-author-address" and value: {account?.signer?.address}</li>
</ol>
steps to set a .sol user address:
<br />
<ol>
<li>
go to{' '}
<a href='https://www.sns.id/' target='_blank' rel='noopener noreferrer'>
sns.id
</a>{' '}
and search the address
</li>
<li>once you own the address, go to your profile, click the address menu "...", then "create subdomain"</li>
<li>enter subdomain "plebbit-author-address" and create</li>
<li>go to subdomain, "content", change content to: {account?.signer?.address}</li>
</ol>
</div>
)}
{savedCryptoAddress && <span className={styles.saved}>{t('saved')}</span>}
</div>
<div className={styles.checkCryptoAddress}>
<button className={styles.button} onClick={checkCryptoAddress}>
{t('check')}
</button>{' '}
<span className={cryptoState.resolveClass}>{cryptoState.resolveString}</span>
</div>
</div>
);
};
export default CryptoAddressSetting;
@@ -0,0 +1 @@
export { default } from './crypto-address-setting';
@@ -0,0 +1,58 @@
.setting {
margin-left: 10px;
}
.addWallet select {
margin-right: 5px;
margin-bottom: 5px;
}
.save {
margin-left: 5px;
}
.walletTitle {
text-transform: lowercase;
font-style: italic;
}
.removeWallet {
color: red;
margin-top: 15px;
}
.walletFieldTitle {
margin-top: 5px;
font-style: italic;
text-transform: lowercase;
}
.walletField input {
width: 200px;
padding: 2px;
box-shadow: var(--box-shadow-input);
}
.copyMessage {
padding-top: 10px;
}
.copyMessage a {
color: var(--text-primary);
}
.copyMessage a:hover {
text-decoration: underline;
}
.show {
display: block;
}
.hide {
display: none;
}
.toggleWallet {
margin-right: 7px;
}
@@ -0,0 +1,189 @@
import { useState } from 'react';
import { Account, setAccount, useAccount } from '@plebbit/plebbit-react-hooks';
import styles from './crypto-wallets-setting.module.css';
import { Trans, useTranslation } from 'react-i18next';
interface Wallet {
chainTicker: string;
address: string;
timestamp: number;
signature: string;
}
const getWalletMessageToSign = (authorAddress: string, timestamp: number): string => {
const messageToSign = {
domainSeparator: 'plebbit-author-wallet',
authorAddress,
timestamp,
};
return JSON.stringify(messageToSign);
};
const CryptoWalletsForm = ({ account }: { account: Account | undefined }) => {
const { t } = useTranslation();
if (!account) {
throw Error('CryptoWalletsForm account prop must be defined');
}
const authorAddress = account?.author?.address;
const defaultWalletObject: Wallet = { chainTicker: '', address: '', timestamp: 0, signature: '' };
const walletsFromAccount = Object.keys(account?.author?.wallets || {}).map(
(chainTicker): Wallet => ({
chainTicker,
address: account.author.wallets[chainTicker].address,
timestamp: account.author.wallets[chainTicker].timestamp,
signature: account.author.wallets[chainTicker].signature.signature,
}),
);
const defaultWalletsArray: Wallet[] = walletsFromAccount.length ? walletsFromAccount : [];
const [walletsArray, setWalletsArray] = useState<Wallet[]>(defaultWalletsArray);
const [selectedWallet, setSelectedWallet] = useState(0);
const setWalletsArrayProperty = (index: number, property: keyof Wallet, value: string | number) => {
const newArray = [...walletsArray];
newArray[index] = { ...newArray[index], [property]: value };
setWalletsArray(newArray);
};
const [hasCopied, setHasCopied] = useState(false);
const copyMessageToSign = (wallet: any, index: number) => {
if (!wallet.chainTicker) {
return alert('missing chain ticker');
}
if (!wallet.address) {
return alert('missing address');
}
const timestamp = wallet.timestamp || Math.floor(Date.now() / 1000);
const messageToSign = getWalletMessageToSign(authorAddress, timestamp);
if (timestamp !== wallet.timestamp) {
setWalletsArrayProperty(index, 'timestamp', timestamp);
}
navigator.clipboard.writeText(messageToSign);
setHasCopied(true);
setTimeout(() => {
setHasCopied(false);
}, 2000);
};
const save = () => {
const wallets: { [key: string]: { address: string; timestamp: number; signature: { signature: string; type: string } } } = {};
walletsArray.forEach((wallet) => {
if (wallet.chainTicker && wallet.address && wallet.signature && wallet.timestamp) {
wallets[wallet.chainTicker] = {
address: wallet.address,
timestamp: wallet.timestamp,
signature: {
signature: wallet.signature,
type: 'eip191',
},
};
}
});
setAccount({ ...account, author: { ...account.author, wallets } });
alert(t('saved'));
};
const _removeWallet = (index: number) => {
const wallet = walletsArray[index];
if (window.confirm(t('delete_confirm', { value: wallet.chainTicker, interpolation: { escapeValue: false } }))) {
if (window.confirm(t('double_confirm'))) {
const newArray = [...walletsArray.slice(0, index), ...walletsArray.slice(index + 1)];
setWalletsArray(newArray);
setSelectedWallet(0);
}
} else {
return;
}
};
const walletsInputs =
walletsArray.length > 0 ? (
<div key={selectedWallet} className={styles.walletBox}>
<div className={styles.walletField}>
<div className={styles.walletFieldTitle}>{t('chain_ticker')}</div>
<input
type='text'
onChange={(e) => setWalletsArrayProperty(selectedWallet, 'chainTicker', e.target.value)}
value={walletsArray[selectedWallet].chainTicker}
placeholder='eth/sol/avax'
/>
</div>
<div className={styles.walletField}>
<div className={styles.walletFieldTitle}>{t('wallet_address')}</div>
<input
type='text'
onChange={(e) => setWalletsArrayProperty(selectedWallet, 'address', e.target.value)}
value={walletsArray[selectedWallet].address}
placeholder='0x...'
/>
</div>
<div className={`${styles.walletField} ${styles.copyMessage}`}>
<Trans
i18nKey='copy_message_etherscan'
values={{ copy: hasCopied ? t('copied') : t('copy') }}
components={{
1: <button onClick={() => copyMessageToSign(walletsArray[selectedWallet], selectedWallet)} />,
// eslint-disable-next-line
2: <a href='https://etherscan.io/verifiedSignatures' target='_blank' rel='noopener noreferrer' />,
}}
/>
</div>
<div className={styles.walletField}>
<div className={styles.walletFieldTitle}>{t('paste_signature')}</div>
<input
type='text'
onChange={(e) => setWalletsArrayProperty(selectedWallet, 'signature', e.target.value)}
value={walletsArray[selectedWallet].signature}
placeholder='0x...'
/>
<button className={styles.save} onClick={save}>
{t('save')}
</button>
</div>
<button className={styles.removeWallet} onClick={() => _removeWallet(selectedWallet)}>
{t('remove')}
</button>
</div>
) : null;
return (
<>
<div className={styles.addWallet}>
<select onChange={(e) => setSelectedWallet(Number(e.target.value))} value={selectedWallet}>
{walletsArray.length === 0 && <option>{t('none')}</option>}
{walletsArray.map((_, index) => (
<option key={index} value={index}>
{t('wallet')} #{index + 1}
</option>
))}
</select>
<button
onClick={() => {
const newIndex = walletsArray.length;
setWalletsArray([...walletsArray, defaultWalletObject]);
setSelectedWallet(newIndex);
}}
>
+
</button>
</div>
{walletsInputs}
</>
);
};
const CryptoWalletsSetting = () => {
const account = useAccount();
return (
account && (
<div className={styles.setting}>
<CryptoWalletsForm account={account} />
</div>
)
);
};
export default CryptoWalletsSetting;
@@ -0,0 +1 @@
export { default } from './crypto-wallets-setting';
@@ -8,6 +8,20 @@
z-index: 900;
}
.settingsModal label, .settingsModal button, .settingsModal select {
cursor: pointer;
}
.settingsModal button {
text-transform: capitalize;
}
.settingsModal input[type='text'] {
outline: none;
border: 1px solid #aaa;
padding: 2px 4px 3px;
}
.settingsModal {
top: 25px;
width: 394px;
@@ -28,7 +42,7 @@
border-left: var(--settings-modal-border-left);
}
.settingsModal select, .settingsModal button, .settingsModal textarea {
.settingsModal select, .settingsModal button, .settingsModal textarea, .settingsModal input[type='text'] {
filter: var(--filter80);
}
@@ -69,7 +83,6 @@
height: 18px;
display: block;
background-size: 100%;
cursor: pointer;
position: absolute;
top: 5px;
image-rendering: pixelated;
@@ -88,7 +101,6 @@
.hideButton, .showButton {
vertical-align: text-bottom;
margin-right: 5px;
cursor: pointer;
width: 18px;
height: 18px;
background-repeat: no-repeat;
@@ -110,7 +122,6 @@
}
.category label {
cursor: pointer;
font-weight: 700;
}
@@ -122,50 +133,6 @@
margin-left: 5px;
}
.accountSettings {
margin-left: 10px;
}
.accountSettings textarea {
display: block;
font-family: dejavu sans mono, consolas, andale mono, lucida console, monospace;
outline: none;
border: 1px solid #aaa;
font-size: 11px;
margin: 0 2px 0 0;
padding: 2px 4px 3px;
min-height: 150px;
width: 95%;
}
.accountSettings textarea:focus {
border-color: 1px solid #98e;
}
.accountSettings button {
cursor: pointer;
}
.saveResetAccount {
margin-top: 15px;
}
.accountSettings textarea {
margin-bottom: 5px;
}
.accountSettings div {
margin-top: 5px;
}
.deleteAccount, .deleteAccount button {
color: red;
}
.accountSettings .createAccount {
margin-left: 5px;
}
@media (max-width: 640px) {
.settingsModal {
width: 350px !important;
+22 -181
View File
@@ -1,11 +1,12 @@
import { useEffect, useMemo, useState } from 'react';
import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
import { createAccount, deleteAccount, exportAccount, importAccount, setAccount, setActiveAccount, useAccount, useAccounts } from '@plebbit/plebbit-react-hooks';
import stringify from 'json-stringify-pretty-compact';
import styles from './settings-modal.module.css';
import useTheme from '../../hooks/use-theme';
import packageJson from '../../../package.json';
import AccountSettings from './account-settings';
import CryptoAddressSetting from './crypto-address-setting';
import CryptoWalletsSetting from './crypto-wallets-setting';
const commitRef = process.env.REACT_APP_COMMIT_REF;
const isElectron = window.isElectron === true;
@@ -104,182 +105,6 @@ const InterfaceLanguage = () => {
);
};
const AccountSettings = () => {
const { t } = useTranslation();
const account = useAccount();
const { accounts } = useAccounts();
const [text, setText] = useState('');
const [switchToLastAccount, setSwitchToLastAccount] = useState(false);
const accountJson = useMemo(
() => stringify({ account: { ...account, plebbit: undefined, karma: undefined, plebbitReactOptions: undefined, unreadNotificationCount: undefined } }),
[account],
);
useEffect(() => {
setText(accountJson);
}, [accountJson]);
useEffect(() => {
if (switchToLastAccount && accounts.length > 0) {
const lastAccount = accounts[accounts.length - 1];
setActiveAccount(lastAccount.name);
setSwitchToLastAccount(false);
}
}, [accounts, switchToLastAccount]);
const _createAccount = async () => {
try {
await createAccount();
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
setSwitchToLastAccount(true);
};
const _deleteAccount = (accountName: string) => {
if (!accountName) {
return;
} else if (window.confirm(t('delete_confirm', { value: accountName, interpolation: { escapeValue: false } }))) {
if (window.confirm(t('double_confirm'))) {
deleteAccount(accountName);
}
} else {
return;
}
};
const saveAccount = async () => {
try {
const newAccount = JSON.parse(text).account;
// force keeping the same id, makes it easier to copy paste
await setAccount({ ...newAccount, id: account?.id });
alert(`Saved ${newAccount.name}`);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
const _exportAccount = async () => {
try {
const accountString = await exportAccount();
const accountObject = JSON.parse(accountString);
const formattedAccountJson = JSON.stringify(accountObject, null, 2);
// Create a Blob from the JSON string
const blob = new Blob([formattedAccountJson], { type: 'application/json' });
// Create a URL for the Blob
const fileUrl = URL.createObjectURL(blob);
// Create a temporary download link
const link = document.createElement('a');
link.href = fileUrl;
link.download = `${account.name}.json`;
// Append the link, trigger the download, then remove the link
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// Release the Blob URL
URL.revokeObjectURL(fileUrl);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
const _importAccount = async () => {
// Create a file input element
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.accept = '.json';
// Handle file selection
fileInput.onchange = async (event) => {
try {
const files = (event.target as HTMLInputElement).files;
if (!files || files.length === 0) {
throw new Error('No file selected.');
}
const file = files[0];
// Read the file content
const reader = new FileReader();
reader.onload = async (e) => {
const fileContent = e.target!.result; // Non-null assertion
if (typeof fileContent !== 'string') {
throw new Error('File content is not a string.');
}
const newAccount = JSON.parse(fileContent);
await importAccount(fileContent);
setSwitchToLastAccount(true);
alert(`Imported ${newAccount.account?.name}`);
};
reader.readAsText(file);
} catch (error) {
if (error instanceof Error) {
alert(error.message);
console.log(error);
} else {
console.error('An unknown error occurred:', error);
}
}
};
// Trigger file selection dialog
fileInput.click();
};
const accountsOptions = accounts.map((account) => (
<option key={account?.id} value={account?.name}>
u/{account?.author?.shortAddress}
</option>
));
return (
<div className={styles.accountSettings}>
<div>
<select value={account?.name} onChange={(e) => setActiveAccount(e.target.value)}>
{accountsOptions}
</select>
<button className={styles.createAccount} onClick={_createAccount}>
+
</button>
</div>
<div></div>
<textarea value={text} onChange={(e) => setText(e.target.value)} autoCorrect='off' autoComplete='off' spellCheck='false' />
<div>
<button onClick={saveAccount}>Save</button> <button onClick={() => setText(accountJson)}>Reset</button>
</div>
<div>
<button onClick={_importAccount}>Import</button> full account data
</div>
<div>
<button onClick={_exportAccount}>Export</button> full account data
</div>
<div className={styles.deleteAccount}>
<button onClick={() => _deleteAccount(account?.name)}>Delete</button> this account
</div>
</div>
);
};
const PlebbitOptionsSettings = () => {
return (
<>
@@ -297,6 +122,8 @@ const SettingsModal = () => {
};
const [showAccountSettings, setShowAccountSettings] = useState(false);
const [showCryptoAddressSetting, setShowCryptoAddressSetting] = useState(false);
const [showCryptoWalletSettings, setShowCryptoWalletSettings] = useState(false);
const [showPlebbitOptionsSettings, setShowPlebbitOptionsSettings] = useState(false);
return (
@@ -329,14 +156,28 @@ const SettingsModal = () => {
<div className={`${styles.setting} ${styles.category}`}>
<label onClick={() => setShowAccountSettings(!showAccountSettings)}>
<span className={showAccountSettings ? styles.hideButton : styles.showButton} />
Account
{t('account')}
</label>
</div>
{showAccountSettings && <AccountSettings />}
<div className={`${styles.setting} ${styles.category}`}>
<label onClick={() => setShowCryptoAddressSetting(!showCryptoAddressSetting)}>
<span className={showCryptoAddressSetting ? styles.hideButton : styles.showButton} />
{t('crypto_address')}
</label>
</div>
{showCryptoAddressSetting && <CryptoAddressSetting />}
<div className={`${styles.setting} ${styles.category}`}>
<label onClick={() => setShowCryptoWalletSettings(!showCryptoWalletSettings)}>
<span className={showCryptoWalletSettings ? styles.hideButton : styles.showButton} />
{t('crypto_wallets')}
</label>
</div>
{showCryptoWalletSettings && <CryptoWalletsSetting />}
<div className={`${styles.setting} ${styles.category}`}>
<label onClick={() => setShowPlebbitOptionsSettings(!showPlebbitOptionsSettings)}>
<span className={showPlebbitOptionsSettings ? styles.hideButton : styles.showButton} />
Plebbit Options
{t('plebbit_options')}
</label>
</div>
{showPlebbitOptionsSettings && <PlebbitOptionsSettings />}
+52
View File
@@ -0,0 +1,52 @@
import { useEffect, useMemo } from 'react';
import { useAccount, useSubplebbits } from '@plebbit/plebbit-react-hooks';
import { create } from 'zustand';
const useSubplebbitsStats = (options: any) => {
const { subplebbitAddresses, accountName } = options || {};
const account = useAccount({ accountName });
const { subplebbits } = useSubplebbits({ subplebbitAddresses });
const { setSubplebbitStats, subplebbitsStats } = useSubplebbitsStatsStore();
useEffect(() => {
if (!subplebbitAddresses || subplebbitAddresses.length === 0 || !account) {
return;
}
subplebbits.forEach((subplebbit) => {
if (subplebbit && subplebbit.statsCid && !subplebbitsStats[subplebbit.address]) {
account.plebbit
.fetchCid(subplebbit.statsCid)
.then((fetchedStats: any) => {
setSubplebbitStats(subplebbit.address, JSON.parse(fetchedStats));
})
.catch((error: any) => {
console.error('Fetching subplebbit stats failed', { subplebbitAddress: subplebbit.address, error });
});
}
});
}, [account, subplebbits, setSubplebbitStats, subplebbitsStats, subplebbitAddresses]);
return useMemo(() => {
return subplebbitAddresses.reduce((acc: any, address: any) => {
acc[address] = subplebbitsStats[address] || { loading: true };
return acc;
}, {});
}, [subplebbitsStats, subplebbitAddresses]);
};
export type SubplebbitsStatsState = {
subplebbitsStats: { [subplebbitAddress: string]: any };
setSubplebbitStats: Function;
};
const useSubplebbitsStatsStore = create<SubplebbitsStatsState>((set) => ({
subplebbitsStats: {},
setSubplebbitStats: (subplebbitAddress: string, subplebbitStats: any) =>
set((state) => ({
subplebbitsStats: { ...state.subplebbitsStats, [subplebbitAddress]: subplebbitStats },
})),
}));
export default useSubplebbitsStats;
+6
View File
@@ -98,6 +98,7 @@
--post-name-text-color: #117743;
--post-name-font-weight: 700;
--post-menu-button-color: #000080;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: red;
--post-greentext-color: #789922;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-red.png");
@@ -266,6 +267,7 @@
--post-name-text-color: #117743;
--post-name-font-weight: 700;
--post-menu-button-color: #34345c;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: #d00;
--post-greentext-color: #789922;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-blue.png");
@@ -410,6 +412,7 @@
--post-name-text-color: #117743;
--post-name-font-weight: 700;
--post-menu-button-color: #000080;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: red;
--post-greentext-color: #789922;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-red.png");
@@ -558,6 +561,7 @@
--post-name-text-color: #117743;
--post-name-font-weight: 700;
--post-menu-button-color: #34345c;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: #d00;
--post-greentext-color: #789922;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-blue.png");
@@ -707,6 +711,7 @@
--post-name-text-color: #c5c8c6;
--post-name-font-weight: 700;
--post-menu-button-color: #5F89AC;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: #81a2be;
--post-greentext-color: #b5bd68;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-dark.png");
@@ -863,6 +868,7 @@
--post-name-text-color: #004a99;
--post-name-font-weight: 700;
--post-menu-button-color: #FF6600;
--post-menu-btn-opacity: 0.8;
--post-menu-button-color-hover: #FF3300;
--post-greentext-color: #789922;
--post-replies-expand-button-background-image: url("/public/assets/buttons/plus-photon.png");
+2 -54
View File
@@ -1,4 +1,4 @@
import { useEffect, useRef, useState } from 'react';
import { useMemo, useRef } from 'react';
import styles from './home.module.css';
import { Link, useNavigate } from 'react-router-dom';
import { Trans, useTranslation } from 'react-i18next';
@@ -6,14 +6,10 @@ import { Comment, Subplebbit, useAccount, useAccountSubplebbits, useSubplebbits
import packageJson from '../../../package.json';
import useDefaultSubplebbits, { useDefaultSubplebbitAddresses } from '../../hooks/use-default-subplebbits';
import usePopularPosts from '../../hooks/use-popular-posts';
import useSubplebbitsStats from '../../hooks/use-subplebbits-stats';
import { getCommentMediaInfo } from '../../lib/utils/media-utils';
import { CatalogPostMedia } from '../../components/catalog-row';
import LoadingEllipsis from '../../components/loading-ellipsis';
import { shuffle } from 'lodash';
// for temporary hook to fetch subplebbit stats
import { useMemo } from 'react';
import { create } from 'zustand';
const isValidAddress = (address: string): boolean => {
if (address.includes('/') || address.includes('\\') || address.includes(' ')) {
@@ -230,54 +226,6 @@ const PopularThreads = ({ subplebbits }: { subplebbits: any }) => {
);
};
// temporary hook to fetch subplebbit stats
function useSubplebbitsStats(options: any) {
const { subplebbitAddresses, accountName } = options || {};
const account = useAccount({ accountName });
const { subplebbits } = useSubplebbits({ subplebbitAddresses });
const { setSubplebbitStats, subplebbitsStats } = useSubplebbitsStatsStore();
useEffect(() => {
if (!subplebbitAddresses || subplebbitAddresses.length === 0 || !account) {
return;
}
subplebbits.forEach((subplebbit) => {
if (subplebbit && subplebbit.statsCid && !subplebbitsStats[subplebbit.address]) {
account.plebbit
.fetchCid(subplebbit.statsCid)
.then((fetchedStats: any) => {
setSubplebbitStats(subplebbit.address, JSON.parse(fetchedStats));
})
.catch((error: any) => {
console.error('Fetching subplebbit stats failed', { subplebbitAddress: subplebbit.address, error });
});
}
});
}, [account, subplebbits, setSubplebbitStats, subplebbitsStats, subplebbitAddresses]);
return useMemo(() => {
return subplebbitAddresses.reduce((acc: any, address: any) => {
acc[address] = subplebbitsStats[address] || { loading: true };
return acc;
}, {});
}, [subplebbitsStats, subplebbitAddresses]);
}
export type SubplebbitsStatsState = {
subplebbitsStats: { [subplebbitAddress: string]: any };
setSubplebbitStats: Function;
};
const useSubplebbitsStatsStore = create<SubplebbitsStatsState>((set) => ({
subplebbitsStats: {},
setSubplebbitStats: (subplebbitAddress: string, subplebbitStats: any) =>
set((state) => ({
subplebbitsStats: { ...state.subplebbitsStats, [subplebbitAddress]: subplebbitStats },
})),
}));
const Stats = ({ multisub, subplebbitAddresses }: { multisub: any; subplebbitAddresses: string[] }) => {
const { t } = useTranslation();
const stats = useSubplebbitsStats({ subplebbitAddresses });