mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-05 06:37:10 -04:00
Added pads manager.
This commit is contained in:
parent
61a95c1630
commit
4d97c3c48f
71 changed files with 1787 additions and 65 deletions
28
admin/public/ep_admin_pads/ar.json
Normal file
28
admin/public/ep_admin_pads/ar.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Meno25",
|
||||||
|
"محمد أحمد عبد الفتاح"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "فعل",
|
||||||
|
"ep_adminpads2_autoupdate-label": "التحديث التلقائي على تغييرات الوسادة",
|
||||||
|
"ep_adminpads2_autoupdate.title": "لتمكين أو تعطيل التحديثات التلقائية للاستعلام الحالي.",
|
||||||
|
"ep_adminpads2_confirm": "هل تريد حقًا حذف الوسادة {{padID}}؟",
|
||||||
|
"ep_adminpads2_delete.value": "حذف",
|
||||||
|
"ep_adminpads2_last-edited": "آخر تعديل",
|
||||||
|
"ep_adminpads2_loading": "جارٍ التحميل...",
|
||||||
|
"ep_adminpads2_manage-pads": "إدارة الفوط",
|
||||||
|
"ep_adminpads2_no-results": "لا توجد نتائج.",
|
||||||
|
"ep_adminpads2_pad-user-count": "عدد المستخدمين الوسادة",
|
||||||
|
"ep_adminpads2_padname": "بادنام",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "مصطلح البحث",
|
||||||
|
"ep_adminpads2_search-button.value": "بحث",
|
||||||
|
"ep_adminpads2_search-done": "اكتمل البحث",
|
||||||
|
"ep_adminpads2_search-error-explanation": "واجه الخادم خطأً أثناء البحث عن منصات:",
|
||||||
|
"ep_adminpads2_search-error-title": "فشل في الحصول على قائمة الوسادة",
|
||||||
|
"ep_adminpads2_search-heading": "ابحث عن الفوط",
|
||||||
|
"ep_adminpads2_title": "إدارة الوسادة",
|
||||||
|
"ep_adminpads2_unknown-error": "خطأ غير معروف",
|
||||||
|
"ep_adminpads2_unknown-status": "حالة غير معروفة"
|
||||||
|
}
|
23
admin/public/ep_admin_pads/bn.json
Normal file
23
admin/public/ep_admin_pads/bn.json
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"আজিজ",
|
||||||
|
"আফতাবুজ্জামান"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "কার্য",
|
||||||
|
"ep_adminpads2_delete.value": "মুছে ফেলুন",
|
||||||
|
"ep_adminpads2_last-edited": "সর্বশেষ সম্পাদিত",
|
||||||
|
"ep_adminpads2_loading": "লোড হচ্ছে...",
|
||||||
|
"ep_adminpads2_manage-pads": "প্যাড পরিচালনা করুন",
|
||||||
|
"ep_adminpads2_no-results": "ফলাফল নেই",
|
||||||
|
"ep_adminpads2_padname": "প্যাডের নাম",
|
||||||
|
"ep_adminpads2_search-button.value": "অনুসন্ধান",
|
||||||
|
"ep_adminpads2_search-done": "অনুসন্ধান সম্পূর্ণ",
|
||||||
|
"ep_adminpads2_search-error-explanation": "প্যাড অনুসন্ধান করার সময় সার্ভার একটি ত্রুটির সম্মুখীন হয়েছে:",
|
||||||
|
"ep_adminpads2_search-error-title": "প্যাডের তালিকা পেতে ব্যর্থ",
|
||||||
|
"ep_adminpads2_search-heading": "প্যাড অনুসন্ধান করুন",
|
||||||
|
"ep_adminpads2_title": "প্যাড প্রশাসন",
|
||||||
|
"ep_adminpads2_unknown-error": "অজানা ত্রুটি",
|
||||||
|
"ep_adminpads2_unknown-status": "অজানা অবস্থা"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/ca.json
Normal file
27
admin/public/ep_admin_pads/ca.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Mguix"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Acció",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Actualització automàtica en cas de canvis de pad",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Activa o desactiva les actualitzacions automàtiques per a la consulta actual.",
|
||||||
|
"ep_adminpads2_confirm": "Esteu segur que voleu suprimir el pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Esborrar",
|
||||||
|
"ep_adminpads2_last-edited": "Darrera modificació",
|
||||||
|
"ep_adminpads2_loading": "S’està carregant…",
|
||||||
|
"ep_adminpads2_manage-pads": "Gestiona els pads",
|
||||||
|
"ep_adminpads2_no-results": "No hi ha cap resultat",
|
||||||
|
"ep_adminpads2_pad-user-count": "Nombre d'usuaris de pads",
|
||||||
|
"ep_adminpads2_padname": "Nom del pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Terme de cerca",
|
||||||
|
"ep_adminpads2_search-button.value": "Cercar",
|
||||||
|
"ep_adminpads2_search-done": "Cerca completa",
|
||||||
|
"ep_adminpads2_search-error-explanation": "El servidor ha trobat un error mentre buscava pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "No s'ha pogut obtenir la llista del pad",
|
||||||
|
"ep_adminpads2_search-heading": "Cerca pads",
|
||||||
|
"ep_adminpads2_title": "Administració del pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Error desconegut",
|
||||||
|
"ep_adminpads2_unknown-status": "Estat desconegut"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/cs.json
Normal file
27
admin/public/ep_admin_pads/cs.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Spotter"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Akce",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatická aktualizace změn Padu",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Povolí nebo zakáže automatické aktualizace pro aktuální dotaz.",
|
||||||
|
"ep_adminpads2_confirm": "Opravdu chcete odstranit pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Smazat",
|
||||||
|
"ep_adminpads2_last-edited": "Naposledy upraveno",
|
||||||
|
"ep_adminpads2_loading": "Načítání…",
|
||||||
|
"ep_adminpads2_manage-pads": "Spravovat pady",
|
||||||
|
"ep_adminpads2_no-results": "Žádné výsledky",
|
||||||
|
"ep_adminpads2_pad-user-count": "Počet uživatelů padu",
|
||||||
|
"ep_adminpads2_padname": "Název padu",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Hledaný výraz",
|
||||||
|
"ep_adminpads2_search-button.value": "Hledat",
|
||||||
|
"ep_adminpads2_search-done": "Hledání dokončeno",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Při hledání padů došlo k chybě serveru:",
|
||||||
|
"ep_adminpads2_search-error-title": "Seznam padů se nepodařilo získat",
|
||||||
|
"ep_adminpads2_search-heading": "Hledat pady",
|
||||||
|
"ep_adminpads2_title": "Správa Padu",
|
||||||
|
"ep_adminpads2_unknown-error": "Neznámá chyba",
|
||||||
|
"ep_adminpads2_unknown-status": "Neznámý stav"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/cy.json
Normal file
27
admin/public/ep_admin_pads/cy.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Robin Owain"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Gweithred",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Diweddaru newidiadau pad yn otomatig",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Galluogi neu analluogi diweddaru'r ymholiad cyfredol.",
|
||||||
|
"ep_adminpads2_confirm": "Siwr eich bod am ddileu'r pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Dileu",
|
||||||
|
"ep_adminpads2_last-edited": "Golygwyd ddiwethaf",
|
||||||
|
"ep_adminpads2_loading": "Wrthi'n llwytho...",
|
||||||
|
"ep_adminpads2_manage-pads": "Rheoli'r padiau",
|
||||||
|
"ep_adminpads2_no-results": "Dim canlyniad",
|
||||||
|
"ep_adminpads2_pad-user-count": "Cyfri defnyddiwr pad",
|
||||||
|
"ep_adminpads2_padname": "Enwpad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Term chwilio",
|
||||||
|
"ep_adminpads2_search-button.value": "Chwilio",
|
||||||
|
"ep_adminpads2_search-done": "Wedi gorffen",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Nam ar y gweinydd wrth chwilio'r padiau:",
|
||||||
|
"ep_adminpads2_search-error-title": "Methwyd a chael y rhestr pad",
|
||||||
|
"ep_adminpads2_search-heading": "Chwilio am badiau",
|
||||||
|
"ep_adminpads2_title": "Gweinyddiaeth y pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Nam o ryw fath",
|
||||||
|
"ep_adminpads2_unknown-status": "Statws anhysbys"
|
||||||
|
}
|
14
admin/public/ep_admin_pads/da.json
Normal file
14
admin/public/ep_admin_pads/da.json
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Saederup92"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Handling",
|
||||||
|
"ep_adminpads2_delete.value": "Slet",
|
||||||
|
"ep_adminpads2_last-edited": "Sidst redigeret",
|
||||||
|
"ep_adminpads2_loading": "Indlæser...",
|
||||||
|
"ep_adminpads2_no-results": "Ingen resultater",
|
||||||
|
"ep_adminpads2_unknown-error": "Ukendt fejl",
|
||||||
|
"ep_adminpads2_unknown-status": "Ukendt status"
|
||||||
|
}
|
32
admin/public/ep_admin_pads/de.json
Normal file
32
admin/public/ep_admin_pads/de.json
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Brettchenweber",
|
||||||
|
"Justman10000",
|
||||||
|
"Lorisobi",
|
||||||
|
"SamTV",
|
||||||
|
"Umlaut",
|
||||||
|
"Zunkelty"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Aktion",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatisch bei Pad-Änderungen updaten",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Aktiviert oder deaktiviert automatische Aktualisierungen für die aktuelle Abfrage.",
|
||||||
|
"ep_adminpads2_confirm": "Willst du das Pad {{padID}} wirklich löschen?",
|
||||||
|
"ep_adminpads2_delete.value": "Löschen",
|
||||||
|
"ep_adminpads2_last-edited": "Zuletzt bearbeitet",
|
||||||
|
"ep_adminpads2_loading": "Lädt...",
|
||||||
|
"ep_adminpads2_manage-pads": "Pads verwalten",
|
||||||
|
"ep_adminpads2_no-results": "Keine Ergebnisse",
|
||||||
|
"ep_adminpads2_pad-user-count": "Nutzerzahl des Pads",
|
||||||
|
"ep_adminpads2_padname": "Padname",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Suchbegriff",
|
||||||
|
"ep_adminpads2_search-button.value": "Suche",
|
||||||
|
"ep_adminpads2_search-done": "Suche vollendet",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Der Server ist bei der Suche nach Pads auf einen Fehler gestoßen:",
|
||||||
|
"ep_adminpads2_search-error-title": "Pad-Liste konnte nicht abgerufen werden",
|
||||||
|
"ep_adminpads2_search-heading": "Nach Pads suchen",
|
||||||
|
"ep_adminpads2_title": "Pad-Verwaltung",
|
||||||
|
"ep_adminpads2_unknown-error": "Unbekannter Fehler",
|
||||||
|
"ep_adminpads2_unknown-status": "Unbekannter Status"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/diq.json
Normal file
28
admin/public/ep_admin_pads/diq.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"1917 Ekim Devrimi",
|
||||||
|
"Mirzali"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Hereketi",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Vurnayışanê pedi otomatik rocane kerê",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Persê mewcudi rê rocaneyışanê otomatika aktiv ke ya zi dewrê ra vecê",
|
||||||
|
"ep_adminpads2_confirm": "Şıma qayılê pedê {{padID}} bıesternê?",
|
||||||
|
"ep_adminpads2_delete.value": "Bestere",
|
||||||
|
"ep_adminpads2_last-edited": "Vurnayışo peyên",
|
||||||
|
"ep_adminpads2_loading": "Bar beno...",
|
||||||
|
"ep_adminpads2_manage-pads": "Pedan idare kerê",
|
||||||
|
"ep_adminpads2_no-results": "Netice çıniyo",
|
||||||
|
"ep_adminpads2_pad-user-count": "Amarê karberanê pedi",
|
||||||
|
"ep_adminpads2_padname": "Padname",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "termê cıgêrayış",
|
||||||
|
"ep_adminpads2_search-button.value": "Cı geyre",
|
||||||
|
"ep_adminpads2_search-done": "Cıgeyrayışi temam",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Server cıgeyrayışê pedan de yew xetaya raşt ame",
|
||||||
|
"ep_adminpads2_search-error-title": "Lista pedi nêgêriye",
|
||||||
|
"ep_adminpads2_search-heading": "Pedan cıgeyrayış",
|
||||||
|
"ep_adminpads2_title": "İdarey pedi",
|
||||||
|
"ep_adminpads2_unknown-error": "Xetaya nêzanıtiye",
|
||||||
|
"ep_adminpads2_unknown-status": "Weziyeto nêzanaye"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/dsb.json
Normal file
27
admin/public/ep_admin_pads/dsb.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Michawiki"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Akcija",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Pśi změnach na zapisniku awtomatiski aktualizěrowaś",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Zmóžnja abo znjemóžnja awtomatiske aktualizacije za aktualne wótpšašowanje.",
|
||||||
|
"ep_adminpads2_confirm": "Cośo napšawdu zapisnik {{padID}} lašowaś?",
|
||||||
|
"ep_adminpads2_delete.value": "Lašowaś",
|
||||||
|
"ep_adminpads2_last-edited": "Slědna změna",
|
||||||
|
"ep_adminpads2_loading": "Zacytujo se...",
|
||||||
|
"ep_adminpads2_manage-pads": "Zapisniki zastojaś",
|
||||||
|
"ep_adminpads2_no-results": "Žedne wuslědki",
|
||||||
|
"ep_adminpads2_pad-user-count": "Licba wužywarjow zapisnika",
|
||||||
|
"ep_adminpads2_padname": "Mě zapisnika",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Pytańske zapśimjeśe",
|
||||||
|
"ep_adminpads2_search-button.value": "Pytaś",
|
||||||
|
"ep_adminpads2_search-done": "Pytanje dokóńcone",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Serwer jo starcył na zmólku, mjaztym až jo pytał za zapisnikami:",
|
||||||
|
"ep_adminpads2_search-error-title": "Lisćina zapisnikow njedajo se wobstaraś",
|
||||||
|
"ep_adminpads2_search-heading": "Za zapisnikami pytaś",
|
||||||
|
"ep_adminpads2_title": "Zapisnikowa administracija",
|
||||||
|
"ep_adminpads2_unknown-error": "Njeznata zmólka",
|
||||||
|
"ep_adminpads2_unknown-status": "Njeznaty status"
|
||||||
|
}
|
16
admin/public/ep_admin_pads/el.json
Normal file
16
admin/public/ep_admin_pads/el.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Norhorn"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_delete.value": "Διαγραφή",
|
||||||
|
"ep_adminpads2_last-edited": "Τελευταία απεξεργασία",
|
||||||
|
"ep_adminpads2_loading": "Φόρτωση…",
|
||||||
|
"ep_adminpads2_no-results": "Κανένα αποτέλεσμα",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Αναζήτηση όρων",
|
||||||
|
"ep_adminpads2_search-button.value": "Αναζήτηση",
|
||||||
|
"ep_adminpads2_search-done": "Ολοκλήρωση αναζήτησης",
|
||||||
|
"ep_adminpads2_unknown-error": "Άγνωστο σφάλμα",
|
||||||
|
"ep_adminpads2_unknown-status": "Άγνωστη κατάσταση"
|
||||||
|
}
|
22
admin/public/ep_admin_pads/en.json
Normal file
22
admin/public/ep_admin_pads/en.json
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{
|
||||||
|
"ep_adminpads2_action": "Action",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Auto-update on pad changes",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Enables or disables automatic updates for the current query.",
|
||||||
|
"ep_adminpads2_confirm": "Do you really want to delete the pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Delete",
|
||||||
|
"ep_adminpads2_last-edited": "Last edited",
|
||||||
|
"ep_adminpads2_loading": "Loading…",
|
||||||
|
"ep_adminpads2_manage-pads": "Manage pads",
|
||||||
|
"ep_adminpads2_no-results": "No results",
|
||||||
|
"ep_adminpads2_pad-user-count": "Pad user count",
|
||||||
|
"ep_adminpads2_padname": "Padname",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Search term",
|
||||||
|
"ep_adminpads2_search-button.value": "Search",
|
||||||
|
"ep_adminpads2_search-done": "Search complete",
|
||||||
|
"ep_adminpads2_search-error-explanation": "The server encountered an error while searching for pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "Failed to get pad list",
|
||||||
|
"ep_adminpads2_search-heading": "Search for pads",
|
||||||
|
"ep_adminpads2_title": "Pad administration",
|
||||||
|
"ep_adminpads2_unknown-error": "Unknown error",
|
||||||
|
"ep_adminpads2_unknown-status": "Unknown status"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/eu.json
Normal file
27
admin/public/ep_admin_pads/eu.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Izendegi"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Ekintza",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatikoki eguneratu pad-aren aldaketak daudenean",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Oraingo kontsultarako eguneratze automatikoak gaitu edo desgaitzen du.",
|
||||||
|
"ep_adminpads2_confirm": "Ziur zaude {{padID}} pad-a ezabatu nahi duzula?",
|
||||||
|
"ep_adminpads2_delete.value": "Ezabatu",
|
||||||
|
"ep_adminpads2_last-edited": "Azkenengoz editatua",
|
||||||
|
"ep_adminpads2_loading": "Kargatzen...",
|
||||||
|
"ep_adminpads2_manage-pads": "Kudeatu pad-ak",
|
||||||
|
"ep_adminpads2_no-results": "Emaitzarik ez",
|
||||||
|
"ep_adminpads2_pad-user-count": "Pad-erabiltzaile kopurua",
|
||||||
|
"ep_adminpads2_padname": "Pad-izena",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Bilaketa testua",
|
||||||
|
"ep_adminpads2_search-button.value": "Bilatu",
|
||||||
|
"ep_adminpads2_search-done": "Bilaketa osatu da",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Zerbitzariak errore bat izan du pad-ak bilatzean:",
|
||||||
|
"ep_adminpads2_search-error-title": "Pad-zerrenda eskuratzeak huts egin du",
|
||||||
|
"ep_adminpads2_search-heading": "Bilatu pad-ak",
|
||||||
|
"ep_adminpads2_title": "Pad-en kudeaketa",
|
||||||
|
"ep_adminpads2_unknown-error": "Errore ezezaguna",
|
||||||
|
"ep_adminpads2_unknown-status": "Egoera ezezaguna"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/ff.json
Normal file
27
admin/public/ep_admin_pads/ff.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Ibrahima Malal Sarr"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Baɗal",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Hesɗitin e jaajol tuma baylagol faɗo",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Hurminat walla daaƴa kesɗitine jaaje wonannde ɗaɓɓitannde wonaande.",
|
||||||
|
"ep_adminpads2_confirm": "Aɗa yiɗi e jaati momtude faɗo {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Momtu",
|
||||||
|
"ep_adminpads2_last-edited": "Taƴtaa sakket",
|
||||||
|
"ep_adminpads2_loading": "Nana loowa…",
|
||||||
|
"ep_adminpads2_manage-pads": "Toppito paɗe",
|
||||||
|
"ep_adminpads2_no-results": "Alaa njaltudi",
|
||||||
|
"ep_adminpads2_pad-user-count": "Limoore huutorɓe faɗo",
|
||||||
|
"ep_adminpads2_padname": "Innde faɗo",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Helmere njiilaw",
|
||||||
|
"ep_adminpads2_search-button.value": "Yiylo",
|
||||||
|
"ep_adminpads2_search-done": "Njiylaw timmii",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Sarworde ndee hawrii e juumre tuma nde yiylotoo faɗo:",
|
||||||
|
"ep_adminpads2_search-error-title": "Horiima heɓde doggol paɗe",
|
||||||
|
"ep_adminpads2_search-heading": "Yiylo paɗe",
|
||||||
|
"ep_adminpads2_title": "Yiylorde paɗe",
|
||||||
|
"ep_adminpads2_unknown-error": "Juumre nde anndaaka",
|
||||||
|
"ep_adminpads2_unknown-status": "Ngonka ka anndaaka"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/fi.json
Normal file
27
admin/public/ep_admin_pads/fi.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Artnay",
|
||||||
|
"Kyykaarme",
|
||||||
|
"MITO",
|
||||||
|
"Maantietäjä",
|
||||||
|
"Yupik"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Toiminto",
|
||||||
|
"ep_adminpads2_delete.value": "Poista",
|
||||||
|
"ep_adminpads2_last-edited": "Viimeksi muokattu",
|
||||||
|
"ep_adminpads2_loading": "Ladataan...",
|
||||||
|
"ep_adminpads2_manage-pads": "Hallitse muistioita",
|
||||||
|
"ep_adminpads2_no-results": "Ei tuloksia",
|
||||||
|
"ep_adminpads2_pad-user-count": "Pad-käyttäjien määrä",
|
||||||
|
"ep_adminpads2_padname": "Muistion nimi",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Haettava teksti",
|
||||||
|
"ep_adminpads2_search-button.value": "Etsi",
|
||||||
|
"ep_adminpads2_search-done": "Haku valmis",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Palvelimessa tapahtui virhe etsiessään muistioita:",
|
||||||
|
"ep_adminpads2_search-error-title": "Pad-luettelon hakeminen epäonnistui",
|
||||||
|
"ep_adminpads2_search-heading": "Etsi sisältöä",
|
||||||
|
"ep_adminpads2_unknown-error": "Tuntematon virhe",
|
||||||
|
"ep_adminpads2_unknown-status": "Tuntematon tila"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/fr.json
Normal file
27
admin/public/ep_admin_pads/fr.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Verdy p"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Action",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Mise à jour automatique en cas de changements du bloc-notes",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Active ou désactive les mises à jour automatiques pour la requête actuelle.",
|
||||||
|
"ep_adminpads2_confirm": "Voulez-vous vraiment supprimer le bloc-notes {{padID}} ?",
|
||||||
|
"ep_adminpads2_delete.value": "Supprimer",
|
||||||
|
"ep_adminpads2_last-edited": "Dernière modification",
|
||||||
|
"ep_adminpads2_loading": "Chargement en cours...",
|
||||||
|
"ep_adminpads2_manage-pads": "Gérer les bloc-notes",
|
||||||
|
"ep_adminpads2_no-results": "Aucun résultat",
|
||||||
|
"ep_adminpads2_pad-user-count": "Nombre d’utilisateurs du bloc-notes",
|
||||||
|
"ep_adminpads2_padname": "Nom du bloc-notes",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Terme de recherche",
|
||||||
|
"ep_adminpads2_search-button.value": "Rechercher",
|
||||||
|
"ep_adminpads2_search-done": "Recherche terminée",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Le serveur a rencontré une erreur en cherchant des blocs-notes :",
|
||||||
|
"ep_adminpads2_search-error-title": "Échec d’obtention de la liste de blocs-notes",
|
||||||
|
"ep_adminpads2_search-heading": "Rechercher des blocs-notes",
|
||||||
|
"ep_adminpads2_title": "Administration du bloc-notes",
|
||||||
|
"ep_adminpads2_unknown-error": "Erreur inconnue",
|
||||||
|
"ep_adminpads2_unknown-status": "État inconnu"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/gl.json
Normal file
27
admin/public/ep_admin_pads/gl.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Ghose"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Accións",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Actualización automática dos cambios",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Activa ou desactiva as actualizacións automáticas para a consulta actual.",
|
||||||
|
"ep_adminpads2_confirm": "Tes a certeza de querer eliminar o pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Eliminar",
|
||||||
|
"ep_adminpads2_last-edited": "Última edición",
|
||||||
|
"ep_adminpads2_loading": "Cargando…",
|
||||||
|
"ep_adminpads2_manage-pads": "Xestionar pads",
|
||||||
|
"ep_adminpads2_no-results": "Sen resultados",
|
||||||
|
"ep_adminpads2_pad-user-count": "Usuarias neste pad",
|
||||||
|
"ep_adminpads2_padname": "Nome do pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Buscar termo",
|
||||||
|
"ep_adminpads2_search-button.value": "Buscar",
|
||||||
|
"ep_adminpads2_search-done": "Busca completa",
|
||||||
|
"ep_adminpads2_search-error-explanation": "O servidor atopou un fallo cando buscaba pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "Non se obtivo a lista de pads",
|
||||||
|
"ep_adminpads2_search-heading": "Buscar pads",
|
||||||
|
"ep_adminpads2_title": "Administración do pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Erro descoñecido",
|
||||||
|
"ep_adminpads2_unknown-status": "Estado descoñecido"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/he.json
Normal file
27
admin/public/ep_admin_pads/he.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"YaronSh"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "פעולה",
|
||||||
|
"ep_adminpads2_autoupdate-label": "לעדכן אוטומטית כשהמחברת נערכת",
|
||||||
|
"ep_adminpads2_autoupdate.title": "הפעלה או השבתה של עדכונים אוטומטיים לשאילתה הנוכחית.",
|
||||||
|
"ep_adminpads2_confirm": "למחוק את המחברת {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "מחיקה",
|
||||||
|
"ep_adminpads2_last-edited": "עריכה אחרונה",
|
||||||
|
"ep_adminpads2_loading": "בטעינה…",
|
||||||
|
"ep_adminpads2_manage-pads": "ניהול מחברות",
|
||||||
|
"ep_adminpads2_no-results": "אין תוצאות",
|
||||||
|
"ep_adminpads2_pad-user-count": "ספירת משתמשים במחברת",
|
||||||
|
"ep_adminpads2_padname": "שם המחברת",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "הביטוי לחיפוש",
|
||||||
|
"ep_adminpads2_search-button.value": "חיפוש",
|
||||||
|
"ep_adminpads2_search-done": "החיפוש הושלם",
|
||||||
|
"ep_adminpads2_search-error-explanation": "השרת נתקל בשגיאה בעת חיפוש מחברות:",
|
||||||
|
"ep_adminpads2_search-error-title": "קבלת רשימת המחברות נכשלה",
|
||||||
|
"ep_adminpads2_search-heading": "חיפוש אחר מחברות",
|
||||||
|
"ep_adminpads2_title": "ניהול מחברות",
|
||||||
|
"ep_adminpads2_unknown-error": "שגיאה בלתי־ידועה",
|
||||||
|
"ep_adminpads2_unknown-status": "מצב לא ידוע"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/hsb.json
Normal file
27
admin/public/ep_admin_pads/hsb.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Michawiki"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Akcija",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Při změnach na zapisniku awtomatisce aktualizować",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Zmóžnja abo znjemóžnja awtomatiske aktualizacije za aktualne wotprašowanje.",
|
||||||
|
"ep_adminpads2_confirm": "Chceće woprawdźe zapisnik {{padID}} zhašeć?",
|
||||||
|
"ep_adminpads2_delete.value": "Zhašeć",
|
||||||
|
"ep_adminpads2_last-edited": "Poslednja změna",
|
||||||
|
"ep_adminpads2_loading": "Začituje so...",
|
||||||
|
"ep_adminpads2_manage-pads": "Zapisniki rjadować",
|
||||||
|
"ep_adminpads2_no-results": "Žane wuslědki.",
|
||||||
|
"ep_adminpads2_pad-user-count": "Ličba wužiwarjow zapisnika",
|
||||||
|
"ep_adminpads2_padname": "Mjeno zapisnika",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Pytanske zapřijeće",
|
||||||
|
"ep_adminpads2_search-button.value": "Pytać",
|
||||||
|
"ep_adminpads2_search-done": "Pytanje dokónčene",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Serwer je na zmylk storčił, mjeztym zo je za zapisnikami pytał:",
|
||||||
|
"ep_adminpads2_search-error-title": "Lisćina zapisnikow njeda so wobstarać",
|
||||||
|
"ep_adminpads2_search-heading": "Za zapisnikami pytać",
|
||||||
|
"ep_adminpads2_title": "Zapisnikowa administracija",
|
||||||
|
"ep_adminpads2_unknown-error": "Njeznaty zmylk",
|
||||||
|
"ep_adminpads2_unknown-status": "Njeznaty status"
|
||||||
|
}
|
25
admin/public/ep_admin_pads/hu.json
Normal file
25
admin/public/ep_admin_pads/hu.json
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": []
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Művelet",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Változáskor jegyzetfüzet önműködő frissítése",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Önműködő frissítése az jelenlegi lekérdezéshez be- vagy kikapcsolása.",
|
||||||
|
"ep_adminpads2_confirm": "Biztosan törölni szeretné a(z) {{padID}} jegyzetfüzetet?",
|
||||||
|
"ep_adminpads2_delete.value": "Törlés",
|
||||||
|
"ep_adminpads2_last-edited": "Utoljára szerkesztve",
|
||||||
|
"ep_adminpads2_loading": "Betöltés folyamatban…",
|
||||||
|
"ep_adminpads2_manage-pads": "Jegyzetfüzetek kezelése",
|
||||||
|
"ep_adminpads2_no-results": "Nincs találat",
|
||||||
|
"ep_adminpads2_pad-user-count": "Jegyzetfüzet felhasználók száma",
|
||||||
|
"ep_adminpads2_padname": "Jegyzetfüzet név",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Keresési kifejezés",
|
||||||
|
"ep_adminpads2_search-button.value": "Keresés",
|
||||||
|
"ep_adminpads2_search-done": "Keresés befejezve",
|
||||||
|
"ep_adminpads2_search-error-explanation": "A kiszolgáló hibát észlelt a jegyzetfüzetek keresésekor:",
|
||||||
|
"ep_adminpads2_search-error-title": "Nem sikerült lekérni a jegyzetfüzet listát",
|
||||||
|
"ep_adminpads2_search-heading": "Jegyzetfüzetek keresése",
|
||||||
|
"ep_adminpads2_title": "Jegyzetfüzet felügyelete",
|
||||||
|
"ep_adminpads2_unknown-error": "Ismeretlen hiba",
|
||||||
|
"ep_adminpads2_unknown-status": "Ismeretlen állapot"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/ia.json
Normal file
27
admin/public/ep_admin_pads/ia.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"McDutchie"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Action",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Actualisar automaticamente le pad in caso de cambiamentos",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Activa o disactiva le actualisationes automatic pro le consulta actual.",
|
||||||
|
"ep_adminpads2_confirm": "Es tu secur de voler deler le pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Deler",
|
||||||
|
"ep_adminpads2_last-edited": "Ultime modification",
|
||||||
|
"ep_adminpads2_loading": "Cargamento in curso…",
|
||||||
|
"ep_adminpads2_manage-pads": "Gerer pads",
|
||||||
|
"ep_adminpads2_no-results": "Nulle resultato",
|
||||||
|
"ep_adminpads2_pad-user-count": "Numero de usatores del pad",
|
||||||
|
"ep_adminpads2_padname": "Nomine del pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Termino de recerca",
|
||||||
|
"ep_adminpads2_search-button.value": "Cercar",
|
||||||
|
"ep_adminpads2_search-done": "Recerca terminate",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Le servitor ha incontrate un error durante le recerca de pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "Non poteva obtener le lista de pads",
|
||||||
|
"ep_adminpads2_search-heading": "Cercar pads",
|
||||||
|
"ep_adminpads2_title": "Administration de pads",
|
||||||
|
"ep_adminpads2_unknown-error": "Error incognite",
|
||||||
|
"ep_adminpads2_unknown-status": "Stato incognite"
|
||||||
|
}
|
16
admin/public/ep_admin_pads/it.json
Normal file
16
admin/public/ep_admin_pads/it.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Beta16",
|
||||||
|
"Luca.favorido"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Azione",
|
||||||
|
"ep_adminpads2_delete.value": "Cancella",
|
||||||
|
"ep_adminpads2_last-edited": "Ultima modifica",
|
||||||
|
"ep_adminpads2_loading": "Caricamento…",
|
||||||
|
"ep_adminpads2_no-results": "Nessun risultato",
|
||||||
|
"ep_adminpads2_search-button.value": "Cerca",
|
||||||
|
"ep_adminpads2_unknown-error": "Errore sconosciuto",
|
||||||
|
"ep_adminpads2_unknown-status": "Stato sconosciuto"
|
||||||
|
}
|
13
admin/public/ep_admin_pads/kn.json
Normal file
13
admin/public/ep_admin_pads/kn.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"ಮಲ್ನಾಡಾಚ್ ಕೊಂಕ್ಣೊ"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "ಕ್ರಿಯೆ",
|
||||||
|
"ep_adminpads2_delete.value": "ಅಳಿಸು",
|
||||||
|
"ep_adminpads2_loading": "ತುಂಬಿಸಲಾಗುತ್ತಿದೆ…",
|
||||||
|
"ep_adminpads2_no-results": "ಯಾವ ಫಲಿತಾಂಶಗಳೂ ಇಲ್ಲ",
|
||||||
|
"ep_adminpads2_search-button.value": "ಹುಡುಕು",
|
||||||
|
"ep_adminpads2_unknown-error": "ಅಪರಿಚಿತ ದೋಷ"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/ko.json
Normal file
28
admin/public/ep_admin_pads/ko.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Ykhwong",
|
||||||
|
"그냥기여자"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "동작",
|
||||||
|
"ep_adminpads2_autoupdate-label": "패드 변경 시 자동 업데이트",
|
||||||
|
"ep_adminpads2_autoupdate.title": "현재 쿼리의 자동 업데이트를 활성화하거나 비활성화합니다.",
|
||||||
|
"ep_adminpads2_confirm": "{{padID}} 패드를 삭제하시겠습니까?",
|
||||||
|
"ep_adminpads2_delete.value": "삭제",
|
||||||
|
"ep_adminpads2_last-edited": "최근 편집",
|
||||||
|
"ep_adminpads2_loading": "불러오는 중...",
|
||||||
|
"ep_adminpads2_manage-pads": "패드 관리",
|
||||||
|
"ep_adminpads2_no-results": "결과 없음",
|
||||||
|
"ep_adminpads2_pad-user-count": "패드 사용자 수",
|
||||||
|
"ep_adminpads2_padname": "패드 이름",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "검색어",
|
||||||
|
"ep_adminpads2_search-button.value": "검색",
|
||||||
|
"ep_adminpads2_search-done": "검색 완료",
|
||||||
|
"ep_adminpads2_search-error-explanation": "패드 검색 중 서버에 오류가 발생했습니다:",
|
||||||
|
"ep_adminpads2_search-error-title": "패드 목록 가져오기 실패",
|
||||||
|
"ep_adminpads2_search-heading": "패드 검색",
|
||||||
|
"ep_adminpads2_title": "패드 관리",
|
||||||
|
"ep_adminpads2_unknown-error": "알 수 없는 오류",
|
||||||
|
"ep_adminpads2_unknown-status": "알 수 없는 상태"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/krc.json
Normal file
27
admin/public/ep_admin_pads/krc.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Къарачайлы"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Этиу",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Блокнот тюрлендириулеринде автомат халда джангыртыу",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Баргъан излем ючюн автомат халда джангыртыуланы джандын неда джукълат.",
|
||||||
|
"ep_adminpads2_confirm": "{{padID}} блокнотну керти да кетерирге излеймисиз?",
|
||||||
|
"ep_adminpads2_delete.value": "Кетер",
|
||||||
|
"ep_adminpads2_last-edited": "Ахыр тюзетиу",
|
||||||
|
"ep_adminpads2_loading": "Джюклениу…",
|
||||||
|
"ep_adminpads2_manage-pads": "Блокнотланы оноуун эт",
|
||||||
|
"ep_adminpads2_no-results": "Эсебле джокъдула",
|
||||||
|
"ep_adminpads2_pad-user-count": "Блокнот хайырланыучуланы саны",
|
||||||
|
"ep_adminpads2_padname": "Блокнот ат",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Терминни изле",
|
||||||
|
"ep_adminpads2_search-button.value": "Изле",
|
||||||
|
"ep_adminpads2_search-done": "Излеу тамамланды",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Сервер, блокнотланы излеген заманда халат табды:",
|
||||||
|
"ep_adminpads2_search-error-title": "Блокнот тизмеси алынамады",
|
||||||
|
"ep_adminpads2_search-heading": "Блокнотла ючюн излеу",
|
||||||
|
"ep_adminpads2_title": "Блокнот башчылыкъ",
|
||||||
|
"ep_adminpads2_unknown-error": "Билинмеген халат",
|
||||||
|
"ep_adminpads2_unknown-status": "Билинмеген турум"
|
||||||
|
}
|
16
admin/public/ep_admin_pads/lb.json
Normal file
16
admin/public/ep_admin_pads/lb.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Robby",
|
||||||
|
"Volvox"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_confirm": "Wëllt Dir de Pad {{padID}} wierklech läschen?",
|
||||||
|
"ep_adminpads2_delete.value": "Läschen",
|
||||||
|
"ep_adminpads2_loading": "Lueden...",
|
||||||
|
"ep_adminpads2_no-results": "Keng Resultater",
|
||||||
|
"ep_adminpads2_padname": "Padnumm",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Sichbegrëff",
|
||||||
|
"ep_adminpads2_search-button.value": "Sichen",
|
||||||
|
"ep_adminpads2_unknown-error": "Onbekannte Feeler"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/lt.json
Normal file
27
admin/public/ep_admin_pads/lt.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Nokeoo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Veiksmas",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatinis bloknoto keitimų naujinimas",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Įjungia arba išjungia automatinius dabartinės užklausos atnaujinimus.",
|
||||||
|
"ep_adminpads2_confirm": "Ar tikrai norite ištrinti bloknotą {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Ištrinti",
|
||||||
|
"ep_adminpads2_last-edited": "Paskutinis pakeitimas",
|
||||||
|
"ep_adminpads2_loading": "Įkeliama…",
|
||||||
|
"ep_adminpads2_manage-pads": "Tvarkyti bloknotą",
|
||||||
|
"ep_adminpads2_no-results": "Nėra rezultatų",
|
||||||
|
"ep_adminpads2_pad-user-count": "Bloknoto naudotojų skaičius",
|
||||||
|
"ep_adminpads2_padname": "Bloknoto pavadinimas",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Paieškos terminas",
|
||||||
|
"ep_adminpads2_search-button.value": "Paieška",
|
||||||
|
"ep_adminpads2_search-done": "Paieška baigta",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Serveris susidūrė su klaida ieškant bloknotų:",
|
||||||
|
"ep_adminpads2_search-error-title": "Nepavyko gauti bloknotų sąrašo",
|
||||||
|
"ep_adminpads2_search-heading": "Ieškokite bloknotų",
|
||||||
|
"ep_adminpads2_title": "Bloknotų administravimas",
|
||||||
|
"ep_adminpads2_unknown-error": "Nežinoma klaida",
|
||||||
|
"ep_adminpads2_unknown-status": "Nežinoma būsena"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/mk.json
Normal file
27
admin/public/ep_admin_pads/mk.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Bjankuloski06"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Дејство",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Самоподнова при измени во тетратката",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Овозможува или оневозможува самоподнова на тековното барање.",
|
||||||
|
"ep_adminpads2_confirm": "Дали навистина сакате да ја избришете тетратката {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Избриши",
|
||||||
|
"ep_adminpads2_last-edited": "Последно уредување",
|
||||||
|
"ep_adminpads2_loading": "Вчитувам…",
|
||||||
|
"ep_adminpads2_manage-pads": "Раководење со тетратки",
|
||||||
|
"ep_adminpads2_no-results": "Нема исход",
|
||||||
|
"ep_adminpads2_pad-user-count": "Корисници на тетратката",
|
||||||
|
"ep_adminpads2_padname": "Назив на тетратката",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Пребаран поим",
|
||||||
|
"ep_adminpads2_search-button.value": "Пребарај",
|
||||||
|
"ep_adminpads2_search-done": "Пребарувањето заврши",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Опслужувачот наиде на грешка при пребарувањето на тетратки:",
|
||||||
|
"ep_adminpads2_search-error-title": "Не можев да го добијам списокот на тетратки",
|
||||||
|
"ep_adminpads2_search-heading": "Пребарај по тетратките",
|
||||||
|
"ep_adminpads2_title": "Администрација на тетратки",
|
||||||
|
"ep_adminpads2_unknown-error": "Непозната грешка",
|
||||||
|
"ep_adminpads2_unknown-status": "Непозната состојба"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/my.json
Normal file
27
admin/public/ep_admin_pads/my.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Andibecker"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "လုပ်ဆောင်ချက်",
|
||||||
|
"ep_adminpads2_autoupdate-label": "pad အပြောင်းအလဲများတွင်အလိုအလျောက်အပ်ဒိတ်လုပ်ပါ",
|
||||||
|
"ep_adminpads2_autoupdate.title": "လက်ရှိမေးမြန်းမှုအတွက်အလိုအလျောက်အပ်ဒိတ်များကိုဖွင့်ပါသို့မဟုတ်ပိတ်ပါ။",
|
||||||
|
"ep_adminpads2_confirm": "pad {{padID}} ကိုသင်တကယ်ဖျက်ချင်လား။",
|
||||||
|
"ep_adminpads2_delete.value": "ဖျက်ပါ",
|
||||||
|
"ep_adminpads2_last-edited": "နောက်ဆုံးတည်းဖြတ်သည်",
|
||||||
|
"ep_adminpads2_loading": "ဖွင့်နေသည်…",
|
||||||
|
"ep_adminpads2_manage-pads": "pads များကိုစီမံပါ",
|
||||||
|
"ep_adminpads2_no-results": "ရလဒ်မရှိပါ",
|
||||||
|
"ep_adminpads2_pad-user-count": "Pad အသုံးပြုသူအရေအတွက်",
|
||||||
|
"ep_adminpads2_padname": "Padname",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "ဝေါဟာရရှာဖွေပါ",
|
||||||
|
"ep_adminpads2_search-button.value": "ရှာဖွေပါ",
|
||||||
|
"ep_adminpads2_search-done": "ရှာဖွေမှုပြီးပါပြီ",
|
||||||
|
"ep_adminpads2_search-error-explanation": "pads များကိုရှာဖွေစဉ်ဆာဗာသည်အမှားတစ်ခုကြုံခဲ့သည်။",
|
||||||
|
"ep_adminpads2_search-error-title": "pad စာရင်းရယူရန်မအောင်မြင်ပါ",
|
||||||
|
"ep_adminpads2_search-heading": "pads များကိုရှာဖွေပါ",
|
||||||
|
"ep_adminpads2_title": "Pad စီမံခန့်ခွဲမှု",
|
||||||
|
"ep_adminpads2_unknown-error": "အမည်မသိအမှား",
|
||||||
|
"ep_adminpads2_unknown-status": "အခြေအနေမသိ"
|
||||||
|
}
|
13
admin/public/ep_admin_pads/nb.json
Normal file
13
admin/public/ep_admin_pads/nb.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"EdoAug"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Handling",
|
||||||
|
"ep_adminpads2_last-edited": "Sist redigert",
|
||||||
|
"ep_adminpads2_loading": "Laster …",
|
||||||
|
"ep_adminpads2_no-results": "Ingen resultater",
|
||||||
|
"ep_adminpads2_search-button.value": "Søk",
|
||||||
|
"ep_adminpads2_search-done": "Søk fullført"
|
||||||
|
}
|
29
admin/public/ep_admin_pads/nl.json
Normal file
29
admin/public/ep_admin_pads/nl.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Aranka",
|
||||||
|
"McDutchie",
|
||||||
|
"Spinster"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Handeling",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatisch bijwerken bij aanpassingen aan de pad",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Schakelt automatische updates voor de huidige query in of uit.",
|
||||||
|
"ep_adminpads2_confirm": "Wil je de pad {{padID}} echt verwijderen?",
|
||||||
|
"ep_adminpads2_delete.value": "Verwijderen",
|
||||||
|
"ep_adminpads2_last-edited": "Laatst bewerkt",
|
||||||
|
"ep_adminpads2_loading": "Bezig met laden...",
|
||||||
|
"ep_adminpads2_manage-pads": "Pads beheren",
|
||||||
|
"ep_adminpads2_no-results": "Geen resultaten",
|
||||||
|
"ep_adminpads2_pad-user-count": "Aantal gebruikers van de pad",
|
||||||
|
"ep_adminpads2_padname": "Naam van de pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Zoekterm",
|
||||||
|
"ep_adminpads2_search-button.value": "Zoeken",
|
||||||
|
"ep_adminpads2_search-done": "Zoekopdracht voltooid",
|
||||||
|
"ep_adminpads2_search-error-explanation": "De server heeft een fout aangetroffen tijdens het zoeken naar pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "Kan lijst met pads niet ophalen",
|
||||||
|
"ep_adminpads2_search-heading": "Pads zoeken",
|
||||||
|
"ep_adminpads2_title": "Administratie van pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Onbekende fout",
|
||||||
|
"ep_adminpads2_unknown-status": "Onbekende status"
|
||||||
|
}
|
21
admin/public/ep_admin_pads/oc.json
Normal file
21
admin/public/ep_admin_pads/oc.json
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Quentí"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Accion",
|
||||||
|
"ep_adminpads2_delete.value": "Suprimir",
|
||||||
|
"ep_adminpads2_last-edited": "Darrièra edicion",
|
||||||
|
"ep_adminpads2_loading": "Cargament…",
|
||||||
|
"ep_adminpads2_manage-pads": "Gerir los pads",
|
||||||
|
"ep_adminpads2_no-results": "Pas cap de resultat",
|
||||||
|
"ep_adminpads2_padname": "Nom del pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Tèrme de recèrca",
|
||||||
|
"ep_adminpads2_search-button.value": "Recercar",
|
||||||
|
"ep_adminpads2_search-done": "Recèrca acabada",
|
||||||
|
"ep_adminpads2_search-heading": "Cercar de pads",
|
||||||
|
"ep_adminpads2_title": "Administracion de pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Error desconeguda",
|
||||||
|
"ep_adminpads2_unknown-status": "Estat desconegut"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/pms.json
Normal file
27
admin/public/ep_admin_pads/pms.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Borichèt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Assion",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Agiornament automàtich an sle modìfiche ëd plancia",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Abilité o disabilité j'agiornament automàtich për l'arcesta atual.",
|
||||||
|
"ep_adminpads2_confirm": "Veul-lo për da bon dëscancelé la plancia {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Dëscancelé",
|
||||||
|
"ep_adminpads2_last-edited": "Modificà l'ùltima vira",
|
||||||
|
"ep_adminpads2_loading": "Cariament…",
|
||||||
|
"ep_adminpads2_manage-pads": "Gestì le plance",
|
||||||
|
"ep_adminpads2_no-results": "Gnun arzultà",
|
||||||
|
"ep_adminpads2_pad-user-count": "Conteur ëd plancia dl'utent",
|
||||||
|
"ep_adminpads2_padname": "Nòm ëd plancia",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Tèrmin d'arserca",
|
||||||
|
"ep_adminpads2_search-button.value": "Arserca",
|
||||||
|
"ep_adminpads2_search-done": "Arserca completà",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Ël servent a l'ha rancontrà n'eror an sërcand dle plance:",
|
||||||
|
"ep_adminpads2_search-error-title": "Falì a oten-e la lista ëd plance",
|
||||||
|
"ep_adminpads2_search-heading": "Arserca ëd plance",
|
||||||
|
"ep_adminpads2_title": "Aministrassion ëd plance",
|
||||||
|
"ep_adminpads2_unknown-error": "Eror nen conossù",
|
||||||
|
"ep_adminpads2_unknown-status": "Statù nen conossù"
|
||||||
|
}
|
30
admin/public/ep_admin_pads/pt-br.json
Normal file
30
admin/public/ep_admin_pads/pt-br.json
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Duke of Wikipädia",
|
||||||
|
"Eduardo Addad de Oliveira",
|
||||||
|
"Eduardoaddad",
|
||||||
|
"YuriNikolai"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Ação",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Atualizar notas automaticamente",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Habilita ou desabilita atualizações automáticas para a consulta atual.",
|
||||||
|
"ep_adminpads2_confirm": "Você realmente deseja excluir a nota {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Excluir",
|
||||||
|
"ep_adminpads2_last-edited": "Última edição",
|
||||||
|
"ep_adminpads2_loading": "Carregando…",
|
||||||
|
"ep_adminpads2_manage-pads": "Gerenciar notas",
|
||||||
|
"ep_adminpads2_no-results": "Sem resultados",
|
||||||
|
"ep_adminpads2_pad-user-count": "Número de utilizadores na nota",
|
||||||
|
"ep_adminpads2_padname": "Nome da nota",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Termo de pesquisa",
|
||||||
|
"ep_adminpads2_search-button.value": "Pesquisar",
|
||||||
|
"ep_adminpads2_search-done": "Busca completa",
|
||||||
|
"ep_adminpads2_search-error-explanation": "O servidor encontrou um erro enquanto procurava por notas:",
|
||||||
|
"ep_adminpads2_search-error-title": "Falha ao buscar lista de notas",
|
||||||
|
"ep_adminpads2_search-heading": "Pesquisar por notas",
|
||||||
|
"ep_adminpads2_title": "Administração de notas",
|
||||||
|
"ep_adminpads2_unknown-error": "Erro desconhecido",
|
||||||
|
"ep_adminpads2_unknown-status": "Status desconhecido"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/pt.json
Normal file
27
admin/public/ep_admin_pads/pt.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Guilha"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Ação",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Atualizar automaticamente as notas",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Ativa ou desativa atualizações automáticas na consulta atual.",
|
||||||
|
"ep_adminpads2_confirm": "Tencionas mesmo eliminar a nota {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Eliminar",
|
||||||
|
"ep_adminpads2_last-edited": "Última edição",
|
||||||
|
"ep_adminpads2_loading": "A carregar...",
|
||||||
|
"ep_adminpads2_manage-pads": "Gerir notas",
|
||||||
|
"ep_adminpads2_no-results": "Sem resultados",
|
||||||
|
"ep_adminpads2_pad-user-count": "Número de utilizadores na nota",
|
||||||
|
"ep_adminpads2_padname": "Nome da nota",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Procurar termo",
|
||||||
|
"ep_adminpads2_search-button.value": "Procurar",
|
||||||
|
"ep_adminpads2_search-done": "Procura completa",
|
||||||
|
"ep_adminpads2_search-error-explanation": "O servidor encontrou um erro enquanto procurava por notas:",
|
||||||
|
"ep_adminpads2_search-error-title": "Falha ao obter lista de notas",
|
||||||
|
"ep_adminpads2_search-heading": "Procurar por notas",
|
||||||
|
"ep_adminpads2_title": "Administração da nota",
|
||||||
|
"ep_adminpads2_unknown-error": "Erro desconhecido",
|
||||||
|
"ep_adminpads2_unknown-status": "Estado desconhecido"
|
||||||
|
}
|
10
admin/public/ep_admin_pads/qqq.json
Normal file
10
admin/public/ep_admin_pads/qqq.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"BryanDavis"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "{{Identical|Action}}",
|
||||||
|
"ep_adminpads2_delete.value": "{{Identical|Delete}}",
|
||||||
|
"ep_adminpads2_search-button.value": "{{Identical|Search}}"
|
||||||
|
}
|
31
admin/public/ep_admin_pads/ru.json
Normal file
31
admin/public/ep_admin_pads/ru.json
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"DDPAT",
|
||||||
|
"Ice bulldog",
|
||||||
|
"Megakott",
|
||||||
|
"Okras",
|
||||||
|
"Pacha Tchernof"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Действие",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Автообновление при изменении документа",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Включает или отключает автоматические обновления для текущего запроса.",
|
||||||
|
"ep_adminpads2_confirm": "Вы действительно хотите удалить документ {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Удалить",
|
||||||
|
"ep_adminpads2_last-edited": "Последнее изменение",
|
||||||
|
"ep_adminpads2_loading": "Загружается…",
|
||||||
|
"ep_adminpads2_manage-pads": "Управление документами",
|
||||||
|
"ep_adminpads2_no-results": "Нет результатов",
|
||||||
|
"ep_adminpads2_pad-user-count": "Количество пользователей документа",
|
||||||
|
"ep_adminpads2_padname": "Название документа",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Искать термин",
|
||||||
|
"ep_adminpads2_search-button.value": "Найти",
|
||||||
|
"ep_adminpads2_search-done": "Поиск завершён",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Сервер обнаружил ошибку при поиске документов:",
|
||||||
|
"ep_adminpads2_search-error-title": "Не удалось получить список документов",
|
||||||
|
"ep_adminpads2_search-heading": "Поиск документов",
|
||||||
|
"ep_adminpads2_title": "Администрирование документов",
|
||||||
|
"ep_adminpads2_unknown-error": "Неизвестная ошибка",
|
||||||
|
"ep_adminpads2_unknown-status": "Неизвестный статус"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/sc.json
Normal file
27
admin/public/ep_admin_pads/sc.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Adr mm"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Atzione",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Atualizatzione automàtica de is modìficas de su pad",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Ativat o disativat is atualizatziones automàticas pro sa chirca atuale.",
|
||||||
|
"ep_adminpads2_confirm": "Seguru chi boles cantzellare su pad {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Cantzella",
|
||||||
|
"ep_adminpads2_last-edited": "Ùrtima modìfica",
|
||||||
|
"ep_adminpads2_loading": "Carrighende...",
|
||||||
|
"ep_adminpads2_manage-pads": "Gesti is pads",
|
||||||
|
"ep_adminpads2_no-results": "Nissunu resurtadu",
|
||||||
|
"ep_adminpads2_pad-user-count": "Nùmeru de utentes de pads",
|
||||||
|
"ep_adminpads2_padname": "Nòmine de su pad",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Tèrmine de chirca",
|
||||||
|
"ep_adminpads2_search-button.value": "Chirca",
|
||||||
|
"ep_adminpads2_search-done": "Chirca cumpleta",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Su serbidore at agatadu un'errore chirchende pads:",
|
||||||
|
"ep_adminpads2_search-error-title": "Impossìbile otènnere sa lista de pads",
|
||||||
|
"ep_adminpads2_search-heading": "Chirca pads",
|
||||||
|
"ep_adminpads2_title": "Amministratzione de su pad",
|
||||||
|
"ep_adminpads2_unknown-error": "Errore disconnotu",
|
||||||
|
"ep_adminpads2_unknown-status": "Istadu disconnotu"
|
||||||
|
}
|
14
admin/public/ep_admin_pads/sdc.json
Normal file
14
admin/public/ep_admin_pads/sdc.json
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"F Samaritani"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Azioni",
|
||||||
|
"ep_adminpads2_delete.value": "Canzella",
|
||||||
|
"ep_adminpads2_loading": "carrigghendi...",
|
||||||
|
"ep_adminpads2_no-results": "Nisciun risulthaddu",
|
||||||
|
"ep_adminpads2_search-button.value": "Zercha",
|
||||||
|
"ep_adminpads2_search-heading": "Zirchà dati",
|
||||||
|
"ep_adminpads2_unknown-error": "Errori ischunisciddu"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/sk.json
Normal file
27
admin/public/ep_admin_pads/sk.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Yardom78"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Akcia",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Automatická aktualizácia zmien na poznámkovom bloku",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Zapne alebo vypne automatickú aktualizáciu.",
|
||||||
|
"ep_adminpads2_confirm": "Skutočne chcete vymazať poznámkový blok {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Vymazať",
|
||||||
|
"ep_adminpads2_last-edited": "Posledná úprava",
|
||||||
|
"ep_adminpads2_loading": "Načítavanie...",
|
||||||
|
"ep_adminpads2_manage-pads": "Spravovať poznámkové bloky",
|
||||||
|
"ep_adminpads2_no-results": "Žiadne výsledky",
|
||||||
|
"ep_adminpads2_pad-user-count": "Počet používateľov poznámkového bloku",
|
||||||
|
"ep_adminpads2_padname": "Názov poznámkového bloku",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Hľadať výraz",
|
||||||
|
"ep_adminpads2_search-button.value": "Hľadať",
|
||||||
|
"ep_adminpads2_search-done": "Hľadanie dokončené",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Pri hľadaní poznámkového bloku došlo k chybe:",
|
||||||
|
"ep_adminpads2_search-error-title": "Nepodarilo sa získať zoznam poznámkových blokov",
|
||||||
|
"ep_adminpads2_search-heading": "Hľadať poznámkový blok",
|
||||||
|
"ep_adminpads2_title": "Správa poznámkového bloku",
|
||||||
|
"ep_adminpads2_unknown-error": "Neznáma chyba",
|
||||||
|
"ep_adminpads2_unknown-status": "Neznámy stav"
|
||||||
|
}
|
20
admin/public/ep_admin_pads/skr-arab.json
Normal file
20
admin/public/ep_admin_pads/skr-arab.json
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Saraiki"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "عمل",
|
||||||
|
"ep_adminpads2_delete.value": "مٹاؤ",
|
||||||
|
"ep_adminpads2_last-edited": "چھیکڑی تبدیلی",
|
||||||
|
"ep_adminpads2_loading": "لوڈ تھین٘دا پئے۔۔۔",
|
||||||
|
"ep_adminpads2_manage-pads": "پیڈ منیج کرو",
|
||||||
|
"ep_adminpads2_no-results": "کوئی نتیجہ کائنی",
|
||||||
|
"ep_adminpads2_padname": "پیڈ ناں",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "ٹرم ڳولو",
|
||||||
|
"ep_adminpads2_search-button.value": "ڳولو",
|
||||||
|
"ep_adminpads2_search-done": "ڳولݨ پورا تھیا",
|
||||||
|
"ep_adminpads2_search-heading": "پیڈاں دی ڳول",
|
||||||
|
"ep_adminpads2_unknown-error": "نامعلوم غلطی",
|
||||||
|
"ep_adminpads2_unknown-status": "نامعلوم حالت"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/sl.json
Normal file
28
admin/public/ep_admin_pads/sl.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Eleassar",
|
||||||
|
"HairyFotr"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Dejanje",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Samodejno posodabljanje ob spremembah blokcev",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Omogoči ali onemogoči samodejne posodobitve za trenutno poizvedbo.",
|
||||||
|
"ep_adminpads2_confirm": "Ali res želite izbrisati blokec {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Izbriši",
|
||||||
|
"ep_adminpads2_last-edited": "Zadnje urejanje",
|
||||||
|
"ep_adminpads2_loading": "Nalaganje ...",
|
||||||
|
"ep_adminpads2_manage-pads": "Upravljanje blokcev",
|
||||||
|
"ep_adminpads2_no-results": "Ni zadetkov",
|
||||||
|
"ep_adminpads2_pad-user-count": "Število urejevalcev blokca",
|
||||||
|
"ep_adminpads2_padname": "Ime blokca",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Iskalni izraz",
|
||||||
|
"ep_adminpads2_search-button.value": "Išči",
|
||||||
|
"ep_adminpads2_search-done": "Iskanje končano",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Strežnik je med iskanjem blokcev naletel na napako:",
|
||||||
|
"ep_adminpads2_search-error-title": "Ni bilo mogoče pridobiti seznama blokcev",
|
||||||
|
"ep_adminpads2_search-heading": "Iskanje blokcev",
|
||||||
|
"ep_adminpads2_title": "Upravljanje blokcev",
|
||||||
|
"ep_adminpads2_unknown-error": "Neznana napaka",
|
||||||
|
"ep_adminpads2_unknown-status": "Neznano stanje"
|
||||||
|
}
|
13
admin/public/ep_admin_pads/smn.json
Normal file
13
admin/public/ep_admin_pads/smn.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Yupik"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_delete.value": "Siho",
|
||||||
|
"ep_adminpads2_last-edited": "Majemustáá nubástittum",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Uuccâmsääni",
|
||||||
|
"ep_adminpads2_search-button.value": "Uusâ",
|
||||||
|
"ep_adminpads2_unknown-error": "Tubdâmettum feilâ",
|
||||||
|
"ep_adminpads2_unknown-status": "Tubdâmettum tile"
|
||||||
|
}
|
16
admin/public/ep_admin_pads/sms.json
Normal file
16
admin/public/ep_admin_pads/sms.json
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Yupik"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_delete.value": "Jaukkâd",
|
||||||
|
"ep_adminpads2_last-edited": "Mââimõssân muttum",
|
||||||
|
"ep_adminpads2_no-results": "Ij käunnʼjam ni mii",
|
||||||
|
"ep_adminpads2_padname": "Mošttʼtõspõʹmmai nõmm",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Ooccâmsääʹnn",
|
||||||
|
"ep_adminpads2_search-button.value": "Ooʒʒ",
|
||||||
|
"ep_adminpads2_search-heading": "Ooʒʒ mošttʼtõspõʹmmjid",
|
||||||
|
"ep_adminpads2_unknown-error": "Toobdteʹmes vââʹǩǩ",
|
||||||
|
"ep_adminpads2_unknown-status": "Toobdteʹmes status"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/sq.json
Normal file
27
admin/public/ep_admin_pads/sq.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Besnik b"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Veprim",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Vetëpërditësohu, kur nga ndryshime blloku",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Aktivizon ose çaktivizon përditësim të automatizuara për kërkesën e tanishme.",
|
||||||
|
"ep_adminpads2_confirm": "Doni vërtet të fshihet blloku {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Fshije",
|
||||||
|
"ep_adminpads2_last-edited": "Përpunuar së fundi më",
|
||||||
|
"ep_adminpads2_loading": "Po ngarkohet…",
|
||||||
|
"ep_adminpads2_manage-pads": "Administroni blloqe",
|
||||||
|
"ep_adminpads2_no-results": "S’ka përfundime",
|
||||||
|
"ep_adminpads2_pad-user-count": "Numër përdoruesish blloku",
|
||||||
|
"ep_adminpads2_padname": "Emër blloku",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Term kërkimi",
|
||||||
|
"ep_adminpads2_search-button.value": "Kërko",
|
||||||
|
"ep_adminpads2_search-done": "Kërkim i plotë",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Shërbyesi hasi një gabim teksa kërkohej për blloqe:",
|
||||||
|
"ep_adminpads2_search-error-title": "S’u arrit të merrej listë blloqesh",
|
||||||
|
"ep_adminpads2_search-heading": "Kërkoni për blloqe",
|
||||||
|
"ep_adminpads2_title": "Administrim blloku",
|
||||||
|
"ep_adminpads2_unknown-error": "Gabim i panjohur",
|
||||||
|
"ep_adminpads2_unknown-status": "Gjendje e panjohur"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/sv.json
Normal file
28
admin/public/ep_admin_pads/sv.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Bengtsson96",
|
||||||
|
"WikiPhoenix"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Åtgärd",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Uppdatera automatiskt när blocket ändras",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Aktivera eller inaktivera automatiska uppdatering för nuvarande förfrågan.",
|
||||||
|
"ep_adminpads2_confirm": "Vill du verkligen radera blocket {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Radera",
|
||||||
|
"ep_adminpads2_last-edited": "Senast redigerad",
|
||||||
|
"ep_adminpads2_loading": "Läser in …",
|
||||||
|
"ep_adminpads2_manage-pads": "Hantera block",
|
||||||
|
"ep_adminpads2_no-results": "Inga resultat",
|
||||||
|
"ep_adminpads2_pad-user-count": "Antal blockanvändare",
|
||||||
|
"ep_adminpads2_padname": "Blocknamn",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Sökord",
|
||||||
|
"ep_adminpads2_search-button.value": "Sök",
|
||||||
|
"ep_adminpads2_search-done": "Sökning slutförd",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Servern stötte på ett fel vid sökning efter block:",
|
||||||
|
"ep_adminpads2_search-error-title": "Misslyckades att hämta blocklista",
|
||||||
|
"ep_adminpads2_search-heading": "Sök efter block",
|
||||||
|
"ep_adminpads2_title": "Blockadministration",
|
||||||
|
"ep_adminpads2_unknown-error": "Okänt fel",
|
||||||
|
"ep_adminpads2_unknown-status": "Okänd status"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/sw.json
Normal file
27
admin/public/ep_admin_pads/sw.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Andibecker"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Hatua",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Sasisha kiotomatiki kwenye mabadiliko ya pedi",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Huwasha au kulemaza sasisho otomatiki kwa hoja ya sasa.",
|
||||||
|
"ep_adminpads2_confirm": "Je! Kweli unataka kufuta pedi {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Futa",
|
||||||
|
"ep_adminpads2_last-edited": "Ilihaririwa mwisho",
|
||||||
|
"ep_adminpads2_loading": "Inapakia...",
|
||||||
|
"ep_adminpads2_manage-pads": "Dhibiti pedi",
|
||||||
|
"ep_adminpads2_no-results": "Hakuna matokeo",
|
||||||
|
"ep_adminpads2_pad-user-count": "Hesabu ya mtumiaji wa pedi",
|
||||||
|
"ep_adminpads2_padname": "Jina la utani",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Neno la utaftaji",
|
||||||
|
"ep_adminpads2_search-button.value": "Tafuta",
|
||||||
|
"ep_adminpads2_search-done": "Utafutaji umekamilika",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Seva ilipata hitilafu wakati wa kutafuta pedi:",
|
||||||
|
"ep_adminpads2_search-error-title": "Imeshindwa kupata orodha ya pedi",
|
||||||
|
"ep_adminpads2_search-heading": "Tafuta pedi",
|
||||||
|
"ep_adminpads2_title": "Usimamizi wa pedi",
|
||||||
|
"ep_adminpads2_unknown-error": "Hitilafu isiyojulikana",
|
||||||
|
"ep_adminpads2_unknown-status": "Hali isiyojulikana"
|
||||||
|
}
|
27
admin/public/ep_admin_pads/th.json
Normal file
27
admin/public/ep_admin_pads/th.json
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Andibecker"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "การกระทำ",
|
||||||
|
"ep_adminpads2_autoupdate-label": "อัปเดตอัตโนมัติเมื่อเปลี่ยนแผ่น",
|
||||||
|
"ep_adminpads2_autoupdate.title": "เปิดหรือปิดการอัปเดตอัตโนมัติสำหรับคิวรีปัจจุบัน",
|
||||||
|
"ep_adminpads2_confirm": "คุณต้องการลบแพด {{padID}} จริงหรือไม่",
|
||||||
|
"ep_adminpads2_delete.value": "ลบ",
|
||||||
|
"ep_adminpads2_last-edited": "แก้ไขล่าสุด",
|
||||||
|
"ep_adminpads2_loading": "กำลังโหลด…",
|
||||||
|
"ep_adminpads2_manage-pads": "จัดการแผ่นรอง",
|
||||||
|
"ep_adminpads2_no-results": "ไม่มีผลลัพธ์",
|
||||||
|
"ep_adminpads2_pad-user-count": "จำนวนผู้ใช้แพด",
|
||||||
|
"ep_adminpads2_padname": "นามแฝง",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "คำที่ต้องการค้นหา",
|
||||||
|
"ep_adminpads2_search-button.value": "ค้นหา",
|
||||||
|
"ep_adminpads2_search-done": "ค้นหาเสร็จสมบูรณ์",
|
||||||
|
"ep_adminpads2_search-error-explanation": "เซิร์ฟเวอร์พบข้อผิดพลาดขณะค้นหาแผ่นอิเล็กโทรด:",
|
||||||
|
"ep_adminpads2_search-error-title": "ไม่สามารถรับรายการแผ่นรอง",
|
||||||
|
"ep_adminpads2_search-heading": "ค้นหาแผ่นรอง",
|
||||||
|
"ep_adminpads2_title": "การบริหารแผ่น",
|
||||||
|
"ep_adminpads2_unknown-error": "ข้อผิดพลาดที่ไม่รู้จัก",
|
||||||
|
"ep_adminpads2_unknown-status": "ไม่ทราบสถานะ"
|
||||||
|
}
|
17
admin/public/ep_admin_pads/tl.json
Normal file
17
admin/public/ep_admin_pads/tl.json
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Mrkczr"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Kilos",
|
||||||
|
"ep_adminpads2_delete.value": "Burahin",
|
||||||
|
"ep_adminpads2_last-edited": "Huling binago",
|
||||||
|
"ep_adminpads2_loading": "Naglo-load...",
|
||||||
|
"ep_adminpads2_no-results": "Walang mga resulta",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Mga katagang hahanapin:",
|
||||||
|
"ep_adminpads2_search-button.value": "Hanapin",
|
||||||
|
"ep_adminpads2_search-done": "Natapos na ang paghahanap",
|
||||||
|
"ep_adminpads2_unknown-error": "Hindi nalalamang kamalian",
|
||||||
|
"ep_adminpads2_unknown-status": "Hindi alam na katayuan"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/tr.json
Normal file
28
admin/public/ep_admin_pads/tr.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"Hedda",
|
||||||
|
"MuratTheTurkish"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Eylem",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Bloknot değişikliklerinde otomatik güncelleme",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Mevcut sorgu için otomatik güncellemeleri etkinleştirir veya devre dışı bırakır.",
|
||||||
|
"ep_adminpads2_confirm": "{{padID}} bloknotunu gerçekten silmek istiyor musunuz?",
|
||||||
|
"ep_adminpads2_delete.value": "Sil",
|
||||||
|
"ep_adminpads2_last-edited": "Son düzenleme",
|
||||||
|
"ep_adminpads2_loading": "Yükleniyor...",
|
||||||
|
"ep_adminpads2_manage-pads": "Bloknotları yönet",
|
||||||
|
"ep_adminpads2_no-results": "Sonuç yok",
|
||||||
|
"ep_adminpads2_pad-user-count": "Bloknot kullanıcı sayısı",
|
||||||
|
"ep_adminpads2_padname": "Bloknot adı",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Terimi ara",
|
||||||
|
"ep_adminpads2_search-button.value": "Ara",
|
||||||
|
"ep_adminpads2_search-done": "Arama tamamlandı",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Sunucu, bloknotları ararken bir hatayla karşılaştı:",
|
||||||
|
"ep_adminpads2_search-error-title": "Bloknot listesi alınamadı",
|
||||||
|
"ep_adminpads2_search-heading": "Bloknotları ara",
|
||||||
|
"ep_adminpads2_title": "Bloknot yönetimi",
|
||||||
|
"ep_adminpads2_unknown-error": "Bilinmeyen hata",
|
||||||
|
"ep_adminpads2_unknown-status": "Bilinmeyen durum"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/uk.json
Normal file
28
admin/public/ep_admin_pads/uk.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"DDPAT",
|
||||||
|
"Ice bulldog"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "Дія",
|
||||||
|
"ep_adminpads2_autoupdate-label": "Автоматичне оновлення при зміні майданчика",
|
||||||
|
"ep_adminpads2_autoupdate.title": "Вмикає або вимикає автоматичне оновлення поточного запиту.",
|
||||||
|
"ep_adminpads2_confirm": "Ви дійсно хочете видалити панель {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "Видалити",
|
||||||
|
"ep_adminpads2_last-edited": "Останнє редагування",
|
||||||
|
"ep_adminpads2_loading": "Завантаження…",
|
||||||
|
"ep_adminpads2_manage-pads": "Управління майданчиками",
|
||||||
|
"ep_adminpads2_no-results": "Немає результатів",
|
||||||
|
"ep_adminpads2_pad-user-count": "Кількість майданчиків користувача",
|
||||||
|
"ep_adminpads2_padname": "Назва майданчика",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "Пошуковий термін",
|
||||||
|
"ep_adminpads2_search-button.value": "Пошук",
|
||||||
|
"ep_adminpads2_search-done": "Пошук завершено",
|
||||||
|
"ep_adminpads2_search-error-explanation": "Під час пошуку педів сервер виявив помилку:",
|
||||||
|
"ep_adminpads2_search-error-title": "Не вдалося отримати список панелей",
|
||||||
|
"ep_adminpads2_search-heading": "Пошук майданчиків",
|
||||||
|
"ep_adminpads2_title": "Введення майданчиків",
|
||||||
|
"ep_adminpads2_unknown-error": "Невідома помилка",
|
||||||
|
"ep_adminpads2_unknown-status": "Невідомий статус"
|
||||||
|
}
|
29
admin/public/ep_admin_pads/zh-hans.json
Normal file
29
admin/public/ep_admin_pads/zh-hans.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"GuoPC",
|
||||||
|
"Lakejason0",
|
||||||
|
"沈澄心"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "操作",
|
||||||
|
"ep_adminpads2_autoupdate-label": "在记事本更改时自动更新",
|
||||||
|
"ep_adminpads2_autoupdate.title": "启用或禁用目前查询的自动更新",
|
||||||
|
"ep_adminpads2_confirm": "您确定要删除记事本 {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "删除",
|
||||||
|
"ep_adminpads2_last-edited": "上次编辑于",
|
||||||
|
"ep_adminpads2_loading": "正在加载…",
|
||||||
|
"ep_adminpads2_manage-pads": "管理记事本",
|
||||||
|
"ep_adminpads2_no-results": "没有结果",
|
||||||
|
"ep_adminpads2_pad-user-count": "记事本用户数",
|
||||||
|
"ep_adminpads2_padname": "记事本名称",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "搜索关键词",
|
||||||
|
"ep_adminpads2_search-button.value": "搜索",
|
||||||
|
"ep_adminpads2_search-done": "搜索完成",
|
||||||
|
"ep_adminpads2_search-error-explanation": "搜索记事本时服务器发生错误:",
|
||||||
|
"ep_adminpads2_search-error-title": "获取记事本列表失败",
|
||||||
|
"ep_adminpads2_search-heading": "搜索记事本",
|
||||||
|
"ep_adminpads2_title": "记事本管理",
|
||||||
|
"ep_adminpads2_unknown-error": "未知错误",
|
||||||
|
"ep_adminpads2_unknown-status": "未知状态"
|
||||||
|
}
|
28
admin/public/ep_admin_pads/zh-hant.json
Normal file
28
admin/public/ep_admin_pads/zh-hant.json
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"@metadata": {
|
||||||
|
"authors": [
|
||||||
|
"HellojoeAoPS",
|
||||||
|
"Kly"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"ep_adminpads2_action": "操作",
|
||||||
|
"ep_adminpads2_autoupdate-label": "在記事本更改時自動更新",
|
||||||
|
"ep_adminpads2_autoupdate.title": "啟用或停用目前查詢的自動更新。",
|
||||||
|
"ep_adminpads2_confirm": "您確定要刪除記事本 {{padID}}?",
|
||||||
|
"ep_adminpads2_delete.value": "刪除",
|
||||||
|
"ep_adminpads2_last-edited": "上一次編輯",
|
||||||
|
"ep_adminpads2_loading": "載入中…",
|
||||||
|
"ep_adminpads2_manage-pads": "管理記事本",
|
||||||
|
"ep_adminpads2_no-results": "沒有結果",
|
||||||
|
"ep_adminpads2_pad-user-count": "記事本使用者數",
|
||||||
|
"ep_adminpads2_padname": "記事本名稱",
|
||||||
|
"ep_adminpads2_search-box.placeholder": "搜尋關鍵字",
|
||||||
|
"ep_adminpads2_search-button.value": "搜尋",
|
||||||
|
"ep_adminpads2_search-done": "搜尋完成",
|
||||||
|
"ep_adminpads2_search-error-explanation": "當搜尋記事本時伺服器發生錯誤:",
|
||||||
|
"ep_adminpads2_search-error-title": "取得記事本清單失敗",
|
||||||
|
"ep_adminpads2_search-heading": "搜尋記事本",
|
||||||
|
"ep_adminpads2_title": "記事本管理",
|
||||||
|
"ep_adminpads2_unknown-error": "不明錯誤",
|
||||||
|
"ep_adminpads2_unknown-status": "不明狀態"
|
||||||
|
}
|
|
@ -6,7 +6,7 @@ import {NavLink, Outlet} from "react-router-dom";
|
||||||
import {useStore} from "./store/store.ts";
|
import {useStore} from "./store/store.ts";
|
||||||
import {LoadingScreen} from "./utils/LoadingScreen.tsx";
|
import {LoadingScreen} from "./utils/LoadingScreen.tsx";
|
||||||
import {ToastDialog} from "./utils/Toast.tsx";
|
import {ToastDialog} from "./utils/Toast.tsx";
|
||||||
import {useTranslation} from "react-i18next";
|
import {Trans, useTranslation} from "react-i18next";
|
||||||
|
|
||||||
|
|
||||||
export const App = ()=> {
|
export const App = ()=> {
|
||||||
|
@ -78,9 +78,10 @@ export const App = ()=> {
|
||||||
<div className="menu">
|
<div className="menu">
|
||||||
<h1>Etherpad</h1>
|
<h1>Etherpad</h1>
|
||||||
<ul>
|
<ul>
|
||||||
<li><NavLink to="/plugins">Home</NavLink></li>
|
<li><NavLink to="/plugins"><Trans i18nKey="admin_plugins"/></NavLink></li>
|
||||||
<li><NavLink to={"/settings"}>Einstellungen</NavLink></li>
|
<li><NavLink to={"/settings"}><Trans i18nKey="admin_settings"/></NavLink></li>
|
||||||
<li> <NavLink to={"/help"}>Hilfe</NavLink></li>
|
<li> <NavLink to={"/help"}><Trans i18nKey="admin_plugins_info"/></NavLink></li>
|
||||||
|
<li><NavLink to={"/pads"}><Trans i18nKey="ep_admin_pads:ep_adminpads2_manage-pads"/></NavLink></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div className="innerwrapper">
|
<div className="innerwrapper">
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg>
|
|
Before Width: | Height: | Size: 4 KiB |
|
@ -457,3 +457,9 @@ pre {
|
||||||
.ToastAction {
|
.ToastAction {
|
||||||
grid-area: action;
|
grid-area: action;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.help-block {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
gap: 20px
|
||||||
|
}
|
||||||
|
|
|
@ -7,11 +7,22 @@ import { BackendModule } from 'i18next';
|
||||||
|
|
||||||
const LazyImportPlugin: BackendModule = {
|
const LazyImportPlugin: BackendModule = {
|
||||||
type: 'backend',
|
type: 'backend',
|
||||||
init: function (services, backendOptions, i18nextOptions) {
|
init: function () {
|
||||||
},
|
},
|
||||||
read: async function (language, namespace, callback) {
|
read: async function (language, namespace, callback) {
|
||||||
console.log(import.meta.env.BASE_URL+`/locales/${language}.json`)
|
|
||||||
const localeJSON = await fetch(import.meta.env.BASE_URL+`/locales/${language}.json`)
|
let baseURL = import.meta.env.BASE_URL
|
||||||
|
if(namespace === "translation") {
|
||||||
|
// If default we load the translation file
|
||||||
|
baseURL+=`/locales/${language}.json`
|
||||||
|
} else {
|
||||||
|
// Else we load the former plugin translation file
|
||||||
|
baseURL+=`/${namespace}/${language}.json`
|
||||||
|
}
|
||||||
|
|
||||||
|
const localeJSON = await fetch(baseURL, {
|
||||||
|
cache: "force-cache"
|
||||||
|
})
|
||||||
let json;
|
let json;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -38,11 +49,9 @@ i18n
|
||||||
.use(initReactI18next)
|
.use(initReactI18next)
|
||||||
.init(
|
.init(
|
||||||
{
|
{
|
||||||
backend:{
|
ns: ['translation','ep_admin_pads'],
|
||||||
loadPath: import.meta.env.BASE_URL+'/locales/{{lng}}-{{ns}}.json'
|
|
||||||
},
|
|
||||||
fallbackLng: 'en'
|
fallbackLng: 'en'
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
export default i18n
|
export default i18n
|
||||||
|
|
|
@ -10,6 +10,7 @@ import {HelpPage} from "./pages/HelpPage.tsx";
|
||||||
import * as Toast from '@radix-ui/react-toast'
|
import * as Toast from '@radix-ui/react-toast'
|
||||||
import {I18nextProvider} from "react-i18next";
|
import {I18nextProvider} from "react-i18next";
|
||||||
import i18n from "./localization/i18n.ts";
|
import i18n from "./localization/i18n.ts";
|
||||||
|
import {PadPage} from "./pages/PadPage.tsx";
|
||||||
|
|
||||||
const router = createBrowserRouter(createRoutesFromElements(
|
const router = createBrowserRouter(createRoutesFromElements(
|
||||||
<><Route element={<App/>}>
|
<><Route element={<App/>}>
|
||||||
|
@ -17,6 +18,7 @@ const router = createBrowserRouter(createRoutesFromElements(
|
||||||
<Route path="/plugins" element={<HomePage/>}/>
|
<Route path="/plugins" element={<HomePage/>}/>
|
||||||
<Route path="/settings" element={<SettingsPage/>}/>
|
<Route path="/settings" element={<SettingsPage/>}/>
|
||||||
<Route path="/help" element={<HelpPage/>}/>
|
<Route path="/help" element={<HelpPage/>}/>
|
||||||
|
<Route path="/pads" element={<PadPage/>}/>
|
||||||
</Route><Route path="/login">
|
</Route><Route path="/login">
|
||||||
<Route index element={<LoginScreen/>}/>
|
<Route index element={<LoginScreen/>}/>
|
||||||
</Route></>
|
</Route></>
|
||||||
|
|
|
@ -1,5 +1,71 @@
|
||||||
|
import {Trans} from "react-i18next";
|
||||||
|
import {useStore} from "../store/store.ts";
|
||||||
|
import {useEffect, useState} from "react";
|
||||||
|
import {HelpObj} from "./Plugin.ts";
|
||||||
|
|
||||||
export const HelpPage = () => {
|
export const HelpPage = () => {
|
||||||
|
const settingsSocket = useStore(state=>state.settingsSocket)
|
||||||
|
const [helpData, setHelpData] = useState<HelpObj>();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(!settingsSocket) return;
|
||||||
|
settingsSocket?.on('reply:help', (data) => {
|
||||||
|
console.log(data)
|
||||||
|
setHelpData(data)
|
||||||
|
});
|
||||||
|
|
||||||
|
settingsSocket?.emit('help');
|
||||||
|
}, [settingsSocket]);
|
||||||
|
|
||||||
|
const renderHooks = (hooks:Record<string, Record<string, string>>) => {
|
||||||
|
return Object.keys(hooks).map((hookName, i) => {
|
||||||
|
return <div key={i}>
|
||||||
|
<h3>{hookName}</h3>
|
||||||
|
<ul>
|
||||||
|
{Object.keys(hooks[hookName]).map((hook, i) => <li>{hook}
|
||||||
|
<ul key={i}>
|
||||||
|
{Object.keys(hooks[hookName][hook]).map((subHook, i) => <li key={i}>{subHook}</li>)}
|
||||||
|
</ul>
|
||||||
|
</li>)}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!helpData) return <div></div>
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<h1>Help Page</h1>
|
<h1><Trans i18nKey="admin_plugins_info.version"/></h1>
|
||||||
|
<div className="help-block">
|
||||||
|
<div><Trans i18nKey="admin_plugins_info.version_number"/></div>
|
||||||
|
<div>{helpData?.epVersion}</div>
|
||||||
|
<div><Trans i18nKey="admin_plugins_info.version_latest"/></div>
|
||||||
|
<div>{helpData.latestVersion}</div>
|
||||||
|
<div>Git sha</div>
|
||||||
|
<div>{helpData.gitCommit}</div>
|
||||||
|
</div>
|
||||||
|
<h2><Trans i18nKey="admin_plugins.installed"/></h2>
|
||||||
|
<ul>
|
||||||
|
{helpData.installedPlugins.map((plugin, i) => <li key={i}>{plugin}</li>)}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><Trans i18nKey="admin_plugins_info.parts"/></h2>
|
||||||
|
<ul>
|
||||||
|
{helpData.installedParts.map((part, i) => <li key={i}>{part}</li>)}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2><Trans i18nKey="admin_plugins_info.hooks"/></h2>
|
||||||
|
{
|
||||||
|
renderHooks(helpData.installedServerHooks)
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<Trans i18nKey="admin_plugins_info.hooks_client"/>
|
||||||
|
{
|
||||||
|
renderHooks(helpData.installedClientHooks)
|
||||||
|
}
|
||||||
|
</h2>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ import {useStore} from "../store/store.ts";
|
||||||
import {useEffect, useState} from "react";
|
import {useEffect, useState} from "react";
|
||||||
import {InstalledPlugin, PluginDef, SearchParams} from "./Plugin.ts";
|
import {InstalledPlugin, PluginDef, SearchParams} from "./Plugin.ts";
|
||||||
import {useDebounce} from "../utils/useDebounce.ts";
|
import {useDebounce} from "../utils/useDebounce.ts";
|
||||||
|
import {Trans} from "react-i18next";
|
||||||
|
|
||||||
|
|
||||||
export const HomePage = () => {
|
export const HomePage = () => {
|
||||||
|
@ -100,15 +101,15 @@ export const HomePage = () => {
|
||||||
}, 500, [searchTerm])
|
}, 500, [searchTerm])
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<h1>Home Page</h1>
|
<h1><Trans i18nKey="admin_plugins"/></h1>
|
||||||
|
|
||||||
<h2>Installierte Plugins</h2>
|
<h2><Trans i18nKey="admin_plugins.installed"/></h2>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th><Trans i18nKey="admin_plugins.name"/></th>
|
||||||
<th>Version</th>
|
<th><Trans i18nKey="admin_plugins.version"/></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -119,7 +120,7 @@ export const HomePage = () => {
|
||||||
<td>{plugin.version}</td>
|
<td>{plugin.version}</td>
|
||||||
<td onClick={() => {
|
<td onClick={() => {
|
||||||
}}>
|
}}>
|
||||||
<button disabled={plugin.name == "ep_etherpad-lite"} onClick={() => uninstallPlugin(plugin.name)}>Entfernen</button>
|
<button disabled={plugin.name == "ep_etherpad-lite"} onClick={() => uninstallPlugin(plugin.name)}><Trans i18nKey="admin_plugins.installed_uninstall.value"/></button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
})}
|
})}
|
||||||
|
@ -127,7 +128,7 @@ export const HomePage = () => {
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<h2>Verfügbare Plugins</h2>
|
<h2><Trans i18nKey="admin_plugins.available"/></h2>
|
||||||
|
|
||||||
<input type="text" value={searchTerm} onChange={v=>{
|
<input type="text" value={searchTerm} onChange={v=>{
|
||||||
setSearchTerm(v.target.value)
|
setSearchTerm(v.target.value)
|
||||||
|
@ -136,22 +137,22 @@ export const HomePage = () => {
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Name</th>
|
<th><Trans i18nKey="admin_plugins.name"/></th>
|
||||||
<th style={{width: '30%'}}>Description</th>
|
<th style={{width: '30%'}}><Trans i18nKey="admin_plugins.description"/></th>
|
||||||
<th>Version</th>
|
<th><Trans i18nKey="admin_plugins.version"/></th>
|
||||||
<th>Last updated</th>
|
<th><Trans i18nKey="admin_plugins.last-update"/></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody style={{overflow: 'auto'}}>
|
<tbody style={{overflow: 'auto'}}>
|
||||||
{plugins.map((plugin, index) => {
|
{plugins.map((plugin) => {
|
||||||
return <tr key={index}>
|
return <tr key={plugin.name}>
|
||||||
<td><a href={`https://npmjs.com/${plugin.name}`} target="_blank">{plugin.name}</a></td>
|
<td><a href={`https://npmjs.com/${plugin.name}`} target="_blank">{plugin.name}</a></td>
|
||||||
<td>{plugin.description}</td>
|
<td>{plugin.description}</td>
|
||||||
<td>{plugin.version}</td>
|
<td>{plugin.version}</td>
|
||||||
<td>{plugin.time}</td>
|
<td>{plugin.time}</td>
|
||||||
<td>
|
<td>
|
||||||
<button onClick={() => installPlugin(plugin.name)}>Installieren</button>
|
<button onClick={() => installPlugin(plugin.name)}><Trans i18nKey="admin_plugins.available_install.value"/></button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
})}
|
})}
|
||||||
|
|
140
admin/src/pages/PadPage.tsx
Normal file
140
admin/src/pages/PadPage.tsx
Normal file
|
@ -0,0 +1,140 @@
|
||||||
|
import {Trans} from "react-i18next";
|
||||||
|
import {useEffect, useMemo, useState} from "react";
|
||||||
|
import {useStore} from "../store/store.ts";
|
||||||
|
import {PadSearchQuery, PadSearchResult} from "../utils/PadSearch.ts";
|
||||||
|
import {useDebounce} from "../utils/useDebounce.ts";
|
||||||
|
import {determineSorting} from "../utils/sorting.ts";
|
||||||
|
|
||||||
|
export const PadPage = ()=>{
|
||||||
|
const settingsSocket = useStore(state=>state.settingsSocket)
|
||||||
|
const [searchParams, setSearchParams] = useState<PadSearchQuery>({
|
||||||
|
offset: 0,
|
||||||
|
limit: 12,
|
||||||
|
pattern: '',
|
||||||
|
sortBy: 'padName',
|
||||||
|
ascending: true
|
||||||
|
})
|
||||||
|
|
||||||
|
const [searchTerm, setSearchTerm] = useState<string>('')
|
||||||
|
const pads = useStore(state=>state.pads)
|
||||||
|
const pages = useMemo(()=>{
|
||||||
|
if(!pads){
|
||||||
|
return [0]
|
||||||
|
}
|
||||||
|
|
||||||
|
const totalPages = Math.ceil(pads!.total / searchParams.limit)
|
||||||
|
return Array.from({length: totalPages}, (_, i) => i+1)
|
||||||
|
},[pads])
|
||||||
|
|
||||||
|
useDebounce(()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
pattern: searchTerm
|
||||||
|
})
|
||||||
|
|
||||||
|
}, 500, [searchTerm])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(!settingsSocket){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsSocket.emit('padLoad', searchParams)
|
||||||
|
|
||||||
|
}, [settingsSocket, searchParams]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if(!settingsSocket){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
settingsSocket.on('results:padLoad', (data: PadSearchResult)=>{
|
||||||
|
useStore.getState().setPads(data);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
settingsSocket.on('results:deletePad', (padID: string)=>{
|
||||||
|
const newPads = useStore.getState().pads?.results?.filter((pad)=>{
|
||||||
|
return pad.padName !== padID
|
||||||
|
})
|
||||||
|
useStore.getState().setPads({
|
||||||
|
total: useStore.getState().pads!.total-1,
|
||||||
|
results: newPads
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}, [settingsSocket, pads]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return <div>
|
||||||
|
<h1><Trans i18nKey="ep_admin_pads:ep_adminpads2_manage-pads"/></h1>
|
||||||
|
<input type="text" value={searchTerm} onChange={v=>setSearchTerm(v.target.value)} placeholder="Pads suchen"/>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'padName')} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
sortBy: 'padName',
|
||||||
|
ascending: !searchParams.ascending
|
||||||
|
})
|
||||||
|
}}>PadId</th>
|
||||||
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'lastEdited')} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
sortBy: 'lastEdited',
|
||||||
|
ascending: !searchParams.ascending
|
||||||
|
})
|
||||||
|
}}>Users</th>
|
||||||
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'userCount')} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
sortBy: 'userCount',
|
||||||
|
ascending: !searchParams.ascending
|
||||||
|
})
|
||||||
|
}}>Last Edited</th>
|
||||||
|
<th className={determineSorting(searchParams.sortBy, searchParams.ascending, 'revisionNumber')} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
sortBy: 'revisionNumber',
|
||||||
|
ascending: !searchParams.ascending
|
||||||
|
})
|
||||||
|
}}>Revision number</th>
|
||||||
|
<th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{
|
||||||
|
pads?.results?.map((pad)=>{
|
||||||
|
return <tr key={pad.padName}>
|
||||||
|
<td style={{textAlign: 'center'}}>{pad.padName}</td>
|
||||||
|
<td style={{textAlign: 'center'}}>{pad.userCount}</td>
|
||||||
|
<td style={{textAlign: 'center'}}>{new Date(pad.lastEdited).toLocaleString()}</td>
|
||||||
|
<td style={{textAlign: 'center'}}>{pad.revisionNumber}</td>
|
||||||
|
<td>
|
||||||
|
<div className="settings-button-bar">
|
||||||
|
<button onClick={()=>{
|
||||||
|
settingsSocket?.emit('deletePad', pad.padName)
|
||||||
|
}}>delete</button>
|
||||||
|
<button onClick={()=>{
|
||||||
|
window.open(`/p/${pad.padName}`, '_blank')
|
||||||
|
}}>view</button>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div className="settings-button-bar">
|
||||||
|
{pages.map((page)=>{
|
||||||
|
return <button key={page} onClick={()=>{
|
||||||
|
setSearchParams({
|
||||||
|
...searchParams,
|
||||||
|
offset: (page-1)*searchParams.limit
|
||||||
|
})
|
||||||
|
}}>{page}</button>
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
|
@ -22,4 +22,15 @@ export type SearchParams = {
|
||||||
limit: number,
|
limit: number,
|
||||||
sortBy: 'name'|'version',
|
sortBy: 'name'|'version',
|
||||||
sortDir: 'asc'|'desc'
|
sortDir: 'asc'|'desc'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type HelpObj = {
|
||||||
|
epVersion: string
|
||||||
|
gitCommit: string
|
||||||
|
installedClientHooks: Record<string, Record<string, string>>,
|
||||||
|
installedParts: string[],
|
||||||
|
installedPlugins: string[],
|
||||||
|
installedServerHooks: Record<string, never>,
|
||||||
|
latestVersion: string
|
||||||
|
}
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
import {useStore} from "../store/store.ts";
|
import {useStore} from "../store/store.ts";
|
||||||
import {isJSONClean} from "../utils/utils.ts";
|
import {isJSONClean} from "../utils/utils.ts";
|
||||||
|
import {Trans} from "react-i18next";
|
||||||
|
|
||||||
export const SettingsPage = ()=>{
|
export const SettingsPage = ()=>{
|
||||||
const settingsSocket = useStore(state=>state.settingsSocket)
|
const settingsSocket = useStore(state=>state.settingsSocket)
|
||||||
|
|
||||||
const settings = useStore(state=>state.settings)
|
const settings = useStore(state=>state.settings)
|
||||||
|
|
||||||
return <div>
|
return <div>
|
||||||
<h1>Derzeitige Konfiguration</h1>
|
<h1><Trans i18nKey="admin_settings.current"/></h1>
|
||||||
<textarea value={settings} className="settings" onChange={v=>{
|
<textarea value={settings} className="settings" onChange={v => {
|
||||||
useStore.getState().setSettings(v.target.value)
|
useStore.getState().setSettings(v.target.value)
|
||||||
}}/>
|
}}/>
|
||||||
<div className="settings-button-bar">
|
<div className="settings-button-bar">
|
||||||
<button className="settingsButton" onClick={()=>{
|
<button className="settingsButton" onClick={() => {
|
||||||
if (isJSONClean(settings!)) {
|
if (isJSONClean(settings!)) {
|
||||||
// JSON is clean so emit it to the server
|
// JSON is clean so emit it to the server
|
||||||
settingsSocket!.emit('saveSettings', settings!);
|
settingsSocket!.emit('saveSettings', settings!);
|
||||||
|
@ -21,17 +23,23 @@ export const SettingsPage = ()=>{
|
||||||
success: true
|
success: true
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
console.log('Invalid JSON');
|
|
||||||
useStore.getState().setToastState({
|
useStore.getState().setToastState({
|
||||||
open: true,
|
open: true,
|
||||||
title: "Error saving settings",
|
title: "Error saving settings",
|
||||||
success: false
|
success: false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}}>Einstellungen speichern</button>
|
}}><Trans i18nKey="admin_settings.current_save.value"/></button>
|
||||||
<button className="settingsButton" onClick={()=>{
|
<button className="settingsButton" onClick={() => {
|
||||||
settingsSocket!.emit('restartServer');
|
settingsSocket!.emit('restartServer');
|
||||||
}}>Etherpad neustarten</button>
|
}}><Trans i18nKey="admin_settings.current_restart.value"/></button>
|
||||||
|
</div>
|
||||||
|
<div className="separator"/>
|
||||||
|
<div className="settings-button-bar">
|
||||||
|
<a href="https://github.com/ether/etherpad-lite/wiki/Example-Production-Settings.JSON"><Trans
|
||||||
|
i18nKey="admin_settings.current_example-prod"/></a>
|
||||||
|
<a href="https://github.com/ether/etherpad-lite/wiki/Example-Development-Settings.JSON"><Trans
|
||||||
|
i18nKey="admin_settings.current_example-devel"/></a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import {create} from "zustand";
|
import {create} from "zustand";
|
||||||
import {Socket} from "socket.io-client";
|
import {Socket} from "socket.io-client";
|
||||||
|
import {PadSearchResult, PadType} from "../utils/PadSearch.ts";
|
||||||
|
|
||||||
type ToastState = {
|
type ToastState = {
|
||||||
description?:string,
|
description?:string,
|
||||||
|
@ -19,7 +20,9 @@ type StoreState = {
|
||||||
setPluginsSocket: (socket: Socket) => void
|
setPluginsSocket: (socket: Socket) => void
|
||||||
pluginsSocket: Socket|undefined,
|
pluginsSocket: Socket|undefined,
|
||||||
toastState: ToastState,
|
toastState: ToastState,
|
||||||
setToastState: (val: ToastState)=>void
|
setToastState: (val: ToastState)=>void,
|
||||||
|
pads: PadSearchResult|undefined,
|
||||||
|
setPads: (pads: PadSearchResult)=>void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,5 +41,7 @@ export const useStore = create<StoreState>()((set) => ({
|
||||||
title: '',
|
title: '',
|
||||||
description:'',
|
description:'',
|
||||||
success: false
|
success: false
|
||||||
}
|
},
|
||||||
|
pads: undefined,
|
||||||
|
setPads: (pads)=>set({pads})
|
||||||
}));
|
}));
|
||||||
|
|
20
admin/src/utils/PadSearch.ts
Normal file
20
admin/src/utils/PadSearch.ts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
export type PadSearchQuery = {
|
||||||
|
pattern: string;
|
||||||
|
offset: number;
|
||||||
|
limit: number;
|
||||||
|
ascending: boolean;
|
||||||
|
sortBy: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type PadSearchResult = {
|
||||||
|
total: number;
|
||||||
|
results?: PadType[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export type PadType = {
|
||||||
|
padName: string;
|
||||||
|
lastEdited: number;
|
||||||
|
userCount: number;
|
||||||
|
revisionNumber: number;
|
||||||
|
}
|
|
@ -6,31 +6,16 @@
|
||||||
<rect id="path-4" x="41" y="110" width="142" height="25" rx="12.5" fill="#0f775b">
|
<rect id="path-4" x="41" y="110" width="142" height="25" rx="12.5" fill="#0f775b">
|
||||||
<animate attributeName="width" from="0" to="142" dur="3s" fill="freeze"/>
|
<animate attributeName="width" from="0" to="142" dur="3s" fill="freeze"/>
|
||||||
</rect>
|
</rect>
|
||||||
<filter x="-11.3%" y="-32.0%" width="122.5%" height="228.0%" filterUnits="objectBoundingBox" id="filter-5" fill="#0f775b">
|
|
||||||
<feOffset dx="0" dy="8" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
|
||||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
|
||||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0568181818 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
|
||||||
</filter>
|
|
||||||
|
|
||||||
<!-- middle line -->
|
<!-- middle line -->
|
||||||
<rect id="path-2" x="42" y="167" width="168" height="27" rx="13.5" fill="#0f775b">
|
<rect id="path-2" x="42" y="167" width="168" height="27" rx="13.5" fill="#0f775b">
|
||||||
<animate attributeName="width" from="0" to="168" dur="5s" fill="freeze"/>
|
<animate attributeName="width" from="0" to="168" dur="5s" fill="freeze"/>
|
||||||
</rect>
|
</rect>
|
||||||
<filter x="-9.5%" y="-29.6%" width="119.0%" height="218.5%" filterUnits="objectBoundingBox" id="filter-3" fill="#0f775b">
|
|
||||||
<feOffset dx="0" dy="8" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
|
||||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
|
||||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0568181818 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
|
||||||
</filter>
|
|
||||||
|
|
||||||
<!-- bottom line -->
|
<!-- bottom line -->
|
||||||
<rect id="path-6" x="41" y="226" width="105" height="25" rx="12.5" fill="#0f775b">
|
<rect id="path-6" x="41" y="226" width="105" height="25" rx="12.5" fill="#0f775b">
|
||||||
<animate attributeName="width" from="0" to="105" dur="2s" fill="freeze"/>
|
<animate attributeName="width" from="0" to="105" dur="2s" fill="freeze"/>
|
||||||
</rect>
|
</rect>
|
||||||
<filter x="-15.2%" y="-32.0%" width="130.5%" height="228.0%" filterUnits="objectBoundingBox" id="filter-7" fill="#0f775b">
|
|
||||||
<feOffset dx="0" dy="8" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
|
|
||||||
<feGaussianBlur stdDeviation="4" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
|
|
||||||
<feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0568181818 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
|
|
||||||
</filter>
|
|
||||||
</defs>
|
</defs>
|
||||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" >
|
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" >
|
||||||
<g id="Group-5-Copy-2" transform="translate(-415.000000, -351.000000)">
|
<g id="Group-5-Copy-2" transform="translate(-415.000000, -351.000000)">
|
||||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 3.8 KiB |
6
admin/src/utils/sorting.ts
Normal file
6
admin/src/utils/sorting.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
export const determineSorting = (sortBy: string, ascending: boolean, currentSymbol: string) => {
|
||||||
|
if (sortBy === currentSymbol) {
|
||||||
|
return ascending ? 'sort up' : 'sort down';
|
||||||
|
}
|
||||||
|
return 'sort none';
|
||||||
|
}
|
|
@ -20,6 +20,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {MapArrayType} from "../types/MapType";
|
import {MapArrayType} from "../types/MapType";
|
||||||
|
import {PadType} from "../types/PadType";
|
||||||
|
|
||||||
const CustomError = require('../utils/customError');
|
const CustomError = require('../utils/customError');
|
||||||
const Pad = require('../db/Pad');
|
const Pad = require('../db/Pad');
|
||||||
|
@ -105,7 +106,7 @@ const padList = new class {
|
||||||
* @param {string} [authorId] - Optional author ID of the user that initiated the pad creation (if
|
* @param {string} [authorId] - Optional author ID of the user that initiated the pad creation (if
|
||||||
* applicable).
|
* applicable).
|
||||||
*/
|
*/
|
||||||
exports.getPad = async (id: string, text: string|null, authorId:string = '') => {
|
exports.getPad = async (id: string, text?: string|null, authorId:string|null = ''):Promise<PadType> => {
|
||||||
// check if this is a valid padId
|
// check if this is a valid padId
|
||||||
if (!exports.isValidPadId(id)) {
|
if (!exports.isValidPadId(id)) {
|
||||||
throw new CustomError(`${id} is not a valid padId`, 'apierror');
|
throw new CustomError(`${id} is not a valid padId`, 'apierror');
|
||||||
|
@ -148,6 +149,9 @@ exports.listAllPads = async () => {
|
||||||
return {padIDs};
|
return {padIDs};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// checks if a pad exists
|
// checks if a pad exists
|
||||||
exports.doesPadExist = async (padId: string) => {
|
exports.doesPadExist = async (padId: string) => {
|
||||||
const value = await db.get(`pad:${padId}`);
|
const value = await db.get(`pad:${padId}`);
|
||||||
|
|
|
@ -1,10 +1,17 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
|
||||||
|
import {PadQueryResult, PadSearchQuery} from "../../types/PadSearchQuery";
|
||||||
|
import {PadType} from "../../types/PadType";
|
||||||
|
|
||||||
const eejs = require('../../eejs');
|
const eejs = require('../../eejs');
|
||||||
const fsp = require('fs').promises;
|
const fsp = require('fs').promises;
|
||||||
const hooks = require('../../../static/js/pluginfw/hooks');
|
const hooks = require('../../../static/js/pluginfw/hooks');
|
||||||
const plugins = require('../../../static/js/pluginfw/plugins');
|
const plugins = require('../../../static/js/pluginfw/plugins');
|
||||||
const settings = require('../../utils/Settings');
|
const settings = require('../../utils/Settings');
|
||||||
|
const UpdateCheck = require('../../utils/UpdateCheck');
|
||||||
|
const padManager = require('../../db/PadManager');
|
||||||
|
const api = require('../../db/API');
|
||||||
|
|
||||||
exports.expressCreateServer = (hookName:string, {app}:any) => {
|
exports.expressCreateServer = (hookName:string, {app}:any) => {
|
||||||
app.get('/admin/settings', (req:any, res:any) => {
|
app.get('/admin/settings', (req:any, res:any) => {
|
||||||
|
@ -16,14 +23,15 @@ exports.expressCreateServer = (hookName:string, {app}:any) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const queryPadLimit = 12;
|
||||||
|
|
||||||
|
|
||||||
exports.socketio = (hookName:string, {io}:any) => {
|
exports.socketio = (hookName:string, {io}:any) => {
|
||||||
io.of('/settings').on('connection', (socket: any ) => {
|
io.of('/settings').on('connection', (socket: any ) => {
|
||||||
console.log('Admin connected to /admin/settings')
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const {session: {user: {is_admin: isAdmin} = {}} = {}} = socket.conn.request;
|
const {session: {user: {is_admin: isAdmin} = {}} = {}} = socket.conn.request;
|
||||||
console.log('isAdmin', isAdmin)
|
|
||||||
if (!isAdmin) return;
|
if (!isAdmin) return;
|
||||||
console.log('Admin authenticated')
|
|
||||||
|
|
||||||
socket.on('load', async (query:string):Promise<any> => {
|
socket.on('load', async (query:string):Promise<any> => {
|
||||||
let data;
|
let data;
|
||||||
|
@ -46,6 +54,155 @@ exports.socketio = (hookName:string, {io}:any) => {
|
||||||
socket.emit('saveprogress', 'saved');
|
socket.emit('saveprogress', 'saved');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
socket.on('help', ()=> {
|
||||||
|
const gitCommit = settings.getGitCommit();
|
||||||
|
const epVersion = settings.getEpVersion();
|
||||||
|
|
||||||
|
const hooks:Map<string, Map<string,string>> = plugins.getHooks('hooks', false);
|
||||||
|
const clientHooks:Map<string, Map<string,string>> = plugins.getHooks('client_hooks', false);
|
||||||
|
|
||||||
|
function mapToObject(map: Map<string,any>) {
|
||||||
|
let obj = Object.create(null);
|
||||||
|
for (let [k,v] of map) {
|
||||||
|
if(v instanceof Map) {
|
||||||
|
obj[k] = mapToObject(v);
|
||||||
|
} else {
|
||||||
|
obj[k] = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.emit('reply:help', {
|
||||||
|
gitCommit,
|
||||||
|
epVersion,
|
||||||
|
installedPlugins: plugins.getPlugins(),
|
||||||
|
installedParts: plugins.getParts(),
|
||||||
|
installedServerHooks: mapToObject(hooks),
|
||||||
|
installedClientHooks: mapToObject(clientHooks),
|
||||||
|
latestVersion: UpdateCheck.getLatestVersion(),
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
socket.on('padLoad', async (query: PadSearchQuery) => {
|
||||||
|
const {padIDs} = await padManager.listAllPads();
|
||||||
|
|
||||||
|
const data:{
|
||||||
|
total: number,
|
||||||
|
results?: PadQueryResult[]
|
||||||
|
} = {
|
||||||
|
total: padIDs.length,
|
||||||
|
};
|
||||||
|
let result: string[] = padIDs;
|
||||||
|
let maxResult;
|
||||||
|
|
||||||
|
// Filter out matches
|
||||||
|
if (query.pattern) {
|
||||||
|
result = result.filter((padName: string) => padName.includes(query.pattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
data.total = result.length;
|
||||||
|
|
||||||
|
maxResult = result.length - 1;
|
||||||
|
if (maxResult < 0) {
|
||||||
|
maxResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.offset && query.offset < 0) {
|
||||||
|
query.offset = 0;
|
||||||
|
} else if (query.offset > maxResult) {
|
||||||
|
query.offset = maxResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.limit && query.limit < 0) {
|
||||||
|
query.limit = 0;
|
||||||
|
} else if (query.limit > queryPadLimit) {
|
||||||
|
query.limit = queryPadLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.sortBy === 'padName') {
|
||||||
|
result = result.sort((a,b)=>{
|
||||||
|
if(a < b) return query.ascending ? -1 : 1;
|
||||||
|
if(a > b) return query.ascending ? 1 : -1;
|
||||||
|
return 0;
|
||||||
|
}).slice(query.offset, query.offset + query.limit);
|
||||||
|
|
||||||
|
data.results = await Promise.all(result.map(async (padName: string) => {
|
||||||
|
const pad = await padManager.getPad(padName);
|
||||||
|
const revisionNumber = pad.getHeadRevisionNumber()
|
||||||
|
const userCount = api.padUsersCount(padName).padUsersCount;
|
||||||
|
const lastEdited = await pad.getLastEdit();
|
||||||
|
|
||||||
|
return {
|
||||||
|
padName,
|
||||||
|
lastEdited,
|
||||||
|
userCount,
|
||||||
|
revisionNumber
|
||||||
|
}}));
|
||||||
|
} else {
|
||||||
|
const currentWinners: PadQueryResult[] = []
|
||||||
|
let queryOffsetCounter = 0
|
||||||
|
for (let res of result) {
|
||||||
|
|
||||||
|
const pad = await padManager.getPad(res);
|
||||||
|
const padType = {
|
||||||
|
padName: res,
|
||||||
|
lastEdited: await pad.getLastEdit(),
|
||||||
|
userCount: api.padUsersCount(res).padUsersCount,
|
||||||
|
revisionNumber: pad.getHeadRevisionNumber()
|
||||||
|
};
|
||||||
|
|
||||||
|
if (currentWinners.length < query.limit) {
|
||||||
|
if(queryOffsetCounter < query.offset){
|
||||||
|
queryOffsetCounter++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
currentWinners.push({
|
||||||
|
padName: res,
|
||||||
|
lastEdited: await pad.getLastEdit(),
|
||||||
|
userCount: api.padUsersCount(res).padUsersCount,
|
||||||
|
revisionNumber: pad.getHeadRevisionNumber()
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// Kick out worst pad and replace by current pad
|
||||||
|
let worstPad = currentWinners.sort((a, b) => {
|
||||||
|
if (a[query.sortBy] < b[query.sortBy]) return query.ascending ? -1 : 1;
|
||||||
|
if (a[query.sortBy] > b[query.sortBy]) return query.ascending ? 1 : -1;
|
||||||
|
return 0;
|
||||||
|
})
|
||||||
|
if(worstPad[0]&&worstPad[0][query.sortBy] < padType[query.sortBy]){
|
||||||
|
if(queryOffsetCounter < query.offset){
|
||||||
|
queryOffsetCounter++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
currentWinners.splice(currentWinners.indexOf(worstPad[0]), 1)
|
||||||
|
currentWinners.push({
|
||||||
|
padName: res,
|
||||||
|
lastEdited: await pad.getLastEdit(),
|
||||||
|
userCount: api.padUsersCount(res).padUsersCount,
|
||||||
|
revisionNumber: pad.getHeadRevisionNumber()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data.results = currentWinners;
|
||||||
|
}
|
||||||
|
|
||||||
|
socket.emit('results:padLoad', data);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
socket.on('deletePad', async (padId: string) => {
|
||||||
|
const padExists = await padManager.doesPadExists(padId);
|
||||||
|
if (padExists) {
|
||||||
|
const pad = await padManager.getPad(padId);
|
||||||
|
await pad.remove();
|
||||||
|
socket.emit('results:deletePad', padId);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
socket.on('restartServer', async () => {
|
socket.on('restartServer', async () => {
|
||||||
console.log('Admin request to restart server through a socket on /admin/settings');
|
console.log('Admin request to restart server through a socket on /admin/settings');
|
||||||
settings.reloadSettings();
|
settings.reloadSettings();
|
||||||
|
@ -55,3 +212,10 @@ exports.socketio = (hookName:string, {io}:any) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const searchPad = async (query:PadSearchQuery) => {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
15
src/node/types/PadSearchQuery.ts
Normal file
15
src/node/types/PadSearchQuery.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
export type PadSearchQuery = {
|
||||||
|
pattern: string;
|
||||||
|
offset: number;
|
||||||
|
limit: number;
|
||||||
|
ascending: boolean;
|
||||||
|
sortBy: "padName" | "lastEdited" | "userCount" | "revisionNumber";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export type PadQueryResult = {
|
||||||
|
padName: string,
|
||||||
|
lastEdited: string,
|
||||||
|
userCount: number,
|
||||||
|
revisionNumber: number
|
||||||
|
}
|
|
@ -42,7 +42,7 @@ exports.getLatestVersion = () => {
|
||||||
return infos?.latestVersion;
|
return infos?.latestVersion;
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.needsUpdate = async (cb: Function) => {
|
exports.needsUpdate = async (cb?: Function) => {
|
||||||
await loadEtherpadInformations()
|
await loadEtherpadInformations()
|
||||||
.then((info:Infos) => {
|
.then((info:Infos) => {
|
||||||
if (semver.gt(info.latestVersion, settings.getEpVersion())) {
|
if (semver.gt(info.latestVersion, settings.getEpVersion())) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ const tsort = require('./tsort');
|
||||||
const pluginUtils = require('./shared');
|
const pluginUtils = require('./shared');
|
||||||
const defs = require('./plugin_defs');
|
const defs = require('./plugin_defs');
|
||||||
const {manager} = require('./installer');
|
const {manager} = require('./installer');
|
||||||
const settings = require("../../../node/utils/Settings");
|
const settings = require('../../../node/utils/Settings');
|
||||||
|
|
||||||
const logger = log4js.getLogger('plugins');
|
const logger = log4js.getLogger('plugins');
|
||||||
|
|
||||||
|
@ -28,10 +28,13 @@ exports.prefix = 'ep_';
|
||||||
|
|
||||||
exports.formatPlugins = () => Object.keys(defs.plugins).join(', ');
|
exports.formatPlugins = () => Object.keys(defs.plugins).join(', ');
|
||||||
|
|
||||||
|
exports.getPlugins = () => Object.keys(defs.plugins);
|
||||||
|
|
||||||
exports.formatParts = () => defs.parts.map((part) => part.full_name).join('\n');
|
exports.formatParts = () => defs.parts.map((part) => part.full_name).join('\n');
|
||||||
|
|
||||||
exports.formatHooks = (hookSetName, html) => {
|
exports.getParts = () => defs.parts.map((part) => part.full_name);
|
||||||
let hooks = new Map();
|
|
||||||
|
const sortHooks = (hookSetName, hooks) => {
|
||||||
for (const [pluginName, def] of Object.entries(defs.plugins)) {
|
for (const [pluginName, def] of Object.entries(defs.plugins)) {
|
||||||
for (const part of def.parts) {
|
for (const part of def.parts) {
|
||||||
for (const [hookName, hookFnName] of Object.entries(part[hookSetName] || {})) {
|
for (const [hookName, hookFnName] of Object.entries(part[hookSetName] || {})) {
|
||||||
|
@ -49,6 +52,18 @@ exports.formatHooks = (hookSetName, html) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
exports.getHooks = (hookSetName) => {
|
||||||
|
const hooks = new Map();
|
||||||
|
sortHooks(hookSetName, hooks);
|
||||||
|
return hooks;
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.formatHooks = (hookSetName, html) => {
|
||||||
|
let hooks = new Map();
|
||||||
|
sortHooks(hookSetName, hooks);
|
||||||
const lines = [];
|
const lines = [];
|
||||||
const sortStringKeys = (a, b) => String(a[0]).localeCompare(b[0]);
|
const sortStringKeys = (a, b) => String(a[0]).localeCompare(b[0]);
|
||||||
if (html) lines.push('<dl>');
|
if (html) lines.push('<dl>');
|
||||||
|
@ -107,8 +122,8 @@ exports.update = async () => {
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.getPackages = async () => {
|
exports.getPackages = async () => {
|
||||||
let plugins = manager.list()
|
const plugins = manager.list();
|
||||||
let newDependencies = {}
|
const newDependencies = {};
|
||||||
|
|
||||||
for (const plugin of plugins) {
|
for (const plugin of plugins) {
|
||||||
if (!plugin.name.startsWith(exports.prefix)) {
|
if (!plugin.name.startsWith(exports.prefix)) {
|
||||||
|
@ -116,7 +131,7 @@ exports.getPackages = async () => {
|
||||||
}
|
}
|
||||||
plugin.realPath = await fs.realpath(plugin.location);
|
plugin.realPath = await fs.realpath(plugin.location);
|
||||||
plugin.path = plugin.realPath;
|
plugin.path = plugin.realPath;
|
||||||
newDependencies[plugin.name] = plugin
|
newDependencies[plugin.name] = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
newDependencies['ep_etherpad-lite'] = {
|
newDependencies['ep_etherpad-lite'] = {
|
||||||
|
@ -124,7 +139,7 @@ exports.getPackages = async () => {
|
||||||
version: settings.getEpVersion(),
|
version: settings.getEpVersion(),
|
||||||
path: path.join(settings.root, 'node_modules/ep_etherpad-lite'),
|
path: path.join(settings.root, 'node_modules/ep_etherpad-lite'),
|
||||||
realPath: path.join(settings.root, 'src'),
|
realPath: path.join(settings.root, 'src'),
|
||||||
}
|
};
|
||||||
|
|
||||||
return newDependencies;
|
return newDependencies;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue