0, това ще се счита за главен код, който може да приема идентичността на всеки от другите потребители чрез параметъра _uid",
diff --git a/public/language/bg/error.json b/public/language/bg/error.json
index adbbe80085..28e0fb2cbb 100644
--- a/public/language/bg/error.json
+++ b/public/language/bg/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Потребителското име е твърде дълго",
"password-too-long": "Паролата е твърде дълга",
"reset-rate-limited": "Твърде много подновявания на паролата (има ограничение на честотата)",
+ "reset-same-password": "Моля, използвайте парола, която е различна от текущата",
"user-banned": "Потребителят е блокиран",
"user-banned-reason": "За съжаление, този акаунт е блокиран (Причина: %1)",
"user-banned-reason-until": "За съжаление, този акаунт е блокиран до %1 (Причина: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Не можете да блокирате другите администратори!",
"cant-remove-last-admin": "Вие сте единственият администратор. Добавете друг потребител като администратор, преди да премахнете себе си като администратор",
"cant-delete-admin": "Премахнете администраторските права от този акаунт, преди да го изтриете.",
+ "already-deleting": "Вече е в процес на изтриване",
"invalid-image": "Грешно изображение",
"invalid-image-type": "Грешен тип на изображение. Позволените типове са: %1",
"invalid-image-extension": "Грешно разширение на изображението",
@@ -144,6 +146,7 @@
"user-already-flagged": "Вече сте докладвали този потребител",
"post-flagged-too-many-times": "Тази публикация вече е докладвана от други хора",
"user-flagged-too-many-times": "Този потребител вече е докладван от други хора",
+ "cant-flag-privileged": "Не можете да докладвате профилите или съдържанието от потребители с по-високи правомощия (модератори, глобални модератори, администратори)",
"self-vote": "Не можете да гласувате за собствената си публикация",
"too-many-downvotes-today": "Можете да гласувате отрицателно не повече от %1 пъти на ден",
"too-many-downvotes-today-user": "Можете да гласувате отрицателно за потребител не повече от %1 пъти на ден",
diff --git a/public/language/bg/flags.json b/public/language/bg/flags.json
index d8d404f2a2..c1ea9d7a52 100644
--- a/public/language/bg/flags.json
+++ b/public/language/bg/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Групови действия",
"bulk-resolve": "Разрешаване на доклад(и)",
- "bulk-success": "%1 доклада са обновени"
+ "bulk-success": "%1 доклада са обновени",
+ "flagged-timeago-readable": "Докладвано (%2)"
}
\ No newline at end of file
diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json
index f975415a91..86d2b8c7e8 100644
--- a/public/language/bg/notifications.json
+++ b/public/language/bg/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "Профилът на %1 е изнесен, щракнете за сваляне",
"posts-exported": "Публикациите на %1 са изнесени, щракнете за сваляне",
"uploads-exported": "Качванията на %1 са изнесени, щракнете за сваляне",
+ "users-csv-exported": "Потребителите са изнесени във формат „csv“, щракнете за сваляне",
"email-confirmed": "Е-пощата беше потвърдена",
"email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.",
"email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Когато получите съобщение в разговор",
"notificationType_new-group-chat": "Когато получите съобщение в групов разговор",
"notificationType_group-invite": "Когато получите покана за група",
+ "notificationType_group-leave": "Когато потребител напусне групата Ви",
"notificationType_group-request-membership": "Когато някой поиска да се включи в група, на която Вие сте собственик",
"notificationType_new-register": "Когато някой бъде добавен в опашката за регистрация",
"notificationType_post-queue": "Когато бъде добавена нова публикация в опашката",
diff --git a/public/language/bg/topic.json b/public/language/bg/topic.json
index ae33515955..8cf7bafbc7 100644
--- a/public/language/bg/topic.json
+++ b/public/language/bg/topic.json
@@ -29,6 +29,7 @@
"tools": "Инструменти",
"locked": "Заключена",
"pinned": "Закачена",
+ "pinned-with-expiry": "Закачена до %1",
"moved": "Преместена",
"moved-from": "Преместена от %1",
"copy-ip": "Копиране на IP адреса",
diff --git a/public/language/bn/admin/manage/categories.json b/public/language/bn/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/bn/admin/manage/categories.json
+++ b/public/language/bn/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/bn/admin/manage/privileges.json b/public/language/bn/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/bn/admin/manage/privileges.json
+++ b/public/language/bn/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/bn/admin/manage/tags.json b/public/language/bn/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/bn/admin/manage/tags.json
+++ b/public/language/bn/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/bn/admin/manage/users.json b/public/language/bn/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/bn/admin/manage/users.json
+++ b/public/language/bn/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/bn/error.json b/public/language/bn/error.json
index 870e3ea1df..83845a0b94 100644
--- a/public/language/bn/error.json
+++ b/public/language/bn/error.json
@@ -40,6 +40,7 @@
"username-too-long": "ইউজারনেম বড় হয়ে গিয়েছে",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "ব্যবহারকারী নিষিদ্ধ",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/bn/flags.json b/public/language/bn/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/bn/flags.json
+++ b/public/language/bn/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/bn/notifications.json b/public/language/bn/notifications.json
index 6c99b29edd..661d4909d2 100644
--- a/public/language/bn/notifications.json
+++ b/public/language/bn/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",
"email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।",
"email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json
index f896cdbd24..2b83a71e0a 100644
--- a/public/language/bn/topic.json
+++ b/public/language/bn/topic.json
@@ -29,6 +29,7 @@
"tools": "টুলস",
"locked": "বন্ধ",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/cs/admin/manage/categories.json b/public/language/cs/admin/manage/categories.json
index 298c74df8a..d0425cd087 100644
--- a/public/language/cs/admin/manage/categories.json
+++ b/public/language/cs/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# posledních odpovědí",
"ext-link": "Externí odkaz",
"is-section": "Zacházet s kategorii jako se sekcí",
+ "post-queue": "Post queue",
"tag-whitelist": "Seznam povolených značek",
"upload-image": "Nahrát obrázek",
"delete-image": "Vyjmout",
diff --git a/public/language/cs/admin/manage/privileges.json b/public/language/cs/admin/manage/privileges.json
index 16f257ae6c..5e3a34dc4b 100644
--- a/public/language/cs/admin/manage/privileges.json
+++ b/public/language/cs/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Oprávnění skupiny",
"user-privileges": "Oprávnění uživatele",
"edit-privileges": "Upravit oprávnění",
+ "select-clear-all": "Select/Clear All",
"chat": "Konverzace",
"upload-images": "Nahrát obrázky",
"upload-files": "Náhrát soubory",
diff --git a/public/language/cs/admin/manage/tags.json b/public/language/cs/admin/manage/tags.json
index 58ca0a5582..17275c38bd 100644
--- a/public/language/cs/admin/manage/tags.json
+++ b/public/language/cs/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Upravení značky(ek)",
"alerts.confirm-delete": "Chcete odstranit vybranou značku?",
- "alerts.update-success": "Značka aktualizována."
+ "alerts.update-success": "Značka aktualizována.",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/cs/admin/manage/users.json b/public/language/cs/admin/manage/users.json
index 49a2ca54c2..5e5b25e621 100644
--- a/public/language/cs/admin/manage/users.json
+++ b/public/language/cs/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "E-maily:",
"alerts.email-sent-to": "E-mail s pozvánkou byl odeslán na %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/cs/error.json b/public/language/cs/error.json
index 54ac427e51..b5b2070bd7 100644
--- a/public/language/cs/error.json
+++ b/public/language/cs/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Uživatelské jméno je moc dlouhé",
"password-too-long": "Heslo je moc dlouhé",
"reset-rate-limited": "Moc požadavků na reset hesla (omezený počet)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Uživatel byl zablokován",
"user-banned-reason": "Omlouváme se, ale tento účet byl zablokován (důvod: %1)",
"user-banned-reason-until": "Omlouváme se, ale tento účet je zablokován do %1 (důvod: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nemůžete zablokovat jiné správce.",
"cant-remove-last-admin": "Jste jediným správcem. Před vlastním odebráním oprávnění správce nejdříve přidejte jiného uživatele jako správce",
"cant-delete-admin": "Před odstraněním účtu mu nejprve odeberte oprávnění správce.",
+ "already-deleting": "Already deleting",
"invalid-image": "Neplatný obrázek",
"invalid-image-type": "Neplatný typ obrázku. Povolené typy jsou: %1",
"invalid-image-extension": "Neplatná přípona obrázku",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "U svého vlastního příspěvku nemůžete hlasovat",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/cs/flags.json b/public/language/cs/flags.json
index 4228803ec0..625038d070 100644
--- a/public/language/cs/flags.json
+++ b/public/language/cs/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/cs/notifications.json b/public/language/cs/notifications.json
index 6fe457883d..35c65485c5 100644
--- a/public/language/cs/notifications.json
+++ b/public/language/cs/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mail potvrzen",
"email-confirmed-message": "Děkujeme za ověření vaší e-mailové adresy. Váš účet je nyní aktivní.",
"email-confirm-error-message": "Nastal problém s ověřením vaší e-mailové adresy. Kód je pravděpodobně neplatný nebo jeho platnost vypršela.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Obdržíte-li novou konverzační zprávu",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Obdržíte-li pozvání ke skupině",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Pokud někdo požaduje připojení se do vaší skupiny",
"notificationType_new-register": "Bude-li někdo přidán do registrační fronty",
"notificationType_post-queue": "Bude-li přidán nový příspěvek do fronty",
diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json
index 4a51e68865..7e2dea8dad 100644
--- a/public/language/cs/topic.json
+++ b/public/language/cs/topic.json
@@ -29,6 +29,7 @@
"tools": "Nástroje",
"locked": "Uzamknuto",
"pinned": "Připnuto",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Přesunuto",
"moved-from": "Moved from %1",
"copy-ip": "Kopírovat IP",
diff --git a/public/language/da/admin/manage/categories.json b/public/language/da/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/da/admin/manage/categories.json
+++ b/public/language/da/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/da/admin/manage/privileges.json b/public/language/da/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/da/admin/manage/privileges.json
+++ b/public/language/da/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/da/admin/manage/tags.json b/public/language/da/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/da/admin/manage/tags.json
+++ b/public/language/da/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/da/admin/manage/users.json b/public/language/da/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/da/admin/manage/users.json
+++ b/public/language/da/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/da/error.json b/public/language/da/error.json
index b343475b1b..feeb595ce8 100644
--- a/public/language/da/error.json
+++ b/public/language/da/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Brugernavn er for langt",
"password-too-long": "Kodeord er for langt",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Bruger er bortvist",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Du kan ikke udlukke andre administatrorer!",
"cant-remove-last-admin": "Du er den eneste administrator. Tilføj en anden bruger som administrator før du fjerner dig selv som administrator",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid billed type. De tilladte typer er: %1",
"invalid-image-extension": "Forkert billede filnavnsendelse",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/da/flags.json b/public/language/da/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/da/flags.json
+++ b/public/language/da/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/da/notifications.json b/public/language/da/notifications.json
index daa04bcf68..4c6ad68139 100644
--- a/public/language/da/notifications.json
+++ b/public/language/da/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email bekræftet",
"email-confirmed-message": "Tak fordi du validerede din email. Din konto er nu fuldt ud aktiveret.",
"email-confirm-error-message": "Der var et problem med valideringen af din emailadresse. Bekræftelses koden var muligvis forkert eller udløbet.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/da/topic.json b/public/language/da/topic.json
index 94c5dacfb0..746ee0321e 100644
--- a/public/language/da/topic.json
+++ b/public/language/da/topic.json
@@ -29,6 +29,7 @@
"tools": "Værktøjer",
"locked": "Låst",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Flyttet",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/de/admin/manage/categories.json b/public/language/de/admin/manage/categories.json
index 6c63acb776..e450fdbd10 100644
--- a/public/language/de/admin/manage/categories.json
+++ b/public/language/de/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "Anzahl neuer Antworten",
"ext-link": "Externer Link",
"is-section": "Behandle diese Kategorie als Abschnitt",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Bild hochladen",
"delete-image": "Entfernen",
diff --git a/public/language/de/admin/manage/privileges.json b/public/language/de/admin/manage/privileges.json
index 010833b7c2..767631b11b 100644
--- a/public/language/de/admin/manage/privileges.json
+++ b/public/language/de/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Bilder hochladen",
"upload-files": "Dateien hochladen",
diff --git a/public/language/de/admin/manage/tags.json b/public/language/de/admin/manage/tags.json
index bd278a78f4..e75bdd6d74 100644
--- a/public/language/de/admin/manage/tags.json
+++ b/public/language/de/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Wollen Sie die ausgewählten Tags löschen?",
- "alerts.update-success": "Tag aktualisiert!"
+ "alerts.update-success": "Tag aktualisiert!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/de/admin/manage/users.json b/public/language/de/admin/manage/users.json
index c4e0cc50e0..9971a96729 100644
--- a/public/language/de/admin/manage/users.json
+++ b/public/language/de/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "E-Mails:",
"alerts.email-sent-to": "Eine Einladungsemail wurde an %1 gesendet",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/de/error.json b/public/language/de/error.json
index a04522f273..8ec4fb70a3 100644
--- a/public/language/de/error.json
+++ b/public/language/de/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Benutzername ist zu lang",
"password-too-long": "Passwort ist zu lang",
"reset-rate-limited": "Zu viele Anfragen zum Zurücksetzen des Passworts (Rate begrenzt)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Benutzer ist gesperrt",
"user-banned-reason": "Entschuldige, dieses Konto wurde gesperrt (Grund: %1)",
"user-banned-reason-until": "Entschuldigung, dieses Konto wurde bis %1 (Reason: %2) gesperrt.",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Du kannst andere Administratoren nicht sperren!",
"cant-remove-last-admin": "Du bist der einzige Administrator. Füge zuerst einen anderen Administrator hinzu, bevor du dich selbst als Administrator entfernst",
"cant-delete-admin": "Bevor du versuchst dieses Konto zu löschen, entferne die zugehörigen Administratorrechte.",
+ "already-deleting": "Already deleting",
"invalid-image": "Ungültiges Bild",
"invalid-image-type": "Falsche Bildart. Erlaubte Arten sind: %1",
"invalid-image-extension": "Ungültige Dateinamenerweiterung",
@@ -144,6 +146,7 @@
"user-already-flagged": "Du hast diesen Benutzer bereits gemeldet",
"post-flagged-too-many-times": "Dieser Beitrag wurde bereits von anderen Benutzern gemeldet",
"user-flagged-too-many-times": "Dieser Benutzer wurde bereits von anderen Benutzern gemeldet",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Du kannst deine eigenen Beiträge nicht bewerten",
"too-many-downvotes-today": "Du kannst nur %1 mal am Tag eine schlechte Bewertung abgeben",
"too-many-downvotes-today-user": "Du kannst einen Benutzer nur %1 mal am Tag schlecht bewerten",
diff --git a/public/language/de/flags.json b/public/language/de/flags.json
index 914b2dcecc..c5d65c1132 100644
--- a/public/language/de/flags.json
+++ b/public/language/de/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Massenaktionen",
"bulk-resolve": "Meldungen bereiningen",
- "bulk-success": "%1 Meldungen aktualisiert"
+ "bulk-success": "%1 Meldungen aktualisiert",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json
index 53407294d2..030c0ed80b 100644
--- a/public/language/de/notifications.json
+++ b/public/language/de/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 Profil exportiert, klicke zum downloaden",
"posts-exported": "%1 Posts exportiert, klicke zum downloaden",
"uploads-exported": "%1 Uploads exportiert, klicke zum downloaden",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-Mail bestätigt",
"email-confirmed-message": "Vielen Dank für Ihre E-Mail-Validierung. Ihr Konto ist nun vollständig aktiviert.",
"email-confirm-error-message": "Es gab ein Problem bei der Validierung Ihrer E-Mail-Adresse. Möglicherweise ist der Code ungültig oder abgelaufen.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Wenn du eine Chat Nachricht erhältst",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Wenn du eine Gruppeneinladung erhältst",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Wenn jemand einer Gruppe beitreten möchte, die dir gehört",
"notificationType_new-register": "Wenn jemand der Registrierungswarteschlange hinzugefügt wird",
"notificationType_post-queue": "Wenn ein neuer Beitrag eingereiht wird",
diff --git a/public/language/de/topic.json b/public/language/de/topic.json
index b0cee934e6..2530c85fb1 100644
--- a/public/language/de/topic.json
+++ b/public/language/de/topic.json
@@ -29,6 +29,7 @@
"tools": "Werkzeuge",
"locked": "Gesperrt",
"pinned": "Angeheftet",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Verschoben",
"moved-from": "Moved from %1",
"copy-ip": "IP-Adresse Kopieren",
diff --git a/public/language/el/admin/manage/categories.json b/public/language/el/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/el/admin/manage/categories.json
+++ b/public/language/el/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/el/admin/manage/privileges.json b/public/language/el/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/el/admin/manage/privileges.json
+++ b/public/language/el/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/el/admin/manage/tags.json b/public/language/el/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/el/admin/manage/tags.json
+++ b/public/language/el/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/el/admin/manage/users.json b/public/language/el/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/el/admin/manage/users.json
+++ b/public/language/el/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/el/error.json b/public/language/el/error.json
index 4f706777c7..cbf2792c27 100644
--- a/public/language/el/error.json
+++ b/public/language/el/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Το όνομα χρήστη είναι πολύ μεγάλο",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Ο Χρήστης είναι αποκλεισμένος/η",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Δεν μπορείς να αποκλείσεις άλλους διαχειριστές!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/el/flags.json b/public/language/el/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/el/flags.json
+++ b/public/language/el/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/el/notifications.json b/public/language/el/notifications.json
index 248c0a6034..5779866aed 100644
--- a/public/language/el/notifications.json
+++ b/public/language/el/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmed",
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
"email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/el/topic.json b/public/language/el/topic.json
index 7f28aeb626..fb2de10e43 100644
--- a/public/language/el/topic.json
+++ b/public/language/el/topic.json
@@ -29,6 +29,7 @@
"tools": "Εργαλεία",
"locked": "Κλειδωμένο",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/en-GB/admin/manage/categories.json b/public/language/en-GB/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/en-GB/admin/manage/categories.json
+++ b/public/language/en-GB/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/en-GB/admin/manage/privileges.json b/public/language/en-GB/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/en-GB/admin/manage/privileges.json
+++ b/public/language/en-GB/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/en-GB/admin/manage/tags.json b/public/language/en-GB/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/en-GB/admin/manage/tags.json
+++ b/public/language/en-GB/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/en-GB/admin/manage/users.json b/public/language/en-GB/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/en-GB/admin/manage/users.json
+++ b/public/language/en-GB/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/en-GB/error.json b/public/language/en-GB/error.json
index 1b054dee4e..8782c9d665 100644
--- a/public/language/en-GB/error.json
+++ b/public/language/en-GB/error.json
@@ -46,6 +46,7 @@
"username-too-long": "Username too long",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "User banned",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
@@ -108,6 +109,8 @@
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
+
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -169,6 +172,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/en-GB/flags.json b/public/language/en-GB/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/en-GB/flags.json
+++ b/public/language/en-GB/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/en-GB/notifications.json b/public/language/en-GB/notifications.json
index 17d7a23bdf..0ec141d742 100644
--- a/public/language/en-GB/notifications.json
+++ b/public/language/en-GB/notifications.json
@@ -50,6 +50,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmed",
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
@@ -68,6 +69,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/en-GB/post-queue.json b/public/language/en-GB/post-queue.json
index b5f73c5613..bfaa367870 100644
--- a/public/language/en-GB/post-queue.json
+++ b/public/language/en-GB/post-queue.json
@@ -8,5 +8,11 @@
"content": "Content",
"posted": "Posted",
"reply-to": "Reply to \"%1\"",
- "content-editable": "You can click on individual content to edit before posting."
+ "content-editable": "Click on content to edit",
+ "category-editable": "Click on category to edit",
+ "title-editable": "Click on title to edit",
+ "reply": "Reply",
+ "topic": "Topic",
+ "accept": "Accept",
+ "reject": "Reject"
}
\ No newline at end of file
diff --git a/public/language/en-GB/topic.json b/public/language/en-GB/topic.json
index 8dc2f22401..05b89bb4fc 100644
--- a/public/language/en-GB/topic.json
+++ b/public/language/en-GB/topic.json
@@ -32,6 +32,7 @@
"tools": "Tools",
"locked": "Locked",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/en-US/admin/manage/categories.json b/public/language/en-US/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/en-US/admin/manage/categories.json
+++ b/public/language/en-US/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/en-US/admin/manage/privileges.json b/public/language/en-US/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/en-US/admin/manage/privileges.json
+++ b/public/language/en-US/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/en-US/admin/manage/tags.json b/public/language/en-US/admin/manage/tags.json
index 943ccc96ea..19a02a8f41 100644
--- a/public/language/en-US/admin/manage/tags.json
+++ b/public/language/en-US/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/en-US/admin/manage/users.json b/public/language/en-US/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/en-US/admin/manage/users.json
+++ b/public/language/en-US/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json
index c50e9c05cd..1bcfa4ffe0 100644
--- a/public/language/en-US/error.json
+++ b/public/language/en-US/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Username too long",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "User banned",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "You can't ban other admins!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/en-US/flags.json b/public/language/en-US/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/en-US/flags.json
+++ b/public/language/en-US/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/en-US/notifications.json b/public/language/en-US/notifications.json
index c5d367fae2..14bc2e046e 100644
--- a/public/language/en-US/notifications.json
+++ b/public/language/en-US/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmed",
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
"email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/en-US/topic.json b/public/language/en-US/topic.json
index a38f9433fc..6d2c704c8e 100644
--- a/public/language/en-US/topic.json
+++ b/public/language/en-US/topic.json
@@ -29,6 +29,7 @@
"tools": "Tools",
"locked": "Locked",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/en-x-pirate/admin/manage/categories.json b/public/language/en-x-pirate/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/en-x-pirate/admin/manage/categories.json
+++ b/public/language/en-x-pirate/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/en-x-pirate/admin/manage/privileges.json b/public/language/en-x-pirate/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/en-x-pirate/admin/manage/privileges.json
+++ b/public/language/en-x-pirate/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/en-x-pirate/admin/manage/tags.json b/public/language/en-x-pirate/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/en-x-pirate/admin/manage/tags.json
+++ b/public/language/en-x-pirate/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/en-x-pirate/admin/manage/users.json b/public/language/en-x-pirate/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/en-x-pirate/admin/manage/users.json
+++ b/public/language/en-x-pirate/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/en-x-pirate/error.json b/public/language/en-x-pirate/error.json
index c50e9c05cd..1bcfa4ffe0 100644
--- a/public/language/en-x-pirate/error.json
+++ b/public/language/en-x-pirate/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Username too long",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "User banned",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "You can't ban other admins!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/en-x-pirate/flags.json b/public/language/en-x-pirate/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/en-x-pirate/flags.json
+++ b/public/language/en-x-pirate/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/en-x-pirate/notifications.json b/public/language/en-x-pirate/notifications.json
index 26adae26f2..fe394df25a 100644
--- a/public/language/en-x-pirate/notifications.json
+++ b/public/language/en-x-pirate/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmed",
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
"email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/en-x-pirate/topic.json b/public/language/en-x-pirate/topic.json
index a38f9433fc..6d2c704c8e 100644
--- a/public/language/en-x-pirate/topic.json
+++ b/public/language/en-x-pirate/topic.json
@@ -29,6 +29,7 @@
"tools": "Tools",
"locked": "Locked",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/es/admin/manage/categories.json b/public/language/es/admin/manage/categories.json
index f8e435230a..add7026d1f 100644
--- a/public/language/es/admin/manage/categories.json
+++ b/public/language/es/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# de Respuestas Recientes",
"ext-link": "Enlace Externo",
"is-section": "Tratar esta categoría como una sección",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Subir Imagen",
"delete-image": "Eliminar",
diff --git a/public/language/es/admin/manage/privileges.json b/public/language/es/admin/manage/privileges.json
index b40262ebb9..118cc2d722 100644
--- a/public/language/es/admin/manage/privileges.json
+++ b/public/language/es/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Subir imágenes",
"upload-files": "Subir Archivos",
diff --git a/public/language/es/admin/manage/tags.json b/public/language/es/admin/manage/tags.json
index a22c14e0bf..20aca4d09f 100644
--- a/public/language/es/admin/manage/tags.json
+++ b/public/language/es/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "¿Quieres borrar las etiquetas (tags) seleccionadas?",
- "alerts.update-success": "¡Etiqueta (tag) Actualizada!"
+ "alerts.update-success": "¡Etiqueta (tag) Actualizada!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/es/admin/manage/users.json b/public/language/es/admin/manage/users.json
index cc7470da65..59be70aa0a 100644
--- a/public/language/es/admin/manage/users.json
+++ b/public/language/es/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Correos electrónico:",
"alerts.email-sent-to": "Un email de invitación ha sido enviado a %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/es/error.json b/public/language/es/error.json
index 342c3a3c10..bc8ccd7ffb 100644
--- a/public/language/es/error.json
+++ b/public/language/es/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nombre de usuario demasiado largo",
"password-too-long": "Contraseña muy corta",
"reset-rate-limited": "Demasiadas solicitudes de restablecimiento de contraseña (tasa limitada)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Usuario baneado",
"user-banned-reason": "Lo siento, esta cuenta ha sido baneada ( Razon: %1 )",
"user-banned-reason-until": "Lo siento, esta cuenta ha sido baneada hasta %1 ( Razon: %2 )",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "¡No puedes expulsar a otros administradores!",
"cant-remove-last-admin": "Tu eres el unico administrador. Añade otro usuario como administrador antes de eliminarte a ti mismo.",
"cant-delete-admin": "Quitar privilegios de administrador de ésta cuenta antes de intentar borrarla",
+ "already-deleting": "Already deleting",
"invalid-image": "Imagen inválida",
"invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1",
"invalid-image-extension": "Extensión de imagen inválida",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "No puedes votar en tu propio mensaje",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/es/flags.json b/public/language/es/flags.json
index 8ac3583388..033eb2941b 100644
--- a/public/language/es/flags.json
+++ b/public/language/es/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json
index cd0b726262..5fc224c511 100644
--- a/public/language/es/notifications.json
+++ b/public/language/es/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Correo electrónico confirmado",
"email-confirmed-message": "Gracias por validar tu correo electrónico. Tu cuenta ya está completamente activa.",
"email-confirm-error-message": "Hubo un problema al validar tu cuenta de correo electrónico. Quizá el código era erróneo o expiró...",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Cuando recibes un mensaje de chat",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Cuando recibes una invitación a un grupo",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "Cuando alguien es añadido a una cola de registro",
"notificationType_post-queue": "Cuando un mensaje nuevo entra en la cola",
diff --git a/public/language/es/topic.json b/public/language/es/topic.json
index 98c6231be0..bb83a4de4a 100644
--- a/public/language/es/topic.json
+++ b/public/language/es/topic.json
@@ -29,6 +29,7 @@
"tools": "Herramientas",
"locked": "Cerrado",
"pinned": "Fijo",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Movido",
"moved-from": "Moved from %1",
"copy-ip": "Copiar IP",
diff --git a/public/language/et/admin/manage/categories.json b/public/language/et/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/et/admin/manage/categories.json
+++ b/public/language/et/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/et/admin/manage/privileges.json b/public/language/et/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/et/admin/manage/privileges.json
+++ b/public/language/et/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/et/admin/manage/tags.json b/public/language/et/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/et/admin/manage/tags.json
+++ b/public/language/et/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/et/admin/manage/users.json b/public/language/et/admin/manage/users.json
index ed9ce13b8d..aa1ffcbc55 100644
--- a/public/language/et/admin/manage/users.json
+++ b/public/language/et/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "Kutse on saadetud %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/et/error.json b/public/language/et/error.json
index 93b5d2f213..06b4ec3ba3 100644
--- a/public/language/et/error.json
+++ b/public/language/et/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Kasutajanimi on liiga pikk",
"password-too-long": "Parool liiga pikk",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Kasutaja bannitud",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Sa ei saa bannida teisi administraatoreid!",
"cant-remove-last-admin": "Te olete ainus administraator. Lisage keegi teine administraatoriks, enne kui eemaldate endalt administraatori.",
"cant-delete-admin": "Eemalda sellelt kasutajalt administraatori õigused enne selle kustutamist",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Vigane pildi formaat. Lubatud formaadid on: %1",
"invalid-image-extension": "Vigane pildi formaat",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/et/flags.json b/public/language/et/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/et/flags.json
+++ b/public/language/et/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/et/notifications.json b/public/language/et/notifications.json
index 0db60d7e5c..51d15b1a6a 100644
--- a/public/language/et/notifications.json
+++ b/public/language/et/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Emaili aadress kinnitatud",
"email-confirmed-message": "Täname, et kinnitasite oma emaili aadressi. Teie kasutaja on nüüd täielikult aktiveeritud.",
"email-confirm-error-message": "Emaili aadressi kinnitamisel tekkis viga. Võibolla kinnituskood oli vale või aegunud.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/et/topic.json b/public/language/et/topic.json
index 7e1a451d1c..266a5ff264 100644
--- a/public/language/et/topic.json
+++ b/public/language/et/topic.json
@@ -29,6 +29,7 @@
"tools": "Tööriistad",
"locked": "Lukustatud",
"pinned": "Märgistatud",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Liigutatud",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/fa-IR/admin/manage/categories.json b/public/language/fa-IR/admin/manage/categories.json
index 2e476817d7..65912bf16d 100644
--- a/public/language/fa-IR/admin/manage/categories.json
+++ b/public/language/fa-IR/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/fa-IR/admin/manage/privileges.json b/public/language/fa-IR/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/fa-IR/admin/manage/privileges.json
+++ b/public/language/fa-IR/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/fa-IR/admin/manage/tags.json b/public/language/fa-IR/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/fa-IR/admin/manage/tags.json
+++ b/public/language/fa-IR/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/manage/users.json b/public/language/fa-IR/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/fa-IR/admin/manage/users.json
+++ b/public/language/fa-IR/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/fa-IR/error.json b/public/language/fa-IR/error.json
index b2b5726174..9a0db8eaef 100644
--- a/public/language/fa-IR/error.json
+++ b/public/language/fa-IR/error.json
@@ -40,6 +40,7 @@
"username-too-long": "نام کاربری بسیار طولانیست",
"password-too-long": "کلمه عبور بسیار طولانیست",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "کاربر اخراج شد",
"user-banned-reason": "با عرض پوزش، این حساب کاربری از انجمن اخراج شده است (دلیل: %1)",
"user-banned-reason-until": "با عرض پوزش، این حساب کاربری تا %1 اخراج شده است (دلیل: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "شما نمیتوانید دیگر مدیران را محروم کنید!",
"cant-remove-last-admin": "شما تنها مدیر می باشید . شما باید قبل از عزل خود از مدیریت یک کاربر دیگر را مدیر کنید",
"cant-delete-admin": "قبل از حذف این کاربر دسترسی های مدیریت را از وی بگیرید.",
+ "already-deleting": "Already deleting",
"invalid-image": "عکس نامعتبر",
"invalid-image-type": "نوع تصویر نامعتبر است. نوعهای قابل قبول اینها هستند: %1",
"invalid-image-extension": "پسوند عکس نامعتبر است",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "شما نمی توانید به پست خود رای بدهید",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/fa-IR/flags.json b/public/language/fa-IR/flags.json
index b9b0e9ece7..70843db704 100644
--- a/public/language/fa-IR/flags.json
+++ b/public/language/fa-IR/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/notifications.json b/public/language/fa-IR/notifications.json
index 8d1290fa11..a0baf73d0e 100644
--- a/public/language/fa-IR/notifications.json
+++ b/public/language/fa-IR/notifications.json
@@ -35,7 +35,7 @@
"user_posted_to_dual": "%1 و %2 پاسخ به پست دادند در: %3",
"user_posted_to_multiple": "%1 و %2 نفر دیگر به پست شما پاسخ ارسال کردهاند در: %3",
"user_posted_topic": "%1 یک موضوع جدید ارسال کرده: %2",
- "user_edited_post": "%1 has edited a post in %2",
+ "user_edited_post": "%1 پستی را در %2 ویرایش کرد",
"user_started_following_you": "%1 شروع به دنبال کردن شما کرده",
"user_started_following_you_dual": "%1 و %2 شروع به دنبال کردن شما کرده.",
"user_started_following_you_multiple": "%1 و %2 نفر دیگر شروع به دنبال کردن شما کرده.",
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "ایمیل تایید شد",
"email-confirmed-message": "بابت تایید ایمیلتان سپاسگزاریم. حساب کاربری شما اکنون به صورت کامل فعال شده است.",
"email-confirm-error-message": "خطایی در تایید آدرس ایمیل شما پیش آمده است. ممکن است کد نامعتبر و یا منقضی شده باشد.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "هنگامی که شما پیام چتی دریافت می کنید",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "هنگامی که شما دعوتنامه گروه دریافت می کنید",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "وقتی کسی به صف ثبت نام اضافه می شود",
"notificationType_post-queue": "هنگامی که یک پست جدید در صف قرار می گیرد",
diff --git a/public/language/fa-IR/topic.json b/public/language/fa-IR/topic.json
index 57a6712040..3d6763045c 100644
--- a/public/language/fa-IR/topic.json
+++ b/public/language/fa-IR/topic.json
@@ -29,6 +29,7 @@
"tools": "ابزارها",
"locked": "قفل شده است",
"pinned": "سنجاق شده",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "منتقل شده",
"moved-from": "Moved from %1",
"copy-ip": "کپی IP",
diff --git a/public/language/fi/admin/manage/categories.json b/public/language/fi/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/fi/admin/manage/categories.json
+++ b/public/language/fi/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/fi/admin/manage/privileges.json b/public/language/fi/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/fi/admin/manage/privileges.json
+++ b/public/language/fi/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/fi/admin/manage/tags.json b/public/language/fi/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/fi/admin/manage/tags.json
+++ b/public/language/fi/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/fi/admin/manage/users.json b/public/language/fi/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/fi/admin/manage/users.json
+++ b/public/language/fi/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/fi/error.json b/public/language/fi/error.json
index 8befaea4bd..3f50c9da55 100644
--- a/public/language/fi/error.json
+++ b/public/language/fi/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Käyttäjänimi on liian pitkä",
"password-too-long": "Salasana on liian pitkä",
"reset-rate-limited": "Liian monta salasanan nollaus pyyntöä (määrärajoitus)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Käyttäjä on estetty",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Et voi estää muita ylläpitäjiä!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/fi/flags.json b/public/language/fi/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/fi/flags.json
+++ b/public/language/fi/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json
index 733c1a70a2..4083fcd37c 100644
--- a/public/language/fi/notifications.json
+++ b/public/language/fi/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Sähköpostiosoite vahvistettu",
"email-confirmed-message": "Kiitos sähköpostiosoitteesi vahvistamisesta. Käyttäjätilisi on nyt täysin aktivoitu.",
"email-confirm-error-message": "Ongelma sähköpostiosoitteen vahvistamisessa. Ehkäpä koodi oli virheellinen tai vanhentunut.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Kun saat viestin keskusteluun",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Kun saat kutsun ryhmään",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Kun joku pyytää lupaa liittyä ryhmään, jonka omistaja olet",
"notificationType_new-register": "Kun joku lisätään rekisteröintijonoon",
"notificationType_post-queue": "Kun uusi viesti tulee jonoon",
diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json
index e3508fef34..1e280acdee 100644
--- a/public/language/fi/topic.json
+++ b/public/language/fi/topic.json
@@ -29,6 +29,7 @@
"tools": "Työkalut",
"locked": "Lukittu",
"pinned": "Kiinnitetty",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Siirretty",
"moved-from": "Moved from %1",
"copy-ip": "Kopioi IP",
diff --git a/public/language/fr/admin/manage/categories.json b/public/language/fr/admin/manage/categories.json
index cd07e21b9e..470ca2fdc4 100644
--- a/public/language/fr/admin/manage/categories.json
+++ b/public/language/fr/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# de réponses récentes",
"ext-link": "Lien externe",
"is-section": "Traiter cette catégorie comme une section",
+ "post-queue": "Post queue",
"tag-whitelist": "Liste blanche de mots clés",
"upload-image": "Envoyer une image",
"delete-image": "Enlever",
diff --git a/public/language/fr/admin/manage/privileges.json b/public/language/fr/admin/manage/privileges.json
index b9f4fcb5ef..487bb04fdb 100644
--- a/public/language/fr/admin/manage/privileges.json
+++ b/public/language/fr/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Privilèges de groupe",
"user-privileges": "Privilèges d'utilisateur",
"edit-privileges": "Éditer les privilèges",
+ "select-clear-all": "Tout Sélectionner / Tout effacer",
"chat": "Chat",
"upload-images": "Images envoyées",
"upload-files": "Fichiers envoyés",
diff --git a/public/language/fr/admin/manage/tags.json b/public/language/fr/admin/manage/tags.json
index 1b3d33898b..7b178ce0b0 100644
--- a/public/language/fr/admin/manage/tags.json
+++ b/public/language/fr/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Modification des tag(s)",
"alerts.confirm-delete": "Vous-voulez réellement supprimer les mots-clés sélectionnés ?",
- "alerts.update-success": "Mot-clés mis à jour !"
+ "alerts.update-success": "Mot-clés mis à jour !",
+ "reset-colors": "Réinitialiser les couleurs"
}
\ No newline at end of file
diff --git a/public/language/fr/admin/manage/users.json b/public/language/fr/admin/manage/users.json
index 47804c678c..b4a8b4e8dd 100644
--- a/public/language/fr/admin/manage/users.json
+++ b/public/language/fr/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "Un e-mail d'invitation a été envoyé à %1",
- "alerts.x-users-found": "%1 utilisateur(s) trouvé(s), (%2 secondes)"
+ "alerts.x-users-found": "%1 utilisateur(s) trouvé(s), (%2 secondes)",
+ "export-users-started": "L'exportation d'utilisateurs au format CSV peut prendre un certain temps. Vous recevrez une notification lorsqu'elle sera terminée.",
+ "export-users-completed": "Utilisateurs exportés au format CSV, cliquez ici pour télécharger."
}
\ No newline at end of file
diff --git a/public/language/fr/admin/settings/api.json b/public/language/fr/admin/settings/api.json
index 85a6230fd5..f6e04bd349 100644
--- a/public/language/fr/admin/settings/api.json
+++ b/public/language/fr/admin/settings/api.json
@@ -1,12 +1,12 @@
{
"tokens": "Tokens",
- "settings": "Settings",
+ "settings": "Paramètres",
"lead-text": "À partir de cette page, vous pouvez configurer l'accès à l'API d'écriture dans NodeBB.",
"intro": "Par défaut, l'API d'écriture authentifie les utilisateurs en fonction de leur cookie de session, mais NodeBB prend également en charge l'authentification du porteur via des tokens générés via cette page.",
"docs": "Cliquez ici pour accéder à la spécification complète de l'API",
- "require-https": "Require API usage via HTTPS only",
- "require-https-caveat": "Note: Some installations involving load balancers may proxy their requests to NodeBB using HTTP, in which case this option should remain disabled.",
+ "require-https": "Forcer l'utilisation de l'API via HTTPS uniquement",
+ "require-https-caveat": "Remarque: certaines installations impliquant des load balancer peuvent transmettre leurs requêtes à NodeBB via HTTP, auquel cas cette option doit rester désactivée.",
"uid": "ID Utilisateur",
"uid-help-text": "Spécifiez un ID utilisateur à associer à ce token. Si l'ID utilisateur est 0, il sera considéré comme un token maître, qui peut prendre l'identité d'autres utilisateurs en fonction du paramètre _uid",
diff --git a/public/language/fr/error.json b/public/language/fr/error.json
index 0dfa71bab6..b7e73239b6 100644
--- a/public/language/fr/error.json
+++ b/public/language/fr/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nom d'utilisateur trop long",
"password-too-long": "Mot de passe trop long",
"reset-rate-limited": "Trop de demandes de réinitialisation de mot de passe (demandes limitées)",
+ "reset-same-password": "Veuillez utiliser un mot de passe différent de votre mot de passe actuel",
"user-banned": "Utilisateur banni",
"user-banned-reason": "Désolé, ce compte a été banni (Raison : %1)",
"user-banned-reason-until": "Désolé, ce compte a été banni jusqu'au %1 (Raison : %2).",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Vous ne pouvez pas bannir les autres administrateurs !",
"cant-remove-last-admin": "Vous êtes le seul administrateur. Ajoutez un autre utilisateur en tant qu'administrateur avant de vous retirer.",
"cant-delete-admin": "Veuillez retirer les droits d'administration de ce compte avant de tenter de le supprimer.",
+ "already-deleting": "Already deleting",
"invalid-image": "Image invalide",
"invalid-image-type": "Type d'image invalide. Les types autorisés sont: %1",
"invalid-image-extension": "Extension d'image invalide",
@@ -144,6 +146,7 @@
"user-already-flagged": "Vous avez déjà signalé cet utilisateur",
"post-flagged-too-many-times": "Ce message a déjà été signalé par d'autres",
"user-flagged-too-many-times": "Cet utilisateur a déjà été signalé par d'autres",
+ "cant-flag-privileged": "Vous n'êtes pas autorisé à signaler les profils ou le contenu des utilisateurs privilégiés (modérateurs / modérateurs globaux / administrateurs)",
"self-vote": "Vous ne pouvez pas voter sur votre propre message",
"too-many-downvotes-today": "Vous ne pouvez noter négativement que %1 fois par jour",
"too-many-downvotes-today-user": "Vous ne pouvez noter négativement un utilisateur que %1 fois par jour",
diff --git a/public/language/fr/flags.json b/public/language/fr/flags.json
index dba9270841..78512be3a3 100644
--- a/public/language/fr/flags.json
+++ b/public/language/fr/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Actions",
"bulk-resolve": "Signalement(s) résolu(s)",
- "bulk-success": "%1 signalement mis à jour"
+ "bulk-success": "%1 signalement mis à jour",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json
index ef664344c6..07bf47fe81 100644
--- a/public/language/fr/notifications.json
+++ b/public/language/fr/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profil exporté, cliquez pour le télécharger",
"posts-exported": "%1 messages exportés, cliquez pour les télécharger",
"uploads-exported": "%1 envois exportés, cliquez pour les télécharger",
+ "users-csv-exported": "Utilisateurs exportés en CSV, cliquez pour télécharger",
"email-confirmed": "Email vérifié",
"email-confirmed-message": "Merci pour la validation de votre adresse email. Votre compte est désormais activé.",
"email-confirm-error-message": "Il y a un un problème dans la vérification de votre adresse email. Le code est peut être invalide ou a expiré.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Lorsque vous recevez un message du chat ",
"notificationType_new-group-chat": "Lorsque vous recevez un message de discussion de groupe",
"notificationType_group-invite": "Lorsque vous recevez une invitation d'un groupe",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Quand quelqu'un demande à rejoindre un groupe que vous administrez",
"notificationType_new-register": "Lorsque quelqu'un est ajouté à la file d'attente d'inscription",
"notificationType_post-queue": "Lorsque un nouveau message est mis en file d'attente",
diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json
index 399972e7a7..e9207afec4 100644
--- a/public/language/fr/topic.json
+++ b/public/language/fr/topic.json
@@ -29,6 +29,7 @@
"tools": "Outils",
"locked": "Verrouillé",
"pinned": "Épinglé",
+ "pinned-with-expiry": "Épinglé jusqu'au %1",
"moved": "Déplacé",
"moved-from": "Déplacé de %1",
"copy-ip": "Copier l'IP",
diff --git a/public/language/gl/admin/manage/categories.json b/public/language/gl/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/gl/admin/manage/categories.json
+++ b/public/language/gl/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/gl/admin/manage/privileges.json b/public/language/gl/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/gl/admin/manage/privileges.json
+++ b/public/language/gl/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/gl/admin/manage/tags.json b/public/language/gl/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/gl/admin/manage/tags.json
+++ b/public/language/gl/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/gl/admin/manage/users.json b/public/language/gl/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/gl/admin/manage/users.json
+++ b/public/language/gl/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/gl/error.json b/public/language/gl/error.json
index 3377d8805b..08f30cf26e 100644
--- a/public/language/gl/error.json
+++ b/public/language/gl/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nome de usuario demasiado longo.",
"password-too-long": "Contrasinal moi longa",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Usuario expulsado",
"user-banned-reason": "Desculpa, esta conta foi baneada (Razón: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Non podes botar outros administradores!",
"cant-remove-last-admin": "Eres o único administrador. Engade outros administradores antes de quitarte a ti mesmo como administrador.",
"cant-delete-admin": "Retirar privilexios de administrador desta conta antes de intentar borrala",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Tipo de imaxe inválida. Tipos admitidos: %1",
"invalid-image-extension": "Extensión de imaxe inválida",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/gl/flags.json b/public/language/gl/flags.json
index 29189beab3..4f06f7b700 100644
--- a/public/language/gl/flags.json
+++ b/public/language/gl/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/gl/notifications.json b/public/language/gl/notifications.json
index 059c57d3fb..5f3ceb4af1 100644
--- a/public/language/gl/notifications.json
+++ b/public/language/gl/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Correo confirmado",
"email-confirmed-message": "Grazas por validar o teu correo. A túa conta agora está activada.",
"email-confirm-error-message": "Houbo un problema validando o teu correo. Poida que o código fose inválido ou expirase. ",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/gl/topic.json b/public/language/gl/topic.json
index 91bacd38cb..fc1f5b2d63 100644
--- a/public/language/gl/topic.json
+++ b/public/language/gl/topic.json
@@ -29,6 +29,7 @@
"tools": "Ferramentas",
"locked": "Pechado",
"pinned": "Fixo",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Movido",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/he/admin/advanced/database.json b/public/language/he/admin/advanced/database.json
index 356a4cd919..1e66929a54 100644
--- a/public/language/he/admin/advanced/database.json
+++ b/public/language/he/admin/advanced/database.json
@@ -1,12 +1,12 @@
{
- "x-b": "%1 בתים",
+ "x-b": "%1 ביטים",
"x-mb": "%1 מגה בייט",
"x-gb": "%1 ג'יגה בייט",
"uptime-seconds": "זמן מאתחול אחרון בשניות",
"uptime-days": "זמן מאתחול אחרון בימים",
"mongo": "Mongo",
- "mongo.version": "גרסאת MongoDB",
+ "mongo.version": "גרסת MongoDB",
"mongo.storage-engine": "מנוע אחסון",
"mongo.collections": "אוסף",
"mongo.objects": "אובייקטים",
@@ -36,7 +36,7 @@
"redis.memory-frag-ratio": "יחס פיצול זכרון",
"redis.total-connections-recieved": "סך כל החיבורים שהתקבלו",
"redis.total-commands-processed": "סך כל הפקודות שעובדו",
- "redis.iops": "Instantaneous Ops. Per Second",
+ "redis.iops": "אפשרויות מידיות לשניה",
"redis.iinput": "Instantaneous Input Per Second",
"redis.ioutput": "Instantaneous Output Per Second",
"redis.total-input": "סך הכל מידע נכנס",
diff --git a/public/language/he/admin/advanced/events.json b/public/language/he/admin/advanced/events.json
index ec661cd7a2..1e8a7c9a9f 100644
--- a/public/language/he/admin/advanced/events.json
+++ b/public/language/he/admin/advanced/events.json
@@ -2,7 +2,7 @@
"events": "ארועים",
"no-events": "אין ארועים",
"control-panel": "בקרת ארועים\n ",
- "delete-events": "Delete Events",
+ "delete-events": "מחיקת ארועים",
"filters": "מסננים",
"filters-apply": "החל מסננים",
"filter-type": "סוג אירוע",
diff --git a/public/language/he/admin/appearance/customise.json b/public/language/he/admin/appearance/customise.json
index 12b86b47fc..c203bc61d9 100644
--- a/public/language/he/admin/appearance/customise.json
+++ b/public/language/he/admin/appearance/customise.json
@@ -7,10 +7,10 @@
"custom-js.description": "הזן כאן javascript משלך. זה יבוצע לאחר טעינת הדף לחלוטין.",
"custom-js.enable": "אפשר Javascript מותאם אישית",
- "custom-header": "Custom Header",
- "custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <head> section of your forum's markup. Script tags are allowed, but are discouraged, as the Custom Javascript tab is available.",
- "custom-header.enable": "Enable Custom Header",
+ "custom-header": "HTML מותאם אישית",
+ "custom-header.description": "הזן כאן HTML משלך (לדוגמא תגיות מטא), שיתווספו לתגית ה-head של הפורום. ניתן להכניס סקריפטים, אך מומלץ להכניס אותם בכרטיסיית Javascript מותאם אישית.",
+ "custom-header.enable": "אפשר HTML מותאם אישית",
- "custom-css.livereload": "Enable Live Reload",
- "custom-css.livereload.description": "Enable this to force all sessions on every device under your account to refresh whenever you click save"
+ "custom-css.livereload": "אפשר טעינה מחדש אוטומטית.",
+ "custom-css.livereload.description": "אפשר זאת כדי שכל החיבורים מכל מכשיר יתרעננו כאשר אתה שומר."
}
\ No newline at end of file
diff --git a/public/language/he/admin/appearance/skins.json b/public/language/he/admin/appearance/skins.json
index 59c15008c7..4f49fb6e2b 100644
--- a/public/language/he/admin/appearance/skins.json
+++ b/public/language/he/admin/appearance/skins.json
@@ -4,6 +4,6 @@
"select-skin": "סקין נבחר",
"current-skin": "סקין נוכחי",
"skin-updated": "סקין מעודכן",
- "applied-success": "%1 skin was succesfully applied",
- "revert-success": "Skin reverted to base colours"
+ "applied-success": "העיצוב %1 הוחל בהצלחה",
+ "revert-success": "העיצובהוחזר לצבעים הבסיסיים"
}
\ No newline at end of file
diff --git a/public/language/he/admin/appearance/themes.json b/public/language/he/admin/appearance/themes.json
index f8cfca3c8e..00210bdbd0 100644
--- a/public/language/he/admin/appearance/themes.json
+++ b/public/language/he/admin/appearance/themes.json
@@ -1,11 +1,11 @@
{
- "checking-for-installed": "Checking for installed themes...",
+ "checking-for-installed": "בודק ערכות נושא מותקנות...",
"homepage": "דף הבית",
- "select-theme": "Select Theme",
- "current-theme": "Current Theme",
- "no-themes": "No installed themes found",
- "revert-confirm": "Are you sure you wish to restore the default NodeBB theme?",
- "theme-changed": "Theme Changed",
- "revert-success": "You have successfully reverted your NodeBB back to it's default theme.",
- "restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
+ "select-theme": "בחר ערכת נושא",
+ "current-theme": "ערכת נושא נוכחית",
+ "no-themes": "לא נמצאו ערכות נושא מותקנות",
+ "revert-confirm": "האם אתה בטוח שאתה רוצה לשחזר את ערכת הנושא הרגילה של NodeBB?",
+ "theme-changed": "ערכת הנושא שונתה",
+ "revert-success": "החזרת בהצלחה את הפורום שלך לערכת הנושא ברירת המחדל.",
+ "restart-to-activate": "אנא בצע בנייה והפעלה מחדש כדי להחיל את ערכת הנושא הזו."
}
\ No newline at end of file
diff --git a/public/language/he/admin/extend/rewards.json b/public/language/he/admin/extend/rewards.json
index f78c4b2c56..3c4310ffef 100644
--- a/public/language/he/admin/extend/rewards.json
+++ b/public/language/he/admin/extend/rewards.json
@@ -1,7 +1,7 @@
{
"rewards": "פרסים",
"condition-if-users": "אם המשתמשים",
- "condition-is": "Is:",
+ "condition-is": "הוא:",
"condition-then": "אז:",
"max-claims": "מספר הפעמים הניתן לדרוש פרס",
"zero-infinite": "הזן 0 לאינסוף",
diff --git a/public/language/he/admin/manage/categories.json b/public/language/he/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/he/admin/manage/categories.json
+++ b/public/language/he/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/he/admin/manage/privileges.json b/public/language/he/admin/manage/privileges.json
index fb7d158d7f..99b6fd8d0b 100644
--- a/public/language/he/admin/manage/privileges.json
+++ b/public/language/he/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "הרשאות קבוצתיות",
"user-privileges": "הרשאות משתמש",
"edit-privileges": "עריכת הרשאות",
+ "select-clear-all": "בחר / נקה הכל",
"chat": "צ'אט",
"upload-images": "העלאת תמונות",
"upload-files": "העלאת קבצים",
diff --git a/public/language/he/admin/manage/tags.json b/public/language/he/admin/manage/tags.json
index d9125f0f6b..29037c4b58 100644
--- a/public/language/he/admin/manage/tags.json
+++ b/public/language/he/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "האם תרצה למחוק את התגים שנבחרו?",
- "alerts.update-success": "תג עודכן!"
+ "alerts.update-success": "תג עודכן!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/he/admin/manage/users.json b/public/language/he/admin/manage/users.json
index 40cd43692c..51d31a4abe 100644
--- a/public/language/he/admin/manage/users.json
+++ b/public/language/he/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "דואל הזמנה נשלח ל %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/he/admin/menu.json b/public/language/he/admin/menu.json
index ba334339a0..0b5b16a080 100644
--- a/public/language/he/admin/menu.json
+++ b/public/language/he/admin/menu.json
@@ -13,13 +13,13 @@
"manage/groups": "קבוצות",
"manage/ip-blacklist": "רשימה שחורה של כתובות IP",
"manage/uploads": "העלאות",
- "manage/digest": "Digests",
+ "manage/digest": "תקצירים",
"section-settings": "הגדרות",
"settings/general": "כללי",
"settings/homepage": "דף הבית",
"settings/navigation": "ניווט",
- "settings/reputation": "מוניטין ודגלים",
+ "settings/reputation": "מוניטין ודיווחים",
"settings/email": "דוא\"ל",
"settings/user": "משתמשים",
"settings/group": "קבוצות",
@@ -44,14 +44,14 @@
"section-appearance": "מראה חיצוני",
"appearance/themes": "ערכות נושא",
"appearance/skins": "עיצובים",
- "appearance/customise": "תוכן מותאם אישי (HTML/JS/CSS)",
+ "appearance/customise": "תוכן מותאם אישית (HTML/JS/CSS)",
- "section-extend": "Extend",
+ "section-extend": "הרחב",
"extend/plugins": "תוספים",
"extend/widgets": "וידג'טים",
- "extend/rewards": "תגמולים",
+ "extend/rewards": "פרסים",
- "section-social-auth": "אימות חברתי",
+ "section-social-auth": "אימות חיצוני",
"section-plugins": "תוספים",
"extend/plugins.install": "תוספים מותקנים",
@@ -60,16 +60,16 @@
"advanced/database": "מסד נתונים",
"advanced/events": "ארועים",
"advanced/hooks": "Hooks",
- "advanced/logs": "Logs",
+ "advanced/logs": "רישומים",
"advanced/errors": "שגיאות",
"advanced/cache": "עוגיות",
- "development/logger": "Logger",
+ "development/logger": "כותב הרישומים",
"development/info": "מידע",
"rebuild-and-restart-forum": "בנה והפעל מחדש את הפורום",
"restart-forum": "הפעל מחדש את הפורום",
"logout": "התנתק",
- "view-forum": "צפה בפורום",
+ "view-forum": "כניסה לפורום",
"search.placeholder": "לחץ "/" בכדי לחפש הגדרה",
"search.no-results": "אין תוצאות...",
diff --git a/public/language/he/email.json b/public/language/he/email.json
index 9e1e4c93a0..20b9ebaa02 100644
--- a/public/language/he/email.json
+++ b/public/language/he/email.json
@@ -21,31 +21,31 @@
"reset.notify.text1": "אנו מודיעים לך שב%1, סיסמתך שונתה בהצלחה.",
"reset.notify.text2": "אם לא אישרת בקשה זו, אנא הודע למנהל מיד.",
"digest.latest_topics": "נושאים אחרונים מ%1",
- "digest.top-topics": "Top topics from %1",
- "digest.popular-topics": "Popular topics from %1",
+ "digest.top-topics": "נושאים עם הכי הרבה הצבעות מ-%1",
+ "digest.popular-topics": "הנושאים הכי פופולריים מ-%1",
"digest.cta": "לחץ כאן כדי לבקר ב %1",
"digest.unsub.info": "תקציר זה נשלח אליך על-פי הגדרות החשבון שלך.",
"digest.day": "יום",
"digest.week": "שבוע",
"digest.month": "חודש",
"digest.subject": "מקבץ עבור %1",
- "digest.title.day": "Your Daily Digest",
- "digest.title.week": "Your Weekly Digest",
- "digest.title.month": "Your Monthly Digest",
+ "digest.title.day": "התקציר היומי שלך",
+ "digest.title.week": "התקציר השבועי שלך",
+ "digest.title.month": "התקציר החודשי שלך",
"notif.chat.subject": "הודעת צ'אט חדשה התקבלה מ%1",
"notif.chat.cta": "לחץ כאן כדי להמשיך את השיחה",
"notif.chat.unsub.info": "התראה הצ'אט הזו נשלחה אליך על-פי הגדרות החשבון שלך.",
"notif.post.unsub.info": "התראת הפוסט הזו נשלחה אליך על-פי הגדרות החשבון שלך.",
- "notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking",
- "notif.cta": "To the forum",
- "notif.cta-new-reply": "View Post",
- "notif.cta-new-chat": "View Chat",
- "notif.test.short": "Testing Notifications",
- "notif.test.long": "This is a test of the notifications email. Send help!",
+ "notif.post.unsub.one-click": "ניתן גם להפסיק את קבלת המיילים כמו זה, בלחיצה על",
+ "notif.cta": "כניסה לפורום",
+ "notif.cta-new-reply": "הצג פוסט",
+ "notif.cta-new-chat": "הצג צ'אט",
+ "notif.test.short": "בדיקת התראות.",
+ "notif.test.long": "זוהי בדיקה של ההתראות במייל.",
"test.text1": "זהו אימייל ניסיון על מנת לוודא שהגדרות המייל בוצעו כהלכה בהגדרות NodeBB.",
"unsub.cta": "לחץ כאן לשנות הגדרות אלו",
- "unsubscribe": "unsubscribe",
- "unsub.success": "You will no longer receive emails from the %1 mailing list",
+ "unsubscribe": "בטל רישום",
+ "unsub.success": "אתה לא תקבל יותר מיילים מרשימת התפוצה של %1",
"banned.subject": "הורחקת מ %1",
"banned.text1": "המשתמש %1 הורחק מ %2.",
"banned.text2": "הרחקה זו תמשך עד %1",
diff --git a/public/language/he/error.json b/public/language/he/error.json
index fa55378caf..0b4e467a8e 100644
--- a/public/language/he/error.json
+++ b/public/language/he/error.json
@@ -9,7 +9,7 @@
"invalid-tid": "זהוי נושא שגוי",
"invalid-pid": "זהוי פוסט שגוי",
"invalid-uid": "זהוי משתמש שגוי",
- "invalid-date": "A valid date must be provided",
+ "invalid-date": "יש לציין תאריך תקין",
"invalid-username": "שם משתמש שגוי",
"invalid-email": "אימייל שגוי",
"invalid-fullname": "שם מלא לא תקין",
@@ -30,16 +30,17 @@
"email-invited": "כבר נשלחה הזמנה למייל זה",
"email-not-confirmed": "אין באפשרותך לפרסם עד אישור הודעת הדוא\"ל שלך, לחץ כאן כדי לאשר את הדוא\"ל שלך.",
"email-not-confirmed-chat": "אין באפשרותך לשוחח עד שהדוא\"ל שלך יאושר, אנא לחץ כאן כדי לאשר את הדוא\"ל שלך.",
- "email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.",
+ "email-not-confirmed-email-sent": "האימייל שלך עדין לא אושר. אנא בדוק בתיבת הדואר בנוגע לאישור האימייל שנשלח לך על ידנו. לא תוכל לכתוב פוסטים ולהשתמש בצ'אט לפני אימות המייל שלך.",
"no-email-to-confirm": "פורום זה דורש אישור בדוא\"ל, אנא לחץ כאן כדי להכניס לדואר אלקטרוני",
"email-confirm-failed": "לא הצלחנו לאשר את הדוא\"ל שלך, תנסה שוב אחר כך",
"confirm-email-already-sent": "מייל האישור כבר נשלח, אנא המתן %1 דקות כדי לשלוח מייל נוסף.",
- "sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
- "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests",
+ "sendmail-not-found": "תוכנת sendmail לא נמצאה, נא בדוק שהיא מותקת וניתנת להרצה על ידי המשתמש שמריץ את NodeBB.",
+ "digest-not-enabled": "משתמש זה ביטל את התקצירים, או שברירת המחדל של המערכת היא לכבות תקצירים.",
"username-too-short": "שם משתמש קצר מדי",
"username-too-long": "שם משתמש ארוך מדי",
"password-too-long": "הסיסמה ארוכה מדי",
- "reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-rate-limited": "יותר מידי בקשות לאימות סיסמא (הקצב מוגבל)",
+ "reset-same-password": "אנא השתמש בסיסמא שונה מהסיסמא הנוכחית שלך.",
"user-banned": "המשתמש מושעה",
"user-banned-reason": "מצטערים, חשבון זה הורחק (סיבה: %1)",
"user-banned-reason-until": "מצטערים, חשבון זה הורחק עד %1 (סיבה: %2)",
@@ -63,11 +64,11 @@
"post-edit-duration-expired-days": "אתה רשאי לערוך פוסט(ים) רק למשך %1 ימים מרגע פרסומו",
"post-edit-duration-expired-days-hours": "אתה רשאי לערוך פוסט(ים) רק למשך %1 שעות %2 דקות מרגע פרסומו(ם)",
"post-delete-duration-expired": "אתה רשאי למחוק פוסט(ים) רק למשך %1 שניות מרגע פרסומו",
- "post-delete-duration-expired-minutes": "You are only allowed to delete posts for %1 minute(s) after posting",
- "post-delete-duration-expired-minutes-seconds": "You are only allowed to delete posts for %1 minute(s) %2 second(s) after posting",
- "post-delete-duration-expired-hours": "You are only allowed to delete posts for %1 hour(s) after posting",
- "post-delete-duration-expired-hours-minutes": "You are only allowed to delete posts for %1 hour(s) %2 minute(s) after posting",
- "post-delete-duration-expired-days": "You are only allowed to delete posts for %1 day(s) after posting",
+ "post-delete-duration-expired-minutes": "הנך רשאי למחוק תגובה עד %1 דק(ות) מרגע פרסום התגובה.",
+ "post-delete-duration-expired-minutes-seconds": "הנך רשאי למחוק תגובה עד %1 דק(ות) ו-%2 שני(ות) מרגע פרסום התגובה.",
+ "post-delete-duration-expired-hours": "הנך רשאי למחוק תגובה עד %1 שע(ות) מרגע פרסום התגובה.",
+ "post-delete-duration-expired-hours-minutes": "הנך רשאי למחוק פוסט למשך %1 שע(ות) ו-%2 דק(ות) מרגע פרסומו.",
+ "post-delete-duration-expired-days": "אתה רשאי למחוק פוסט(ים) רק למשך %1 ימים מרגע פרסומם",
"post-delete-duration-expired-days-hours": "אתה מורשה למחוק פוסט רק %1 ימים ו %2 שעות אחרי פרסומו",
"cant-delete-topic-has-reply": "אינך יכול למחוק נושא אחרי שכבר הגיבו בו.",
"cant-delete-topic-has-replies": "לא ניתן למחוק את הנושא לאחר שקיבל %1 תגובות",
@@ -85,17 +86,18 @@
"still-uploading": "אנא המתן לסיום ההעלאות",
"file-too-big": "הגודל המקסימלי של הקובץ הוא %1 קילובייט - אנא העלה קובץ קטן יותר",
"guest-upload-disabled": "העלאת אורחים אינה מאופשרת",
- "cors-error": "Unable to upload image due to misconfigured CORS",
+ "cors-error": "לא ניתן להעלות את התמונה עקב שגיאת CORS.",
"already-bookmarked": "כבר הוספת פוסט זה לרשימת המסומנים",
"already-unbookmarked": "כבר הסרת פוסט זה מרשימת המסומנים",
"cant-ban-other-admins": "אינך יכול לחסום מנהלים אחרים!",
"cant-remove-last-admin": "אתה המנהל היחיד. הוסף משתמש אחר לניהול לפני שאתה מוריד את עצמך מניהול",
"cant-delete-admin": "משתמש זה מוגדר כמנהל. על מנת למחוק את המשתמש, עליך להסיר קודם את גישותיו.",
+ "already-deleting": "Already deleting",
"invalid-image": "תמונה לא תקינה",
"invalid-image-type": "פורמט תמונה לא תקין. הפורמטים המורשים הם: %1",
"invalid-image-extension": "פורמט תמונה לא תקין",
"invalid-file-type": "פורמט הקובץ לא תקין. הפורמטים המורשים הם: %1",
- "invalid-image-dimensions": "Image dimensions are too big",
+ "invalid-image-dimensions": "ממדי התמונה גדולים מדי",
"group-name-too-short": "שם הקבוצה קצר מדי",
"group-name-too-long": "שם הקבוצה ארוך מידי",
"group-already-exists": "הקבוצה כבר קיימת",
@@ -105,8 +107,8 @@
"group-needs-owner": "קבוצה זו חייבת לפחות מנהל אחד",
"group-already-invited": "משתמש זה כבר הוזמן",
"group-already-requested": "בקשת החברות שלך כבר נשלחה",
- "group-join-disabled": "You are not able to join this group at this time",
- "group-leave-disabled": "You are not able to leave this group at this time",
+ "group-join-disabled": "אתה לא רשאי להצטרף לקבוצה כרגע",
+ "group-leave-disabled": "אתה לא רשאי לעזוב את הקבוצה כרגע",
"post-already-deleted": "פוסט זה כבר נמחק",
"post-already-restored": "פוסט זה כבר שוחזר",
"topic-already-deleted": "נושא זה כבר נמחק",
@@ -126,34 +128,35 @@
"cant-edit-chat-message": "אתה לא רשאי לערוך הודעה זו",
"cant-remove-last-user": "אינך יכול למחוק את המשתמש האחרון",
"cant-delete-chat-message": "אתה לא רשאי למחוק הודעה זו",
- "chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting",
- "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
- "chat-deleted-already": "This chat message has already been deleted.",
- "chat-restored-already": "This chat message has already been restored.",
+ "chat-edit-duration-expired": "אתה רשאי לערוך הודעות צ'אט רק ל-%1 שניות לאחר הפרסום",
+ "chat-delete-duration-expired": "הנך רשאי למחוק הודעת צ'אט עד %1 דק(ות) מרגע פרסום התגובה.",
+ "chat-deleted-already": "הודעות הצ'אט הזו כבר נמחקה.",
+ "chat-restored-already": "הודעות הצ'אט הזו כבר שוחזרה.",
"already-voting-for-this-post": "הצבעת כבר בנושא זה",
"reputation-system-disabled": "מערכת המוניטין לא פעילה.",
"downvoting-disabled": "היכולת להצביע נגד לא פעילה",
"not-enough-reputation-to-downvote": "אין לך מספיק מוניטין כדי להוריד את הדירוג של פוסט זה",
"not-enough-reputation-to-flag": "אין לך מוניטין מספק על מנת לסמן את הפוסט הזה",
- "not-enough-reputation-min-rep-website": "You do not have enough reputation to add a website",
- "not-enough-reputation-min-rep-aboutme": "You do not have enough reputation to add an about me",
- "not-enough-reputation-min-rep-signature": "You do not have enough reputation to add a signature",
- "not-enough-reputation-min-rep-profile-picture": "You do not have enough reputation to add a profile picture",
- "not-enough-reputation-min-rep-cover-picture": "You do not have enough reputation to add a cover picture",
- "post-already-flagged": "You have already flagged this post",
- "user-already-flagged": "You have already flagged this user",
- "post-flagged-too-many-times": "This post has been flagged by others already",
- "user-flagged-too-many-times": "This user has been flagged by others already",
+ "not-enough-reputation-min-rep-website": "אין לך מספיק מוניטין כדי להוסיף אתר",
+ "not-enough-reputation-min-rep-aboutme": "אין לך מספיק מוניטין כדי להוסיף טקסט אודות",
+ "not-enough-reputation-min-rep-signature": "אין לך מספיק מוניטין כדי להוסיף חתימה",
+ "not-enough-reputation-min-rep-profile-picture": "אין לך מספיק מוניטין כדי להוסיף תמונת פרופיל",
+ "not-enough-reputation-min-rep-cover-picture": "אין לך מספיק מוניטין כדי להוסיף תמונת רקע",
+ "post-already-flagged": "כבר דיווחת על הפוסט הזה",
+ "user-already-flagged": "כבר דיווחת על המשתמש הזה",
+ "post-flagged-too-many-times": "התקבל כבר דיווח על פוסט זה.",
+ "user-flagged-too-many-times": "התקבל דיווח על משתמש זה.",
+ "cant-flag-privileged": "לא ניתן לדווח על מנהלים או על תוכן שנכתב על ידי מנהלים.",
"self-vote": "אי אפשר להצביע בפרסום שיצרת",
- "too-many-downvotes-today": "You can only downvote %1 times a day",
- "too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
+ "too-many-downvotes-today": "אתה יכול להצביע נגד %1 פעמים ביום",
+ "too-many-downvotes-today-user": "אתה יכול להצביע נגד משתמש %1 פעמים ביום",
"reload-failed": "אירעה תקלה ב NodeBB בזמן הטעינה של: \"%1\". המערכת תמשיך להגיש דפים קיימים, אבל כדאי שתשחזר את הפעולות שלך מהפעם האחרונה שהמערכת עבדה כראוי.",
"registration-error": "שגיאה בהרשמה",
"parse-error": "אירעה שגיאה בעת בעת ניתוח תגובת השרת",
"wrong-login-type-email": "בבקשה השתמש בכתובת המייל שלך להתחברות",
"wrong-login-type-username": "בבקשה השתמש בשם המשתמש שלך להתחברות",
"sso-registration-disabled": "ההרשמה בוטלה ל%1 מהחשבונות, תחילה הרשם עם כתובת דוא\"ל בבקשה",
- "sso-multiple-association": "You cannot associate multiple accounts from this service to your NodeBB account. Please dissociate your existing account and try again.",
+ "sso-multiple-association": "אתה לא יכול לחבר מספר חשבונות משירות זה לחשבון שלך. אנא בטל את שיוך החשבון הקיים ונסה שוב.",
"invite-maximum-met": "הזמנת את הכמות המירבית של אנשים (%1 מתוך %2).",
"no-session-found": "לא נמצאו מושבי התחברות!",
"not-in-room": "משתמש זה לא בצ'אט",
@@ -163,13 +166,13 @@
"invalid-session": "מושב לא תואם",
"invalid-session-text": "נראה שסשן ההתחברות שלך כבר לא פעיל. אנא טען מחדש את העמוד.",
"no-topics-selected": "לא נבחרו נושאים!",
- "cant-move-to-same-topic": "Can't move post to same topic!",
- "cant-move-topic-to-same-category": "Can't move topic to the same category!",
- "cannot-block-self": "You cannot block yourself!",
- "cannot-block-privileged": "You cannot block administrators or global moderators",
- "cannot-block-guest": "Guest are not able to block other users",
- "already-blocked": "This user is already blocked",
- "already-unblocked": "This user is already unblocked",
- "no-connection": "There seems to be a problem with your internet connection",
- "plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
+ "cant-move-to-same-topic": "אתה לא יכול להעביר פוסט לאותו נושא!",
+ "cant-move-topic-to-same-category": "לא ניתן להעביר נושא לאותה קטגוריה!",
+ "cannot-block-self": "אתה לא יכול לחסום את עצמך!",
+ "cannot-block-privileged": "אתה לא יכול לחסום מנהלים ראשיים ומנהלים גלובליים",
+ "cannot-block-guest": "אורח לא יכול לחסום משתמשים אחרים",
+ "already-blocked": "המשתמש כבר חסום",
+ "already-unblocked": "המשתמש כבר לא חסום",
+ "no-connection": "נראה שיש בעיות בחיבור האינטרנט שלך..",
+ "plugin-not-whitelisted": "לא ניתן להתקין את התוסף – ניתן להתקין דרך הניהול רק תוספים שנמצאים ברשימה הלבנה של מנהל החבילות של NodeBB."
}
\ No newline at end of file
diff --git a/public/language/he/flags.json b/public/language/he/flags.json
index 1656b0bbf3..fb08ee51c4 100644
--- a/public/language/he/flags.json
+++ b/public/language/he/flags.json
@@ -67,7 +67,7 @@
"sort-upvotes": "הכי הרבה הצבעות",
"sort-replies": "הכי הרבה תגובות",
- "modal-title": "Report Content",
+ "modal-title": "תוכן הדיווח",
"modal-body": "אנא ציין את הסיבה לסימון %1 %2 לצורך בקרה. לחלופין, השתמש באחד מכפתורי הדיווח המהיר אם אפשר.",
"modal-reason-spam": "זבל",
"modal-reason-offensive": "פוגעני",
@@ -79,7 +79,8 @@
"modal-submit-confirm-text": "כבר ציינת סיבה. האם אתה בטוח שאתה רוצה לשלוח על ידי דיווח-מהיר?",
"modal-submit-confirm-text-help": "שליחת דיווח מהיר תבטל כל סיבה קודמת שהוגדרה.",
- "bulk-actions": "Bulk Actions",
+ "bulk-actions": "פעולות כלליות",
"bulk-resolve": "השלם דיווחים",
- "bulk-success": "%1 דיווחים עודכנו"
+ "bulk-success": "%1 דיווחים עודכנו",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/he/ip-blacklist.json b/public/language/he/ip-blacklist.json
index 5f1b6a2ffe..7208f8842b 100644
--- a/public/language/he/ip-blacklist.json
+++ b/public/language/he/ip-blacklist.json
@@ -1,6 +1,6 @@
{
"lead": "רשימת IP שחורה",
- "description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.",
+ "description": "לעיתים, הרחקת חשבון משתמש אינו מספיק כדי להרתיע. בפעמים אחרות, הגבלת הגישה לפורום ל- IP ספציפי או לטווח של IP היא הדרך הטובה ביותר להגן על הפורום. בתרחישים אלה, תוכלו להוסיף כתובות IP מטרידות או טווחי CIDR שלמים לרשימה השחורה הזו, וימנע מהם להיכנס לחשבון חדש או לרשום אותו.",
"active-rules": "כללים פעילים",
"validate": "בדיקת רשימה",
"apply": "החל רשימה",
@@ -14,6 +14,6 @@
"alerts.applied-success": "הרשימה השחורה נשמרה",
"analytics.blacklist-hourly": "Figure 1 – כתובות נחסמו ביחס לשעה.",
- "analytics.blacklist-daily": "Figure 2 – Blacklist hits per day",
+ "analytics.blacklist-daily": "Figure 2 – כתובות נחסמו ביחס ליום.",
"ip-banned": "כתובת הIP הורחקה."
}
\ No newline at end of file
diff --git a/public/language/he/notifications.json b/public/language/he/notifications.json
index 797ca6f387..e66baf911a 100644
--- a/public/language/he/notifications.json
+++ b/public/language/he/notifications.json
@@ -35,7 +35,7 @@
"user_posted_to_dual": "%1 ו%2 הגיבו ל: %3",
"user_posted_to_multiple": "%1 ו%2 אחרים הגיבו ל: %3",
"user_posted_topic": "%1 העלה נושא חדש: %2",
- "user_edited_post": "%1 has edited a post in %2",
+ "user_edited_post": "%1 ערך פוסט ב%2",
"user_started_following_you": "%1 התחיל לעקוב אחריך.",
"user_started_following_you_dual": "%1 ו-%2 התחילו לעקוב אחריך.",
"user_started_following_you_multiple": "%1 ו%2 התחילו לעקוב אחריך.",
@@ -43,9 +43,10 @@
"new_register_multiple": "ישנן %1 בקשות הרשמה שמחכות לבדיקה.",
"flag_assigned_to_you": "דיווח %1 הוקצה עבורך",
"post_awaiting_review": "הפוסט ממתין לאישור",
- "profile-exported": "%1 profile exported, click to download",
- "posts-exported": "%1 posts exported, click to download",
- "uploads-exported": "%1 uploads exported, click to download",
+ "profile-exported": "%1 פרופיל יוצא, לחץ כדי להוריד.",
+ "posts-exported": "%1 פוסטים יוצאו, לחץ כדי להוריד.",
+ "uploads-exported": "%1 העלאות יוצאו, לחץ כדי להוריד.",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "כתובת המייל אושרה",
"email-confirmed-message": "תודה שאישרת את כתובת המייל שלך. החשבון שלך פעיל כעת.",
"email-confirm-error-message": "אירעה שגיאה בעת אישור המייל שלך. ייתכן כי הקוד היה שגוי או פג תוקף.",
@@ -56,13 +57,14 @@
"notification_and_email": "התראות & דוא\"ל",
"notificationType_upvote": "כאשר מישהו מצביע בעד הפוסט שלך",
"notificationType_new-topic": "כשמישהו שאתה עוקב אחריו פרסם נושא",
- "notificationType_new-reply": "כשתגובה חדשה מפורסמת בנושא שאתה צופה בו",
- "notificationType_post-edit": "When a post is edited in a topic you are watching",
+ "notificationType_new-reply": "כשתגובה חדשה מפורסמת בנושא שאתה עוקב אחריו",
+ "notificationType_post-edit": "כשפוסט נערך בנושא שאתה עוקב אחריו",
"notificationType_follow": "כשמישהו מתחיל לעקוב אחריך",
"notificationType_new-chat": "כשאתה מקבל הודעת צאט",
- "notificationType_new-group-chat": "When you receive a group chat message",
+ "notificationType_new-group-chat": "כשאתה מקבל הודעת צ'אט קבוצתית",
"notificationType_group-invite": "כשאתה מקבל הזמנה מקבוצה",
- "notificationType_group-request-membership": "When someone requests to join a group you own",
+ "notificationType_group-leave": "When a user leaves your group",
+ "notificationType_group-request-membership": "כשמישהו מבקש להירשם לקבוצה שאתה מנהל",
"notificationType_new-register": "כאשר מישהו מתווסף לתור הרישום",
"notificationType_post-queue": "כשהודעה חדשה נכנסת לתור",
"notificationType_new-post-flag": "כאשר פוסט מסומן",
diff --git a/public/language/he/register.json b/public/language/he/register.json
index 5e66599e67..0905771a84 100644
--- a/public/language/he/register.json
+++ b/public/language/he/register.json
@@ -18,8 +18,8 @@
"agree_to_terms_of_use": "אני מסכים לתנאי השימוש",
"terms_of_use_error": "אתה מוכרח להסכים לתנאי השימוש",
"registration-added-to-queue": "הבקשה שלך להרשמה נשלחה. תקבל בקרוב מייל אישור לכתובת האימייל שהכנסת כשמנהל יאשר את הבקשה.",
- "registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
- "registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
+ "registration-queue-average-time": "הזמן הממוצע לאישור משתמשים הוא %1 שעות ו-%2 דקות.",
+ "registration-queue-auto-approve-time": "חשבונך יאושר תוך %1 שעות.",
"interstitial.intro": "אנו דורשים מידע נוסף לפני שנוכל ליצור עבורך את החשבון.",
"interstitial.errors-found": "לא הצלחנו להשלים את הרישום שלך:",
"gdpr_agree_data": "אני מסכים שפורום זה יאגור ויעבד את נתוני האישיים",
diff --git a/public/language/he/reset_password.json b/public/language/he/reset_password.json
index 10f58e8c7c..38f8fa4b3e 100644
--- a/public/language/he/reset_password.json
+++ b/public/language/he/reset_password.json
@@ -7,10 +7,10 @@
"wrong_reset_code.message": "קוד האיפוס שקבלנו שגוי. אנא נסה שוב, או בקש קוד איפוס חדש.",
"new_password": "סיסמה חדשה",
"repeat_password": "אמת סיסמה",
- "changing_password": "Changing Password",
+ "changing_password": "משנה סיסמה",
"enter_email": "אנא הקלד את כתובת האימייל שלך ואנו נשלח לך הוראות כיצד לאפס את חשבונך",
"enter_email_address": "הכנס כתובת אימייל",
- "password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.",
+ "password_reset_sent": "אם כתובת המייל משוייכת לחשבון קיים, לכתובת המוגדרת נשלח מייל לשחזור חשבון. שים לב שרק מייל שחזור אחד ישלח כל דקה.",
"invalid_email": "מייל שגוי / כתובת מייל לא נמצאה",
"password_too_short": "הסיסמה שבחרת קצרה מדי, אנא בחר סיסמה שונה.",
"passwords_do_not_match": "הסיסמאות שהזנת אינן תואמות.",
diff --git a/public/language/he/search.json b/public/language/he/search.json
index a6682f3938..fcad1a9ea0 100644
--- a/public/language/he/search.json
+++ b/public/language/he/search.json
@@ -31,7 +31,7 @@
"sort-by": "סדר על-פי",
"last-reply-time": "תאריך תגובה אחרון",
"topic-title": "כותרת הנושא",
- "topic-votes": "Topic votes",
+ "topic-votes": "הצבעות בנושא",
"number-of-replies": "מספר התגובות",
"number-of-views": "מספר הצפיות",
"topic-start-date": "זמן תחילת הנושא",
@@ -44,6 +44,6 @@
"search-preferences-saved": "חפש העדפות שנשמרו",
"search-preferences-cleared": "חפש העדפות שנוקו",
"show-results-as": "צפה בתוצאות בתור",
- "see-more-results": "See more results (%1)",
- "search-in-category": "Search in \"%1\""
+ "see-more-results": "צפה בתוצאות נוספות (%1)",
+ "search-in-category": "חפש ב-\"%1\""
}
\ No newline at end of file
diff --git a/public/language/he/tags.json b/public/language/he/tags.json
index 1e52cbc67c..6604da7815 100644
--- a/public/language/he/tags.json
+++ b/public/language/he/tags.json
@@ -4,5 +4,5 @@
"enter_tags_here": "הכנס תגים כאן, כאשר כל אחד בין %1 ל%2 תווים.",
"enter_tags_here_short": "הכנס תגיות",
"no_tags": "אין עדיין תגיות.",
- "select_tags": "Select Tags"
+ "select_tags": "בחר תגיות"
}
\ No newline at end of file
diff --git a/public/language/he/topic.json b/public/language/he/topic.json
index f7f3c94bff..300b6ad245 100644
--- a/public/language/he/topic.json
+++ b/public/language/he/topic.json
@@ -29,6 +29,7 @@
"tools": "כלים",
"locked": "נעול",
"pinned": "נעוץ",
+ "pinned-with-expiry": "נעוץ עד %1",
"moved": "הועבר",
"moved-from": "הועבר מ-%1",
"copy-ip": "העתק IP",
diff --git a/public/language/he/users.json b/public/language/he/users.json
index 86d603aaf6..eb9adf7bea 100644
--- a/public/language/he/users.json
+++ b/public/language/he/users.json
@@ -11,7 +11,7 @@
"online-only": "אונליין בלבד",
"invite": "הזמן",
"prompt-email": "מיילים:",
- "groups-to-join": "Groups to be joined when invite is accepted:",
+ "groups-to-join": "קבוצות שתירשם אליהם כאשר ההזמנה תאושר:",
"invitation-email-sent": "מייל הזמנה נשלח ל%1",
"user_list": "רשימת משתמשים",
"recent_topics": "נושאים אחרונים",
diff --git a/public/language/hr/admin/manage/categories.json b/public/language/hr/admin/manage/categories.json
index 04b179e061..d2f9918b88 100644
--- a/public/language/hr/admin/manage/categories.json
+++ b/public/language/hr/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# nedavnih objava",
"ext-link": "Vanjska poveznica",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Učitaj sliku",
"delete-image": "Ukloni",
diff --git a/public/language/hr/admin/manage/privileges.json b/public/language/hr/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/hr/admin/manage/privileges.json
+++ b/public/language/hr/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/hr/admin/manage/tags.json b/public/language/hr/admin/manage/tags.json
index 8e06024ebf..896330b733 100644
--- a/public/language/hr/admin/manage/tags.json
+++ b/public/language/hr/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Želite li obrisati odabrane oznake?",
- "alerts.update-success": "Oznake promijenjene!"
+ "alerts.update-success": "Oznake promijenjene!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/hr/admin/manage/users.json b/public/language/hr/admin/manage/users.json
index 2c5159a8a1..62ab61921a 100644
--- a/public/language/hr/admin/manage/users.json
+++ b/public/language/hr/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "Email pozivnica je poslana %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/hr/error.json b/public/language/hr/error.json
index be8b52316f..4597569952 100644
--- a/public/language/hr/error.json
+++ b/public/language/hr/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Korisničko ime predugo",
"password-too-long": "Lozinka je preduga",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Korisnik blokiran",
"user-banned-reason": "Ovaj račun je blokiran (Razlog: %1)",
"user-banned-reason-until": "Ovaj račun je blokiran do %1 (Razlog: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nemožete blokirati ostale administratore!",
"cant-remove-last-admin": "Vi ste jedini administrator. Dodajte korisnika kao administratora prije nego sebe odjavite kao administratora.",
"cant-delete-admin": "Ukloni administratorske privilegije sa ovog računa prije brisanja.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Pogrešan format slike. Dozvoljeni formati: %1",
"invalid-image-extension": "Kriva ekstezija slike",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/hr/flags.json b/public/language/hr/flags.json
index 6c1761dfe4..65f5cc3d72 100644
--- a/public/language/hr/flags.json
+++ b/public/language/hr/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/hr/notifications.json b/public/language/hr/notifications.json
index 4e43f28e4d..0db4e82c4f 100644
--- a/public/language/hr/notifications.json
+++ b/public/language/hr/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email potvrđen",
"email-confirmed-message": "Hvala na potvrdi emaila. Vaš račun je sada aktivan.",
"email-confirm-error-message": "Nastao je problem pri potvrdi Vaše email adrese. Provjerite kod ili zatražite novi.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/hr/topic.json b/public/language/hr/topic.json
index fd3c6ce0a3..a27401f276 100644
--- a/public/language/hr/topic.json
+++ b/public/language/hr/topic.json
@@ -29,6 +29,7 @@
"tools": "Alati",
"locked": "Zaključano",
"pinned": "Zakačeno",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Premješteno",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/hu/admin/manage/categories.json b/public/language/hu/admin/manage/categories.json
index 05c332f72c..1cc2bde549 100644
--- a/public/language/hu/admin/manage/categories.json
+++ b/public/language/hu/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "Utóbbi válaszok száma",
"ext-link": "Külső link",
"is-section": "Ez a kategória legyen szakaszként kezelve",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Kép feltöltése",
"delete-image": "Törlés",
diff --git a/public/language/hu/admin/manage/privileges.json b/public/language/hu/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/hu/admin/manage/privileges.json
+++ b/public/language/hu/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/hu/admin/manage/tags.json b/public/language/hu/admin/manage/tags.json
index 4f8ccebc0c..eaab0d5e3e 100644
--- a/public/language/hu/admin/manage/tags.json
+++ b/public/language/hu/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Biztosan törölni akarod a kijelölt címkéket?",
- "alerts.update-success": "Címke frissítve!"
+ "alerts.update-success": "Címke frissítve!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/hu/admin/manage/users.json b/public/language/hu/admin/manage/users.json
index 02b914aa3d..101f11cc89 100644
--- a/public/language/hu/admin/manage/users.json
+++ b/public/language/hu/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "Meghívó email elküldve %1 részére",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/hu/error.json b/public/language/hu/error.json
index ec4ab33aff..3600815d47 100644
--- a/public/language/hu/error.json
+++ b/public/language/hu/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Túl hosszú felhasználónév",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Kitiltott felhasználó",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nem tilthatsz ki másik adminisztrátort!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Érvénytelen a kép típusa. Engedett kiterjesztések: %1",
"invalid-image-extension": "Érvénytelen a kép kiterjesztése",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/hu/flags.json b/public/language/hu/flags.json
index 9bf2b38188..622cb941f8 100644
--- a/public/language/hu/flags.json
+++ b/public/language/hu/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/hu/notifications.json b/public/language/hu/notifications.json
index 46b386ca38..85b82c04bc 100644
--- a/public/language/hu/notifications.json
+++ b/public/language/hu/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mail megerősítve",
"email-confirmed-message": "Köszönjük az e-mail címed megerősítését. A fiókod mostantól teljesen aktiválva van.",
"email-confirm-error-message": "Probléma lépett fel az e-mail címed megerősítésekor. Talán a kód érvénytelen volt vagy lejárt.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Mikor chat üzenetet kapsz",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Mikor csoportmeghívást kapsz",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "Mikor valaki a regisztrációs várólistára kerül",
"notificationType_post-queue": "Mikor egy új hozzászólás várólistára kerül",
diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json
index b5ddcc01db..889c0c8289 100644
--- a/public/language/hu/topic.json
+++ b/public/language/hu/topic.json
@@ -29,6 +29,7 @@
"tools": "Eszközök",
"locked": "Zárolva",
"pinned": "Rögzített",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Áthelyezett",
"moved-from": "Moved from %1",
"copy-ip": "IP-cím másolása",
diff --git a/public/language/id/admin/manage/categories.json b/public/language/id/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/id/admin/manage/categories.json
+++ b/public/language/id/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/id/admin/manage/privileges.json b/public/language/id/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/id/admin/manage/privileges.json
+++ b/public/language/id/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/id/admin/manage/tags.json b/public/language/id/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/id/admin/manage/tags.json
+++ b/public/language/id/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/id/admin/manage/users.json b/public/language/id/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/id/admin/manage/users.json
+++ b/public/language/id/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/id/error.json b/public/language/id/error.json
index 615ee12b07..126ab1aa84 100644
--- a/public/language/id/error.json
+++ b/public/language/id/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Username terlalu panjang",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Pengguna dibanned",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Kamu tidak dapat ban admin lainnya!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/id/flags.json b/public/language/id/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/id/flags.json
+++ b/public/language/id/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/id/notifications.json b/public/language/id/notifications.json
index 57f60009db..a4b823d82b 100644
--- a/public/language/id/notifications.json
+++ b/public/language/id/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email telah Dikonfirmasi",
"email-confirmed-message": "Terimakasih telah melakukan validasi email. Akunmu saat ini telah aktif sepenuhnya.",
"email-confirm-error-message": "Terjadi masalah saat melakukan validasi emailmu. Mungkin terjadi kesalahan kode atau waktu habis.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/id/topic.json b/public/language/id/topic.json
index 93a3d03f86..d806d3d2b4 100644
--- a/public/language/id/topic.json
+++ b/public/language/id/topic.json
@@ -29,6 +29,7 @@
"tools": "Perangkat",
"locked": "Terkunci",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/it/admin/manage/categories.json b/public/language/it/admin/manage/categories.json
index 2acc31d700..83ee747fef 100644
--- a/public/language/it/admin/manage/categories.json
+++ b/public/language/it/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# di Repliche Recenti",
"ext-link": "Link esterni",
"is-section": "Tratta questa categoria come una sezione",
+ "post-queue": "Post queue",
"tag-whitelist": "Whitelist tag",
"upload-image": "Caricamento Immagine",
"delete-image": "Rimuove",
diff --git a/public/language/it/admin/manage/privileges.json b/public/language/it/admin/manage/privileges.json
index 1d3327aab7..0b45ece233 100644
--- a/public/language/it/admin/manage/privileges.json
+++ b/public/language/it/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Privilegi di gruppo",
"user-privileges": "Privilegi utente",
"edit-privileges": "Modifica privilegi",
+ "select-clear-all": "Seleziona/Cancella tutto",
"chat": "Chat",
"upload-images": "Carica immagini",
"upload-files": "Carica file",
diff --git a/public/language/it/admin/manage/tags.json b/public/language/it/admin/manage/tags.json
index 330fb2b6d4..13b4822ec2 100644
--- a/public/language/it/admin/manage/tags.json
+++ b/public/language/it/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Modifica tag(s)",
"alerts.confirm-delete": "Vuoi eliminare i tag selezionati?",
- "alerts.update-success": "Tag aggiornato!"
+ "alerts.update-success": "Tag aggiornato!",
+ "reset-colors": "Reimposta i colori"
}
\ No newline at end of file
diff --git a/public/language/it/admin/manage/users.json b/public/language/it/admin/manage/users.json
index e50ac05793..7e26579712 100644
--- a/public/language/it/admin/manage/users.json
+++ b/public/language/it/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails:",
"alerts.email-sent-to": "Un invito è stato inviato tramite mail a %1",
- "alerts.x-users-found": "%1 utente(i) trovato(i), (%2 secondi)"
+ "alerts.x-users-found": "%1 utente(i) trovato(i), (%2 secondi)",
+ "export-users-started": "L'esportazione di utenti come csv potrebbe richiedere del tempo. Riceverai una notifica al termine.",
+ "export-users-completed": "Utenti esportati come csv, clicca qui per scaricare."
}
\ No newline at end of file
diff --git a/public/language/it/admin/settings/api.json b/public/language/it/admin/settings/api.json
index cb4a2e1cea..74e57044a0 100644
--- a/public/language/it/admin/settings/api.json
+++ b/public/language/it/admin/settings/api.json
@@ -1,12 +1,12 @@
{
"tokens": "Token",
- "settings": "Settings",
+ "settings": "Impostazioni",
"lead-text": "Da questa pagina è possibile configurare l'accesso alle API di scrittura in NodeBB.",
"intro": "Per impostazione predefinita, l'API di scrittura autentica gli utenti in base al cookie di sessione, ma NodeBB supporta anche l'autenticazione Bearer tramite token generati tramite questa pagina.",
"docs": "Clicca qui per accedere alle specifiche complete dell'API",
- "require-https": "Require API usage via HTTPS only",
- "require-https-caveat": "Note: Some installations involving load balancers may proxy their requests to NodeBB using HTTP, in which case this option should remain disabled.",
+ "require-https": "Richiedi utilizzo API solo tramite HTTPS",
+ "require-https-caveat": "Nota:Alcune installazioni che coinvolgono bilanciatori del carico possono inviare tramite proxy le loro richieste a NodeBB utilizzando HTTP, nel qual caso questa opzione dovrebbe rimanere disabilitata.",
"uid": "ID utente",
"uid-help-text": "Specificare un ID utente da associare a questo token. Se l'ID utente è 0, sarà considerato un token master, che può assumere l'identità di altri utenti in base al parametro _uid",
diff --git a/public/language/it/error.json b/public/language/it/error.json
index c5fcbb72fb..43fa850d46 100644
--- a/public/language/it/error.json
+++ b/public/language/it/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nome utente troppo lungo",
"password-too-long": "Password troppo lunga",
"reset-rate-limited": "Troppe richieste di reimpostazione password (richieste limitate)",
+ "reset-same-password": "Si prega di utilizzare una password diversa da quella attuale",
"user-banned": "Utente bannato",
"user-banned-reason": "Spiacente, questo account è stato bannato (Motivazione: %1)",
"user-banned-reason-until": "Spiacente, questo account è stato bannato fino a %1 (Motivazione: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Non puoi bannare altri amministratori!",
"cant-remove-last-admin": "Sei l'unico Amministratore. Aggiungi un altro amministratore prima di rimuovere il tuo ruolo",
"cant-delete-admin": "Togli i privilegi amministrativi da questo account prima di provare ad eliminarlo.",
+ "already-deleting": "Already deleting",
"invalid-image": "Immagine non Valida",
"invalid-image-type": "Tipo dell'immagine non valido. I tipi permessi sono: %1",
"invalid-image-extension": "Estensione immagine non valida",
@@ -144,6 +146,7 @@
"user-already-flagged": "Hai già segnalato questo utente",
"post-flagged-too-many-times": "Questo post è già stato segnalato da altri",
"user-flagged-too-many-times": "Questo utente è già stato segnalato da altri",
+ "cant-flag-privileged": "Non è consentito contrassegnare i profili o il contenuto degli utenti privilegiati (moderatori/moderatori globali/amministratori)",
"self-vote": "Non puoi votare la tua stessa discussione",
"too-many-downvotes-today": "È possibile votare negativamente solo %1 volta al giorno",
"too-many-downvotes-today-user": "È possibile votare negativamente un utente solo %1 volta al giorno",
diff --git a/public/language/it/flags.json b/public/language/it/flags.json
index 040fcbbac6..0f6d17c1e4 100644
--- a/public/language/it/flags.json
+++ b/public/language/it/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Azioni in blocco",
"bulk-resolve": "Risoluzione segnalazione(i)",
- "bulk-success": "%1 segnalazioni aggiornate"
+ "bulk-success": "%1 segnalazioni aggiornate",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/it/notifications.json b/public/language/it/notifications.json
index 567d3bc315..8e51460e8c 100644
--- a/public/language/it/notifications.json
+++ b/public/language/it/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profilo esportato, clicca per scaricare",
"posts-exported": "%1 post esportati, clicca per scaricare",
"uploads-exported": "%1 caricamenti esportati, clicca per scaricare",
+ "users-csv-exported": "Utenti esportati in CSV, clicca per scaricare",
"email-confirmed": "Email Confermata",
"email-confirmed-message": "Grazie per aver validato la tua email. Il tuo account è ora completamente attivato.",
"email-confirm-error-message": "C'è stato un problema nella validazione del tuo indirizzo email. Potrebbe essere il codice non valido o scaduto.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Quando ricevi un messaggio in chat",
"notificationType_new-group-chat": "Quando ricevi un messaggio di chat di gruppo",
"notificationType_group-invite": "Quando ricevi un invito ad un gruppo",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Quando qualcuno richiede di iscriversi a un gruppo di tua proprietà",
"notificationType_new-register": "Quando qualcuno è in attesa della registrazione",
"notificationType_post-queue": "Quando un nuovo post è in attesa",
diff --git a/public/language/it/topic.json b/public/language/it/topic.json
index 4de7332d7d..7e550482fb 100644
--- a/public/language/it/topic.json
+++ b/public/language/it/topic.json
@@ -29,6 +29,7 @@
"tools": "Strumenti",
"locked": "Bloccato",
"pinned": "Appeso",
+ "pinned-with-expiry": "Bloccato fino al %1",
"moved": "Spostato",
"moved-from": "Spostato da %1",
"copy-ip": "Copia indirizzo IP",
diff --git a/public/language/ja/admin/manage/categories.json b/public/language/ja/admin/manage/categories.json
index 8772c567e7..c1cf6cefcb 100644
--- a/public/language/ja/admin/manage/categories.json
+++ b/public/language/ja/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# 最近の返信数",
"ext-link": "外部リンク",
"is-section": "このカテゴリをセクションとして扱う",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "画像をアップロード",
"delete-image": "削除",
diff --git a/public/language/ja/admin/manage/privileges.json b/public/language/ja/admin/manage/privileges.json
index c747ae74fd..8afef9882b 100644
--- a/public/language/ja/admin/manage/privileges.json
+++ b/public/language/ja/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "チャット",
"upload-images": "画像をアップロード",
"upload-files": "ファイルをアップロード",
diff --git a/public/language/ja/admin/manage/tags.json b/public/language/ja/admin/manage/tags.json
index b91a7e70ed..c4527324bd 100644
--- a/public/language/ja/admin/manage/tags.json
+++ b/public/language/ja/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "選択したタグを削除しますか?",
- "alerts.update-success": "タグが更新されました!"
+ "alerts.update-success": "タグが更新されました!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/ja/admin/manage/users.json b/public/language/ja/admin/manage/users.json
index 945dd5b912..749eb52751 100644
--- a/public/language/ja/admin/manage/users.json
+++ b/public/language/ja/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "メール:",
"alerts.email-sent-to": "招待メールが%1に送られました。",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/ja/error.json b/public/language/ja/error.json
index 29e9d24829..1b6a278b6a 100644
--- a/public/language/ja/error.json
+++ b/public/language/ja/error.json
@@ -40,6 +40,7 @@
"username-too-long": "ユーザー名が長すぎます",
"password-too-long": "パスワードが長すぎます",
"reset-rate-limited": "パスワードのリセット要求が多すぎます。(料金制限あり)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "ユーザーは停止されています",
"user-banned-reason": "申し訳ありませんが、このアカウントは停止されています。 (理由: %1)",
"user-banned-reason-until": "申し訳ありませんが、このアカウントは%1(理由:%2)まで禁止されています。",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "ほかの管理者を停止することはできません!",
"cant-remove-last-admin": "あなたが唯一の管理者です。管理者としてあなた自身を削除する前に、管理者として別のユーザーを追加します。",
"cant-delete-admin": "削除する前に、このアカウントから管理者権限を削除してください。",
+ "already-deleting": "Already deleting",
"invalid-image": "無効な画像",
"invalid-image-type": "無効なイメージタイプです。許可された種類は: %1",
"invalid-image-extension": "無効なイメージのエクステンション",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "自分のポストに評価することはできません。",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/ja/flags.json b/public/language/ja/flags.json
index df5a7713d4..4c22aff146 100644
--- a/public/language/ja/flags.json
+++ b/public/language/ja/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/ja/notifications.json b/public/language/ja/notifications.json
index 7686ab1f78..07b5857a37 100644
--- a/public/language/ja/notifications.json
+++ b/public/language/ja/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Eメールが確認されました",
"email-confirmed-message": "メールアドレス検証をして頂き、ありがとうございます。あなたのアカウントは完全にアクティブになりました。",
"email-confirm-error-message": "あなたのEメールアドレス検証に問題があります。コードが無効か、期限切れです。",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "チャットメッセージを受信したとき",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "グループ招待を受けたとき",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "誰かがあなたのグループへの参加を要求したとき",
"notificationType_new-register": "誰かが登録キューに追加されたとき",
"notificationType_post-queue": "新しい投稿がキューに入ったとき",
diff --git a/public/language/ja/topic.json b/public/language/ja/topic.json
index 9c1bb2accf..d02cf2f6fe 100644
--- a/public/language/ja/topic.json
+++ b/public/language/ja/topic.json
@@ -29,6 +29,7 @@
"tools": "ツール",
"locked": "ロック",
"pinned": "ピンされた",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "移動しました",
"moved-from": "Moved from %1",
"copy-ip": "IPをコピー",
diff --git a/public/language/ko/admin/manage/categories.json b/public/language/ko/admin/manage/categories.json
index 8d71761706..1a7ceadfa3 100644
--- a/public/language/ko/admin/manage/categories.json
+++ b/public/language/ko/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "최근 답장 갯수",
"ext-link": "외부 링크",
"is-section": "이 게시판을 섹션으로 취급",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "이미지 업로드",
"delete-image": "삭제",
diff --git a/public/language/ko/admin/manage/privileges.json b/public/language/ko/admin/manage/privileges.json
index 797e19bd85..f135f9a1b8 100644
--- a/public/language/ko/admin/manage/privileges.json
+++ b/public/language/ko/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "대화",
"upload-images": "이미지 업로드",
"upload-files": "파일 업로드",
diff --git a/public/language/ko/admin/manage/tags.json b/public/language/ko/admin/manage/tags.json
index c45148e32e..cef6411323 100644
--- a/public/language/ko/admin/manage/tags.json
+++ b/public/language/ko/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "선택된 태그들을 삭제하시겠습니까?",
- "alerts.update-success": "태그가 업데이트 됐습니다! "
+ "alerts.update-success": "태그가 업데이트 됐습니다! ",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/ko/admin/manage/users.json b/public/language/ko/admin/manage/users.json
index 547bd5b3ea..36bb82be32 100644
--- a/public/language/ko/admin/manage/users.json
+++ b/public/language/ko/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "이메일:",
"alerts.email-sent-to": "%1에게 초대 이메일이 발송됐습니다.",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/ko/error.json b/public/language/ko/error.json
index b6c411577e..e613a0268d 100644
--- a/public/language/ko/error.json
+++ b/public/language/ko/error.json
@@ -40,6 +40,7 @@
"username-too-long": "사용자 이름이 너무 깁니다.",
"password-too-long": "패스워드가 너무 깁니다.",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "차단된 사용자입니다.",
"user-banned-reason": "죄송합니다. 해당 계정은 차단되었습니다. (사유: %1)",
"user-banned-reason-until": "죄송합니다. 해당 계정은 %1 까지 차단되었습니다. (사유: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "다른 관리자를 차단할 수 없습니다.",
"cant-remove-last-admin": "귀하는 유일한 관리자입니다. 관리자를 그만두시기 전에 다른 사용자를 관리자로 임명하세요.",
"cant-delete-admin": "해당 계정을 삭제하기 전에 관리자 권한을 해제 해주십시오.",
+ "already-deleting": "Already deleting",
"invalid-image": "올바르지 않은 이미지입니다.",
"invalid-image-type": "올바르지 않은 이미지입니다. 사용가능한 유형: %1",
"invalid-image-extension": "올바르지 않은 이미지 확장자입니다.",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "자신의 게시물에는 투표 할 수 없습니다.",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/ko/flags.json b/public/language/ko/flags.json
index 4e0218d708..41c294b949 100644
--- a/public/language/ko/flags.json
+++ b/public/language/ko/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json
index b0b29021d9..1a688f0880 100644
--- a/public/language/ko/notifications.json
+++ b/public/language/ko/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "이메일 인증 되었습니다",
"email-confirmed-message": "이메일을 인증해주셔서 감사합니다. 계정이 완전히 활성화되었습니다.",
"email-confirm-error-message": "이메일 주소를 인증하지 못했습니다. 코드가 올바르지 않거나 만료 되었을 수 있습니다.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "채팅 메시지를 받으면",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "그룹 초대를 받으면",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "누군가가 당신이 소유한 그룹에 참여를 요청했을 때",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "새로운 게시글이 등록되었을 때",
diff --git a/public/language/ko/topic.json b/public/language/ko/topic.json
index f28052fc2a..aa8dc7edaa 100644
--- a/public/language/ko/topic.json
+++ b/public/language/ko/topic.json
@@ -29,6 +29,7 @@
"tools": "도구",
"locked": "잠긴 게시물",
"pinned": "고정된 게시물",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "이동된 게시물",
"moved-from": "Moved from %1",
"copy-ip": "IP 복사",
diff --git a/public/language/lt/admin/manage/categories.json b/public/language/lt/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/lt/admin/manage/categories.json
+++ b/public/language/lt/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/lt/admin/manage/privileges.json b/public/language/lt/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/lt/admin/manage/privileges.json
+++ b/public/language/lt/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/lt/admin/manage/tags.json b/public/language/lt/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/lt/admin/manage/tags.json
+++ b/public/language/lt/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/lt/admin/manage/users.json b/public/language/lt/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/lt/admin/manage/users.json
+++ b/public/language/lt/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/lt/error.json b/public/language/lt/error.json
index 3f1535d6d3..931d7555d1 100644
--- a/public/language/lt/error.json
+++ b/public/language/lt/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Vartotojo vardas per ilgas",
"password-too-long": "Slaptažodis per ilgas",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Vartotojas užblokuotas",
"user-banned-reason": "Atsiprašome, ši paskyra buvo užblokuota (Priežastis: %1)",
"user-banned-reason-until": "Atsiprašome, ši paskyra užblokuota iki %1 (Priežastis: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Jūs negalite užblokuoti kitų administratorių!",
"cant-remove-last-admin": "Jūs esate vienintelis administratorius. Pridėkite kitą vartotoja kaip administratorių prieš pašalindamas save",
"cant-delete-admin": "Pašalinkite administratoriaus teises šiai paskyrai prieš bandydami ją ištrinti.",
+ "already-deleting": "Already deleting",
"invalid-image": "Blogas paveikslėlis",
"invalid-image-type": "Neteisingas vaizdo tipas. Leidžiami tipai :%1",
"invalid-image-extension": "Neteisingas vaizdo plėtinys",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Negalima balsuoti už savo įrašą",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/lt/flags.json b/public/language/lt/flags.json
index 1977059a92..7c026fd99e 100644
--- a/public/language/lt/flags.json
+++ b/public/language/lt/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/lt/notifications.json b/public/language/lt/notifications.json
index c7f4446e04..3177907282 100644
--- a/public/language/lt/notifications.json
+++ b/public/language/lt/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "El. paštas patvirtintas",
"email-confirmed-message": "Dėkojame už el. pašto patvirtinimą. Jūsų paskyra pilnai aktyvuota.",
"email-confirm-error-message": "Įvyko klaida mėginant patvirtinti Jūsų el. pašto adresą. Galbūt kodas yra neteisingas, arba nebegalioajantis.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json
index a6c2f24fe4..1a6ac1157e 100644
--- a/public/language/lt/topic.json
+++ b/public/language/lt/topic.json
@@ -29,6 +29,7 @@
"tools": "Įrankiai",
"locked": "Užrakinta",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Perkelta",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/lv/admin/manage/categories.json b/public/language/lv/admin/manage/categories.json
index 8e7668ecb5..cc26e49fbc 100644
--- a/public/language/lv/admin/manage/categories.json
+++ b/public/language/lv/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "Neseno atbilžu skaits",
"ext-link": "Ārējā saite",
"is-section": "Izmantot kategoriju kā sadaļu",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Augšupielādēt bildi",
"delete-image": "Noņemt",
diff --git a/public/language/lv/admin/manage/privileges.json b/public/language/lv/admin/manage/privileges.json
index 3a030df713..1bd5ca057c 100644
--- a/public/language/lv/admin/manage/privileges.json
+++ b/public/language/lv/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Sarunāties",
"upload-images": "Augšupielādēt bildes",
"upload-files": "Augšupielādēt failus",
diff --git a/public/language/lv/admin/manage/tags.json b/public/language/lv/admin/manage/tags.json
index 4fa0d518bd..81a6b55e69 100644
--- a/public/language/lv/admin/manage/tags.json
+++ b/public/language/lv/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Vai vēlies izdzēst šīs birkas?",
- "alerts.update-success": "Birka atjaunināta!"
+ "alerts.update-success": "Birka atjaunināta!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/lv/admin/manage/users.json b/public/language/lv/admin/manage/users.json
index 6858618b4c..7e0c24c196 100644
--- a/public/language/lv/admin/manage/users.json
+++ b/public/language/lv/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "E-pasta adreses:",
"alerts.email-sent-to": "Ielūguma e-pasts ir nosūtīts %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/lv/error.json b/public/language/lv/error.json
index a206838a88..48b057d504 100644
--- a/public/language/lv/error.json
+++ b/public/language/lv/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Pārāk garš lietotājvārds",
"password-too-long": "Pārāk gara parole",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Lietotājs ir bloķēts",
"user-banned-reason": "Diemžēl šis konts ir bloķēts (Iemesls: %1)",
"user-banned-reason-until": "Diemžēl šis konts ir bloķēts līdz %1 (Iemesls: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nevar bloķēt citus administratorus!",
"cant-remove-last-admin": "Tu esi vienīgais administrators. Pievieno vēl vienu lietotāju kā administratoru, pirms noņemi sevi kā administratoru",
"cant-delete-admin": "Noņemi administratora tiesības no šī konta, pirms mēģināt to izdzēst.",
+ "already-deleting": "Already deleting",
"invalid-image": "Nederīgs attēls",
"invalid-image-type": "Nederīgs attēla veids. Atļautie veidi ir: %1",
"invalid-image-extension": "Nederīgs attēla paplašinājums",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Nevar balsot pats par savu rakstu",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/lv/flags.json b/public/language/lv/flags.json
index 9132179172..744bd2d23c 100644
--- a/public/language/lv/flags.json
+++ b/public/language/lv/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/lv/notifications.json b/public/language/lv/notifications.json
index cced8052fe..40601196ef 100644
--- a/public/language/lv/notifications.json
+++ b/public/language/lv/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-pasta adrese ir apstiprināta",
"email-confirmed-message": "Paldies, ka apstiprināji e-pasta adresi. Tavs konts tagad ir pilnībā aktivizēts.",
"email-confirm-error-message": "Tavā e-pasta adreses apstiprināšanā radās problēma. Iespējams, kods ir nederīgs vai ir beidzies derīguma termiņš.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Kad saņemi sarunu",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Kad saņemi ielūgumu pievienoties grupai",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "Kad kāds tiek ievietots reģistrācijas rindā",
"notificationType_post-queue": "Kad raksts tiek ievietots apstiprināšanas rindā",
diff --git a/public/language/lv/topic.json b/public/language/lv/topic.json
index c7065f7216..2009861e0e 100644
--- a/public/language/lv/topic.json
+++ b/public/language/lv/topic.json
@@ -29,6 +29,7 @@
"tools": "Rīki",
"locked": "Slēgtie",
"pinned": "Piespraustie",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Pārvietots",
"moved-from": "Moved from %1",
"copy-ip": "Kopēt IP adresi",
diff --git a/public/language/ms/admin/manage/categories.json b/public/language/ms/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/ms/admin/manage/categories.json
+++ b/public/language/ms/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/ms/admin/manage/privileges.json b/public/language/ms/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/ms/admin/manage/privileges.json
+++ b/public/language/ms/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/ms/admin/manage/tags.json b/public/language/ms/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/ms/admin/manage/tags.json
+++ b/public/language/ms/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/ms/admin/manage/users.json b/public/language/ms/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/ms/admin/manage/users.json
+++ b/public/language/ms/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/ms/error.json b/public/language/ms/error.json
index 2844037466..51975e38e1 100644
--- a/public/language/ms/error.json
+++ b/public/language/ms/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nama pengunna terlalu panjang",
"password-too-long": "Kata laluan terlalu panjang",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Pengguna diharamkan",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Anda tidak boleh haramkan admin / pentadbir!",
"cant-remove-last-admin": "Anda satu-satunya pentadbir. Tambah pentadbir lain sebelum membuang diri anda sebagai pentadbir",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Jenis imej tak sah. Jenis yang dibenarkan ialah: %1",
"invalid-image-extension": "Sambungan imej tak sah",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/ms/flags.json b/public/language/ms/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/ms/flags.json
+++ b/public/language/ms/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/ms/notifications.json b/public/language/ms/notifications.json
index 598476cc8b..89031d7e50 100644
--- a/public/language/ms/notifications.json
+++ b/public/language/ms/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Emel Disahkan",
"email-confirmed-message": "Terima kasih kerana mengesahkan emel anda. Akaun anda telah diaktifkan sepenuhnya.",
"email-confirm-error-message": "Berlaku masalah semasa mengesahkan emel anda. Mungkin kod tidak sah atau tamat tempoh.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/ms/topic.json b/public/language/ms/topic.json
index 2cce10e948..37779531e6 100644
--- a/public/language/ms/topic.json
+++ b/public/language/ms/topic.json
@@ -29,6 +29,7 @@
"tools": "Perkakas",
"locked": "Kunci",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/nb/admin/manage/categories.json b/public/language/nb/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/nb/admin/manage/categories.json
+++ b/public/language/nb/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/nb/admin/manage/privileges.json b/public/language/nb/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/nb/admin/manage/privileges.json
+++ b/public/language/nb/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/nb/admin/manage/tags.json b/public/language/nb/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/nb/admin/manage/tags.json
+++ b/public/language/nb/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/nb/admin/manage/users.json b/public/language/nb/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/nb/admin/manage/users.json
+++ b/public/language/nb/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/nb/error.json b/public/language/nb/error.json
index 7a6406736a..d5db1ff297 100644
--- a/public/language/nb/error.json
+++ b/public/language/nb/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Brukernavnet er for langt",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Bruker utestengt",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Du kan ikke utestenge andre administratorer!",
"cant-remove-last-admin": "Du er den eneste administratoren. Legg til en annen bruker som administrator før du fjerner deg selv.",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Ugyldig bildetype. Tilatte typer er: %1",
"invalid-image-extension": "Ugyldig bildefiltype",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/nb/flags.json b/public/language/nb/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/nb/flags.json
+++ b/public/language/nb/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/nb/notifications.json b/public/language/nb/notifications.json
index 54f955a650..bdcca81501 100644
--- a/public/language/nb/notifications.json
+++ b/public/language/nb/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-post bekreftet",
"email-confirmed-message": "Takk for at du har validert din e-post. Kontoen din er nå fullstendig aktivert.",
"email-confirm-error-message": "Det oppsto et problem under valdiering av din e-post. Koden kan ha vært ugyldig eller ha utløpt.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/nb/topic.json b/public/language/nb/topic.json
index ae86a6dba1..403af0984a 100644
--- a/public/language/nb/topic.json
+++ b/public/language/nb/topic.json
@@ -29,6 +29,7 @@
"tools": "Verktøy",
"locked": "Låst",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/nl/admin/manage/categories.json b/public/language/nl/admin/manage/categories.json
index dcce564d01..2101f8586a 100644
--- a/public/language/nl/admin/manage/categories.json
+++ b/public/language/nl/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/nl/admin/manage/privileges.json b/public/language/nl/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/nl/admin/manage/privileges.json
+++ b/public/language/nl/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/nl/admin/manage/tags.json b/public/language/nl/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/nl/admin/manage/tags.json
+++ b/public/language/nl/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/nl/admin/manage/users.json b/public/language/nl/admin/manage/users.json
index 264d03f5c2..8605af8759 100644
--- a/public/language/nl/admin/manage/users.json
+++ b/public/language/nl/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/nl/error.json b/public/language/nl/error.json
index 6dab2ab6ee..b67b0b13bd 100644
--- a/public/language/nl/error.json
+++ b/public/language/nl/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Gebruikersnaam is te lang",
"password-too-long": "Wachtwoord is te lang",
"reset-rate-limited": "Te veel verzoeken voor wachtwoordherstel (snelheid beperkt)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Gebruiker verbannen",
"user-banned-reason": "Sorry, dit account is verbannen (Reden: %1)",
"user-banned-reason-until": "Sorry, dit account is verbannen tot %1 (Reden: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Het is niet toegestaan andere beheerders te verbannen!",
"cant-remove-last-admin": "Je bent de enige beheerder. Stel eerst een andere gebruiker als beheerder in voordat je jezelf geen beheerder meer maakt.",
"cant-delete-admin": "Verwijder administratieve rechten van dit account voordat je probeert deze te verwijderen",
+ "already-deleting": "Already deleting",
"invalid-image": "Ongeldige afbeelding",
"invalid-image-type": "Ongeldig bestandstype afbeelding. Deze afbeelding is van een bestandstype dat niet ondersteund wordt. Toegestane bestandstypes voor afbeeldingsbestanden zijn: %1",
"invalid-image-extension": "Ongeldig bestandstype afbeelding",
@@ -144,6 +146,7 @@
"user-already-flagged": "Je hebt deze gebruiker al gerapporteerd",
"post-flagged-too-many-times": "Dit bericht is al door anderen gerapporteerd",
"user-flagged-too-many-times": "Deze gebruiker is al door anderen gerapporteerd",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Het is niet mogelijk om op je eigen bericht te stemmen",
"too-many-downvotes-today": "Je kunt slecht %1 keer per dag downvoten",
"too-many-downvotes-today-user": "Je kunt een gebruiker slecht %1 keer per dag downvoten",
diff --git a/public/language/nl/flags.json b/public/language/nl/flags.json
index 5d36245b74..e4a644eb76 100644
--- a/public/language/nl/flags.json
+++ b/public/language/nl/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk acties",
"bulk-resolve": "Los markering(en) op",
- "bulk-success": "%1 markeringen aangepast"
+ "bulk-success": "%1 markeringen aangepast",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json
index 6c77277819..28b813258a 100644
--- a/public/language/nl/notifications.json
+++ b/public/language/nl/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profiel geëxporteerd, klik om te downloaden",
"posts-exported": "%1 berichten geëxporteerd, klik om te downloaden",
"uploads-exported": "%1 uploads geëxporteerd, klik om te downloaden",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mailadres bevestigd",
"email-confirmed-message": "Bedankt voor het bevestigen van je e-mailadres. Je account is nu volledig geactiveerd.",
"email-confirm-error-message": "Er was een probleem met het bevestigen van dit e-mailadres. Misschien is de code niet goed ingevoerd of was de beschikbare tijd inmiddels verstreken.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Als je een chat-bericht ontvangt",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Als je een uitnodiging voor een groep ontvangt",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Als iemand vraagt om lid te worden van een groep waarvan je eigenaar bent",
"notificationType_new-register": "Als iemand wordt toegevoegd aan een registratiewachtrij",
"notificationType_post-queue": "Als een bericht aan de wachtrij wordt toegevoegd",
diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json
index df807acdbf..559701bac0 100644
--- a/public/language/nl/topic.json
+++ b/public/language/nl/topic.json
@@ -29,6 +29,7 @@
"tools": "Extra",
"locked": "Gesloten",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Verplaatst",
"moved-from": "Moved from %1",
"copy-ip": "Kopieer IP",
diff --git a/public/language/pl/admin/manage/categories.json b/public/language/pl/admin/manage/categories.json
index 452528338a..20a942fc2b 100644
--- a/public/language/pl/admin/manage/categories.json
+++ b/public/language/pl/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# z ostatnich odpowiedzi",
"ext-link": "Zewnętrzny odnośnik",
"is-section": "Traktuj tę kategorię jako sekcję",
+ "post-queue": "Post queue",
"tag-whitelist": "Otaguj białą listę",
"upload-image": "Prześlij obrazek",
"delete-image": "Usuń",
diff --git a/public/language/pl/admin/manage/privileges.json b/public/language/pl/admin/manage/privileges.json
index fa3530abac..4e845d4e35 100644
--- a/public/language/pl/admin/manage/privileges.json
+++ b/public/language/pl/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Uprawnienia grup",
"user-privileges": "Uprawnienia użytkownika",
"edit-privileges": "Edytuj uprawnienia",
+ "select-clear-all": "Select/Clear All",
"chat": "Dostęp do czatu",
"upload-images": "Przesyłanie zdjęć",
"upload-files": "Przesyłanie plików",
diff --git a/public/language/pl/admin/manage/tags.json b/public/language/pl/admin/manage/tags.json
index 5066828fe8..93df2a4858 100644
--- a/public/language/pl/admin/manage/tags.json
+++ b/public/language/pl/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "edytowanie tagu/tagów",
"alerts.confirm-delete": "Czy na pewno chcesz usunąć zaznaczone tagi?",
- "alerts.update-success": "Zaktualizowano tag-a!"
+ "alerts.update-success": "Zaktualizowano tag-a!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/pl/admin/manage/users.json b/public/language/pl/admin/manage/users.json
index 0d7bb6006b..35d02e8344 100644
--- a/public/language/pl/admin/manage/users.json
+++ b/public/language/pl/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Adresy e-mail:",
"alerts.email-sent-to": "Wysłano zaproszenie do %1",
- "alerts.x-users-found": "Znaleziono %1 użytkownika(-ów), (czas wyszukiwania: %2 s)"
+ "alerts.x-users-found": "Znaleziono %1 użytkownika(-ów), (czas wyszukiwania: %2 s)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/pl/error.json b/public/language/pl/error.json
index 9d9d0264b8..bb3dda2baf 100644
--- a/public/language/pl/error.json
+++ b/public/language/pl/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Zbyt długa nazwa użytkownika",
"password-too-long": "Hasło jest za długie",
"reset-rate-limited": "Zbyt wiele żądań resetowania hasła (ograniczona ilość)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Użytkownik zbanowany",
"user-banned-reason": "Twoje konto zostało zablokowane (Powód: %1)",
"user-banned-reason-until": "Przepraszamy, to konto zostało zbanowane do %1 (Powód: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nie możesz zbanować innych adminów!",
"cant-remove-last-admin": "Jesteś jedynym administratorem. Dodaj innego użytkownika jako administratora przed usunięciem siebie z tej grupy",
"cant-delete-admin": "Usuń uprawnienia administratora z tego konta przed próbą jego usunięcia.",
+ "already-deleting": "Already deleting",
"invalid-image": "Błędny obraz.",
"invalid-image-type": "Błędny typ obrazka. Dozwolone typy to: %1",
"invalid-image-extension": "Błędne rozszerzenie pliku",
@@ -144,6 +146,7 @@
"user-already-flagged": "Ten użytkownik został już przez ciebie oflagowany",
"post-flagged-too-many-times": "Ten post został już oflagowany przez innych użytkowników",
"user-flagged-too-many-times": "Ten użytkownik został już oflagowany przez innych użytkowników",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Nie możesz głosować na swój własny wpis.",
"too-many-downvotes-today": "Możesz głosować przeciw postowi tylko %1 razy dziennie",
"too-many-downvotes-today-user": "Możesz głosować przeciwko użytkownikowi tylko %1 razy dziennie",
diff --git a/public/language/pl/flags.json b/public/language/pl/flags.json
index 241896eb4d..7d3a2a8950 100644
--- a/public/language/pl/flags.json
+++ b/public/language/pl/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Oznacz flagi jako rozwiązane",
- "bulk-success": "Zaktualizowano %1 flag"
+ "bulk-success": "Zaktualizowano %1 flag",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/pl/notifications.json b/public/language/pl/notifications.json
index ae37815cc8..05aafb1182 100644
--- a/public/language/pl/notifications.json
+++ b/public/language/pl/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1profil wyeksportowany, kliknij tutaj by pobrać",
"posts-exported": "%1postów wyeksportowane, kliknij tutaj by pobrać",
"uploads-exported": "%1przesłanych plików wyeksportowane, kliknij tutaj by pobrać",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mail potwierdzony",
"email-confirmed-message": "Dziękujemy za potwierdzenie maila. Twoje konto zostało aktywowane.",
"email-confirm-error-message": "Wystąpił problem przy aktywacji - kod jest błędny lub przestarzały",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Kiedy otrzymasz wiadomość na czacie",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Kiedy otrzymasz grupowe zaproszenie",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Kiedy ktoś prosi o dołączenie do grupy, którą posiadasz",
"notificationType_new-register": "Kiedy ktoś zostaje dodany do kolejki rejestracyjnej",
"notificationType_post-queue": "Kiedy nowy post jest kolejkowany",
diff --git a/public/language/pl/topic.json b/public/language/pl/topic.json
index 6975bc7338..eced539558 100644
--- a/public/language/pl/topic.json
+++ b/public/language/pl/topic.json
@@ -29,6 +29,7 @@
"tools": "Narzędzia",
"locked": "Zablokowany",
"pinned": "Przypięty",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Przeniesiony",
"moved-from": "Moved from %1",
"copy-ip": "Kopiuj IP",
diff --git a/public/language/pt-BR/admin/manage/categories.json b/public/language/pt-BR/admin/manage/categories.json
index da6f5e1713..567aec5264 100644
--- a/public/language/pt-BR/admin/manage/categories.json
+++ b/public/language/pt-BR/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# de Respostas Recentes",
"ext-link": "Link Externo",
"is-section": "Trate esta categoria como uma seção",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Enviar Imagem",
"delete-image": "Remover",
diff --git a/public/language/pt-BR/admin/manage/privileges.json b/public/language/pt-BR/admin/manage/privileges.json
index a54d8b9712..8c669d01a5 100644
--- a/public/language/pt-BR/admin/manage/privileges.json
+++ b/public/language/pt-BR/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Conversar",
"upload-images": "Enviar Imagens",
"upload-files": "Enviar Arquivos",
diff --git a/public/language/pt-BR/admin/manage/tags.json b/public/language/pt-BR/admin/manage/tags.json
index 2327ae5dda..4e1111bae4 100644
--- a/public/language/pt-BR/admin/manage/tags.json
+++ b/public/language/pt-BR/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Você deseja excluir as tags selecionadas?",
- "alerts.update-success": "Tag Atualizada!"
+ "alerts.update-success": "Tag Atualizada!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/pt-BR/admin/manage/users.json b/public/language/pt-BR/admin/manage/users.json
index 258ec02721..2d301cb0a2 100644
--- a/public/language/pt-BR/admin/manage/users.json
+++ b/public/language/pt-BR/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "E-mails:",
"alerts.email-sent-to": "Um e-mail de convite foi enviado para %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/pt-BR/error.json b/public/language/pt-BR/error.json
index 8659e2babe..a61be7981d 100644
--- a/public/language/pt-BR/error.json
+++ b/public/language/pt-BR/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nome de usuário muito longo",
"password-too-long": "A senha é muito grande",
"reset-rate-limited": "Muitas solicitações de redefinição de senha (taxa de ação limitada)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Usuário banido",
"user-banned-reason": "Desculpa, esta conta foi banida (Motivo: %1)",
"user-banned-reason-until": "Desculpa, esta conta foi banida até %1 (Motivo: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Você não pode banir outros administradores!",
"cant-remove-last-admin": "Você é o único administrador. Adicione outro usuário como administrador antes de remover a si mesmo como admin",
"cant-delete-admin": "Remova os privilégios de administrador dessa conta antes de tentar excluí-la.",
+ "already-deleting": "Already deleting",
"invalid-image": "Imagem Inválida",
"invalid-image-type": "Tipo inválido de imagem. Os tipos permitidos são: %1",
"invalid-image-extension": "Extensão de imagem inválida",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Você não pode votar no seu próprio post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/pt-BR/flags.json b/public/language/pt-BR/flags.json
index 1bb5fc5a31..44ce420fbe 100644
--- a/public/language/pt-BR/flags.json
+++ b/public/language/pt-BR/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/pt-BR/notifications.json b/public/language/pt-BR/notifications.json
index c06ba4e7ca..22508e43fd 100644
--- a/public/language/pt-BR/notifications.json
+++ b/public/language/pt-BR/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmado",
"email-confirmed-message": "Obrigado por validar o seu email. Agora sua conta está plenamente ativada.",
"email-confirm-error-message": "Houve um problema ao validar o seu endereço de email. Talvez o código era invalido ou tenha expirado.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Quando você receber uma mensagem de chat",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Quando você receber um convite para um grupo",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Quando alguém pede para participar de um grupo que você é dono",
"notificationType_new-register": "Quando alguém for adicionado à fila de registro",
"notificationType_post-queue": "Quando um novo post entrar na fila",
diff --git a/public/language/pt-BR/topic.json b/public/language/pt-BR/topic.json
index 50198172b4..a314182af6 100644
--- a/public/language/pt-BR/topic.json
+++ b/public/language/pt-BR/topic.json
@@ -29,6 +29,7 @@
"tools": "Ferramentas",
"locked": "Trancado",
"pinned": "Fixado",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Movido",
"moved-from": "Moved from %1",
"copy-ip": "Copiar IP",
diff --git a/public/language/pt-PT/admin/manage/categories.json b/public/language/pt-PT/admin/manage/categories.json
index 8ad390debd..17d0cd887f 100644
--- a/public/language/pt-PT/admin/manage/categories.json
+++ b/public/language/pt-PT/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# de Respostas Recentes",
"ext-link": "Link Externo",
"is-section": "Tratar esta categoria como uma secção",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Enviar Imagem",
"delete-image": "Remover",
diff --git a/public/language/pt-PT/admin/manage/privileges.json b/public/language/pt-PT/admin/manage/privileges.json
index 81e7ad9634..ca35e46541 100644
--- a/public/language/pt-PT/admin/manage/privileges.json
+++ b/public/language/pt-PT/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Privilégios de Grupos",
"user-privileges": "Privilégios de Utilizadores",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Conversa",
"upload-images": "Enviar Imagens",
"upload-files": "Enviar Ficheiros",
diff --git a/public/language/pt-PT/admin/manage/tags.json b/public/language/pt-PT/admin/manage/tags.json
index 289947a4f4..acae5a098c 100644
--- a/public/language/pt-PT/admin/manage/tags.json
+++ b/public/language/pt-PT/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editar etiqueta(s)",
"alerts.confirm-delete": "Queres mesmo apagar os marcadores selecionados?",
- "alerts.update-success": "Etiqueta Atualizada!"
+ "alerts.update-success": "Etiqueta Atualizada!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/pt-PT/admin/manage/users.json b/public/language/pt-PT/admin/manage/users.json
index cc7cc01dbf..0ff9bd3c67 100644
--- a/public/language/pt-PT/admin/manage/users.json
+++ b/public/language/pt-PT/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "E-mails:",
"alerts.email-sent-to": "Foi enviado um e-mail de convite para %1",
- "alerts.x-users-found": "%1 utilizador(es) encontrado(s), (%2 segundos)"
+ "alerts.x-users-found": "%1 utilizador(es) encontrado(s), (%2 segundos)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json
index 68cee9c04d..d2e29e4a97 100644
--- a/public/language/pt-PT/error.json
+++ b/public/language/pt-PT/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Nome de utilizador muito longo",
"password-too-long": "Palavra-passe muito longa",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Utilizador banido",
"user-banned-reason": "Desculpa, esta conta foi banida (Motivo: %1)",
"user-banned-reason-until": "Desculpa, esta conta foi banida até %1 (Motivo: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Não podes banir outros administradores!",
"cant-remove-last-admin": "És o único administrador. Adicionar outro utilizador como administrador antes de te removeres como administrador.",
"cant-delete-admin": "Remove os privilégios de administrador desta conta antes de tentares apagá-la.",
+ "already-deleting": "Already deleting",
"invalid-image": "Imagem inválida",
"invalid-image-type": "Tipo de imagem inválida. Os tipos válidos são: %1",
"invalid-image-extension": "Extensão de imagem inválida",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Não podes votar na tua própria publicação",
"too-many-downvotes-today": "Tu só podes votar negativamente %1 vezes por dia",
"too-many-downvotes-today-user": "Tu só podes votar negativamente um utilizador %1 vezes por dia",
diff --git a/public/language/pt-PT/flags.json b/public/language/pt-PT/flags.json
index 3f22c5b2c2..f5ece5a2d6 100644
--- a/public/language/pt-PT/flags.json
+++ b/public/language/pt-PT/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json
index cda956aa54..c86d77695a 100644
--- a/public/language/pt-PT/notifications.json
+++ b/public/language/pt-PT/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mail confirmado",
"email-confirmed-message": "Obrigado por validares o teu endereço de e-mail. A tua conta está agora totalmente ativa.",
"email-confirm-error-message": "Ocorreu um problema a validar o teu endereço de e-mail. Talvez o código seja inválido ou já tenha expirado.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Quando recebes uma mensagem numa conversa",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Quando recebes um convite para um grupo",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Quando alguém pede para entrar num grupo que é teu",
"notificationType_new-register": "Quando alguém é adicionado à fila de espera de registo",
"notificationType_post-queue": "Quando uma nova publicação está à espera de aprovação",
diff --git a/public/language/pt-PT/topic.json b/public/language/pt-PT/topic.json
index 968100b863..83ce7a5f4b 100644
--- a/public/language/pt-PT/topic.json
+++ b/public/language/pt-PT/topic.json
@@ -29,6 +29,7 @@
"tools": "Ferramentas",
"locked": "Bloqueado",
"pinned": "Afixado",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Movido",
"moved-from": "Moved from %1",
"copy-ip": "Copiar IP",
diff --git a/public/language/ro/admin/manage/categories.json b/public/language/ro/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/ro/admin/manage/categories.json
+++ b/public/language/ro/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/ro/admin/manage/privileges.json b/public/language/ro/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/ro/admin/manage/privileges.json
+++ b/public/language/ro/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/ro/admin/manage/tags.json b/public/language/ro/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/ro/admin/manage/tags.json
+++ b/public/language/ro/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/ro/admin/manage/users.json b/public/language/ro/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/ro/admin/manage/users.json
+++ b/public/language/ro/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/ro/error.json b/public/language/ro/error.json
index 6b3a0ce877..768928dcb7 100644
--- a/public/language/ro/error.json
+++ b/public/language/ro/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Numele de utilizator este prea lung",
"password-too-long": "Parola prea lunga.",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Utilizator banat",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nu poți bana alți administratori!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/ro/flags.json b/public/language/ro/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/ro/flags.json
+++ b/public/language/ro/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/ro/notifications.json b/public/language/ro/notifications.json
index 175ee9c7e2..ceb0531488 100644
--- a/public/language/ro/notifications.json
+++ b/public/language/ro/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email confirmat",
"email-confirmed-message": "Îți mulțumim pentru validarea emailului. Contul tău este acuma activat.",
"email-confirm-error-message": "A fost o problemă cu activarea adresei tale de email. Poate codul de activare a fost invalid sau expirat.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json
index 29468abb41..6c0cb6a3dd 100644
--- a/public/language/ro/topic.json
+++ b/public/language/ro/topic.json
@@ -29,6 +29,7 @@
"tools": "Unelte",
"locked": "Închis",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/ru/admin/manage/categories.json b/public/language/ru/admin/manage/categories.json
index ef4a1d48cb..6b545eb25f 100644
--- a/public/language/ru/admin/manage/categories.json
+++ b/public/language/ru/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# последних ответов",
"ext-link": "Внешняя ссылка",
"is-section": "Рассматривать эту категорию как секцию",
+ "post-queue": "Post queue",
"tag-whitelist": "Разрешенный список меток",
"upload-image": "Загрузить изображение",
"delete-image": "Удалить",
diff --git a/public/language/ru/admin/manage/privileges.json b/public/language/ru/admin/manage/privileges.json
index 556d5cce86..a09c20ab31 100644
--- a/public/language/ru/admin/manage/privileges.json
+++ b/public/language/ru/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Права групп",
"user-privileges": "Права пользователей",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Чат",
"upload-images": "Загрузка изображений",
"upload-files": "Загрузка файлов",
diff --git a/public/language/ru/admin/manage/tags.json b/public/language/ru/admin/manage/tags.json
index 99e67826d4..fa61412bc2 100644
--- a/public/language/ru/admin/manage/tags.json
+++ b/public/language/ru/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Редактирование меток",
"alerts.confirm-delete": "Вы хотите удалить выбранные метки?",
- "alerts.update-success": "Метка обновлена!"
+ "alerts.update-success": "Метка обновлена!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/ru/admin/manage/users.json b/public/language/ru/admin/manage/users.json
index 250b492b1e..45de5bdd6a 100644
--- a/public/language/ru/admin/manage/users.json
+++ b/public/language/ru/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Адреса электронной почты:",
"alerts.email-sent-to": "Письмо с приглашением для %1 отправлено",
- "alerts.x-users-found": "%1 пользователь(ей) найдено, (%2 секунды)"
+ "alerts.x-users-found": "%1 пользователь(ей) найдено, (%2 секунды)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/ru/error.json b/public/language/ru/error.json
index 073729fefa..22488a47d4 100644
--- a/public/language/ru/error.json
+++ b/public/language/ru/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Имя пользователя слишком длинное",
"password-too-long": "Пароль слишком длинный",
"reset-rate-limited": "Слишком много запросов на восстановление пароля (установлена блокировка)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Пользователь заблокирован",
"user-banned-reason": "Учетная запись заблокирована (Причина: %1)",
"user-banned-reason-until": "Извините, эта учётная запись заблокирована до %1 (Причина: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Вы не можете заблокировать других администраторов!",
"cant-remove-last-admin": "Вы единственный администратор. Чтобы отказаться от своих полномочий, пожалуйста, назначьте администратором другого участника.",
"cant-delete-admin": "Чтобы удалить эту учётную запись, сначала надо снять с неё полномочия администратора.",
+ "already-deleting": "Already deleting",
"invalid-image": "Некорректное изображение",
"invalid-image-type": "Этот формат изображения не поддерживается. Загрузите изображение в одном из следующих форматов: %1",
"invalid-image-extension": "Недопустимое расширение файла",
@@ -144,6 +146,7 @@
"user-already-flagged": "Вы уже пожаловались на этого пользователя",
"post-flagged-too-many-times": "На это сообщение уже пожаловались другие пользователи",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Вы не можете голосовать за свои собственные сообщения",
"too-many-downvotes-today": "Вы можете проголосовать против только %1 раз за день",
"too-many-downvotes-today-user": "Вы можете проголосовать против участника только %1 раз за день.",
diff --git a/public/language/ru/flags.json b/public/language/ru/flags.json
index 25aa9ffb02..9fbea1a9bc 100644
--- a/public/language/ru/flags.json
+++ b/public/language/ru/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/ru/notifications.json b/public/language/ru/notifications.json
index a8a05f48a9..a352214337 100644
--- a/public/language/ru/notifications.json
+++ b/public/language/ru/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "Профиль %1 экспортирован, нажмите для загрузки",
"posts-exported": "Посты %1 экспортированы, нажмите для загрузки",
"uploads-exported": "Вложения %1 экспортированы, нажмите для загрузки",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Электронная почта подтверждена",
"email-confirmed-message": "Спасибо за подтверждение адреса электронной почты. Ваша учётная запись активирована.",
"email-confirm-error-message": "Ошибка проверки адреса электронной почты. Возможно, код подтверждения введён неправильно или у него истёк срок действия.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Когда вы получаете сообщение в чат",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Когда вы получаете приглашение в группу",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Когда кто-то хочет присоединиться к группе, которой вы управляете",
"notificationType_new-register": "Когда в очереди на регистрацию появляется новый пользователь",
"notificationType_post-queue": "Когда в очереди на проверку появляется новое сообщение",
diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json
index 8bd0e00f81..95007ad2a5 100644
--- a/public/language/ru/topic.json
+++ b/public/language/ru/topic.json
@@ -29,6 +29,7 @@
"tools": "Действия",
"locked": "Закрыта",
"pinned": "Прикреплена",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Перенесена",
"moved-from": "Moved from %1",
"copy-ip": "Копировать IP",
diff --git a/public/language/rw/admin/manage/categories.json b/public/language/rw/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/rw/admin/manage/categories.json
+++ b/public/language/rw/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/rw/admin/manage/privileges.json b/public/language/rw/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/rw/admin/manage/privileges.json
+++ b/public/language/rw/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/rw/admin/manage/tags.json b/public/language/rw/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/rw/admin/manage/tags.json
+++ b/public/language/rw/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/rw/admin/manage/users.json b/public/language/rw/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/rw/admin/manage/users.json
+++ b/public/language/rw/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/rw/error.json b/public/language/rw/error.json
index 9dc57e058e..ef0842f30c 100644
--- a/public/language/rw/error.json
+++ b/public/language/rw/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Izina ni rirerire cyane",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Umuntu wirukanwe",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Ntabwo wakwirukana abandi bayobozi!",
"cant-remove-last-admin": "Ni wowe muyobozi wenyine. Ongeramo undi muntu nk'umuyobozi mbere y'uko wikura ku buyobozi",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Ubwoko bw'ifoto wahisemo ntibwemewe. Hemewe gusa: %1",
"invalid-image-extension": "Impera itemewe igaragaza foruma y'ifoto",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/rw/flags.json b/public/language/rw/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/rw/flags.json
+++ b/public/language/rw/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/rw/notifications.json b/public/language/rw/notifications.json
index fc6ea70cf4..3faf1cf4a8 100644
--- a/public/language/rw/notifications.json
+++ b/public/language/rw/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Yemejwe",
"email-confirmed-message": "Urakoze kugaragaza ko email yawe ikora. Ubu ngubu konte yawe irakora nta kabuza. ",
"email-confirm-error-message": "Havutse ikibazo mu gushaka kumenya niba email yawe ikora. Ushobora kuba wakoresheje kode itari yo cyangwa se yarengeje igihe. ",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json
index 62fc31c281..fcec29f32d 100644
--- a/public/language/rw/topic.json
+++ b/public/language/rw/topic.json
@@ -29,6 +29,7 @@
"tools": "Ibikoresho",
"locked": "Birafungiranye",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/sc/admin/manage/categories.json b/public/language/sc/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/sc/admin/manage/categories.json
+++ b/public/language/sc/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/sc/admin/manage/privileges.json b/public/language/sc/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/sc/admin/manage/privileges.json
+++ b/public/language/sc/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/sc/admin/manage/tags.json b/public/language/sc/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/sc/admin/manage/tags.json
+++ b/public/language/sc/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/sc/admin/manage/users.json b/public/language/sc/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/sc/admin/manage/users.json
+++ b/public/language/sc/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/sc/error.json b/public/language/sc/error.json
index c50e9c05cd..1bcfa4ffe0 100644
--- a/public/language/sc/error.json
+++ b/public/language/sc/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Username too long",
"password-too-long": "Password too long",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "User banned",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "You can't ban other admins!",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Invalid image type. Allowed types are: %1",
"invalid-image-extension": "Invalid image extension",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/sc/flags.json b/public/language/sc/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/sc/flags.json
+++ b/public/language/sc/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/sc/notifications.json b/public/language/sc/notifications.json
index 590e3aeb62..b896eedec0 100644
--- a/public/language/sc/notifications.json
+++ b/public/language/sc/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email Confirmed",
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
"email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json
index 1068121b5e..732ba8656a 100644
--- a/public/language/sc/topic.json
+++ b/public/language/sc/topic.json
@@ -29,6 +29,7 @@
"tools": "Ainas",
"locked": "Locked",
"pinned": "Pinned",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Moved",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/sk/admin/manage/categories.json b/public/language/sk/admin/manage/categories.json
index dab86a30b2..24016900c1 100644
--- a/public/language/sk/admin/manage/categories.json
+++ b/public/language/sk/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# posledných odpovedí",
"ext-link": "Externý odkaz",
"is-section": "Zaobchádzať s kategóriou ako so sekciou",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Nahrať obrázok",
"delete-image": "Odobrať",
diff --git a/public/language/sk/admin/manage/privileges.json b/public/language/sk/admin/manage/privileges.json
index 45f4974589..b787c7dd0f 100644
--- a/public/language/sk/admin/manage/privileges.json
+++ b/public/language/sk/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Konverzácia",
"upload-images": "Nahrať obrázky",
"upload-files": "Nahrať súbory",
diff --git a/public/language/sk/admin/manage/tags.json b/public/language/sk/admin/manage/tags.json
index 08e465d8bf..3805eec2ac 100644
--- a/public/language/sk/admin/manage/tags.json
+++ b/public/language/sk/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Chcete odstrániť vybranú značku?",
- "alerts.update-success": "Značka bola aktualizovaná!"
+ "alerts.update-success": "Značka bola aktualizovaná!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/sk/admin/manage/users.json b/public/language/sk/admin/manage/users.json
index 90bced49e6..3e27ba25dd 100644
--- a/public/language/sk/admin/manage/users.json
+++ b/public/language/sk/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "E-mail s pozvánkou bol odoslaný na %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/sk/error.json b/public/language/sk/error.json
index ab126c2bb8..aea9e60bc5 100644
--- a/public/language/sk/error.json
+++ b/public/language/sk/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Užívateľské meno je príliš dlhé",
"password-too-long": "Heslo je príliš dlhé",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Užívateľ je zablokovaný",
"user-banned-reason": "Prepáčte, tento účet bol zablokovaný (Dôvod: %1)",
"user-banned-reason-until": "Ospravedlňujeme sa, tento účet bol zablokovaný do %1 (Dôvod: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Nemôžte zablokovať iných správcov.",
"cant-remove-last-admin": "Momentálne ste jediný správca. Najskôr pridajte ďalšieho užívateľa za správcu predtým, ako zrušíte svoje výsady správcu",
"cant-delete-admin": "Odobrať oprávnenie správcu z tohto účtu pred pokusom ho odstrániť.",
+ "already-deleting": "Already deleting",
"invalid-image": "Neplatný obrázok",
"invalid-image-type": "Neplatný typ obrázku. Povolené typy sú: %1",
"invalid-image-extension": "Neplatná prípona obrázku",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Za svoj vlastný príspevok nemôžete hlasovať",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/sk/flags.json b/public/language/sk/flags.json
index f328f60e18..3665730f60 100644
--- a/public/language/sk/flags.json
+++ b/public/language/sk/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/sk/notifications.json b/public/language/sk/notifications.json
index ef9f509cff..8c630a00e0 100644
--- a/public/language/sk/notifications.json
+++ b/public/language/sk/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-mail bol potvrdený",
"email-confirmed-message": "Ďakujeme za potvrdenie Vášho e-mailu. Váš účet je teraz aktivovaný.",
"email-confirm-error-message": "Vyskytla sa chyba pri overení Vašej e-mailovej adresy. ",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Ak obdržíte novú správu konverzácie",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Ak obdržíte pozvanie do skupiny",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "Ak bude niekto pridaný do registračnej fronty",
"notificationType_post-queue": "Ak bude pridaný nový príspevok do fronty",
diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json
index 055ecf9a24..bf5e9eab74 100644
--- a/public/language/sk/topic.json
+++ b/public/language/sk/topic.json
@@ -29,6 +29,7 @@
"tools": "Nástroje",
"locked": "Uzamknuté",
"pinned": "Pripnuté",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Presunuté",
"moved-from": "Moved from %1",
"copy-ip": "Kopírovať IP adresu",
diff --git a/public/language/sl/admin/manage/categories.json b/public/language/sl/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/sl/admin/manage/categories.json
+++ b/public/language/sl/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/sl/admin/manage/privileges.json b/public/language/sl/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/sl/admin/manage/privileges.json
+++ b/public/language/sl/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/sl/admin/manage/tags.json b/public/language/sl/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/sl/admin/manage/tags.json
+++ b/public/language/sl/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/sl/admin/manage/users.json b/public/language/sl/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/sl/admin/manage/users.json
+++ b/public/language/sl/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/sl/error.json b/public/language/sl/error.json
index a90966f1d1..96b631492b 100644
--- a/public/language/sl/error.json
+++ b/public/language/sl/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Uporabniško ime je predolgo.",
"password-too-long": "Geslo je predolgo.",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Uporabnik je izločen.",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Ne morete izločati drugih skrbnikov!",
"cant-remove-last-admin": "Ste edini skrbnik. Preden se odstranite, dodajte novega skrbnika.",
"cant-delete-admin": "Pred brisanjem tega računa morate odstraniti skrbniške pravice.",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "Nedovoljen format slike. Dovoljeni formati: %1.",
"invalid-image-extension": "Nedovoljena pripona slike.",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/sl/flags.json b/public/language/sl/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/sl/flags.json
+++ b/public/language/sl/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/sl/notifications.json b/public/language/sl/notifications.json
index 9cf0a326b4..76bcbf6a38 100644
--- a/public/language/sl/notifications.json
+++ b/public/language/sl/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-poštni naslov potrjen",
"email-confirmed-message": "Hvala, da ste potrdili svoj e-naslov. Račun je sedaj aktiviran.",
"email-confirm-error-message": "Prišlo je do napake pri preverjanju vašega e-poštnega naslova. Morda je bila koda napačna ali pa je potekla.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "When you receive a chat message",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "When you receive a group invite",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued",
diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json
index 50a1770a2f..35d240096d 100644
--- a/public/language/sl/topic.json
+++ b/public/language/sl/topic.json
@@ -29,6 +29,7 @@
"tools": "Orodja",
"locked": "Zaklenjeno",
"pinned": "Pripeto",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Premaknjeno",
"moved-from": "Moved from %1",
"copy-ip": "Copy IP",
diff --git a/public/language/sr/admin/manage/categories.json b/public/language/sr/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/sr/admin/manage/categories.json
+++ b/public/language/sr/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/sr/admin/manage/privileges.json b/public/language/sr/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/sr/admin/manage/privileges.json
+++ b/public/language/sr/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/sr/admin/manage/tags.json b/public/language/sr/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/sr/admin/manage/tags.json
+++ b/public/language/sr/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/sr/admin/manage/users.json b/public/language/sr/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/sr/admin/manage/users.json
+++ b/public/language/sr/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/sr/error.json b/public/language/sr/error.json
index 1ce2004430..13b1e81213 100644
--- a/public/language/sr/error.json
+++ b/public/language/sr/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Корисничко име је предуго",
"password-too-long": "Шифра је предугачка.",
"reset-rate-limited": "Превише захтева за поништавање лозинке (ограничена стопа)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Корисник је забрањен",
"user-banned-reason": "Овај налог је забрањен (Разлог: %1)",
"user-banned-reason-until": "Овај налог је забрањен до %1 (Разлог: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Не можете забранити друге администраторе!",
"cant-remove-last-admin": "Ви сте једини администратор. Додајте другог корисника као администратора пре него што уклоните себе као администратора.",
"cant-delete-admin": "Уклоните администраторске привилегије овом налогу пре него што покушате да га избришете.",
+ "already-deleting": "Already deleting",
"invalid-image": "Неважећа слика",
"invalid-image-type": "Неважећи тип слике. Дозвољени типови су: %1",
"invalid-image-extension": "Неважећи тип слике",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Не можете гласати за своју поруку",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/sr/flags.json b/public/language/sr/flags.json
index 3d9c10a421..7d70a1dc8a 100644
--- a/public/language/sr/flags.json
+++ b/public/language/sr/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/sr/notifications.json b/public/language/sr/notifications.json
index 2431eef20e..a220f6f294 100644
--- a/public/language/sr/notifications.json
+++ b/public/language/sr/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 профила извезено, кликните за преузимање",
"posts-exported": "%1 порука извезено, кликните за преузимање",
"uploads-exported": "%1 отпремања извезено, кликните за преузимање",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Е-пошта је потврђена.",
"email-confirmed-message": "Хвала на овери ваше е-поште. Ваш налог је сада у потпуности активан.",
"email-confirm-error-message": "Дошло је до проблема са овером ваше е-поште. Можда је код неисправан или је истекао.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Када примите поруку за ћаскање",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Када примите позивницу за групу",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Када неко затражи да се придружи групи коју поседујете",
"notificationType_new-register": "Када је неко додат на чекање за регистрацију",
"notificationType_post-queue": "Када је нова порука на чекању",
diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json
index 7d0c11555f..659be3f156 100644
--- a/public/language/sr/topic.json
+++ b/public/language/sr/topic.json
@@ -29,6 +29,7 @@
"tools": "Алатке",
"locked": "Закључано",
"pinned": "Закачено",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Премештено",
"moved-from": "Moved from %1",
"copy-ip": "Копирај IP",
diff --git a/public/language/sv/admin/manage/categories.json b/public/language/sv/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/sv/admin/manage/categories.json
+++ b/public/language/sv/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/sv/admin/manage/privileges.json b/public/language/sv/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/sv/admin/manage/privileges.json
+++ b/public/language/sv/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/sv/admin/manage/tags.json b/public/language/sv/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/sv/admin/manage/tags.json
+++ b/public/language/sv/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/sv/admin/manage/users.json b/public/language/sv/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/sv/admin/manage/users.json
+++ b/public/language/sv/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/sv/error.json b/public/language/sv/error.json
index 8a41d072b9..91c3853183 100644
--- a/public/language/sv/error.json
+++ b/public/language/sv/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Användarnamnet är för långt",
"password-too-long": "Lösenordet är för långt",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Användare bannlyst",
"user-banned-reason": "Vi beklagar, men detta konto har blivit bannlyst (Anledning: %1)",
"user-banned-reason-until": "Vi beklagar, men detta konto har blivit bannlyst till %1 (Anledning: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Du kan inte bannlysa andra administratörer!",
"cant-remove-last-admin": "Du är den enda administratören. Lägg till en annan användare som administratör innan du tar bort dig själv.",
"cant-delete-admin": "Ta bort administratörsbehörighet från detta konto innan du försöker ta bort den.",
+ "already-deleting": "Already deleting",
"invalid-image": "Ogiltig bild",
"invalid-image-type": "Ogiltig bildtyp. Tillåtna typer är: %1",
"invalid-image-extension": "Ogiltigt bildformat",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Du kan inte rösta på ditt eget inlägg.",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/sv/flags.json b/public/language/sv/flags.json
index 4a617433ad..d0f412cc51 100644
--- a/public/language/sv/flags.json
+++ b/public/language/sv/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/sv/notifications.json b/public/language/sv/notifications.json
index 14fabefc9a..aa1eaa9c34 100644
--- a/public/language/sv/notifications.json
+++ b/public/language/sv/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-post bekräftad",
"email-confirmed-message": "Tack för att du bekräftat din e-postadress. Ditt konto är nu fullt ut aktiverat.",
"email-confirm-error-message": "Det uppstod ett problem med bekräftelsen av din e-postadress. Kanske var koden felaktig eller ogiltig.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "När du får ett chattmeddelande",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "När du får en gruppinbjudan",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "När någon ber om att få gå med i en grupp du äger",
"notificationType_new-register": "När någon läggs till i registreringskön",
"notificationType_post-queue": "När ett nytt inlägg läggs i kön",
diff --git a/public/language/sv/topic.json b/public/language/sv/topic.json
index aac9c5dc61..e663a7c1d1 100644
--- a/public/language/sv/topic.json
+++ b/public/language/sv/topic.json
@@ -29,6 +29,7 @@
"tools": "Verktyg",
"locked": "Låst",
"pinned": "Fäst",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Flyttad",
"moved-from": "Moved from %1",
"copy-ip": "Kopiera IP",
diff --git a/public/language/th/admin/manage/categories.json b/public/language/th/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/th/admin/manage/categories.json
+++ b/public/language/th/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/th/admin/manage/privileges.json b/public/language/th/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/th/admin/manage/privileges.json
+++ b/public/language/th/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/th/admin/manage/tags.json b/public/language/th/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/th/admin/manage/tags.json
+++ b/public/language/th/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/th/admin/manage/users.json b/public/language/th/admin/manage/users.json
index bdeb68c61c..9f5f9540c5 100644
--- a/public/language/th/admin/manage/users.json
+++ b/public/language/th/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "อีเมลคำเชิญถูกส่งไปที่ %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/th/error.json b/public/language/th/error.json
index 4d35c24254..ade5a592ca 100644
--- a/public/language/th/error.json
+++ b/public/language/th/error.json
@@ -40,6 +40,7 @@
"username-too-long": "ชื่อบัญชีผู้ใช้ ยาวเกินไป",
"password-too-long": "รหัสผ่านยาวเกินไป",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "ผู้ใช้ได้รับการแบน",
"user-banned-reason": "ขออภัย บัญชีผู้ใช้นี้ได้รับการแบน (เหตุผล : %1)",
"user-banned-reason-until": "ขออภัย บัญชีผู้ใช้นี้ได้รับการแบนจนถึง %1 (เหตุผล : %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "คุณแบนแอดมินไม่ได้!!!",
"cant-remove-last-admin": "คุณเป็นแอดมินเพียงคนเดียว กรุณาเพิ่มผู้ใช้คนอื่นเป็นแอดมิน ก่อนการลบตัวเองออกจากแอดมิน",
"cant-delete-admin": "ลบสิทธิพิเศษของแอดมินจากบัญชีผู้ใช้นี้ ก่อนทำการลบ",
+ "already-deleting": "Already deleting",
"invalid-image": "Invalid image",
"invalid-image-type": "ประเภทรูปภาพไม่ถูกต้อง ประเภทที่ได้รับการอนุญาติคือ : %1",
"invalid-image-extension": "นามสกุลรูปภาพไม่ถูกต้อง",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/th/flags.json b/public/language/th/flags.json
index bddef72f81..0ae9d3b75c 100644
--- a/public/language/th/flags.json
+++ b/public/language/th/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/th/notifications.json b/public/language/th/notifications.json
index b076ad1697..8c8f538a2a 100644
--- a/public/language/th/notifications.json
+++ b/public/language/th/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Email ได้รับการยืนยันแล้ว",
"email-confirmed-message": "ขอบคุณที่ยืนยัน Email ของคุณ บัญชีของคุณสามารถใช้งานได้แล้ว",
"email-confirm-error-message": "มีปัญหาในการยืนยัน Email ของคุณ บางทีรหัสไม่ถูกต้องหรือหมดอายุแล้ว",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "เมื่อคุณได้รับข้อความใหม่",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "เมื่อคุณได้รับเชิญเข้ากลุ่ม",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "เมื่อมีคนถูกเพิ่มในคิวลงทะเบียน",
"notificationType_post-queue": "เมื่อมีโพสต์ใหม่อยู่ในคิว",
diff --git a/public/language/th/topic.json b/public/language/th/topic.json
index af5b612a0f..20e407e618 100644
--- a/public/language/th/topic.json
+++ b/public/language/th/topic.json
@@ -29,6 +29,7 @@
"tools": "เครื่องมือ",
"locked": "ถูกล็อก",
"pinned": "ถูกปักหมุด",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "ถูกย้าย",
"moved-from": "Moved from %1",
"copy-ip": "คัดลอก IP",
diff --git a/public/language/tr/admin/manage/categories.json b/public/language/tr/admin/manage/categories.json
index 3628dcb432..2db53ca3c0 100644
--- a/public/language/tr/admin/manage/categories.json
+++ b/public/language/tr/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "Son Yanıtların # Tanesi",
"ext-link": "Harici Bağlantı",
"is-section": "Bu kategoriyi bir bölüm olarak değerlendir",
+ "post-queue": "Post queue",
"tag-whitelist": "İzin Verilen Etiketler",
"upload-image": "Görsel Yükle",
"delete-image": "Sil",
diff --git a/public/language/tr/admin/manage/privileges.json b/public/language/tr/admin/manage/privileges.json
index 821d8607bf..fd11b7201d 100644
--- a/public/language/tr/admin/manage/privileges.json
+++ b/public/language/tr/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Grup Ayrıcalıkları",
"user-privileges": "Kullanıcı Ayrıcalıkları",
"edit-privileges": "Ayrıcalıkları Düzenle",
+ "select-clear-all": "Select/Clear All",
"chat": "Sohbet",
"upload-images": "Resim Yükle",
"upload-files": "Dosya Yükle",
diff --git a/public/language/tr/admin/manage/tags.json b/public/language/tr/admin/manage/tags.json
index 08eb1ec39d..ed70a42fbd 100644
--- a/public/language/tr/admin/manage/tags.json
+++ b/public/language/tr/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Etiket(ler)i Düzenle",
"alerts.confirm-delete": "Seçilen etiketleri gerçekten silmek istiyor musunuz?",
- "alerts.update-success": "Etiket Güncellendi!"
+ "alerts.update-success": "Etiket Güncellendi!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/tr/admin/manage/users.json b/public/language/tr/admin/manage/users.json
index 7f89666304..95bfd7fad7 100644
--- a/public/language/tr/admin/manage/users.json
+++ b/public/language/tr/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Eposta:",
"alerts.email-sent-to": "%1'e bir davet e-postası gönderildi",
- "alerts.x-users-found": "%1 kullanıcı bulundu, (%2 saniye)"
+ "alerts.x-users-found": "%1 kullanıcı bulundu, (%2 saniye)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/tr/error.json b/public/language/tr/error.json
index 9d70592675..9de734069e 100644
--- a/public/language/tr/error.json
+++ b/public/language/tr/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Kullanıcı ismi çok uzun",
"password-too-long": "Şifre çok uzun",
"reset-rate-limited": "Aşırı fazla sayıda şifre sıfırlama isteği (kısıtlayıcı)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Kullanıcı Yasaklı",
"user-banned-reason": "Maalesef, bu hesap yasaklandı (Sebep: %1)",
"user-banned-reason-until": "Maalesef, bu hesap %1 tarihine kadar yasaklandı (Sebep: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Başka yöneticileri yasaklayamazsınız!",
"cant-remove-last-admin": "Tek yönetici sizsiniz. Kendinizi adminlikten çıkarmadan önce başka bir kullanıcıyı admin olarak ekleyiniz",
"cant-delete-admin": "Öncelikle yönetici izinlerini kaldırman gerekiyor.",
+ "already-deleting": "Already deleting",
"invalid-image": "Geçersiz görsel",
"invalid-image-type": "Geçersiz görsel uzantısı. Izin verilen uzantılar: %1",
"invalid-image-extension": "Geçersiz görsel uzantısı",
@@ -144,6 +146,7 @@
"user-already-flagged": "Bu kullanıcıyı önceden şikayet etmişsiniz.",
"post-flagged-too-many-times": "Bu ileti başkaları tarafından halihazırda şikayet edilmiş.",
"user-flagged-too-many-times": "Bu kullanıcı başkaları tarafından halihazırda şikayet edilmiş.",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Kendi iletinize oy veremezsiniz",
"too-many-downvotes-today": "Bir günde sadece %1 eksi oy verebilirsiniz",
"too-many-downvotes-today-user": "Bir kullanıcıya bir günde sadece %1 eksi oy verebilirsiniz",
diff --git a/public/language/tr/flags.json b/public/language/tr/flags.json
index a7c482eaf2..995b2b3fc6 100644
--- a/public/language/tr/flags.json
+++ b/public/language/tr/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Toplu Aksiyonlar",
"bulk-resolve": "Şikayetleri Çözümle",
- "bulk-success": "%1 şikayet güncellendi"
+ "bulk-success": "%1 şikayet güncellendi",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json
index c6faa84f0c..dbf4b9b6f7 100644
--- a/public/language/tr/notifications.json
+++ b/public/language/tr/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profili hazırlandı, indirmek için tıklayınız",
"posts-exported": "%1 iletileri hazırlandı, indirmek için tıklayınız",
"uploads-exported": "%1 yüklemeleri hazırlandı, indirmek için tıklayınız",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "E-posta onaylandı",
"email-confirmed-message": "E-postanızı onayladığınız için teşekkürler. Hesabınız tamamen aktif edildi.",
"email-confirm-error-message": "E-posta adresinizi onaylarken bir hata oluştu. Kodunuz geçersiz ya da eski olabilir.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Bir sohbet mesajı aldığınızda",
"notificationType_new-group-chat": "Grup sohbet mesajı aldığınızda",
"notificationType_group-invite": "Bir gruba katılım davetiyesi aldığınızda",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Biri size ait bir gruba üye olmak istediğinde",
"notificationType_new-register": "Biri kayıt kuyruğuna eklendiğinde",
"notificationType_post-queue": "Yeni bir ileti sıraya alındığında",
diff --git a/public/language/tr/topic.json b/public/language/tr/topic.json
index 0816900cb2..145c676adf 100644
--- a/public/language/tr/topic.json
+++ b/public/language/tr/topic.json
@@ -29,6 +29,7 @@
"tools": "Araçlar",
"locked": "Kilitli",
"pinned": "Sabitlendi",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Taşındı",
"moved-from": "Şuradan taşındı: %1",
"copy-ip": "IP Kopyala",
diff --git a/public/language/uk/admin/manage/categories.json b/public/language/uk/admin/manage/categories.json
index fda74791f2..20f1f19a2c 100644
--- a/public/language/uk/admin/manage/categories.json
+++ b/public/language/uk/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "Кількість свіжих відповідей",
"ext-link": "Зовнішнє посилання",
"is-section": "Вважати цю категорію розділом",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Завантажити зображення",
"delete-image": "Видалити",
diff --git a/public/language/uk/admin/manage/privileges.json b/public/language/uk/admin/manage/privileges.json
index 08558a58bd..d1ddb942f3 100644
--- a/public/language/uk/admin/manage/privileges.json
+++ b/public/language/uk/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Чат",
"upload-images": "Завантаження Зображень",
"upload-files": "Завантаження Файлів",
diff --git a/public/language/uk/admin/manage/tags.json b/public/language/uk/admin/manage/tags.json
index 3be675b387..4b3aeec452 100644
--- a/public/language/uk/admin/manage/tags.json
+++ b/public/language/uk/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Бажаєте видалити декілька тегів?",
- "alerts.update-success": "Тег оновлено!"
+ "alerts.update-success": "Тег оновлено!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/uk/admin/manage/users.json b/public/language/uk/admin/manage/users.json
index e00d2d4509..8fb7d8c9aa 100644
--- a/public/language/uk/admin/manage/users.json
+++ b/public/language/uk/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "Запрошення надіслано за адресою %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/uk/error.json b/public/language/uk/error.json
index b9a542a5ec..bab8b9fc53 100644
--- a/public/language/uk/error.json
+++ b/public/language/uk/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Ім'я користувача задовге",
"password-too-long": "Пароль задовгий",
"reset-rate-limited": "Занадто багато запитів на скидання паролю (кількість за період часу обмежена)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Користувача забанено",
"user-banned-reason": "Вибачте, але цей акаунт було забанено (Причина: %1)",
"user-banned-reason-until": "Вибачте, цей акаунт забанений до %1 (Причина: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Ви не можете банити інших адмінів!",
"cant-remove-last-admin": "Ви єдиний адміністратор. Додайте іншого користувача в якості адміністратора перш ніж знімати з себе ці обов'язки.",
"cant-delete-admin": "Зніміть обов'язки адміністратора з цього акаунту перш ніж видаляти його.",
+ "already-deleting": "Already deleting",
"invalid-image": "Невірне зображення",
"invalid-image-type": "Невірний тип зображення. Дозволені типи: %1",
"invalid-image-extension": "Невірне розширення зображення",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Ви не можете проголосувати за власний пост",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/uk/notifications.json b/public/language/uk/notifications.json
index 7656fcbb5e..81db999a59 100644
--- a/public/language/uk/notifications.json
+++ b/public/language/uk/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Електронну пошту підтверджено",
"email-confirmed-message": "Дякуємо за підтвердження електронної пошти. Ваш акаунт тепер повністю активовано.",
"email-confirm-error-message": "При перевірці вашої електронної пошти сталася проблема. Можливо код був недійсним або простроченим.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Коли ви отримуєте повідомлення чату",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Коли ви отримуєте запрошення до групи",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Коли хтось подає запит на приєднання до групи, якою ви володієте",
"notificationType_new-register": "Коли когось додано до черги на реєстрацію",
"notificationType_post-queue": "Коли новий пост знаходиться в черзі",
diff --git a/public/language/uk/topic.json b/public/language/uk/topic.json
index afc79fc17f..bd2d6bd39b 100644
--- a/public/language/uk/topic.json
+++ b/public/language/uk/topic.json
@@ -29,6 +29,7 @@
"tools": "Інструменти",
"locked": "Заблокована",
"pinned": "Закріплена",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Переміщена",
"moved-from": "Moved from %1",
"copy-ip": "Копіювати IP",
diff --git a/public/language/vi/admin/manage/categories.json b/public/language/vi/admin/manage/categories.json
index 0c0992fca5..1144e16433 100644
--- a/public/language/vi/admin/manage/categories.json
+++ b/public/language/vi/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "# of Recent Replies",
"ext-link": "External Link",
"is-section": "Treat this category as a section",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image",
"delete-image": "Remove",
diff --git a/public/language/vi/admin/manage/privileges.json b/public/language/vi/admin/manage/privileges.json
index 3b24b1cc3e..d90fb7893d 100644
--- a/public/language/vi/admin/manage/privileges.json
+++ b/public/language/vi/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "Chat",
"upload-images": "Upload Images",
"upload-files": "Upload Files",
diff --git a/public/language/vi/admin/manage/tags.json b/public/language/vi/admin/manage/tags.json
index 928a6a5068..3976ea97d7 100644
--- a/public/language/vi/admin/manage/tags.json
+++ b/public/language/vi/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "Editing tag(s)",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
- "alerts.update-success": "Tag Updated!"
+ "alerts.update-success": "Tag Updated!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/vi/admin/manage/users.json b/public/language/vi/admin/manage/users.json
index d0d95b380f..76488baeb7 100644
--- a/public/language/vi/admin/manage/users.json
+++ b/public/language/vi/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/vi/error.json b/public/language/vi/error.json
index 458760585f..3c97fb550f 100644
--- a/public/language/vi/error.json
+++ b/public/language/vi/error.json
@@ -40,6 +40,7 @@
"username-too-long": "Tên đăng nhập quá dài",
"password-too-long": "Mật khẩu quá dài",
"reset-rate-limited": "Too many password reset requests (rate limited)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "Tài khoản bị ban",
"user-banned-reason": "Xin lỗi, tài khoản này đã bị khóa (Lí do: %1)",
"user-banned-reason-until": "Rất tiếc, tài khoản này đã bị cấm cho đến %1 (Lý do: %2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "Bạn không thể cấm được các quản trị viên khác",
"cant-remove-last-admin": "Bạn là quản trị viên duy nhất. Hãy cho thành viên khác làm quản trị viên trước khi huỷ bỏ quyền quản trị của bạn.",
"cant-delete-admin": "Hủy quyền quản trị của tài khoản này trước khi xóa",
+ "already-deleting": "Already deleting",
"invalid-image": "Hình ảnh không hợp lệ",
"invalid-image-type": "Định dạng ảnh không hợp lệ. Những định dạng được cho phép là: %1",
"invalid-image-extension": "Định dạng ảnh không hợp lệ",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "Bạn không thể tự bầu cho bài đăng của mình",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/vi/flags.json b/public/language/vi/flags.json
index 13b3567bc9..457d80c6d0 100644
--- a/public/language/vi/flags.json
+++ b/public/language/vi/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/vi/notifications.json b/public/language/vi/notifications.json
index 2f1a7e6048..41efed9d17 100644
--- a/public/language/vi/notifications.json
+++ b/public/language/vi/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "Đã xác nhận email",
"email-confirmed-message": "Cảm ơn bạn đã xác nhận địa chỉ email của bạn. Tài khoản của bạn đã được kích hoạt đầy đủ.",
"email-confirm-error-message": "Đã có lỗi khi xác nhận địa chỉ email. Có thể đoạn mã không đúng hoặc đã hết hạn.",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "Khi bạn nhận được thông điệp chat",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "Khi bạn nhận được lời mời gia nhập nhóm",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "Khi ai đó yêu cầu tham gia một nhóm bạn sở hữu",
"notificationType_new-register": "Khi ai đó được thêm vào lượt chờ đăng ký",
"notificationType_post-queue": "Khi bài đăng được thêm vào lượt chờ",
diff --git a/public/language/vi/topic.json b/public/language/vi/topic.json
index a4115ca2c5..a3cf7bdfaa 100644
--- a/public/language/vi/topic.json
+++ b/public/language/vi/topic.json
@@ -29,6 +29,7 @@
"tools": "Công cụ",
"locked": "Khóa",
"pinned": "Đã ghim",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "Chuyển đi",
"moved-from": "Moved from %1",
"copy-ip": "Sao chép IP",
diff --git a/public/language/zh-CN/admin/manage/categories.json b/public/language/zh-CN/admin/manage/categories.json
index cc698c13a8..7feeeb3f33 100644
--- a/public/language/zh-CN/admin/manage/categories.json
+++ b/public/language/zh-CN/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "最近回复数",
"ext-link": "外部链接",
"is-section": "将此版块作为段落",
+ "post-queue": "Post queue",
"tag-whitelist": "话题白名单",
"upload-image": "上传图片",
"delete-image": "移除",
diff --git a/public/language/zh-CN/admin/manage/privileges.json b/public/language/zh-CN/admin/manage/privileges.json
index d48c61b0e9..3d8b8bbd72 100644
--- a/public/language/zh-CN/admin/manage/privileges.json
+++ b/public/language/zh-CN/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "群组权限",
"user-privileges": "用户权限",
"edit-privileges": "编辑权限",
+ "select-clear-all": "Select/Clear All",
"chat": "对话",
"upload-images": "上传图片",
"upload-files": "上传文件",
diff --git a/public/language/zh-CN/admin/manage/tags.json b/public/language/zh-CN/admin/manage/tags.json
index 5dfc831dfc..f805b7b05b 100644
--- a/public/language/zh-CN/admin/manage/tags.json
+++ b/public/language/zh-CN/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "编辑标签",
"alerts.confirm-delete": "是否要删除所选话题?",
- "alerts.update-success": "话题已更新!"
+ "alerts.update-success": "话题已更新!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/admin/manage/users.json b/public/language/zh-CN/admin/manage/users.json
index 6e707992e9..a10285bc18 100644
--- a/public/language/zh-CN/admin/manage/users.json
+++ b/public/language/zh-CN/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "邮件:",
"alerts.email-sent-to": "已发送邀请给 %1",
- "alerts.x-users-found": "找到 %1 位用户(耗时 %2 秒)"
+ "alerts.x-users-found": "找到 %1 位用户(耗时 %2 秒)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/zh-CN/error.json b/public/language/zh-CN/error.json
index bdb7df459a..12a6b51247 100644
--- a/public/language/zh-CN/error.json
+++ b/public/language/zh-CN/error.json
@@ -40,6 +40,7 @@
"username-too-long": "用户名太长",
"password-too-long": "密码太长",
"reset-rate-limited": "太多密码重置请求(总数有限)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "用户已禁止",
"user-banned-reason": "抱歉,此帐号已经被封禁 (原因:%1)",
"user-banned-reason-until": "抱歉,此帐户已被封禁,直到%1(原因:%2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "您不能封禁其他管理员!",
"cant-remove-last-admin": "您是唯一的管理员。在删除您的管理员权限前,请添加另一个管理员。",
"cant-delete-admin": "在删除该账号之前,请先移除其管理权限。",
+ "already-deleting": "Already deleting",
"invalid-image": "无效的图片",
"invalid-image-type": "无效的图像类型。允许的类型有:%1",
"invalid-image-extension": "无效的图像扩展",
@@ -144,6 +146,7 @@
"user-already-flagged": "您已举报此用户",
"post-flagged-too-many-times": "此贴已被其他用户举报",
"user-flagged-too-many-times": "此用户已被其他用户举报",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "您不能对您自己的帖子投票",
"too-many-downvotes-today": "您每天只能踩 %1 次",
"too-many-downvotes-today-user": "您每天只能对一个用户踩 %1 次",
diff --git a/public/language/zh-CN/flags.json b/public/language/zh-CN/flags.json
index dbcc5dba94..34a2c53dcb 100644
--- a/public/language/zh-CN/flags.json
+++ b/public/language/zh-CN/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "批量操作",
"bulk-resolve": "处理举报",
- "bulk-success": "已更新%1个举报"
+ "bulk-success": "已更新%1个举报",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/zh-CN/notifications.json b/public/language/zh-CN/notifications.json
index 45bc43c3b2..ac864191f6 100644
--- a/public/language/zh-CN/notifications.json
+++ b/public/language/zh-CN/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1资料已导出,点击下载",
"posts-exported": "%1帖子已导出,点击下载",
"uploads-exported": "%1上传已导出,点击下载",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "电子邮箱已确认",
"email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已完全激活。",
"email-confirm-error-message": "验证的您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "当您收到聊天消息时",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "当您收到群组邀请时",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "当有人请求加入您拥有的用户组时",
"notificationType_new-register": "当有人被添加到申请队列时",
"notificationType_post-queue": "当有新帖子等待审核时",
diff --git a/public/language/zh-CN/topic.json b/public/language/zh-CN/topic.json
index 6580a4cfcf..6f7796d154 100644
--- a/public/language/zh-CN/topic.json
+++ b/public/language/zh-CN/topic.json
@@ -29,6 +29,7 @@
"tools": "工具",
"locked": "已锁定",
"pinned": "已固定",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "已移动",
"moved-from": "移自1%版 ",
"copy-ip": "复制IP",
diff --git a/public/language/zh-TW/admin/manage/categories.json b/public/language/zh-TW/admin/manage/categories.json
index 4a93fd4779..917847b625 100644
--- a/public/language/zh-TW/admin/manage/categories.json
+++ b/public/language/zh-TW/admin/manage/categories.json
@@ -11,6 +11,7 @@
"num-recent-replies": "最近回覆數",
"ext-link": "外部連結",
"is-section": "將該版面作為分段",
+ "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist",
"upload-image": "上傳圖片",
"delete-image": "移除",
diff --git a/public/language/zh-TW/admin/manage/privileges.json b/public/language/zh-TW/admin/manage/privileges.json
index b80f3bf5f6..88d37d2f19 100644
--- a/public/language/zh-TW/admin/manage/privileges.json
+++ b/public/language/zh-TW/admin/manage/privileges.json
@@ -4,6 +4,7 @@
"group-privileges": "群組權限",
"user-privileges": "使用者權限",
"edit-privileges": "Edit Privileges",
+ "select-clear-all": "Select/Clear All",
"chat": "聊天",
"upload-images": "上傳圖片",
"upload-files": "上傳檔案",
diff --git a/public/language/zh-TW/admin/manage/tags.json b/public/language/zh-TW/admin/manage/tags.json
index e1ea496724..da995a7e21 100644
--- a/public/language/zh-TW/admin/manage/tags.json
+++ b/public/language/zh-TW/admin/manage/tags.json
@@ -14,5 +14,6 @@
"alerts.editing": "編輯(多個)標籤",
"alerts.confirm-delete": "是否要刪除所選標籤?",
- "alerts.update-success": "標籤已更新!"
+ "alerts.update-success": "標籤已更新!",
+ "reset-colors": "Reset colors"
}
\ No newline at end of file
diff --git a/public/language/zh-TW/admin/manage/users.json b/public/language/zh-TW/admin/manage/users.json
index 97f9865efb..9890c9381f 100644
--- a/public/language/zh-TW/admin/manage/users.json
+++ b/public/language/zh-TW/admin/manage/users.json
@@ -102,5 +102,7 @@
"alerts.prompt-email": "電郵地址:",
"alerts.email-sent-to": "已發送邀請給 %1",
- "alerts.x-users-found": "%1 user(s) found, (%2 seconds)"
+ "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
+ "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
+ "export-users-completed": "Users exported as csv, click here to download."
}
\ No newline at end of file
diff --git a/public/language/zh-TW/error.json b/public/language/zh-TW/error.json
index 3bdcf3ba32..cc49966670 100644
--- a/public/language/zh-TW/error.json
+++ b/public/language/zh-TW/error.json
@@ -40,6 +40,7 @@
"username-too-long": "使用者名太長",
"password-too-long": "密碼太長",
"reset-rate-limited": "太多密碼重設請求(有頻率限制)",
+ "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "使用者已停權",
"user-banned-reason": "抱歉,此帳戶已經被停權 (原因:%1)",
"user-banned-reason-until": "抱歉,此帳戶已被停權,直到%1(原因:%2)",
@@ -91,6 +92,7 @@
"cant-ban-other-admins": "您不能封鎖其他管理員!",
"cant-remove-last-admin": "您是唯一的管理員。在刪除您的管理員權限前,請增加另一個管理員。",
"cant-delete-admin": "在刪除該帳戶之前,請先移除其管理權限。",
+ "already-deleting": "Already deleting",
"invalid-image": "無效的圖檔",
"invalid-image-type": "無效的圖檔類型。允許的類型有:%1",
"invalid-image-extension": "無效的圖檔副檔名",
@@ -144,6 +146,7 @@
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
+ "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "您不能讚您自己的貼文",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
diff --git a/public/language/zh-TW/flags.json b/public/language/zh-TW/flags.json
index 883891eda6..0232b7b266 100644
--- a/public/language/zh-TW/flags.json
+++ b/public/language/zh-TW/flags.json
@@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
- "bulk-success": "%1 flags updated"
+ "bulk-success": "%1 flags updated",
+ "flagged-timeago-readable": "Flagged (%2)"
}
\ No newline at end of file
diff --git a/public/language/zh-TW/notifications.json b/public/language/zh-TW/notifications.json
index 9a982f8970..8951ca9a2a 100644
--- a/public/language/zh-TW/notifications.json
+++ b/public/language/zh-TW/notifications.json
@@ -46,6 +46,7 @@
"profile-exported": "%1 profile exported, click to download",
"posts-exported": "%1 posts exported, click to download",
"uploads-exported": "%1 uploads exported, click to download",
+ "users-csv-exported": "Users csv exported, click to download",
"email-confirmed": "電子信箱已確認",
"email-confirmed-message": "感謝您驗證您的電子信箱。您的帳戶現已完全啟用。",
"email-confirm-error-message": "驗證的您電子信箱地址時出現了問題。可能是因為驗證碼無效或已過期。",
@@ -62,6 +63,7 @@
"notificationType_new-chat": "當您收到聊天訊息時",
"notificationType_new-group-chat": "When you receive a group chat message",
"notificationType_group-invite": "當您收到群組邀請時",
+ "notificationType_group-leave": "When a user leaves your group",
"notificationType_group-request-membership": "當有人請求加入您擁有的群組時",
"notificationType_new-register": "當有註冊申請待審核時",
"notificationType_post-queue": "當有新貼文等待審核時",
diff --git a/public/language/zh-TW/topic.json b/public/language/zh-TW/topic.json
index 4a28540245..7ff78f52aa 100644
--- a/public/language/zh-TW/topic.json
+++ b/public/language/zh-TW/topic.json
@@ -29,6 +29,7 @@
"tools": "工具",
"locked": "已鎖定",
"pinned": "已置頂",
+ "pinned-with-expiry": "Pinned until %1",
"moved": "已移動",
"moved-from": "Moved from %1",
"copy-ip": "複製IP",
diff --git a/public/less/admin/advanced/hooks.less b/public/less/admin/advanced/hooks.less
index 790a539c5a..ef8ca579f4 100644
--- a/public/less/admin/advanced/hooks.less
+++ b/public/less/admin/advanced/hooks.less
@@ -1,3 +1,3 @@
-.admin .hooks-list .panel.panel-default .panel-heading {
+.admin .hooks-list .panel.panel-default .panel-heading .panel-title a {
text-transform: none;
}
diff --git a/public/openapi/components/schemas/CategoryObject.yaml b/public/openapi/components/schemas/CategoryObject.yaml
index 1599975b3c..c19a5f192c 100644
--- a/public/openapi/components/schemas/CategoryObject.yaml
+++ b/public/openapi/components/schemas/CategoryObject.yaml
@@ -57,6 +57,8 @@ CategoryObject:
description: The `background-position` of the category background image, if one is set
isSection:
type: number
+ postQueue:
+ type: number
totalPostCount:
type: number
description: The number of posts in the category
diff --git a/public/openapi/components/schemas/SettingsObj.yaml b/public/openapi/components/schemas/SettingsObj.yaml
index a0d53b5bcb..eb2362bd63 100644
--- a/public/openapi/components/schemas/SettingsObj.yaml
+++ b/public/openapi/components/schemas/SettingsObj.yaml
@@ -83,6 +83,9 @@ Settings:
notificationType_group-invite:
type: string
description: Notification type for group invitations
+ notificationType_group-leave:
+ type: string
+ description: Notification type for when users leave your group
upvoteNotifFreq:
type: string
description: How often to notify you when your posts are upvoted
@@ -137,6 +140,7 @@ Settings:
- notificationType_new-topic
- notificationType_follow
- notificationType_group-invite
+ - notificationType_group-leave
- upvoteNotifFreq
- acpLang
- notificationType_new-register
diff --git a/public/openapi/components/schemas/TopicObject.yaml b/public/openapi/components/schemas/TopicObject.yaml
index 590872e03e..2e5085158f 100644
--- a/public/openapi/components/schemas/TopicObject.yaml
+++ b/public/openapi/components/schemas/TopicObject.yaml
@@ -13,8 +13,7 @@ TopicObject:
description: A category identifier
mainPid:
type: number
- description: The post id of the first post in this topic (also called the
- "original post")
+ description: The post id of the first post in this topic (also called the "original post")
title:
type: string
slug:
@@ -55,6 +54,7 @@ TopicObject:
description: An ISO 8601 formatted date string (complementing `timestamp`)
lastposttimeISO:
type: string
+ description: An ISO 8601 formatted date string (complementing `lastposttime`)
votes:
type: number
category:
@@ -230,5 +230,65 @@ TopicObject:
description: A topic identifier
thumb:
type: string
+ pinExpiry:
+ type: number
+ description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired)
+ pinExpiryISO:
+ type: string
+ description: "`pinExpiry` rendered as an ISO 8601 format"
required:
- - tid
\ No newline at end of file
+ - tid
+TopicObjectSlim:
+ description: The output of a call to `Topics.getTopicField`, these properties are always present no matter the fields passed in
+ type: object
+ properties:
+ tid:
+ type: number
+ description: A topic identifier
+ uid:
+ type: number
+ description: A user identifier
+ cid:
+ type: number
+ description: A category identifier
+ mainPid:
+ type: number
+ description: The post id of the first post in this topic (also called the "original post")
+ postcount:
+ type: number
+ viewcount:
+ type: number
+ postercount:
+ type: number
+ deleted:
+ type: number
+ deleterUid:
+ type: number
+ locked:
+ type: number
+ pinned:
+ type: number
+ description: Whether or not this particular topic is pinned to the top of the
+ category
+ timestamp:
+ type: number
+ timestampISO:
+ type: string
+ description: An ISO 8601 formatted date string (complementing `timestamp`)
+ lastposttime:
+ type: number
+ lastposttimeISO:
+ type: string
+ description: An ISO 8601 formatted date string (complementing `lastposttime`)
+ pinExpiry:
+ type: number
+ description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired)
+ pinExpiryISO:
+ type: string
+ description: "`pinExpiry` rendered as an ISO 8601 format"
+ upvotes:
+ type: number
+ downvotes:
+ type: number
+ votes:
+ type: number
\ No newline at end of file
diff --git a/public/openapi/components/schemas/UserObject.yaml b/public/openapi/components/schemas/UserObject.yaml
index 2edc402156..d1621e13df 100644
--- a/public/openapi/components/schemas/UserObject.yaml
+++ b/public/openapi/components/schemas/UserObject.yaml
@@ -412,6 +412,8 @@ UserObjectFull:
type: boolean
canBan:
type: boolean
+ canFlag:
+ type: boolean
canChangePassword:
type: boolean
isSelf:
diff --git a/public/openapi/read/admin/manage/categories/category_id.yaml b/public/openapi/read/admin/manage/categories/category_id.yaml
index bf7946222f..0dba90a8a6 100644
--- a/public/openapi/read/admin/manage/categories/category_id.yaml
+++ b/public/openapi/read/admin/manage/categories/category_id.yaml
@@ -89,4 +89,6 @@ get:
type: array
items:
type: string
+ postQueueEnabled:
+ type: boolean
- $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps
\ No newline at end of file
diff --git a/public/openapi/read/admin/manage/users.yaml b/public/openapi/read/admin/manage/users.yaml
index c3278c007b..80dbed1728 100644
--- a/public/openapi/read/admin/manage/users.yaml
+++ b/public/openapi/read/admin/manage/users.yaml
@@ -27,6 +27,8 @@ get:
type: string
sort_lastonline:
type: boolean
+ userCount:
+ type: number
showInviteButton:
type: boolean
inviteOnly:
diff --git a/public/openapi/read/category/cid/id.yaml b/public/openapi/read/category/cid/id.yaml
index 98fd0d4e34..e70f774b07 100644
--- a/public/openapi/read/category/cid/id.yaml
+++ b/public/openapi/read/category/cid/id.yaml
@@ -53,6 +53,8 @@ get:
type: string
isSection:
type: number
+ postQueue:
+ type: number
totalPostCount:
type: number
totalTopicCount:
diff --git a/public/openapi/read/tags/tag.yaml b/public/openapi/read/tags/tag.yaml
index cae61daf61..aaa2138a37 100644
--- a/public/openapi/read/tags/tag.yaml
+++ b/public/openapi/read/tags/tag.yaml
@@ -255,6 +255,8 @@ get:
type: string
rssFeedUrl:
type: string
+ feeds:disableRSS:
+ type: boolean
required:
- topics
- tag
diff --git a/public/openapi/read/topic/tid/id.yaml b/public/openapi/read/topic/tid/id.yaml
index cdc638a1f5..5305a99c7f 100644
--- a/public/openapi/read/topic/tid/id.yaml
+++ b/public/openapi/read/topic/tid/id.yaml
@@ -15,50 +15,16 @@ get:
content:
application/json:
schema:
- type: object
- properties:
- tid:
- type: number
- uid:
- type: number
- cid:
- type: number
- mainPid:
- type: number
- teaserPid:
- type: number
- nullable: true
- title:
- type: string
- slug:
- type: string
- timestamp:
- type: number
- lastposttime:
- type: number
- postercount:
- type: number
- postcount:
- type: number
- viewcount:
- type: number
- deleted:
- type: number
- locked:
- type: number
- pinned:
- type: number
- upvotes:
- type: number
- downvotes:
- type: number
- deleterUid:
- type: number
- titleRaw:
- type: string
- timestampISO:
- type: string
- lastposttimeISO:
- type: string
- votes:
- type: number
\ No newline at end of file
+ allOf:
+ - $ref: ../../../components/schemas/TopicObject.yaml#/TopicObjectSlim
+ - type: object
+ properties:
+ teaserPid:
+ type: number
+ nullable: true
+ title:
+ type: string
+ slug:
+ type: string
+ titleRaw:
+ type: string
\ No newline at end of file
diff --git a/public/openapi/read/topic/topic_id.yaml b/public/openapi/read/topic/topic_id.yaml
index 88081d23dc..67f7ef3096 100644
--- a/public/openapi/read/topic/topic_id.yaml
+++ b/public/openapi/read/topic/topic_id.yaml
@@ -30,62 +30,18 @@ get:
application/json:
schema:
allOf:
+ - $ref: ../../components/schemas/TopicObject.yaml#/TopicObjectSlim
- type: object
properties:
- tid:
- type: number
- description: A topic identifier
- uid:
- type: number
- description: A user identifier
- cid:
- type: number
- description: A category identifier
title:
type: string
slug:
type: string
- timestamp:
- type: number
- lastposttime:
- type: number
- postcount:
- type: number
- viewcount:
- type: number
- postercount:
- type: number
- description: The number of unique users who made a post in this topic
- mainPid:
- type: number
- description: The post id of the first post in this topic (also called the
- "original post")
teaserPid:
type: number
nullable: true
- upvotes:
- type: number
- downvotes:
- type: number
- deleted:
- type: number
- locked:
- type: number
- pinned:
- type: number
- description: Whether or not this particular topic is pinned to the top of the
- category
- deleterUid:
- type: number
titleRaw:
type: string
- timestampISO:
- type: string
- description: An ISO 8601 formatted date string (complementing `timestamp`)
- lastposttimeISO:
- type: string
- votes:
- type: number
tags:
type: array
items:
diff --git a/public/openapi/read/unread.yaml b/public/openapi/read/unread.yaml
index a5fe83348e..e2b48faee9 100644
--- a/public/openapi/read/unread.yaml
+++ b/public/openapi/read/unread.yaml
@@ -22,162 +22,42 @@ get:
topics:
type: array
items:
- type: object
- properties:
- tid:
- type: number
- description: A topic identifier
- uid:
- type: number
- description: A user identifier
- cid:
- type: number
- description: A category identifier
- mainPid:
- type: number
- description: The post id of the first post in this topic (also called the
- "original post")
- title:
- type: string
- slug:
- type: string
- timestamp:
- type: number
- lastposttime:
- type: number
- postcount:
- type: number
- viewcount:
- type: number
- postercount:
- type: number
- teaserPid:
- type: number
- nullable: true
- upvotes:
- type: number
- downvotes:
- type: number
- deleterUid:
- type: number
- deleted:
- type: number
- locked:
- type: number
- pinned:
- type: number
- description: Whether or not this particular topic is pinned to the top of the
- category
- titleRaw:
- type: string
- timestampISO:
- type: string
- description: An ISO 8601 formatted date string (complementing `timestamp`)
- lastposttimeISO:
- type: string
- votes:
- type: number
- category:
- type: object
+ allOf:
+ - $ref: ../components/schemas/TopicObject.yaml#/TopicObjectSlim
+ - type: object
properties:
- cid:
- type: number
- description: A category identifier
- name:
+ title:
type: string
slug:
type: string
- icon:
- type: string
- backgroundImage:
- nullable: true
- imageClass:
+ teaserPid:
+ type: number
nullable: true
+ titleRaw:
type: string
- bgColor:
- type: string
- color:
- type: string
- disabled:
- type: number
- user:
- type: object
- properties:
- uid:
- type: number
- description: A user identifier
- username:
- type: string
- description: A friendly name for a given user account
- displayname:
- type: string
- description: This is either username or fullname depending on forum and user settings
- fullname:
- type: string
- userslug:
- type: string
- description: An URL-safe variant of the username (i.e. lower-cased, spaces
- removed, etc.)
- reputation:
- type: number
- postcount:
- type: number
- picture:
- nullable: true
- type: string
- signature:
- nullable: true
- type: string
- banned:
- type: number
- status:
- type: string
- icon:text:
- type: string
- description: A single-letter representation of a username. This is used in the
- auto-generated icon given to users without
- an avatar
- icon:bgColor:
- type: string
- description: A six-character hexadecimal colour code assigned to the user. This
- value is used in conjunction with
- `icon:text` for the user's auto-generated
- icon
- example: "#f44336"
- banned_until_readable:
- type: string
- required:
- - uid
- - username
- - userslug
- - reputation
- - postcount
- - picture
- - signature
- - banned
- - status
- - icon:text
- - icon:bgColor
- - banned_until_readable
- teaser:
- type: object
- nullable: true
- properties:
- pid:
- type: number
- uid:
- type: number
- description: A user identifier
- timestamp:
- type: number
- tid:
- type: number
- description: A topic identifier
- content:
- type: string
- timestampISO:
- type: string
- description: An ISO 8601 formatted date string (complementing `timestamp`)
+ category:
+ type: object
+ properties:
+ cid:
+ type: number
+ description: A category identifier
+ name:
+ type: string
+ slug:
+ type: string
+ icon:
+ type: string
+ backgroundImage:
+ nullable: true
+ imageClass:
+ nullable: true
+ type: string
+ bgColor:
+ type: string
+ color:
+ type: string
+ disabled:
+ type: number
user:
type: object
properties:
@@ -187,47 +67,125 @@ get:
username:
type: string
description: A friendly name for a given user account
+ displayname:
+ type: string
+ description: This is either username or fullname depending on forum and user settings
+ fullname:
+ type: string
userslug:
type: string
description: An URL-safe variant of the username (i.e. lower-cased, spaces
removed, etc.)
+ reputation:
+ type: number
+ postcount:
+ type: number
picture:
nullable: true
type: string
+ signature:
+ nullable: true
+ type: string
+ banned:
+ type: number
+ status:
+ type: string
icon:text:
type: string
description: A single-letter representation of a username. This is used in the
- auto-generated icon given to users
- without an avatar
+ auto-generated icon given to users without
+ an avatar
icon:bgColor:
type: string
description: A six-character hexadecimal colour code assigned to the user. This
value is used in conjunction with
- `icon:text` for the user's
- auto-generated icon
+ `icon:text` for the user's auto-generated
+ icon
example: "#f44336"
+ banned_until_readable:
+ type: string
+ required:
+ - uid
+ - username
+ - userslug
+ - reputation
+ - postcount
+ - picture
+ - signature
+ - banned
+ - status
+ - icon:text
+ - icon:bgColor
+ - banned_until_readable
+ teaser:
+ type: object
+ nullable: true
+ properties:
+ pid:
+ type: number
+ uid:
+ type: number
+ description: A user identifier
+ timestamp:
+ type: number
+ tid:
+ type: number
+ description: A topic identifier
+ content:
+ type: string
+ timestampISO:
+ type: string
+ description: An ISO 8601 formatted date string (complementing `timestamp`)
+ user:
+ type: object
+ properties:
+ uid:
+ type: number
+ description: A user identifier
+ username:
+ type: string
+ description: A friendly name for a given user account
+ userslug:
+ type: string
+ description: An URL-safe variant of the username (i.e. lower-cased, spaces
+ removed, etc.)
+ picture:
+ nullable: true
+ type: string
+ icon:text:
+ type: string
+ description: A single-letter representation of a username. This is used in the
+ auto-generated icon given to users
+ without an avatar
+ icon:bgColor:
+ type: string
+ description: A six-character hexadecimal colour code assigned to the user. This
+ value is used in conjunction with
+ `icon:text` for the user's
+ auto-generated icon
+ example: "#f44336"
+ index:
+ type: number
+ tags:
+ type: array
+ items:
+ $ref: ../components/schemas/TagObject.yaml#/TagObject
+ isOwner:
+ type: boolean
+ ignored:
+ type: boolean
+ unread:
+ type: boolean
+ bookmark:
+ nullable: true
+ unreplied:
+ type: boolean
+ icons:
+ type: array
+ items:
+ type: string
index:
type: number
- tags:
- type: array
- items:
- $ref: ../components/schemas/TagObject.yaml#/TagObject
- isOwner:
- type: boolean
- ignored:
- type: boolean
- unread:
- type: boolean
- bookmark:
- nullable: true
- unreplied:
- type: boolean
- icons:
- type: array
- items:
- type: string
- index:
- type: number
topicCount:
type: number
title:
diff --git a/public/openapi/read/user/userslug/edit.yaml b/public/openapi/read/user/userslug/edit.yaml
index 4b1ea8b19c..734ea32abf 100644
--- a/public/openapi/read/user/userslug/edit.yaml
+++ b/public/openapi/read/user/userslug/edit.yaml
@@ -31,7 +31,7 @@ get:
type: boolean
allowProfileImageUploads:
type: number
- allowedProfileImageExtensios:
+ allowedProfileImageExtensions:
type: string
allowMultipleBadges:
type: boolean
diff --git a/public/openapi/read/user/userslug/watched.yaml b/public/openapi/read/user/userslug/watched.yaml
index 9069465791..11e6cf9266 100644
--- a/public/openapi/read/user/userslug/watched.yaml
+++ b/public/openapi/read/user/userslug/watched.yaml
@@ -16,200 +16,11 @@ get:
application/json:
schema:
allOf:
- - $ref: ../../../components/schemas/UserObject.yaml#/UserObject
+ - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull
- type: object
properties:
- aboutmeParsed:
- type: string
- age:
- type: number
- emailClass:
- type: string
- ips:
- type: array
- items:
- type: string
- counts:
- type: object
- properties:
- best:
- type: number
- blocks:
- type: number
- bookmarks:
- type: number
- categoriesWatched:
- type: number
- downvoted:
- type: number
- followers:
- type: number
- following:
- type: number
- groups:
- type: number
- ignored:
- type: number
- posts:
- type: number
- topics:
- type: number
- uploaded:
- type: number
- upvoted:
- type: number
- watched:
- type: number
- isBlocked:
- type: boolean
- blocksCount:
- type: number
- yourid:
- type: number
- theirid:
- type: number
- isTargetAdmin:
- type: boolean
- isAdmin:
- type: boolean
- isGlobalModerator:
- type: boolean
- isModerator:
- type: boolean
- isAdminOrGlobalModerator:
- type: boolean
- isAdminOrGlobalModeratorOrModerator:
- type: boolean
- isSelfOrAdminOrGlobalModerator:
- type: boolean
- canEdit:
- type: boolean
- canBan:
- type: boolean
- canChangePassword:
- type: boolean
- isSelf:
- type: boolean
- isFollowing:
- type: boolean
- hasPrivateChat:
- type: number
- showHidden:
- type: boolean
- groups:
- type: array
- items:
- type: object
- properties:
- name:
- type: string
- slug:
- type: string
- createtime:
- type: number
- userTitle:
- type: string
- description:
- type: string
- memberCount:
- type: number
- deleted:
- oneOf:
- - type: string
- - type: number
- hidden:
- type: number
- system:
- type: number
- private:
- type: number
- ownerUid:
- type: number
- icon:
- type: string
- labelColor:
- type: string
- userTitleEnabled:
- type: number
- disableJoinRequests:
- type: number
- disableLeave:
- type: number
- nameEncoded:
- type: string
- displayName:
- type: string
- textColor:
- type: string
- createtimeISO:
- type: string
- cover:thumb:url:
- type: string
- cover:url:
- type: string
- cover:position:
- type: string
- disableSignatures:
- type: boolean
- reputation:disabled:
- type: boolean
- downvote:disabled:
- type: boolean
- profile_links:
- type: array
- items:
- type: object
- properties:
- id:
- type: string
- route:
- type: string
- name:
- type: string
- visibility:
- type: object
- properties:
- self:
- type: boolean
- other:
- type: boolean
- moderator:
- type: boolean
- globalMod:
- type: boolean
- admin:
- type: boolean
- canViewInfo:
- type: boolean
- public:
- type: boolean
- icon:
- type: string
- sso:
- type: array
- items:
- type: object
- properties:
- associated:
- type: boolean
- url:
- type: string
- deauthUrl:
- type: string
- name:
- type: string
- icon:
- type: string
- websiteLink:
- type: string
- websiteName:
- type: string
moderationNote:
type: string
- username:disableEdit:
- type: boolean
- email:disableEdit:
- type: boolean
topics:
type: array
items:
diff --git a/public/src/admin/dashboard.js b/public/src/admin/dashboard.js
index e3bd17f9c0..7ed5d572fe 100644
--- a/public/src/admin/dashboard.js
+++ b/public/src/admin/dashboard.js
@@ -500,10 +500,14 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress'], function (Chart
function updateTopicsGraph(topics) {
if (!topics.length) {
- topics = [{
- title: '[[admin/dashboard:no-users-browsing]]',
- count: 1,
- }];
+ translator.translate('[[admin/dashboard:no-users-browsing]]', function (translated) {
+ topics = [{
+ title: translated,
+ count: 1,
+ }];
+ updateTopicsGraph(topics);
+ });
+ return;
}
graphs.topics.data.labels = [];
@@ -522,9 +526,8 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress'], function (Chart
var legend = $('#topics-legend').html('');
var html = '';
topics.forEach(function (t, i) {
- var label = t.count === '0' ?
- t.title :
- ' ' + t.title + '';
+ var link = t.tid ? ' ' + t.title + '' : t.title;
+ var label = t.count === '0' ? t.title : link;
html += '' +
'' +
diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js
index fdb5c565e2..5660cc8f05 100644
--- a/public/src/admin/extend/widgets.js
+++ b/public/src/admin/extend/widgets.js
@@ -10,14 +10,13 @@ define('admin/extend/widgets', [
var Widgets = {};
Widgets.init = function () {
- $('#widgets .nav-pills a').on('click', function (ev) {
+ $('#widgets .nav-pills .dropdown-menu a').on('click', function (ev) {
var $this = $(this);
- $('#widgets .nav-pills li').removeClass('active');
- $this.parent().addClass('active');
-
$('#widgets .tab-pane').removeClass('active');
- $('#widgets .tab-pane[data-template="' + $this.attr('data-template') + '"]').addClass('active');
-
+ var templateName = $this.attr('data-template');
+ $('#widgets .tab-pane[data-template="' + templateName + '"]').addClass('active');
+ $('#widgets .selected-template').text(templateName);
+ $('#widgets .nav-pills .dropdown').trigger('click');
ev.preventDefault();
return false;
});
diff --git a/public/src/admin/manage/privileges.js b/public/src/admin/manage/privileges.js
index 424d12881e..0fab84ed20 100644
--- a/public/src/admin/manage/privileges.js
+++ b/public/src/admin/manage/privileges.js
@@ -29,7 +29,7 @@ define('admin/manage/privileges', [
};
Privileges.setupPrivilegeTable = function () {
- $('.privilege-table-container').on('change', 'input[type="checkbox"]', function () {
+ $('.privilege-table-container').on('change', 'input[type="checkbox"]:not(.checkbox-helper)', function () {
var checkboxEl = $(this);
var wrapperEl = checkboxEl.parent();
var privilege = wrapperEl.attr('data-privilege');
diff --git a/public/src/admin/manage/tags.js b/public/src/admin/manage/tags.js
index 699d2ddffa..512e0732d7 100644
--- a/public/src/admin/manage/tags.js
+++ b/public/src/admin/manage/tags.js
@@ -159,6 +159,7 @@ define('admin/manage/tags', [
return app.alertError(err.message);
}
app.alertSuccess('[[admin/manage/tags:alerts.update-success]]');
+ ajaxify.refresh();
});
},
},
diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js
index bba44bf21d..a6f9c887d3 100644
--- a/public/src/admin/manage/users.js
+++ b/public/src/admin/manage/users.js
@@ -13,6 +13,34 @@ define('admin/manage/users', [
ajaxify.go(window.location.pathname + '?' + qs);
});
+ $('.export-csv').on('click', function () {
+ socket.once('event:export-users-csv', function () {
+ app.removeAlert('export-users-start');
+ app.alert({
+ alert_id: 'export-users',
+ type: 'success',
+ title: '[[global:alert.success]]',
+ message: '[[admin/manage/users:export-users-completed]]',
+ clickfn: function () {
+ window.location.href = config.relative_path + '/api/admin/users/csv';
+ },
+ timeout: 0,
+ });
+ });
+ socket.emit('admin.user.exportUsersCSV', {}, function (err) {
+ if (err) {
+ return app.alertError(err);
+ }
+ app.alert({
+ alert_id: 'export-users-start',
+ message: '[[admin/manage/users:export-users-started]]',
+ timeout: (ajaxify.data.userCount / 5000) * 500,
+ });
+ });
+
+ return false;
+ });
+
function getSelectedUids() {
var uids = [];
diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js
index 76b1a545ba..0c9e018d9b 100644
--- a/public/src/ajaxify.js
+++ b/public/src/ajaxify.js
@@ -7,19 +7,9 @@ ajaxify = window.ajaxify || {};
var apiXHR = null;
var ajaxifyTimer;
- var translator;
- var Benchpress;
var retry = true;
var previousBodyClass = '';
- // Dumb hack to fool ajaxify into thinking translator is still a global
- // When ajaxify is migrated to a require.js module, then this can be merged into the "define" call
- require(['translator', 'benchpress'], function (_translator, _Benchpress) {
- translator = _translator;
- translator.translate('[[error:no-connection]]');
- Benchpress = _Benchpress;
- });
-
ajaxify.count = 0;
ajaxify.currentPage = null;
@@ -155,16 +145,12 @@ ajaxify = window.ajaxify || {};
app.alertError('[[global:please_log_in]]');
app.previousUrl = url;
window.location.href = config.relative_path + '/login';
- } else if (status === 302 || status === 308) {
- if (data.responseJSON && data.responseJSON.external) {
- window.location.href = data.responseJSON.external;
- } else if (typeof data.responseJSON === 'string') {
- ajaxifyTimer = undefined;
- if (data.responseJSON.startsWith('http://') || data.responseJSON.startsWith('https://')) {
- window.location.href = data.responseJSON;
- } else {
- ajaxify.go(data.responseJSON.slice(1), callback, quiet);
- }
+ } else if ((status === 302 || status === 308) && typeof data.responseJSON === 'string') {
+ ajaxifyTimer = undefined;
+ if (data.responseJSON.startsWith('http://') || data.responseJSON.startsWith('https://')) {
+ window.location.href = data.responseJSON;
+ } else {
+ ajaxify.go(data.responseJSON.slice(1), callback, quiet);
}
}
} else if (textStatus !== 'abort') {
@@ -174,26 +160,27 @@ ajaxify = window.ajaxify || {};
function renderTemplate(url, tpl_url, data, callback) {
$(window).trigger('action:ajaxify.loadingTemplates', {});
+ require(['translator', 'benchpress'], function (translator, Benchpress) {
+ Benchpress.render(tpl_url, data)
+ .then(rendered => translator.translate(rendered))
+ .then(function (translated) {
+ translated = translator.unescape(translated);
+ $('body').removeClass(previousBodyClass).addClass(data.bodyClass);
+ $('#content').html(translated);
- Benchpress.render(tpl_url, data)
- .then(rendered => translator.translate(rendered))
- .then(function (translated) {
- translated = translator.unescape(translated);
- $('body').removeClass(previousBodyClass).addClass(data.bodyClass);
- $('#content').html(translated);
+ ajaxify.end(url, tpl_url);
- ajaxify.end(url, tpl_url);
+ if (typeof callback === 'function') {
+ callback();
+ }
- if (typeof callback === 'function') {
- callback();
- }
+ $('#content, #footer').removeClass('ajaxifying');
- $('#content, #footer').removeClass('ajaxifying');
-
- // Only executed on ajaxify. Otherwise these'd be in ajaxify.end()
- updateTitle(data.title);
- updateTags();
- });
+ // Only executed on ajaxify. Otherwise these'd be in ajaxify.end()
+ updateTitle(data.title);
+ updateTags();
+ });
+ });
}
function updateTitle(title) {
diff --git a/public/src/app.js b/public/src/app.js
index 4bec1e1e69..72dd0faf87 100644
--- a/public/src/app.js
+++ b/public/src/app.js
@@ -180,8 +180,9 @@ app.cacheBuster = null;
message = message.message || message;
if (message === '[[error:invalid-session]]') {
+ app.handleInvalidSession();
app.logout(false);
- return app.handleInvalidSession();
+ return;
}
app.alert({
@@ -444,6 +445,9 @@ app.cacheBuster = null;
}
app.enableTopicSearch = function (options) {
+ if (!config.searchEnabled || !app.user.privileges['search:content']) {
+ return;
+ }
/* eslint-disable-next-line */
var searchOptions = Object.assign({ in: 'titles' }, options.searchOptions);
var quickSearchResults = options.searchElements.resultEl;
diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js
index 84a0e87a38..7fd37194ce 100644
--- a/public/src/client/account/edit.js
+++ b/public/src/client/account/edit.js
@@ -235,7 +235,7 @@ define('forum/account/edit', [
allowSkippingCrop: false,
title: '[[user:upload_picture]]',
description: '[[user:upload_a_picture]]',
- accept: ajaxify.data.allowedProfileImageExtensios,
+ accept: ajaxify.data.allowedProfileImageExtensions,
}, function (url) {
onUploadComplete(url);
});
diff --git a/public/src/client/category/tools.js b/public/src/client/category/tools.js
index e9ae03431c..bc27ea7416 100644
--- a/public/src/client/category/tools.js
+++ b/public/src/client/category/tools.js
@@ -4,11 +4,12 @@
define('forum/category/tools', [
'topicSelect',
+ 'forum/topic/threadTools',
'components',
'translator',
'api',
'bootbox',
-], function (topicSelect, components, translator, api, bootbox) {
+], function (topicSelect, threadTools, components, translator, api, bootbox) {
var CategoryTools = {};
CategoryTools.init = function () {
@@ -149,7 +150,7 @@ define('forum/category/tools', [
break;
case 'pin':
- requestPinExpiry(body, execute.bind(null, true));
+ threadTools.requestPinExpiry(body, execute.bind(null, true));
break;
default:
@@ -158,42 +159,6 @@ define('forum/category/tools', [
}
}
- function requestPinExpiry(body, onSuccess) {
- app.parseAndTranslate('modals/set-pin-expiry', {}, function (html) {
- const modal = bootbox.dialog({
- title: '[[topic:thread_tools.pin]]',
- message: html,
- onEscape: true,
- size: 'small',
- buttons: {
- save: {
- label: '[[global:save]]',
- className: 'btn-primary',
- callback: function () {
- const expiryEl = modal.get(0).querySelector('#expiry');
- let expiry = expiryEl.value;
-
- // No expiry set
- if (expiry === '') {
- return onSuccess();
- }
-
- // Expiration date set
- expiry = new Date(expiry);
-
- if (expiry && expiry.getTime() > Date.now()) {
- body.expiry = expiry.getTime();
- onSuccess();
- } else {
- app.alertError('[[error:invalid-date]]');
- }
- },
- },
- },
- });
- });
- }
-
CategoryTools.removeListeners = function () {
socket.removeListener('event:topic_deleted', setDeleteState);
socket.removeListener('event:topic_restored', setDeleteState);
diff --git a/public/src/client/post-queue.js b/public/src/client/post-queue.js
index cc52615539..06d2e5b56a 100644
--- a/public/src/client/post-queue.js
+++ b/public/src/client/post-queue.js
@@ -58,7 +58,12 @@ define('forum/post-queue', [
category: category,
}],
}, function (html) {
- $this.replaceWith(html.find('.topic-category'));
+ if ($this.find('.category-text').length) {
+ $this.find('.category-text').text(html.find('.topic-category .category-text').text());
+ } else {
+ // for backwards compatibility, remove in 1.16.0
+ $this.replaceWith(html.find('.topic-category'));
+ }
});
});
});
@@ -92,7 +97,17 @@ define('forum/post-queue', [
if (err) {
return app.alertError(err);
}
- preview.html(titleEdit ? data.postData.title : data.postData.content);
+ if (titleEdit) {
+ if (preview.find('.title-text').length) {
+ preview.find('.title-text').text(data.postData.title);
+ } else {
+ // for backwards compatibility, remove in 1.16.0
+ preview.html(data.postData.title);
+ }
+ } else {
+ preview.html(data.postData.content);
+ }
+
textarea.parent().addClass('hidden');
preview.removeClass('hidden');
});
diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js
index ab1383fbd0..44ab7a170c 100644
--- a/public/src/client/topic/threadTools.js
+++ b/public/src/client/topic/threadTools.js
@@ -12,41 +12,43 @@ define('forum/topic/threadTools', [
ThreadTools.init = function (tid, topicContainer) {
renderMenu(topicContainer);
+ // function topicCommand(method, path, command, onComplete) {
topicContainer.on('click', '[component="topic/delete"]', function () {
- topicCommand('delete', tid);
+ topicCommand('del', '/state', 'delete');
return false;
});
topicContainer.on('click', '[component="topic/restore"]', function () {
- topicCommand('restore', tid);
+ topicCommand('put', '/state', 'restore');
return false;
});
topicContainer.on('click', '[component="topic/purge"]', function () {
- topicCommand('purge', tid);
+ topicCommand('del', '', 'purge');
return false;
});
topicContainer.on('click', '[component="topic/lock"]', function () {
- api.put(`/topics/${tid}/lock`);
+ topicCommand('put', '/lock', 'lock');
return false;
});
topicContainer.on('click', '[component="topic/unlock"]', function () {
- api.del(`/topics/${tid}/lock`);
+ topicCommand('del', '/lock', 'unlock');
return false;
});
topicContainer.on('click', '[component="topic/pin"]', function () {
- api.put(`/topics/${tid}/pin`);
+ topicCommand('put', '/pin', 'pin');
return false;
});
topicContainer.on('click', '[component="topic/unpin"]', function () {
- api.del(`/topics/${tid}/pin`);
+ topicCommand('del', '/pin', 'unpin');
return false;
});
+ // todo: should also use topicCommand, but no write api call exists for this yet
topicContainer.on('click', '[component="topic/mark-unread"]', function () {
socket.emit('topics.markUnread', tid, function (err) {
if (err) {
@@ -174,19 +176,76 @@ define('forum/topic/threadTools', [
});
}
- function topicCommand(command, tid) {
- translator.translate('[[topic:thread_tools.' + command + '_confirm]]', function (msg) {
- bootbox.confirm(msg, function (confirm) {
- if (!confirm) {
- return;
- }
+ function topicCommand(method, path, command, onComplete) {
+ if (!onComplete) {
+ onComplete = function () {};
+ }
+ const tid = ajaxify.data.tid;
+ const body = {};
+ const execute = function (ok) {
+ if (ok) {
+ api[method](`/topics/${tid}${path}`, body)
+ .then(onComplete)
+ .catch(app.alertError);
+ }
+ };
- const method = command === 'restore' ? 'put' : 'del';
- const suffix = command !== 'purge' ? '/state' : '';
- api[method](`/topics/${tid}${suffix}`, undefined, undefined, 'default');
+ switch (command) {
+ case 'delete':
+ case 'restore':
+ case 'purge':
+ bootbox.confirm(`[[topic:thread_tools.${command}_confirm]]`, execute);
+ break;
+
+ case 'pin':
+ ThreadTools.requestPinExpiry(body, execute.bind(null, true));
+ break;
+
+ default:
+ execute(true);
+ break;
+ }
+ }
+
+ ThreadTools.requestPinExpiry = function (body, onSuccess) {
+ app.parseAndTranslate('modals/set-pin-expiry', {}, function (html) {
+ const modal = bootbox.dialog({
+ title: '[[topic:thread_tools.pin]]',
+ message: html,
+ onEscape: true,
+ size: 'small',
+ buttons: {
+ cancel: {
+ label: '[[modules:bootbox.cancel]]',
+ className: 'btn-link',
+ },
+ save: {
+ label: '[[global:save]]',
+ className: 'btn-primary',
+ callback: function () {
+ const expiryEl = modal.get(0).querySelector('#expiry');
+ let expiry = expiryEl.value;
+
+ // No expiry set
+ if (expiry === '') {
+ return onSuccess();
+ }
+
+ // Expiration date set
+ expiry = new Date(expiry);
+
+ if (expiry && expiry.getTime() > Date.now()) {
+ body.expiry = expiry.getTime();
+ onSuccess();
+ } else {
+ app.alertError('[[error:invalid-date]]');
+ }
+ },
+ },
+ },
});
});
- }
+ };
ThreadTools.setLockedState = function (data) {
var threadEl = components.get('topic');
@@ -252,10 +311,17 @@ define('forum/topic/threadTools', [
return;
}
- components.get('topic/pin').toggleClass('hidden', data.isPinned).parent().attr('hidden', data.isPinned ? '' : null);
- components.get('topic/unpin').toggleClass('hidden', !data.isPinned).parent().attr('hidden', !data.isPinned ? '' : null);
- $('.topic-header [component="topic/pinned"]').toggleClass('hidden', !data.isPinned);
- ajaxify.data.pinned = data.isPinned;
+ components.get('topic/pin').toggleClass('hidden', data.pinned).parent().attr('hidden', data.pinned ? '' : null);
+ components.get('topic/unpin').toggleClass('hidden', !data.pinned).parent().attr('hidden', !data.pinned ? '' : null);
+ var icon = $('.topic-header [component="topic/pinned"]');
+ icon.toggleClass('hidden', !data.pinned);
+ if (data.pinned) {
+ icon.translateAttr('title', data.pinExpiry && data.pinExpiryISO ?
+ '[[topic:pinned-with-expiry, ' + data.pinExpiryISO + ']]' :
+ '[[topic:pinned]]'
+ );
+ }
+ ajaxify.data.pinned = data.pinned;
};
function setFollowState(state) {
diff --git a/public/src/client/topic/votes.js b/public/src/client/topic/votes.js
index 8ea9091089..731b7f63ba 100644
--- a/public/src/client/topic/votes.js
+++ b/public/src/client/topic/votes.js
@@ -15,6 +15,7 @@ define('forum/topic/votes', [
var $this = $(this);
var el = $this.parent();
+ el.find('.tooltip').css('display', 'none');
var pid = el.parents('[data-pid]').attr('data-pid');
socket.emit('posts.getUpvoters', [pid], function (err, data) {
@@ -32,6 +33,7 @@ define('forum/topic/votes', [
function createTooltip(el, data) {
function doCreateTooltip(title) {
el.attr('title', title).tooltip('fixTitle').tooltip('show');
+ el.parent().find('.tooltip').css('display', '');
}
var usernames = data.usernames
.filter(name => name !== '[[global:former_user]]');
diff --git a/public/src/modules/accounts/delete.js b/public/src/modules/accounts/delete.js
index 3be11dd4a1..a1f5d90b84 100644
--- a/public/src/modules/accounts/delete.js
+++ b/public/src/modules/accounts/delete.js
@@ -45,8 +45,6 @@ define('accounts/delete', ['api', 'bootbox'], function (api) {
if (typeof callback === 'function') {
return callback();
}
-
- history.back();
});
});
}
diff --git a/public/src/sockets.js b/public/src/sockets.js
index 4c8e1bc5f3..b83e6956e4 100644
--- a/public/src/sockets.js
+++ b/public/src/sockets.js
@@ -69,6 +69,9 @@ socket = window.socket;
});
socket.on('event:banned', onEventBanned);
+ socket.on('event:logout', function () {
+ app.logout();
+ });
socket.on('event:alert', function (params) {
app.alert(params);
});
@@ -179,7 +182,7 @@ socket = window.socket;
}
function onEventBanned(data) {
- var message = data.until ? '[[error:user-banned-reason-until, ' + $.timeago(data.until) + ', ' + data.reason + ']]' : '[[error:user-banned-reason, ' + data.reason + ']]';
+ var message = data.until ? '[[error:user-banned-reason-until, ' + utils.toISOString(data.until) + ', ' + data.reason + ']]' : '[[error:user-banned-reason, ' + data.reason + ']]';
bootbox.alert({
title: '[[error:user-banned]]',
diff --git a/src/analytics.js b/src/analytics.js
index d1ec60af2d..1fe00f9803 100644
--- a/src/analytics.js
+++ b/src/analytics.js
@@ -139,7 +139,7 @@ Analytics.writeData = async function () {
try {
await Promise.all(dbQueue);
} catch (err) {
- winston.error('[analytics] Encountered error while writing analytics to data store', err.stack);
+ winston.error('[analytics] Encountered error while writing analytics to data store\n' + err.stack);
throw err;
}
};
diff --git a/src/api/groups.js b/src/api/groups.js
index 88d42df183..426ec1dcde 100644
--- a/src/api/groups.js
+++ b/src/api/groups.js
@@ -156,6 +156,7 @@ groupsAPI.leave = async function (caller, data) {
bodyShort: '[[groups:membership.leave.notification_title, ' + username + ', ' + groupName + ']]',
nid: 'group:' + validator.escape(groupName) + ':uid:' + data.uid + ':group-leave',
path: '/groups/' + slugify(groupName),
+ from: data.uid,
});
const uids = await groups.getOwners(groupName);
await notifications.push(notification, uids);
diff --git a/src/api/topics.js b/src/api/topics.js
index 3b1f8d0ee4..98d92022a8 100644
--- a/src/api/topics.js
+++ b/src/api/topics.js
@@ -8,6 +8,7 @@ const meta = require('../meta');
const apiHelpers = require('./helpers');
const doTopicAction = apiHelpers.doTopicAction;
+const websockets = require('../socket.io');
const socketHelpers = require('../socket.io/helpers');
const topicsAPI = module.exports;
@@ -20,7 +21,6 @@ topicsAPI.create = async function (caller, data) {
const payload = { ...data };
payload.tags = payload.tags || [];
payload.uid = caller.uid;
- payload.uid = caller.uid;
payload.req = apiHelpers.buildReqObject(caller);
payload.timestamp = Date.now();
payload.fromQueue = false;
@@ -48,7 +48,7 @@ topicsAPI.reply = async function (caller, data) {
uid: caller.uid,
req: apiHelpers.buildReqObject(caller), // For IP recording
content: data.content,
- timestamp: data.timestamp,
+ timestamp: Date.now(),
fromQueue: false,
};
@@ -72,7 +72,12 @@ topicsAPI.reply = async function (caller, data) {
};
user.updateOnlineUsers(caller.uid);
- socketHelpers.emitToUids('event:new_post', result, [caller.uid]);
+ if (caller.uid) {
+ socketHelpers.emitToUids('event:new_post', result, [caller.uid]);
+ } else if (caller.uid === 0) {
+ websockets.in('online_guests').emit('event:new_post', result);
+ }
+
socketHelpers.notifyNew(caller.uid, 'newPost', result);
return postObj[0];
diff --git a/src/api/users.js b/src/api/users.js
index 08d4bc6af1..1e1f5ae40c 100644
--- a/src/api/users.js
+++ b/src/api/users.js
@@ -247,7 +247,7 @@ async function processDeletion({ uid, method, password, caller }) {
} else if (!isSelf && !isAdmin) {
throw new Error('[[error:no-privileges]]');
} else if (isTargetAdmin) {
- throw new Error('[[error:cant-delete-other-admins]]');
+ throw new Error('[[error:cant-delete-admin]');
}
// Privilege checks -- only deleteAccount is available for non-admins
diff --git a/src/categories/data.js b/src/categories/data.js
index 4e3dbb1365..e75b825cb9 100644
--- a/src/categories/data.js
+++ b/src/categories/data.js
@@ -5,11 +5,12 @@ const validator = require('validator');
const db = require('../database');
const meta = require('../meta');
const plugins = require('../plugins');
+const utils = require('../utils');
const intFields = [
'cid', 'parentCid', 'disabled', 'isSection', 'order',
'topic_count', 'post_count', 'numRecentReplies',
- 'minTags', 'maxTags',
+ 'minTags', 'maxTags', 'postQueue',
];
module.exports = function (Categories) {
@@ -63,12 +64,13 @@ module.exports = function (Categories) {
};
};
-function defaultMinMaxTags(category, fields, fieldName, defaultField) {
+function defaultIntField(category, fields, fieldName, defaultField) {
if (!fields.length || fields.includes(fieldName)) {
const useDefault = !category.hasOwnProperty(fieldName) ||
category[fieldName] === null ||
category[fieldName] === '' ||
- !parseInt(category[fieldName], 10);
+ !utils.isNumber(category[fieldName]);
+
category[fieldName] = useDefault ? meta.config[defaultField] : category[fieldName];
}
}
@@ -78,8 +80,9 @@ function modifyCategory(category, fields) {
return;
}
- defaultMinMaxTags(category, fields, 'minTags', 'minimumTagsPerTopic');
- defaultMinMaxTags(category, fields, 'maxTags', 'maximumTagsPerTopic');
+ defaultIntField(category, fields, 'minTags', 'minimumTagsPerTopic');
+ defaultIntField(category, fields, 'maxTags', 'maximumTagsPerTopic');
+ defaultIntField(category, fields, 'postQueue', 'postQueue');
db.parseIntFields(category, intFields, fields);
diff --git a/src/cli/manage.js b/src/cli/manage.js
index 94f185f5b4..2f541149c0 100644
--- a/src/cli/manage.js
+++ b/src/cli/manage.js
@@ -65,7 +65,7 @@ async function activate(plugin) {
});
process.exit(0);
} catch (err) {
- winston.error('An error occurred during plugin activation', err.stack);
+ winston.error('An error occurred during plugin activation\n' + err.stack);
throw err;
}
}
diff --git a/src/cli/reset.js b/src/cli/reset.js
index 9edbfee8e7..a7822ba2c1 100644
--- a/src/cli/reset.js
+++ b/src/cli/reset.js
@@ -133,7 +133,7 @@ async function resetPlugin(pluginId) {
winston.info('[reset] No action taken.');
}
} catch (err) {
- winston.error('[reset] Could not disable plugin: ' + pluginId + ' encountered error %s', err.stack);
+ winston.error('[reset] Could not disable plugin: ' + pluginId + ' encountered error %s\n' + err.stack);
throw err;
}
}
diff --git a/src/controllers/accounts/edit.js b/src/controllers/accounts/edit.js
index d2370ac9d2..d885df5f50 100644
--- a/src/controllers/accounts/edit.js
+++ b/src/controllers/accounts/edit.js
@@ -24,7 +24,7 @@ editController.get = async function (req, res, next) {
userData.allowProfilePicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:profile-picture'];
userData.allowCoverPicture = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:cover-picture'];
userData.allowProfileImageUploads = meta.config.allowProfileImageUploads;
- userData.allowedProfileImageExtensios = user.getAllowedProfileImageExtensions().map(ext => '.' + ext).join(', ');
+ userData.allowedProfileImageExtensions = user.getAllowedProfileImageExtensions().map(ext => '.' + ext).join(', ');
userData.allowMultipleBadges = meta.config.allowMultipleBadges === 1;
userData.allowAccountDelete = meta.config.allowAccountDelete === 1;
userData.allowWebsite = !userData.isSelf || !!meta.config['reputation:disabled'] || userData.reputation >= meta.config['min:rep:website'];
diff --git a/src/controllers/accounts/helpers.js b/src/controllers/accounts/helpers.js
index ed07c2a6f9..08a9fd260d 100644
--- a/src/controllers/accounts/helpers.js
+++ b/src/controllers/accounts/helpers.js
@@ -70,6 +70,7 @@ helpers.getUserDataByUserSlug = async function (userslug, callerUID) {
userData.isSelfOrAdminOrGlobalModerator = isSelf || isAdmin || isGlobalModerator;
userData.canEdit = results.canEdit;
userData.canBan = results.canBanUser;
+ userData.canFlag = (await privileges.users.canFlag(callerUID, userData.uid)).flag;
userData.canChangePassword = isAdmin || (isSelf && !meta.config['password:disableEdit']);
userData.isSelf = isSelf;
userData.isFollowing = results.isFollowing;
diff --git a/src/controllers/admin/categories.js b/src/controllers/admin/categories.js
index 796b36de25..b32b281659 100644
--- a/src/controllers/admin/categories.js
+++ b/src/controllers/admin/categories.js
@@ -4,6 +4,7 @@ const categories = require('../../categories');
const analytics = require('../../analytics');
const plugins = require('../../plugins');
const translator = require('../../translator');
+const meta = require('../../meta');
const categoriesController = module.exports;
@@ -42,6 +43,7 @@ categoriesController.get = async function (req, res, next) {
categories: data.allCategories,
selectedCategory: selectedCategory,
customClasses: data.customClasses,
+ postQueueEnabled: !!meta.config.postQueue,
});
};
diff --git a/src/controllers/admin/dashboard.js b/src/controllers/admin/dashboard.js
index cef8c8921a..49e34db80a 100644
--- a/src/controllers/admin/dashboard.js
+++ b/src/controllers/admin/dashboard.js
@@ -69,7 +69,7 @@ async function getLatestVersion() {
try {
return await versions.getLatestVersion();
} catch (err) {
- winston.error('[acp] Failed to fetch latest version', err.stack);
+ winston.error('[acp] Failed to fetch latest version\n' + err.stack);
}
return null;
}
diff --git a/src/controllers/admin/database.js b/src/controllers/admin/database.js
index 060ba1501a..759002ad6e 100644
--- a/src/controllers/admin/database.js
+++ b/src/controllers/admin/database.js
@@ -6,26 +6,18 @@ const databaseController = module.exports;
databaseController.get = async function (req, res) {
const results = {};
- try {
- if (nconf.get('redis')) {
- const rdb = require('../../database/redis');
- results.redis = await rdb.info(rdb.client);
- }
- if (nconf.get('mongo')) {
- const mdb = require('../../database/mongo');
- results.mongo = await mdb.info(mdb.client);
- }
- if (nconf.get('postgres')) {
- const pdb = require('../../database/postgres');
- results.postgres = await pdb.info(pdb.pool);
- }
- } catch (err) {
- Object.assign(results, { error: err });
- // Override mongo error with more human-readable error
- if (err.name === 'MongoError' && err.codeName === 'Unauthorized') {
- err.friendlyMessage = '[[admin/advanced/database:mongo.unauthorized]]';
- delete results.mongo;
- }
+ if (nconf.get('redis')) {
+ const rdb = require('../../database/redis');
+ results.redis = await rdb.info(rdb.client);
}
+ if (nconf.get('mongo')) {
+ const mdb = require('../../database/mongo');
+ results.mongo = await mdb.info(mdb.client);
+ }
+ if (nconf.get('postgres')) {
+ const pdb = require('../../database/postgres');
+ results.postgres = await pdb.info(pdb.pool);
+ }
+
res.render('admin/advanced/database', results);
};
diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js
index ccb7fa1e42..438b0aae78 100644
--- a/src/controllers/admin/users.js
+++ b/src/controllers/admin/users.js
@@ -1,6 +1,5 @@
'use strict';
-const nconf = require('nconf');
const validator = require('validator');
const user = require('../../user');
@@ -242,7 +241,7 @@ async function render(req, res, data) {
filterBy.forEach(function (filter) {
data['filterBy_' + validator.escape(String(filter))] = true;
});
-
+ data.userCount = parseInt(await db.getObjectField('global', 'userCount'), 10);
if (data.adminInviteOnly) {
data.showInviteButton = await privileges.users.isAdministrator(req.uid);
} else {
@@ -252,19 +251,27 @@ async function render(req, res, data) {
res.render('admin/manage/users', data);
}
-usersController.getCSV = async function (req, res) {
- var referer = req.headers.referer;
-
- if (!referer || !referer.replace(nconf.get('url'), '').startsWith('/admin/manage/users')) {
- return res.status(403).send('[[error:invalid-origin]]');
- }
- events.log({
+usersController.getCSV = async function (req, res, next) {
+ await events.log({
type: 'getUsersCSV',
uid: req.uid,
ip: req.ip,
});
- const data = await user.getUsersCSV();
- res.attachment('users.csv');
- res.setHeader('Content-Type', 'text/csv');
- res.end(data);
+ const path = require('path');
+ const { baseDir } = require('../../constants').paths;
+ res.sendFile('users.csv', {
+ root: path.join(baseDir, 'build/export'),
+ headers: {
+ 'Content-Type': 'text/csv',
+ 'Content-Disposition': 'attachment; filename=users.csv',
+ },
+ }, function (err) {
+ if (err) {
+ if (err.code === 'ENOENT') {
+ res.locals.isAPI = false;
+ return next();
+ }
+ return next(err);
+ }
+ });
};
diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js
index 62ee51106c..78772b065d 100644
--- a/src/controllers/helpers.js
+++ b/src/controllers/helpers.js
@@ -448,6 +448,12 @@ helpers.generateError = (statusCode, message) => {
case 500:
payload.status.code = 'internal-server-error';
payload.status.message = message || payload.status.message;
+ break;
+
+ case 501:
+ payload.status.code = 'not-implemented';
+ payload.status.message = message || 'The route you are trying to call is not implemented yet, please try again tomorrow';
+ break;
}
return payload;
diff --git a/src/controllers/index.js b/src/controllers/index.js
index 18f9ea3820..caa2f7311a 100644
--- a/src/controllers/index.js
+++ b/src/controllers/index.js
@@ -125,12 +125,7 @@ Controllers.login = async function (req, res) {
data.allowLocalLogin = hasLoginPrivilege || parseInt(req.query.local, 10) === 1;
if (!data.allowLocalLogin && !data.allowRegistration && data.alternate_logins && data.authentication.length === 1) {
- if (res.locals.isAPI) {
- return helpers.redirect(res, {
- external: nconf.get('relative_path') + data.authentication[0].url,
- });
- }
- return res.redirect(nconf.get('relative_path') + data.authentication[0].url);
+ return helpers.redirect(res, data.authentication[0].url);
}
if (req.loggedIn) {
diff --git a/src/controllers/tags.js b/src/controllers/tags.js
index 9191aa07c3..1484a12a37 100644
--- a/src/controllers/tags.js
+++ b/src/controllers/tags.js
@@ -53,6 +53,7 @@ tagsController.getTag = async function (req, res) {
templateData.pagination = pagination.create(page, pageCount);
helpers.addLinkTags({ url: 'tags/' + tag, res: req.res, tags: templateData.pagination.rel });
+ templateData['feeds:disableRSS'] = meta.config['feeds:disableRSS'];
templateData.rssFeedUrl = nconf.get('relative_path') + '/tags/' + tag + '.rss';
res.render('tag', templateData);
};
diff --git a/src/controllers/write/topics.js b/src/controllers/write/topics.js
index 81b06d01a0..0e16f0ebc5 100644
--- a/src/controllers/write/topics.js
+++ b/src/controllers/write/topics.js
@@ -37,12 +37,11 @@ Topics.purge = async (req, res) => {
};
Topics.pin = async (req, res) => {
- await api.topics.pin(req, { tids: [req.params.tid] });
-
// Pin expiry was not available w/ sockets hence not included in api lib method
if (req.body.expiry) {
- topics.tools.setPinExpiry(req.params.tid, req.body.expiry, req.uid);
+ await topics.tools.setPinExpiry(req.params.tid, req.body.expiry, req.uid);
}
+ await api.topics.pin(req, { tids: [req.params.tid] });
helpers.formatApiResponse(200, res);
};
diff --git a/src/database/mongo.js b/src/database/mongo.js
index e6e5e040a9..7fe13baaaf 100644
--- a/src/database/mongo.js
+++ b/src/database/mongo.js
@@ -110,14 +110,29 @@ mongoModule.info = async function (db) {
db = client.db();
}
mongoModule.client = mongoModule.client || db;
+ let serverStatusError = '';
+
+ async function getServerStatus() {
+ try {
+ return await db.command({ serverStatus: 1 });
+ } catch (err) {
+ serverStatusError = err.message;
+ // Override mongo error with more human-readable error
+ if (err.name === 'MongoError' && err.codeName === 'Unauthorized') {
+ serverStatusError = '[[admin/advanced/database:mongo.unauthorized]]';
+ }
+ winston.error(err.stack);
+ }
+ }
let [serverStatus, stats, listCollections] = await Promise.all([
- db.command({ serverStatus: 1 }),
+ getServerStatus(),
db.command({ dbStats: 1 }),
getCollectionStats(db),
]);
stats = stats || {};
serverStatus = serverStatus || {};
+ stats.serverStatusError = serverStatusError;
const scale = 1024 * 1024 * 1024;
listCollections = listCollections.map(function (collectionInfo) {
@@ -132,12 +147,12 @@ mongoModule.info = async function (db) {
};
});
- stats.mem = serverStatus.mem || {};
+ stats.mem = serverStatus.mem || { resident: 0, virtual: 0, mapped: 0 };
stats.mem.resident = (stats.mem.resident / 1024).toFixed(3);
stats.mem.virtual = (stats.mem.virtual / 1024).toFixed(3);
stats.mem.mapped = (stats.mem.mapped / 1024).toFixed(3);
stats.collectionData = listCollections;
- stats.network = serverStatus.network || {};
+ stats.network = serverStatus.network || { bytesIn: 0, bytesOut: 0, numRequests: 0 };
stats.network.bytesIn = (stats.network.bytesIn / scale).toFixed(3);
stats.network.bytesOut = (stats.network.bytesOut / scale).toFixed(3);
stats.network.numRequests = utils.addCommas(stats.network.numRequests);
diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js
index 58db98c537..1997d0b02d 100644
--- a/src/database/mongo/hash.js
+++ b/src/database/mongo/hash.js
@@ -149,7 +149,7 @@ module.exports = function (module) {
};
module.deleteObjectFields = async function (key, fields) {
- if (!key || !Array.isArray(fields) || !fields.length) {
+ if (!key || (Array.isArray(key) && !key.length) || !Array.isArray(fields) || !fields.length) {
return;
}
fields = fields.filter(Boolean);
@@ -162,8 +162,12 @@ module.exports = function (module) {
field = helpers.fieldToString(field);
data[field] = '';
});
+ if (Array.isArray(key)) {
+ await module.client.collection('objects').updateMany({ _key: { $in: key } }, { $unset: data });
+ } else {
+ await module.client.collection('objects').updateOne({ _key: key }, { $unset: data });
+ }
- await module.client.collection('objects').updateOne({ _key: key }, { $unset: data });
cache.del(key);
};
diff --git a/src/database/postgres/hash.js b/src/database/postgres/hash.js
index 6094c3bb72..a1f91d5dab 100644
--- a/src/database/postgres/hash.js
+++ b/src/database/postgres/hash.js
@@ -247,20 +247,26 @@ SELECT (h."data" ? $2::TEXT AND h."data"->>$2::TEXT IS NOT NULL) b
};
module.deleteObjectFields = async function (key, fields) {
- if (!key || !Array.isArray(fields) || !fields.length) {
+ if (!key || (Array.isArray(key) && !key.length) || !Array.isArray(fields) || !fields.length) {
return;
}
-
- await module.pool.query({
- name: 'deleteObjectFields',
- text: `
-UPDATE "legacy_hash"
- SET "data" = COALESCE((SELECT jsonb_object_agg("key", "value")
- FROM jsonb_each("data")
- WHERE "key" <> ALL ($2::TEXT[])), '{}')
- WHERE "_key" = $1::TEXT`,
- values: [key, fields],
- });
+ async function delKey(key, fields) {
+ await module.pool.query({
+ name: 'deleteObjectFields',
+ text: `
+ UPDATE "legacy_hash"
+ SET "data" = COALESCE((SELECT jsonb_object_agg("key", "value")
+ FROM jsonb_each("data")
+ WHERE "key" <> ALL ($2::TEXT[])), '{}')
+ WHERE "_key" = $1::TEXT`,
+ values: [key, fields],
+ });
+ }
+ if (Array.isArray(key)) {
+ await Promise.all(key.map(k => delKey(k, fields)));
+ } else {
+ await delKey(key, fields);
+ }
};
module.incrObjectField = async function (key, field) {
diff --git a/src/database/redis.js b/src/database/redis.js
index 7de6efd5b4..b0fd76f284 100644
--- a/src/database/redis.js
+++ b/src/database/redis.js
@@ -40,7 +40,7 @@ redisModule.init = function (callback) {
callback = callback || function () { };
redisModule.client = connection.connect(nconf.get('redis'), function (err) {
if (err) {
- winston.error('NodeBB could not connect to your Redis database. Redis returned the following error', err.stack);
+ winston.error('NodeBB could not connect to your Redis database. Redis returned the following error\n' + err.stack);
return callback(err);
}
require('./redis/promisify')(redisModule.client);
diff --git a/src/database/redis/connection.js b/src/database/redis/connection.js
index b291b1f284..b79c154f63 100644
--- a/src/database/redis/connection.js
+++ b/src/database/redis/connection.js
@@ -58,7 +58,7 @@ connection.connect = function (options, callback) {
if (dbIdx >= 0) {
cxn.select(dbIdx, function (err) {
if (err) {
- winston.error('NodeBB could not select Redis database. Redis returned the following error', err.stack);
+ winston.error('NodeBB could not select Redis database. Redis returned the following error\n' + err.stack);
throw err;
}
});
diff --git a/src/database/redis/hash.js b/src/database/redis/hash.js
index f32f7be0e5..b495c7d44a 100644
--- a/src/database/redis/hash.js
+++ b/src/database/redis/hash.js
@@ -150,14 +150,21 @@ module.exports = function (module) {
};
module.deleteObjectFields = async function (key, fields) {
- if (!key || !Array.isArray(fields) || !fields.length) {
+ if (!key || (Array.isArray(key) && !key.length) || !Array.isArray(fields) || !fields.length) {
return;
}
fields = fields.filter(Boolean);
if (!fields.length) {
return;
}
- await module.client.async.hdel(key, fields);
+ if (Array.isArray(key)) {
+ const batch = module.client.batch();
+ key.forEach(k => batch.hdel(k, fields));
+ await helpers.execBatch(batch);
+ } else {
+ await module.client.async.hdel(key, fields);
+ }
+
cache.del(key);
};
diff --git a/src/flags.js b/src/flags.js
index 8c716765b2..8bf57257fd 100644
--- a/src/flags.js
+++ b/src/flags.js
@@ -79,7 +79,7 @@ Flags.init = async function () {
const data = await plugins.hooks.fire('filter:flags.getFilters', hookData);
Flags._filters = data.filters;
} catch (err) {
- winston.error('[flags/init] Could not retrieve filters', err.stack);
+ winston.error('[flags/init] Could not retrieve filters\n' + err.stack);
Flags._filters = {};
}
};
@@ -251,6 +251,15 @@ Flags.validate = async function (payload) {
throw new Error('[[error:user-banned]]');
}
+ // Disallow flagging of profiles/content of privileged users
+ const [targetPrivileged, reporterPrivileged] = await Promise.all([
+ user.isPrivileged(target.uid),
+ user.isPrivileged(reporter.uid),
+ ]);
+ if (targetPrivileged && !reporterPrivileged) {
+ throw new Error('[[error:cant-flag-privileged]]');
+ }
+
if (payload.type === 'post') {
const editable = await privileges.posts.canEdit(payload.id, payload.uid);
if (!editable.flag && !meta.config['reputation:disabled'] && reporter.reputation < meta.config['min:rep:flag']) {
diff --git a/src/groups/invite.js b/src/groups/invite.js
index 10d56a076b..ad17a36ecf 100644
--- a/src/groups/invite.js
+++ b/src/groups/invite.js
@@ -51,7 +51,7 @@ module.exports = function (Groups) {
Groups.invite = async function (groupName, uids) {
uids = Array.isArray(uids) ? uids : [uids];
- await inviteOrRequestMembership(groupName, uids, 'invite');
+ uids = await inviteOrRequestMembership(groupName, uids, 'invite');
const notificationData = await Promise.all(uids.map(uid => notifications.create({
type: 'group-invite',
@@ -87,6 +87,7 @@ module.exports = function (Groups) {
groupName: groupName,
uids: uids,
});
+ return uids;
}
Groups.isInvited = async function (uids, groupName) {
diff --git a/src/meta/themes.js b/src/meta/themes.js
index 8c184f776d..1120591609 100644
--- a/src/meta/themes.js
+++ b/src/meta/themes.js
@@ -25,9 +25,16 @@ Themes.get = async () => {
themes = _.flatten(themes).filter(Boolean);
themes = await Promise.all(themes.map(async (theme) => {
const config = path.join(themePath, theme, 'theme.json');
+ const pack = path.join(themePath, theme, 'package.json');
try {
- const file = await fs.promises.readFile(config, 'utf8');
- const configObj = JSON.parse(file);
+ const [configFile, packageFile] = await Promise.all([
+ fs.promises.readFile(config, 'utf8'),
+ fs.promises.readFile(pack, 'utf8'),
+ ]);
+ const configObj = JSON.parse(configFile);
+ const packageObj = JSON.parse(packageFile);
+
+ configObj.id = packageObj.name;
// Minor adjustments for API output
configObj.type = 'local';
diff --git a/src/notifications.js b/src/notifications.js
index f4f526c6d5..df0429c654 100644
--- a/src/notifications.js
+++ b/src/notifications.js
@@ -27,6 +27,7 @@ Notifications.baseTypes = [
'notificationType_new-chat',
'notificationType_new-group-chat',
'notificationType_group-invite',
+ 'notificationType_group-leave',
'notificationType_group-request-membership',
];
@@ -333,7 +334,7 @@ Notifications.prune = async function () {
}, { batch: 500, interval: 100 });
} catch (err) {
if (err) {
- winston.error('Encountered error pruning notifications', err.stack);
+ winston.error('Encountered error pruning notifications\n' + err.stack);
}
}
};
diff --git a/src/posts/delete.js b/src/posts/delete.js
index 0504eec5f4..ed85a73110 100644
--- a/src/posts/delete.js
+++ b/src/posts/delete.js
@@ -122,13 +122,18 @@ module.exports = function (Posts) {
}
async function deletePostFromReplies(postData) {
- if (!parseInt(postData.toPid, 10)) {
- return;
+ const replyPids = await db.getSortedSetMembers('pid:' + postData.pid + ':replies');
+ const promises = [
+ db.deleteObjectFields(
+ replyPids.map(pid => 'post:' + pid), ['toPid']
+ ),
+ db.delete('pid:' + postData.pid + ':replies'),
+ ];
+ if (parseInt(postData.toPid, 10)) {
+ promises.push(db.sortedSetRemove('pid:' + postData.toPid + ':replies', postData.pid));
+ promises.push(db.decrObjectField('post:' + postData.toPid, 'replies'));
}
- await Promise.all([
- db.sortedSetRemove('pid:' + postData.toPid + ':replies', postData.pid),
- db.decrObjectField('post:' + postData.toPid, 'replies'),
- ]);
+ await Promise.all(promises);
}
async function deletePostFromGroups(postData) {
diff --git a/src/posts/queue.js b/src/posts/queue.js
index bd8121399e..73c6fbc261 100644
--- a/src/posts/queue.js
+++ b/src/posts/queue.js
@@ -15,9 +15,15 @@ const socketHelpers = require('../socket.io/helpers');
module.exports = function (Posts) {
Posts.shouldQueue = async function (uid, data) {
- const userData = await user.getUserFields(uid, ['uid', 'reputation', 'postcount']);
- const isMemberOfExempt = await groups.isMemberOfAny(userData.uid, meta.config.groupsExemptFromPostQueue);
- const shouldQueue = meta.config.postQueue && !isMemberOfExempt && (!userData.uid || userData.reputation < meta.config.postQueueReputationThreshold || userData.postcount <= 0);
+ const [userData, isMemberOfExempt, categoryQueueEnabled] = await Promise.all([
+ user.getUserFields(uid, ['uid', 'reputation', 'postcount']),
+ groups.isMemberOfAny(uid, meta.config.groupsExemptFromPostQueue),
+ isCategoryQueueEnabled(data),
+ ]);
+
+ const shouldQueue = meta.config.postQueue && categoryQueueEnabled &&
+ !isMemberOfExempt &&
+ (!userData.uid || userData.reputation < meta.config.postQueueReputationThreshold || userData.postcount <= 0);
const result = await plugins.hooks.fire('filter:post.shouldQueue', {
shouldQueue: !!shouldQueue,
uid: uid,
@@ -26,6 +32,24 @@ module.exports = function (Posts) {
return result.shouldQueue;
};
+ async function isCategoryQueueEnabled(data) {
+ const type = getType(data);
+ const cid = await getCid(type, data);
+ if (!cid) {
+ throw new Error('[[error:invalid-cid]]');
+ }
+ return await categories.getCategoryField(cid, 'postQueue');
+ }
+
+ function getType(data) {
+ if (data.tid && data.content) {
+ return 'reply';
+ } else if (data.cid && data.title && data.content) {
+ return 'topic';
+ }
+ throw new Error('[[error:invalid-type]]');
+ }
+
async function removeQueueNotification(id) {
await notifications.rescind('post-queue-' + id);
const data = await getParsedObject(id);
@@ -46,7 +70,7 @@ module.exports = function (Posts) {
}
Posts.addToQueue = async function (data) {
- const type = data.title ? 'topic' : 'reply';
+ const type = getType(data);
const now = Date.now();
const id = type + '-' + now;
await canPost(type, data);
diff --git a/src/privileges/categories.js b/src/privileges/categories.js
index 1276bf6d3b..10d5c7c785 100644
--- a/src/privileges/categories.js
+++ b/src/privileges/categories.js
@@ -35,9 +35,9 @@ module.exports = function (privileges) {
payload.keys = keys;
// This is a hack because I can't do {labels.users.length} to echo the count in templates.js
- payload.columnCountUser = payload.labels.users.length + 2;
+ payload.columnCountUser = payload.labels.users.length + 3;
payload.columnCountUserOther = payload.labels.users.length - privileges.privilegeLabels.length;
- payload.columnCountGroup = payload.labels.groups.length + 2;
+ payload.columnCountGroup = payload.labels.groups.length + 3;
payload.columnCountGroupOther = payload.labels.groups.length - privileges.privilegeLabels.length;
return payload;
};
diff --git a/src/privileges/global.js b/src/privileges/global.js
index 44ad5ecd16..ed665e3168 100644
--- a/src/privileges/global.js
+++ b/src/privileges/global.js
@@ -71,7 +71,7 @@ module.exports = function (privileges) {
payload.keys = keys;
// This is a hack because I can't do {labels.users.length} to echo the count in templates.js
- payload.columnCount = payload.labels.users.length + 2;
+ payload.columnCount = payload.labels.users.length + 3;
return payload;
};
diff --git a/src/privileges/posts.js b/src/privileges/posts.js
index cfbfeedb1c..c7ab882aed 100644
--- a/src/privileges/posts.js
+++ b/src/privileges/posts.js
@@ -176,12 +176,20 @@ module.exports = function (privileges) {
};
privileges.posts.canFlag = async function (pid, uid) {
- const [userReputation, isAdminOrModerator] = await Promise.all([
+ const targetUid = await posts.getPostField(pid, 'uid');
+ const [userReputation, isAdminOrModerator, targetPrivileged, reporterPrivileged] = await Promise.all([
user.getUserField(uid, 'reputation'),
isAdminOrMod(pid, uid),
+ user.isPrivileged(targetUid),
+ user.isPrivileged(uid),
]);
const minimumReputation = meta.config['min:rep:flag'];
- const canFlag = isAdminOrModerator || (userReputation >= minimumReputation);
+ let canFlag = isAdminOrModerator || (userReputation >= minimumReputation);
+
+ if (targetPrivileged && !reporterPrivileged) {
+ canFlag = false;
+ }
+
return { flag: canFlag };
};
diff --git a/src/privileges/users.js b/src/privileges/users.js
index b23df4d198..4c40f3a3f7 100644
--- a/src/privileges/users.js
+++ b/src/privileges/users.js
@@ -3,6 +3,8 @@
const _ = require('lodash');
+const user = require('../user');
+const meta = require('../meta');
const groups = require('../groups');
const plugins = require('../plugins');
const helpers = require('./helpers');
@@ -107,6 +109,22 @@ module.exports = function (privileges) {
return data.canBan;
};
+ privileges.users.canFlag = async function (callerUid, uid) {
+ const [userReputation, targetPrivileged, reporterPrivileged] = await Promise.all([
+ user.getUserField(callerUid, 'reputation'),
+ user.isPrivileged(uid),
+ user.isPrivileged(callerUid),
+ ]);
+ const minimumReputation = meta.config['min:rep:flag'];
+ let canFlag = reporterPrivileged || (userReputation >= minimumReputation);
+
+ if (targetPrivileged && !reporterPrivileged) {
+ canFlag = false;
+ }
+
+ return { flag: canFlag };
+ };
+
privileges.users.hasBanPrivilege = async uid => await hasGlobalPrivilege('ban', uid);
privileges.users.hasInvitePrivilege = async uid => await hasGlobalPrivilege('invite', uid);
diff --git a/src/routes/write/topics.js b/src/routes/write/topics.js
index 744f83aa66..08bd8b2928 100644
--- a/src/routes/write/topics.js
+++ b/src/routes/write/topics.js
@@ -10,8 +10,8 @@ const setupApiRoute = routeHelpers.setupApiRoute;
module.exports = function () {
const middlewares = [middleware.authenticate];
- setupApiRoute(router, 'post', '/', [...middlewares, middleware.checkRequired.bind(null, ['cid', 'title', 'content'])], controllers.write.topics.create);
- setupApiRoute(router, 'post', '/:tid', [...middlewares, middleware.checkRequired.bind(null, ['content']), middleware.assert.topic], controllers.write.topics.reply);
+ setupApiRoute(router, 'post', '/', [middleware.authenticateOrGuest, middleware.checkRequired.bind(null, ['cid', 'title', 'content'])], controllers.write.topics.create);
+ setupApiRoute(router, 'post', '/:tid', [middleware.authenticateOrGuest, middleware.checkRequired.bind(null, ['content']), middleware.assert.topic], controllers.write.topics.reply);
setupApiRoute(router, 'delete', '/:tid', [...middlewares], controllers.write.topics.purge);
setupApiRoute(router, 'put', '/:tid/state', [...middlewares], controllers.write.topics.restore);
diff --git a/src/socket.io/admin/user.js b/src/socket.io/admin/user.js
index 91dfb49646..65201d50d3 100644
--- a/src/socket.io/admin/user.js
+++ b/src/socket.io/admin/user.js
@@ -1,6 +1,7 @@
'use strict';
const async = require('async');
+const winston = require('winston');
const db = require('../../database');
const api = require('../../api');
@@ -119,6 +120,7 @@ User.forcePasswordReset = async function (socket, uids) {
await db.setObjectField(uids.map(uid => 'user:' + uid), 'passwordExpiry', Date.now());
await user.auth.revokeAllSessions(uids);
+ uids.forEach(uid => sockets.in('uid_' + uid).emit('event:logout'));
};
User.deleteUsers = async function (socket, uids) {
@@ -157,3 +159,27 @@ User.loadGroups = async function (socket, uids) {
});
return { users: userData };
};
+
+User.exportUsersCSV = async function (socket) {
+ await events.log({
+ type: 'exportUsersCSV',
+ uid: socket.uid,
+ ip: socket.ip,
+ });
+ setTimeout(async function () {
+ try {
+ await user.exportUsersCSV();
+ socket.emit('event:export-users-csv');
+ const notifications = require('../../notifications');
+ const n = await notifications.create({
+ bodyShort: '[[notifications:users-csv-exported]]',
+ path: '/api/admin/users/csv',
+ nid: 'users:csv:export',
+ from: socket.uid,
+ });
+ await notifications.push(n, [socket.uid]);
+ } catch (err) {
+ winston.error(err);
+ }
+ }, 0);
+};
diff --git a/src/socket.io/index.js b/src/socket.io/index.js
index 9dad7cda4b..6e6be257ae 100644
--- a/src/socket.io/index.js
+++ b/src/socket.io/index.js
@@ -165,7 +165,8 @@ async function checkMaintenance(socket) {
if (isAdmin) {
return;
}
- throw new Error('[[error:forum-maintenance]]');
+ const validator = require('validator');
+ throw new Error('[[pages:maintenance.text, ' + validator.escape(String(meta.config.title || 'NodeBB')) + ']]');
}
const getSessionAsync = util.promisify((sid, callback) => db.sessionStore.get(sid, (err, sessionObj) => callback(err, sessionObj || null)));
@@ -197,7 +198,6 @@ async function authorize(socket, callback) {
}
await cookieParserAsync(request);
-
const sessionData = await getSessionAsync(request.signedCookies[nconf.get('sessionKey')]);
if (sessionData && sessionData.passport && sessionData.passport.user) {
request.session = sessionData;
diff --git a/src/socket.io/posts/move.js b/src/socket.io/posts/move.js
index bfd614b063..c1637fad51 100644
--- a/src/socket.io/posts/move.js
+++ b/src/socket.io/posts/move.js
@@ -19,6 +19,11 @@ module.exports = function (SocketPosts) {
throw new Error('[[error:invalid-data]]');
}
+ const canMove = await privileges.topics.isAdminOrMod(data.tid, socket.uid);
+ if (!canMove) {
+ throw new Error('[[error:no-privileges]]');
+ }
+
for (const pid of data.pids) {
/* eslint-disable no-await-in-loop */
const canMove = await privileges.posts.canMove(pid, socket.uid);
diff --git a/src/topics/data.js b/src/topics/data.js
index 720d2e63ad..f518a5f5c0 100644
--- a/src/topics/data.js
+++ b/src/topics/data.js
@@ -11,7 +11,7 @@ const plugins = require('../plugins');
const intFields = [
'tid', 'cid', 'uid', 'mainPid', 'postcount',
'viewcount', 'postercount', 'deleted', 'locked', 'pinned',
- 'timestamp', 'upvotes', 'downvotes', 'lastposttime',
+ 'pinExpiry', 'timestamp', 'upvotes', 'downvotes', 'lastposttime',
'deleterUid',
];
@@ -110,6 +110,10 @@ function modifyTopic(topic, fields) {
topic.lastposttimeISO = utils.toISOString(topic.lastposttime);
}
+ if (topic.hasOwnProperty('pinExpiry')) {
+ topic.pinExpiryISO = utils.toISOString(topic.pinExpiry);
+ }
+
if (topic.hasOwnProperty('upvotes') && topic.hasOwnProperty('downvotes')) {
topic.votes = topic.upvotes - topic.downvotes;
}
diff --git a/src/topics/index.js b/src/topics/index.js
index 99adfc9df2..ff864d19a4 100644
--- a/src/topics/index.js
+++ b/src/topics/index.js
@@ -1,6 +1,7 @@
'use strict';
var _ = require('lodash');
+const validator = require('validator');
var db = require('../database');
var posts = require('../posts');
@@ -111,9 +112,10 @@ Topics.getTopicsByTids = async function (tids, options) {
result.topics.forEach(function (topic, i) {
if (topic) {
topic.category = result.categoriesMap[topic.cid];
- topic.user = result.usersMap[topic.uid];
+ topic.user = topic.uid ? result.usersMap[topic.uid] : { ...result.usersMap[topic.uid] };
if (result.tidToGuestHandle[topic.tid]) {
- topic.user.username = result.tidToGuestHandle[topic.tid];
+ topic.user.username = validator.escape(result.tidToGuestHandle[topic.tid]);
+ topic.user.displayname = topic.user.username;
}
topic.teaser = result.teasers[i] || null;
topic.tags = tags[i];
diff --git a/src/topics/merge.js b/src/topics/merge.js
index b3f5718422..2688ef69fc 100644
--- a/src/topics/merge.js
+++ b/src/topics/merge.js
@@ -32,7 +32,14 @@ module.exports = function (Topics) {
});
});
- plugins.hooks.fire('action:topic.merge', { uid: uid, tids: tids, mergeIntoTid: mergeIntoTid, otherTids: otherTids });
+ await updateViewCount(mergeIntoTid, tids);
+
+ plugins.hooks.fire('action:topic.merge', {
+ uid: uid,
+ tids: tids,
+ mergeIntoTid: mergeIntoTid,
+ otherTids: otherTids,
+ });
return mergeIntoTid;
};
@@ -46,6 +53,14 @@ module.exports = function (Topics) {
return tid;
}
+ async function updateViewCount(mergeIntoTid, tids) {
+ const topicData = await Topics.getTopicsFields(tids, ['viewcount']);
+ const totalViewCount = topicData.reduce(
+ (count, topic) => count + parseInt(topic.viewcount, 10), 0
+ );
+ await Topics.setTopicField(mergeIntoTid, 'viewcount', totalViewCount);
+ }
+
function findOldestTopic(tids) {
return Math.min.apply(null, tids);
}
diff --git a/src/topics/posts.js b/src/topics/posts.js
index ae631be1ae..9ebf29a315 100644
--- a/src/topics/posts.js
+++ b/src/topics/posts.js
@@ -68,6 +68,7 @@ module.exports = function (Topics) {
// Username override for guests, if enabled
if (meta.config.allowGuestHandles && postObj.uid === 0 && postObj.handle) {
postObj.user.username = validator.escape(String(postObj.handle));
+ postObj.user.displayname = postObj.user.username;
}
}
});
diff --git a/src/topics/tags.js b/src/topics/tags.js
index 967322da64..c68b7b9594 100644
--- a/src/topics/tags.js
+++ b/src/topics/tags.js
@@ -89,7 +89,16 @@ module.exports = function (Topics) {
return;
}
newTagName = utils.cleanUpTag(newTagName, meta.config.maximumTagLength);
+ const targetExists = await db.isSortedSetMember('tags:topic:count', newTagName);
await Topics.createEmptyTag(newTagName);
+ const tagData = await db.getObject('tag:' + tag);
+ if (tagData && !targetExists) {
+ await db.setObject('tag:' + newTagName, {
+ color: tagData.color,
+ bgColor: tagData.bgColor,
+ });
+ }
+
await batch.processSortedSet('tag:' + tag + ':topics', async function (tids) {
const scores = await db.sortedSetScores('tag:' + tag + ':topics', tids);
await db.sortedSetAdd('tag:' + newTagName + ':topics', scores, tids);
diff --git a/src/topics/tools.js b/src/topics/tools.js
index 5ddad97c01..c25e5c6bc0 100644
--- a/src/topics/tools.js
+++ b/src/topics/tools.js
@@ -168,6 +168,8 @@ module.exports = function (Topics) {
['cid:' + topicData.cid + ':tids:posts', topicData.postcount, tid],
['cid:' + topicData.cid + ':tids:votes', parseInt(topicData.votes, 10) || 0, tid],
]));
+ topicData.pinExpiry = undefined;
+ topicData.pinExpiryISO = undefined;
}
await Promise.all(promises);
diff --git a/src/upgrades/1.15.0/verified_users_group.js b/src/upgrades/1.15.0/verified_users_group.js
index 7e5bcd4c64..d09b5fa9e5 100644
--- a/src/upgrades/1.15.0/verified_users_group.js
+++ b/src/upgrades/1.15.0/verified_users_group.js
@@ -7,7 +7,7 @@ const user = require('../../user');
const groups = require('../../groups');
const meta = require('../../meta');
const privileges = require('../../privileges');
-
+const now = Date.now();
module.exports = {
name: 'Create verified/unverified user groups',
timestamp: Date.UTC(2020, 9, 13),
@@ -46,14 +46,17 @@ module.exports = {
const verified = userData.filter(u => parseInt(u['email:confirmed'], 10) === 1);
const unverified = userData.filter(u => parseInt(u['email:confirmed'], 10) !== 1);
- for (const user of verified) {
- // eslint-disable-next-line no-await-in-loop
- await groups.join('verified-users', user.uid);
- }
- for (const user of unverified) {
- // eslint-disable-next-line no-await-in-loop
- await groups.join('unverified-users', user.uid);
- }
+ await db.sortedSetAdd(
+ 'group:verified-users:members',
+ verified.map(() => now),
+ verified.map(u => u.uid)
+ );
+
+ await db.sortedSetAdd(
+ 'group:unverified-users:members',
+ unverified.map(() => now),
+ unverified.map(u => u.uid)
+ );
}, {
batch: 500,
progress: this.progress,
@@ -61,6 +64,11 @@ module.exports = {
await db.delete('users:notvalidated');
await updatePrivilges();
+
+ const verifiedCount = await db.sortedSetCard('group:verified-users:members');
+ const unverifiedCount = await db.sortedSetCard('group:unverified-users:members');
+ await db.setObjectField('group:verified-users', 'memberCount', verifiedCount);
+ await db.setObjectField('group:unverified-users', 'memberCount', unverifiedCount);
},
};
diff --git a/src/upgrades/1.15.4/clear_purged_replies.js b/src/upgrades/1.15.4/clear_purged_replies.js
new file mode 100644
index 0000000000..df4655116d
--- /dev/null
+++ b/src/upgrades/1.15.4/clear_purged_replies.js
@@ -0,0 +1,33 @@
+'use strict';
+
+const _ = require('lodash');
+const db = require('../../database');
+
+const batch = require('../../batch');
+
+module.exports = {
+ name: 'Clear purged replies and toPid',
+ timestamp: Date.UTC(2020, 10, 26),
+ method: async function () {
+ const progress = this.progress;
+
+ await batch.processSortedSet('posts:pid', async function (pids) {
+ progress.incr(pids.length);
+ let postData = await db.getObjects(pids.map(pid => 'post:' + pid));
+ postData = postData.filter(p => p && parseInt(p.toPid, 10));
+ if (!postData.length) {
+ return;
+ }
+ const toPids = postData.map(p => p.toPid);
+ const exists = await db.exists(toPids.map(pid => 'post:' + pid));
+ const pidsToDelete = postData.filter((p, index) => !exists[index]).map(p => p.pid);
+ await db.deleteObjectFields(pidsToDelete.map(pid => 'post:' + pid), ['toPid']);
+
+ const repliesToDelete = _.uniq(toPids.filter((pid, index) => !exists[index]));
+ await db.deleteAll(repliesToDelete.map(pid => 'pid:' + pid + ':replies'));
+ }, {
+ progress: progress,
+ batchSize: 500,
+ });
+ },
+};
diff --git a/src/user/admin.js b/src/user/admin.js
index 981fd921b4..45226bfe85 100644
--- a/src/user/admin.js
+++ b/src/user/admin.js
@@ -1,9 +1,12 @@
'use strict';
+const fs = require('fs');
+const path = require('path');
const winston = require('winston');
const validator = require('validator');
+const { baseDir } = require('../constants').paths;
const db = require('../database');
const plugins = require('../plugins');
const batch = require('../batch');
@@ -36,11 +39,35 @@ module.exports = function (User) {
await batch.processSortedSet('users:joindate', async (uids) => {
const usersData = await User.getUsersFields(uids, data.fields);
csvContent += usersData.reduce((memo, user) => {
- memo += user.email + ',' + user.username + ',' + user.uid + '\n';
+ memo += data.fields.map(field => user[field]).join(',') + '\n';
return memo;
}, '');
}, {});
return csvContent;
};
+
+ User.exportUsersCSV = async function () {
+ winston.verbose('[user/exportUsersCSV] Exporting User CSV data');
+
+ const data = await plugins.hooks.fire('filter:user.csvFields', { fields: ['email', 'username', 'uid'] });
+ const fd = await fs.promises.open(
+ path.join(baseDir, 'build/export', 'users.csv'),
+ 'w'
+ );
+ fs.promises.appendFile(fd, data.fields.join(',') + '\n');
+ await batch.processSortedSet('users:joindate', async (uids) => {
+ const usersData = await User.getUsersFields(uids, data.fields.slice());
+ let line = '';
+ usersData.forEach(function (user) {
+ line += data.fields.map(field => user[field]).join(',') + '\n';
+ });
+
+ await fs.promises.appendFile(fd, line);
+ }, {
+ batch: 5000,
+ interval: 250,
+ });
+ await fd.close();
+ };
};
diff --git a/src/user/approval.js b/src/user/approval.js
index 8ea5916610..507aa7ef1b 100644
--- a/src/user/approval.js
+++ b/src/user/approval.js
@@ -66,7 +66,10 @@ module.exports = function (User) {
}
const creation_time = await db.sortedSetScore('registration:queue', username);
const uid = await User.create(userData);
- await User.setUserField(uid, 'password', userData.hashedPassword);
+ await User.setUserFields(uid, {
+ password: userData.hashedPassword,
+ 'password:shaWrapped': 1,
+ });
await removeFromQueue(username);
await markNotificationRead(username);
await plugins.hooks.fire('filter:register.complete', { uid: uid });
diff --git a/src/user/auth.js b/src/user/auth.js
index 0a38609215..fdf318d156 100644
--- a/src/user/auth.js
+++ b/src/user/auth.js
@@ -107,8 +107,8 @@ module.exports = function (User) {
return;
}
await cleanExpiredSessions(uid);
- await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
await db.sortedSetAdd('uid:' + uid + ':sessions', Date.now(), sessionId);
+ await revokeSessionsAboveThreshold(uid, meta.config.maxUserSessions);
};
async function revokeSessionsAboveThreshold(uid, maxUserSessions) {
diff --git a/src/user/bans.js b/src/user/bans.js
index 464b8300bc..d35370cb57 100644
--- a/src/user/bans.js
+++ b/src/user/bans.js
@@ -3,7 +3,6 @@
const winston = require('winston');
const meta = require('../meta');
-const utils = require('../utils');
const emailer = require('../emailer');
const db = require('../database');
@@ -47,10 +46,11 @@ module.exports = function (User) {
// Email notification of ban
const username = await User.getUserField(uid, 'username');
const siteTitle = meta.config.title || 'NodeBB';
+
const data = {
subject: '[[email:banned.subject, ' + siteTitle + ']]',
username: username,
- until: until ? utils.toISOString(until) : false,
+ until: until ? (new Date(until)).toUTCString().replace(/,/g, '\\,') : false,
reason: reason,
};
try {
diff --git a/src/user/create.js b/src/user/create.js
index 51e7970e1c..b622a8b5a3 100644
--- a/src/user/create.js
+++ b/src/user/create.js
@@ -71,8 +71,12 @@ module.exports = function (User) {
userData = results.user;
const uid = await db.incrObjectField('global', 'nextUid');
+ const isFirstUser = uid === 1;
userData.uid = uid;
+ if (isFirstUser) {
+ userData['email:confirmed'] = 1;
+ }
await db.setObject('user:' + uid, userData);
const bulkAdd = [
@@ -97,8 +101,7 @@ module.exports = function (User) {
}
const groupsToJoin = ['registered-users'].concat(
- parseInt(userData.uid, 10) !== 1 ?
- 'unverified-users' : 'verified-users'
+ isFirstUser ? 'verified-users' : 'unverified-users'
);
await Promise.all([
diff --git a/src/user/delete.js b/src/user/delete.js
index d5ca3ccc4b..8168942244 100644
--- a/src/user/delete.js
+++ b/src/user/delete.js
@@ -36,6 +36,7 @@ module.exports = function (User) {
await deleteTopics(callerUid, uid);
await deleteUploads(uid);
await deleteQueued(uid);
+ delete deletesInProgress[uid];
};
async function deletePosts(callerUid, uid) {
diff --git a/src/user/info.js b/src/user/info.js
index 4c8f20ebe6..61de33f512 100644
--- a/src/user/info.js
+++ b/src/user/info.js
@@ -87,7 +87,9 @@ module.exports = function (User) {
delete flagObj.value;
delete flagObj.score;
-
+ if (!tids[idx]) {
+ flagObj.targetPurged = true;
+ }
return _.extend(flagObj, topicData[idx]);
});
return flags;
diff --git a/src/user/online.js b/src/user/online.js
index a4c2be313c..fd144cad05 100644
--- a/src/user/online.js
+++ b/src/user/online.js
@@ -7,6 +7,9 @@ var meta = require('../meta');
module.exports = function (User) {
User.updateLastOnlineTime = async function (uid) {
+ if (!(parseInt(uid, 10) > 0)) {
+ return;
+ }
const userData = await db.getObjectFields('user:' + uid, ['status', 'lastonline']);
const now = Date.now();
if (userData.status === 'offline' || now - parseInt(userData.lastonline, 10) < 300000) {
@@ -16,6 +19,9 @@ module.exports = function (User) {
};
User.updateOnlineUsers = async function (uid) {
+ if (!(parseInt(uid, 10) > 0)) {
+ return;
+ }
const now = Date.now();
const userOnlineTime = await db.sortedSetScore('users:online', uid);
if (now - parseInt(userOnlineTime, 10) < 300000) {
diff --git a/src/user/password.js b/src/user/password.js
index acb89a6c60..23a2816fd8 100644
--- a/src/user/password.js
+++ b/src/user/password.js
@@ -17,7 +17,10 @@ module.exports = function (User) {
User.isPasswordCorrect = async function (uid, password, ip) {
password = password || '';
- var { password: hashedPassword, 'password:shaWrapped': shaWrapped } = await db.getObjectFields('user:' + uid, ['password', 'password:shaWrapped']);
+ var {
+ password: hashedPassword,
+ 'password:shaWrapped': shaWrapped,
+ } = await db.getObjectFields('user:' + uid, ['password', 'password:shaWrapped']);
if (!hashedPassword) {
// Non-existant user, submit fake hash for comparison
hashedPassword = '';
diff --git a/src/user/picture.js b/src/user/picture.js
index 74642fe68b..23a1afe820 100644
--- a/src/user/picture.js
+++ b/src/user/picture.js
@@ -2,6 +2,8 @@
const winston = require('winston');
const mime = require('mime');
+const path = require('path');
+const nconf = require('nconf');
const db = require('../database');
const file = require('../file');
@@ -11,7 +13,11 @@ const plugins = require('../plugins');
module.exports = function (User) {
User.getAllowedProfileImageExtensions = function () {
- return User.getAllowedImageTypes().map(type => mime.getExtension(type));
+ const exts = User.getAllowedImageTypes().map(type => mime.getExtension(type));
+ if (exts.includes('jpeg')) {
+ exts.push('jpg');
+ }
+ return exts;
};
User.getAllowedImageTypes = function () {
@@ -48,9 +54,10 @@ module.exports = function (User) {
picture.path = await image.writeImageDataToTempFile(data.imageData);
const extension = file.typeToExtension(image.mimeFromBase64(data.imageData));
- const filename = data.uid + '-profilecover' + extension;
+ const filename = data.uid + '-profilecover-' + Date.now() + extension;
const uploadData = await image.uploadImage(filename, 'profile', picture);
+ await deleteCurrentPicture(data.uid, 'cover:url');
await User.setUserField(data.uid, 'cover:url', uploadData.url);
if (data.position) {
@@ -100,6 +107,7 @@ module.exports = function (User) {
name: 'profileAvatar',
});
+ await deleteCurrentPicture(data.uid, 'uploadedpicture');
await User.setUserFields(data.uid, {
uploadedpicture: uploadedImage.url,
picture: uploadedImage.url,
@@ -138,6 +146,7 @@ module.exports = function (User) {
const filename = generateProfileImageFilename(data.uid, extension);
const uploadedImage = await image.uploadImage(filename, 'profile', picture);
+ await deleteCurrentPicture(data.uid, 'uploadedpicture');
await User.setUserFields(data.uid, {
uploadedpicture: uploadedImage.url,
picture: uploadedImage.url,
@@ -148,6 +157,18 @@ module.exports = function (User) {
}
};
+ async function deleteCurrentPicture(uid, field) {
+ if (meta.config['profile:keepAllUserImages']) {
+ return;
+ }
+ const value = await User.getUserField(uid, field);
+ if (value && value.startsWith('/assets/uploads/profile/')) {
+ const filename = value.split('/').pop();
+ const uploadPath = path.join(nconf.get('upload_path'), 'profile', filename);
+ await file.delete(uploadPath);
+ }
+ }
+
function validateUpload(data, maxSize, allowedTypes) {
if (!data.imageData) {
throw new Error('[[error:invalid-data]]');
@@ -174,9 +195,8 @@ module.exports = function (User) {
}
function generateProfileImageFilename(uid, extension) {
- const keepAllVersions = meta.config['profile:keepAllUserImages'] === 1;
const convertToPNG = meta.config['profile:convertProfileImageToPNG'] === 1;
- return uid + '-profileavatar' + (keepAllVersions ? '-' + Date.now() : '') + (convertToPNG ? '.png' : extension);
+ return uid + '-profileavatar-' + Date.now() + (convertToPNG ? '.png' : extension);
}
User.removeCoverPicture = async function (data) {
diff --git a/src/user/reset.js b/src/user/reset.js
index 1e152e6909..eabf826c5a 100644
--- a/src/user/reset.js
+++ b/src/user/reset.js
@@ -11,6 +11,7 @@ const batch = require('../batch');
const db = require('../database');
const meta = require('../meta');
const emailer = require('../emailer');
+const Password = require('../password');
const UserReset = module.exports;
@@ -67,12 +68,28 @@ UserReset.commit = async function (code, password) {
if (!uid) {
throw new Error('[[error:reset-code-not-valid]]');
}
-
+ const userData = await db.getObjectFields(
+ 'user:' + uid,
+ ['password', 'passwordExpiry', 'password:shaWrapped']
+ );
+ const ok = await Password.compare(password, userData.password, !!parseInt(userData['password:shaWrapped'], 10));
+ if (ok) {
+ throw new Error('[[error:reset-same-password]]');
+ }
const hash = await user.hashPassword(password);
+ const data = {
+ password: hash,
+ 'password:shaWrapped': 1,
+ };
- await user.setUserFields(uid, { password: hash, 'email:confirmed': 1, 'password:shaWrapped': 1 });
- await groups.join('verified-users', uid);
- await groups.leave('unverified-users', uid);
+ // don't verify email if password reset is due to expiry
+ const isPasswordExpired = userData.passwordExpiry && userData.passwordExpiry < Date.now();
+ if (!isPasswordExpired) {
+ data['email:confirmed'] = 1;
+ await groups.join('verified-users', uid);
+ await groups.leave('unverified-users', uid);
+ }
+ await user.setUserFields(uid, data);
await db.deleteObjectField('reset:uid', code);
await db.sortedSetRemoveBulk([
['reset:issueDate', code],
diff --git a/src/views/admin/advanced/database.tpl b/src/views/admin/advanced/database.tpl
index 3d90e6813c..f63b77cb86 100644
--- a/src/views/admin/advanced/database.tpl
+++ b/src/views/admin/advanced/database.tpl
@@ -1,13 +1,12 @@
-
-
- {error.friendlyMessage}
-
- {error.errmsg}
-
-
+
{{{ if mongo }}}
+ {{{ if mongo.serverStatusError }}}
+
+ {mongo.serverStatusError}
+
+ {{{ end }}}
[[admin/advanced/database:mongo]]
diff --git a/src/views/admin/extend/widgets.tpl b/src/views/admin/extend/widgets.tpl
index 25d03f9829..35555e847d 100644
--- a/src/views/admin/extend/widgets.tpl
+++ b/src/views/admin/extend/widgets.tpl
@@ -1,9 +1,17 @@
diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl
index 48fb985066..332b82adf9 100644
--- a/src/views/admin/manage/category.tpl
+++ b/src/views/admin/manage/category.tpl
@@ -80,16 +80,6 @@
-
-
-
-
-
-
-
diff --git a/src/views/admin/manage/users.tpl b/src/views/admin/manage/users.tpl
index 826ed34411..0cdd099ae2 100644
--- a/src/views/admin/manage/users.tpl
+++ b/src/views/admin/manage/users.tpl
@@ -6,7 +6,7 @@
- [[admin/manage/users:download-csv]]
+ [[admin/manage/users:download-csv]]